# HG changeset patch # User Tomas Lindquist Olsen # Date 1217543526 -7200 # Node ID 44f08170f4efedb5bb27c37a5e5582d3fd72ece8 # Parent 76078c8ab5b9f797a8e828e550c86425e10059c4 Removed tango from the repository and instead added a runtime dir with the files needed to patch and build tango from svn. Reworked the LLVMDC specific pragmas. diff -r 76078c8ab5b9 -r 44f08170f4ef bin/llvmdc.conf --- a/bin/llvmdc.conf Thu Jul 31 19:14:49 2008 +0200 +++ b/bin/llvmdc.conf Fri Aug 01 00:32:06 2008 +0200 @@ -1,4 +1,4 @@ [Environment] -DFLAGS=-I%@P%/../tango -L-L%@P%/../lib -R%@P%/../lib +DFLAGS=-I%@P%/../tango -I%@P%/../tango/lib/common -I%@P%/../import -L-L%@P%/../lib -R%@P%/../lib diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/attrib.c --- a/dmd/attrib.c Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/attrib.c Fri Aug 01 00:32:06 2008 +0200 @@ -702,6 +702,20 @@ /********************************* PragmaDeclaration ****************************/ +static bool parseStringExp(Expression* e, std::string& res) +{ + StringExp *s = NULL; + + e = e->optimize(WANTvalue); + if (e->op == TOKstring && (s = (StringExp *)e)) + { + char* str = (char*)s->string; + res = str; + return true; + } + return false; +} + PragmaDeclaration::PragmaDeclaration(Loc loc, Identifier *ident, Expressions *args, Array *decl) : AttribDeclaration(decl) { @@ -725,7 +739,7 @@ #if IN_LLVM int llvm_internal = 0; - char* llvm_str1 = NULL; + std::string arg1str; #endif @@ -813,82 +827,93 @@ goto Lnodecl; } #endif + +// LLVMDC #if IN_LLVM - else if (ident == Id::LLVM_internal) + + // pragma(intrinsic, dotExpS) { funcdecl(s) } + else if (ident == Id::intrinsic) + { + Expression* expr = (Expression *)args->data[0]; + expr = expr->semantic(sc); + if (!args || args->dim != 1 || !parseStringExp(expr, arg1str)) + { + error("pragma intrinsic requires exactly 1 string literal parameter"); + fatal(); + } + llvm_internal = LLVMintrinsic; + } + + // pragma(va_intrinsic, dotExpS) { funcdecl(s) } + else if (ident == Id::va_intrinsic) { - if (!args || args->dim < 1 || args->dim > 2) - error("needs 1-3 parameters"); - else if (!decl || decl->dim < 1) - error("must apply to at least one declaration"); - else + Expression* expr = (Expression *)args->data[0]; + expr = expr->semantic(sc); + if (!args || args->dim != 1 || !parseStringExp(expr, arg1str)) { - Expression *e; - StringExp *s = NULL; + error("pragma va_intrinsic requires exactly 1 string literal parameter"); + fatal(); + } + llvm_internal = LLVMva_intrinsic; + } + + // pragma(notypeinfo) { typedecl(s) } + else if (ident == Id::no_typeinfo) + { + if (args && args->dim > 0) + { + error("pragma no_typeinfo takes no parameters"); + fatal(); + } + llvm_internal = LLVMno_typeinfo; + } - e = (Expression *)args->data[0]; - e = e->semantic(sc); - e = e->optimize(WANTvalue); - if (e->op == TOKstring && (s = (StringExp *)e)) - { - char* str = (char*)s->string; - if (strcmp(str,"intrinsic")==0) { - llvm_internal = LLVMintrinsic; - assert(args->dim == 2); - } - else if (strcmp(str,"va_start")==0) { - llvm_internal = LLVMva_start; - assert(args->dim == 1); - } - else if (strcmp(str,"va_arg")==0) { - llvm_internal = LLVMva_arg; - assert(args->dim == 1); - } - else if (strcmp(str,"va_intrinsic")==0) { - llvm_internal = LLVMva_intrinsic; - assert(args->dim == 2); - } - else if (strcmp(str,"notypeinfo")==0) { - llvm_internal = LLVMnotypeinfo; - assert(args->dim == 1); - } - else if (strcmp(str,"alloca")==0) { - llvm_internal = LLVMalloca; - assert(args->dim == 1); - } - else { - error("unknown pragma command: %s", str); - } - } - else - error("1st argument must be a string"); + // pragma(nomoduleinfo) ; + else if (ident == Id::no_moduleinfo) + { + if (args && args->dim > 0) + { + error("pragma no_moduleinfo takes no parameters"); + fatal(); + } + llvm_internal = LLVMno_moduleinfo; + } + + // pragma(alloca) { funcdecl(s) } + else if (ident == Id::alloca) + { + if (args && args->dim > 0) + { + error("pragma alloca takes no parameters"); + fatal(); + } + llvm_internal = LLVMalloca; + } - if (llvm_internal) - switch (llvm_internal) - { - case LLVMintrinsic: - case LLVMva_intrinsic: - e = (Expression *)args->data[1]; - e = e->semantic(sc); - e = e->optimize(WANTvalue); - if (e->op == TOKstring && (s = (StringExp *)e)) { - llvm_str1 = (char*)s->string; - } - else - error("2nd argument must be a string"); - break; + // pragma(va_start) { templdecl(s) } + else if (ident == Id::va_start) + { + if (args && args->dim > 0) + { + error("pragma va_start takes no parameters"); + fatal(); + } + llvm_internal = LLVMva_start; + } - case LLVMva_arg: - case LLVMva_start: - case LLVMnotypeinfo: - case LLVMalloca: - break; + // pragma(va_arg) { templdecl(s) } + else if (ident == Id::va_arg) + { + if (args && args->dim > 0) + { + error("pragma va_arg takes no parameters"); + fatal(); + } + llvm_internal = LLVMva_arg; + } - default: - assert(0); - } - } - } -#endif +#endif // LLVMDC + else if (global.params.ignoreUnsupportedPragmas) { if (global.params.verbose) @@ -926,60 +951,84 @@ Dsymbol *s = (Dsymbol *)decl->data[i]; s->semantic(sc); - + +// LLVMDC #if IN_LLVM + if (llvm_internal) { - switch(llvm_internal) + if (s->llvmInternal) + { + error("multiple LLVMDC specific pragmas not allowed not affect the same declaration (%s at '%s')", s->toChars(), s->loc.toChars()); + fatal(); + } + switch(llvm_internal) + { + case LLVMintrinsic: + case LLVMva_intrinsic: + if (FuncDeclaration* fd = s->isFuncDeclaration()) { - case LLVMintrinsic: - case LLVMva_intrinsic: - if (FuncDeclaration* fd = s->isFuncDeclaration()) { - fd->llvmInternal = llvm_internal; - fd->llvmInternal1 = llvm_str1; - } - else { - error("may only be used on function declarations"); - assert(0); + fd->llvmInternal = llvm_internal; + fd->intrinsicName = arg1str; + } + else + { + error("intrinsic pragmas are only allowed to affect function declarations"); + fatal(); + } + break; + + case LLVMva_start: + case LLVMva_arg: + if (TemplateDeclaration* td = s->isTemplateDeclaration()) + { + if (td->parameters->dim != 1) + { + error("the %s pragma template must have exactly one template parameter", ident->toChars()); + fatal(); } - break; - - case LLVMva_start: - case LLVMva_arg: - if (TemplateDeclaration* td = s->isTemplateDeclaration()) { - td->llvmInternal = llvm_internal; - assert(td->parameters->dim == 1); - assert(!td->overnext); - assert(!td->overroot); - assert(td->onemember); - Logger::println("template->onemember = %s", td->onemember->toChars()); + else if (!td->onemember) + { + error("the %s pragma template must have exactly one member", ident->toChars()); + fatal(); } - else { - error("can only be used on templates"); - assert(0); + else if (td->overnext || td->overroot) + { + error("the %s pragma template must not be overloaded", ident->toChars()); + fatal(); } - break; + td->llvmInternal = llvm_internal; + } + else + { + error("the %s pragma is only allowed on template declarations", ident->toChars()); + fatal(); + } + break; - case LLVMnotypeinfo: - s->llvmInternal = llvm_internal; - break; + case LLVMno_typeinfo: + s->llvmInternal = llvm_internal; + break; - case LLVMalloca: - if (FuncDeclaration* fd = s->isFuncDeclaration()) { - fd->llvmInternal = llvm_internal; - } - else { - error("may only be used on function declarations"); - assert(0); - } - break; + case LLVMalloca: + if (FuncDeclaration* fd = s->isFuncDeclaration()) + { + fd->llvmInternal = llvm_internal; + } + else + { + error("the %s pragma must only be used on function declarations of type 'void* function(uint nbytes)'", ident->toChars()); + fatal(); + } + break; - default: - assert(0 && "invalid LLVM_internal pragma got through :/"); - } + default: + warning("LLVMDC specific pragma %s not yet implemented, ignoring", ident->toChars()); + } } - -#endif + +#endif // LLVMDC + } } return; diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/declaration.h --- a/dmd/declaration.h Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/declaration.h Fri Aug 01 00:32:06 2008 +0200 @@ -17,6 +17,7 @@ #include #include +#include #include "dsymbol.h" #include "lexer.h" @@ -639,6 +640,7 @@ // llvmdc stuff std::set nestedVars; + std::string intrinsicName; // we keep our own table of label statements as LabelDsymbolS // don't always carry their corresponding statement along ... diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/dsymbol.c --- a/dmd/dsymbol.c Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/dsymbol.c Fri Aug 01 00:32:06 2008 +0200 @@ -45,8 +45,6 @@ this->comment = NULL; this->llvmInternal = LLVMnone; - this->llvmInternal1 = NULL; - this->llvmInternal2 = NULL; } Dsymbol::Dsymbol(Identifier *ident) @@ -61,8 +59,6 @@ this->comment = NULL; this->llvmInternal = LLVMnone; - this->llvmInternal1 = NULL; - this->llvmInternal2 = NULL; } int Dsymbol::equals(Object *o) diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/dsymbol.h --- a/dmd/dsymbol.h Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/dsymbol.h Fri Aug 01 00:32:06 2008 +0200 @@ -220,12 +220,10 @@ virtual AttribDeclaration *isAttribDeclaration() { return NULL; } virtual TypeInfoDeclaration* isTypeInfoDeclaration() { return NULL; } virtual ClassInfoDeclaration* isClassInfoDeclaration() { return NULL; } - + // llvm stuff int llvmInternal; - char* llvmInternal1; - char* llvmInternal2; - + IrDsymbol ir; }; diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/func.c --- a/dmd/func.c Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/func.c Fri Aug 01 00:32:06 2008 +0200 @@ -90,6 +90,10 @@ f->fensure = fensure ? fensure->syntaxCopy() : NULL; f->fbody = fbody ? fbody->syntaxCopy() : NULL; assert(!fthrows); // deprecated + + // LLVMDC + f->intrinsicName = intrinsicName; + return f; } diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/id.c --- a/dmd/id.c Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/id.c Fri Aug 01 00:32:06 2008 +0200 @@ -167,11 +167,15 @@ Identifier *Id::lib; Identifier *Id::msg; Identifier *Id::GNU_asm; -Identifier *Id::LLVM_intrinsic; -Identifier *Id::LLVM_internal; +Identifier *Id::intrinsic; +Identifier *Id::va_intrinsic; +Identifier *Id::no_typeinfo; +Identifier *Id::no_moduleinfo; +Identifier *Id::alloca; +Identifier *Id::va_start; +Identifier *Id::va_arg; Identifier *Id::tohash; Identifier *Id::tostring; -Identifier *Id::alloca; Identifier *Id::main; Identifier *Id::WinMain; Identifier *Id::DllMain; @@ -342,11 +346,15 @@ lib = Lexer::idPool("lib"); msg = Lexer::idPool("msg"); GNU_asm = Lexer::idPool("GNU_asm"); - LLVM_intrinsic = Lexer::idPool("LLVM_intrinsic"); - LLVM_internal = Lexer::idPool("LLVM_internal"); + intrinsic = Lexer::idPool("intrinsic"); + va_intrinsic = Lexer::idPool("va_intrinsic"); + no_typeinfo = Lexer::idPool("no_typeinfo"); + no_moduleinfo = Lexer::idPool("no_moduleinfo"); + alloca = Lexer::idPool("alloca"); + va_start = Lexer::idPool("va_start"); + va_arg = Lexer::idPool("va_arg"); tohash = Lexer::idPool("toHash"); tostring = Lexer::idPool("toString"); - alloca = Lexer::idPool("alloca"); main = Lexer::idPool("main"); WinMain = Lexer::idPool("WinMain"); DllMain = Lexer::idPool("DllMain"); diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/id.h --- a/dmd/id.h Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/id.h Fri Aug 01 00:32:06 2008 +0200 @@ -169,11 +169,15 @@ static Identifier *lib; static Identifier *msg; static Identifier *GNU_asm; - static Identifier *LLVM_intrinsic; - static Identifier *LLVM_internal; + static Identifier *intrinsic; + static Identifier *va_intrinsic; + static Identifier *no_typeinfo; + static Identifier *no_moduleinfo; + static Identifier *alloca; + static Identifier *va_start; + static Identifier *va_arg; static Identifier *tohash; static Identifier *tostring; - static Identifier *alloca; static Identifier *main; static Identifier *WinMain; static Identifier *DllMain; diff -r 76078c8ab5b9 -r 44f08170f4ef dmd/idgen.c --- a/dmd/idgen.c Thu Jul 31 19:14:49 2008 +0200 +++ b/dmd/idgen.c Fri Aug 01 00:32:06 2008 +0200 @@ -212,15 +212,22 @@ { "lib" }, { "msg" }, { "GNU_asm" }, - { "LLVM_intrinsic" }, - { "LLVM_internal" }, + + // LLVMDC pragma's + { "intrinsic" }, + { "va_intrinsic" }, + { "no_typeinfo" }, + { "no_moduleinfo" }, + { "alloca" }, + { "va_start" }, + { "va_arg" }, // For toHash/toString { "tohash", "toHash" }, { "tostring", "toString" }, // Special functions - { "alloca" }, + //{ "alloca" }, { "main" }, { "WinMain" }, { "DllMain" }, diff -r 76078c8ab5b9 -r 44f08170f4ef gen/enums.h --- a/gen/enums.h Thu Jul 31 19:14:49 2008 +0200 +++ b/gen/enums.h Fri Aug 01 00:32:06 2008 +0200 @@ -2,9 +2,10 @@ { LLVMnone, LLVMintrinsic, - LLVMva_arg, + LLVMva_intrinsic, + LLVMno_typeinfo, + LLVMno_moduleinfo, + LLVMalloca, LLVMva_start, - LLVMva_intrinsic, - LLVMnotypeinfo, - LLVMalloca + LLVMva_arg }; diff -r 76078c8ab5b9 -r 44f08170f4ef gen/functions.cpp --- a/gen/functions.cpp Thu Jul 31 19:14:49 2008 +0200 +++ b/gen/functions.cpp Fri Aug 01 00:32:06 2008 +0200 @@ -253,7 +253,7 @@ assert(fn); } else if (fdecl->llvmInternal == LLVMva_intrinsic) { - fn = gIR->module->getOrInsertFunction(fdecl->llvmInternal1, fty); + fn = gIR->module->getOrInsertFunction(fdecl->intrinsicName, fty); assert(fn); } else @@ -405,9 +405,9 @@ } // mangled name - char* mangled_name; + const char* mangled_name; if (fdecl->llvmInternal == LLVMintrinsic) - mangled_name = fdecl->llvmInternal1; + mangled_name = fdecl->intrinsicName.c_str(); else mangled_name = fdecl->mangle(); diff -r 76078c8ab5b9 -r 44f08170f4ef gen/structs.cpp --- a/gen/structs.cpp Thu Jul 31 19:14:49 2008 +0200 +++ b/gen/structs.cpp Fri Aug 01 00:32:06 2008 +0200 @@ -361,7 +361,7 @@ gIR->structs.pop_back(); // emit typeinfo - if (sd->getModule() == gIR->dmodule && sd->llvmInternal != LLVMnotypeinfo) + if (sd->getModule() == gIR->dmodule && sd->llvmInternal != LLVMno_typeinfo) DtoTypeInfoOf(sd->type, false); } diff -r 76078c8ab5b9 -r 44f08170f4ef gen/toir.cpp --- a/gen/toir.cpp Thu Jul 31 19:14:49 2008 +0200 +++ b/gen/toir.cpp Fri Aug 01 00:32:06 2008 +0200 @@ -758,8 +758,11 @@ FuncDeclaration* fndecl = dfnval->func; // va_start instruction if (fndecl->llvmInternal == LLVMva_start) { - // TODO - assert(0 && "va_start not yet implemented"); + // llvm doesn't need the second param hence the override + Expression* exp = (Expression*)arguments->data[0]; + DValue* expv = exp->toElem(p); + LLValue* arg = DtoBitCast(expv->getLVal(), getVoidPtrType()); + return new DImValue(type, gIR->ir->CreateCall(GET_INTRINSIC_DECL(vastart), arg, "")); } // va_arg instruction else if (fndecl->llvmInternal == LLVMva_arg) { diff -r 76078c8ab5b9 -r 44f08170f4ef import/llvmdc/cstdarg.di --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/import/llvmdc/cstdarg.di Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,29 @@ +/* + * vararg support for extern(C) functions + */ + +module llvmdc.cstdarg; + +// Check for the right compiler +version(LLVMDC) +{ + // OK +} +else +{ + static assert(false, "This module is only valid for LLVMDC"); +} + +alias void* va_list; + +pragma(va_start) + void va_start(T)(va_list ap, ref T); + +pragma(va_arg) + T va_arg(T)(va_list ap); + +pragma(va_intrinsic, "llvm.va_end") + void va_end(va_list args); + +pragma(va_intrinsic, "llvm.va_copy") + void va_copy(va_list dst, va_list src); diff -r 76078c8ab5b9 -r 44f08170f4ef import/llvmdc/intrinsics.di --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/import/llvmdc/intrinsics.di Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,267 @@ +/* + * This module holds declarations to LLVM intrinsics. + * + * See the LLVM language reference for more information: + * + * - http://llvm.org/docs/LangRef.html#intrinsics + * + */ + +module llvmdc.intrinsics; + +// Check for the right compiler +version(LLVMDC) +{ + // OK +} +else +{ + static assert(false, "This module is only valid for LLVMDC"); +} + +// +// CODE GENERATOR INTRINSICS +// + + +// The 'llvm.returnaddress' intrinsic attempts to compute a target-specific value indicating the return address of the current function or one of its callers. + +pragma(intrinsic, "llvm.returnaddress") + void* llvm_returnaddress(uint level); + + +// The 'llvm.frameaddress' intrinsic attempts to return the target-specific frame pointer value for the specified stack frame. + +pragma(intrinsic, "llvm.frameaddress") + void* llvm_frameaddress(uint level); + + +// The 'llvm.stacksave' intrinsic is used to remember the current state of the function stack, for use with llvm.stackrestore. This is useful for implementing language features like scoped automatic variable sized arrays in C99. + +pragma(intrinsic, "llvm.stacksave") + void* llvm_stacksave(); + + +// The 'llvm.stackrestore' intrinsic is used to restore the state of the function stack to the state it was in when the corresponding llvm.stacksave intrinsic executed. This is useful for implementing language features like scoped automatic variable sized arrays in C99. + +pragma(intrinsic, "llvm.stackrestore") + void llvm_stackrestore(void* ptr); + + +// The 'llvm.prefetch' intrinsic is a hint to the code generator to insert a prefetch instruction if supported; otherwise, it is a noop. Prefetches have no effect on the behavior of the program but can change its performance characteristics. + +pragma(intrinsic, "llvm.prefetch") + void llvm_prefetch(void* ptr, uint rw, uint locality); + + +// The 'llvm.pcmarker' intrinsic is a method to export a Program Counter (PC) in a region of code to simulators and other tools. The method is target specific, but it is expected that the marker will use exported symbols to transmit the PC of the marker. The marker makes no guarantees that it will remain with any specific instruction after optimizations. It is possible that the presence of a marker will inhibit optimizations. The intended use is to be inserted after optimizations to allow correlations of simulation runs. + +pragma(intrinsic, "llvm.pcmarker") + void llvm_pcmarker(uint id); + + +// The 'llvm.readcyclecounter' intrinsic provides access to the cycle counter register (or similar low latency, high accuracy clocks) on those targets that support it. On X86, it should map to RDTSC. On Alpha, it should map to RPCC. As the backing counters overflow quickly (on the order of 9 seconds on alpha), this should only be used for small timings. + +pragma(intrinsic, "llvm.readcyclecounter") + ulong readcyclecounter(); + + + + +// +// STANDARD C LIBRARY INTRINSICS +// + + +// The 'llvm.memcpy.*' intrinsics copy a block of memory from the source location to the destination location. +// Note that, unlike the standard libc function, the llvm.memcpy.* intrinsics do not return a value, and takes an extra alignment argument. + +pragma(intrinsic, "llvm.memcpy.i32") + void llvm_memcpy_i32(void* dst, void* src, uint len, uint alignment); +pragma(intrinsic, "llvm.memcpy.i64") + void llvm_memcpy_i64(void* dst, void* src, ulong len, uint alignment); + + +// The 'llvm.memmove.*' intrinsics move a block of memory from the source location to the destination location. It is similar to the 'llvm.memcpy' intrinsic but allows the two memory locations to overlap. +// Note that, unlike the standard libc function, the llvm.memmove.* intrinsics do not return a value, and takes an extra alignment argument. + +pragma(intrinsic, "llvm.memmove.i32") + void llvm_memmove_i32(void* dst, void* src, uint len, uint alignment); +pragma(intrinsic, "llvm.memmove.i64") + void llvm_memmove_i64(void* dst, void* src, ulong len, int alignment); + + +// The 'llvm.memset.*' intrinsics fill a block of memory with a particular byte value. +// Note that, unlike the standard libc function, the llvm.memset intrinsic does not return a value, and takes an extra alignment argument. + +pragma(intrinsic, "llvm.memset.i32") + void llvm_memset_i32(void* dst, ubyte val, uint len, uint alignment); +pragma(intrinsic, "llvm.memset.i64") + void llvm_memset_i64(void* dst, ubyte val, ulong len, uint alignment); + + +// The 'llvm.sqrt' intrinsics return the sqrt of the specified operand, returning the same value as the libm 'sqrt' functions would. Unlike sqrt in libm, however, llvm.sqrt has undefined behavior for negative numbers other than -0.0 (which allows for better optimization, because there is no need to worry about errno being set). llvm.sqrt(-0.0) is defined to return -0.0 like IEEE sqrt. + +pragma(intrinsic, "llvm.sqrt.f32") + float llvm_sqrt_f32(float val); +pragma(intrinsic, "llvm.sqrt.f64") + double llvm_sqrt_f64(double val); +version(LLVM_X86_FP80) +{ +pragma(intrinsic, "llvm.sqrt.f80") + real llvm_sqrt_f80(real val); +} + + +// The 'llvm.sin.*' intrinsics return the sine of the operand. + +pragma(intrinsic, "llvm.sin.f32") + float llvm_sin_f32(float val); +pragma(intrinsic, "llvm.sin.f64") + double llvm_sin_f64(double val); +version(LLVM_X86_FP80) +{ +pragma(intrinsic, "llvm.sin.f80") + real llvm_sin_f80(real val); +} + + +// The 'llvm.cos.*' intrinsics return the cosine of the operand. + +pragma(intrinsic, "llvm.cos.f32") + float llvm_cos_f32(float val); +pragma(intrinsic, "llvm.cos.f64") + double llvm_cos_f64(double val); +version(LLVM_X86_FP80) +{ +pragma(intrinsic, "llvm.cos.f80") + real llvm_cos_f80(real val); +} + + +// The 'llvm.powi.*' intrinsics return the first operand raised to the specified (positive or negative) power. The order of evaluation of multiplications is not defined. When a vector of floating point type is used, the second argument remains a scalar integer value. + +pragma(intrinsic, "llvm.powi.f32") + float llvm_powi_f32(float val, int power); + +pragma(intrinsic, "llvm.powi.f64") + double llvm_powi_f64(double val, int power); +version(LLVM_X86_FP80) +{ +pragma(intrinsic, "llvm.powi.f80") + real llvm_powi_f80(real val, int power); +} + + +// The 'llvm.pow.*' intrinsics return the first operand raised to the specified (positive or negative) power. + +pragma(intrinsic, "llvm.pow.f32") + float llvm_pow_f32(float val, float power); + +pragma(intrinsic, "llvm.pow.f64") + double llvm_pow_f64(double val, double power); +version(LLVM_X86_FP80) +{ +pragma(intrinsic, "llvm.pow.f80") + real llvm_pow_f80(real val, real power); +} + + + + +// +// BIT MANIPULATION INTRINSICS +// + +// The 'llvm.bswap' family of intrinsics is used to byte swap integer values with an even number of bytes (positive multiple of 16 bits). These are useful for performing operations on data that is not in the target's native byte order. + +pragma(intrinsic, "llvm.bswap.i16.i16") + ushort llvm_bswap_i16(ushort val); + +pragma(intrinsic, "llvm.bswap.i32.i32") + uint llvm_bswap_i32(uint val); + +pragma(intrinsic, "llvm.bswap.i64.i64") + ulong llvm_bswap_i64(ulong val); + + +// The 'llvm.ctpop' family of intrinsics counts the number of bits set in a value. + +pragma(intrinsic, "llvm.ctpop.i8") + ubyte llvm_ctpop_i8(ubyte src); + +pragma(intrinsic, "llvm.ctpop.i16") + ushort llvm_ctpop_i16(ushort src); + +pragma(intrinsic, "llvm.ctpop.i32") + uint llvm_ctpop_i32(uint src); + +pragma(intrinsic, "llvm.ctpop.i64") + ulong llvm_ctpop_i64(ulong src); + + +// The 'llvm.ctlz' family of intrinsic functions counts the number of leading zeros in a variable. + +pragma(intrinsic, "llvm.ctlz.i8") + ubyte llvm_ctlz_i8(ubyte src); + +pragma(intrinsic, "llvm.ctlz.i16") + ushort llvm_ctlz_i16(ushort src); + +pragma(intrinsic, "llvm.ctlz.i32") + uint llvm_ctlz_i32(uint src); + +pragma(intrinsic, "llvm.ctlz.i64") + ulong llvm_ctlz_i64(ulong src); + + +// The 'llvm.cttz' family of intrinsic functions counts the number of trailing zeros. + +pragma(intrinsic, "llvm.cttz.i8") + ubyte llvm_cttz_i8(ubyte src); + +pragma(intrinsic, "llvm.cttz.i16") + ushort llvm_cttz_i16(ushort src); + +pragma(intrinsic, "llvm.cttz.i32") + uint llvm_cttz_i32(uint src); + +pragma(intrinsic, "llvm.cttz.i64") + ulong llvm_cttz_i64(ulong src); + + +// The 'llvm.part.select' family of intrinsic functions selects a range of bits from an integer value and returns them in the same bit width as the original value. + +pragma(intrinsic, "llvm.part.select.i8") + ubyte llvm_part_select_i(ubyte val, uint loBit, uint hiBit); + +pragma(intrinsic, "llvm.part.select.i16") + ushort llvm_part_select_i(ushort val, uint loBit, uint hiBit); + +pragma(intrinsic, "llvm.part.select.i32") + uint llvm_part_select_i(uint val, uint loBit, uint hiBit); + +pragma(intrinsic, "llvm.part.select.i64") + ulong llvm_part_select_i(ulong val, uint loBit, uint hiBit); + + + + +// +// ATOMIC OPERATIONS AND SYNCHRONIZATION INTRINSICS +// + +// TODO + + + + +// +// GENERAL INTRINSICS +// + + +// This intrinsics is lowered to the target dependent trap instruction. If the target does not have a trap instruction, this intrinsic will be lowered to the call of the abort() function. + +pragma(intrinsic, "llvm.trap") + void llvm_trap(); diff -r 76078c8ab5b9 -r 44f08170f4ef llvmdc-tango --- a/llvmdc-tango Thu Jul 31 19:14:49 2008 +0200 +++ b/llvmdc-tango Fri Aug 01 00:32:06 2008 +0200 @@ -13,7 +13,7 @@ noversion=GNU testversion=linux testversion=Unix -version=Posix +testversion=Posix testversion=Windows testversion=Win32 testversion=Win64 @@ -29,6 +29,7 @@ testversion=LittleEndian testversion=BigEndian testversion=LLVM64 +textversion=LLVM_X86_FP80 [compile] diff -r 76078c8ab5b9 -r 44f08170f4ef llvmdc.kdevelop --- a/llvmdc.kdevelop Thu Jul 31 19:14:49 2008 +0200 +++ b/llvmdc.kdevelop Fri Aug 01 00:32:06 2008 +0200 @@ -362,6 +362,50 @@ tests/dstress/ifeq__.c tests/dstress/return__.c e2ir.c + tango-llvmdc + tango-llvmdc/lib + tango-llvmdc/lib/common + tango-llvmdc/lib/common/tango + tango-llvmdc/lib/common/tango/stdc + tango-llvmdc/lib/common/tango/stdc/wrap.c + tango-llvmdc/lib/compiler + tango-llvmdc/lib/compiler/dmd + tango-llvmdc/lib/compiler/dmd/complex.c + tango-llvmdc/lib/compiler/dmd/critical.c + tango-llvmdc/lib/compiler/dmd/deh.c + tango-llvmdc/lib/compiler/dmd/mars.h + tango-llvmdc/lib/compiler/dmd/monitor.c + tango-llvmdc/lib/compiler/gdc + tango-llvmdc/lib/compiler/gdc/config + tango-llvmdc/lib/compiler/gdc/config/gen_config1.c + tango-llvmdc/lib/compiler/gdc/config/gen_math.c + tango-llvmdc/lib/compiler/gdc/config/gen_unix.c + tango-llvmdc/lib/compiler/gdc/config/makestruct.h + tango-llvmdc/lib/compiler/gdc/critical.c + tango-llvmdc/lib/compiler/gdc/deh.c + tango-llvmdc/lib/compiler/gdc/gcc + tango-llvmdc/lib/compiler/gdc/gcc/aix_float.h + tango-llvmdc/lib/compiler/gdc/gcc/cbridge_fdset.c + tango-llvmdc/lib/compiler/gdc/gcc/cbridge_math.c + tango-llvmdc/lib/compiler/gdc/gcc/cbridge_stdio.c + tango-llvmdc/lib/compiler/gdc/gcc/cbridge_time.c + tango-llvmdc/lib/compiler/gdc/mars.h + tango-llvmdc/lib/compiler/gdc/memory_dyld.c + tango-llvmdc/lib/compiler/gdc/memory_freebsd.c + tango-llvmdc/lib/compiler/gdc/monitor.c + tango-llvmdc/lib/compiler/llvmdc + tango-llvmdc/lib/compiler/llvmdc/critical.c + tango-llvmdc/lib/compiler/llvmdc/mars.h + tango-llvmdc/lib/compiler/llvmdc/monitor.c + tango-llvmdc/patches + tango-llvmdc/patches/proposals + tango-llvmdc/patches/proposals/integrated_locks + tango-llvmdc/patches/proposals/integrated_locks/lib + tango-llvmdc/patches/proposals/integrated_locks/lib/compiler + tango-llvmdc/patches/proposals/integrated_locks/lib/compiler/dmd + tango-llvmdc/patches/proposals/integrated_locks/lib/compiler/dmd/monitor.c + tango-llvmdc/patches/proposals/integrated_locks/lib/compiler/gdc + tango-llvmdc/patches/proposals/integrated_locks/lib/compiler/gdc/monitor.c make diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/README --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/README Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,11 @@ +1) Do a checkout of tango trunk in the llvmdc root dir (along dmd, gen, runtime etc). + + * svn co http://svn.dsource.org/projects/tango/trunk ../tango + +2) Patch the runtime + + * sh patch-tango.sh + +3) Compile the runtime + + * sh build.sh diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/build.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/build.sh Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,17 @@ +#!/bin/bash + +# I'm no good bash scripter ... + +# copy imports +cp -u internal/llvmdc/bitmanip.d ../import/llvmdc/bitmanip.di +cp -u internal/llvmdc/vararg.d ../import/llvmdc/vararg.di + +# make the runtime +cp -Ru lib ../tango +cd ../tango/lib +make -f llvmdc-posix.mak clean +make -f llvmdc-posix.mak + +# install the runtime +rm -f ../../lib/libtango-base-llvmdc-native.a +cp -s `pwd`/libtango-base-llvmdc-native.a ../../lib diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/aApply.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/aApply.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,406 @@ +/** + * Part of the D programming language runtime library. + */ + +/* + * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +/* This code handles decoding UTF strings for foreach loops. + * There are 6 combinations of conversions between char, wchar, + * and dchar, and 2 of each of those. + */ + +private import util.utf; + +/********************************************** + */ + +// dg is D, but _aApplycd() is C +extern (D) typedef int delegate(void *) dg_t; + +extern (C) int _aApplycd1(char[] aa, dg_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplycd1(), len = %d\n", len); + for (i = 0; i < len; ) + { dchar d; + + d = aa[i]; + if (d & 0x80) + d = decode(aa, i); + else + i++; + result = dg(cast(void *)&d); + if (result) + break; + } + return result; +} + +extern (C) int _aApplywd1(wchar[] aa, dg_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplywd1(), len = %d\n", len); + for (i = 0; i < len; ) + { dchar d; + + d = aa[i]; + if (d & ~0x7F) + d = decode(aa, i); + else + i++; + result = dg(cast(void *)&d); + if (result) + break; + } + return result; +} + +extern (C) int _aApplycw1(char[] aa, dg_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplycw1(), len = %d\n", len); + for (i = 0; i < len; ) + { dchar d; + wchar w; + + w = aa[i]; + if (w & 0x80) + { d = decode(aa, i); + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar)((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(cast(void *)&w); + if (result) + break; + w = cast(wchar)(((d - 0x10000) & 0x3FF) + 0xDC00); + } + } + else + i++; + result = dg(cast(void *)&w); + if (result) + break; + } + return result; +} + +extern (C) int _aApplywc1(wchar[] aa, dg_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplywc1(), len = %d\n", len); + for (i = 0; i < len; ) + { dchar d; + wchar w; + char c; + + w = aa[i]; + if (w & ~0x7F) + { + char[4] buf; + + d = decode(aa, i); + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { c = cast(char)w; + i++; + } + result = dg(cast(void *)&c); + if (result) + break; + } + return result; +} + +extern (C) int _aApplydc1(dchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplydc1(), len = %d\n", aa.length); + foreach (dchar d; aa) + { + char c; + + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { + c = cast(char)d; + } + result = dg(cast(void *)&c); + if (result) + break; + } + return result; +} + +extern (C) int _aApplydw1(dchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplydw1(), len = %d\n", aa.length); + foreach (dchar d; aa) + { + wchar w; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar)((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(cast(void *)&w); + if (result) + break; + w = cast(wchar)(((d - 0x10000) & 0x3FF) + 0xDC00); + } + result = dg(cast(void *)&w); + if (result) + break; + } + return result; +} + + +/****************************************************************************/ + +// dg is D, but _aApplycd2() is C +extern (D) typedef int delegate(void *, void *) dg2_t; + +extern (C) int _aApplycd2(char[] aa, dg2_t dg) +{ int result; + size_t i; + size_t n; + size_t len = aa.length; + + debug(apply) printf("_aApplycd2(), len = %d\n", len); + for (i = 0; i < len; i += n) + { dchar d; + + d = aa[i]; + if (d & 0x80) + { + n = i; + d = decode(aa, n); + n -= i; + } + else + n = 1; + result = dg(&i, cast(void *)&d); + if (result) + break; + } + return result; +} + +extern (C) int _aApplywd2(wchar[] aa, dg2_t dg) +{ int result; + size_t i; + size_t n; + size_t len = aa.length; + + debug(apply) printf("_aApplywd2(), len = %d\n", len); + for (i = 0; i < len; i += n) + { dchar d; + + d = aa[i]; + if (d & ~0x7F) + { + n = i; + d = decode(aa, n); + n -= i; + } + else + n = 1; + result = dg(&i, cast(void *)&d); + if (result) + break; + } + return result; +} + +extern (C) int _aApplycw2(char[] aa, dg2_t dg) +{ int result; + size_t i; + size_t n; + size_t len = aa.length; + + debug(apply) printf("_aApplycw2(), len = %d\n", len); + for (i = 0; i < len; i += n) + { dchar d; + wchar w; + + w = aa[i]; + if (w & 0x80) + { n = i; + d = decode(aa, n); + n -= i; + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(&i, cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + } + else + n = 1; + result = dg(&i, cast(void *)&w); + if (result) + break; + } + return result; +} + +extern (C) int _aApplywc2(wchar[] aa, dg2_t dg) +{ int result; + size_t i; + size_t n; + size_t len = aa.length; + + debug(apply) printf("_aApplywc2(), len = %d\n", len); + for (i = 0; i < len; i += n) + { dchar d; + wchar w; + char c; + + w = aa[i]; + if (w & ~0x7F) + { + char[4] buf; + + n = i; + d = decode(aa, n); + n -= i; + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(&i, cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { c = cast(char)w; + n = 1; + } + result = dg(&i, cast(void *)&c); + if (result) + break; + } + return result; +} + +extern (C) int _aApplydc2(dchar[] aa, dg2_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplydc2(), len = %d\n", len); + for (i = 0; i < len; i++) + { dchar d; + char c; + + d = aa[i]; + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(&i, cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { c = cast(char)d; + } + result = dg(&i, cast(void *)&c); + if (result) + break; + } + return result; +} + +extern (C) int _aApplydw2(dchar[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplydw2(), len = %d\n", aa.length); + foreach (size_t i, dchar d; aa) + { + wchar w; + auto j = i; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(&j, cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + result = dg(&j, cast(void *)&w); + if (result) + break; + } + return result; +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/aApplyR.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/aApplyR.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,975 @@ + +/** + * Part of the D programming language runtime library. + */ + +/* + * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +/* This code handles decoding UTF strings for foreach_reverse loops. + * There are 6 combinations of conversions between char, wchar, + * and dchar, and 2 of each of those. + */ + +private import util.utf; + +/**********************************************/ +/* 1 argument versions */ + +// dg is D, but _aApplyRcd() is C +extern (D) typedef int delegate(void *) dg_t; + +extern (C) int _aApplyRcd1(in char[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRcd1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + + i--; + d = aa[i]; + if (d & 0x80) + { char c = cast(char)d; + uint j; + uint m = 0x3F; + d = 0; + while ((c & 0xC0) != 0xC0) + { if (i == 0) + onUnicodeError("Invalid UTF-8 sequence", 0); + i--; + d |= (c & 0x3F) << j; + j += 6; + m >>= 1; + c = aa[i]; + } + d |= (c & m) << j; + } + result = dg(cast(void *)&d); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRcd1.unittest\n"); + + auto s = "hello"c; + int i; + + foreach_reverse(dchar d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(dchar d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == '\U00100456'); break; + case 2: assert(d == '\u1234'); break; + case 3: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 4); +} + +/*****************************/ + +extern (C) int _aApplyRwd1(in wchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRwd1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + + i--; + d = aa[i]; + if (d >= 0xDC00 && d <= 0xDFFF) + { if (i == 0) + onUnicodeError("Invalid UTF-16 sequence", 0); + i--; + d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); + } + result = dg(cast(void *)&d); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRwd1.unittest\n"); + + auto s = "hello"w; + int i; + + foreach_reverse(dchar d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(dchar d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == '\U00100456'); break; + case 2: assert(d == '\u1234'); break; + case 3: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 4); +} + +/*****************************/ + +extern (C) int _aApplyRcw1(in char[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRcw1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + wchar w; + + i--; + w = aa[i]; + if (w & 0x80) + { char c = cast(char)w; + uint j; + uint m = 0x3F; + d = 0; + while ((c & 0xC0) != 0xC0) + { if (i == 0) + onUnicodeError("Invalid UTF-8 sequence", 0); + i--; + d |= (c & 0x3F) << j; + j += 6; + m >>= 1; + c = aa[i]; + } + d |= (c & m) << j; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + } + result = dg(cast(void *)&w); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRcw1.unittest\n"); + + auto s = "hello"c; + int i; + + foreach_reverse(wchar d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(wchar d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == 0xDBC1); break; + case 2: assert(d == 0xDC56); break; + case 3: assert(d == 0x1234); break; + case 4: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 5); +} + +/*****************************/ + +extern (C) int _aApplyRwc1(in wchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRwc1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + char c; + + i--; + d = aa[i]; + if (d >= 0xDC00 && d <= 0xDFFF) + { if (i == 0) + onUnicodeError("Invalid UTF-16 sequence", 0); + i--; + d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); + } + + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(cast(void *)&c2); + if (result) + return result; + } + continue; + } + c = cast(char)d; + result = dg(cast(void *)&c); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRwc1.unittest\n"); + + auto s = "hello"w; + int i; + + foreach_reverse(char d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(char d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == 0xF4); break; + case 2: assert(d == 0x80); break; + case 3: assert(d == 0x91); break; + case 4: assert(d == 0x96); break; + case 5: assert(d == 0xE1); break; + case 6: assert(d == 0x88); break; + case 7: assert(d == 0xB4); break; + case 8: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 9); +} + +/*****************************/ + +extern (C) int _aApplyRdc1(in dchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRdc1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0;) + { dchar d = aa[--i]; + char c; + + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { + c = cast(char)d; + } + result = dg(cast(void *)&c); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRdc1.unittest\n"); + + auto s = "hello"d; + int i; + + foreach_reverse(char d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(char d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == 0xF4); break; + case 2: assert(d == 0x80); break; + case 3: assert(d == 0x91); break; + case 4: assert(d == 0x96); break; + case 5: assert(d == 0xE1); break; + case 6: assert(d == 0x88); break; + case 7: assert(d == 0xB4); break; + case 8: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 9); +} + +/*****************************/ + +extern (C) int _aApplyRdw1(in dchar[] aa, dg_t dg) +{ int result; + + debug(apply) printf("_aApplyRdw1(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d = aa[--i]; + wchar w; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + result = dg(cast(void *)&w); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRdw1.unittest\n"); + + auto s = "hello"d; + int i; + + foreach_reverse(wchar d; s) + { + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(wchar d; s) + { + //printf("i = %d, d = %x\n", i, d); + switch (i) + { + case 0: assert(d == 'b'); break; + case 1: assert(d == 0xDBC1); break; + case 2: assert(d == 0xDC56); break; + case 3: assert(d == 0x1234); break; + case 4: assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 5); +} + + +/****************************************************************************/ +/* 2 argument versions */ + +// dg is D, but _aApplyRcd2() is C +extern (D) typedef int delegate(void *, void *) dg2_t; + +extern (C) int _aApplyRcd2(in char[] aa, dg2_t dg) +{ int result; + size_t i; + size_t len = aa.length; + + debug(apply) printf("_aApplyRcd2(), len = %d\n", len); + for (i = len; i != 0; ) + { dchar d; + + i--; + d = aa[i]; + if (d & 0x80) + { char c = cast(char)d; + uint j; + uint m = 0x3F; + d = 0; + while ((c & 0xC0) != 0xC0) + { if (i == 0) + onUnicodeError("Invalid UTF-8 sequence", 0); + i--; + d |= (c & 0x3F) << j; + j += 6; + m >>= 1; + c = aa[i]; + } + d |= (c & m) << j; + } + result = dg(&i, cast(void *)&d); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRcd2.unittest\n"); + + auto s = "hello"c; + int i; + + foreach_reverse(k, dchar d; s) + { + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, dchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(d == 'b'); assert(k == 8); break; + case 1: assert(d == '\U00100456'); assert(k == 4); break; + case 2: assert(d == '\u1234'); assert(k == 1); break; + case 3: assert(d == 'a'); assert(k == 0); break; + default: assert(0); + } + i++; + } + assert(i == 4); +} + +/*****************************/ + +extern (C) int _aApplyRwd2(in wchar[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplyRwd2(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + + i--; + d = aa[i]; + if (d >= 0xDC00 && d <= 0xDFFF) + { if (i == 0) + onUnicodeError("Invalid UTF-16 sequence", 0); + i--; + d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); + } + result = dg(&i, cast(void *)&d); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRwd2.unittest\n"); + + auto s = "hello"w; + int i; + + foreach_reverse(k, dchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, dchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(k == 4); assert(d == 'b'); break; + case 1: assert(k == 2); assert(d == '\U00100456'); break; + case 2: assert(k == 1); assert(d == '\u1234'); break; + case 3: assert(k == 0); assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 4); +} + +/*****************************/ + +extern (C) int _aApplyRcw2(in char[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplyRcw2(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + wchar w; + + i--; + w = aa[i]; + if (w & 0x80) + { char c = cast(char)w; + uint j; + uint m = 0x3F; + d = 0; + while ((c & 0xC0) != 0xC0) + { if (i == 0) + onUnicodeError("Invalid UTF-8 sequence", 0); + i--; + d |= (c & 0x3F) << j; + j += 6; + m >>= 1; + c = aa[i]; + } + d |= (c & m) << j; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(&i, cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + } + result = dg(&i, cast(void *)&w); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRcw2.unittest\n"); + + auto s = "hello"c; + int i; + + foreach_reverse(k, wchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, wchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(k == 8); assert(d == 'b'); break; + case 1: assert(k == 4); assert(d == 0xDBC1); break; + case 2: assert(k == 4); assert(d == 0xDC56); break; + case 3: assert(k == 1); assert(d == 0x1234); break; + case 4: assert(k == 0); assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 5); +} + +/*****************************/ + +extern (C) int _aApplyRwc2(in wchar[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplyRwc2(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d; + char c; + + i--; + d = aa[i]; + if (d >= 0xDC00 && d <= 0xDFFF) + { if (i == 0) + onUnicodeError("Invalid UTF-16 sequence", 0); + i--; + d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); + } + + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(&i, cast(void *)&c2); + if (result) + return result; + } + continue; + } + c = cast(char)d; + result = dg(&i, cast(void *)&c); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRwc2.unittest\n"); + + auto s = "hello"w; + int i; + + foreach_reverse(k, char d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, char d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(k == 4); assert(d == 'b'); break; + case 1: assert(k == 2); assert(d == 0xF4); break; + case 2: assert(k == 2); assert(d == 0x80); break; + case 3: assert(k == 2); assert(d == 0x91); break; + case 4: assert(k == 2); assert(d == 0x96); break; + case 5: assert(k == 1); assert(d == 0xE1); break; + case 6: assert(k == 1); assert(d == 0x88); break; + case 7: assert(k == 1); assert(d == 0xB4); break; + case 8: assert(k == 0); assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 9); +} + +/*****************************/ + +extern (C) int _aApplyRdc2(in dchar[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplyRdc2(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d = aa[--i]; + char c; + + if (d & ~0x7F) + { + char[4] buf; + + auto b = toUTF8(buf, d); + foreach (char c2; b) + { + result = dg(&i, cast(void *)&c2); + if (result) + return result; + } + continue; + } + else + { c = cast(char)d; + } + result = dg(&i, cast(void *)&c); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRdc2.unittest\n"); + + auto s = "hello"d; + int i; + + foreach_reverse(k, char d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, char d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(k == 3); assert(d == 'b'); break; + case 1: assert(k == 2); assert(d == 0xF4); break; + case 2: assert(k == 2); assert(d == 0x80); break; + case 3: assert(k == 2); assert(d == 0x91); break; + case 4: assert(k == 2); assert(d == 0x96); break; + case 5: assert(k == 1); assert(d == 0xE1); break; + case 6: assert(k == 1); assert(d == 0x88); break; + case 7: assert(k == 1); assert(d == 0xB4); break; + case 8: assert(k == 0); assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 9); +} + +/*****************************/ + +extern (C) int _aApplyRdw2(in dchar[] aa, dg2_t dg) +{ int result; + + debug(apply) printf("_aApplyRdw2(), len = %d\n", aa.length); + for (size_t i = aa.length; i != 0; ) + { dchar d = aa[--i]; + wchar w; + + if (d <= 0xFFFF) + w = cast(wchar) d; + else + { + w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); + result = dg(&i, cast(void *)&w); + if (result) + break; + w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); + } + result = dg(&i, cast(void *)&w); + if (result) + break; + } + return result; +} + +unittest +{ + debug(apply) printf("_aApplyRdw2.unittest\n"); + + auto s = "hello"d; + int i; + + foreach_reverse(k, wchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + assert(k == 4 - i); + switch (i) + { + case 0: assert(d == 'o'); break; + case 1: assert(d == 'l'); break; + case 2: assert(d == 'l'); break; + case 3: assert(d == 'e'); break; + case 4: assert(d == 'h'); break; + default: assert(0); + } + i++; + } + assert(i == 5); + + s = "a\u1234\U00100456b"; + i = 0; + foreach_reverse(k, wchar d; s) + { + //printf("i = %d, k = %d, d = %x\n", i, k, d); + switch (i) + { + case 0: assert(k == 3); assert(d == 'b'); break; + case 1: assert(k == 2); assert(d == 0xDBC1); break; + case 2: assert(k == 2); assert(d == 0xDC56); break; + case 3: assert(k == 1); assert(d == 0x1234); break; + case 4: assert(k == 0); assert(d == 'a'); break; + default: assert(0); + } + i++; + } + assert(i == 5); +} + + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/aaA.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/aaA.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,832 @@ +//_ aaA.d + +/** + * Part of the D programming language runtime library. + * Implementation of associative arrays. + */ + +/* + * Copyright (C) 2000-2008 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + * Modified by Tomas Lindquist Olsen for use with LLVMDC. + */ + +private +{ + import tango.stdc.stdarg; + import tango.stdc.string; + + enum BlkAttr : uint + { + FINALIZE = 0b0000_0001, + NO_SCAN = 0b0000_0010, + NO_MOVE = 0b0000_0100, + ALL_BITS = 0b1111_1111 + } + + extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); + extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); + extern (C) void gc_free( void* p ); +} + +// Auto-rehash and pre-allocate - Dave Fladebo + +static size_t[] prime_list = [ + 97UL, 389UL, + 1_543UL, 6_151UL, + 24_593UL, 98_317UL, + 393_241UL, 1_572_869UL, + 6_291_469UL, 25_165_843UL, + 100_663_319UL, 402_653_189UL, + 1_610_612_741UL, 4_294_967_291UL, +// 8_589_934_513UL, 17_179_869_143UL +]; + +// This is the type of the return value for dynamic arrays. +struct Array +{ + size_t length; + void* ptr; +} + +struct aaA +{ + aaA *left; + aaA *right; + hash_t hash; + /* key */ + /* value */ +} + +struct BB +{ + aaA*[] b; + size_t nodes; // total number of aaA nodes + TypeInfo keyti; // TODO: replace this with TypeInfo_AssociativeArray when available in _aaGet() +} + +/* This is the type actually seen by the programmer, although + * it is completely opaque. + */ + +// LLVMDC doesn't pass structs in registers so no need to wrap it ... +alias BB* AA; + +/********************************** + * Align to next pointer boundary, so that + * GC won't be faced with misaligned pointers + * in value. + */ + +size_t aligntsize(size_t tsize) +{ + // Is pointer alignment on the x64 4 bytes or 8? + return (tsize + size_t.sizeof - 1) & ~(size_t.sizeof - 1); +} + +extern (C): + +/************************************************* + * Invariant for aa. + */ + +/+ +void _aaInvAh(aaA*[] aa) +{ + for (size_t i = 0; i < aa.length; i++) + { + if (aa[i]) + _aaInvAh_x(aa[i]); + } +} + +private int _aaCmpAh_x(aaA *e1, aaA *e2) +{ int c; + + c = e1.hash - e2.hash; + if (c == 0) + { + c = e1.key.length - e2.key.length; + if (c == 0) + c = memcmp((char *)e1.key, (char *)e2.key, e1.key.length); + } + return c; +} + +private void _aaInvAh_x(aaA *e) +{ + hash_t key_hash; + aaA *e1; + aaA *e2; + + key_hash = getHash(e.key); + assert(key_hash == e.hash); + + while (1) + { int c; + + e1 = e.left; + if (e1) + { + _aaInvAh_x(e1); // ordinary recursion + do + { + c = _aaCmpAh_x(e1, e); + assert(c < 0); + e1 = e1.right; + } while (e1 != null); + } + + e2 = e.right; + if (e2) + { + do + { + c = _aaCmpAh_x(e, e2); + assert(c < 0); + e2 = e2.left; + } while (e2 != null); + e = e.right; // tail recursion + } + else + break; + } +} ++/ + +/**************************************************** + * Determine number of entries in associative array. + */ + +size_t _aaLen(AA aa) +in +{ + //printf("_aaLen()+\n"); + //_aaInv(aa); +} +out (result) +{ + size_t len = 0; + + void _aaLen_x(aaA* ex) + { + auto e = ex; + len++; + + while (1) + { + if (e.right) + _aaLen_x(e.right); + e = e.left; + if (!e) + break; + len++; + } + } + + if (aa) + { + foreach (e; aa.b) + { + if (e) + _aaLen_x(e); + } + } + assert(len == result); + + //printf("_aaLen()-\n"); +} +body +{ + return aa ? aa.nodes : 0; +} + + +/************************************************* + * Get pointer to value in associative array indexed by key. + * Add entry for key if it is not already there. + */ + +void* _aaGet(AA* aa_arg, TypeInfo keyti, size_t valuesize, void* pkey) +in +{ + assert(aa_arg); +} +out (result) +{ + assert(result); + assert(*aa_arg); + assert((*aa_arg).b.length); + //assert(_aaInAh(*aa, key)); +} +body +{ + //auto pkey = cast(void *)(&valuesize + 1); + size_t i; + aaA *e; + auto keysize = aligntsize(keyti.tsize()); + + if (!*aa_arg) + *aa_arg = new BB(); + auto aa = *aa_arg; + aa.keyti = keyti; + + if (!aa.b.length) + { + alias aaA *pa; + auto len = prime_list[0]; + + aa.b = new pa[len]; + } + + auto key_hash = keyti.getHash(pkey); + //printf("hash = %d\n", key_hash); + i = key_hash % aa.b.length; + auto pe = &aa.b[i]; + while ((e = *pe) !is null) + { + if (key_hash == e.hash) + { + auto c = keyti.compare(pkey, e + 1); + if (c == 0) + goto Lret; + pe = (c < 0) ? &e.left : &e.right; + } + else + pe = (key_hash < e.hash) ? &e.left : &e.right; + } + + // Not found, create new elem + //printf("create new one\n"); + size_t size = aaA.sizeof + keysize + valuesize; + e = cast(aaA *) gc_calloc(size); + memcpy(e + 1, pkey, keysize); + e.hash = key_hash; + *pe = e; + + auto nodes = ++aa.nodes; + //printf("length = %d, nodes = %d\n", (*aa).length, nodes); + if (nodes > aa.b.length * 4) + { + _aaRehash(aa_arg,keyti); + } + +Lret: + return cast(void *)(e + 1) + keysize; +} + + +/************************************************* + * Get pointer to value in associative array indexed by key. + * Returns null if it is not already there. + */ + +void* _aaGetRvalue(AA aa, TypeInfo keyti, size_t valuesize, void *pkey) +{ + //printf("_aaGetRvalue(valuesize = %u)\n", valuesize); + if (!aa) + return null; + + //auto pkey = cast(void *)(&valuesize + 1); + auto keysize = aligntsize(keyti.tsize()); + auto len = aa.b.length; + + if (len) + { + auto key_hash = keyti.getHash(pkey); + //printf("hash = %d\n", key_hash); + size_t i = key_hash % len; + auto e = aa.b[i]; + while (e !is null) + { + if (key_hash == e.hash) + { + auto c = keyti.compare(pkey, e + 1); + if (c == 0) + return cast(void *)(e + 1) + keysize; + e = (c < 0) ? e.left : e.right; + } + else + e = (key_hash < e.hash) ? e.left : e.right; + } + } + return null; // not found, caller will throw exception +} + + +/************************************************* + * Determine if key is in aa. + * Returns: + * null not in aa + * !=null in aa, return pointer to value + */ + +void* _aaIn(AA aa, TypeInfo keyti, void *pkey) +in +{ +} +out (result) +{ + //assert(result == 0 || result == 1); +} +body +{ + if (aa) + { + //auto pkey = cast(void *)(&keyti + 1); + + //printf("_aaIn(), .length = %d, .ptr = %x\n", aa.length, cast(uint)aa.ptr); + auto len = aa.b.length; + + if (len) + { + auto key_hash = keyti.getHash(pkey); + //printf("hash = %d\n", key_hash); + size_t i = key_hash % len; + auto e = aa.b[i]; + while (e !is null) + { + if (key_hash == e.hash) + { + auto c = keyti.compare(pkey, e + 1); + if (c == 0) + return cast(void *)(e + 1) + aligntsize(keyti.tsize()); + e = (c < 0) ? e.left : e.right; + } + else + e = (key_hash < e.hash) ? e.left : e.right; + } + } + } + + // Not found + return null; +} + +/************************************************* + * Delete key entry in aa[]. + * If key is not in aa[], do nothing. + */ + +void _aaDel(AA aa, TypeInfo keyti, void *pkey) +{ + //auto pkey = cast(void *)(&keyti + 1); + aaA *e; + + if (aa && aa.b.length) + { + auto key_hash = keyti.getHash(pkey); + //printf("hash = %d\n", key_hash); + size_t i = key_hash % aa.b.length; + auto pe = &aa.b[i]; + while ((e = *pe) !is null) // null means not found + { + if (key_hash == e.hash) + { + auto c = keyti.compare(pkey, e + 1); + if (c == 0) + { + if (!e.left && !e.right) + { + *pe = null; + } + else if (e.left && !e.right) + { + *pe = e.left; + e.left = null; + } + else if (!e.left && e.right) + { + *pe = e.right; + e.right = null; + } + else + { + *pe = e.left; + e.left = null; + do + pe = &(*pe).right; + while (*pe); + *pe = e.right; + e.right = null; + } + + aa.nodes--; + gc_free(e); + + break; + } + pe = (c < 0) ? &e.left : &e.right; + } + else + pe = (key_hash < e.hash) ? &e.left : &e.right; + } + } +} + + +/******************************************** + * Produce array of values from aa. + */ + +Array _aaValues(AA aa, size_t keysize, size_t valuesize) +in +{ + assert(keysize == aligntsize(keysize)); +} +body +{ + size_t resi; + Array a; + + void _aaValues_x(aaA* e) + { + do + { + memcpy(a.ptr + resi * valuesize, + cast(byte*)e + aaA.sizeof + keysize, + valuesize); + resi++; + if (e.left) + { if (!e.right) + { e = e.left; + continue; + } + _aaValues_x(e.left); + } + e = e.right; + } while (e !is null); + } + + if (aa) + { + a.length = _aaLen(aa); + a.ptr = cast(byte*) gc_malloc(a.length * valuesize, + valuesize < (void*).sizeof ? BlkAttr.NO_SCAN : 0); + resi = 0; + foreach (e; aa.b) + { + if (e) + _aaValues_x(e); + } + assert(resi == a.length); + } + return a; +} + + +/******************************************** + * Rehash an array. + */ + +void* _aaRehash(AA* paa, TypeInfo keyti) +in +{ + //_aaInvAh(paa); +} +out (result) +{ + //_aaInvAh(result); +} +body +{ + BB newb; + + void _aaRehash_x(aaA* olde) + { + while (1) + { + auto left = olde.left; + auto right = olde.right; + olde.left = null; + olde.right = null; + + aaA *e; + + //printf("rehash %p\n", olde); + auto key_hash = olde.hash; + size_t i = key_hash % newb.b.length; + auto pe = &newb.b[i]; + while ((e = *pe) !is null) + { + //printf("\te = %p, e.left = %p, e.right = %p\n", e, e.left, e.right); + assert(e.left != e); + assert(e.right != e); + if (key_hash == e.hash) + { + auto c = keyti.compare(olde + 1, e + 1); + assert(c != 0); + pe = (c < 0) ? &e.left : &e.right; + } + else + pe = (key_hash < e.hash) ? &e.left : &e.right; + } + *pe = olde; + + if (right) + { + if (!left) + { olde = right; + continue; + } + _aaRehash_x(right); + } + if (!left) + break; + olde = left; + } + } + + //printf("Rehash\n"); + if (*paa) + { + auto aa = *paa; + auto len = _aaLen(aa); + if (len) + { size_t i; + + for (i = 0; i < prime_list.length - 1; i++) + { + if (len <= prime_list[i]) + break; + } + len = prime_list[i]; + newb.b = new aaA*[len]; + newb.keyti = keyti; + + foreach (e; aa.b) + { + if (e) + _aaRehash_x(e); + } + + newb.nodes = (*aa).nodes; + } + + **paa = newb; + } + return *paa; +} + + +/******************************************** + * Produce array of N byte keys from aa. + */ + +Array _aaKeys(AA aa, size_t keysize) +{ + byte[] res; + size_t resi; + + void _aaKeys_x(aaA* e) + { + do + { + memcpy(&res[resi * keysize], cast(byte*)(e + 1), keysize); + resi++; + if (e.left) + { if (!e.right) + { e = e.left; + continue; + } + _aaKeys_x(e.left); + } + e = e.right; + } while (e !is null); + } + + auto len = _aaLen(aa); + if (!len) + return Array(); + res = (cast(byte*) gc_malloc(len * keysize, + !(aa.keyti.flags() & 1) ? BlkAttr.NO_SCAN : 0)) [0 .. len * keysize]; + resi = 0; + foreach (e; aa.b) + { + if (e) + _aaKeys_x(e); + } + assert(resi == len); + + return Array(len, res.ptr); +} + + +/********************************************** + * 'apply' for associative arrays - to support foreach + */ + +// dg is D, but _aaApply() is C +extern (D) typedef int delegate(void *) dg_t; + +int _aaApply(AA aa, size_t keysize, dg_t dg) +in +{ + assert(aligntsize(keysize) == keysize); +} +body +{ int result; + + //printf("_aaApply(aa = x%llx, keysize = %d, dg = x%llx)\n", aa, keysize, dg); + + int treewalker(aaA* e) + { int result; + + do + { + //printf("treewalker(e = %p, dg = x%llx)\n", e, dg); + result = dg(cast(void *)(e + 1) + keysize); + if (result) + break; + if (e.right) + { if (!e.left) + { + e = e.right; + continue; + } + result = treewalker(e.right); + if (result) + break; + } + e = e.left; + } while (e); + + return result; + } + + if (aa) + { + foreach (e; aa.b) + { + if (e) + { + result = treewalker(e); + if (result) + break; + } + } + } + return result; +} + +// dg is D, but _aaApply2() is C +extern (D) typedef int delegate(void *, void *) dg2_t; + +int _aaApply2(AA aa, size_t keysize, dg2_t dg) +in +{ + assert(aligntsize(keysize) == keysize); +} +body +{ int result; + + //printf("_aaApply(aa = x%llx, keysize = %d, dg = x%llx)\n", aa, keysize, dg); + + int treewalker(aaA* e) + { int result; + + do + { + //printf("treewalker(e = %p, dg = x%llx)\n", e, dg); + result = dg(cast(void *)(e + 1), cast(void *)(e + 1) + keysize); + if (result) + break; + if (e.right) + { if (!e.left) + { + e = e.right; + continue; + } + result = treewalker(e.right); + if (result) + break; + } + e = e.left; + } while (e); + + return result; + } + + if (aa) + { + foreach (e; aa.b) + { + if (e) + { + result = treewalker(e); + if (result) + break; + } + } + } + return result; +} + + +/*********************************** + * Construct an associative array of type ti from + * length pairs of key/value pairs. + */ + +/+ + +extern (C) +BB* _d_assocarrayliteralT(TypeInfo_AssociativeArray ti, size_t length, ...) +{ + auto valuesize = ti.next.tsize(); // value size + auto keyti = ti.key; + auto keysize = keyti.tsize(); // key size + BB* result; + + //printf("_d_assocarrayliteralT(keysize = %d, valuesize = %d, length = %d)\n", keysize, valuesize, length); + //printf("tivalue = %.*s\n", ti.next.classinfo.name); + if (length == 0 || valuesize == 0 || keysize == 0) + { + ; + } + else + { + va_list q; + va_start!(size_t)(q, length); + + result = new BB(); + size_t i; + + for (i = 0; i < prime_list.length - 1; i++) + { + if (length <= prime_list[i]) + break; + } + auto len = prime_list[i]; + result.b = new aaA*[len]; + + size_t keystacksize = (keysize + int.sizeof - 1) & ~(int.sizeof - 1); + size_t valuestacksize = (valuesize + int.sizeof - 1) & ~(int.sizeof - 1); + + size_t keytsize = aligntsize(keysize); + + for (size_t j = 0; j < length; j++) + { void* pkey = q; + q += keystacksize; + void* pvalue = q; + q += valuestacksize; + aaA* e; + + auto key_hash = keyti.getHash(pkey); + //printf("hash = %d\n", key_hash); + i = key_hash % len; + auto pe = &result.b[i]; + while (1) + { + e = *pe; + if (!e) + { + // Not found, create new elem + //printf("create new one\n"); + e = cast(aaA *) cast(void*) new void[aaA.sizeof + keytsize + valuesize]; + memcpy(e + 1, pkey, keysize); + e.hash = key_hash; + *pe = e; + result.nodes++; + break; + } + if (key_hash == e.hash) + { + auto c = keyti.compare(pkey, e + 1); + if (c == 0) + break; + pe = (c < 0) ? &e.left : &e.right; + } + else + pe = (key_hash < e.hash) ? &e.left : &e.right; + } + memcpy(cast(void *)(e + 1) + keytsize, pvalue, valuesize); + } + + va_end(q); + } + return result; +} + ++/ diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/adi.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/adi.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,589 @@ +//_ adi.d + +/** + * Part of the D programming language runtime library. + * Dynamic array property support routines + */ + +/* + * Copyright (C) 2000-2006 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + + +//debug=adi; // uncomment to turn on debugging printf's + +private +{ + import tango.stdc.string; + import tango.stdc.stdlib; + import util.utf; + + enum BlkAttr : uint + { + FINALIZE = 0b0000_0001, + NO_SCAN = 0b0000_0010, + NO_MOVE = 0b0000_0100, + ALL_BITS = 0b1111_1111 + } + + extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); + extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); + extern (C) void gc_free( void* p ); +} + + +struct Array +{ + size_t length; + void* ptr; +} + +/********************************************** + * Reverse array of chars. + * Handled separately because embedded multibyte encodings should not be + * reversed. + */ + +extern (C) Array _adReverseChar(char[] a) +{ + if (a.length > 1) + { + char[6] tmp; + char[6] tmplo; + char* lo = a.ptr; + char* hi = &a[length - 1]; + + while (lo < hi) + { auto clo = *lo; + auto chi = *hi; + + debug(adi) printf("lo = %d, hi = %d\n", lo, hi); + if (clo <= 0x7F && chi <= 0x7F) + { + debug(adi) printf("\tascii\n"); + *lo = chi; + *hi = clo; + lo++; + hi--; + continue; + } + + uint stridelo = UTF8stride[clo]; + + uint stridehi = 1; + while ((chi & 0xC0) == 0x80) + { + chi = *--hi; + stridehi++; + assert(hi >= lo); + } + if (lo == hi) + break; + + debug(adi) printf("\tstridelo = %d, stridehi = %d\n", stridelo, stridehi); + if (stridelo == stridehi) + { + + memcpy(tmp.ptr, lo, stridelo); + memcpy(lo, hi, stridelo); + memcpy(hi, tmp.ptr, stridelo); + lo += stridelo; + hi--; + continue; + } + + /* Shift the whole array. This is woefully inefficient + */ + memcpy(tmp.ptr, hi, stridehi); + memcpy(tmplo.ptr, lo, stridelo); + memmove(lo + stridehi, lo + stridelo , cast(size_t)(hi - lo) - stridelo); + memcpy(lo, tmp.ptr, stridehi); + memcpy(hi + stridehi - stridelo, tmplo.ptr, stridelo); + + lo += stridehi; + hi = hi - 1 + (stridehi - stridelo); + } + } + return Array(a.length, a.ptr); +} + +unittest +{ + auto a = "abcd"c; + + auto r = a.dup.reverse; + //writefln(r); + assert(r == "dcba"); + + a = "a\u1235\u1234c"; + //writefln(a); + r = a.dup.reverse; + //writefln(r); + assert(r == "c\u1234\u1235a"); + + a = "ab\u1234c"; + //writefln(a); + r = a.dup.reverse; + //writefln(r); + assert(r == "c\u1234ba"); + + a = "\u3026\u2021\u3061\n"; + r = a.dup.reverse; + assert(r == "\n\u3061\u2021\u3026"); +} + + +/********************************************** + * Reverse array of wchars. + * Handled separately because embedded multiword encodings should not be + * reversed. + */ + +extern (C) Array _adReverseWchar(wchar[] a) +{ + if (a.length > 1) + { + wchar[2] tmp; + wchar* lo = a.ptr; + wchar* hi = &a[length - 1]; + + while (lo < hi) + { auto clo = *lo; + auto chi = *hi; + + if ((clo < 0xD800 || clo > 0xDFFF) && + (chi < 0xD800 || chi > 0xDFFF)) + { + *lo = chi; + *hi = clo; + lo++; + hi--; + continue; + } + + int stridelo = 1 + (clo >= 0xD800 && clo <= 0xDBFF); + + int stridehi = 1; + if (chi >= 0xDC00 && chi <= 0xDFFF) + { + chi = *--hi; + stridehi++; + assert(hi >= lo); + } + if (lo == hi) + break; + + if (stridelo == stridehi) + { int stmp; + + assert(stridelo == 2); + assert(stmp.sizeof == 2 * (*lo).sizeof); + stmp = *cast(int*)lo; + *cast(int*)lo = *cast(int*)hi; + *cast(int*)hi = stmp; + lo += stridelo; + hi--; + continue; + } + + /* Shift the whole array. This is woefully inefficient + */ + memcpy(tmp.ptr, hi, stridehi * wchar.sizeof); + memcpy(hi + stridehi - stridelo, lo, stridelo * wchar.sizeof); + memmove(lo + stridehi, lo + stridelo , (hi - (lo + stridelo)) * wchar.sizeof); + memcpy(lo, tmp.ptr, stridehi * wchar.sizeof); + + lo += stridehi; + hi = hi - 1 + (stridehi - stridelo); + } + } + return Array(a.length, a.ptr); +} + +unittest +{ + wstring a = "abcd"; + wstring r; + + r = a.dup.reverse; + assert(r == "dcba"); + + a = "a\U00012356\U00012346c"; + r = a.dup.reverse; + assert(r == "c\U00012346\U00012356a"); + + a = "ab\U00012345c"; + r = a.dup.reverse; + assert(r == "c\U00012345ba"); +} + + +/********************************************** + * Support for array.reverse property. + */ + +extern (C) Array _adReverse(Array a, size_t szelem) + out (result) + { + assert(result.ptr is a.ptr); + } + body + { + if (a.length >= 2) + { + byte* tmp; + byte[16] buffer; + + void* lo = a.ptr; + void* hi = a.ptr + (a.length - 1) * szelem; + + tmp = buffer.ptr; + if (szelem > 16) + { + //version (Win32) + //tmp = cast(byte*) alloca(szelem); + //else + tmp = cast(byte*) gc_malloc(szelem); + } + + for (; lo < hi; lo += szelem, hi -= szelem) + { + memcpy(tmp, lo, szelem); + memcpy(lo, hi, szelem); + memcpy(hi, tmp, szelem); + } + + version (Win32) + { + } + else + { + //if (szelem > 16) + // BUG: bad code is generate for delete pointer, tries + // to call delclass. + //gc_free(tmp); + } + } + return Array(a.length, a.ptr); + } + +unittest +{ + debug(adi) printf("array.reverse.unittest\n"); + + int[] a = new int[5]; + int[] b; + size_t i; + + for (i = 0; i < 5; i++) + a[i] = i; + b = a.reverse; + assert(b is a); + for (i = 0; i < 5; i++) + assert(a[i] == 4 - i); + + struct X20 + { // More than 16 bytes in size + int a; + int b, c, d, e; + } + + X20[] c = new X20[5]; + X20[] d; + + for (i = 0; i < 5; i++) + { c[i].a = i; + c[i].e = 10; + } + d = c.reverse; + assert(d is c); + for (i = 0; i < 5; i++) + { + assert(c[i].a == 4 - i); + assert(c[i].e == 10); + } +} + +/********************************************** + * Sort array of chars. + */ + +extern (C) Array _adSortChar(char[] a) +{ + if (a.length > 1) + { + dchar[] da = toUTF32(a); + da.sort; + size_t i = 0; + foreach (dchar d; da) + { char[4] buf; + auto t = toUTF8(buf, d); + a[i .. i + t.length] = t[]; + i += t.length; + } + delete da; + } + return Array(a.length, a.ptr); +} + +/********************************************** + * Sort array of wchars. + */ + +extern (C) Array _adSortWchar(wchar[] a) +{ + if (a.length > 1) + { + dchar[] da = toUTF32(a); + da.sort; + size_t i = 0; + foreach (dchar d; da) + { wchar[2] buf; + auto t = toUTF16(buf, d); + a[i .. i + t.length] = t[]; + i += t.length; + } + delete da; + } + return Array(a.length, a.ptr); +} + +/*************************************** + * Support for array equality test. + */ + +extern (C) int _adEq(Array a1, Array a2, TypeInfo ti) +{ + debug(adi) printf("_adEq(a1.length = %d, a2.length = %d)\n", a1.length, a2.length); + + if (a1.length != a2.length) + return 0; // not equal + else if (a1.ptr == a2.ptr) + return 1; // equal + + // let typeinfo decide + return ti.equals(&a1, &a2); +} + +unittest +{ + debug(adi) printf("array.Eq unittest\n"); + + auto a = "hello"c; + + assert(a != "hel"); + assert(a != "helloo"); + assert(a != "betty"); + assert(a == "hello"); + assert(a != "hxxxx"); +} + +/*************************************** + * Support for array compare test. + */ + +extern (C) int _adCmp(Array a1, Array a2, TypeInfo ti) +{ + debug(adi) printf("adCmp()\n"); + + if (a1.ptr == a2.ptr && + a1.length == a2.length) + return 0; + + auto len = a1.length; + if (a2.length < len) + len = a2.length; + + // let typeinfo decide + return ti.compare(&a1, &a2); +} + +unittest +{ + debug(adi) printf("array.Cmp unittest\n"); + + auto a = "hello"c; + + assert(a > "hel"); + assert(a >= "hel"); + assert(a < "helloo"); + assert(a <= "helloo"); + assert(a > "betty"); + assert(a >= "betty"); + assert(a == "hello"); + assert(a <= "hello"); + assert(a >= "hello"); +} + +/*************************************** + * Support for array compare test. + */ + +extern (C) int _adCmpChar(Array a1, Array a2) +{ + version(D_InlineAsm_X86) + { + //version = Asm86; + } + version (Asm86) + { + asm + { naked ; + + push EDI ; + push ESI ; + + mov ESI,a1+4[4+ESP] ; + mov EDI,a2+4[4+ESP] ; + + mov ECX,a1[4+ESP] ; + mov EDX,a2[4+ESP] ; + + cmp ECX,EDX ; + jb GotLength ; + + mov ECX,EDX ; + +GotLength: + cmp ECX,4 ; + jb DoBytes ; + + // Do alignment if neither is dword aligned + test ESI,3 ; + jz Aligned ; + + test EDI,3 ; + jz Aligned ; +DoAlign: + mov AL,[ESI] ; //align ESI to dword bounds + mov DL,[EDI] ; + + cmp AL,DL ; + jnz Unequal ; + + inc ESI ; + inc EDI ; + + test ESI,3 ; + + lea ECX,[ECX-1] ; + jnz DoAlign ; +Aligned: + mov EAX,ECX ; + + // do multiple of 4 bytes at a time + + shr ECX,2 ; + jz TryOdd ; + + repe ; + cmpsd ; + + jnz UnequalQuad ; + +TryOdd: + mov ECX,EAX ; +DoBytes: + // if still equal and not end of string, do up to 3 bytes slightly + // slower. + + and ECX,3 ; + jz Equal ; + + repe ; + cmpsb ; + + jnz Unequal ; +Equal: + mov EAX,a1[4+ESP] ; + mov EDX,a2[4+ESP] ; + + sub EAX,EDX ; + pop ESI ; + + pop EDI ; + ret ; + +UnequalQuad: + mov EDX,[EDI-4] ; + mov EAX,[ESI-4] ; + + cmp AL,DL ; + jnz Unequal ; + + cmp AH,DH ; + jnz Unequal ; + + shr EAX,16 ; + + shr EDX,16 ; + + cmp AL,DL ; + jnz Unequal ; + + cmp AH,DH ; +Unequal: + sbb EAX,EAX ; + pop ESI ; + + or EAX,1 ; + pop EDI ; + + ret ; + } + } + else + { + int len; + int c; + + debug(adi) printf("adCmpChar()\n"); + len = cast(int)a1.length; + if (a2.length < len) + len = cast(int)a2.length; + c = memcmp(cast(char *)a1.ptr, cast(char *)a2.ptr, len); + if (!c) + c = cast(int)a1.length - cast(int)a2.length; + return c; + } +} + +unittest +{ + debug(adi) printf("array.CmpChar unittest\n"); + + auto a = "hello"c; + + assert(a > "hel"); + assert(a >= "hel"); + assert(a < "helloo"); + assert(a <= "helloo"); + assert(a > "betty"); + assert(a >= "betty"); + assert(a == "hello"); + assert(a <= "hello"); + assert(a >= "hello"); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/arrayInit.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/arrayInit.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,107 @@ +private import llvmdc.intrinsics; + +extern(C): + +int memcmp(void*,void*,size_t); +size_t strlen(char*); + +version(LLVM64) +alias llvm_memcpy_i64 llvm_memcpy; +else +alias llvm_memcpy_i32 llvm_memcpy; + +// per-element array init routines + +void _d_array_init_i1(bool* a, size_t n, bool v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_i8(ubyte* a, size_t n, ubyte v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_i16(ushort* a, size_t n, ushort v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_i32(uint* a, size_t n, uint v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_i64(ulong* a, size_t n, ulong v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_float(float* a, size_t n, float v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_double(double* a, size_t n, double v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_real(real* a, size_t n, real v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_pointer(void** a, size_t n, void* v) +{ + auto p = a; + auto end = a+n; + while (p !is end) + *p++ = v; +} + +void _d_array_init_mem(void* a, size_t na, void* v, size_t nv) +{ + auto p = a; + auto end = a + na*nv; + while (p !is end) { + llvm_memcpy(p,v,nv,0); + p += nv; + } +} + +// for array cast +size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz) +{ + if (newelemsz == 1) { + return len*elemsz; + } + else if (len % newelemsz) { + throw new Exception("Bad array cast"); + } + return (len*elemsz)/newelemsz; +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/cast.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/cast.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,196 @@ +/* + * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +extern (C): + +//debug = PRINTF; +debug(PRINTF) int printf(char*, ...); + +/****************************************** + * Given a pointer: + * If it is an Object, return that Object. + * If it is an interface, return the Object implementing the interface. + * If it is null, return null. + * Else, undefined crash + */ + +Object _d_toObject(void* p) +{ Object o; + debug(PRINTF) printf("toObject(%p)\n", p); + if (p) + { + o = cast(Object)p; + debug(PRINTF) printf("o = %p\n", o); + debug(PRINTF) printf("o.vtbl = %p\n", *cast(void**)p); + ClassInfo oc = o.classinfo; + debug(PRINTF) printf("oc = %p\n", oc); + Interface *pi = **cast(Interface ***)p; + debug(PRINTF) printf("pi = %p\n", pi); + + /* Interface.offset lines up with ClassInfo.name.ptr, + * so we rely on pointers never being less than 64K, + * and interface vtable offsets never being greater. + */ + if (pi.offset < 0x10000) + { + debug(PRINTF) printf("\tpi.offset = %d\n", pi.offset); + o = cast(Object)(p - pi.offset); + } + } + debug(PRINTF) printf("toObject = %p\n", o); + return o; +} + + +/************************************* + * Attempts to cast Object o to class c. + * Returns o if successful, null if not. + */ + +Object _d_interface_cast(void* p, ClassInfo c) +{ Object o; + + debug(PRINTF) printf("_d_interface_cast(p = %p, c = '%.*s')\n", p, c.name.length, c.name.ptr); + if (p) + { + Interface *pi = **cast(Interface ***)p; + + debug(PRINTF) printf("\tpi.offset = %d\n", pi.offset); + o = cast(Object)(p - pi.offset); + return _d_dynamic_cast(o, c); + } + debug(PRINTF) printf("_d_interface_cast = %p\n", o); + return o; +} + +Object _d_dynamic_cast(Object o, ClassInfo c) +{ ClassInfo oc; + size_t offset = 0; + + debug(PRINTF) printf("_d_dynamic_cast(o = %p, c = '%.*s')\n", o, c.name.length, c.name.ptr); + + if (o) + { + oc = o.classinfo; + if (_d_isbaseof2(oc, c, offset)) + { + debug(PRINTF) printf("\toffset = %d\n", offset); + o = cast(Object)(cast(void*)o + offset); + } + else + o = null; + } + //printf("\tresult = %p\n", o); + debug(PRINTF) printf("_d_dynamic_cast = %p\n", o); + return o; +} + +int _d_isbaseof2(ClassInfo oc, ClassInfo c, ref size_t offset) +{ int i; + + debug(PRINTF) printf("_d_isbaseof2(%.*s, %.*s, %ul)\n", oc.name.length, oc.name.ptr, c.name.length, c.name.ptr, offset); + + if (oc is c) + return 1; + do + { + debug(PRINTF) printf("oc.interfaces.length = %ul\n", oc.interfaces.length); + if (oc.base is c) + return 1; + for (i = 0; i < oc.interfaces.length; i++) + { + ClassInfo ic; + + ic = oc.interfaces[i].classinfo; + debug(PRINTF) printf("checking %.*s\n", ic.name.length, ic.name.ptr); + if (ic is c) + { offset = cast(size_t)oc.interfaces[i].offset; + return 1; + } + } + for (i = 0; i < oc.interfaces.length; i++) + { + ClassInfo ic; + + ic = oc.interfaces[i].classinfo; + if (_d_isbaseof2(ic, c, offset)) + { offset = cast(size_t)oc.interfaces[i].offset; + return 1; + } + } + oc = oc.base; + } while (oc); + return 0; +} + +int _d_isbaseof(ClassInfo oc, ClassInfo c) +{ int i; + + if (oc is c) + return 1; + do + { + if (oc.base is c) + return 1; + for (i = 0; i < oc.interfaces.length; i++) + { + ClassInfo ic; + + ic = oc.interfaces[i].classinfo; + if (ic is c || _d_isbaseof(ic, c)) + return 1; + } + oc = oc.base; + } while (oc); + return 0; +} + +/********************************* + * Find the vtbl[] associated with Interface ic. + */ + +void *_d_interface_vtbl(ClassInfo ic, Object o) +{ int i; + ClassInfo oc; + + //printf("__d_interface_vtbl(o = %p, ic = %p)\n", o, ic); + + assert(o); + + oc = o.classinfo; + for (i = 0; i < oc.interfaces.length; i++) + { + ClassInfo oic; + + oic = oc.interfaces[i].classinfo; + if (oic is ic) + { + return cast(void *)oc.interfaces[i].vtbl; + } + } + assert(0); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/critical.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/critical.c Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,160 @@ +/* + * Placed into the Public Domain + * written by Walter Bright, Digital Mars + * www.digitalmars.com + */ + +/* ================================= Win32 ============================ */ + +#if _WIN32 + +#include + +/****************************************** + * Enter/exit critical section. + */ + +/* We don't initialize critical sections unless we actually need them. + * So keep a linked list of the ones we do use, and in the static destructor + * code, walk the list and release them. + */ + +typedef struct D_CRITICAL_SECTION +{ + struct D_CRITICAL_SECTION *next; + CRITICAL_SECTION cs; +} D_CRITICAL_SECTION; + +static D_CRITICAL_SECTION *dcs_list; +static D_CRITICAL_SECTION critical_section; +static volatile int inited; + +void _d_criticalenter(D_CRITICAL_SECTION *dcs) +{ + if (!dcs->next) + { + EnterCriticalSection(&critical_section.cs); + if (!dcs->next) // if, in the meantime, another thread didn't set it + { + dcs->next = dcs_list; + dcs_list = dcs; + InitializeCriticalSection(&dcs->cs); + } + LeaveCriticalSection(&critical_section.cs); + } + EnterCriticalSection(&dcs->cs); +} + +void _d_criticalexit(D_CRITICAL_SECTION *dcs) +{ + LeaveCriticalSection(&dcs->cs); +} + +void _STI_critical_init() +{ + if (!inited) + { InitializeCriticalSection(&critical_section.cs); + dcs_list = &critical_section; + inited = 1; + } +} + +void _STD_critical_term() +{ + if (inited) + { inited = 0; + while (dcs_list) + { + DeleteCriticalSection(&dcs_list->cs); + dcs_list = dcs_list->next; + } + } +} + +#endif + +/* ================================= linux ============================ */ + +#if linux + +#include +#include +#include + +/****************************************** + * Enter/exit critical section. + */ + +/* We don't initialize critical sections unless we actually need them. + * So keep a linked list of the ones we do use, and in the static destructor + * code, walk the list and release them. + */ + +typedef struct D_CRITICAL_SECTION +{ + struct D_CRITICAL_SECTION *next; + pthread_mutex_t cs; +} D_CRITICAL_SECTION; + +static D_CRITICAL_SECTION *dcs_list; +static D_CRITICAL_SECTION critical_section; +static pthread_mutexattr_t _criticals_attr; + +void _STI_critical_init(void); +void _STD_critical_term(void); + +void _d_criticalenter(D_CRITICAL_SECTION *dcs) +{ + if (!dcs_list) + { _STI_critical_init(); + atexit(_STD_critical_term); + } + //printf("_d_criticalenter(dcs = x%x)\n", dcs); + if (!dcs->next) + { + pthread_mutex_lock(&critical_section.cs); + if (!dcs->next) // if, in the meantime, another thread didn't set it + { + dcs->next = dcs_list; + dcs_list = dcs; + pthread_mutex_init(&dcs->cs, &_criticals_attr); + } + pthread_mutex_unlock(&critical_section.cs); + } + pthread_mutex_lock(&dcs->cs); +} + +void _d_criticalexit(D_CRITICAL_SECTION *dcs) +{ + //printf("_d_criticalexit(dcs = x%x)\n", dcs); + pthread_mutex_unlock(&dcs->cs); +} + +void _STI_critical_init() +{ + if (!dcs_list) + { //printf("_STI_critical_init()\n"); + pthread_mutexattr_init(&_criticals_attr); + pthread_mutexattr_settype(&_criticals_attr, PTHREAD_MUTEX_RECURSIVE_NP); + + // The global critical section doesn't need to be recursive + pthread_mutex_init(&critical_section.cs, 0); + dcs_list = &critical_section; + } +} + +void _STD_critical_term() +{ + if (dcs_list) + { //printf("_STI_critical_term()\n"); + while (dcs_list) + { + //printf("\tlooping... %x\n", dcs_list); + pthread_mutex_destroy(&dcs_list->cs); + dcs_list = dcs_list->next; + } + } +} + +#endif + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/dmain2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/dmain2.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,293 @@ +/* + * Placed into the Public Domain. + * written by Walter Bright + * www.digitalmars.com + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +private +{ + import util.console; + + import tango.stdc.stddef; + import tango.stdc.stdlib; + import tango.stdc.string; +} + +version( Win32 ) +{ + extern (Windows) void* LocalFree(void*); + extern (Windows) wchar_t* GetCommandLineW(); + extern (Windows) wchar_t** CommandLineToArgvW(wchar_t*, int*); + extern (Windows) export int WideCharToMultiByte(uint, uint, wchar_t*, int, char*, int, char*, int); + //pragma(lib, "shell32.lib"); // needed for CommandLineToArgvW + //pragma(lib, "tango-win32-dmd.lib"); // links Tango's Win32 library to reduce EXE size +} + +extern (C) void _STI_monitor_staticctor(); +extern (C) void _STD_monitor_staticdtor(); +extern (C) void _STI_critical_init(); +extern (C) void _STD_critical_term(); +extern (C) void gc_init(); +extern (C) void gc_term(); +extern (C) void _moduleCtor(); +extern (C) void _moduleDtor(); +extern (C) void thread_joinAll(); + +//debug=PRINTF; +debug(PRINTF) extern (C) int printf(char*, ...); + +/*********************************** + * These functions must be defined for any D program linked + * against this library. + */ +extern (C) void onAssertError( char[] file, size_t line ); +extern (C) void onAssertErrorMsg( char[] file, size_t line, char[] msg ); +extern (C) void onArrayBoundsError( char[] file, size_t line ); +extern (C) void onSwitchError( char[] file, size_t line ); +extern (C) bool runModuleUnitTests(); + +// this function is called from the utf module +//extern (C) void onUnicodeError( char[] msg, size_t idx ); + +/*********************************** + * These are internal callbacks for various language errors. + */ +extern (C) void _d_assert( char[] file, uint line ) +{ + onAssertError( file, line ); +} + +extern (C) void _d_assert_msg( char[] msg, char[] file, uint line ) +{ + onAssertErrorMsg( file, line, msg ); +} + +extern (C) void _d_array_bounds( char[] file, uint line ) +{ + onArrayBoundsError( file, line ); +} + +extern (C) void _d_switch_error( char[] file, uint line ) +{ + onSwitchError( file, line ); +} + +bool _d_isHalting = false; + +extern (C) bool rt_isHalting() +{ + return _d_isHalting; +} + +extern (C) bool rt_trapExceptions = true; + +void _d_criticalInit() +{ + _STI_monitor_staticctor(); + _STI_critical_init(); +} + +alias void delegate( Exception ) ExceptionHandler; + +// this is here so users can manually initialize the runtime +// for example, when there is no main function etc. +extern (C) bool rt_init( ExceptionHandler dg = null ) +{ + _d_criticalInit(); + + try + { + gc_init(); + _moduleCtor(); + return true; + } + catch( Exception e ) + { + if( dg ) + dg( e ); + } + catch + { + + } + _d_criticalTerm(); + return false; +} + +void _d_criticalTerm() +{ + _STD_critical_term(); + _STD_monitor_staticdtor(); +} + +// this is here so users can manually terminate the runtime +// for example, when there is no main function etc. +extern (C) bool rt_term( ExceptionHandler dg = null ) +{ + try + { + thread_joinAll(); + _d_isHalting = true; + _moduleDtor(); + gc_term(); + return true; + } + catch( Exception e ) + { + if( dg ) + dg( e ); + } + catch + { + + } + finally + { + _d_criticalTerm(); + } + return false; +} + +/*********************************** + * The D main() function supplied by the user's program + */ +int main(char[][] args); + +/*********************************** + * Substitutes for the C main() function. + * It's purpose is to wrap the call to the D main() + * function and catch any unhandled exceptions. + */ + +extern (C) int main(int argc, char **argv, char** env) +{ + char[][] args; + int result; + + debug(PRINTF) printf("main ctors\n"); + _STI_monitor_staticctor(); + _STI_critical_init(); + + debug(PRINTF) printf("main args\n"); + version (Win32) + { + wchar_t* wcbuf = GetCommandLineW(); + size_t wclen = wcslen(wcbuf); + int wargc = 0; + wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc); + assert(wargc == argc); + + char* cargp = null; + size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, 0); + + cargp = cast(char*) alloca(cargl); + args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc]; + + for (size_t i = 0, p = 0; i < wargc; i++) + { + int wlen = wcslen( wargs[i] ); + int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, 0); + args[i] = cargp[p .. p+clen]; + p += clen; assert(p <= cargl); + WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, 0); + } + LocalFree(wargs); + wargs = null; + wargc = 0; + } + else version (linux) + { + char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof); + scope(exit) free(am); + + for (size_t i = 0; i < argc; i++) + { + auto len = strlen(argv[i]); + am[i] = argv[i][0 .. len]; + } + args = am[0 .. argc]; + } + + debug(PRINTF) printf("main trap exceptions\n"); + bool trapExceptions = rt_trapExceptions; + + void tryExec(void delegate() dg) + { + debug(PRINTF) printf("main try exec\n"); + if (trapExceptions) + { + try + { + dg(); + } + catch (Exception e) + { + while (e) + { + if (e.file) + { + debug(PRINTF) printf("%.*s(%u): %.*s\n", e.file.length, e.file.ptr, e.line, e.msg.length, e.msg.ptr); + console (e.classinfo.name)("@")(e.file)("(")(e.line)("): ")(e.msg)("\n"); + } + else + { + // debug(PRINTF) printf("%.*s\n", e.toString()); + console (e.classinfo.name)(": ")(e.toString)("\n"); + } + e = e.next; + } + result = EXIT_FAILURE; + } + catch (Object o) + { + // fprintf(stderr, "%.*s\n", o.toString()); + console (o.toString)("\n"); + result = EXIT_FAILURE; + } + } + else + { + dg(); + } + } + + // NOTE: The lifetime of a process is much like the lifetime of an object: + // it is initialized, then used, then destroyed. If initialization + // fails, the successive two steps are never reached. However, if + // initialization succeeds, then cleanup will occur even if the use + // step fails in some way. Here, the use phase consists of running + // the user's main function. If main terminates with an exception, + // the exception is handled and then cleanup begins. An exception + // thrown during cleanup, however, will abort the cleanup process. + + void runMain() + { + debug(PRINTF) printf("main runMain\n"); + result = main(args); + } + + void runAll() + { + debug(PRINTF) printf("main runAll\n"); + gc_init(); + _moduleCtor(); + if (runModuleUnitTests()) + tryExec(&runMain); + thread_joinAll(); + _d_isHalting = true; + _moduleDtor(); + gc_term(); + } + + tryExec(&runAll); + + debug(PRINTF) printf("main dtor\n"); + _STD_critical_term(); + _STD_monitor_staticdtor(); + + return result; +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/eh.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/eh.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,356 @@ +/** + * This module contains functions and structures required for + * exception handling. + */ +module eh; + +import util.console; + +// debug = EH_personality; + +// current EH implementation works on x86 linux only +version(X86) version(linux) version=X86_LINUX; + +private extern(C) void abort(); +private extern(C) int printf(char*, ...); + +// D runtime functions +extern(C) { + int _d_isbaseof(ClassInfo oc, ClassInfo c); +} + +// libunwind headers +extern(C) +{ + enum _Unwind_Reason_Code + { + NO_REASON = 0, + FOREIGN_EXCEPTION_CAUGHT = 1, + FATAL_PHASE2_ERROR = 2, + FATAL_PHASE1_ERROR = 3, + NORMAL_STOP = 4, + END_OF_STACK = 5, + HANDLER_FOUND = 6, + INSTALL_CONTEXT = 7, + CONTINUE_UNWIND = 8 + } + + enum _Unwind_Action + { + SEARCH_PHASE = 1, + CLEANUP_PHASE = 2, + HANDLER_PHASE = 3, + FORCE_UNWIND = 4 + } + + alias void* _Unwind_Context_Ptr; + + alias void function(_Unwind_Reason_Code, _Unwind_Exception*) _Unwind_Exception_Cleanup_Fn; + + struct _Unwind_Exception + { + char[8] exception_class; + _Unwind_Exception_Cleanup_Fn exception_cleanup; + int private_1; + int private_2; + } + +version(X86_LINUX) +{ + void _Unwind_Resume(_Unwind_Exception*); + _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception*); + ulong _Unwind_GetLanguageSpecificData(_Unwind_Context_Ptr context); + ulong _Unwind_GetIP(_Unwind_Context_Ptr context); + ulong _Unwind_SetIP(_Unwind_Context_Ptr context, ulong new_value); + ulong _Unwind_SetGR(_Unwind_Context_Ptr context, int index, ulong new_value); + ulong _Unwind_GetRegionStart(_Unwind_Context_Ptr context); +} +else +{ + // runtime calls these directly + void _Unwind_Resume(_Unwind_Exception*) + { + console("_Unwind_Resume is not implemented on this platform.\n"); + } + _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception*) + { + console("_Unwind_RaiseException is not implemented on this platform.\n"); + return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; + } +} + +} + + +// helpers for reading certain DWARF data +//TODO: It may not be a good idea to use exceptions for error handling within exception handling code +private ubyte* get_uleb128(ubyte* addr, ref size_t res) +{ + res = 0; + size_t bitsize = 0; + + // read as long as high bit is set + while(*addr & 0x80) { + res |= (*addr & 0x7f) << bitsize; + bitsize += 7; + addr += 1; + if(bitsize >= size_t.sizeof*8) + throw new Exception("tried to read uleb128 that exceeded size of size_t"); + } + // read last + if(bitsize != 0 && *addr >= 1 << size_t.sizeof*8 - bitsize) + throw new Exception("tried to read uleb128 that exceeded size of size_t"); + res |= (*addr) << bitsize; + + return addr + 1; +} + +private ubyte* get_sleb128(ubyte* addr, ref ptrdiff_t res) +{ + res = 0; + size_t bitsize = 0; + + // read as long as high bit is set + while(*addr & 0x80) { + res |= (*addr & 0x7f) << bitsize; + bitsize += 7; + addr += 1; + if(bitsize >= size_t.sizeof*8) + throw new Exception("tried to read sleb128 that exceeded size of size_t"); + } + // read last + if(bitsize != 0 && *addr >= 1 << size_t.sizeof*8 - bitsize) + throw new Exception("tried to read sleb128 that exceeded size of size_t"); + res |= (*addr) << bitsize; + + // take care of sign + if(bitsize < size_t.sizeof*8 && ((*addr) & 0x40)) + res |= cast(ptrdiff_t)(-1) ^ ((1 << (bitsize+7)) - 1); + + return addr + 1; +} + + +// exception struct used by the runtime. +// _d_throw allocates a new instance and passes the address of its +// _Unwind_Exception member to the unwind call. The personality +// routine is then able to get the whole struct by looking at the data +// surrounding the unwind info. +struct _d_exception +{ + Object exception_object; + _Unwind_Exception unwind_info; +} + +// the 8-byte string identifying the type of exception +// the first 4 are for vendor, the second 4 for language +//TODO: This may be the wrong way around +char[8] _d_exception_class = "LLDCD1\0\0"; + + +// +// x86 Linux specific implementation of personality function +// and helpers +// +version(X86_LINUX) +{ + +// the personality routine gets called by the unwind handler and is responsible for +// reading the EH tables and deciding what to do +extern(C) _Unwind_Reason_Code _d_eh_personality(int ver, _Unwind_Action actions, ulong exception_class, _Unwind_Exception* exception_info, _Unwind_Context_Ptr context) +{ + // check ver: the C++ Itanium ABI only allows ver == 1 + if(ver != 1) + return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; + + // check exceptionClass + //TODO: Treat foreign exceptions with more respect + if((cast(char*)&exception_class)[0..8] != _d_exception_class) + return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; + + // find call site table, action table and classinfo table + // Note: callsite and action tables do not contain static-length + // data and will be parsed as needed + // Note: classinfo_table points past the end of the table + ubyte* callsite_table; + ubyte* action_table; + ClassInfo* classinfo_table; + _d_getLanguageSpecificTables(context, callsite_table, action_table, classinfo_table); + + + /* + find landing pad and action table index belonging to ip by walking + the callsite_table + */ + ubyte* callsite_walker = callsite_table; + + // get the instruction pointer + // will be used to find the right entry in the callsite_table + // -1 because it will point past the last instruction + ulong ip = _Unwind_GetIP(context) - 1; + + // address block_start is relative to + ulong region_start = _Unwind_GetRegionStart(context); + + // table entries + uint block_start_offset, block_size; + ulong landing_pad; + size_t action_offset; + + while(true) { + // if we've gone through the list and found nothing... + if(callsite_walker >= action_table) + return _Unwind_Reason_Code.CONTINUE_UNWIND; + + block_start_offset = *cast(uint*)callsite_walker; + block_size = *(cast(uint*)callsite_walker + 1); + landing_pad = *(cast(uint*)callsite_walker + 2); + if(landing_pad) + landing_pad += region_start; + callsite_walker = get_uleb128(callsite_walker + 3*uint.sizeof, action_offset); + + debug(EH_personality_verbose) printf("%d %d %d\n", block_start_offset, block_size, landing_pad); + + // since the list is sorted, as soon as we're past the ip + // there's no handler to be found + if(ip < region_start + block_start_offset) + return _Unwind_Reason_Code.CONTINUE_UNWIND; + + // if we've found our block, exit + if(ip < region_start + block_start_offset + block_size) + break; + } + + debug(EH_personality) printf("Found correct landing pad and actionOffset %d\n", action_offset); + + // now we need the exception's classinfo to find a handler + // the exception_info is actually a member of a larger _d_exception struct + // the runtime allocated. get that now + _d_exception* exception_struct = cast(_d_exception*)(cast(ubyte*)exception_info - _d_exception.unwind_info.offsetof); + + // if there's no action offset and no landing pad, continue unwinding + if(!action_offset && !landing_pad) + return _Unwind_Reason_Code.CONTINUE_UNWIND; + + // if there's no action offset but a landing pad, this is a cleanup handler + else if(!action_offset && landing_pad) + return _d_eh_install_finally_context(actions, landing_pad, exception_struct, context); + + /* + walk action table chain, comparing classinfos using _d_isbaseof + */ + ubyte* action_walker = action_table + action_offset - 1; + + ptrdiff_t ti_offset, next_action_offset; + while(true) { + action_walker = get_sleb128(action_walker, ti_offset); + // it is intentional that we not modify action_walker here + // next_action_offset is from current action_walker position + get_sleb128(action_walker, next_action_offset); + + // negative are 'filters' which we don't use + assert(ti_offset >= 0 && "Filter actions are unsupported"); + + // zero means cleanup, which we require to be the last action + if(ti_offset == 0) { + assert(next_action_offset == 0 && "Cleanup action must be last in chain"); + return _d_eh_install_finally_context(actions, landing_pad, exception_struct, context); + } + + // get classinfo for action and check if the one in the + // exception structure is a base + ClassInfo catch_ci = classinfo_table[-ti_offset]; + debug(EH_personality) printf("Comparing catch %s to exception %s\n", catch_ci.name.ptr, exception_struct.exception_object.classinfo.name.ptr); + if(_d_isbaseof(exception_struct.exception_object.classinfo, catch_ci)) + return _d_eh_install_catch_context(actions, ti_offset, landing_pad, exception_struct, context); + + // we've walked through all actions and found nothing... + if(next_action_offset == 0) + return _Unwind_Reason_Code.CONTINUE_UNWIND; + else + action_walker += next_action_offset; + } + + assert(false); +} + +// These are the register numbers for SetGR that +// llvm's eh.exception and eh.selector intrinsics +// will pick up. +// Found by trial-and-error and probably platform dependent! +private int eh_exception_regno = 0; +private int eh_selector_regno = 2; + +private _Unwind_Reason_Code _d_eh_install_catch_context(_Unwind_Action actions, ptrdiff_t switchval, ulong landing_pad, _d_exception* exception_struct, _Unwind_Context_Ptr context) +{ + debug(EH_personality) printf("Found catch clause!\n"); + + if(actions & _Unwind_Action.SEARCH_PHASE) + return _Unwind_Reason_Code.HANDLER_FOUND; + + else if(actions & _Unwind_Action.HANDLER_PHASE) + { + debug(EH_personality) printf("Setting switch value to: %d!\n", switchval); + _Unwind_SetGR(context, eh_exception_regno, cast(ulong)cast(void*)(exception_struct.exception_object)); + _Unwind_SetGR(context, eh_selector_regno, switchval); + _Unwind_SetIP(context, landing_pad); + return _Unwind_Reason_Code.INSTALL_CONTEXT; + } + + assert(false); +} + +private _Unwind_Reason_Code _d_eh_install_finally_context(_Unwind_Action actions, ulong landing_pad, _d_exception* exception_struct, _Unwind_Context_Ptr context) +{ + // if we're merely in search phase, continue + if(actions & _Unwind_Action.SEARCH_PHASE) + return _Unwind_Reason_Code.CONTINUE_UNWIND; + + debug(EH_personality) printf("Calling cleanup routine...\n"); + + _Unwind_SetGR(context, eh_exception_regno, cast(ulong)exception_struct); + _Unwind_SetGR(context, eh_selector_regno, 0); + _Unwind_SetIP(context, landing_pad); + return _Unwind_Reason_Code.INSTALL_CONTEXT; +} + +private void _d_getLanguageSpecificTables(_Unwind_Context_Ptr context, ref ubyte* callsite, ref ubyte* action, ref ClassInfo* ci) +{ + ubyte* data = cast(ubyte*)_Unwind_GetLanguageSpecificData(context); + + //TODO: Do proper DWARF reading here + assert(*data++ == 0xff); + + assert(*data++ == 0x00); + size_t cioffset; + data = get_uleb128(data, cioffset); + ci = cast(ClassInfo*)(data + cioffset); + + assert(*data++ == 0x03); + size_t callsitelength; + data = get_uleb128(data, callsitelength); + action = data + callsitelength; + + callsite = data; +} + +} // end of x86 Linux specific implementation + + +extern(C) void _d_throw_exception(Object e) +{ + if (e !is null) + { + _d_exception* exc_struct = new _d_exception; + exc_struct.unwind_info.exception_class[] = _d_exception_class; + exc_struct.exception_object = e; + _Unwind_Reason_Code ret = _Unwind_RaiseException(&exc_struct.unwind_info); + console("_Unwind_RaiseException failed with reason code: ")(ret)("\n"); + } + abort(); +} + +extern(C) void _d_eh_resume_unwind(_d_exception* exception_struct) +{ + _Unwind_Resume(&exception_struct.unwind_info); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/genobj.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/genobj.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,1294 @@ +/** + * Part of the D programming language runtime library. + * Forms the symbols available to all D programs. Includes + * Object, which is the root of the class object hierarchy. + * + * This module is implicitly imported. + * Macros: + * WIKI = Object + */ + +/* + * Copyright (C) 2004-2007 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + * Modified by Tomas Lindquist Olsen for use with LLVMDC. + */ + +module object; + +//debug=PRINTF + +private +{ + import tango.stdc.string; // : memcmp, memcpy, memmove; + import tango.stdc.stdlib; // : calloc, realloc, free; + import util.string; + debug(PRINTF) import tango.stdc.stdio; // : printf; + + extern (C) void onOutOfMemoryError(); + extern (C) Object _d_newclass(ClassInfo ci); +} + +// NOTE: For some reason, this declaration method doesn't work +// in this particular file (and this file only). It must +// be a DMD thing. +//alias typeof(int.sizeof) size_t; +//alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; + +version( LLVM64 ) +{ + alias ulong size_t; + alias long ptrdiff_t; +} +else +{ + alias uint size_t; + alias int ptrdiff_t; +} + +alias size_t hash_t; + +/** + * All D class objects inherit from Object. + */ +class Object +{ + /** + * Convert Object to a human readable string. + */ + char[] toString() + { + return this.classinfo.name; + } + + /** + * Compute hash function for Object. + */ + hash_t toHash() + { + // BUG: this prevents a compacting GC from working, needs to be fixed + return cast(hash_t)cast(void*)this; + } + + /** + * Compare with another Object obj. + * Returns: + * $(TABLE + * $(TR $(TD this < obj) $(TD < 0)) + * $(TR $(TD this == obj) $(TD 0)) + * $(TR $(TD this > obj) $(TD > 0)) + * ) + */ + int opCmp(Object o) + { + // BUG: this prevents a compacting GC from working, needs to be fixed + //return cast(int)cast(void*)this - cast(int)cast(void*)o; + + //throw new Exception("need opCmp for class " ~ this.classinfo.name); + return this !is o; + } + + /** + * Returns !=0 if this object does have the same contents as obj. + */ + int opEquals(Object o) + { + return cast(int)(this is o); + } + + interface Monitor + { + void lock(); + void unlock(); + } +} + +/** + * Information about an interface. + * When an object is accessed via an interface, an Interface* appears as the + * first entry in its vtbl. + */ +struct Interface +{ + ClassInfo classinfo; /// .classinfo for this interface (not for containing class) + void*[] vtbl; + ptrdiff_t offset; /// offset to Interface 'this' from Object 'this' +} + +/** + * Runtime type information about a class. Can be retrieved for any class type + * or instance by using the .classinfo property. + * A pointer to this appears as the first entry in the class's vtbl[]. + */ +class ClassInfo : Object +{ + byte[] init; /** class static initializer + * (init.length gives size in bytes of class) + */ + char[] name; /// class name + void*[] vtbl; /// virtual function pointer table + Interface[] interfaces; /// interfaces this class implements + ClassInfo base; /// base class + void* destructor; + void function(Object) classInvariant; + uint flags; + // 1: // IUnknown + // 2: // has no possible pointers into GC memory + // 4: // has offTi[] member + // 8: // has constructors + void* deallocator; + OffsetTypeInfo[] offTi; + void function(Object) defaultConstructor; // default Constructor + + /** + * Search all modules for ClassInfo corresponding to classname. + * Returns: null if not found + */ + static ClassInfo find(char[] classname) + { + foreach (m; ModuleInfo) + { + //writefln("module %s, %d", m.name, m.localClasses.length); + foreach (c; m.localClasses) + { + //writefln("\tclass %s", c.name); + if (c.name == classname) + return c; + } + } + return null; + } + + /** + * Create instance of Object represented by 'this'. + */ + Object create() + { + if (flags & 8 && !defaultConstructor) + return null; + Object o = _d_newclass(this); + if (flags & 8 && defaultConstructor) + { + defaultConstructor(o); + } + return o; + } +} + +/** + * Array of pairs giving the offset and type information for each + * member in an aggregate. + */ +struct OffsetTypeInfo +{ + size_t offset; /// Offset of member from start of object + TypeInfo ti; /// TypeInfo for this member +} + +/** + * Runtime type information about a type. + * Can be retrieved for any type using a + * TypeidExpression. + */ +class TypeInfo +{ + hash_t toHash() + { hash_t hash; + + foreach (char c; this.toString()) + hash = hash * 9 + c; + return hash; + } + + int opCmp(Object o) + { + if (this is o) + return 0; + TypeInfo ti = cast(TypeInfo)o; + if (ti is null) + return 1; + return stringCompare(this.toString(), ti.toString()); + } + + int opEquals(Object o) + { + /* TypeInfo instances are singletons, but duplicates can exist + * across DLL's. Therefore, comparing for a name match is + * sufficient. + */ + if (this is o) + return 1; + TypeInfo ti = cast(TypeInfo)o; + return cast(int)(ti && this.toString() == ti.toString()); + } + + /// Returns a hash of the instance of a type. + hash_t getHash(void *p) { return cast(hash_t)p; } + + /// Compares two instances for equality. + int equals(void *p1, void *p2) { return cast(int)(p1 == p2); } + + /// Compares two instances for <, ==, or >. + int compare(void *p1, void *p2) { return 0; } + + /// Returns size of the type. + size_t tsize() { return 0; } + + /// Swaps two instances of the type. + void swap(void *p1, void *p2) + { + size_t n = tsize(); + for (size_t i = 0; i < n; i++) + { byte t; + + t = (cast(byte *)p1)[i]; + (cast(byte *)p1)[i] = (cast(byte *)p2)[i]; + (cast(byte *)p2)[i] = t; + } + } + + /// Get TypeInfo for 'next' type, as defined by what kind of type this is, + /// null if none. + TypeInfo next() { return null; } + + /// Return default initializer, null if default initialize to 0 + void[] init() { return null; } + + /// Get flags for type: 1 means GC should scan for pointers + uint flags() { return 0; } + + /// Get type information on the contents of the type; null if not available + OffsetTypeInfo[] offTi() { return null; } +} + +class TypeInfo_Typedef : TypeInfo +{ + char[] toString() { return name; } + + int opEquals(Object o) + { TypeInfo_Typedef c; + + return cast(int) + (this is o || + ((c = cast(TypeInfo_Typedef)o) !is null && + this.name == c.name && + this.base == c.base)); + } + + hash_t getHash(void *p) { return base.getHash(p); } + int equals(void *p1, void *p2) { return base.equals(p1, p2); } + int compare(void *p1, void *p2) { return base.compare(p1, p2); } + size_t tsize() { return base.tsize(); } + void swap(void *p1, void *p2) { return base.swap(p1, p2); } + + TypeInfo next() { return base; } + uint flags() { return base.flags(); } + void[] init() { return m_init.length ? m_init : base.init(); } + + TypeInfo base; + char[] name; + void[] m_init; +} + +class TypeInfo_Enum : TypeInfo_Typedef +{ +} + +class TypeInfo_Pointer : TypeInfo +{ + char[] toString() { return m_next.toString() ~ "*"; } + + int opEquals(Object o) + { TypeInfo_Pointer c; + + return this is o || + ((c = cast(TypeInfo_Pointer)o) !is null && + this.m_next == c.m_next); + } + + hash_t getHash(void *p) + { + return cast(hash_t)*cast(void**)p; + } + + int equals(void *p1, void *p2) + { + return cast(int)(*cast(void* *)p1 == *cast(void* *)p2); + } + + int compare(void *p1, void *p2) + { + if (*cast(void* *)p1 < *cast(void* *)p2) + return -1; + else if (*cast(void* *)p1 > *cast(void* *)p2) + return 1; + else + return 0; + } + + size_t tsize() + { + return (void*).sizeof; + } + + void swap(void *p1, void *p2) + { void* tmp; + tmp = *cast(void**)p1; + *cast(void**)p1 = *cast(void**)p2; + *cast(void**)p2 = tmp; + } + + TypeInfo next() { return m_next; } + uint flags() { return 1; } + + TypeInfo m_next; +} + +class TypeInfo_Array : TypeInfo +{ + char[] toString() { return value.toString() ~ "[]"; } + + int opEquals(Object o) + { TypeInfo_Array c; + + return cast(int) + (this is o || + ((c = cast(TypeInfo_Array)o) !is null && + this.value == c.value)); + } + + hash_t getHash(void *p) + { size_t sz = value.tsize(); + hash_t hash = 0; + void[] a = *cast(void[]*)p; + for (size_t i = 0; i < a.length; i++) + hash += value.getHash(a.ptr + i * sz); + return hash; + } + + int equals(void *p1, void *p2) + { + void[] a1 = *cast(void[]*)p1; + void[] a2 = *cast(void[]*)p2; + if (a1.length != a2.length) + return 0; + size_t sz = value.tsize(); + for (size_t i = 0; i < a1.length; i++) + { + if (!value.equals(a1.ptr + i * sz, a2.ptr + i * sz)) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + void[] a1 = *cast(void[]*)p1; + void[] a2 = *cast(void[]*)p2; + size_t sz = value.tsize(); + size_t len = a1.length; + + if (a2.length < len) + len = a2.length; + for (size_t u = 0; u < len; u++) + { + int result = value.compare(a1.ptr + u * sz, a2.ptr + u * sz); + if (result) + return result; + } + return cast(int)a1.length - cast(int)a2.length; + } + + size_t tsize() + { + return (void[]).sizeof; + } + + void swap(void *p1, void *p2) + { void[] tmp; + tmp = *cast(void[]*)p1; + *cast(void[]*)p1 = *cast(void[]*)p2; + *cast(void[]*)p2 = tmp; + } + + TypeInfo value; + + TypeInfo next() + { + return value; + } + + uint flags() { return 1; } +} + +class TypeInfo_StaticArray : TypeInfo +{ + char[] toString() + { + char [10] tmp = void; + return value.toString() ~ "[" ~ intToUtf8(tmp, len) ~ "]"; + } + + int opEquals(Object o) + { TypeInfo_StaticArray c; + + return cast(int) + (this is o || + ((c = cast(TypeInfo_StaticArray)o) !is null && + this.len == c.len && + this.value == c.value)); + } + + hash_t getHash(void *p) + { size_t sz = value.tsize(); + hash_t hash = 0; + for (size_t i = 0; i < len; i++) + hash += value.getHash(p + i * sz); + return hash; + } + + int equals(void *p1, void *p2) + { + size_t sz = value.tsize(); + + for (size_t u = 0; u < len; u++) + { + if (!value.equals(p1 + u * sz, p2 + u * sz)) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + size_t sz = value.tsize(); + + for (size_t u = 0; u < len; u++) + { + int result = value.compare(p1 + u * sz, p2 + u * sz); + if (result) + return result; + } + return 0; + } + + size_t tsize() + { + return len * value.tsize(); + } + + void swap(void *p1, void *p2) + { void* tmp; + size_t sz = value.tsize(); + ubyte[16] buffer; + void* pbuffer; + + if (sz < buffer.sizeof) + tmp = buffer.ptr; + else + tmp = pbuffer = (new void[sz]).ptr; + + for (size_t u = 0; u < len; u += sz) + { size_t o = u * sz; + memcpy(tmp, p1 + o, sz); + memcpy(p1 + o, p2 + o, sz); + memcpy(p2 + o, tmp, sz); + } + if (pbuffer) + delete pbuffer; + } + + void[] init() { return value.init(); } + TypeInfo next() { return value; } + uint flags() { return value.flags(); } + + TypeInfo value; + size_t len; +} + +class TypeInfo_AssociativeArray : TypeInfo +{ + char[] toString() + { + return next.toString() ~ "[" ~ key.toString() ~ "]"; + } + + int opEquals(Object o) + { TypeInfo_AssociativeArray c; + + return this is o || + ((c = cast(TypeInfo_AssociativeArray)o) !is null && + this.key == c.key && + this.value == c.value); + } + + // BUG: need to add the rest of the functions + + size_t tsize() + { + return (char[int]).sizeof; + } + + TypeInfo next() { return value; } + uint flags() { return 1; } + + TypeInfo value; + TypeInfo key; +} + +class TypeInfo_Function : TypeInfo +{ + char[] toString() + { + return next.toString() ~ "()"; + } + + int opEquals(Object o) + { TypeInfo_Function c; + + return this is o || + ((c = cast(TypeInfo_Function)o) !is null && + this.next == c.next); + } + + // BUG: need to add the rest of the functions + + size_t tsize() + { + return 0; // no size for functions + } + + TypeInfo next; +} + +class TypeInfo_Delegate : TypeInfo +{ + char[] toString() + { + return next.toString() ~ " delegate()"; + } + + int opEquals(Object o) + { TypeInfo_Delegate c; + + return this is o || + ((c = cast(TypeInfo_Delegate)o) !is null && + this.next == c.next); + } + + // BUG: need to add the rest of the functions + + size_t tsize() + { alias int delegate() dg; + return dg.sizeof; + } + + uint flags() { return 1; } + + TypeInfo next; +} + +class TypeInfo_Class : TypeInfo +{ + char[] toString() { return info.name; } + + int opEquals(Object o) + { TypeInfo_Class c; + + return this is o || + ((c = cast(TypeInfo_Class)o) !is null && + this.info.name == c.classinfo.name); + } + + hash_t getHash(void *p) + { + Object o = *cast(Object*)p; + return o ? o.toHash() : 0; + } + + int equals(void *p1, void *p2) + { + Object o1 = *cast(Object*)p1; + Object o2 = *cast(Object*)p2; + + return (o1 is o2) || (o1 && o1.opEquals(o2)); + } + + int compare(void *p1, void *p2) + { + Object o1 = *cast(Object*)p1; + Object o2 = *cast(Object*)p2; + int c = 0; + + // Regard null references as always being "less than" + if (o1 !is o2) + { + if (o1) + { if (!o2) + c = 1; + else + c = o1.opCmp(o2); + } + else + c = -1; + } + return c; + } + + size_t tsize() + { + return Object.sizeof; + } + + uint flags() { return 1; } + + OffsetTypeInfo[] offTi() + { + return (info.flags & 4) ? info.offTi : null; + } + + ClassInfo info; +} + +class TypeInfo_Interface : TypeInfo +{ + char[] toString() { return info.name; } + + int opEquals(Object o) + { TypeInfo_Interface c; + + return this is o || + ((c = cast(TypeInfo_Interface)o) !is null && + this.info.name == c.classinfo.name); + } + + hash_t getHash(void *p) + { + Interface* pi = **cast(Interface ***)*cast(void**)p; + Object o = cast(Object)(*cast(void**)p - pi.offset); + assert(o); + return o.toHash(); + } + + int equals(void *p1, void *p2) + { + Interface* pi = **cast(Interface ***)*cast(void**)p1; + Object o1 = cast(Object)(*cast(void**)p1 - pi.offset); + pi = **cast(Interface ***)*cast(void**)p2; + Object o2 = cast(Object)(*cast(void**)p2 - pi.offset); + + return o1 == o2 || (o1 && o1.opCmp(o2) == 0); + } + + int compare(void *p1, void *p2) + { + Interface* pi = **cast(Interface ***)*cast(void**)p1; + Object o1 = cast(Object)(*cast(void**)p1 - pi.offset); + pi = **cast(Interface ***)*cast(void**)p2; + Object o2 = cast(Object)(*cast(void**)p2 - pi.offset); + int c = 0; + + // Regard null references as always being "less than" + if (o1 != o2) + { + if (o1) + { if (!o2) + c = 1; + else + c = o1.opCmp(o2); + } + else + c = -1; + } + return c; + } + + size_t tsize() + { + return Object.sizeof; + } + + uint flags() { return 1; } + + ClassInfo info; +} + +class TypeInfo_Struct : TypeInfo +{ + char[] toString() { return name; } + + int opEquals(Object o) + { TypeInfo_Struct s; + + return this is o || + ((s = cast(TypeInfo_Struct)o) !is null && + this.name == s.name && + this.init.length == s.init.length); + } + + hash_t getHash(void *p) + { hash_t h; + + assert(p); + if (xtoHash) + { debug(PRINTF) printf("getHash() using xtoHash\n"); + h = (*xtoHash)(p); + } + else + { + debug(PRINTF) printf("getHash() using default hash\n"); + // A sorry hash algorithm. + // Should use the one for strings. + // BUG: relies on the GC not moving objects + for (size_t i = 0; i < m_init.length; i++) + { h = h * 9 + *cast(ubyte*)p; + p++; + } + } + return h; + } + + int equals(void *p1, void *p2) + { int c; + + if (p1 == p2) + c = 1; + else if (!p1 || !p2) + c = 0; + else if (xopEquals) + c = (*xopEquals)(p1, p2); + else + // BUG: relies on the GC not moving objects + c = (memcmp(p1, p2, m_init.length) == 0); + return c; + } + + int compare(void *p1, void *p2) + { + int c = 0; + + // Regard null references as always being "less than" + if (p1 != p2) + { + if (p1) + { if (!p2) + c = 1; + else if (xopCmp) + c = (*xopCmp)(p1, p2); + else + // BUG: relies on the GC not moving objects + c = memcmp(p1, p2, m_init.length); + } + else + c = -1; + } + return c; + } + + size_t tsize() + { + return m_init.length; + } + + void[] init() { return m_init; } + + uint flags() { return m_flags; } + + char[] name; + void[] m_init; // initializer; never null + + hash_t function(void*) xtoHash; + int function(void*,void*) xopEquals; + int function(void*,void*) xopCmp; + char[] function(void*) xtoString; + + uint m_flags; +} + +class TypeInfo_Tuple : TypeInfo +{ + TypeInfo[] elements; + + char[] toString() + { + char[] s; + s = "("; + foreach (i, element; elements) + { + if (i) + s ~= ','; + s ~= element.toString(); + } + s ~= ")"; + return s; + } + + int opEquals(Object o) + { + if (this is o) + return 1; + + auto t = cast(TypeInfo_Tuple)o; + if (t && elements.length == t.elements.length) + { + for (size_t i = 0; i < elements.length; i++) + { + if (elements[i] != t.elements[i]) + return 0; + } + return 1; + } + return 0; + } + + hash_t getHash(void *p) + { + assert(0); + } + + int equals(void *p1, void *p2) + { + assert(0); + } + + int compare(void *p1, void *p2) + { + assert(0); + } + + size_t tsize() + { + assert(0); + } + + void swap(void *p1, void *p2) + { + assert(0); + } +} + + +//////////////////////////////////////////////////////////////////////////////// +// Exception +//////////////////////////////////////////////////////////////////////////////// + + +class Exception : Object +{ + interface TraceInfo + { + int opApply( int delegate( inout char[] ) ); + } + + char[] msg; + char[] file; + size_t line; + TraceInfo info; + Exception next; + + this( char[] msg, Exception next = null ) + { + this.msg = msg; + this.next = next; + this.info = traceContext(); + } + + this( char[] msg, char[] file, size_t line, Exception next = null ) + { + this(msg, next); + this.file = file; + this.line = line; + this.info = traceContext(); + } + + char[] toString() + { + return msg; + } +} + + +alias Exception.TraceInfo function( void* ptr = null ) TraceHandler; +private TraceHandler traceHandler = null; + + +/** + * Overrides the default trace hander with a user-supplied version. + * + * Params: + * h = The new trace handler. Set to null to use the default handler. + */ +extern (C) void rt_setTraceHandler( TraceHandler h ) +{ + traceHandler = h; +} + + +/** + * This function will be called when an Exception is constructed. The + * user-supplied trace handler will be called if one has been supplied, + * otherwise no trace will be generated. + * + * Params: + * ptr = A pointer to the location from which to generate the trace, or null + * if the trace should be generated from within the trace handler + * itself. + * + * Returns: + * An object describing the current calling context or null if no handler is + * supplied. + */ +Exception.TraceInfo traceContext( void* ptr = null ) +{ + if( traceHandler is null ) + return null; + return traceHandler( ptr ); +} + + +//////////////////////////////////////////////////////////////////////////////// +// ModuleInfo +//////////////////////////////////////////////////////////////////////////////// + + +enum +{ + MIctorstart = 1, // we've started constructing it + MIctordone = 2, // finished construction + MIstandalone = 4, // module ctor does not depend on other module + // ctors being done first + MIhasictor = 8, // has ictor member +} + + +class ModuleInfo +{ + char[] name; + ModuleInfo[] importedModules; + ClassInfo[] localClasses; + uint flags; + + void function() ctor; // module static constructor (order dependent) + void function() dtor; // module static destructor + void function() unitTest; // module unit tests + + void* xgetMembers; // module getMembers() function + + void function() ictor; // module static constructor (order independent) + + static int opApply( int delegate( inout ModuleInfo ) dg ) + { + int ret = 0; + + foreach( m; _moduleinfo_array ) + { + ret = dg( m ); + if( ret ) + break; + } + return ret; + } +} + + +// this gets initialized in _moduleCtor() +extern (C) ModuleInfo[] _moduleinfo_array; + +// This linked list is created by a compiler generated function inserted +// into the .ctor list by the compiler. +struct ModuleReference +{ + ModuleReference* next; + ModuleInfo mod; +} +extern (C) ModuleReference* _Dmodule_ref; // start of linked list + +// this list is built from the linked list above +ModuleInfo[] _moduleinfo_dtors; +uint _moduleinfo_dtors_i; + +/** + * Initialize the modules. + */ + +extern (C) void _moduleCtor() +{ + debug(PRINTF) printf("_moduleCtor()\n"); + + int len = 0; + ModuleReference *mr; + + for (mr = _Dmodule_ref; mr; mr = mr.next) + len++; + _moduleinfo_array = new ModuleInfo[len]; + len = 0; + for (mr = _Dmodule_ref; mr; mr = mr.next) + { _moduleinfo_array[len] = mr.mod; + len++; + } + + _moduleinfo_dtors = new ModuleInfo[_moduleinfo_array.length]; + debug(PRINTF) printf("_moduleinfo_dtors = x%x\n", cast(void *)_moduleinfo_dtors); + _moduleIndependentCtors(); + _moduleCtor2(_moduleinfo_array, 0); +} + +extern (C) void _moduleIndependentCtors() +{ + debug(PRINTF) printf("_moduleIndependentCtors()\n"); + foreach (m; _moduleinfo_array) + { + if (m && m.flags & MIhasictor && m.ictor) + { + (*m.ictor)(); + } + } + debug(PRINTF) printf("_moduleIndependentCtors() DONE\n"); +} + +void _moduleCtor2(ModuleInfo[] mi, int skip) +{ + debug(PRINTF) printf("_moduleCtor2(): %d modules\n", mi.length); + for (uint i = 0; i < mi.length; i++) + { + ModuleInfo m = mi[i]; + + debug(PRINTF) printf("\tmodule[%d] = '%p'\n", i, m); + if (!m) + continue; + debug(PRINTF) printf("\tmodule[%d] = '%.*s'\n", i, m.name.length, m.name.ptr); + if (m.flags & MIctordone) + continue; + debug(PRINTF) printf("\tmodule[%d] = '%.*s', m = x%x\n", i, m.name.length, m.name.ptr, m); + + if (m.ctor || m.dtor) + { + if (m.flags & MIctorstart) + { if (skip || m.flags & MIstandalone) + continue; + throw new Exception( "Cyclic dependency in module " ~ m.name ); + } + + m.flags |= MIctorstart; + _moduleCtor2(m.importedModules, 0); + if (m.ctor) + (*m.ctor)(); + m.flags &= ~MIctorstart; + m.flags |= MIctordone; + + // Now that construction is done, register the destructor + //printf("\tadding module dtor x%x\n", m); + assert(_moduleinfo_dtors_i < _moduleinfo_dtors.length); + _moduleinfo_dtors[_moduleinfo_dtors_i++] = m; + } + else + { + m.flags |= MIctordone; + _moduleCtor2(m.importedModules, 1); + } + } + debug(PRINTF) printf("_moduleCtor2() DONE\n"); +} + +/** + * Destruct the modules. + */ + +// Starting the name with "_STD" means under linux a pointer to the +// function gets put in the .dtors segment. + +extern (C) void _moduleDtor() +{ + debug(PRINTF) printf("_moduleDtor(): %d modules\n", _moduleinfo_dtors_i); + + for (uint i = _moduleinfo_dtors_i; i-- != 0;) + { + ModuleInfo m = _moduleinfo_dtors[i]; + + debug(PRINTF) printf("\tmodule[%d] = '%.*s', x%x\n", i, m.name, m); + if (m.dtor) + { + (*m.dtor)(); + } + } + debug(PRINTF) printf("_moduleDtor() done\n"); +} + +//////////////////////////////////////////////////////////////////////////////// +// Monitor +//////////////////////////////////////////////////////////////////////////////// + +alias Object.Monitor IMonitor; +alias void delegate(Object) DEvent; + +// NOTE: The dtor callback feature is only supported for monitors that are not +// supplied by the user. The assumption is that any object with a user- +// supplied monitor may have special storage or lifetime requirements and +// that as a result, storing references to local objects within Monitor +// may not be safe or desirable. Thus, devt is only valid if impl is +// null. +struct Monitor +{ + IMonitor impl; + /* internal */ + DEvent[] devt; + /* stuff */ +} + +Monitor* getMonitor(Object h) +{ + return cast(Monitor*) (cast(void**) h)[1]; +} + +void setMonitor(Object h, Monitor* m) +{ + (cast(void**) h)[1] = m; +} + +extern (C) void _d_monitor_create(Object); +extern (C) void _d_monitor_destroy(Object); +extern (C) void _d_monitor_lock(Object); +extern (C) int _d_monitor_unlock(Object); + +extern (C) void _d_monitordelete(Object h, bool det) +{ + Monitor* m = getMonitor(h); + + if (m !is null) + { + IMonitor i = m.impl; + if (i is null) + { + _d_monitor_devt(m, h); + _d_monitor_destroy(h); + setMonitor(h, null); + return; + } + if (det && (cast(void*) i) !is (cast(void*) h)) + delete i; + setMonitor(h, null); + } +} + +extern (C) void _d_monitorenter(Object h) +{ + Monitor* m = getMonitor(h); + + if (m is null) + { + _d_monitor_create(h); + m = getMonitor(h); + } + + IMonitor i = m.impl; + + if (i is null) + { + _d_monitor_lock(h); + return; + } + i.lock(); +} + +extern (C) void _d_monitorexit(Object h) +{ + Monitor* m = getMonitor(h); + IMonitor i = m.impl; + + if (i is null) + { + _d_monitor_unlock(h); + return; + } + i.unlock(); +} + +extern (C) void _d_monitor_devt(Monitor* m, Object h) +{ + if (m.devt.length) + { + DEvent[] devt; + + synchronized (h) + { + devt = m.devt; + m.devt = null; + } + foreach (v; devt) + { + if (v) + v(h); + } + free(devt.ptr); + } +} + +extern (C) void rt_attachDisposeEvent(Object h, DEvent e) +{ + synchronized (h) + { + Monitor* m = getMonitor(h); + assert(m.impl is null); + + foreach (inout v; m.devt) + { + if (v is null || v == e) + { + v = e; + return; + } + } + + auto len = m.devt.length + 4; // grow by 4 elements + auto pos = m.devt.length; // insert position + auto p = realloc(m.devt.ptr, DEvent.sizeof * len); + if (!p) + onOutOfMemoryError(); + m.devt = (cast(DEvent*)p)[0 .. len]; + m.devt[pos+1 .. len] = null; + m.devt[pos] = e; + } +} + +extern (C) void rt_detachDisposeEvent(Object h, DEvent e) +{ + synchronized (h) + { + Monitor* m = getMonitor(h); + assert(m.impl is null); + + foreach (p, v; m.devt) + { + if (v == e) + { + memmove(&m.devt[p], + &m.devt[p+1], + (m.devt.length - p - 1) * DEvent.sizeof); + m.devt[$ - 1] = null; + return; + } + } + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/lifetime.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/lifetime.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,1052 @@ +/** + * This module contains all functions related to an object's lifetime: + * allocation, resizing, deallocation, and finalization. + * + * Copyright: Copyright (C) 2004-2007 Digital Mars, www.digitalmars.com. + * All rights reserved. + * License: + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + * Authors: Walter Bright, Sean Kelly, Tomas Lindquist Olsen + */ +module lifetime; + +//debug=PRINTF; +//debug=PRINTF2; + +private +{ + import tango.stdc.stdlib; + import tango.stdc.string; + import tango.stdc.stdarg; + debug(PRINTF) import tango.stdc.stdio; + else debug(PRINTF2) import tango.stdc.stdio; +} + + +private +{ + enum BlkAttr : uint + { + FINALIZE = 0b0000_0001, + NO_SCAN = 0b0000_0010, + NO_MOVE = 0b0000_0100, + ALL_BITS = 0b1111_1111 + } + + struct BlkInfo + { + void* base; + size_t size; + uint attr; + } + + extern (C) uint gc_getAttr( void* p ); + extern (C) uint gc_setAttr( void* p, uint a ); + extern (C) uint gc_clrAttr( void* p, uint a ); + + extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); + extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); + extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ); + extern (C) void gc_free( void* p ); + + extern (C) void* gc_addrOf( void* p ); + extern (C) size_t gc_sizeOf( void* p ); + extern (C) BlkInfo gc_query( void* p ); + + extern (C) bool onCollectResource( Object o ); + extern (C) void onFinalizeError( ClassInfo c, Exception e ); + extern (C) void onOutOfMemoryError(); + + extern (C) void _d_monitordelete(Object h, bool det = true); + + enum + { + PAGESIZE = 4096 + } + + alias bool function(Object) CollectHandler; + CollectHandler collectHandler = null; +} + + +/** + * + */ +extern (C) Object _d_newclass(ClassInfo ci) +{ + void* p; + + debug(PRINTF2) printf("_d_newclass(ci = %p, %s)\n", ci, cast(char *)ci.name.ptr); + /+ + if (ci.flags & 1) // if COM object + { /* COM objects are not garbage collected, they are reference counted + * using AddRef() and Release(). They get free'd by C's free() + * function called by Release() when Release()'s reference count goes + * to zero. + */ + p = tango.stdc.stdlib.malloc(ci.init.length); + if (!p) + onOutOfMemoryError(); + } + else + +/ + { + p = gc_malloc(ci.init.length, + BlkAttr.FINALIZE | (ci.flags & 2 ? BlkAttr.NO_SCAN : 0)); + debug(PRINTF2) printf(" p = %p\n", p); + } + + debug(PRINTF2) + { + printf("p = %p\n", p); + printf("ci = %p, ci.init = %p, len = %d\n", ci, ci.init.ptr, ci.init.length); + printf("vptr = %p\n", *cast(void**) ci.init.ptr); + printf("vtbl[0] = %p\n", (*cast(void***) ci.init.ptr)[0]); + printf("vtbl[1] = %p\n", (*cast(void***) ci.init.ptr)[1]); + printf("init[0] = %p\n", (cast(uint**) ci.init.ptr)[0]); + printf("init[1] = %p\n", (cast(uint**) ci.init.ptr)[1]); + printf("init[2] = %p\n", (cast(uint**) ci.init.ptr)[2]); + printf("init[3] = %p\n", (cast(uint**) ci.init.ptr)[3]); + printf("init[4] = %p\n", (cast(uint**) ci.init.ptr)[4]); + } + + // initialize it + // llvmdc does this inline + //(cast(byte*) p)[0 .. ci.init.length] = ci.init[]; + + debug(PRINTF) printf("initialization done\n"); + return cast(Object) p; +} + +/** + * + */ +extern (C) void _d_delinterface(void* p) +{ + if (p) + { + Interface* pi = **cast(Interface ***)p; + Object o = cast(Object)(p - pi.offset); + + _d_delclass(o); + //*p = null; + } +} + +// used for deletion +private extern (D) alias void function(Object) fp_t; + + +/** + * + */ +extern (C) void _d_delclass(Object p) +{ + if (p) + { + debug(PRINTF) printf("_d_delclass(%p)\n", p); + + ClassInfo **pc = cast(ClassInfo **)p; + if (*pc) + { + ClassInfo c = **pc; + + rt_finalize(cast(void*) p); + + if (c.deallocator) + { + fp_t fp = cast(fp_t)c.deallocator; + (*fp)(p); // call deallocator + //*p = null; + return; + } + } + else + { + rt_finalize(cast(void*) p); + } + gc_free(cast(void*) p); + //*p = null; + } +} + +/+ + +/** + * + */ +struct Array +{ + size_t length; + void* data; +} + ++/ + +/** + * Allocate a new array of length elements. + * ti is the type of the resulting array, or pointer to element. + * (For when the array is initialized to 0) + */ +extern (C) void* _d_newarrayT(TypeInfo ti, size_t length) +{ + void* p; + auto size = ti.next.tsize(); // array element size + + debug(PRINTF) printf("_d_newarrayT(length = %u, size = %d)\n", length, size); + if (length == 0 || size == 0) + return null; + + version (D_InlineAsm_X86) + { + asm + { + mov EAX,size ; + mul EAX,length ; + mov size,EAX ; + jc Loverflow ; + } + } + else + size *= length; + p = gc_malloc(size + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + debug(PRINTF) printf(" p = %p\n", p); + memset(p, 0, size); + return p; + +Loverflow: + onOutOfMemoryError(); + return null; +} + +/** + * For when the array has a non-zero initializer. + */ +extern (C) void* _d_newarrayiT(TypeInfo ti, size_t length) +{ + void* result; + auto size = ti.next.tsize(); // array element size + + debug(PRINTF) printf("_d_newarrayiT(length = %d, size = %d)\n", length, size); + + if (length == 0 || size == 0) + result = null; + else + { + auto initializer = ti.next.init(); + auto isize = initializer.length; + auto q = initializer.ptr; + version (D_InlineAsm_X86) + { + asm + { + mov EAX,size ; + mul EAX,length ; + mov size,EAX ; + jc Loverflow ; + } + } + else + size *= length; + auto p = gc_malloc(size + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + debug(PRINTF) printf(" p = %p\n", p); + if (isize == 1) + memset(p, *cast(ubyte*)q, size); + else if (isize == int.sizeof) + { + int init = *cast(int*)q; + size /= int.sizeof; + for (size_t u = 0; u < size; u++) + { + (cast(int*)p)[u] = init; + } + } + else + { + for (size_t u = 0; u < size; u += isize) + { + memcpy(p + u, q, isize); + } + } + result = p; + } + return result; + +Loverflow: + onOutOfMemoryError(); + return null; +} + +/** + * + */ +extern (C) void* _d_newarraymT(TypeInfo ti, int ndims, size_t* dims) +{ + void* result; + + debug(PRINTF) printf("_d_newarraymT(ndims = %d)\n", ndims); + if (ndims == 0) + result = null; + else + { + static void[] foo(TypeInfo ti, size_t* pdim, int ndims) + { + size_t dim = *pdim; + void[] p; + + debug(PRINTF) printf("foo(ti = %p, ti.next = %p, dim = %d, ndims = %d\n", ti, ti.next, dim, ndims); + if (ndims == 1) + { + auto r = _d_newarrayT(ti, dim); + return r[0 .. dim]; + } + else + { + p = gc_malloc(dim * (void[]).sizeof + 1)[0 .. dim]; + for (int i = 0; i < dim; i++) + { + (cast(void[]*)p.ptr)[i] = foo(ti.next, pdim + 1, ndims - 1); + } + } + return p; + } + + result = foo(ti, dims, ndims).ptr; + debug(PRINTF) printf("result = %p\n", result); + + version (none) + { + for (int i = 0; i < ndims; i++) + { + printf("index %d: %d\n", i, *dims++); + } + } + } + return result; +} + + +/** + * + */ +extern (C) void* _d_newarraymiT(TypeInfo ti, int ndims, size_t* dims) +{ + void* result; + + debug(PRINTF) printf("_d_newarraymiT(ndims = %d)\n", ndims); + if (ndims == 0) + result = null; + else + { + static void[] foo(TypeInfo ti, size_t* pdim, int ndims) + { + size_t dim = *pdim; + void[] p; + + if (ndims == 1) + { + auto r = _d_newarrayiT(ti, dim); + p = r[0 .. dim]; + } + else + { + p = gc_malloc(dim * (void[]).sizeof + 1)[0 .. dim]; + for (int i = 0; i < dim; i++) + { + (cast(void[]*)p.ptr)[i] = foo(ti.next, pdim + 1, ndims - 1); + } + } + return p; + } + + result = foo(ti, dims, ndims).ptr; + debug(PRINTF) printf("result = %p\n", result); + + version (none) + { + for (int i = 0; i < ndims; i++) + { + printf("index %d: %d\n", i, *dims++); + printf("init = %d\n", *dims++); + } + } + } + return result; +} + +/+ + +/** + * + */ +void* _d_allocmemory(size_t nbytes) +{ + return gc_malloc(nbytes); +} + ++/ + +/** + * for allocating a single POD value + */ +extern (C) void* _d_allocmemoryT(TypeInfo ti) +{ + return gc_malloc(ti.tsize(), (ti.flags() & 1) ? BlkAttr.NO_SCAN : 0); +} + +/** + * + */ +extern (C) void _d_delarray(size_t plength, void* pdata) +{ +// if (p) +// { + assert(!plength || pdata); + + if (pdata) + gc_free(pdata); +// p.data = null; +// p.length = 0; +// } +} + +/** + * + */ +extern (C) void _d_delmemory(void* p) +{ + if (p) + { + gc_free(p); + //*p = null; + } +} + +/** + * + */ +extern (C) void _d_callinterfacefinalizer(void *p) +{ + if (p) + { + Interface *pi = **cast(Interface ***)p; + Object o = cast(Object)(p - pi.offset); + rt_finalize(cast(void*)o); + } +} + +/** + * + */ +extern (C) void _d_callfinalizer(void* p) +{ + rt_finalize( p ); +} + + +/** + * + */ +extern (C) void rt_setCollectHandler(CollectHandler h) +{ + collectHandler = h; +} + +/** + * + */ +extern (C) void rt_finalize(void* p, bool det = true) +{ + debug(PRINTF) printf("rt_finalize(p = %p)\n", p); + + if (p) // not necessary if called from gc + { + ClassInfo** pc = cast(ClassInfo**)p; + + if (*pc) + { + ClassInfo c = **pc; + + try + { + if (det || collectHandler is null || collectHandler(cast(Object)p)) + { + do + { + if (c.destructor) + { + debug(PRINTF) printf("calling dtor of %.*s\n", c.name.length, c.name.ptr); + fp_t fp = cast(fp_t)c.destructor; + (*fp)(cast(Object)p); // call destructor + } + c = c.base; + } while (c); + } + if ((cast(void**)p)[1]) // if monitor is not null + _d_monitordelete(cast(Object)p, det); + } + catch (Exception e) + { + onFinalizeError(**pc, e); + } + finally + { + *pc = null; // zero vptr + } + } + } +} + +/** + * Resize dynamic arrays with 0 initializers. + */ +extern (C) byte* _d_arraysetlengthT(TypeInfo ti, size_t newlength, size_t plength, byte* pdata) +in +{ + assert(ti); + assert(!plength || pdata); +} +body +{ + byte* newdata; + size_t sizeelem = ti.next.tsize(); + + debug(PRINTF) + { + printf("_d_arraysetlengthT(sizeelem = %d, newlength = %d)\n", sizeelem, newlength); + printf("\tp.data = %p, p.length = %d\n", pdata, plength); + } + + if (newlength) + { + version (D_InlineAsm_X86) + { + size_t newsize = void; + + asm + { + mov EAX, newlength; + mul EAX, sizeelem; + mov newsize, EAX; + jc Loverflow; + } + } + else + { + size_t newsize = sizeelem * newlength; + + if (newsize / newlength != sizeelem) + goto Loverflow; + } + + debug(PRINTF) printf("newsize = %x, newlength = %x\n", newsize, newlength); + + if (pdata) + { + newdata = pdata; + if (newlength > plength) + { + size_t size = plength * sizeelem; + auto info = gc_query(pdata); + + if (info.size <= newsize || info.base != pdata) + { + if (info.size >= PAGESIZE && info.base == pdata) + { // Try to extend in-place + auto u = gc_extend(pdata, (newsize + 1) - info.size, (newsize + 1) - info.size); + if (u) + { + goto L1; + } + } + newdata = cast(byte *)gc_malloc(newsize + 1, info.attr); + newdata[0 .. size] = pdata[0 .. size]; + } + L1: + newdata[size .. newsize] = 0; + } + } + else + { + newdata = cast(byte *)gc_calloc(newsize + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + } + } + else + { + newdata = pdata; + } + + return newdata; + +Loverflow: + onOutOfMemoryError(); + return null; +} + + +/** + * Resize arrays for non-zero initializers. + * p pointer to array lvalue to be updated + * newlength new .length property of array + * sizeelem size of each element of array + * initsize size of initializer + * ... initializer + */ +extern (C) byte* _d_arraysetlengthiT(TypeInfo ti, size_t newlength, size_t plength, byte* pdata) +in +{ + assert(!plength || pdata); +} +body +{ + byte* newdata; + TypeInfo tinext = ti.next; + size_t sizeelem = tinext.tsize(); + void[] initializer = tinext.init(); + size_t initsize = initializer.length; + + assert(sizeelem); + assert(initsize); + assert(initsize <= sizeelem); + assert((sizeelem / initsize) * initsize == sizeelem); + + debug(PRINTF) + { + printf("_d_arraysetlengthiT(sizeelem = %d, newlength = %d, initsize = %d)\n", sizeelem, newlength, initsize); + printf("\tp.data = %p, p.length = %d\n", pdata, plength); + } + + if (newlength) + { + version (D_InlineAsm_X86) + { + size_t newsize = void; + + asm + { + mov EAX,newlength ; + mul EAX,sizeelem ; + mov newsize,EAX ; + jc Loverflow ; + } + } + else + { + size_t newsize = sizeelem * newlength; + + if (newsize / newlength != sizeelem) + goto Loverflow; + } + debug(PRINTF) printf("newsize = %x, newlength = %x\n", newsize, newlength); + + size_t size = plength * sizeelem; + + if (pdata) + { + newdata = pdata; + if (newlength > plength) + { + auto info = gc_query(pdata); + + if (info.size <= newsize || info.base != pdata) + { + if (info.size >= PAGESIZE && info.base == pdata) + { // Try to extend in-place + auto u = gc_extend(pdata, (newsize + 1) - info.size, (newsize + 1) - info.size); + if (u) + { + goto L1; + } + } + newdata = cast(byte *)gc_malloc(newsize + 1, info.attr); + newdata[0 .. size] = pdata[0 .. size]; + L1: ; + } + } + } + else + { + newdata = cast(byte *)gc_malloc(newsize + 1, !(tinext.flags() & 1) ? BlkAttr.NO_SCAN : 0); + } + + auto q = initializer.ptr; // pointer to initializer + + if (newsize > size) + { + if (initsize == 1) + { + debug(PRINTF) printf("newdata = %p, size = %d, newsize = %d, *q = %d\n", newdata, size, newsize, *cast(byte*)q); + newdata[size .. newsize] = *(cast(byte*)q); + } + else + { + for (size_t u = size; u < newsize; u += initsize) + { + memcpy(newdata + u, q, initsize); + } + } + } + } + else + { + newdata = pdata; + } + + return newdata; + +Loverflow: + onOutOfMemoryError(); + return null; +} + +/+ + +/** + * Append y[] to array x[]. + * size is size of each array element. + */ +extern (C) long _d_arrayappendT(TypeInfo ti, Array *px, byte[] y) +{ + auto sizeelem = ti.next.tsize(); // array element size + auto info = gc_query(px.data); + auto length = px.length; + auto newlength = length + y.length; + auto newsize = newlength * sizeelem; + + if (info.size < newsize || info.base != px.data) + { byte* newdata; + + if (info.size >= PAGESIZE && info.base == px.data) + { // Try to extend in-place + auto u = gc_extend(px.data, (newsize + 1) - info.size, (newsize + 1) - info.size); + if (u) + { + goto L1; + } + } + newdata = cast(byte *)gc_malloc(newCapacity(newlength, sizeelem) + 1, info.attr); + memcpy(newdata, px.data, length * sizeelem); + px.data = newdata; + } + L1: + px.length = newlength; + memcpy(px.data + length * sizeelem, y.ptr, y.length * sizeelem); + return *cast(long*)px; +} + + +/** + * + */ +size_t newCapacity(size_t newlength, size_t size) +{ + version(none) + { + size_t newcap = newlength * size; + } + else + { + /* + * Better version by Dave Fladebo: + * This uses an inverse logorithmic algorithm to pre-allocate a bit more + * space for larger arrays. + * - Arrays smaller than PAGESIZE bytes are left as-is, so for the most + * common cases, memory allocation is 1 to 1. The small overhead added + * doesn't affect small array perf. (it's virtually the same as + * current). + * - Larger arrays have some space pre-allocated. + * - As the arrays grow, the relative pre-allocated space shrinks. + * - The logorithmic algorithm allocates relatively more space for + * mid-size arrays, making it very fast for medium arrays (for + * mid-to-large arrays, this turns out to be quite a bit faster than the + * equivalent realloc() code in C, on Linux at least. Small arrays are + * just as fast as GCC). + * - Perhaps most importantly, overall memory usage and stress on the GC + * is decreased significantly for demanding environments. + */ + size_t newcap = newlength * size; + size_t newext = 0; + + if (newcap > PAGESIZE) + { + //double mult2 = 1.0 + (size / log10(pow(newcap * 2.0,2.0))); + + // redo above line using only integer math + + static int log2plus1(size_t c) + { int i; + + if (c == 0) + i = -1; + else + for (i = 1; c >>= 1; i++) + { + } + return i; + } + + /* The following setting for mult sets how much bigger + * the new size will be over what is actually needed. + * 100 means the same size, more means proportionally more. + * More means faster but more memory consumption. + */ + //long mult = 100 + (1000L * size) / (6 * log2plus1(newcap)); + long mult = 100 + (1000L * size) / log2plus1(newcap); + + // testing shows 1.02 for large arrays is about the point of diminishing return + if (mult < 102) + mult = 102; + newext = cast(size_t)((newcap * mult) / 100); + newext -= newext % size; + debug(PRINTF) printf("mult: %2.2f, alloc: %2.2f\n",mult/100.0,newext / cast(double)size); + } + newcap = newext > newcap ? newext : newcap; + debug(PRINTF) printf("newcap = %d, newlength = %d, size = %d\n", newcap, newlength, size); + } + return newcap; +} + + +/** + * + */ +extern (C) byte[] _d_arrayappendcT(TypeInfo ti, inout byte[] x, ...) +{ + auto sizeelem = ti.next.tsize(); // array element size + auto info = gc_query(x.ptr); + auto length = x.length; + auto newlength = length + 1; + auto newsize = newlength * sizeelem; + + assert(info.size == 0 || length * sizeelem <= info.size); + + debug(PRINTF) printf("_d_arrayappendcT(sizeelem = %d, ptr = %p, length = %d, cap = %d)\n", sizeelem, x.ptr, x.length, info.size); + + if (info.size <= newsize || info.base != x.ptr) + { byte* newdata; + + if (info.size >= PAGESIZE && info.base == x.ptr) + { // Try to extend in-place + auto u = gc_extend(x.ptr, (newsize + 1) - info.size, (newsize + 1) - info.size); + if (u) + { + goto L1; + } + } + debug(PRINTF) printf("_d_arrayappendcT(length = %d, newlength = %d, cap = %d)\n", length, newlength, info.size); + auto newcap = newCapacity(newlength, sizeelem); + assert(newcap >= newlength * sizeelem); + newdata = cast(byte *)gc_malloc(newcap + 1, info.attr); + memcpy(newdata, x.ptr, length * sizeelem); + (cast(void**)(&x))[1] = newdata; + } + L1: + byte *argp = cast(byte *)(&ti + 2); + + *cast(size_t *)&x = newlength; + x.ptr[length * sizeelem .. newsize] = argp[0 .. sizeelem]; + assert((cast(size_t)x.ptr & 15) == 0); + assert(gc_sizeOf(x.ptr) > x.length * sizeelem); + return x; +} + + +/** + * + */ +extern (C) byte[] _d_arraycatT(TypeInfo ti, byte[] x, byte[] y) +out (result) +{ + auto sizeelem = ti.next.tsize(); // array element size + debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p sizeelem = %d => %d,%p)\n", x.length, x.ptr, y.length, y.ptr, sizeelem, result.length, result.ptr); + assert(result.length == x.length + y.length); + for (size_t i = 0; i < x.length * sizeelem; i++) + assert((cast(byte*)result)[i] == (cast(byte*)x)[i]); + for (size_t i = 0; i < y.length * sizeelem; i++) + assert((cast(byte*)result)[x.length * sizeelem + i] == (cast(byte*)y)[i]); + + size_t cap = gc_sizeOf(result.ptr); + assert(!cap || cap > result.length * sizeelem); +} +body +{ + version (none) + { + /* Cannot use this optimization because: + * char[] a, b; + * char c = 'a'; + * b = a ~ c; + * c = 'b'; + * will change the contents of b. + */ + if (!y.length) + return x; + if (!x.length) + return y; + } + + debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p)\n", x.length, x.ptr, y.length, y.ptr); + auto sizeelem = ti.next.tsize(); // array element size + debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p sizeelem = %d)\n", x.length, x.ptr, y.length, y.ptr, sizeelem); + size_t xlen = x.length * sizeelem; + size_t ylen = y.length * sizeelem; + size_t len = xlen + ylen; + + if (!len) + return null; + + byte* p = cast(byte*)gc_malloc(len + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + memcpy(p, x.ptr, xlen); + memcpy(p + xlen, y.ptr, ylen); + p[len] = 0; + return p[0 .. x.length + y.length]; +} + + +/** + * + */ +extern (C) byte[] _d_arraycatnT(TypeInfo ti, uint n, ...) +{ void* a; + size_t length; + byte[]* p; + uint i; + byte[] b; + auto size = ti.next.tsize(); // array element size + + p = cast(byte[]*)(&n + 1); + + for (i = 0; i < n; i++) + { + b = *p++; + length += b.length; + } + if (!length) + return null; + + a = gc_malloc(length * size, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + p = cast(byte[]*)(&n + 1); + + uint j = 0; + for (i = 0; i < n; i++) + { + b = *p++; + if (b.length) + { + memcpy(a + j, b.ptr, b.length * size); + j += b.length * size; + } + } + + byte[] result; + *cast(int *)&result = length; // jam length + (cast(void **)&result)[1] = a; // jam ptr + return result; +} + + +/** + * + */ +extern (C) void* _d_arrayliteralT(TypeInfo ti, size_t length, ...) +{ + auto sizeelem = ti.next.tsize(); // array element size + void* result; + + debug(PRINTF) printf("_d_arrayliteralT(sizeelem = %d, length = %d)\n", sizeelem, length); + if (length == 0 || sizeelem == 0) + result = null; + else + { + result = gc_malloc(length * sizeelem, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + + va_list q; + va_start!(size_t)(q, length); + + size_t stacksize = (sizeelem + int.sizeof - 1) & ~(int.sizeof - 1); + + if (stacksize == sizeelem) + { + memcpy(result, q, length * sizeelem); + } + else + { + for (size_t i = 0; i < length; i++) + { + memcpy(result + i * sizeelem, q, sizeelem); + q += stacksize; + } + } + + va_end(q); + } + return result; +} + ++/ + + +/** + * Support for array.dup property. + */ +struct Array2 +{ + size_t length; + void* ptr; +} + + +/** + * + */ +extern (C) Array2 _adDupT(TypeInfo ti, Array2 a) +out (result) +{ + auto sizeelem = ti.next.tsize(); // array element size + assert(memcmp(result.ptr, a.ptr, a.length * sizeelem) == 0); +} +body +{ + Array2 r; + + if (a.length) + { + auto sizeelem = ti.next.tsize(); // array element size + auto size = a.length * sizeelem; + r.ptr = gc_malloc(size, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); + r.length = a.length; + memcpy(r.ptr, a.ptr, size); + } + return r; +} + + +unittest +{ + int[] a; + int[] b; + int i; + + a = new int[3]; + a[0] = 1; a[1] = 2; a[2] = 3; + b = a.dup; + assert(b.length == 3); + for (i = 0; i < 3; i++) + assert(b[i] == i + 1); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/llvmdc.mak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/llvmdc.mak Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,174 @@ +# Makefile to build the LLVMDC compiler runtime D library for Linux +# Designed to work with GNU make +# Targets: +# make +# Same as make all +# make lib +# Build the compiler runtime library +# make doc +# Generate documentation +# make clean +# Delete unneeded files created by build process + +LIB_TARGET=libtango-base-llvmdc.a +LIB_MASK=libtango-base-llvmdc*.a + +LIB_TARGET_C=libtango-base-c-llvmdc.a +LIB_MASK_C=libtango-base-c-llvmdc*.a + +CP=cp -f +RM=rm -f +MD=mkdir -p + +#CFLAGS=-O3 $(ADD_CFLAGS) +CFLAGS=-g $(ADD_CFLAGS) + +#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) +DFLAGS=-g -w $(ADD_DFLAGS) + +#TFLAGS=-O3 -inline -w $(ADD_DFLAGS) +TFLAGS=-g -w $(ADD_DFLAGS) + +DOCFLAGS=-version=DDoc + +CC=gcc +LC=llvm-ar rsv +CLC=ar rsv +DC=llvmdc +LLC=llvm-as + +LIB_DEST=.. + +.SUFFIXES: .s .S .c .cpp .d .ll .html .o .bc + +.s.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.S.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.c.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.cpp.o: + g++ -c $(CFLAGS) $< -o$@ + +.d.bc: + $(DC) -c $(DFLAGS) $< -of$@ + +.d.html: + $(DC) -c -o- $(DOCFLAGS) -Df$*.html llvmdc.ddoc $< + +targets : lib doc +all : lib doc +lib : llvmdc.lib llvmdc.clib +doc : llvmdc.doc + +###################################################### +OBJ_C= \ + monitor.o \ + critical.o + +OBJ_BASE= \ + aaA.bc \ + aApply.bc \ + aApplyR.bc \ + adi.bc \ + arrayInit.bc \ + cast.bc \ + dmain2.bc \ + eh.bc \ + genobj.bc \ + lifetime.bc \ + memory.bc \ + qsort2.bc \ + switch.bc \ + +OBJ_UTIL= \ + util/console.bc \ + util/ctype.bc \ + util/string.bc \ + util/utf.bc + +OBJ_LLVMDC= \ + llvmdc/bitmanip.bc \ + llvmdc/vararg.bc + +OBJ_TI= \ + typeinfo/ti_AC.bc \ + typeinfo/ti_Acdouble.bc \ + typeinfo/ti_Acfloat.bc \ + typeinfo/ti_Acreal.bc \ + typeinfo/ti_Adouble.bc \ + typeinfo/ti_Afloat.bc \ + typeinfo/ti_Ag.bc \ + typeinfo/ti_Aint.bc \ + typeinfo/ti_Along.bc \ + typeinfo/ti_Areal.bc \ + typeinfo/ti_Ashort.bc \ + typeinfo/ti_byte.bc \ + typeinfo/ti_C.bc \ + typeinfo/ti_cdouble.bc \ + typeinfo/ti_cfloat.bc \ + typeinfo/ti_char.bc \ + typeinfo/ti_creal.bc \ + typeinfo/ti_dchar.bc \ + typeinfo/ti_delegate.bc \ + typeinfo/ti_double.bc \ + typeinfo/ti_float.bc \ + typeinfo/ti_idouble.bc \ + typeinfo/ti_ifloat.bc \ + typeinfo/ti_int.bc \ + typeinfo/ti_ireal.bc \ + typeinfo/ti_long.bc \ + typeinfo/ti_ptr.bc \ + typeinfo/ti_real.bc \ + typeinfo/ti_short.bc \ + typeinfo/ti_ubyte.bc \ + typeinfo/ti_uint.bc \ + typeinfo/ti_ulong.bc \ + typeinfo/ti_ushort.bc \ + typeinfo/ti_void.bc \ + typeinfo/ti_wchar.bc + +ALL_OBJS= \ + $(OBJ_BASE) \ + $(OBJ_UTIL) \ + $(OBJ_TI) \ + $(OBJ_LLVMDC) + +###################################################### + +ALL_DOCS= + +###################################################### + +llvmdc.lib : $(LIB_TARGET) + +$(LIB_TARGET) : $(ALL_OBJS) + $(RM) $@ + $(LC) $@ $(ALL_OBJS) + +llvmdc.clib : $(LIB_TARGET_C) + +$(LIB_TARGET_C) : $(OBJ_C) + $(RM) $@ + $(CLC) $@ $(OBJ_C) + +llvmdc.doc : $(ALL_DOCS) + echo No documentation available. + +###################################################### + +clean : + find . -name "*.di" | xargs $(RM) + $(RM) $(ALL_OBJS) + $(RM) $(OBJ_C) + $(RM) $(ALL_DOCS) + $(RM) $(LIB_MASK) + $(RM) $(LIB_MASK_C) + +install : + $(MD) $(LIB_DEST) + $(CP) $(LIB_MASK) $(LIB_DEST)/. + $(CP) $(LIB_MASK_C) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/llvmdc/bitmanip.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/llvmdc/bitmanip.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,81 @@ +/* + * D phobos intrinsics for LLVMDC + * + * From GDC ... public domain! + */ +module llvmdc.bitmanip; + +// Check for the right compiler +version(LLVMDC) +{ + // OK +} +else +{ + static assert(false, "This module is only valid for LLVMDC"); +} + +int bsf(uint v) +{ + uint m = 1; + uint i; + for (i = 0; i < 32; i++,m<<=1) { + if (v&m) + return i; + } + return i; // supposed to be undefined +} + +int bsr(uint v) +{ + uint m = 0x80000000; + uint i; + for (i = 32; i ; i--,m>>>=1) { + if (v&m) + return i-1; + } + return i; // supposed to be undefined +} + +int bt(uint *p, uint bitnum) +{ + return (p[bitnum / (uint.sizeof*8)] & (1<<(bitnum & ((uint.sizeof*8)-1)))) ? -1 : 0 ; +} + +int btc(uint *p, uint bitnum) +{ + uint * q = p + (bitnum / (uint.sizeof*8)); + uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); + int result = *q & mask; + *q ^= mask; + return result ? -1 : 0; +} + +int btr(uint *p, uint bitnum) +{ + uint * q = p + (bitnum / (uint.sizeof*8)); + uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); + int result = *q & mask; + *q &= ~mask; + return result ? -1 : 0; +} + +int bts(uint *p, uint bitnum) +{ + uint * q = p + (bitnum / (uint.sizeof*8)); + uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); + int result = *q & mask; + *q |= mask; + return result ? -1 : 0; +} + +pragma(intrinsic, "llvm.bswap.i32") + uint bswap(uint val); + +ubyte inp(uint p) { return 0; } +ushort inpw(uint p) { return 0; } +uint inpl(uint p) { return 0; } + +ubyte outp(uint p, ubyte v) { return v; } +ushort outpw(uint p, ushort v) { return v; } +uint outpl(uint p, uint v) { return v; } diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/llvmdc/vararg.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/llvmdc/vararg.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ +/* + * This module holds the implementation of special vararg templates for D style var args. + * + * Provides the functions tango.core.Vararg expects to be present! + */ + +module llvmdc.Vararg; + +// Check for the right compiler +version(LLVMDC) +{ + // OK +} +else +{ + static assert(false, "This module is only valid for LLVMDC"); +} + +alias void* va_list; + +void va_start(T) ( out va_list ap, inout T parmn ) +{ + // not needed ! +} + +T va_arg(T)(ref va_list vp) +{ + T* arg = cast(T*) vp; + // llvmdc always aligns to size_t.sizeof in vararg lists + vp = cast(va_list) ( cast(void*) vp + ( ( T.sizeof + size_t.sizeof - 1 ) & ~( size_t.sizeof - 1 ) ) ); + return *arg; +} + +void va_end( va_list ap ) +{ + // not needed ! +} + +void va_copy( out va_list dst, va_list src ) +{ + // seems pretty useless ! + dst = src; +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/mars.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/mars.h Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,105 @@ + +/* + * Placed into the Public Domain + * written by Walter Bright, Digital Mars + * www.digitalmars.com + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +#include + +#if __cplusplus +extern "C" { +#endif + +struct ClassInfo; +struct Vtbl; + +typedef struct Vtbl +{ + size_t len; + void **vptr; +} Vtbl; + +typedef struct Interface +{ + struct ClassInfo *classinfo; + struct Vtbl vtbl; + int offset; +} Interface; + +typedef struct Object +{ + void **vptr; + void *monitor; +} Object; + +typedef struct ClassInfo +{ + Object object; + + size_t initlen; + void *init; + + size_t namelen; + char *name; + + Vtbl vtbl; + + size_t interfacelen; + Interface *interfaces; + + struct ClassInfo *baseClass; + + void *destructor; + void *invariant; + + int flags; +} ClassInfo; + +typedef struct Exception +{ + Object object; + + size_t msglen; + char* msg; + + size_t filelen; + char* file; + + size_t line; + + struct Interface *info; + struct Exception *next; +} Exception; + +typedef struct Array +{ + size_t length; + void *ptr; +} Array; + +typedef struct Delegate +{ + void *thisptr; + void (*funcptr)(); +} Delegate; + +void _d_monitorenter(Object *h); +void _d_monitorexit(Object *h); + +int _d_isbaseof(ClassInfo *b, ClassInfo *c); +Object *_d_dynamic_cast(Object *o, ClassInfo *ci); + +Object * _d_newclass(ClassInfo *ci); +void _d_delclass(Object **p); + +void _d_OutOfMemory(); + +#if __cplusplus +} +#endif + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/memory.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/memory.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,173 @@ +/** + * This module exposes functionality for inspecting and manipulating memory. + * + * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. + * All rights reserved. + * License: + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + * Authors: Walter Bright, Sean Kelly + */ +module memory; + + +private +{ + version( linux ) + { + //version = SimpleLibcStackEnd; + + version( SimpleLibcStackEnd ) + { + extern (C) extern void* __libc_stack_end; + } + else + { + import tango.stdc.posix.dlfcn; + } + } + version(LLVMDC) + { + pragma(intrinsic, "llvm.frameaddress") + { + void* llvm_frameaddress(uint level=0); + } + } +} + + +/** + * + */ +extern (C) void* rt_stackBottom() +{ + version( Win32 ) + { + asm + { + naked; + mov EAX,FS:4; + ret; + } + } + else version( linux ) + { + version( SimpleLibcStackEnd ) + { + return __libc_stack_end; + } + else + { + // See discussion: http://autopackage.org/forums/viewtopic.php?t=22 + static void** libc_stack_end; + + if( libc_stack_end == libc_stack_end.init ) + { + void* handle = dlopen( null, RTLD_NOW ); + libc_stack_end = cast(void**) dlsym( handle, "__libc_stack_end" ); + dlclose( handle ); + } + return *libc_stack_end; + } + } + else + { + static assert( false, "Operating system not supported." ); + } +} + + +/** + * + */ +extern (C) void* rt_stackTop() +{ + version(LLVMDC) + { + return llvm_frameaddress(); + } + else version( D_InlineAsm_X86 ) + { + asm + { + naked; + mov EAX, ESP; + ret; + } + } + else + { + static assert( false, "Architecture not supported." ); + } +} + + +private +{ + version( Win32 ) + { + extern (C) + { + extern int _data_start__; + extern int _bss_end__; + + alias _data_start__ Data_Start; + alias _bss_end__ Data_End; + } + } + else version( linux ) + { + extern (C) + { + extern int _data; + extern int __data_start; + extern int _end; + extern int _data_start__; + extern int _data_end__; + extern int _bss_start__; + extern int _bss_end__; + extern int __fini_array_end; + } + + alias __data_start Data_Start; + alias _end Data_End; + } + + alias void delegate( void*, void* ) scanFn; +} + + +/** + * + */ +extern (C) void rt_scanStaticData( scanFn scan ) +{ + version( Win32 ) + { + scan( &Data_Start, &Data_End ); + } + else version( linux ) + { + //printf("scanning static data from %p to %p\n", &Data_Start, &Data_End); + scan( &Data_Start, &Data_End ); + } + else + { + static assert( false, "Operating system not supported." ); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/monitor.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/monitor.c Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,208 @@ +// D programming language runtime library +// Public Domain +// written by Walter Bright, Digital Mars +// www.digitalmars.com + +// This is written in C because nobody has written a pthreads interface +// to D yet. + + +#include +#include +#include + +#if _WIN32 +#elif linux +#define USE_PTHREADS 1 +#else +#endif + +#if _WIN32 +#include +#endif + +#if USE_PTHREADS +#include +#endif + +#include "mars.h" + +// This is what the monitor reference in Object points to +typedef struct Monitor +{ + void* impl; // for user-level monitors + Array devt; // for internal monitors + +#if _WIN32 + CRITICAL_SECTION mon; +#endif + +#if USE_PTHREADS + pthread_mutex_t mon; +#endif +} Monitor; + +#define MONPTR(h) (&((Monitor *)(h)->monitor)->mon) + +static volatile int inited; + +/* =============================== Win32 ============================ */ + +#if _WIN32 + +static CRITICAL_SECTION _monitor_critsec; + +void _STI_monitor_staticctor() +{ + if (!inited) + { InitializeCriticalSection(&_monitor_critsec); + inited = 1; + } +} + +void _STD_monitor_staticdtor() +{ + if (inited) + { inited = 0; + DeleteCriticalSection(&_monitor_critsec); + } +} + +void _d_monitor_create(Object *h) +{ + /* + * NOTE: Assume this is only called when h->monitor is null prior to the + * call. However, please note that another thread may call this function + * at the same time, so we can not assert this here. Instead, try and + * create a lock, and if one already exists then forget about it. + */ + + //printf("+_d_monitor_create(%p)\n", h); + assert(h); + Monitor *cs = NULL; + EnterCriticalSection(&_monitor_critsec); + if (!h->monitor) + { + cs = (Monitor *)calloc(sizeof(Monitor), 1); + assert(cs); + InitializeCriticalSection(&cs->mon); + h->monitor = (void *)cs; + cs = NULL; + } + LeaveCriticalSection(&_monitor_critsec); + if (cs) + free(cs); + //printf("-_d_monitor_create(%p)\n", h); +} + +void _d_monitor_destroy(Object *h) +{ + //printf("+_d_monitor_destroy(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + DeleteCriticalSection(MONPTR(h)); + free((void *)h->monitor); + h->monitor = NULL; + //printf("-_d_monitor_destroy(%p)\n", h); +} + +int _d_monitor_lock(Object *h) +{ + //printf("+_d_monitor_acquire(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + EnterCriticalSection(MONPTR(h)); + //printf("-_d_monitor_acquire(%p)\n", h); +} + +void _d_monitor_unlock(Object *h) +{ + //printf("+_d_monitor_release(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + LeaveCriticalSection(MONPTR(h)); + //printf("-_d_monitor_release(%p)\n", h); +} + +#endif + +/* =============================== linux ============================ */ + +#if USE_PTHREADS + +// Includes attribute fixes from David Friedman's GDC port + +static pthread_mutex_t _monitor_critsec; +static pthread_mutexattr_t _monitors_attr; + +void _STI_monitor_staticctor() +{ + if (!inited) + { + pthread_mutexattr_init(&_monitors_attr); + pthread_mutexattr_settype(&_monitors_attr, PTHREAD_MUTEX_RECURSIVE_NP); + pthread_mutex_init(&_monitor_critsec, 0); + inited = 1; + } +} + +void _STD_monitor_staticdtor() +{ + if (inited) + { inited = 0; + pthread_mutex_destroy(&_monitor_critsec); + pthread_mutexattr_destroy(&_monitors_attr); + } +} + +void _d_monitor_create(Object *h) +{ + /* + * NOTE: Assume this is only called when h->monitor is null prior to the + * call. However, please note that another thread may call this function + * at the same time, so we can not assert this here. Instead, try and + * create a lock, and if one already exists then forget about it. + */ + + //printf("+_d_monitor_create(%p)\n", h); + assert(h); + Monitor *cs = NULL; + pthread_mutex_lock(&_monitor_critsec); + if (!h->monitor) + { + cs = (Monitor *)calloc(sizeof(Monitor), 1); + assert(cs); + pthread_mutex_init(&cs->mon, & _monitors_attr); + h->monitor = (void *)cs; + cs = NULL; + } + pthread_mutex_unlock(&_monitor_critsec); + if (cs) + free(cs); + //printf("-_d_monitor_create(%p)\n", h); +} + +void _d_monitor_destroy(Object *h) +{ + //printf("+_d_monitor_destroy(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + pthread_mutex_destroy(MONPTR(h)); + free((void *)h->monitor); + h->monitor = NULL; + //printf("-_d_monitor_destroy(%p)\n", h); +} + +int _d_monitor_lock(Object *h) +{ + //printf("+_d_monitor_acquire(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + pthread_mutex_lock(MONPTR(h)); + //printf("-_d_monitor_acquire(%p)\n", h); +} + +void _d_monitor_unlock(Object *h) +{ + //printf("+_d_monitor_release(%p)\n", h); + assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); + pthread_mutex_unlock(MONPTR(h)); + //printf("-_d_monitor_release(%p)\n", h); +} + +#endif diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/qsort2.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/qsort2.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,70 @@ + +/* + * Placed into Public Domain + * written by Walter Bright + * www.digitalmars.com + * + * This is a public domain version of qsort.d. + * All it does is call C's qsort(), but runs a little slower since + * it needs to synchronize a global variable. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +//debug=qsort; + +private import tango.stdc.stdlib; + +struct Array +{ + size_t length; + void* ptr; +} + +private TypeInfo tiglobal; + +extern (C) int cmp(void* p1, void* p2) +{ + return tiglobal.compare(p1, p2); +} + +extern (C) Array _adSort(Array a, TypeInfo ti) +{ + synchronized + { + tiglobal = ti; + tango.stdc.stdlib.qsort(a.ptr, a.length, cast(size_t)ti.tsize(), &cmp); + } + return a; +} + + + +unittest +{ + debug(qsort) printf("array.sort.unittest()\n"); + + int a[] = new int[10]; + + a[0] = 23; + a[1] = 1; + a[2] = 64; + a[3] = 5; + a[4] = 6; + a[5] = 5; + a[6] = 17; + a[7] = 3; + a[8] = 0; + a[9] = -1; + + a.sort; + + for (int i = 0; i < a.length - 1; i++) + { + //printf("i = %d", i); + //printf(" %d %d\n", a[i], a[i + 1]); + assert(a[i] <= a[i + 1]); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/switch.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/switch.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,425 @@ +/* + * Copyright (C) 2004-2007 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +/* + * Modified by Sean Kelly for use with Tango. + */ + +private import tango.stdc.string; +//private import tango.stdc.stdio; + +/****************************************************** + * Support for switch statements switching on strings. + * Input: + * table[] sorted array of strings generated by compiler + * ca string to look up in table + * Output: + * result index of match in table[] + * -1 if not in table + */ + +extern (C): + +int _d_switch_string(char[][] table, char[] ca) +in +{ + //printf("in _d_switch_string()\n"); + assert(table.length >= 0); + assert(ca.length >= 0); + + // Make sure table[] is sorted correctly + int j; + + for (j = 1; j < table.length; j++) + { + size_t len1 = table[j - 1].length; + size_t len2 = table[j].length; + + assert(len1 <= len2); + if (len1 == len2) + { + int ci; + + ci = memcmp(table[j - 1].ptr, table[j].ptr, len1); + assert(ci < 0); // ci==0 means a duplicate + } + } +} +out (result) +{ + int i; + int cj; + + //printf("out _d_switch_string()\n"); + if (result == -1) + { + // Not found + for (i = 0; i < table.length; i++) + { + if (table[i].length == ca.length) + { cj = memcmp(table[i].ptr, ca.ptr, ca.length); + assert(cj != 0); + } + } + } + else + { + assert(0 <= result && result < table.length); + for (i = 0; 1; i++) + { + assert(i < table.length); + if (table[i].length == ca.length) + { + cj = memcmp(table[i].ptr, ca.ptr, ca.length); + if (cj == 0) + { + assert(i == result); + break; + } + } + } + } +} +body +{ + //printf("body _d_switch_string(%.*s)\n", ca.length, ca.ptr); + size_t low; + size_t high; + size_t mid; + ptrdiff_t c; + char[] pca; + + low = 0; + high = table.length; + + version (none) + { + // Print table + printf("ca[] = '%s'\n", cast(char *)ca); + for (mid = 0; mid < high; mid++) + { + pca = table[mid]; + printf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); + } + } + if (high && + ca.length >= table[0].length && + ca.length <= table[high - 1].length) + { + // Looking for 0 length string, which would only be at the beginning + if (ca.length == 0) + return 0; + + char c1 = ca[0]; + + // Do binary search + while (low < high) + { + mid = (low + high) >> 1; + pca = table[mid]; + c = cast(ptrdiff_t)(ca.length - pca.length); + if (c == 0) + { + c = cast(ubyte)c1 - cast(ubyte)pca[0]; + if (c == 0) + { + c = memcmp(ca.ptr, pca.ptr, ca.length); + if (c == 0) + { //printf("found %d\n", mid); + return cast(int)mid; + } + } + } + if (c < 0) + { + high = mid; + } + else + { + low = mid + 1; + } + } + } + + //printf("not found\n"); + return -1; // not found +} + +unittest +{ + switch (cast(char []) "c") + { + case "coo": + default: + break; + } +} + +/********************************** + * Same thing, but for wide chars. + */ + +int _d_switch_ustring(wchar[][] table, wchar[] ca) +in +{ + //printf("in _d_switch_ustring()\n"); + assert(table.length >= 0); + assert(ca.length >= 0); + + // Make sure table[] is sorted correctly + int j; + + for (j = 1; j < table.length; j++) + { + size_t len1 = table[j - 1].length; + size_t len2 = table[j].length; + + assert(len1 <= len2); + if (len1 == len2) + { + int c; + + c = memcmp(table[j - 1].ptr, table[j].ptr, len1 * wchar.sizeof); + assert(c < 0); // c==0 means a duplicate + } + } +} +out (result) +{ + int i; + int c; + + //printf("out _d_switch_string()\n"); + if (result == -1) + { + // Not found + for (i = 0; i < table.length; i++) + { + if (table[i].length == ca.length) + { c = memcmp(table[i].ptr, ca.ptr, ca.length * wchar.sizeof); + assert(c != 0); + } + } + } + else + { + assert(0 <= result && result < table.length); + for (i = 0; 1; i++) + { + assert(i < table.length); + if (table[i].length == ca.length) + { + c = memcmp(table[i].ptr, ca.ptr, ca.length * wchar.sizeof); + if (c == 0) + { + assert(i == result); + break; + } + } + } + } +} +body +{ + //printf("body _d_switch_ustring()\n"); + size_t low; + size_t high; + size_t mid; + ptrdiff_t c; + wchar[] pca; + + low = 0; + high = table.length; + +/* + // Print table + wprintf("ca[] = '%.*s'\n", ca); + for (mid = 0; mid < high; mid++) + { + pca = table[mid]; + wprintf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); + } +*/ + + // Do binary search + while (low < high) + { + mid = (low + high) >> 1; + pca = table[mid]; + c = cast(ptrdiff_t)(ca.length - pca.length); + if (c == 0) + { + c = memcmp(ca.ptr, pca.ptr, ca.length * wchar.sizeof); + if (c == 0) + { //printf("found %d\n", mid); + return cast(int)mid; + } + } + if (c < 0) + { + high = mid; + } + else + { + low = mid + 1; + } + } + //printf("not found\n"); + return -1; // not found +} + + +unittest +{ + switch (cast(wchar []) "c") + { + case "coo": + default: + break; + } +} + + +/********************************** + * Same thing, but for wide chars. + */ + +int _d_switch_dstring(dchar[][] table, dchar[] ca) +in +{ + //printf("in _d_switch_dstring()\n"); + assert(table.length >= 0); + assert(ca.length >= 0); + + // Make sure table[] is sorted correctly + int j; + + for (j = 1; j < table.length; j++) + { + size_t len1 = table[j - 1].length; + size_t len2 = table[j].length; + + assert(len1 <= len2); + if (len1 == len2) + { + int c; + + c = memcmp(table[j - 1].ptr, table[j].ptr, len1 * dchar.sizeof); + assert(c < 0); // c==0 means a duplicate + } + } +} +out (result) +{ + int i; + int c; + + //printf("out _d_switch_string()\n"); + if (result == -1) + { + // Not found + for (i = 0; i < table.length; i++) + { + if (table[i].length == ca.length) + { c = memcmp(table[i].ptr, ca.ptr, ca.length * dchar.sizeof); + assert(c != 0); + } + } + } + else + { + assert(0 <= result && result < table.length); + for (i = 0; 1; i++) + { + assert(i < table.length); + if (table[i].length == ca.length) + { + c = memcmp(table[i].ptr, ca.ptr, ca.length * dchar.sizeof); + if (c == 0) + { + assert(i == result); + break; + } + } + } + } +} +body +{ + //printf("body _d_switch_ustring()\n"); + size_t low; + size_t high; + size_t mid; + ptrdiff_t c; + dchar[] pca; + + low = 0; + high = table.length; + +/* + // Print table + wprintf("ca[] = '%.*s'\n", ca); + for (mid = 0; mid < high; mid++) + { + pca = table[mid]; + wprintf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); + } +*/ + + // Do binary search + while (low < high) + { + mid = (low + high) >> 1; + pca = table[mid]; + c = cast(ptrdiff_t)(ca.length - pca.length); + if (c == 0) + { + c = memcmp(ca.ptr, pca.ptr, ca.length * dchar.sizeof); + if (c == 0) + { //printf("found %d\n", mid); + return cast(int)mid; + } + } + if (c < 0) + { + high = mid; + } + else + { + low = mid + 1; + } + } + //printf("not found\n"); + return -1; // not found +} + + +unittest +{ + switch (cast(dchar []) "c") + { + case "coo": + default: + break; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_AC.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_AC.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,95 @@ +module typeinfo.ti_AC; + +// Object[] + +class TypeInfo_AC : TypeInfo_Array +{ + hash_t getHash(void *p) + { Object[] s = *cast(Object[]*)p; + hash_t hash = 0; + + foreach (Object o; s) + { + if (o) + hash += o.toHash(); + } + return hash; + } + + int equals(void *p1, void *p2) + { + Object[] s1 = *cast(Object[]*)p1; + Object[] s2 = *cast(Object[]*)p2; + + if (s1.length == s2.length) + { + for (size_t u = 0; u < s1.length; u++) + { Object o1 = s1[u]; + Object o2 = s2[u]; + + // Do not pass null's to Object.opEquals() + if (o1 is o2 || + (!(o1 is null) && !(o2 is null) && o1.opEquals(o2))) + continue; + return 0; + } + return 1; + } + return 0; + } + + int compare(void *p1, void *p2) + { + Object[] s1 = *cast(Object[]*)p1; + Object[] s2 = *cast(Object[]*)p2; + ptrdiff_t c; + + c = cast(ptrdiff_t)s1.length - cast(ptrdiff_t)s2.length; + if (c == 0) + { + for (size_t u = 0; u < s1.length; u++) + { Object o1 = s1[u]; + Object o2 = s2[u]; + + if (o1 is o2) + continue; + + // Regard null references as always being "less than" + if (o1) + { + if (!o2) + { c = 1; + break; + } + c = o1.opCmp(o2); + if (c) + break; + } + else + { c = -1; + break; + } + } + } + if (c < 0) + c = -1; + else + c = 1; + return cast(int)c; + } + + size_t tsize() + { + return (Object[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(Object); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Acdouble.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Acdouble.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Acdouble; + +private import typeinfo.ti_cdouble; + +// cdouble[] + +class TypeInfo_Ar : TypeInfo_Array +{ + char[] toString() { return "cdouble[]"; } + + hash_t getHash(void *p) + { cdouble[] s = *cast(cdouble[]*)p; + size_t len = s.length; + cdouble *str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += (cast(uint *)str)[0]; + hash += (cast(uint *)str)[1]; + hash += (cast(uint *)str)[2]; + hash += (cast(uint *)str)[3]; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + cdouble[] s1 = *cast(cdouble[]*)p1; + cdouble[] s2 = *cast(cdouble[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_r._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + cdouble[] s1 = *cast(cdouble[]*)p1; + cdouble[] s2 = *cast(cdouble[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_r._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (cdouble[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(cdouble); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Acfloat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Acfloat.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,104 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Acfloat; + +private import typeinfo.ti_cfloat; + +// cfloat[] + +class TypeInfo_Aq : TypeInfo_Array +{ + char[] toString() { return "cfloat[]"; } + + hash_t getHash(void *p) + { cfloat[] s = *cast(cfloat[]*)p; + size_t len = s.length; + cfloat *str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += (cast(uint *)str)[0]; + hash += (cast(uint *)str)[1]; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + cfloat[] s1 = *cast(cfloat[]*)p1; + cfloat[] s2 = *cast(cfloat[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_q._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + cfloat[] s1 = *cast(cfloat[]*)p1; + cfloat[] s2 = *cast(cfloat[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_q._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (cfloat[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(cfloat); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Acreal.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Acreal.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Acreal; + +private import typeinfo.ti_creal; + +// creal[] + +class TypeInfo_Ac : TypeInfo_Array +{ + char[] toString() { return "creal[]"; } + + hash_t getHash(void *p) + { creal[] s = *cast(creal[]*)p; + size_t len = s.length; + creal *str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += (cast(uint *)str)[0]; + hash += (cast(uint *)str)[1]; + hash += (cast(uint *)str)[2]; + hash += (cast(uint *)str)[3]; + hash += (cast(uint *)str)[4]; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + creal[] s1 = *cast(creal[]*)p1; + creal[] s2 = *cast(creal[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_c._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + creal[] s1 = *cast(creal[]*)p1; + creal[] s2 = *cast(creal[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_c._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (creal[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(creal); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Adouble.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Adouble.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,116 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Adouble; + +private import typeinfo.ti_double; + +// double[] + +class TypeInfo_Ad : TypeInfo_Array +{ + char[] toString() { return "double[]"; } + + hash_t getHash(void *p) + { double[] s = *cast(double[]*)p; + size_t len = s.length; + auto str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += (cast(uint *)str)[0]; + hash += (cast(uint *)str)[1]; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + double[] s1 = *cast(double[]*)p1; + double[] s2 = *cast(double[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_d._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + double[] s1 = *cast(double[]*)p1; + double[] s2 = *cast(double[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_d._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (double[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(double); + } +} + +// idouble[] + +class TypeInfo_Ap : TypeInfo_Ad +{ + char[] toString() { return "idouble[]"; } + + TypeInfo next() + { + return typeid(idouble); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Afloat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Afloat.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Afloat; + +private import typeinfo.ti_float; + +// float[] + +class TypeInfo_Af : TypeInfo_Array +{ + char[] toString() { return "float[]"; } + + hash_t getHash(void *p) + { float[] s = *cast(float[]*)p; + size_t len = s.length; + auto str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += *cast(uint *)str; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + float[] s1 = *cast(float[]*)p1; + float[] s2 = *cast(float[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_f._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + float[] s1 = *cast(float[]*)p1; + float[] s2 = *cast(float[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_f._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (float[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(float); + } +} + +// ifloat[] + +class TypeInfo_Ao : TypeInfo_Af +{ + char[] toString() { return "ifloat[]"; } + + TypeInfo next() + { + return typeid(ifloat); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Ag.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Ag.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,206 @@ + +module typeinfo.ti_Ag; + +private import tango.stdc.string; +private import util.string; + +// byte[] + +class TypeInfo_Ag : TypeInfo_Array +{ + char[] toString() { return "byte[]"; } + + hash_t getHash(void *p) + { byte[] s = *cast(byte[]*)p; + size_t len = s.length; + byte *str = s.ptr; + hash_t hash = 0; + + while (1) + { + switch (len) + { + case 0: + return hash; + + case 1: + hash *= 9; + hash += *cast(ubyte *)str; + return hash; + + case 2: + hash *= 9; + hash += *cast(ushort *)str; + return hash; + + case 3: + hash *= 9; + hash += (*cast(ushort *)str << 8) + + (cast(ubyte *)str)[2]; + return hash; + + default: + hash *= 9; + hash += *cast(uint *)str; + str += 4; + len -= 4; + break; + } + } + + return hash; + } + + int equals(void *p1, void *p2) + { + byte[] s1 = *cast(byte[]*)p1; + byte[] s2 = *cast(byte[]*)p2; + + return s1.length == s2.length && + memcmp(cast(byte *)s1, cast(byte *)s2, s1.length) == 0; + } + + int compare(void *p1, void *p2) + { + byte[] s1 = *cast(byte[]*)p1; + byte[] s2 = *cast(byte[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int result = s1[u] - s2[u]; + if (result) + return result; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (byte[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(byte); + } +} + + +// ubyte[] + +class TypeInfo_Ah : TypeInfo_Ag +{ + char[] toString() { return "ubyte[]"; } + + int compare(void *p1, void *p2) + { + char[] s1 = *cast(char[]*)p1; + char[] s2 = *cast(char[]*)p2; + + return stringCompare(s1, s2); + } + + TypeInfo next() + { + return typeid(ubyte); + } +} + +// void[] + +class TypeInfo_Av : TypeInfo_Ah +{ + char[] toString() { return "void[]"; } + + TypeInfo next() + { + return typeid(void); + } +} + +// bool[] + +class TypeInfo_Ab : TypeInfo_Ah +{ + char[] toString() { return "bool[]"; } + + TypeInfo next() + { + return typeid(bool); + } +} + +// char[] + +class TypeInfo_Aa : TypeInfo_Ag +{ + char[] toString() { return "char[]"; } + + hash_t getHash(void *p) + { char[] s = *cast(char[]*)p; + hash_t hash = 0; + +version (all) +{ + foreach (char c; s) + hash = hash * 11 + c; +} +else +{ + size_t len = s.length; + char *str = s; + + while (1) + { + switch (len) + { + case 0: + return hash; + + case 1: + hash *= 9; + hash += *cast(ubyte *)str; + return hash; + + case 2: + hash *= 9; + hash += *cast(ushort *)str; + return hash; + + case 3: + hash *= 9; + hash += (*cast(ushort *)str << 8) + + (cast(ubyte *)str)[2]; + return hash; + + default: + hash *= 9; + hash += *cast(uint *)str; + str += 4; + len -= 4; + break; + } + } +} + return hash; + } + + TypeInfo next() + { + return typeid(char); + } +} + + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Aint.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Aint.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,119 @@ + +module typeinfo.ti_Aint; + +private import tango.stdc.string; + +// int[] + +class TypeInfo_Ai : TypeInfo_Array +{ + char[] toString() { return "int[]"; } + + hash_t getHash(void *p) + { int[] s = *cast(int[]*)p; + auto len = s.length; + auto str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += *cast(uint *)str; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + int[] s1 = *cast(int[]*)p1; + int[] s2 = *cast(int[]*)p2; + + return s1.length == s2.length && + memcmp(cast(void *)s1, cast(void *)s2, s1.length * int.sizeof) == 0; + } + + int compare(void *p1, void *p2) + { + int[] s1 = *cast(int[]*)p1; + int[] s2 = *cast(int[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int result = s1[u] - s2[u]; + if (result) + return result; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (int[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(int); + } +} + +// uint[] + +class TypeInfo_Ak : TypeInfo_Ai +{ + char[] toString() { return "uint[]"; } + + int compare(void *p1, void *p2) + { + uint[] s1 = *cast(uint[]*)p1; + uint[] s2 = *cast(uint[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int result = s1[u] - s2[u]; + if (result) + return result; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + TypeInfo next() + { + return typeid(uint); + } +} + +// dchar[] + +class TypeInfo_Aw : TypeInfo_Ak +{ + char[] toString() { return "dchar[]"; } + + TypeInfo next() + { + return typeid(dchar); + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Along.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Along.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,109 @@ + +module typeinfo.ti_Along; + +private import tango.stdc.string; + +// long[] + +class TypeInfo_Al : TypeInfo_Array +{ + char[] toString() { return "long[]"; } + + hash_t getHash(void *p) + { long[] s = *cast(long[]*)p; + size_t len = s.length; + auto str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += *cast(uint *)str + *(cast(uint *)str + 1); + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + long[] s1 = *cast(long[]*)p1; + long[] s2 = *cast(long[]*)p2; + + return s1.length == s2.length && + memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0; + } + + int compare(void *p1, void *p2) + { + long[] s1 = *cast(long[]*)p1; + long[] s2 = *cast(long[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + if (s1[u] < s2[u]) + return -1; + else if (s1[u] > s2[u]) + return 1; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (long[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(long); + } +} + + +// ulong[] + +class TypeInfo_Am : TypeInfo_Al +{ + char[] toString() { return "ulong[]"; } + + int compare(void *p1, void *p2) + { + ulong[] s1 = *cast(ulong[]*)p1; + ulong[] s2 = *cast(ulong[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + if (s1[u] < s2[u]) + return -1; + else if (s1[u] > s2[u]) + return 1; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + TypeInfo next() + { + return typeid(ulong); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Areal.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Areal.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,117 @@ +/* + * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_Areal; + +private import typeinfo.ti_real; + +// real[] + +class TypeInfo_Ae : TypeInfo_Array +{ + char[] toString() { return "real[]"; } + + hash_t getHash(void *p) + { real[] s = *cast(real[]*)p; + size_t len = s.length; + auto str = s.ptr; + hash_t hash = 0; + + while (len) + { + hash *= 9; + hash += (cast(uint *)str)[0]; + hash += (cast(uint *)str)[1]; + hash += (cast(ushort *)str)[4]; + str++; + len--; + } + + return hash; + } + + int equals(void *p1, void *p2) + { + real[] s1 = *cast(real[]*)p1; + real[] s2 = *cast(real[]*)p2; + size_t len = s1.length; + + if (len != s2.length) + return 0; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_e._equals(s1[u], s2[u]); + if (c == 0) + return 0; + } + return 1; + } + + int compare(void *p1, void *p2) + { + real[] s1 = *cast(real[]*)p1; + real[] s2 = *cast(real[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int c = TypeInfo_e._compare(s1[u], s2[u]); + if (c) + return c; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (real[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(real); + } +} + +// ireal[] + +class TypeInfo_Aj : TypeInfo_Ae +{ + char[] toString() { return "ireal[]"; } + + TypeInfo next() + { + return typeid(ireal); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_Ashort.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_Ashort.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,132 @@ + +module typeinfo.ti_Ashort; + +private import tango.stdc.string; + +// short[] + +class TypeInfo_As : TypeInfo_Array +{ + char[] toString() { return "short[]"; } + + hash_t getHash(void *p) + { short[] s = *cast(short[]*)p; + size_t len = s.length; + short *str = s.ptr; + hash_t hash = 0; + + while (1) + { + switch (len) + { + case 0: + return hash; + + case 1: + hash *= 9; + hash += *cast(ushort *)str; + return hash; + + default: + hash *= 9; + hash += *cast(uint *)str; + str += 2; + len -= 2; + break; + } + } + + return hash; + } + + int equals(void *p1, void *p2) + { + short[] s1 = *cast(short[]*)p1; + short[] s2 = *cast(short[]*)p2; + + return s1.length == s2.length && + memcmp(cast(void *)s1, cast(void *)s2, s1.length * short.sizeof) == 0; + } + + int compare(void *p1, void *p2) + { + short[] s1 = *cast(short[]*)p1; + short[] s2 = *cast(short[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int result = s1[u] - s2[u]; + if (result) + return result; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + size_t tsize() + { + return (short[]).sizeof; + } + + uint flags() + { + return 1; + } + + TypeInfo next() + { + return typeid(short); + } +} + + +// ushort[] + +class TypeInfo_At : TypeInfo_As +{ + char[] toString() { return "ushort[]"; } + + int compare(void *p1, void *p2) + { + ushort[] s1 = *cast(ushort[]*)p1; + ushort[] s2 = *cast(ushort[]*)p2; + size_t len = s1.length; + + if (s2.length < len) + len = s2.length; + for (size_t u = 0; u < len; u++) + { + int result = s1[u] - s2[u]; + if (result) + return result; + } + if (s1.length < s2.length) + return -1; + else if (s1.length > s2.length) + return 1; + return 0; + } + + TypeInfo next() + { + return typeid(ushort); + } +} + +// wchar[] + +class TypeInfo_Au : TypeInfo_At +{ + char[] toString() { return "wchar[]"; } + + TypeInfo next() + { + return typeid(wchar); + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_C.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_C.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +module typeinfo.ti_C; + +// Object + +class TypeInfo_C : TypeInfo +{ + hash_t getHash(void *p) + { + Object o = *cast(Object*)p; + return o ? o.toHash() : 0; + } + + int equals(void *p1, void *p2) + { + Object o1 = *cast(Object*)p1; + Object o2 = *cast(Object*)p2; + + return o1 == o2; + } + + int compare(void *p1, void *p2) + { + Object o1 = *cast(Object*)p1; + Object o2 = *cast(Object*)p2; + int c = 0; + + // Regard null references as always being "less than" + if (!(o1 is o2)) + { + if (o1) + { if (!o2) + c = 1; + else + c = o1.opCmp(o2); + } + else + c = -1; + } + return c; + } + + size_t tsize() + { + return Object.sizeof; + } + + uint flags() + { + return 1; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_byte.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_byte.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,39 @@ + +// byte + +module typeinfo.ti_byte; + +class TypeInfo_g : TypeInfo +{ + char[] toString() { return "byte"; } + + hash_t getHash(void *p) + { + return *cast(byte *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(byte *)p1 == *cast(byte *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(byte *)p1 - *cast(byte *)p2; + } + + size_t tsize() + { + return byte.sizeof; + } + + void swap(void *p1, void *p2) + { + byte t; + + t = *cast(byte *)p1; + *cast(byte *)p1 = *cast(byte *)p2; + *cast(byte *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_cdouble.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_cdouble.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,66 @@ + +// cdouble + +module typeinfo.ti_cdouble; + +class TypeInfo_r : TypeInfo +{ + char[] toString() { return "cdouble"; } + + hash_t getHash(void *p) + { + return (cast(uint *)p)[0] + (cast(uint *)p)[1] + + (cast(uint *)p)[2] + (cast(uint *)p)[3]; + } + + static int _equals(cdouble f1, cdouble f2) + { + return f1 == f2; + } + + static int _compare(cdouble f1, cdouble f2) + { int result; + + if (f1.re < f2.re) + result = -1; + else if (f1.re > f2.re) + result = 1; + else if (f1.im < f2.im) + result = -1; + else if (f1.im > f2.im) + result = 1; + else + result = 0; + return result; + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(cdouble *)p1, *cast(cdouble *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(cdouble *)p1, *cast(cdouble *)p2); + } + + size_t tsize() + { + return cdouble.sizeof; + } + + void swap(void *p1, void *p2) + { + cdouble t; + + t = *cast(cdouble *)p1; + *cast(cdouble *)p1 = *cast(cdouble *)p2; + *cast(cdouble *)p2 = t; + } + + void[] init() + { static cdouble r; + + return (cast(cdouble *)&r)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_cfloat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_cfloat.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,65 @@ + +// cfloat + +module typeinfo.ti_cfloat; + +class TypeInfo_q : TypeInfo +{ + char[] toString() { return "cfloat"; } + + hash_t getHash(void *p) + { + return (cast(uint *)p)[0] + (cast(uint *)p)[1]; + } + + static int _equals(cfloat f1, cfloat f2) + { + return f1 == f2; + } + + static int _compare(cfloat f1, cfloat f2) + { int result; + + if (f1.re < f2.re) + result = -1; + else if (f1.re > f2.re) + result = 1; + else if (f1.im < f2.im) + result = -1; + else if (f1.im > f2.im) + result = 1; + else + result = 0; + return result; + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(cfloat *)p1, *cast(cfloat *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(cfloat *)p1, *cast(cfloat *)p2); + } + + size_t tsize() + { + return cfloat.sizeof; + } + + void swap(void *p1, void *p2) + { + cfloat t; + + t = *cast(cfloat *)p1; + *cast(cfloat *)p1 = *cast(cfloat *)p2; + *cast(cfloat *)p2 = t; + } + + void[] init() + { static cfloat r; + + return (cast(cfloat *)&r)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_char.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_char.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,42 @@ + +module typeinfo.ti_char; + +class TypeInfo_a : TypeInfo +{ + char[] toString() { return "char"; } + + hash_t getHash(void *p) + { + return *cast(char *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(char *)p1 == *cast(char *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(char *)p1 - *cast(char *)p2; + } + + size_t tsize() + { + return char.sizeof; + } + + void swap(void *p1, void *p2) + { + char t; + + t = *cast(char *)p1; + *cast(char *)p1 = *cast(char *)p2; + *cast(char *)p2 = t; + } + + void[] init() + { static char c; + + return (cast(char *)&c)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_creal.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_creal.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,67 @@ + +// creal + +module typeinfo.ti_creal; + +class TypeInfo_c : TypeInfo +{ + char[] toString() { return "creal"; } + + hash_t getHash(void *p) + { + return (cast(uint *)p)[0] + (cast(uint *)p)[1] + + (cast(uint *)p)[2] + (cast(uint *)p)[3] + + (cast(uint *)p)[4]; + } + + static int _equals(creal f1, creal f2) + { + return f1 == f2; + } + + static int _compare(creal f1, creal f2) + { int result; + + if (f1.re < f2.re) + result = -1; + else if (f1.re > f2.re) + result = 1; + else if (f1.im < f2.im) + result = -1; + else if (f1.im > f2.im) + result = 1; + else + result = 0; + return result; + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(creal *)p1, *cast(creal *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(creal *)p1, *cast(creal *)p2); + } + + size_t tsize() + { + return creal.sizeof; + } + + void swap(void *p1, void *p2) + { + creal t; + + t = *cast(creal *)p1; + *cast(creal *)p1 = *cast(creal *)p2; + *cast(creal *)p2 = t; + } + + void[] init() + { static creal r; + + return (cast(creal *)&r)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_dchar.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_dchar.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,44 @@ + +// dchar + +module typeinfo.ti_dchar; + +class TypeInfo_w : TypeInfo +{ + char[] toString() { return "dchar"; } + + hash_t getHash(void *p) + { + return *cast(dchar *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(dchar *)p1 == *cast(dchar *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(dchar *)p1 - *cast(dchar *)p2; + } + + size_t tsize() + { + return dchar.sizeof; + } + + void swap(void *p1, void *p2) + { + dchar t; + + t = *cast(dchar *)p1; + *cast(dchar *)p1 = *cast(dchar *)p2; + *cast(dchar *)p2 = t; + } + + void[] init() + { static dchar c; + + return (cast(dchar *)&c)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_delegate.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_delegate.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,39 @@ + +// delegate + +module typeinfo.ti_delegate; + +alias void delegate(int) dg; + +class TypeInfo_D : TypeInfo +{ + hash_t getHash(void *p) + { long l = *cast(long *)p; + + return cast(uint)(l + (l >> 32)); + } + + int equals(void *p1, void *p2) + { + return *cast(dg *)p1 == *cast(dg *)p2; + } + + size_t tsize() + { + return dg.sizeof; + } + + void swap(void *p1, void *p2) + { + dg t; + + t = *cast(dg *)p1; + *cast(dg *)p1 = *cast(dg *)p2; + *cast(dg *)p2 = t; + } + + uint flags() + { + return 1; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_double.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_double.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,65 @@ + +// double + +module typeinfo.ti_double; + +class TypeInfo_d : TypeInfo +{ + char[] toString() { return "double"; } + + hash_t getHash(void *p) + { + return (cast(uint *)p)[0] + (cast(uint *)p)[1]; + } + + static int _equals(double f1, double f2) + { + return f1 == f2 || + (f1 !<>= f1 && f2 !<>= f2); + } + + static int _compare(double d1, double d2) + { + if (d1 !<>= d2) // if either are NaN + { + if (d1 !<>= d1) + { if (d2 !<>= d2) + return 0; + return -1; + } + return 1; + } + return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(double *)p1, *cast(double *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(double *)p1, *cast(double *)p2); + } + + size_t tsize() + { + return double.sizeof; + } + + void swap(void *p1, void *p2) + { + double t; + + t = *cast(double *)p1; + *cast(double *)p1 = *cast(double *)p2; + *cast(double *)p2 = t; + } + + void[] init() + { static double r; + + return (cast(double *)&r)[0 .. 1]; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_float.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_float.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,64 @@ + +// float + +module typeinfo.ti_float; + +class TypeInfo_f : TypeInfo +{ + char[] toString() { return "float"; } + + hash_t getHash(void *p) + { + return *cast(uint *)p; + } + + static int _equals(float f1, float f2) + { + return f1 == f2 || + (f1 !<>= f1 && f2 !<>= f2); + } + + static int _compare(float d1, float d2) + { + if (d1 !<>= d2) // if either are NaN + { + if (d1 !<>= d1) + { if (d2 !<>= d2) + return 0; + return -1; + } + return 1; + } + return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(float *)p1, *cast(float *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(float *)p1, *cast(float *)p2); + } + + size_t tsize() + { + return float.sizeof; + } + + void swap(void *p1, void *p2) + { + float t; + + t = *cast(float *)p1; + *cast(float *)p1 = *cast(float *)p2; + *cast(float *)p2 = t; + } + + void[] init() + { static float r; + + return (cast(float *)&r)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_idouble.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_idouble.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,12 @@ + +// idouble + +module typeinfo.ti_idouble; + +private import typeinfo.ti_double; + +class TypeInfo_p : TypeInfo_d +{ + char[] toString() { return "idouble"; } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ifloat.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ifloat.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,12 @@ + +// ifloat + +module typeinfo.ti_ifloat; + +private import typeinfo.ti_float; + +class TypeInfo_o : TypeInfo_f +{ + char[] toString() { return "ifloat"; } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_int.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_int.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// int + +module typeinfo.ti_int; + +class TypeInfo_i : TypeInfo +{ + char[] toString() { return "int"; } + + hash_t getHash(void *p) + { + return *cast(uint *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(uint *)p1 == *cast(uint *)p2; + } + + int compare(void *p1, void *p2) + { + if (*cast(int*) p1 < *cast(int*) p2) + return -1; + else if (*cast(int*) p1 > *cast(int*) p2) + return 1; + return 0; + } + + size_t tsize() + { + return int.sizeof; + } + + void swap(void *p1, void *p2) + { + int t; + + t = *cast(int *)p1; + *cast(int *)p1 = *cast(int *)p2; + *cast(int *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ireal.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ireal.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,12 @@ + +// ireal + +module typeinfo.ti_ireal; + +private import typeinfo.ti_real; + +class TypeInfo_j : TypeInfo_e +{ + char[] toString() { return "ireal"; } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_long.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_long.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// long + +module typeinfo.ti_long; + +class TypeInfo_l : TypeInfo +{ + char[] toString() { return "long"; } + + hash_t getHash(void *p) + { + return *cast(uint *)p + (cast(uint *)p)[1]; + } + + int equals(void *p1, void *p2) + { + return *cast(long *)p1 == *cast(long *)p2; + } + + int compare(void *p1, void *p2) + { + if (*cast(long *)p1 < *cast(long *)p2) + return -1; + else if (*cast(long *)p1 > *cast(long *)p2) + return 1; + return 0; + } + + size_t tsize() + { + return long.sizeof; + } + + void swap(void *p1, void *p2) + { + long t; + + t = *cast(long *)p1; + *cast(long *)p1 = *cast(long *)p2; + *cast(long *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ptr.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ptr.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,46 @@ + +// pointer + +module typeinfo.ti_ptr; + +class TypeInfo_P : TypeInfo +{ + hash_t getHash(void *p) + { + return cast(uint)*cast(void* *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(void* *)p1 == *cast(void* *)p2; + } + + int compare(void *p1, void *p2) + { + auto c = *cast(void* *)p1 - *cast(void* *)p2; + if (c < 0) + return -1; + else if (c > 0) + return 1; + return 0; + } + + size_t tsize() + { + return (void*).sizeof; + } + + void swap(void *p1, void *p2) + { + void* t; + + t = *cast(void* *)p1; + *cast(void* *)p1 = *cast(void* *)p2; + *cast(void* *)p2 = t; + } + + uint flags() + { + return 1; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_real.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_real.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,64 @@ + +// real + +module typeinfo.ti_real; + +class TypeInfo_e : TypeInfo +{ + char[] toString() { return "real"; } + + hash_t getHash(void *p) + { + return (cast(uint *)p)[0] + (cast(uint *)p)[1] + (cast(ushort *)p)[4]; + } + + static int _equals(real f1, real f2) + { + return f1 == f2 || + (f1 !<>= f1 && f2 !<>= f2); + } + + static int _compare(real d1, real d2) + { + if (d1 !<>= d2) // if either are NaN + { + if (d1 !<>= d1) + { if (d2 !<>= d2) + return 0; + return -1; + } + return 1; + } + return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); + } + + int equals(void *p1, void *p2) + { + return _equals(*cast(real *)p1, *cast(real *)p2); + } + + int compare(void *p1, void *p2) + { + return _compare(*cast(real *)p1, *cast(real *)p2); + } + + size_t tsize() + { + return real.sizeof; + } + + void swap(void *p1, void *p2) + { + real t; + + t = *cast(real *)p1; + *cast(real *)p1 = *cast(real *)p2; + *cast(real *)p2 = t; + } + + void[] init() + { static real r; + + return (cast(real *)&r)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_short.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_short.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,39 @@ + +// short + +module typeinfo.ti_short; + +class TypeInfo_s : TypeInfo +{ + char[] toString() { return "short"; } + + hash_t getHash(void *p) + { + return *cast(short *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(short *)p1 == *cast(short *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(short *)p1 - *cast(short *)p2; + } + + size_t tsize() + { + return short.sizeof; + } + + void swap(void *p1, void *p2) + { + short t; + + t = *cast(short *)p1; + *cast(short *)p1 = *cast(short *)p2; + *cast(short *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ubyte.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ubyte.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// ubyte + +module typeinfo.ti_ubyte; + +class TypeInfo_h : TypeInfo +{ + char[] toString() { return "ubyte"; } + + hash_t getHash(void *p) + { + return *cast(ubyte *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(ubyte *)p1 == *cast(ubyte *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(ubyte *)p1 - *cast(ubyte *)p2; + } + + size_t tsize() + { + return ubyte.sizeof; + } + + void swap(void *p1, void *p2) + { + ubyte t; + + t = *cast(ubyte *)p1; + *cast(ubyte *)p1 = *cast(ubyte *)p2; + *cast(ubyte *)p2 = t; + } +} + +class TypeInfo_b : TypeInfo_h +{ + char[] toString() { return "bool"; } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_uint.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_uint.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// uint + +module typeinfo.ti_uint; + +class TypeInfo_k : TypeInfo +{ + char[] toString() { return "uint"; } + + hash_t getHash(void *p) + { + return *cast(uint *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(uint *)p1 == *cast(uint *)p2; + } + + int compare(void *p1, void *p2) + { + if (*cast(uint*) p1 < *cast(uint*) p2) + return -1; + else if (*cast(uint*) p1 > *cast(uint*) p2) + return 1; + return 0; + } + + size_t tsize() + { + return uint.sizeof; + } + + void swap(void *p1, void *p2) + { + int t; + + t = *cast(uint *)p1; + *cast(uint *)p1 = *cast(uint *)p2; + *cast(uint *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ulong.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ulong.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// ulong + +module typeinfo.ti_ulong; + +class TypeInfo_m : TypeInfo +{ + char[] toString() { return "ulong"; } + + hash_t getHash(void *p) + { + return *cast(uint *)p + (cast(uint *)p)[1]; + } + + int equals(void *p1, void *p2) + { + return *cast(ulong *)p1 == *cast(ulong *)p2; + } + + int compare(void *p1, void *p2) + { + if (*cast(ulong *)p1 < *cast(ulong *)p2) + return -1; + else if (*cast(ulong *)p1 > *cast(ulong *)p2) + return 1; + return 0; + } + + size_t tsize() + { + return ulong.sizeof; + } + + void swap(void *p1, void *p2) + { + ulong t; + + t = *cast(ulong *)p1; + *cast(ulong *)p1 = *cast(ulong *)p2; + *cast(ulong *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_ushort.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_ushort.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,39 @@ + +// ushort + +module typeinfo.ti_ushort; + +class TypeInfo_t : TypeInfo +{ + char[] toString() { return "ushort"; } + + hash_t getHash(void *p) + { + return *cast(ushort *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(ushort *)p1 == *cast(ushort *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(ushort *)p1 - *cast(ushort *)p2; + } + + size_t tsize() + { + return ushort.sizeof; + } + + void swap(void *p1, void *p2) + { + ushort t; + + t = *cast(ushort *)p1; + *cast(ushort *)p1 = *cast(ushort *)p2; + *cast(ushort *)p2 = t; + } +} + diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_void.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_void.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +// void + +module typeinfo.ti_void; + +class TypeInfo_v : TypeInfo +{ + char[] toString() { return "void"; } + + hash_t getHash(void *p) + { + assert(0); + } + + int equals(void *p1, void *p2) + { + return *cast(byte *)p1 == *cast(byte *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(byte *)p1 - *cast(byte *)p2; + } + + size_t tsize() + { + return void.sizeof; + } + + void swap(void *p1, void *p2) + { + byte t; + + t = *cast(byte *)p1; + *cast(byte *)p1 = *cast(byte *)p2; + *cast(byte *)p2 = t; + } + + uint flags() + { + return 1; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/typeinfo/ti_wchar.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/typeinfo/ti_wchar.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,43 @@ + +module typeinfo.ti_wchar; + + +class TypeInfo_u : TypeInfo +{ + char[] toString() { return "wchar"; } + + hash_t getHash(void *p) + { + return *cast(wchar *)p; + } + + int equals(void *p1, void *p2) + { + return *cast(wchar *)p1 == *cast(wchar *)p2; + } + + int compare(void *p1, void *p2) + { + return *cast(wchar *)p1 - *cast(wchar *)p2; + } + + size_t tsize() + { + return wchar.sizeof; + } + + void swap(void *p1, void *p2) + { + wchar t; + + t = *cast(wchar *)p1; + *cast(wchar *)p1 = *cast(wchar *)p2; + *cast(wchar *)p2 = t; + } + + void[] init() + { static wchar c; + + return (cast(wchar *)&c)[0 .. 1]; + } +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/util/console.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/util/console.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,86 @@ +/******************************************************************************* + + copyright: Copyright (c) 2004 Tango group. All rights reserved + + license: BSD style: $(LICENSE) + + version: Initial release: July 2006 + + + Various low-level console oriented utilities + +*******************************************************************************/ + +module util.console; + +private import util.string; + +version (Win32) + { + private extern (Windows) int GetStdHandle (int); + private extern (Windows) int WriteFile (int, char*, int, int*, void*); + } + +else + +version (Posix) + { + private extern (C) ptrdiff_t write (int, void*, size_t); + } + +/+ +// emit a char[] to the console. Note that Win32 does not handle utf8, but +// then neither does fprintf (stderr). This will handle redirection though. +// May need to remedy the utf8 issue +int console (char[] s) +{ + version (Win32) + { + int count; + if (WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null)) + return count; + return -1; + } + else + version (Posix) + { + return write (2, s.ptr, s.length); + } +} + +// emit an integer to the console +int console (uint i) +{ + char[10] tmp = void; + + return console (intToUtf8 (tmp, i)); +} ++/ + +struct Console +{ + Console opCall (char[] s) + { + version (Win32) + { + int count; + WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null); + } + else + version (Posix) + { + write (2, s.ptr, s.length); + } + return *this; + } + + // emit an integer to the console + Console opCall (size_t i) + { + char[25] tmp = void; + + return console (intToUtf8 (tmp, i)); + } +} + +Console console; diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/util/ctype.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/util/ctype.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,106 @@ + +/* + * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, in both source and binary form, subject to the following + * restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +// Simple ASCII char classification functions + +module util.ctype; + +int isalnum(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG) : 0; } +int isalpha(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP) : 0; } +int iscntrl(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_CTL) : 0; } +int isdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_DIG) : 0; } +int islower(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_LC) : 0; } +int ispunct(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_PNC) : 0; } +int isspace(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_SPC) : 0; } +int isupper(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_UC) : 0; } +int isxdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_HEX) : 0; } +int isgraph(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC) : 0; } +int isprint(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC|_BLK) : 0; } +int isascii(dchar c) { return c <= 0x7F; } + +dchar tolower(dchar c) + out (result) + { + assert(!isupper(result)); + } + body + { + return isupper(c) ? c + (cast(dchar)'a' - 'A') : c; + } + +dchar toupper(dchar c) + out (result) + { + assert(!islower(result)); + } + body + { + return islower(c) ? c - (cast(dchar)'a' - 'A') : c; + } + +private: + +enum +{ + _SPC = 8, + _CTL = 0x20, + _BLK = 0x40, + _HEX = 0x80, + _UC = 1, + _LC = 2, + _PNC = 0x10, + _DIG = 4, + _ALP = _UC|_LC, +} + +ubyte _ctype[128] = +[ + _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, + _CTL,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL,_CTL, + _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, + _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, + _SPC|_BLK,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, + _PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, + _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, + _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, + _PNC,_PNC,_PNC,_PNC,_PNC,_PNC, + _PNC,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC, + _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, + _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, + _UC,_UC,_UC,_PNC,_PNC,_PNC,_PNC,_PNC, + _PNC,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC, + _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, + _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, + _LC,_LC,_LC,_PNC,_PNC,_PNC,_PNC,_CTL +]; + + +unittest +{ + assert(isspace(' ')); + assert(!isspace('z')); + assert(toupper('a') == 'A'); + assert(tolower('Q') == 'q'); + assert(!isxdigit('G')); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/util/string.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/util/string.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,50 @@ +/******************************************************************************* + + copyright: Copyright (c) 2004 Tango group. All rights reserved + + license: BSD style: $(LICENSE) + + version: Initial release: July 2006 + + + Various char[] utilities + +*******************************************************************************/ + +module util.string; + +private import tango.stdc.string; + +// convert uint to char[], within the given buffer +// Returns a valid slice of the populated buffer +char[] intToUtf8 (char[] tmp, size_t val) +in { + assert (tmp.length > 20, "atoi buffer should be 20 or more chars wide"); + } +body +{ + char* p = tmp.ptr + tmp.length; + + do { + *--p = (val % 10) + '0'; + } while (val /= 10); + + return tmp [cast(size_t)(p - tmp.ptr) .. $]; +} + + +// function to compare two strings +int stringCompare (char[] s1, char[] s2) +{ + auto len = s1.length; + + if (s2.length < len) + len = s2.length; + + int result = memcmp(s1.ptr, s2.ptr, len); + + if (result == 0) + result = cast(int)s1.length - cast(int)s2.length; + + return result; +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/internal/util/utf.d --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/internal/util/utf.d Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,851 @@ +// utf.d + +/* + * Copyright (C) 2003-2004 by Digital Mars, www.digitalmars.com + * Written by Walter Bright + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * o The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * o Altered source versions must be plainly marked as such, and must not + * be misrepresented as being the original software. + * o This notice may not be removed or altered from any source + * distribution. + */ + +// Description of UTF-8 at: +// http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 +// http://anubis.dkuug.dk/JTC1/SC2/WG2/docs/n1335 + + +module util.utf; + + +extern (C) void onUnicodeError( char[] msg, size_t idx ); + + +bool isValidDchar(dchar c) +{ + /* Note: FFFE and FFFF are specifically permitted by the + * Unicode standard for application internal use, but are not + * allowed for interchange. + * (thanks to Arcane Jill) + */ + + return c < 0xD800 || + (c > 0xDFFF && c <= 0x10FFFF /*&& c != 0xFFFE && c != 0xFFFF*/); +} + +unittest +{ + debug(utf) printf("utf.isValidDchar.unittest\n"); + assert(isValidDchar(cast(dchar)'a') == true); + assert(isValidDchar(cast(dchar)0x1FFFFF) == false); +} + + +/* This array gives the length of a UTF-8 sequence indexed by the value + * of the leading byte. An FF represents an illegal starting value of + * a UTF-8 sequence. + * FF is used instead of 0 to avoid having loops hang. + */ + +ubyte[256] UTF8stride = +[ + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, + 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, + 4,4,4,4,4,4,4,4,5,5,5,5,6,6,0xFF,0xFF, +]; + +uint stride(char[] s, size_t i) +{ + return UTF8stride[s[i]]; +} + +uint stride(wchar[] s, size_t i) +{ uint u = s[i]; + return 1 + (u >= 0xD800 && u <= 0xDBFF); +} + +uint stride(dchar[] s, size_t i) +{ + return 1; +} + +/******************************************* + * Given an index into an array of char's, + * and assuming that index is at the start of a UTF character, + * determine the number of UCS characters up to that index. + */ + +size_t toUCSindex(char[] s, size_t i) +{ + size_t n; + size_t j; + size_t stride; + + for (j = 0; j < i; j += stride) + { + stride = UTF8stride[s[j]]; + if (stride == 0xFF) + goto Lerr; + n++; + } + if (j > i) + { + Lerr: + onUnicodeError("invalid UTF-8 sequence", j); + } + return n; +} + +size_t toUCSindex(wchar[] s, size_t i) +{ + size_t n; + size_t j; + + for (j = 0; j < i; ) + { uint u = s[j]; + + j += 1 + (u >= 0xD800 && u <= 0xDBFF); + n++; + } + if (j > i) + { + Lerr: + onUnicodeError("invalid UTF-16 sequence", j); + } + return n; +} + +size_t toUCSindex(dchar[] s, size_t i) +{ + return i; +} + +/****************************************** + * Given a UCS index into an array of characters, return the UTF index. + */ + +size_t toUTFindex(char[] s, size_t n) +{ + size_t i; + + while (n--) + { + uint j = UTF8stride[s[i]]; + if (j == 0xFF) + onUnicodeError("invalid UTF-8 sequence", i); + i += j; + } + return i; +} + +size_t toUTFindex(wchar[] s, size_t n) +{ + size_t i; + + while (n--) + { wchar u = s[i]; + + i += 1 + (u >= 0xD800 && u <= 0xDBFF); + } + return i; +} + +size_t toUTFindex(dchar[] s, size_t n) +{ + return n; +} + +/* =================== Decode ======================= */ + +dchar decode(char[] s, inout size_t idx) + in + { + assert(idx >= 0 && idx < s.length); + } + out (result) + { + assert(isValidDchar(result)); + } + body + { + size_t len = s.length; + dchar V; + size_t i = idx; + char u = s[i]; + + if (u & 0x80) + { uint n; + char u2; + + /* The following encodings are valid, except for the 5 and 6 byte + * combinations: + * 0xxxxxxx + * 110xxxxx 10xxxxxx + * 1110xxxx 10xxxxxx 10xxxxxx + * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx + * 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + * 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx + */ + for (n = 1; ; n++) + { + if (n > 4) + goto Lerr; // only do the first 4 of 6 encodings + if (((u << n) & 0x80) == 0) + { + if (n == 1) + goto Lerr; + break; + } + } + + // Pick off (7 - n) significant bits of B from first byte of octet + V = cast(dchar)(u & ((1 << (7 - n)) - 1)); + + if (i + (n - 1) >= len) + goto Lerr; // off end of string + + /* The following combinations are overlong, and illegal: + * 1100000x (10xxxxxx) + * 11100000 100xxxxx (10xxxxxx) + * 11110000 1000xxxx (10xxxxxx 10xxxxxx) + * 11111000 10000xxx (10xxxxxx 10xxxxxx 10xxxxxx) + * 11111100 100000xx (10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) + */ + u2 = s[i + 1]; + if ((u & 0xFE) == 0xC0 || + (u == 0xE0 && (u2 & 0xE0) == 0x80) || + (u == 0xF0 && (u2 & 0xF0) == 0x80) || + (u == 0xF8 && (u2 & 0xF8) == 0x80) || + (u == 0xFC && (u2 & 0xFC) == 0x80)) + goto Lerr; // overlong combination + + for (uint j = 1; j != n; j++) + { + u = s[i + j]; + if ((u & 0xC0) != 0x80) + goto Lerr; // trailing bytes are 10xxxxxx + V = (V << 6) | (u & 0x3F); + } + if (!isValidDchar(V)) + goto Lerr; + i += n; + } + else + { + V = cast(dchar) u; + i++; + } + + idx = i; + return V; + + Lerr: + onUnicodeError("invalid UTF-8 sequence", i); + return V; // dummy return + } + +unittest +{ size_t i; + dchar c; + + debug(utf) printf("utf.decode.unittest\n"); + + static char[] s1 = "abcd"; + i = 0; + c = decode(s1, i); + assert(c == cast(dchar)'a'); + assert(i == 1); + c = decode(s1, i); + assert(c == cast(dchar)'b'); + assert(i == 2); + + static char[] s2 = "\xC2\xA9"; + i = 0; + c = decode(s2, i); + assert(c == cast(dchar)'\u00A9'); + assert(i == 2); + + static char[] s3 = "\xE2\x89\xA0"; + i = 0; + c = decode(s3, i); + assert(c == cast(dchar)'\u2260'); + assert(i == 3); + + static char[][] s4 = + [ "\xE2\x89", // too short + "\xC0\x8A", + "\xE0\x80\x8A", + "\xF0\x80\x80\x8A", + "\xF8\x80\x80\x80\x8A", + "\xFC\x80\x80\x80\x80\x8A", + ]; + + for (int j = 0; j < s4.length; j++) + { + try + { + i = 0; + c = decode(s4[j], i); + assert(0); + } + catch (Object o) + { + i = 23; + } + assert(i == 23); + } +} + +/********************************************************/ + +dchar decode(wchar[] s, inout size_t idx) + in + { + assert(idx >= 0 && idx < s.length); + } + out (result) + { + assert(isValidDchar(result)); + } + body + { + char[] msg; + dchar V; + size_t i = idx; + uint u = s[i]; + + if (u & ~0x7F) + { if (u >= 0xD800 && u <= 0xDBFF) + { uint u2; + + if (i + 1 == s.length) + { msg = "surrogate UTF-16 high value past end of string"; + goto Lerr; + } + u2 = s[i + 1]; + if (u2 < 0xDC00 || u2 > 0xDFFF) + { msg = "surrogate UTF-16 low value out of range"; + goto Lerr; + } + u = ((u - 0xD7C0) << 10) + (u2 - 0xDC00); + i += 2; + } + else if (u >= 0xDC00 && u <= 0xDFFF) + { msg = "unpaired surrogate UTF-16 value"; + goto Lerr; + } + else if (u == 0xFFFE || u == 0xFFFF) + { msg = "illegal UTF-16 value"; + goto Lerr; + } + else + i++; + } + else + { + i++; + } + + idx = i; + return cast(dchar)u; + + Lerr: + onUnicodeError(msg, i); + return cast(dchar)u; // dummy return + } + +/********************************************************/ + +dchar decode(dchar[] s, inout size_t idx) + in + { + assert(idx >= 0 && idx < s.length); + } + body + { + size_t i = idx; + dchar c = s[i]; + + if (!isValidDchar(c)) + goto Lerr; + idx = i + 1; + return c; + + Lerr: + onUnicodeError("invalid UTF-32 value", i); + return c; // dummy return + } + + +/* =================== Encode ======================= */ + +void encode(inout char[] s, dchar c) + in + { + assert(isValidDchar(c)); + } + body + { + char[] r = s; + + if (c <= 0x7F) + { + r ~= cast(char) c; + } + else + { + char[4] buf; + uint L; + + if (c <= 0x7FF) + { + buf[0] = cast(char)(0xC0 | (c >> 6)); + buf[1] = cast(char)(0x80 | (c & 0x3F)); + L = 2; + } + else if (c <= 0xFFFF) + { + buf[0] = cast(char)(0xE0 | (c >> 12)); + buf[1] = cast(char)(0x80 | ((c >> 6) & 0x3F)); + buf[2] = cast(char)(0x80 | (c & 0x3F)); + L = 3; + } + else if (c <= 0x10FFFF) + { + buf[0] = cast(char)(0xF0 | (c >> 18)); + buf[1] = cast(char)(0x80 | ((c >> 12) & 0x3F)); + buf[2] = cast(char)(0x80 | ((c >> 6) & 0x3F)); + buf[3] = cast(char)(0x80 | (c & 0x3F)); + L = 4; + } + else + { + assert(0); + } + r ~= buf[0 .. L]; + } + s = r; + } + +unittest +{ + debug(utf) printf("utf.encode.unittest\n"); + + char[] s = "abcd"; + encode(s, cast(dchar)'a'); + assert(s.length == 5); + assert(s == "abcda"); + + encode(s, cast(dchar)'\u00A9'); + assert(s.length == 7); + assert(s == "abcda\xC2\xA9"); + //assert(s == "abcda\u00A9"); // BUG: fix compiler + + encode(s, cast(dchar)'\u2260'); + assert(s.length == 10); + assert(s == "abcda\xC2\xA9\xE2\x89\xA0"); +} + +/********************************************************/ + +void encode(inout wchar[] s, dchar c) + in + { + assert(isValidDchar(c)); + } + body + { + wchar[] r = s; + + if (c <= 0xFFFF) + { + r ~= cast(wchar) c; + } + else + { + wchar[2] buf; + + buf[0] = cast(wchar) ((((c - 0x10000) >> 10) & 0x3FF) + 0xD800); + buf[1] = cast(wchar) (((c - 0x10000) & 0x3FF) + 0xDC00); + r ~= buf; + } + s = r; + } + +void encode(inout dchar[] s, dchar c) + in + { + assert(isValidDchar(c)); + } + body + { + s ~= c; + } + +/* =================== Validation ======================= */ + +void validate(char[] s) +{ + size_t len = s.length; + size_t i; + + for (i = 0; i < len; ) + { + decode(s, i); + } +} + +void validate(wchar[] s) +{ + size_t len = s.length; + size_t i; + + for (i = 0; i < len; ) + { + decode(s, i); + } +} + +void validate(dchar[] s) +{ + size_t len = s.length; + size_t i; + + for (i = 0; i < len; ) + { + decode(s, i); + } +} + +/* =================== Conversion to UTF8 ======================= */ + +char[] toUTF8(char[4] buf, dchar c) + in + { + assert(isValidDchar(c)); + } + body + { + if (c <= 0x7F) + { + buf[0] = cast(char) c; + return buf[0 .. 1]; + } + else if (c <= 0x7FF) + { + buf[0] = cast(char)(0xC0 | (c >> 6)); + buf[1] = cast(char)(0x80 | (c & 0x3F)); + return buf[0 .. 2]; + } + else if (c <= 0xFFFF) + { + buf[0] = cast(char)(0xE0 | (c >> 12)); + buf[1] = cast(char)(0x80 | ((c >> 6) & 0x3F)); + buf[2] = cast(char)(0x80 | (c & 0x3F)); + return buf[0 .. 3]; + } + else if (c <= 0x10FFFF) + { + buf[0] = cast(char)(0xF0 | (c >> 18)); + buf[1] = cast(char)(0x80 | ((c >> 12) & 0x3F)); + buf[2] = cast(char)(0x80 | ((c >> 6) & 0x3F)); + buf[3] = cast(char)(0x80 | (c & 0x3F)); + return buf[0 .. 4]; + } + assert(0); + } + +char[] toUTF8(char[] s) + in + { + validate(s); + } + body + { + return s; + } + +char[] toUTF8(wchar[] s) +{ + char[] r; + size_t i; + size_t slen = s.length; + + r.length = slen; + + for (i = 0; i < slen; i++) + { wchar c = s[i]; + + if (c <= 0x7F) + r[i] = cast(char)c; // fast path for ascii + else + { + r.length = i; + foreach (dchar c; s[i .. slen]) + { + encode(r, c); + } + break; + } + } + return r; +} + +char[] toUTF8(dchar[] s) +{ + char[] r; + size_t i; + size_t slen = s.length; + + r.length = slen; + + for (i = 0; i < slen; i++) + { dchar c = s[i]; + + if (c <= 0x7F) + r[i] = cast(char)c; // fast path for ascii + else + { + r.length = i; + foreach (dchar d; s[i .. slen]) + { + encode(r, d); + } + break; + } + } + return r; +} + +/* =================== Conversion to UTF16 ======================= */ + +wchar[] toUTF16(wchar[2] buf, dchar c) + in + { + assert(isValidDchar(c)); + } + body + { + if (c <= 0xFFFF) + { + buf[0] = cast(wchar) c; + return buf[0 .. 1]; + } + else + { + buf[0] = cast(wchar) ((((c - 0x10000) >> 10) & 0x3FF) + 0xD800); + buf[1] = cast(wchar) (((c - 0x10000) & 0x3FF) + 0xDC00); + return buf[0 .. 2]; + } + } + +wchar[] toUTF16(char[] s) +{ + wchar[] r; + size_t slen = s.length; + + r.length = slen; + r.length = 0; + for (size_t i = 0; i < slen; ) + { + dchar c = s[i]; + if (c <= 0x7F) + { + i++; + r ~= cast(wchar)c; + } + else + { + c = decode(s, i); + encode(r, c); + } + } + return r; +} + +wchar* toUTF16z(char[] s) +{ + wchar[] r; + size_t slen = s.length; + + r.length = slen + 1; + r.length = 0; + for (size_t i = 0; i < slen; ) + { + dchar c = s[i]; + if (c <= 0x7F) + { + i++; + r ~= cast(wchar)c; + } + else + { + c = decode(s, i); + encode(r, c); + } + } + r ~= "\000"; + return r.ptr; +} + +wchar[] toUTF16(wchar[] s) + in + { + validate(s); + } + body + { + return s; + } + +wchar[] toUTF16(dchar[] s) +{ + wchar[] r; + size_t slen = s.length; + + r.length = slen; + r.length = 0; + for (size_t i = 0; i < slen; i++) + { + encode(r, s[i]); + } + return r; +} + +/* =================== Conversion to UTF32 ======================= */ + +dchar[] toUTF32(char[] s) +{ + dchar[] r; + size_t slen = s.length; + size_t j = 0; + + r.length = slen; // r[] will never be longer than s[] + for (size_t i = 0; i < slen; ) + { + dchar c = s[i]; + if (c >= 0x80) + c = decode(s, i); + else + i++; // c is ascii, no need for decode + r[j++] = c; + } + return r[0 .. j]; +} + +dchar[] toUTF32(wchar[] s) +{ + dchar[] r; + size_t slen = s.length; + size_t j = 0; + + r.length = slen; // r[] will never be longer than s[] + for (size_t i = 0; i < slen; ) + { + dchar c = s[i]; + if (c >= 0x80) + c = decode(s, i); + else + i++; // c is ascii, no need for decode + r[j++] = c; + } + return r[0 .. j]; +} + +dchar[] toUTF32(dchar[] s) + in + { + validate(s); + } + body + { + return s; + } + +/* ================================ tests ================================== */ + +unittest +{ + debug(utf) printf("utf.toUTF.unittest\n"); + + char[] c; + wchar[] w; + dchar[] d; + + c = "hello"; + w = toUTF16(c); + assert(w == "hello"); + d = toUTF32(c); + assert(d == "hello"); + + c = toUTF8(w); + assert(c == "hello"); + d = toUTF32(w); + assert(d == "hello"); + + c = toUTF8(d); + assert(c == "hello"); + w = toUTF16(d); + assert(w == "hello"); + + + c = "hel\u1234o"; + w = toUTF16(c); + assert(w == "hel\u1234o"); + d = toUTF32(c); + assert(d == "hel\u1234o"); + + c = toUTF8(w); + assert(c == "hel\u1234o"); + d = toUTF32(w); + assert(d == "hel\u1234o"); + + c = toUTF8(d); + assert(c == "hel\u1234o"); + w = toUTF16(d); + assert(w == "hel\u1234o"); + + + c = "he\U0010AAAAllo"; + w = toUTF16(c); + //foreach (wchar c; w) printf("c = x%x\n", c); + //foreach (wchar c; cast(wchar[])"he\U0010AAAAllo") printf("c = x%x\n", c); + assert(w == "he\U0010AAAAllo"); + d = toUTF32(c); + assert(d == "he\U0010AAAAllo"); + + c = toUTF8(w); + assert(c == "he\U0010AAAAllo"); + d = toUTF32(w); + assert(d == "he\U0010AAAAllo"); + + c = toUTF8(d); + assert(c == "he\U0010AAAAllo"); + w = toUTF16(d); + assert(w == "he\U0010AAAAllo"); +} diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/lib/common/tango/llvmdc.mak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/lib/common/tango/llvmdc.mak Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,154 @@ +# Makefile to build the common D runtime library for LLVM +# Designed to work with GNU make +# Targets: +# make +# Same as make all +# make lib +# Build the common library +# make doc +# Generate documentation +# make clean +# Delete unneeded files created by build process + +LIB_TARGET=libtango-cc-tango.a +LIB_MASK=libtango-cc-tango*.a +LIB_TARGET_C=libtango-cc-c-tango.a +LIB_MASK_C=libtango-cc-c-tango*.a + +CP=cp -f +RM=rm -f +MD=mkdir -p + +ADD_CFLAGS= +ADD_DFLAGS= + +#CFLAGS=-O3 $(ADD_CFLAGS) +CFLAGS=-g $(ADD_CFLAGS) + +#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) +DFLAGS=-g -w -noasm $(ADD_DFLAGS) + +#TFLAGS=-O3 -inline -w $(ADD_DFLAGS) +TFLAGS=-g -w -noasm $(ADD_DFLAGS) + +DOCFLAGS=-version=DDoc + +CC=gcc +LC=llvm-ar rsv +CLC=ar rsv +DC=llvmdc +LLC=llvm-as + +INC_DEST=../../../tango +LIB_DEST=.. +DOC_DEST=../../../doc/tango + +.SUFFIXES: .s .S .c .cpp .d .ll .html .o .bc + +.s.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.S.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.c.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.cpp.o: + g++ -c $(CFLAGS) $< -o$@ + +.d.bc: + $(DC) -c $(DFLAGS) -Hf$*.di $< -of$@ +# $(DC) -c $(DFLAGS) $< -of$@ + +.ll.bc: + $(LLC) -f -o=$@ $< + +.d.html: + $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< +# $(DC) -c -o- $(DOCFLAGS) -Df$*.html tango.ddoc $< + +targets : lib doc +all : lib doc +tango : lib +lib : tango.lib tango.clib +doc : tango.doc + +###################################################### + +OBJ_CORE= \ + core/BitManip.bc \ + core/Exception.bc \ + core/Memory.bc \ + core/Runtime.bc \ + core/Thread.bc +# core/ThreadASM.o + +OBJ_STDC= \ + stdc/wrap.o +# stdc/wrap.bc + +OBJ_STDC_POSIX= \ + stdc/posix/pthread_darwin.o + +ALL_OBJS= \ + $(OBJ_CORE) +# $(OBJ_STDC) +# $(OBJ_STDC_POSIX) + +###################################################### + +DOC_CORE= \ + core/BitManip.html \ + core/Exception.html \ + core/Memory.html \ + core/Runtime.html \ + core/Thread.html + + +ALL_DOCS= + +###################################################### + +tango.lib : $(LIB_TARGET) + +$(LIB_TARGET) : $(ALL_OBJS) + $(RM) $@ + $(LC) $@ $(ALL_OBJS) + + +tango.clib : $(LIB_TARGET_C) + +$(LIB_TARGET_C) : $(OBJ_STDC) + $(RM) $@ + $(CLC) $@ $(OBJ_STDC) + + +tango.doc : $(ALL_DOCS) + echo Documentation generated. + +###################################################### + +### stdc/posix + +#stdc/posix/pthread_darwin.o : stdc/posix/pthread_darwin.d +# $(DC) -c $(DFLAGS) stdc/posix/pthread_darwin.d -of$@ + +###################################################### + +clean : + find . -name "*.di" | xargs $(RM) + $(RM) $(ALL_OBJS) + $(RM) $(OBJ_STDC) + $(RM) $(ALL_DOCS) + find . -name "$(LIB_MASK)" | xargs $(RM) + find . -name "$(LIB_MASK_C)" | xargs $(RM) + +install : + $(MD) $(INC_DEST) + find . -name "*.di" -exec cp -f {} $(INC_DEST)/{} \; + $(MD) $(DOC_DEST) + find . -name "*.html" -exec cp -f {} $(DOC_DEST)/{} \; + $(MD) $(LIB_DEST) + find . -name "$(LIB_MASK)" -exec cp -f {} $(LIB_DEST)/{} \; + find . -name "$(LIB_MASK_C)" -exec cp -f {} $(LIB_DEST)/{} \; diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/lib/gc/basic/llvmdc.mak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/lib/gc/basic/llvmdc.mak Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,100 @@ +# Makefile to build the garbage collector D library for LLVMDC +# Designed to work with GNU make +# Targets: +# make +# Same as make all +# make lib +# Build the garbage collector library +# make doc +# Generate documentation +# make clean +# Delete unneeded files created by build process + +LIB_TARGET=libtango-gc-basic.a +LIB_MASK=libtango-gc-basic*.a + +CP=cp -f +RM=rm -f +MD=mkdir -p + +ADD_CFLAGS= +ADD_DFLAGS= + +#CFLAGS=-O3 $(ADD_CFLAGS) +CFLAGS=-g $(ADD_CFLAGS) + +#DFLAGS=-release -O3 -inline -w -nofloat $(ADD_DFLAGS) +DFLAGS=-g -w -nofloat $(ADD_DFLAGS) + +#TFLAGS=-O3 -inline -w -nofloat $(ADD_DFLAGS) +TFLAGS=-g -w -nofloat $(ADD_DFLAGS) + +DOCFLAGS=-version=DDoc + +CC=gcc +LC=llvm-ar rsv +DC=llvmdc + +LIB_DEST=.. + +.SUFFIXES: .s .S .c .cpp .d .html .o .bc + +.s.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.S.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.c.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.cpp.o: + g++ -c $(CFLAGS) $< -o$@ + +.d.bc: + $(DC) -c $(DFLAGS) $< -of$@ + +.d.html: + $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< +# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< + +targets : lib doc +all : lib doc +lib : basic.lib +doc : basic.doc + +###################################################### + +ALL_OBJS= \ + gc.bc \ + gcalloc.bc \ + gcbits.bc \ + gcstats.bc \ + gcx.bc + +###################################################### + +ALL_DOCS= + +###################################################### + +basic.lib : $(LIB_TARGET) + +$(LIB_TARGET) : $(ALL_OBJS) + $(RM) $@ + $(LC) $@ $(ALL_OBJS) + +basic.doc : $(ALL_DOCS) + echo No documentation available. + +###################################################### + +clean : + find . -name "*.di" | xargs $(RM) + $(RM) $(ALL_OBJS) + $(RM) $(ALL_DOCS) + $(RM) $(LIB_MASK) + +install : + $(MD) $(LIB_DEST) + $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/lib/gc/stub/llvmdc.mak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/lib/gc/stub/llvmdc.mak Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,96 @@ +# Makefile to build the garbage collector D library for Posix +# Designed to work with GNU make +# Targets: +# make +# Same as make all +# make lib +# Build the garbage collector library +# make doc +# Generate documentation +# make clean +# Delete unneeded files created by build process + +LIB_TARGET=libtango-gc-stub.a +LIB_MASK=libtango-gc-stub*.a + +CP=cp -f +RM=rm -f +MD=mkdir -p + +ADD_CFLAGS= +ADD_DFLAGS= + +#CFLAGS=-O3 $(ADD_CFLAGS) +CFLAGS=-g $(ADD_CFLAGS) + +#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) +DFLAGS=-g $(ADD_DFLAGS) + +#TFLAGS=-O3 -inline $(ADD_DFLAGS) +TFLAGS=-g $(ADD_DFLAGS) + +DOCFLAGS=-version=DDoc + +CC=gcc +LC=llvm-ar rsv +DC=llvmdc + +LIB_DEST=.. + +.SUFFIXES: .s .S .c .cpp .d .html .o .bc + +.s.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.S.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.c.o: + $(CC) -c $(CFLAGS) $< -o$@ + +.cpp.o: + g++ -c $(CFLAGS) $< -o$@ + +.d.bc: + $(DC) -c $(DFLAGS) $< -of$@ + +.d.html: + $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< +# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< + +targets : lib doc +all : lib doc +lib : stub.lib +doc : stub.doc + +###################################################### + +ALL_OBJS= \ + gc.bc + +###################################################### + +ALL_DOCS= + +###################################################### + +stub.lib : $(LIB_TARGET) + +$(LIB_TARGET) : $(ALL_OBJS) + $(RM) $@ + $(LC) $@ $(ALL_OBJS) + +stub.doc : $(ALL_DOCS) + echo No documentation available. + +###################################################### + +clean : + find . -name "*.di" | xargs $(RM) + $(RM) $(ALL_OBJS) + $(RM) $(ALL_DOCS) + $(RM) $(LIB_MASK) + +install : + $(MD) $(LIB_DEST) + $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/lib/llvmdc-posix.mak --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/lib/llvmdc-posix.mak Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,104 @@ +# Makefile to build the composite D runtime library for Linux +# Designed to work with GNU make +# Targets: +# make +# Same as make all +# make lib +# Build the runtime library +# make doc +# Generate documentation +# make clean +# Delete unneeded files created by build process + +LIB_TARGET=libtango-base-llvmdc.a +LIB_MASK=libtango-base-llvmdc*.a +LIB_TARGET_C=libtango-base-c-llvmdc.a +LIB_MASK_C=libtango-base-c-llvmdc*.a +LIB_NAME_NATIVE=libtango-base-llvmdc-native +LIB_TARGET_NATIVE=$(LIB_NAME_NATIVE).a + +DIR_CC=./common/tango +DIR_RT=../../runtime/internal +DIR_GC=./gc/basic +#DIR_GC=./gc/stub + +CP=cp -f +RM=rm -f +MD=mkdir -p + +CC=gcc +LC=llvm-ar rsv +CLC=ar rsv +DC=llvmdc +LLVMLINK=llvm-link +LLC=llc + +ADD_CFLAGS= +#ADD_DFLAGS= +ADD_DFLAGS=-I`pwd`/common -I`pwd`/.. -I`pwd`/compiler/llvmdc + +targets : nativelib doc +all : nativelib lib doc + +###################################################### + +ALL_OBJS= + +###################################################### + +ALL_DOCS= + +###################################################### + +lib : $(ALL_OBJS) + make -C $(DIR_CC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + make -C $(DIR_RT) -fllvmdc.mak lib + make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + find . -name $(LIB_MASK) | xargs $(RM) + $(LC) $(LIB_TARGET) `find $(DIR_CC) -name "*.bc" | xargs echo` + $(LC) $(LIB_TARGET) `find $(DIR_RT) -name "*.bc" | xargs echo` + $(LC) $(LIB_TARGET) `find $(DIR_GC) -name "*.bc" | xargs echo` + $(CLC) $(LIB_TARGET_C) `find $(DIR_CC) -name "*.o" | xargs echo` + $(CLC) $(LIB_TARGET_C) `find $(DIR_RT) -name "*.o" | xargs echo` + +nativelib: $(ALL_OBJS) + make -C $(DIR_CC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + make -C $(DIR_RT) -fllvmdc.mak lib + make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" + + $(RM) $(LIB_NAME_NATIVE)* + + # first link all bcs together to a single bitcode file + $(LLVMLINK) -o=$(LIB_NAME_NATIVE)-llvm.bc `find $(DIR_CC) $(DIR_RT) $(DIR_GC) -name "*.bc"` + # then compile to assembler + $(LLC) -o=$(LIB_NAME_NATIVE)-llvm.s $(LIB_NAME_NATIVE)-llvm.bc + # assemble native code + $(CC) -c -o $(LIB_NAME_NATIVE)-llvm.o $(LIB_NAME_NATIVE)-llvm.s + # make an archive containing it and the other native object files + $(CLC) $(LIB_TARGET_NATIVE) $(LIB_NAME_NATIVE)-llvm.o `find $(DIR_CC) $(DIR_RT) -name "*.o"` + + +doc : $(ALL_DOCS) + make -C $(DIR_CC) -fllvmdc.mak doc + make -C $(DIR_RT) -fllvmdc.mak doc + make -C $(DIR_GC) -fllvmdc.mak doc + +###################################################### + +clean : + find . -name "*.di" | xargs $(RM) + $(RM) $(ALL_OBJS) + $(RM) $(ALL_DOCS) + make -C $(DIR_CC) -fllvmdc.mak clean + make -C $(DIR_RT) -fllvmdc.mak clean + make -C $(DIR_GC) -fllvmdc.mak clean + $(RM) $(LIB_MASK) + $(RM) $(LIB_MASK_C) + $(RM) $(LIB_NAME_NATIVE)* + +install : + make -C $(DIR_CC) -fllvmdc.mak install + make -C $(DIR_RT) -fllvmdc.mak install + make -C $(DIR_GC) -fllvmdc.mak install + $(CP) $(LIB_MASK) $(LIB_DEST)/. + $(CP) $(LIB_MASK_C) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/llvmdc.diff --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/llvmdc.diff Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,672 @@ +Index: object.di +=================================================================== +--- object.di (revision 3819) ++++ object.di (working copy) +@@ -150,6 +150,9 @@ + void function() dtor; + void function() unitTest; + ++ void* xgetMembers; ++ void function() ictor; ++ + static int opApply( int delegate( inout ModuleInfo ) ); + } + +Index: lib/common/tango/core/BitManip.d +=================================================================== +--- lib/common/tango/core/BitManip.d (revision 3819) ++++ lib/common/tango/core/BitManip.d (working copy) +@@ -171,6 +171,10 @@ + */ + uint outpl( uint port_address, uint value ); + } ++else version( LLVMDC ) ++{ ++ public import llvmdc.bitmanip; ++} + else + { + public import std.intrinsic; +Index: lib/common/tango/core/Thread.d +=================================================================== +--- lib/common/tango/core/Thread.d (revision 3819) ++++ lib/common/tango/core/Thread.d (working copy) +@@ -244,10 +244,33 @@ + } + body + { +- version( D_InlineAsm_X86 ) ++ version( LLVMDC ) + { ++ // put registers on the stack ++ version(D_InlineAsm_X86) ++ { ++ uint _eax, _ecx, _edx, _ebx, _esp, _ebp, _esi, _edi; + asm + { ++ mov _eax, EAX; ++ mov _ecx, ECX; ++ mov _edx, EDX; ++ mov _ebx, EBX; ++ mov _esp, ESP; ++ mov _ebp, EBP; ++ mov _esi, ESI; ++ mov _edi, EDI; ++ } ++ } ++ else ++ { ++ // FIXME ++ } ++ } ++ else version( D_InlineAsm_X86 ) ++ { ++ asm ++ { + pushad; + } + } +@@ -297,8 +320,12 @@ + } + } + +- version( D_InlineAsm_X86 ) ++ version( LLVMDC ) + { ++ // nothing to do ++ } ++ else version( D_InlineAsm_X86 ) ++ { + asm + { + popad; +@@ -2266,8 +2293,12 @@ + + private + { +- version( D_InlineAsm_X86 ) ++ version( LLVMDC ) + { ++ ++ } ++ else version( D_InlineAsm_X86 ) ++ { + version( X86_64 ) + { + +Index: lib/gc/basic/gcx.d +=================================================================== +--- lib/gc/basic/gcx.d (revision 3819) ++++ lib/gc/basic/gcx.d (working copy) +@@ -2178,6 +2178,28 @@ + __builtin_unwind_init(); + sp = & sp; + } ++ else version(LLVMDC) ++ { ++ version(D_InlineAsm_X86) ++ { ++ uint _eax, _ecx, _edx, _ebx, _ebp, _esi, _edi; ++ asm ++ { ++ mov _eax, EAX; ++ mov _ecx, ECX; ++ mov _edx, EDX; ++ mov _ebx, EBX; ++ mov _ebp, EBP; ++ mov _esi, ESI; ++ mov _edi, EDI; ++ mov sp, ESP; ++ } ++ } ++ else ++ { ++ // FIXME ++ } ++ } + else + { + asm +@@ -2191,6 +2213,10 @@ + { + // nothing to do + } ++ else version(LLVMDC) ++ { ++ // nothing to do ++ } + else + { + asm +Index: lib/gc/basic/gcbits.d +=================================================================== +--- lib/gc/basic/gcbits.d (revision 3819) ++++ lib/gc/basic/gcbits.d (working copy) +@@ -39,6 +39,10 @@ + { + // use the unoptimized version + } ++else version(LLVMDC) ++{ ++ // ditto ++} + else version (D_InlineAsm_X86) + { + version = Asm86; +Index: tango/text/convert/Layout.d +=================================================================== +--- tango/text/convert/Layout.d (revision 3819) ++++ tango/text/convert/Layout.d (working copy) +@@ -47,6 +47,12 @@ + alias void* Arg; + alias va_list ArgList; + } ++else version(LLVMDC) ++ { ++ private import tango.core.Vararg; ++ alias void* Arg; ++ alias va_list ArgList; ++ } + else + { + alias void* Arg; +@@ -197,9 +203,18 @@ + assert (formatStr, "null format specifier"); + assert (arguments.length < 64, "too many args in Layout.convert"); + +- version (GNU) ++ version (LLVMDC) + { + Arg[64] arglist = void; ++ foreach (i, arg; arguments) ++ { ++ arglist[i] = args; ++ args += (arg.tsize + size_t.sizeof - 1) & ~ (size_t.sizeof - 1); ++ } ++ } ++ else version (GNU) ++ { ++ Arg[64] arglist = void; + int[64] intargs = void; + byte[64] byteargs = void; + long[64] longargs = void; +Index: tango/core/Vararg.d +=================================================================== +--- tango/core/Vararg.d (revision 3819) ++++ tango/core/Vararg.d (working copy) +@@ -15,6 +15,10 @@ + { + public import std.stdarg; + } ++else version( LLVMDC ) ++{ ++ public import llvmdc.vararg; ++} + else + { + /** +Index: tango/math/Math.d +=================================================================== +--- tango/math/Math.d (revision 3819) ++++ tango/math/Math.d (working copy) +@@ -76,7 +76,77 @@ + version = DigitalMars_D_InlineAsm_X86; + } + } ++else version(LLVMDC) ++{ ++ private ++ { + ++ pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f32") ++ float llvm_sqrt(float); ++ pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64") ++ double llvm_sqrt(double); ++ ++ version(LLVM_X86_FP80) ++ { ++ alias tango.stdc.math.tanl llvm_tan; ++ alias tango.stdc.math.acosl llvm_acos; ++ alias tango.stdc.math.asinl llvm_asin; ++ alias tango.stdc.math.atanl llvm_atan; ++ alias tango.stdc.math.atan2l llvm_atan2; ++ alias tango.stdc.math.coshl llvm_cosh; ++ alias tango.stdc.math.sinhl llvm_sinh; ++ alias tango.stdc.math.tanhl llvm_tanh; ++ alias tango.stdc.math.cbrtl llvm_cbrt; ++ alias tango.stdc.math.expl llvm_exp; ++ alias tango.stdc.math.exp1ml llvm_exp1m; ++ alias tango.stdc.math.exp2l llvm_exp2; ++ alias tango.stdc.math.logl llvm_log; ++ alias tango.stdc.math.log1pl llvm_log1p; ++ alias tango.stdc.math.log2l llvm_log2; ++ alias tango.stdc.math.log10l llvm_log10; ++ alias tango.stdc.math.powl llvm_pow; ++ alias tango.stdc.math.lrintl llvm_lrint; ++ alias tango.stdc.math.llrintl llvm_llrint; ++ ++ pragma(LLVM_internal, "intrinsic", "llvm.cos.f80") ++ real llvm_cos(real); ++ pragma(LLVM_internal, "intrinsic", "llvm.sin.f80") ++ real llvm_sin(real); ++ pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f80") ++ real llvm_sqrt(real); ++ } ++ else ++ { ++ alias tango.stdc.math.tan llvm_tan; ++ alias tango.stdc.math.acos llvm_acos; ++ alias tango.stdc.math.asin llvm_asin; ++ alias tango.stdc.math.atan llvm_atan; ++ alias tango.stdc.math.atan2 llvm_atan2; ++ alias tango.stdc.math.cosh llvm_cosh; ++ alias tango.stdc.math.sinh llvm_sinh; ++ alias tango.stdc.math.tanh llvm_tanh; ++ alias tango.stdc.math.cbrt llvm_cbrt; ++ alias tango.stdc.math.exp llvm_exp; ++ alias tango.stdc.math.exp1m llvm_exp1m; ++ alias tango.stdc.math.exp2 llvm_exp2; ++ alias tango.stdc.math.log llvm_log; ++ alias tango.stdc.math.log1p llvm_log1p; ++ alias tango.stdc.math.log2 llvm_log2; ++ alias tango.stdc.math.log10 llvm_log10; ++ alias tango.stdc.math.pow llvm_pow; ++ alias tango.stdc.math.lrint llvm_lrint; ++ alias tango.stdc.math.llrint llvm_llrint; ++ ++ pragma(LLVM_internal, "intrinsic", "llvm.cos.f64") ++ real llvm_cos(real); ++ pragma(LLVM_internal, "intrinsic", "llvm.sin.f64") ++ real llvm_sin(real); ++ pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64") ++ real llvm_sqrt(real); ++ } ++ } ++} ++ + /* + * Constants + */ +@@ -300,6 +370,10 @@ + */ + real cos(real x) /* intrinsic */ + { ++ version(LLVMDC) ++ { ++ return llvm_cos(x); ++ } + version(D_InlineAsm_X86) + { + asm +@@ -335,6 +409,10 @@ + */ + real sin(real x) /* intrinsic */ + { ++ version(LLVMDC) ++ { ++ return llvm_sin(x); ++ } + version(D_InlineAsm_X86) + { + asm +@@ -374,6 +452,9 @@ + { + version (GNU) { + return tanl(x); ++ } ++ else version(LLVMDC) { ++ return llvm_tan(x); + } else { + asm + { +@@ -576,7 +657,14 @@ + */ + real acos(real x) + { +- return tango.stdc.math.acosl(x); ++ version(LLVMDC) ++ { ++ return llvm_acos(x); ++ } ++ else ++ { ++ return tango.stdc.math.acosl(x); ++ } + } + + debug(UnitTest) { +@@ -599,7 +687,14 @@ + */ + real asin(real x) + { +- return tango.stdc.math.asinl(x); ++ version(LLVMDC) ++ { ++ return llvm_asin(x); ++ } ++ else ++ { ++ return tango.stdc.math.asinl(x); ++ } + } + + debug(UnitTest) { +@@ -621,7 +716,14 @@ + */ + real atan(real x) + { +- return tango.stdc.math.atanl(x); ++ version(LLVMDC) ++ { ++ return llvm_atan(x); ++ } ++ else ++ { ++ return tango.stdc.math.atanl(x); ++ } + } + + debug(UnitTest) { +@@ -658,7 +760,14 @@ + */ + real atan2(real y, real x) + { +- return tango.stdc.math.atan2l(y,x); ++ version(LLVMDC) ++ { ++ return llvm_atan2(x); ++ } ++ else ++ { ++ return tango.stdc.math.atan2l(x); ++ } + } + + debug(UnitTest) { +@@ -707,7 +816,14 @@ + */ + real cosh(real x) + { +- return tango.stdc.math.coshl(x); ++ version(LLVMDC) ++ { ++ return llvm_cosh(x); ++ } ++ else ++ { ++ return tango.stdc.math.coshl(x); ++ } + } + + debug(UnitTest) { +@@ -728,7 +844,14 @@ + */ + real sinh(real x) + { +- return tango.stdc.math.sinhl(x); ++ version(LLVMDC) ++ { ++ return llvm_sinh(x); ++ } ++ else ++ { ++ return tango.stdc.math.sinhl(x); ++ } + } + + debug(UnitTest) { +@@ -749,7 +872,14 @@ + */ + real tanh(real x) + { +- return tango.stdc.math.tanhl(x); ++ version(LLVMDC) ++ { ++ return llvm_tanh(x); ++ } ++ else ++ { ++ return tango.stdc.math.tanhl(x); ++ } + } + + debug(UnitTest) { +@@ -949,8 +1079,12 @@ + */ + float sqrt(float x) /* intrinsic */ + { +- version(D_InlineAsm_X86) ++ version(LLVMDC) + { ++ return llvm_sqrt_f32(x); ++ } ++ else version(D_InlineAsm_X86) ++ { + asm + { + fld x; +@@ -965,8 +1099,12 @@ + + double sqrt(double x) /* intrinsic */ /// ditto + { +- version(D_InlineAsm_X86) ++ version(LLVMDC) + { ++ return llvm_sqrt_f64(x); ++ } ++ else version(D_InlineAsm_X86) ++ { + asm + { + fld x; +@@ -981,8 +1119,12 @@ + + real sqrt(real x) /* intrinsic */ /// ditto + { +- version(D_InlineAsm_X86) ++ version(LLVMDC) + { ++ return llvm_sqrt_f80(x); ++ } ++ else version(D_InlineAsm_X86) ++ { + asm + { + fld x; +@@ -1045,7 +1187,14 @@ + */ + real cbrt(real x) + { +- return tango.stdc.math.cbrtl(x); ++ version(LLVMDC) ++ { ++ return llvm_cbrt(x); ++ } ++ else ++ { ++ return tango.stdc.math.cbrtl(x); ++ } + } + + +@@ -1067,7 +1216,14 @@ + */ + real exp(real x) + { +- return tango.stdc.math.expl(x); ++ version(LLVMDC) ++ { ++ return llvm_exp(x); ++ } ++ else ++ { ++ return tango.stdc.math.expl(x); ++ } + } + + debug(UnitTest) { +@@ -1093,7 +1249,14 @@ + */ + real expm1(real x) + { +- return tango.stdc.math.expm1l(x); ++ version(LLVMDC) ++ { ++ return llvm_expm1(x); ++ } ++ else ++ { ++ return tango.stdc.math.expm1l(x); ++ } + } + + debug(UnitTest) { +@@ -1115,7 +1278,14 @@ + */ + real exp2(real x) + { +- return tango.stdc.math.exp2l(x); ++ version(LLVMDC) ++ { ++ return llvm_exp2(x); ++ } ++ else ++ { ++ return tango.stdc.math.exp2l(x); ++ } + } + + debug(UnitTest) { +@@ -1141,7 +1311,14 @@ + */ + real log(real x) + { +- return tango.stdc.math.logl(x); ++ version(LLVMDC) ++ { ++ return llvm_log(x); ++ } ++ else ++ { ++ return tango.stdc.math.logl(x); ++ } + } + + debug(UnitTest) { +@@ -1167,7 +1344,14 @@ + */ + real log1p(real x) + { +- return tango.stdc.math.log1pl(x); ++ version(LLVMDC) ++ { ++ return llvm_log1p(x); ++ } ++ else ++ { ++ return tango.stdc.math.log1pl(x); ++ } + } + + debug(UnitTest) { +@@ -1190,7 +1374,14 @@ + */ + real log2(real x) + { +- return tango.stdc.math.log2l(x); ++ version(LLVMDC) ++ { ++ return llvm_log2(x); ++ } ++ else ++ { ++ return tango.stdc.math.log2l(x); ++ } + } + + debug(UnitTest) { +@@ -1212,7 +1403,14 @@ + */ + real log10(real x) + { +- return tango.stdc.math.log10l(x); ++ version(LLVMDC) ++ { ++ return llvm_log10(x); ++ } ++ else ++ { ++ return tango.stdc.math.log10l(x); ++ } + } + + debug(UnitTest) { +@@ -1477,7 +1675,14 @@ + } + } + } +- return tango.stdc.math.powl(x, y); ++ version(LLVMDC) ++ { ++ return llvm_pow(x, y); ++ } ++ else ++ { ++ return tango.stdc.math.powl(x, y); ++ } + } + + debug(UnitTest) { +@@ -1823,6 +2028,10 @@ + } + return n; + } ++ else version(LLVMDC) ++ { ++ return llvm_lrint(x); ++ } + else + { + return tango.stdc.math.lrintl(x); +@@ -1842,6 +2051,10 @@ + } + return n; + } ++ else version(LLVMDC) ++ { ++ return llvm_llrint(x); ++ } + else + { + return tango.stdc.math.llrintl(x); +Index: tango/stdc/stdlib.d +=================================================================== +--- tango/stdc/stdlib.d (revision 3819) ++++ tango/stdc/stdlib.d (working copy) +@@ -94,6 +94,11 @@ + { + void* alloca(size_t size); + } ++else version( LLVMDC ) ++{ ++ pragma(alloca) ++ void* alloca(size_t size); ++} + else version( GNU ) + { + private import gcc.builtins; +Index: tango/stdc/stdarg.d +=================================================================== +--- tango/stdc/stdarg.d (revision 3819) ++++ tango/stdc/stdarg.d (working copy) +@@ -13,6 +13,10 @@ + { + public import std.c.stdarg; + } ++else version( LLVMDC ) ++{ ++ public import llvmdc.cstdarg; ++} + else + { + alias void* va_list; diff -r 76078c8ab5b9 -r 44f08170f4ef runtime/patch-tango.sh --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/runtime/patch-tango.sh Fri Aug 01 00:32:06 2008 +0200 @@ -0,0 +1,4 @@ +#!/bin/bash + +cd ../tango +patch -p0 < ../runtime/llvmdc.diff diff -r 76078c8ab5b9 -r 44f08170f4ef tango/LICENSE --- a/tango/LICENSE Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -Tango is Open Source software, distributed by a group of developers which has been set up for the purpose of providing a vendor-neutral owner of Tango intellectual property. The goals of all Tango licensing decisions are to: - - * Encourage adoption - * Discourage political contention - * Encourage collaboration and integration with other projects - * Be transparent - -Tango is dual-licensed: - * Academic Free License v2.1 (http://opensource.org/licenses/afl-2.1.php) - * BSD License (http://opensource.org/licenses/bsd-license.php) [1] - -The preferred license is the Academic Free License v2.1. All Tango projects release their code under the terms of this license. Both licenses: - - * Allow commercial use without encumbrance - * Provide broad rights to make new products and derivative works - * Place no requirement on users to contribute back (although we appreciate it if you do) - -Users who wish to include Tango with software licensed under the (L)GPL will want to use Tango under the terms of the BSD License. [1] Tango projects may request a variance from the developers to release their projects under additional licenses in conjunction with the AFL. - -If you have further questions regarding Tango licensing, please do not hesitate to contact us (http://dsource.org/projects/tango/wiki/Contact). - - -[1] The advertising clause has not been a part of the BSD License since July 22, 1999. (ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change) - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/README.txt --- a/tango/README.txt Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -For a guide to install Tango see the online installation reference: - -http://dsource.org/projects/tango/wiki/TopicInstallTango - -The license can be found at - -http://dsource.org/projects/tango/wiki/LibraryLicense diff -r 76078c8ab5b9 -r 44f08170f4ef tango/README_LLVMDC.txt --- a/tango/README_LLVMDC.txt Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -This version of Tango is modified to work with LLVMDC - by Tomas Lindquist Olsen, 2008 - -Much has been removed as this is not intended to work with other compilers. -Hopefully in time, this will go away and the required changes merged into the -mainline Tango repository. - -For more information on LLVMDC, check the site at: - - http://www.dsource.org/projects/llvmdc diff -r 76078c8ab5b9 -r 44f08170f4ef tango/dsss.conf --- a/tango/dsss.conf Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -name = tango - -[tango/core] -postinstall=install tango/core/BitManip.di $INCLUDE_PREFIX/tango/core ; \ - install tango/core/Exception.di $INCLUDE_PREFIX/tango/core ; \ - install tango/core/Memory.di $INCLUDE_PREFIX/tango/core ; \ - install tango/core/Runtime.di $INCLUDE_PREFIX/tango/core ; \ - install tango/core/Thread.di $INCLUDE_PREFIX/tango/core -version (GNU) { - prebuild = $DSSS_BUILD -obj -explicit lib/common/tango/core/BitManip.d -fintfc-file=tango/core/BitManip.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Exception.d -fintfc-file=tango/core/Exception.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Memory.d -fintfc-file=tango/core/Memory.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Runtime.d -fintfc-file=tango/core/Runtime.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Thread.d -fintfc-file=tango/core/Thread.di ; -} else version (DigitalMars) { - prebuild = $DSSS_BUILD -obj -explicit lib/common/tango/core/BitManip.d -Hftango/core/BitManip.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Exception.d -Hftango/core/Exception.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Memory.d -Hftango/core/Memory.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Runtime.d -Hftango/core/Runtime.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Thread.d -Hftango/core/Thread.di ; -} -else version (LLVMDC) { - prebuild = $DSSS_BUILD -obj -explicit lib/common/tango/core/BitManip.d -Hftango/core/BitManip.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Exception.d -Hftango/core/Exception.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Memory.d -Hftango/core/Memory.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Runtime.d -Hftango/core/Runtime.di ; \ - $DSSS_BUILD -obj -explicit lib/common/tango/core/Thread.d -Hftango/core/Thread.di ; -} - -version(LLVMDC) { - [tango/stdc] -} else { - -[tango/io] - -[tango/math] - -[tango/net] - -[tango/stdc] -version (Windows) { - exclude = tango/stdc/posix -} - -[tango/sys] -exclude = tango/sys/linux/* tango/sys/darwin/* tango/sys/win32/* -exclude += tango/sys/TimeConverter.d - -version (linux) { - [tango/sys/linux] -} - -version (darwin) { - [tango/sys/darwin] -} - -version (Windows) { - [+tango/sys/win32] - preinstall = install tango/sys/win32/Macros.di $INCLUDE_PREFIX/tango/sys/win32 ; \ - install tango/sys/win32/Process.di $INCLUDE_PREFIX/tango/sys/win32 ; \ - install tango/sys/win32/Types.di $INCLUDE_PREFIX/tango/sys/win32 ; \ - install tango/sys/win32/UserGdi.di $INCLUDE_PREFIX/tango/sys/win32 -} - -[tango/text] - -[tango/text/locale] -version (!linux) { - exclude += tango/text/locale/Linux.d -} -version (!Windows) { - exclude += tango/text/locale/Win32.d -} - -[tango/util] - -[tango/time] - -[tango/group] - -[+std] -preinstall = installdir std $INCLUDE_PREFIX/std -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/Add.d --- a/tango/example/cluster/Add.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/******************************************************************************* - -*******************************************************************************/ - -public import tango.net.cluster.NetworkCall; - - -/******************************************************************************* - - a Task function - -*******************************************************************************/ - -real add (real x, real y) -{ - return x + y; -} - - -/******************************************************************************* - - a Task function - -*******************************************************************************/ - -int divide (int x, int y) -{ - return x / y; -} - - -/******************************************************************************* - - a verbose Task message - -*******************************************************************************/ - -class Subtract : NetworkCall -{ - double a, - b, - result; - - double opCall (double a, double b, IChannel channel = null) - { - this.a = a; - this.b = b; - send (channel); - return result; - } - - override void execute () - { - result = a - b; - } - - override void read (IReader input) {input (a)(b)(result);} - - override void write (IWriter output) {output (a)(b)(result);} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/alert.d --- a/tango/example/cluster/alert.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -private import tango.core.Thread; - -private import tango.util.log.Configurator; - -private import tango.net.cluster.NetworkAlert; - -private import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - How to send and recieve Alert messages using tango.net.cluster - -*******************************************************************************/ - -void main() -{ - // hook into the cluster - auto cluster = (new Cluster).join; - - // hook into the Alert layer - auto alert = new NetworkAlert (cluster, "my.kind.of.alert"); - - // listen for the broadcast (on this channel) - alert.createConsumer (delegate void (IEvent event) - {event.log.info ("Recieved alert on channel " ~ event.channel.name);} - ); - - // say what's going on - alert.log.info ("broadcasting alert"); - - // and send everyone an empty alert (on this channel) - alert.broadcast; - - // wait for it to arrive ... - Thread.sleep(1); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/cclient.d --- a/tango/example/cluster/cclient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/******************************************************************************* - - -*******************************************************************************/ - -import tango.io.Stdout; - -import tango.time.StopWatch; - -import tango.util.log.Configurator; - -import tango.net.cluster.NetworkCache; - -import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - -*******************************************************************************/ - -void main (char[][] args) -{ - StopWatch w; - - if (args.length > 1) - { - auto cluster = (new Cluster).join (args[1..$]); - auto cache = new NetworkCache (cluster, "my.cache.channel"); - - while (true) - { - w.start; - for (int i=10000; i--;) - cache.put ("key", cache.EmptyMessage); - - Stdout.formatln ("{} put/s", 10000/w.stop); - - w.start; - for (int i=10000; i--;) - cache.get ("key"); - - Stdout.formatln ("{} get/s", 10000/w.stop); - } - } - else - Stdout.formatln ("usage: cache cachehost:port ..."); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/cserver.d --- a/tango/example/cluster/cserver.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Console; - -import tango.net.InternetAddress; - -import tango.net.cluster.tina.CmdParser, - tango.net.cluster.tina.CacheServer; - -/******************************************************************************* - -*******************************************************************************/ - -void main (char[][] args) -{ - auto arg = new CmdParser ("cache.server"); - - // default number of cache entries - arg.size = 8192; - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: cacheserver -port=number -size=cachesize -log[=trace, info, warn, error, fatal, none]").newline; - else - (new CacheServer(new InternetAddress(arg.port), arg.log, arg.size)).start; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/invalidate.d --- a/tango/example/cluster/invalidate.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -private import tango.core.Thread; - -private import tango.util.log.Configurator; - -private import tango.net.cluster.tina.Cluster; - -private import tango.net.cluster.QueuedCache, - tango.net.cluster.CacheInvalidatee, - tango.net.cluster.CacheInvalidator; - -/******************************************************************************* - - Demonstrates how to invalidate cache entries across a cluster - via a channel - -*******************************************************************************/ - -void main() -{ - // access the cluster - auto cluster = (new Cluster).join; - - // wrap a cache instance with a network listener - auto dst = new CacheInvalidatee (cluster, "my.cache.channel", new QueuedCache!(char[], IMessage)(101)); - - // connect an invalidator to that cache channel - auto src = new CacheInvalidator (cluster, "my.cache.channel"); - - // stuff something in the local cache - dst.cache.put ("key", dst.EmptyMessage); - - // get it removed via a network broadcast - src.log.info ("invalidating 'key' across the cluster"); - src.invalidate ("key"); - - // wait for it to arrive ... - Thread.sleep (1); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/qclient.d --- a/tango/example/cluster/qclient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/******************************************************************************* - - -*******************************************************************************/ - -import tango.io.Stdout; - -import tango.time.StopWatch; - -import tango.util.log.Configurator; - -import tango.net.cluster.NetworkQueue; - -import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - -*******************************************************************************/ - -void main (char[][] args) -{ - StopWatch w; - - auto cluster = (new Cluster).join; - auto queue = new NetworkQueue (cluster, "my.queue.channel"); - - while (true) - { - w.start; - for (int i=10000; i--;) - queue.put (queue.EmptyMessage); - - Stdout.formatln ("{} put/s", 10000/w.stop); - - uint count; - w.start; - while (queue.get !is null) - ++count; - - Stdout.formatln ("{} get/s", count/w.stop); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/qlisten.d --- a/tango/example/cluster/qlisten.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -private import tango.core.Thread; - -private import tango.util.log.Configurator; - -private import tango.net.cluster.NetworkQueue; - -private import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - Illustrates how to setup and use a Queue in asynchronous mode - -*******************************************************************************/ - -void main () -{ - void listen (IEvent event) - { - while (event.get) - event.log.info ("received asynch msg on channel " ~ event.channel.name); - } - - - // join the cluster - auto cluster = (new Cluster).join; - - // access a queue of the specified name - auto queue = new NetworkQueue (cluster, "my.queue.channel"); - - // listen for messages placed in my queue, via a delegate - queue.createConsumer (&listen); - - // stuff something into the queue - queue.log.info ("sending three messages to the queue"); - queue.put (queue.EmptyMessage); - queue.put (queue.EmptyMessage); - queue.put (queue.EmptyMessage); - - // wait for asynchronous msgs to arrive ... - Thread.sleep (1); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/qrequest.d --- a/tango/example/cluster/qrequest.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -private import tango.util.log.Configurator; - -private import tango.net.cluster.NetworkQueue; - -private import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - Illustrates how to setup and use a Queue in synchronous mode - -*******************************************************************************/ - -void main () -{ - // join the cluster - auto cluster = (new Cluster).join; - - // access a queue of the specified name - auto queue = new NetworkQueue (cluster, "my.queue.channel"); - - // stuff something into the queue - queue.log.info ("sending three messages to the queue"); - queue.put (queue.EmptyMessage); - queue.put (queue.EmptyMessage); - queue.put (queue.EmptyMessage); - - // retreive synchronously - while (queue.get) - queue.log.info ("retrieved msg"); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/qserver.d --- a/tango/example/cluster/qserver.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Console; - -import tango.net.InternetAddress; - -import tango.net.cluster.tina.CmdParser, - tango.net.cluster.tina.QueueServer; - -/******************************************************************************* - -*******************************************************************************/ - -void main (char[][] args) -{ - auto arg = new CmdParser ("queue.server"); - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: queueserver -port=number -log[=trace, info, warn, error, fatal, none]").newline; - else - (new QueueServer(new InternetAddress(arg.port), arg.log)).start; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/reply.d --- a/tango/example/cluster/reply.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -private import tango.core.Thread; - -private import tango.util.log.Configurator; - -private import tango.net.cluster.tina.Cluster; - -private import tango.net.cluster.NetworkQueue; - -/******************************************************************************* - -*******************************************************************************/ - -void main() -{ - // open the cluster and a queue channel. Note that the queue has - // been configured with a reply listener ... - auto cluster = (new Cluster).join; - auto queue = new NetworkQueue (cluster, "message.channel", - (IEvent event){event.log.info ("Received reply");} - ); - - void recipient (IEvent event) - { - auto msg = event.get; - - event.log.info ("Replying to message on channel "~msg.reply); - event.reply (event.replyChannel(msg), queue.EmptyMessage); - } - - // setup a listener to recieve and reply - queue.createConsumer (&recipient); - - // toss a message out to the cluster - queue.put (queue.EmptyMessage); - - // wait for completion ... - Thread.sleep (1); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/task.d --- a/tango/example/cluster/task.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -/******************************************************************************* - - Illustrates usage of cluster tasks - -*******************************************************************************/ - -import Add, tango.io.Stdout, tango.net.cluster.tina.ClusterTask; - -void main (char[][] args) -{ - scope add = new NetCall!(add); - - Stdout.formatln ("cluster expression of 3.0 + 4.0 = {}", add(3, 4)); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/tclient.d --- a/tango/example/cluster/tclient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -/******************************************************************************* - - -*******************************************************************************/ - -import Add; - -import tango.io.Stdout; - -import tango.time.StopWatch; - -import tango.util.log.Configurator; - -import tango.net.cluster.tina.ClusterTask; - -/******************************************************************************* - - -*******************************************************************************/ - -void main (char[][] args) -{ - // an implicit task instance - auto add = new NetCall!(add); - - // an explicit task instance - auto sub = new Subtract; - - StopWatch w; - while (true) - { - w.start; - for (int i=10000; i--;) - { - // both task types are used in the same manner - add (1, 2); - sub (3, 4); - } - Stdout.formatln ("{} calls/s", 20000/w.stop); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/cluster/tserver.d --- a/tango/example/cluster/tserver.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Console; - -import tango.net.InternetAddress; - -import tango.net.cluster.tina.CmdParser, - tango.net.cluster.tina.TaskServer; - -import Add; - -/******************************************************************************* - -*******************************************************************************/ - -void main (char[][] args) -{ - auto arg = new CmdParser ("task.server"); - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: taskserver -port=number -log[=trace, info, warn, error, fatal, none]").newline; - else - { - auto server = new TaskServer (new InternetAddress(arg.port), arg.log); - server.enroll (new NetCall!(add)); - server.enroll (new Subtract); - server.start; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/concurrency/fiber_test.d --- a/tango/example/concurrency/fiber_test.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,806 +0,0 @@ -import tango.core.Thread; - -extern (C) int printf(char * str, ...); - -void main() -{ - printf("Compile with -unittest"); -} - - -unittest -{ - printf("Testing context creation/deletion\n"); - int s0 = 0; - static int s1 = 0; - - Fiber a = new Fiber( - delegate void() - { - s0++; - }); - - static void fb() { s1++; } - - Fiber b = new Fiber(&fb); - - Fiber c = new Fiber( - delegate void() { assert(false); }); - - assert(a); - assert(b); - assert(c); - - assert(s0 == 0); - assert(s1 == 0); - assert(a.state == Fiber.State.HOLD); - assert(b.state == Fiber.State.HOLD); - assert(c.state == Fiber.State.HOLD); - - delete c; - - assert(s0 == 0); - assert(s1 == 0); - assert(a.state == Fiber.State.HOLD); - assert(b.state == Fiber.State.HOLD); - - printf("running a\n"); - a.call(); - printf("done a\n"); - - assert(a); - - assert(s0 == 1); - assert(s1 == 0); - assert(a.state == Fiber.State.TERM); - assert(b.state == Fiber.State.HOLD); - - assert(b.state == Fiber.State.HOLD); - - printf("Running b\n"); - b.call(); - printf("Done b\n"); - - assert(s0 == 1); - assert(s1 == 1); - assert(b.state == Fiber.State.TERM); - - delete a; - delete b; - - printf("Context creation passed\n"); -} - -unittest -{ - printf("Testing context switching\n"); - int s0 = 0; - int s1 = 0; - int s2 = 0; - - Fiber a = new Fiber( - delegate void() - { - while(true) - { - debug printf(" ---A---\n"); - s0++; - Fiber.yield(); - } - }); - - - Fiber b = new Fiber( - delegate void() - { - while(true) - { - debug printf(" ---B---\n"); - s1++; - Fiber.yield(); - } - }); - - - Fiber c = new Fiber( - delegate void() - { - while(true) - { - debug printf(" ---C---\n"); - s2++; - Fiber.yield(); - } - }); - - assert(a); - assert(b); - assert(c); - assert(s0 == 0); - assert(s1 == 0); - assert(s2 == 0); - - a.call(); - b.call(); - - assert(a); - assert(b); - assert(c); - assert(s0 == 1); - assert(s1 == 1); - assert(s2 == 0); - - for(int i=0; i<20; i++) - { - c.call(); - a.call(); - } - - assert(a); - assert(b); - assert(c); - assert(s0 == 21); - assert(s1 == 1); - assert(s2 == 20); - - delete a; - delete b; - delete c; - - printf("Context switching passed\n"); -} - -unittest -{ - printf("Testing nested contexts\n"); - Fiber a, b, c; - - int t0 = 0; - int t1 = 0; - int t2 = 0; - - a = new Fiber( - delegate void() - { - - t0++; - b.call(); - - }); - - b = new Fiber( - delegate void() - { - assert(t0 == 1); - assert(t1 == 0); - assert(t2 == 0); - - t1++; - c.call(); - - }); - - c = new Fiber( - delegate void() - { - assert(t0 == 1); - assert(t1 == 1); - assert(t2 == 0); - - t2++; - }); - - assert(a); - assert(b); - assert(c); - assert(t0 == 0); - assert(t1 == 0); - assert(t2 == 0); - - a.call(); - - assert(t0 == 1); - assert(t1 == 1); - assert(t2 == 1); - - assert(a); - assert(b); - assert(c); - - delete a; - delete b; - delete c; - - printf("Nesting contexts passed\n"); -} - -unittest -{ - printf("Testing basic exceptions\n"); - - - int t0 = 0; - int t1 = 0; - int t2 = 0; - - assert(t0 == 0); - assert(t1 == 0); - assert(t2 == 0); - - try - { - - try - { - throw new Exception("Testing\n"); - t2++; - } - catch(Exception fx) - { - t1++; - throw fx; - } - - t2++; - } - catch(Exception ex) - { - t0++; - printf("%.*s\n", ex.toString); - } - - assert(t0 == 1); - assert(t1 == 1); - assert(t2 == 0); - - printf("Basic exceptions are supported\n"); -} - - -unittest -{ - printf("Testing exceptions\n"); - Fiber a, b, c; - - int t0 = 0; - int t1 = 0; - int t2 = 0; - - printf("t0 = %d\nt1 = %d\nt2 = %d\n", t0, t1, t2); - - a = new Fiber( - delegate void() - { - t0++; - throw new Exception("A exception\n"); - t0++; - }); - - b = new Fiber( - delegate void() - { - t1++; - c.call(); - t1++; - }); - - c = new Fiber( - delegate void() - { - t2++; - throw new Exception("C exception\n"); - t2++; - }); - - assert(a); - assert(b); - assert(c); - assert(t0 == 0); - assert(t1 == 0); - assert(t2 == 0); - - try - { - a.call(); - assert(false); - } - catch(Exception e) - { - printf("%.*s\n", e.toString); - } - - assert(a); - assert(a.state == Fiber.State.TERM); - assert(b); - assert(c); - assert(t0 == 1); - assert(t1 == 0); - assert(t2 == 0); - - try - { - b.call(); - assert(false); - } - catch(Exception e) - { - printf("%.*s\n", e.toString); - } - - printf("blah2\n"); - - assert(a); - assert(b); - assert(b.state == Fiber.State.TERM); - assert(c); - assert(c.state == Fiber.State.TERM); - assert(t0 == 1); - assert(t1 == 1); - assert(t2 == 1); - - delete a; - delete b; - delete c; - - - Fiber t; - int q0 = 0; - int q1 = 0; - - t = new Fiber( - delegate void() - { - try - { - q0++; - throw new Exception("T exception\n"); - q0++; - } - catch(Exception ex) - { - q1++; - printf("!!!!!!!!GOT EXCEPTION!!!!!!!!\n"); - printf("%.*s\n", ex.toString); - } - }); - - - assert(t); - assert(q0 == 0); - assert(q1 == 0); - t.call(); - assert(t); - assert(t.state == Fiber.State.TERM); - assert(q0 == 1); - assert(q1 == 1); - - delete t; - - Fiber d, e; - int s0 = 0; - int s1 = 0; - - d = new Fiber( - delegate void() - { - try - { - s0++; - e.call(); - Fiber.yield(); - s0++; - e.call(); - s0++; - } - catch(Exception ex) - { - printf("%.*s\n", ex.toString); - } - }); - - e = new Fiber( - delegate void() - { - s1++; - Fiber.yield(); - throw new Exception("E exception\n"); - s1++; - }); - - assert(d); - assert(e); - assert(s0 == 0); - assert(s1 == 0); - - d.call(); - - assert(d); - assert(e); - assert(s0 == 1); - assert(s1 == 1); - - d.call(); - - assert(d); - assert(e); - assert(s0 == 2); - assert(s1 == 1); - - assert(d.state == Fiber.State.TERM); - assert(e.state == Fiber.State.TERM); - - delete d; - delete e; - - printf("Exceptions passed\n"); -} - -unittest -{ - printf("Testing standard exceptions\n"); - int t = 0; - - Fiber a = new Fiber( - delegate void() - { - throw new Exception("BLAHAHA"); - }); - - assert(a); - assert(t == 0); - - try - { - a.call(); - assert(false); - } - catch(Exception e) - { - printf("%.*s\n", e.toString); - } - - assert(a); - assert(a.state == Fiber.State.TERM); - assert(t == 0); - - delete a; - - - printf("Standard exceptions passed\n"); -} - -unittest -{ - printf("Memory stress test\n"); - - const uint STRESS_SIZE = 5000; - - Fiber ctx[]; - ctx.length = STRESS_SIZE; - - int cnt0 = 0; - int cnt1 = 0; - - void threadFunc() - { - cnt0++; - Fiber.yield; - cnt1++; - } - - foreach(inout Fiber c; ctx) - { - c = new Fiber(&threadFunc, 1024); - } - - assert(cnt0 == 0); - assert(cnt1 == 0); - - foreach(inout Fiber c; ctx) - { - c.call; - } - - assert(cnt0 == STRESS_SIZE); - assert(cnt1 == 0); - - foreach(inout Fiber c; ctx) - { - c.call; - } - - assert(cnt0 == STRESS_SIZE); - assert(cnt1 == STRESS_SIZE); - - foreach(inout Fiber c; ctx) - { - delete c; - } - - assert(cnt0 == STRESS_SIZE); - assert(cnt1 == STRESS_SIZE); - - printf("Memory stress test passed\n"); -} - -unittest -{ - printf("Testing floating point\n"); - - float f0 = 1.0; - float f1 = 0.0; - - double d0 = 2.0; - double d1 = 0.0; - - real r0 = 3.0; - real r1 = 0.0; - - assert(f0 == 1.0); - assert(f1 == 0.0); - assert(d0 == 2.0); - assert(d1 == 0.0); - assert(r0 == 3.0); - assert(r1 == 0.0); - - Fiber a, b, c; - - a = new Fiber( - delegate void() - { - while(true) - { - f0 ++; - d0 ++; - r0 ++; - - Fiber.yield(); - } - }); - - b = new Fiber( - delegate void() - { - while(true) - { - f1 = d0 + r0; - d1 = f0 + r0; - r1 = f0 + d0; - - Fiber.yield(); - } - }); - - c = new Fiber( - delegate void() - { - while(true) - { - f0 *= d1; - d0 *= r1; - r0 *= f1; - - Fiber.yield(); - } - }); - - a.call(); - assert(f0 == 2.0); - assert(f1 == 0.0); - assert(d0 == 3.0); - assert(d1 == 0.0); - assert(r0 == 4.0); - assert(r1 == 0.0); - - b.call(); - assert(f0 == 2.0); - assert(f1 == 7.0); - assert(d0 == 3.0); - assert(d1 == 6.0); - assert(r0 == 4.0); - assert(r1 == 5.0); - - c.call(); - assert(f0 == 12.0); - assert(f1 == 7.0); - assert(d0 == 15.0); - assert(d1 == 6.0); - assert(r0 == 28.0); - assert(r1 == 5.0); - - a.call(); - assert(f0 == 13.0); - assert(f1 == 7.0); - assert(d0 == 16.0); - assert(d1 == 6.0); - assert(r0 == 29.0); - assert(r1 == 5.0); - - printf("Floating point passed\n"); -} - - -version(x86) unittest -{ - printf("Testing registers\n"); - - struct registers - { - int eax, ebx, ecx, edx; - int esi, edi; - int ebp, esp; - - //TODO: Add fpu stuff - } - - static registers old; - static registers next; - static registers g_old; - static registers g_next; - - //I believe that D calling convention requires that - //EBX, ESI and EDI be saved. In order to validate - //this, we write to those registers and call the - //stack thread. - static StackThread reg_test = new StackThread( - delegate void() - { - asm - { - naked; - - pushad; - - mov EBX, 1; - mov ESI, 2; - mov EDI, 3; - - mov [old.ebx], EBX; - mov [old.esi], ESI; - mov [old.edi], EDI; - mov [old.ebp], EBP; - mov [old.esp], ESP; - - call StackThread.yield; - - mov [next.ebx], EBX; - mov [next.esi], ESI; - mov [next.edi], EDI; - mov [next.ebp], EBP; - mov [next.esp], ESP; - - popad; - } - }); - - //Run the stack context - asm - { - naked; - - pushad; - - mov EBX, 10; - mov ESI, 11; - mov EDI, 12; - - mov [g_old.ebx], EBX; - mov [g_old.esi], ESI; - mov [g_old.edi], EDI; - mov [g_old.ebp], EBP; - mov [g_old.esp], ESP; - - mov EAX, [reg_test]; - call StackThread.call; - - mov [g_next.ebx], EBX; - mov [g_next.esi], ESI; - mov [g_next.edi], EDI; - mov [g_next.ebp], EBP; - mov [g_next.esp], ESP; - - popad; - } - - - //Make sure the registers are byte for byte equal. - assert(old.ebx = 1); - assert(old.esi = 2); - assert(old.edi = 3); - assert(old == next); - - assert(g_old.ebx = 10); - assert(g_old.esi = 11); - assert(g_old.edi = 12); - assert(g_old == g_next); - - printf("Registers passed!\n"); -} - - -unittest -{ - printf("Testing throwYield\n"); - - int q0 = 0; - - Fiber st0 = new Fiber( - delegate void() - { - q0++; - Fiber.yieldAndThrow(new Exception("testing throw yield\n")); - q0++; - }); - - try - { - st0.call(); - assert(false); - } - catch(Exception e) - { - printf("%.*s\n", e.toString); - } - - assert(q0 == 1); - assert(st0.state == Fiber.State.HOLD); - - st0.call(); - assert(q0 == 2); - assert(st0.state == Fiber.State.TERM); - - printf("throwYield passed!\n"); -} - -unittest -{ - printf("Testing thread safety\n"); - - int x = 0, y = 0; - - Fiber sc0 = new Fiber( - { - while(true) - { - x++; - Fiber.yield; - } - }); - - Fiber sc1 = new Fiber( - { - while(true) - { - y++; - Fiber.yield; - } - }); - - Thread t0 = new Thread( - { - for(int i=0; i<10000; i++) - sc0.call(); - }); - - Thread t1 = new Thread( - { - for(int i=0; i<10000; i++) - sc1.call(); - }); - - assert(sc0); - assert(sc1); - assert(t0); - assert(t1); - - t0.start; - t1.start; - t0.join; - t1.join; - - assert(x == 10000); - assert(y == 10000); - - printf("Thread safety passed!\n"); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/FileBucket.d --- a/tango/example/conduits/FileBucket.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -module FileBucket; - -private import tango.io.FilePath, - tango.io.FileConduit; - -private import tango.core.Exception; - -/****************************************************************************** - - FileBucket implements a simple mechanism to store and recover a - large quantity of data for the duration of the hosting process. - It is intended to act as a local-cache for a remote data-source, - or as a spillover area for large in-memory cache instances. - - Note that any and all stored data is rendered invalid the moment - a FileBucket object is garbage-collected. - - The implementation follows a fixed-capacity record scheme, where - content can be rewritten in-place until said capacity is reached. - At such time, the altered content is moved to a larger capacity - record at end-of-file, and a hole remains at the prior location. - These holes are not collected, since the lifespan of a FileBucket - is limited to that of the host process. - - All index keys must be unique. Writing to the FileBucket with an - existing key will overwrite any previous content. What follows - is a contrived example: - - --- - char[] text = "this is a test"; - - auto bucket = new FileBucket (new FilePath("bucket.bin"), FileBucket.HalfK); - - // insert some data, and retrieve it again - bucket.put ("a key", text); - char[] b = cast(char[]) bucket.get ("a key"); - - assert (b == text); - bucket.close; - --- - -******************************************************************************/ - -class FileBucket -{ - /********************************************************************** - - Define the capacity (block-size) of each record - - **********************************************************************/ - - struct BlockSize - { - int capacity; - } - - // basic capacity for each record - private FilePath path; - - // basic capacity for each record - private BlockSize block; - - // where content is stored - private FileConduit file; - - // pointers to file records - private Record[char[]] map; - - // current file size - private long fileSize; - - // current file usage - private long waterLine; - - // supported block sizes - public static const BlockSize EighthK = {128-1}, - HalfK = {512-1}, - OneK = {1024*1-1}, - TwoK = {1024*2-1}, - FourK = {1024*4-1}, - EightK = {1024*8-1}, - SixteenK = {1024*16-1}, - ThirtyTwoK = {1024*32-1}, - SixtyFourK = {1024*64-1}; - - - /********************************************************************** - - Construct a FileBucket with the provided path and record- - size. Selecting a record size that roughly matches the - serialized content will limit 'thrashing'. - - **********************************************************************/ - - this (char[] path, BlockSize block) - { - this (new FilePath(path), block); - } - - /********************************************************************** - - Construct a FileBucket with the provided path, record-size, - and inital record count. The latter causes records to be - pre-allocated, saving a certain amount of growth activity. - Selecting a record size that roughly matches the serialized - content will limit 'thrashing'. - - **********************************************************************/ - - this (FilePath path, BlockSize block, uint initialRecords = 100) - { - this.path = path; - this.block = block; - - // open a storage file - file = new FileConduit (path, FileConduit.ReadWriteCreate); - - // set initial file size (can be zero) - fileSize = initialRecords * block.capacity; - file.seek (fileSize); - file.truncate (); - } - - /********************************************************************** - - Return the block-size in use for this FileBucket - - **********************************************************************/ - - int getBufferSize () - { - return block.capacity+1; - } - - /********************************************************************** - - Return where the FileBucket is located - - **********************************************************************/ - - FilePath getFilePath () - { - return path; - } - - /********************************************************************** - - Return the currently populated size of this FileBucket - - **********************************************************************/ - - synchronized long length () - { - return waterLine; - } - - /********************************************************************** - - Return the serialized data for the provided key. Returns - null if the key was not found. - - **********************************************************************/ - - synchronized void[] get (char[] key) - { - Record r = null; - - if (key in map) - { - r = map [key]; - return r.read (this); - } - return null; - } - - /********************************************************************** - - Remove the provided key from this FileBucket. - - **********************************************************************/ - - synchronized void remove (char[] key) - { - map.remove(key); - } - - /********************************************************************** - - Write a serialized block of data, and associate it with - the provided key. All keys must be unique, and it is the - responsibility of the programmer to ensure this. Reusing - an existing key will overwrite previous data. - - Note that data is allowed to grow within the occupied - bucket until it becomes larger than the allocated space. - When this happens, the data is moved to a larger bucket - at the file tail. - - **********************************************************************/ - - synchronized void put (char[] key, void[] data) - { - Record* r = key in map; - - if (r is null) - { - auto rr = new Record; - map [key] = rr; - r = &rr; - } - r.write (this, data, block); - } - - /********************************************************************** - - Close this FileBucket -- all content is lost. - - **********************************************************************/ - - synchronized void close () - { - if (file) - { - file.detach; - file = null; - map = null; - } - } - - /********************************************************************** - - Each Record takes up a number of 'pages' within the file. - The size of these pages is determined by the BlockSize - provided during FileBucket construction. Additional space - at the end of each block is potentially wasted, but enables - content to grow in size without creating a myriad of holes. - - **********************************************************************/ - - private static class Record - { - private long offset; - private int length, - capacity = -1; - - /************************************************************** - - **************************************************************/ - - private static void eof (FileBucket bucket) - { - throw new IOException ("Unexpected EOF in FileBucket '"~bucket.path.toString()~"'"); - } - - /************************************************************** - - This should be protected from thread-contention at - a higher level. - - **************************************************************/ - - void[] read (FileBucket bucket) - { - void[] data = new ubyte [length]; - - bucket.file.seek (offset); - if (bucket.file.read (data) != length) - eof (bucket); - - return data; - } - - /************************************************************** - - This should be protected from thread-contention at - a higher level. - - **************************************************************/ - - void write (FileBucket bucket, void[] data, BlockSize block) - { - length = data.length; - - // create new slot if we exceed capacity - if (length > capacity) - createBucket (bucket, length, block); - - // locate to start of content - bucket.file.seek (offset); - - // write content - if (bucket.file.write (data) != length) - eof (bucket); - } - - /************************************************************** - - **************************************************************/ - - void createBucket (FileBucket bucket, int bytes, BlockSize block) - { - offset = bucket.waterLine; - capacity = (bytes + block.capacity) & ~block.capacity; - - bucket.waterLine += capacity; - if (bucket.waterLine > bucket.fileSize) - { - // grow the filesize - bucket.fileSize = bucket.waterLine * 2; - - // expand the physical file size - bucket.file.seek (bucket.fileSize); - bucket.file.truncate (); - } - } - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/composite.d --- a/tango/example/conduits/composite.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ - -private import tango.io.protocol.Reader, - tango.io.protocol.Writer, - tango.io.FileConduit; - -/******************************************************************************* - - Use cascading reads & writes to handle a composite class. There is - just one primary call for output, and just one for input, but the - classes propogate the request as appropriate. - - Note that the class instances don't know how their content will be - represented; that is dictated by the caller (via the reader/writer - implementation). - - Note also that this only serializes the content. To serialize the - classes too, take a look at the Pickle.d example. - -*******************************************************************************/ - -void main() -{ - // define a serializable class (via interfaces) - class Wumpus : IReadable, IWritable - { - private int a = 11, - b = 112, - c = 1024; - - void read (IReader input) - { - input (a) (b) (c); - } - - void write (IWriter output) - { - output (a) (b) (c); - } - } - - - // define a serializable class (via interfaces) - class Wombat : IReadable, IWritable - { - private Wumpus wumpus; - private char[] x = "xyz"; - private bool y = true; - private float z = 3.14159; - - this (Wumpus wumpus) - { - this.wumpus = wumpus; - } - - void read (IReader input) - { - input (x) (y) (z) (wumpus); - } - - void write (IWriter output) - { - output (x) (y) (z) (wumpus); - } - } - - // construct a Wombat - auto wombat = new Wombat (new Wumpus); - - // open a file for IO - auto file = new FileConduit ("random.bin", FileConduit.ReadWriteCreate); - - // construct reader & writer upon the file, with binary IO - auto output = new Writer (file); - auto input = new Reader (file); - - // write both Wombat & Wumpus (and flush them) - output (wombat) (); - - // rewind to file start - file.seek (0); - - // read both back again - input (wombat); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filebubbler.d --- a/tango/example/conduits/filebubbler.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - -private import tango.io.Console, - tango.io.FileScan, - tango.io.FileConst; - -/******************************************************************************* - - This example sweeps a named sub-directory tree for html files, - and moves them to the current directory. The existing directory - hierarchy is flattened into a naming scheme where a '.' is used - to replace the traditional path-separator - - Used by the Tango project to help manage renderings of the source - code. - -*******************************************************************************/ - -void main(char[][] args) -{ - // sweep all html files in the specified subdir - if (args.length is 2) - foreach (proxy; (new FileScan).sweep(args[1], ".html").files) - { - auto other = new FilePath (proxy.toString); - proxy.rename (other.replace (FileConst.PathSeparatorChar, '.')); - } - else - Cout ("usage is filebubbler subdir").newline; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filecat.d --- a/tango/example/conduits/filecat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -private import tango.io.Console, - tango.io.FileConduit; - -/******************************************************************************* - - Concatenate a number of files onto a single destination - -*******************************************************************************/ - -void main(char[][] args) -{ - if (args.length > 2) - { - // open the file for writing - auto dst = new FileConduit (args[1], FileConduit.WriteCreate); - - // copy each file onto dst - foreach (char[] arg; args[2..args.length]) - dst.copy (new FileConduit(arg)); - - // flush output and close - dst.close; - } - else - Cout ("usage: filecat target source1 ... sourceN"); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filecopy.d --- a/tango/example/conduits/filecopy.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ - -private import tango.io.Console, - tango.io.FileConduit; - -/******************************************************************************* - - open a file, and stream directly to console - -*******************************************************************************/ - -void main (char[][] args) -{ - if (args.length is 2) - { - // open a file for reading - auto fc = new FileConduit (args[1]); - - // stream directly to console - Cout.stream.copy (fc); - } - else - Cout ("usage is: filecopy filename").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/fileops.d --- a/tango/example/conduits/fileops.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/***************************************************** - - Example that shows some simple file operations - - Put into public domain by Lars Ivar Igesund - -*****************************************************/ - -import tango.io.Stdout; - -import tango.io.FilePath; - -void main (char[][] args) -{ - auto src = args[0] ~ ".d"; - auto dst = new FilePath (args[0] ~ ".d.copy"); - - Stdout.formatln ("copy file {} to {}", src, dst); - dst.copy (src); - assert (dst.exists); - - Stdout.formatln ("removing file {}", dst); - dst.remove; - - assert (dst.exists is false); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filepathname.d --- a/tango/example/conduits/filepathname.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -import tango.io.Console; - -import tango.io.FilePath; - -void main(){ - Cout ((new FilePath(r"d:\path\foo.bat")).name).newline; - Cout ((new FilePath(r"d:\path.two\bar")).name).newline; - Cout ((new FilePath("/home/user.name/bar.")).name).newline; - Cout ((new FilePath(r"d:\path.two\bar")).name).newline; - Cout ((new FilePath("/home/user/.resource")).name).newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filescan.d --- a/tango/example/conduits/filescan.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -private import tango.io.Stdout, - tango.io.FileScan; - -/******************************************************************************* - - List ".d" files and enclosing folders visible via a directory given - as a command-line argument. In this example we're also postponing a - flush on Stdout until output is complete. Stdout is usually flushed - on each invocation of newline or formatln, but here we're using '\n' - to illustrate how to avoid flushing many individual lines - -*******************************************************************************/ - -void main(char[][] args) -{ - char[] root = args.length < 2 ? "." : args[1]; - Stdout.formatln ("Scanning '{}'", root); - - auto scan = (new FileScan)(root, ".d"); - - Stdout.format ("\n{} Folders\n", scan.folders.length); - foreach (folder; scan.folders) - Stdout.format ("{}\n", folder); - - Stdout.format ("\n{0} Files\n", scan.files.length); - foreach (file; scan.files) - Stdout.format ("{}\n", file); - - Stdout.formatln ("\n{} Errors", scan.errors.length); - foreach (error; scan.errors) - Stdout (error).newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/filescanregex.d --- a/tango/example/conduits/filescanregex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/************************************************************** - - Example that use FileScan and Regex as a filter. - - Put into public domain by Lars Ivar Igesund - -**************************************************************/ - -import tango.io.File, - tango.io.Stdout, - tango.io.FileScan, - tango.text.Regex; - -void main(char[][] args) { - uint total; - - if (args.length < 2) { - Stdout("Please pass a directory to search").newline; - return; - } - - scope scan = new FileScan; - scope regex = Regex(r"\.(d|obj)$"); - - scan(args[1], delegate bool (FilePath fp, bool isDir) { - ++total; - return isDir || regex.test(fp.toString); - }); - - - foreach (file; scan.files) - Stdout(file).newline; - - Stdout.formatln("Found {} matches in {} entries", scan.files.length, total); - - Stdout.formatln ("\n{} Errors", scan.errors.length); - foreach (error; scan.errors) - Stdout (error).newline; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/lineio.d --- a/tango/example/conduits/lineio.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ - -private import tango.io.Console, - tango.io.FileConduit; - -private import tango.text.stream.LineIterator; - -/******************************************************************************* - - Read a file line-by-line, sending each one to the console. This - illustrates how to bind a conduit to a stream iterator (iterators - also support the binding of a buffer). Note that stream iterators - are templated for char, wchar and dchar types. - -*******************************************************************************/ - -void main (char[][] args) -{ - if (args.length is 2) - { - // open a file for reading - scope file = new FileConduit (args[1]); - - // process file one line at a time - foreach (line; new LineIterator!(char)(file)) - Cout (line).newline; - } - else - Cout ("usage: lineio filename").newline; -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/mmap.d --- a/tango/example/conduits/mmap.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ - -private import tango.io.Console, - tango.io.FileConduit, - tango.io.MappedBuffer; - -/******************************************************************************* - - open a file, map it into memory, and copy to console - -*******************************************************************************/ - -void main (char[][] args) -{ - if (args.length is 2) - { - // open a file for reading - auto mmap = new MappedBuffer (new FileConduit (args[1])); - - // copy content to console - Cout (cast(char[]) mmap.slice) (); - } - else - Cout ("usage is: mmap filename").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/paths.d --- a/tango/example/conduits/paths.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -/***************************************************** - - How to create a path with all ancestors - -*****************************************************/ - -import tango.io.FilePath; - -void main (char[][] args) -{ - auto path = new FilePath (r"d/tango/foo/bar/wumpus"); - assert (path.create.exists && path.isFolder); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/randomio.d --- a/tango/example/conduits/randomio.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ - -private import tango.io.FileConduit; - -private import tango.io.protocol.Reader, - tango.io.protocol.Writer; - -/******************************************************************************* - - Create a file for random access. Write some stuff to it, rewind to - file start and read back. - -*******************************************************************************/ - -void main() -{ - // open a file for reading - auto fc = new FileConduit ("random.bin", FileConduit.ReadWriteCreate); - - // construct (binary) reader & writer upon this conduit - auto read = new Reader (fc); - auto write = new Writer (fc); - - int x=10, y=20; - - // write some data and flush output since IO is buffered - write (x) (y) (); - - // rewind to file start - fc.seek (0); - - // read data back again, but swap destinations - read (y) (x); - - assert (y is 10); - assert (x is 20); - - fc.close(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/conduits/unifile.d --- a/tango/example/conduits/unifile.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ - -private import tango.io.Console, - tango.io.UnicodeFile; - -/******************************************************************************* - - Open a unicode file of an unknown encoding, and converts to UTF-8 - for console display. UnicodeFile is templated for char/wchar/dchar - target encodings - -*******************************************************************************/ - -void main (char[][] args) -{ - if (args.length is 2) - { - // open a file for reading - auto file = new UnicodeFile!(char) (args[1], Encoding.Unknown); - - // display on console - Cout (file.read).newline; - } - else - Cout ("usage is: unifile filename").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/console/buffered.d --- a/tango/example/console/buffered.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -private import tango.stdc.stdio; - -private import tango.io.Console; - -/******************************************************************************* - - Demonstrates buffered output. Console output (and Stdout etc) is - buffered, requiring a flush or newline to render on the console. - -*******************************************************************************/ - -void main (char[][] args) -{ - Cout ("how now "); - printf ("printf\n"); - Cout ("brown cow").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/console/hello.d --- a/tango/example/console/hello.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -/******************************************************************************* - - Hello World using tango.io - - This illustrates bare console output, with no fancy formatting. - - Console I/O in Tango is UTF-8 across both linux and Win32. The - conversion between various unicode representations is handled - by higher level constructs, such as Stdout and Stderr - - Note that Cerr is tied to the console error output, and Cin is - tied to the console input. - -*******************************************************************************/ - -import tango.io.Console; - -void main() -{ - Cout ("hello, sweetheart \u263a").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/console/stdout.d --- a/tango/example/console/stdout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -/******************************************************************************* - - Illustrates the basic console formatting. This is different than - the use of tango.io.Console, in that Stdout supports a variety of - printf-style formatting, and has unicode-conversion support - -*******************************************************************************/ - -private import tango.io.Stdout; - -void main() -{ - Stdout ("hello, sweetheart \u263a").newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/dsss.conf --- a/tango/example/dsss.conf Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -[concurrency/fiber_test.d] -[conduits/composite.d] -[conduits/filebubbler.d] -[conduits/filecat.d] -[conduits/filecopy.d] -[conduits/fileops.d] -[conduits/filepathname.d] -[conduits/filescan.d] -[conduits/filescanregex.d] -[conduits/lineio.d] -[conduits/mmap.d] -[conduits/paths.d] -[conduits/randomio.d] -[conduits/unifile.d] -[console/hello.d] -[console/stdout.d] -[logging/chainsaw.d] -[logging/logging.d] -[logging/multilog.d] -[manual/chapterStorage.d] -[networking/homepage.d] -[networking/httpget.d] -[networking/selector.d] -[networking/sockethello.d] -[networking/socketserver.d] -[system/arguments.d] -[system/localtime.d] -[system/normpath.d] -[system/process.d] -[text/formatalign.d] -[text/formatindex.d] -[text/formatspec.d] -[text/localetime.d] -[text/properties.d] -[text/token.d] diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/external/GlueFlectioned.d --- a/tango/example/external/GlueFlectioned.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -import tango.core.Exception; -import cn.kuehne.flectioned; - - -TracedExceptionInfo traceHandler( void* ptr = null ) -{ - class FlectionedTrace : - TracedExceptionInfo - { - this( void* ptr = null ) - { - if( ptr ) - m_trace = Trace.getTrace( cast(size_t) ptr ); - else - m_trace = Trace.getTrace(); - } - - int opApply( int delegate( inout char[] ) dg ) - { - int ret = 0; - foreach( t; m_trace ) - { - char[] buf = t.toString; - ret = dg( buf ); - if( ret != 0 ) - break; - } - return ret; - } - - private: - Trace[] m_trace; - } - - return new FlectionedTrace( ptr ); -} - - -static this() -{ - setTraceHandler( &traceHandler ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/jake-all.bat --- a/tango/example/jake-all.bat Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -@rem ########################################################################### -@rem # CONCURRENCY EXAMPLES -@rem ########################################################################### - -@jake concurrency\fiber_test.d -I.. -op -unittest - -@rem ########################################################################### -@rem # CONDUIT EXAMPLES -@rem ########################################################################### - -@jake conduits\composite.d -I.. -op -@jake conduits\filebubbler.d -I.. -op -@jake -c conduits\filebucket.d -I.. -op -@jake conduits\filecat.d -I.. -op -@jake conduits\filecopy.d -I.. -op -@jake conduits\filepathname.d -I.. -op -@jake conduits\filescan.d -I.. -op -@jake conduits\filescanregex.d -I.. -op -@jake conduits\lineio.d -I.. -op -@jake conduits\mmap.d -I.. -op -@jake conduits\randomio.d -I.. -op -@jake conduits\unifile.d -I.. -op - -@rem ########################################################################### -@rem # CONSOLE EXAMPLES -@rem ########################################################################### - -@jake console\hello.d -I.. -op -@jake console\stdout.d -I.. -op - -@rem ########################################################################### -@rem # LOGGING EXAMPLES -@rem ########################################################################### - -@jake logging\chainsaw.d -I.. -op -@jake logging\logging.d -I.. -op - -@rem ########################################################################### -@rem # REFERENCE MANUAL EXAMPLES -@rem ########################################################################### - -@jake manual\chapterStorage.d -I.. -op - -@rem ########################################################################### -@rem # NETWORKING EXAMPLES -@rem ########################################################################### - -@jake networking\homepage.d -I.. -op -@jake networking\httpget.d -I.. -op -@jake networking\sockethello.d -I.. -op -@jake networking\socketserver.d -I.. -op -@jake networking\selector.d -I.. -op - -@rem ########################################################################### -@rem # SYSTEM EXAMPLES -@rem ########################################################################### - -@jake system\argparser.d -I.. -op -@jake system\localtime.d -I.. -op -@jake system\normpath.d -I.. -op -@jake system\process.d -I.. -op - -@rem ########################################################################### -@rem # TEXT EXAMPLES -@rem ########################################################################### - -@jake text\formatalign.d -I.. -op -@jake text\formatindex.d -I.. -op -@jake text\formatspec.d -I.. -op -@jake text\localetime.d -I.. -op -@jake text\token.d -I.. -op - -@rem FINI - -@del *.map -@dir *.exe \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/linux.mak --- a/tango/example/linux.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -# Makefile to build the examples of tango for Linux -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make all -# Build all examples -# -# make -# Build a specified example -# make clean -# remove all build examples -# -# - -# Relative path to the tango include dir -# This is where the tango tree is located -TANGO_DIR = .. - -# The build tool executable from dsource.org/projects/build -BUILDTOOL = bud -BUILDOPTS = -noautoimport -op -clean -full -g -debug -I$(TANGO_DIR) - -.PHONY: all clean - -# Standard target -all : - -# networking/httpserver \ -# networking/servlets \ -# networking/servletserver\ - -SIMPLE_EXAMPLES =\ - concurrency/fiber_test \ - conduits/FileBucket \ - conduits/composite \ - conduits/filebubbler \ - conduits/filecat \ - conduits/filecopy \ - conduits/fileops \ - conduits/filepathname \ - conduits/filescan \ - conduits/filescanregex \ - conduits/lineio \ - conduits/mmap \ - conduits/randomio \ - conduits/unifile \ - console/hello \ - console/stdout \ - logging/chainsaw \ - logging/logging \ - networking/homepage \ - networking/httpget \ - networking/sockethello \ - networking/socketserver \ - system/argparser \ - system/localtime \ - system/normpath \ - system/process \ - networking/selector \ - text/formatalign \ - text/formatindex \ - text/formatspec \ - text/localetime \ - text/properties \ - text/token - -REFERENCE_EXAMPLES = \ - ./reference/chapter4 \ - ./reference/chapter11 - -$(SIMPLE_EXAMPLES) : % : %.d - @echo "Building : " $@ - $(BUILDTOOL) $< $(BUILDOPTS) -T$@ -unittest - -$(REFERENCE_EXAMPLES) : % : %.d - @echo "Building : " $@ - $(BUILDTOOL) $< $(BUILDOPTS) -T$@ - -all : $(SIMPLE_EXAMPLES) - -clean : - @echo "Removing all examples" - rm -f $(SIMPLE_EXAMPLES) $(REFERENCE_EXAMPLES) - rm -f conduits/random.bin - - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/logging/chainsaw.d --- a/tango/example/logging/chainsaw.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -import tango.core.Thread; - -import tango.util.log.Log, - tango.util.log.Log4Layout, - tango.util.log.SocketAppender; - -import tango.net.InternetAddress; - - -/******************************************************************************* - - Hooks up to Chainsaw for remote log capture. Chainsaw should be - configured to listen with an XMLSocketReciever - -*******************************************************************************/ - -void main() -{ - // get a logger to represent this module - auto logger = Log.getLogger ("example.chainsaw"); - - // hook up an appender for XML output - logger.addAppender (new SocketAppender (new InternetAddress("127.0.0.1", 4448), new Log4Layout)); - - while (true) - { - logger.info ("Hello Chainsaw!"); - Thread.sleep (1.0); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/logging/context.d --- a/tango/example/logging/context.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,322 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Stonecobra. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2007 - - author: stonecobra - -*******************************************************************************/ - -module context; - -import tango.core.Thread, - tango.util.log.Log, - tango.util.log.Event, - tango.util.log.EventLayout, - tango.util.log.ConsoleAppender; - -import tango.util.log.model.IHierarchy; - -/******************************************************************************* - - Allows the dynamic setting of log levels on a per-thread basis. - Imagine that a user request comes into your production threaded - server. You can't afford to turn logging up to trace for the sake - of debugging this one users problem, but you also can't afford to - find the problem and fix it. So now you just set the override log - level to TRACE for the thread the user is on, and you get full trace - output for only that user. - -*******************************************************************************/ - -class ThreadLocalDiagnosticContext : IHierarchy.Context -{ - private ThreadLocal!(DCData) dcData; - private char[128] tmp; - - /*********************************************************************** - - ***********************************************************************/ - - public this() - { - dcData = new ThreadLocal!(DCData); - } - - /*********************************************************************** - - set the 'diagnostic' Level for logging. This overrides - the Level in the current Logger. The default level starts - at NONE, so as not to modify the behavior of existing clients - of tango.util.log - - ***********************************************************************/ - - void setLevel (ILevel.Level level) - { - auto data = dcData.val; - data.level = level; - dcData.val = data; - } - - /*********************************************************************** - - All log appends will be checked against this to see if a - log level needs to be temporarily adjusted. - - ***********************************************************************/ - - bool isEnabled (ILevel.Level setting, ILevel.Level level = ILevel.Level.Trace) - { - return level >= setting || level >= dcData.val.level; - } - - /*********************************************************************** - - Return the label to use for the current log message. Usually - called by the Layout. This implementation returns "{}". - - ***********************************************************************/ - - char[] label () - { - return dcData.val.getLabel; - } - - /*********************************************************************** - - Push another string into the 'stack'. This strings will be - appened together when getLabel is called. - - ***********************************************************************/ - - void push (char[] label) - { - auto data = dcData.val; - data.push(label); - dcData.val = data; - } - - /*********************************************************************** - - pop the current label off the stack. - - ***********************************************************************/ - - void pop () - { - auto data = dcData.val; - data.pop; - dcData.val = data; - } - - /*********************************************************************** - - Clear the label stack. - - ***********************************************************************/ - - void clear() - { - auto data = dcData.val; - data.clear; - dcData.val = data; - } -} - - -/******************************************************************************* - - The thread locally stored struct to hold the logging level and - the label stack. - -*******************************************************************************/ - -private struct DCData { - - ILevel.Level level = ILevel.Level.None; - char[][8] stack; - bool shouldUpdate = true; - int stackIndex = 0; - uint labelLength; - char[256] labelContent; - - - char[] getLabel() { - if (shouldUpdate) { - labelLength = 0; - append(" {"); - for (int i = 0; i < stackIndex; i++) { - append(stack[i]); - if (i < stackIndex - 1) { - append(" "); - } - } - append("}"); - shouldUpdate = false; - } - return labelContent[0..labelLength]; - } - - void append(char[] x) { - uint addition = x.length; - uint newLength = labelLength + x.length; - - if (newLength < labelContent.length) - { - labelContent [labelLength..newLength] = x[0..addition]; - labelLength = newLength; - } - } - - void push(char[] label) { - shouldUpdate = true; - stack[stackIndex] = label.dup; - stackIndex++; - } - - void pop() { - shouldUpdate = true; - if (stackIndex > 0) { - stack[stackIndex] = null; - stackIndex--; - } - } - - void clear() { - shouldUpdate = true; - for (int i = 0; i < stack.length; i++) { - stack[i] = null; - } - } -} - - -/******************************************************************************* - - Simple console appender that counts the number of log lines it - has written. - -*******************************************************************************/ - -class TestingConsoleAppender : ConsoleAppender { - - int events = 0; - - this (EventLayout layout = null) - { - super(layout); - } - - override void append (Event event) - { - events++; - super.append(event); - } -} - - -/******************************************************************************* - - Testing harness for the DiagnosticContext functionality. - -*******************************************************************************/ - -void main(char[][] args) -{ - //set up our appender that counts the log output. This is the configuration - //equivalent of importing tango.util.log.Configurator. - auto appender = new TestingConsoleAppender(new SimpleTimerLayout); - Log.getRootLogger.addAppender(appender); - - char[128] tmp = 0; - auto log = Log.getLogger("context"); - log.setLevel(log.Level.Info); - - //first test, use all defaults, validating it is working. None of the trace() - //calls should count in the test. - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test1 {}", i)); - log.trace(log.format(tmp, "test1 {}", i)); - } - if (appender.events !is 10) { - log.error(log.format(tmp, "events:{}", appender.events)); - throw new Exception("Incorrect Number of events in normal mode"); - } - - appender.events = 0; - - //test the thread local implementation without any threads, as a baseline. - //should be same result as test1 - auto context = new ThreadLocalDiagnosticContext; - Log.getHierarchy.context(context); - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test2 {}", i)); - log.trace(log.format(tmp, "test2 {}", i)); - } - if (appender.events !is 10) { - log.error(log.format(tmp, "events:{}", appender.events)); - throw new Exception("Incorrect Number of events in TLS single thread mode"); - } - - appender.events = 0; - - //test the thread local implementation without any threads, as a baseline. - //This should count all logging requests, because the DiagnosticContext has - //'overridden' the logging level on ALL loggers up to TRACE. - context.setLevel(log.Level.Trace); - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test3 {}", i)); - log.trace(log.format(tmp, "test3 {}", i)); - } - if (appender.events !is 20) { - log.error(log.format(tmp, "events:{}", appender.events)); - throw new Exception("Incorrect Number of events in TLS single thread mode with level set"); - } - - appender.events = 0; - - //test the thread local implementation without any threads, as a baseline. - context.setLevel(log.Level.None); - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test4 {}", i)); - log.trace(log.format(tmp, "test4 {}", i)); - } - if (appender.events !is 10) { - log.error(log.format(tmp, "events:{}", appender.events)); - throw new Exception("Incorrect Number of events in TLS single thread mode after level reset"); - } - - //Now test threading. set up a trace context in one thread, with a label, while - //keeping the second thread at the normal configuration. - appender.events = 0; - ThreadGroup tg = new ThreadGroup(); - tg.create({ - char[128] tmp = 0; - context.setLevel(log.Level.Trace); - context.push("specialthread"); - context.push("2ndlevel"); - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test5 {}", i)); - log.trace(log.format(tmp, "test5 {}", i)); - } - }); - tg.create({ - char[128] tmp = 0; - context.setLevel(log.Level.None); - for (int i=0;i < 10; i++) { - log.info(log.format(tmp, "test6 {}", i)); - log.trace(log.format(tmp, "test6 {}", i)); - } - }); - tg.joinAll(); - - if (appender.events !is 30) { - log.error(log.format(tmp, "events:{}", appender.events)); - throw new Exception("Incorrect Number of events in TLS multi thread mode"); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/logging/logging.d --- a/tango/example/logging/logging.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -/******************************************************************************* - - Shows how the basic functionality of Logger operates. - -*******************************************************************************/ - -private import tango.util.log.Log, - tango.util.log.Configurator; - -/******************************************************************************* - - Search for a set of prime numbers - -*******************************************************************************/ - -void compute (Logger log, uint max) - { - byte* feld; - int teste=1, - mom, - hits=0, - s=0, - e = 1; - int count; - char tmp[128] = void; - - void set (byte* f, uint x) - { - *(f+(x)/16) |= 1 << (((x)%16)/2); - } - - byte test (byte* f, uint x) - { - return cast(byte) (*(f+(x)/16) & (1 << (((x)%16)/2))); - } - - // information level - log.info (log.format (tmp, "Searching prime numbers up to {}", max)); - - feld = (new byte[max / 16 + 1]).ptr; - - // get milliseconds since application began - auto begin = log.runtime; - - while ((teste += 2) < max) - if (! test (feld, teste)) - { - if ((++hits & 0x0f) == 0) - // more information level - log.info (log.format (tmp, "found {}", hits)); - - for (mom=3*teste; mom < max; mom += teste<<1) - set (feld, mom); - } - - // get number of milliseconds we took to compute - auto period = log.runtime - begin; - - if (hits) - // more information - log.info (log.format (tmp, "{} prime numbers found in {} millsecs", hits, period)); - else - // a warning level - log.warn ("no prime numbers found"); - - // check to see if we're enabled for - // tracing before we expend a lot of effort - if (log.isEnabled (log.Level.Trace)) - { - e = max; - count = 0 - 2; - if (s % 2 is 0) - count++; - - while ((count+=2) < e) - // log trace information - if (! test (feld, count)) - log.trace (log.format (tmp, "prime found: {}", count)); - } -} - - -/******************************************************************************* - - Compute a bunch of prime numbers - -*******************************************************************************/ - -void main() -{ - // get a logger to represent this module. We could just as - // easily share a name with some other module(s) - auto log = Log.getLogger ("example.logging"); - try { - compute (log, 1000); - - } catch (Exception x) - { - // log the exception as an error - log.error ("Exception: " ~ x.toString); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/logging/multilog.d --- a/tango/example/logging/multilog.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -import tango.util.log.Log; -import tango.util.log.Log4Layout; -import tango.util.log.FileAppender; -import tango.util.log.ConsoleAppender; -import tango.util.log.RollingFileAppender; - -/******************************************************************************* - - Shows how to setup multiple appenders on logging tree - -*******************************************************************************/ - -void main () -{ - // set default logging level at the root - auto log = Log.getRootLogger; - log.setLevel (log.Level.Trace); - - // 10 logs, all with 10 mbs each - log.addAppender (new RollingFileAppender("rolling.log", 9, 1024*1024*10)); - - // a single file appender, with an XML layout - log.addAppender (new FileAppender ("single.log", new Log4Layout)); - - // console appender - log.addAppender (new ConsoleAppender); - - // log to all - log.trace ("three-way logging"); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/manual/chapterStorage.d --- a/tango/example/manual/chapterStorage.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,237 +0,0 @@ -module example.reference.chapter11; - -import tango.util.collection.HashMap; -import tango.util.collection.ArrayBag; -import tango.util.collection.LinkSeq; -import tango.util.collection.CircularSeq; -import tango.util.collection.ArraySeq; -import tango.util.collection.TreeBag; -import tango.util.collection.iterator.FilteringIterator; -import tango.util.collection.iterator.InterleavingIterator; - -import tango.io.Stdout; -import tango.core.Exception; - -import tango.util.collection.model.Comparator; -import tango.util.collection.impl.BagCollection; -import tango.util.collection.impl.SeqCollection; -import Ascii = tango.text.Ascii; - -void linkedListExample(){ - Stdout.format( "linkedListExample" ).newline; - alias LinkSeq!(char[]) StrList; - StrList lst = new StrList(); - - lst.append( "value1" ); - lst.append( "value2" ); - lst.append( "value3" ); - - auto it = lst.elements(); - // The call to .more gives true, if there are more elements - // and switches the iterator to the next one if available. - while( it.more ){ - char[] item_value = it.get; - Stdout.format( "Value:{0}", item_value ).newline; - } -} - -void hashMapExample(){ - Stdout.format( "hashMapExample" ).newline; - alias HashMap!(char[], char[]) StrStrMap; - StrStrMap map = new StrStrMap(); - map.add( "key1", "value1" ); - char[] key = "key1"; - Stdout.format( "Key: {0}, Value:{1}", key, map.get( key )).newline; - - - auto it = map.keys(); - // The call to .more gives true, if there are more elements - // and switches the iterator to the next one if available. - while( it.more ){ - char[] item_key = void; - char[] item_value = it.get( item_key ); // only for maps, the key is returns via inout - Stdout.format( "Key: {0}, Value:{1}", item_key, item_value ).newline; - } -} - -void testComparator(){ - char[][] result; - - // Create and fill the containers - auto nameSet = new TreeBag!(char[])( null, new class() Comparator!(char[]){ - int compare( char[] first, char[] second ){ - return Ascii.icompare( first, second ); - } - }); - - nameSet.addIf( "Alice" ); - nameSet.addIf( "Bob" ); - nameSet.addIf( "aliCe" ); - - // use foreach to iterate over the container - foreach ( char[] i; nameSet ) - result ~= i; - foreach( char[] i; result ) Stdout.format( "{0} ", i ); - Stdout.newline; - - // test the result - assert( result == [ "Alice", "Bob" ], "testIterator" ); -} - -void testSreener(){ - int[] result; - - // Create and fill the containers - auto ratioSamples = new ArraySeq!(float)( (float v){ - return v >= 0.0f && v < 1.0f; - }); - - ratioSamples.append( 0.0f ); - ratioSamples.append( 0.5f ); - ratioSamples.append( 0.99999f ); - // try to insert a value that is not allowed - try{ - ratioSamples.append( 1.0f ); - // will never get here - assert( false ); - } catch( IllegalElementException e ){ - } -} - - -void testForeach(){ - int[] result; - - // Create and fill the containers - auto l1 = new CircularSeq!(int); - for( int i = 0; i < 6; i+=2 ){ - l1.append( i ); - } - - // use foreach to iterate over the container - foreach ( int i; l1 ) - result ~= i; -// foreach_reverse ( int i; l1 ) -// result ~= i; - - // test the result - assert( result == [ 0, 2, 4 ], "testIterator" ); -} - -void testIterator(){ - int[] result; - - // Create and fill the containers - auto l1 = new LinkSeq!(int); - for( int i = 0; i < 6; i+=2 ){ - l1.append( i ); - } - - // define the Iterator - auto it = l1.elements(); - - // use the Iterator to iterate over the container - while (it.more()) - result ~= it.get(); - - // test the result - assert( result == [ 0, 2, 4 ], "testIterator" ); -} - -void testFilteringIterator(){ - int[] result; - alias ArrayBag!(int) IntBag; - - // Create and fill the container - auto ib = new IntBag; - for( int i = 0; i < 20; i++ ){ - ib.add( i ); - } - - // define the FilteringIterator with a function literal - auto it = new FilteringIterator!(int)( ib.elements(), (int i){ - return i >= 3 && i < 7; - }); - - // use the Iterator with the more()/get() pattern - while (it.more()) - result ~= it.get(); - - // test the result - assert( result == [ 3, 4, 5, 6 ], "testFilteringIterator" ); - -} - -void testFilteringIteratorRemove(){ - int[] result; - - // Create and fill the container - auto container = new LinkSeq!(int); - for( int i = 0; i < 10; i++ ){ - container.append( i ); - } - - // 1. Build a list of elements to delete - auto dellist = new LinkSeq!(int); - foreach( int i; container ){ - if( i < 3 || i >= 7 ){ - // container.remove( i ); /* NOT POSSIBLE */ - dellist.append( i ); - } - } - // 2. Iterate over this deletion list and - // delete the items in the original container. - foreach( int i; dellist ){ - container.remove( i ); - } - - foreach ( int i; container ) - result ~= i; - - // test the result - assert( result == [ 3, 4, 5, 6 ], "testFilteringIterator" ); - -} - -void testInterleavingIterator(){ - int[] result; - - // Create and fill the containers - auto l1 = new LinkSeq!(int); - auto l2 = new ArraySeq!(int); - for( int i = 0; i < 6; i+=2 ){ - l1.append( i ); - l2.append( i+1 ); - } - - // define the InterleavingIterator - auto it = new InterleavingIterator!(int)( l1.elements(), l2.elements() ); - - // use the InterleavingIterator to iterate over the container - while (it.more()) - result ~= it.get(); - - // test the result - assert( result == [ 0, 1, 2, 3, 4, 5 ], "testInterleavingIterator" ); -} - -// foreach( int i; result ) Stdout.format( "{0} ", i ); -// Stdout.newline; - -void main(){ - Stdout.format( "reference - Chapter 11 Example" ).newline; - hashMapExample(); - linkedListExample(); - - testSreener(); - testComparator(); - testForeach(); - testIterator(); - testFilteringIterator(); - testInterleavingIterator(); - testFilteringIteratorRemove(); - - Stdout.format( "=== End ===" ).newline; -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/networking/homepage.d --- a/tango/example/networking/homepage.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ - -private import tango.io.Console; - -private import tango.net.http.HttpClient, - tango.net.http.HttpHeaders; - -/******************************************************************************* - - Shows how to use HttpClient to retrieve content from the D website - -*******************************************************************************/ - -void main() -{ - auto client = new HttpClient (HttpClient.Get, "http://www.digitalmars.com/d/intro.html"); - - // open the client and get the input stream - auto input = client.open; - scope (exit) - client.close; - - // display returned content on console - if (client.isResponseOK) - Cout.stream.copy (input); - else - Cout ("failed to return the D home page"); - - // flush the console - Cout.newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/networking/httpget.d --- a/tango/example/networking/httpget.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -private import tango.io.Console; - -private import tango.net.http.HttpGet; - -/******************************************************************************* - - Read a page from a website, gathering the entire page before - returning any content. This illustrates a high-level approach - to retrieving web-content, whereas the homepage example shows - a somewhat lower-level approach. - - Note that this expects a fully qualified URL (with scheme), - such as "http://www.digitalmars.com/d/intro.html" - -*******************************************************************************/ - -void main (char[][] args) -{ - char[] url = (args.length is 2) ? args[1] : "http://www.digitalmars.com/d/intro.html"; - - // open a web-page for reading (see HttpPost for writing) - auto page = new HttpGet (url); - - // retrieve and flush display content - Cout (cast(char[]) page.read) (); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/networking/selector.d --- a/tango/example/networking/selector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,399 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -private -{ - version (Posix) - { - import tango.io.selector.PollSelector; - } - else version (linux) - { - import tango.io.selector.EpollSelector; - import tango.sys.linux.linux; - } - - import tango.io.selector.model.ISelector; - import tango.io.selector.Selector; - import tango.io.selector.SelectSelector; - import tango.io.selector.SelectorException; - import tango.io.Conduit; - import tango.net.Socket; - import tango.net.SocketConduit; - import tango.net.ServerSocket; - import tango.time.Clock; - import tango.util.log.Log; - import tango.util.log.ConsoleAppender; - import tango.util.log.DateLayout; - import tango.text.convert.Sprint; - import tango.core.Exception; - import tango.core.Thread; - import tango.sys.Common; - import tango.stdc.errno; -} - - -const uint HANDLE_COUNT = 4; -const uint EVENT_COUNT = 4; -const uint LOOP_COUNT = 50000; -const char[] SERVER_ADDR = "127.0.0.1"; -const ushort SERVER_PORT = 4000; -const uint MAX_LENGTH = 16; - -int main(char[][] args) -{ - Logger log = Log.getLogger("selector"); - Sprint!(char) sprint = new Sprint!(char)(256); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - ISelector selector; - - for (int i = 0; i < 1; i++) - { - // Testing the SelectSelector - log.info(sprint("Pass {0}: Testing the select-based selector", i + 1)); - selector = new SelectSelector(); - testSelector(selector); - } - - // Testing the PollSelector - version (Posix) - { - for (int i = 0; i < 1; i++) - { - log.info(sprint("Pass {0}: Testing the poll-based selector", i + 1)); - selector = new PollSelector(); - testSelector(selector); - } - } - - // Testing the EpollSelector - version (linux) - { - for (int i = 0; i < 1; i++) - { - log.info(sprint("Pass {0}: Testing the epoll-based selector", i + 1)); - selector = new EpollSelector(); - testSelector(selector); - } - } - - return 0; -} - - -/** - * Create a server socket and run the Selector on it. - */ -void testSelector(ISelector selector) -{ - Logger log = Log.getLogger("selector.server"); - Sprint!(char) sprint = new Sprint!(char)(512); - - uint connectCount = 0; - uint receiveCount = 0; - uint sendCount = 0; - uint failedConnectCount = 0; - uint failedReceiveCount = 0; - uint failedSendCount = 0; - uint closeCount = 0; - uint errorCount = 0; - Time start = Clock.now; - Thread clientThread; - - selector.open(HANDLE_COUNT, EVENT_COUNT); - - clientThread = new Thread(&clientThreadFunc); - clientThread.start(); - - try - { - TimeSpan timeout = TimeSpan.seconds(1); - InternetAddress addr = new InternetAddress(SERVER_ADDR, SERVER_PORT); - ServerSocket serverSocket = new ServerSocket(addr, 5); - SocketConduit clientSocket; - char[MAX_LENGTH] buffer; - int eventCount; - uint count; - int i = 0; - - debug (selector) - log.trace("Registering server socket to Selector"); - - selector.register(serverSocket, Event.Read); - - while (true) - { - debug (selector) - log.trace(sprint("[{0}] Waiting for events from Selector", i)); - - eventCount = selector.select(timeout); - - debug (selector) - log.trace(sprint("[{0}] {1} events received from Selector", i, eventCount)); - - if (eventCount > 0) - { - foreach (SelectionKey selectionKey; selector.selectedSet()) - { - debug (selector) - log.trace(sprint("[{0}] Event mask for socket {1} is 0x{2:x4}", - i, cast(int) selectionKey.conduit.fileHandle(), - cast(uint) selectionKey.events)); - - if (selectionKey.isReadable()) - { - if (selectionKey.conduit is serverSocket) - { - debug (selector) - log.trace(sprint("[{0}] New connection from client", i)); - - clientSocket = serverSocket.accept(); - if (clientSocket !is null) - { - selector.register(clientSocket, Event.Read); - connectCount++; - } - else - { - debug (selector) - log.trace(sprint("[{0}] New connection attempt failed", i)); - failedConnectCount++; - } - } - else - { - // Reading from a client socket - debug (selector) - log.trace(sprint("[{0}] Receiving message from client", i)); - - count = (cast(SocketConduit) selectionKey.conduit).read(buffer); - if (count != IConduit.Eof) - { - debug (selector) - log.trace(sprint("[{0}] Received {1} from client ({2} bytes)", - i, buffer[0..count], count)); - selector.reregister(selectionKey.conduit, Event.Write); - receiveCount++; - } - else - { - debug (selector) - log.trace(sprint("[{0}] Handle {1} was closed; removing it from Selector", - i, cast(int) selectionKey.conduit.fileHandle())); - selector.unregister(selectionKey.conduit); - (cast(SocketConduit) selectionKey.conduit).close(); - failedReceiveCount++; - continue; - } - } - } - - if (selectionKey.isWritable()) - { - debug (selector) - log.trace(sprint("[{0}] Sending PONG to client", i)); - - count = (cast(SocketConduit) selectionKey.conduit).write("PONG"); - if (count != IConduit.Eof) - { - debug (selector) - log.trace(sprint("[{0}] Sent PONG to client ({1} bytes)", i, count)); - - selector.reregister(selectionKey.conduit, Event.Read); - sendCount++; - } - else - { - debug (selector) - log.trace(sprint("[{0}] Handle {1} was closed; removing it from Selector", - i, selectionKey.conduit.fileHandle())); - selector.unregister(selectionKey.conduit); - (cast(SocketConduit) selectionKey.conduit).close(); - failedSendCount++; - continue; - } - } - - if (selectionKey.isError() || selectionKey.isHangup() || selectionKey.isInvalidHandle()) - { - char[] status; - - if (selectionKey.isHangup()) - { - closeCount++; - status = "Hangup"; - } - else - { - errorCount++; - if (selectionKey.isInvalidHandle()) - status = "Invalid request"; - else - status = "Error"; - } - - debug (selector) - { - log.trace(sprint("[{0}] {1} in handle {2} from Selector", - i, status, cast(int) selectionKey.conduit.fileHandle())); - - log.trace(sprint("[{0}] Unregistering handle {1} from Selector", - i, cast(int) selectionKey.conduit.fileHandle())); - } - selector.unregister(selectionKey.conduit); - (cast(Conduit) selectionKey.conduit).close(); - - if (selectionKey.conduit !is serverSocket) - { - continue; - } - else - { - break; - } - } - } - } - else - { - debug (selector) - log.trace(sprint("[{0}] No more pending events in Selector; aborting", i)); - break; - } - i++; - - // Thread.sleep(1.0); - /* - if (i % 100 == 0) - { - fullCollect(); - getStats(gc) - } - */ - } - - serverSocket.socket().detach; - } - catch (SelectorException e) - { - log.error(sprint("Selector exception caught:\n{0}", e.toString())); - } - catch (Exception e) - { - log.error(sprint("Exception caught:\n{0}", e.toString())); - } - - log.info(sprint("Success: connect={0}; recv={1}; send={2}; close={3}", - connectCount, receiveCount, sendCount, closeCount)); - log.info(sprint("Failure: connect={0}, recv={1}; send={2}; error={3}", - failedConnectCount, failedReceiveCount, failedSendCount, errorCount)); - - log.info(sprint("Total time: {0} ms", cast(uint) (Clock.now - start).millis)); - - clientThread.join(); - - selector.close; -} - - -/** - * Thread that creates a client socket and sends messages to the server socket. - */ -void clientThreadFunc() -{ - Logger log = Log.getLogger("selector.client"); - Sprint!(char) sprint = new Sprint!(char)(256); - SocketConduit socket = new SocketConduit(); - - Thread.sleep(0.010); // 10 milliseconds - - try - { - InternetAddress addr = new InternetAddress(SERVER_ADDR, SERVER_PORT); - char[MAX_LENGTH] buffer; - uint count; - int i; - - debug (selector) - log.trace(sprint("[{0}] Connecting to server", i)); - - socket.connect(addr); - - for (i = 1; i <= LOOP_COUNT; i++) - { - debug (selector) - log.trace(sprint("[{0}] Sending PING to server", i)); - - while (true) - { - try - { - count = socket.write("PING"); - break; - } - catch (SocketException e) - { - if (errno != EINTR) - throw e; - } - } - if (count != IConduit.Eof) - { - debug (selector) - { - log.trace(sprint("[{0}] Sent PING to server ({1} bytes)", i, count)); - - log.trace(sprint("[{0}] Receiving message from server", i)); - } - while (true) - { - try - { - count = socket.read(buffer); - break; - } - catch (SocketException e) - { - if (errno != EINTR) - throw e; - } - } - if (count != IConduit.Eof) - { - debug (selector) - log.trace(sprint("[{0}] Received {1} from server ({2} bytes)", - i, buffer[0..count], count)); - } - else - { - debug (selector) - log.trace(sprint("[{0}] Handle was closed; aborting", - i, socket.fileHandle())); - break; - } - } - else - { - debug (selector) - log.trace(sprint("[{0}] Handle {1} was closed; aborting", - i, socket.fileHandle())); - break; - } - } - socket.shutdown(); - socket.close(); - } - catch (Exception e) - { - log.error(sprint("Exception caught:\n{0}", e.toString())); - } - debug (selector) - log.trace("Leaving thread"); - - return 0; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/networking/sockethello.d --- a/tango/example/networking/sockethello.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/******************************************************************************* - - Shows how to create a basic socket client, and how to converse with - a remote server. The server must be running for this to succeed - -*******************************************************************************/ - -private import tango.io.Console; - -private import tango.net.SocketConduit, - tango.net.InternetAddress; - -void main() -{ - // make a connection request to the server - auto request = new SocketConduit; - request.connect (new InternetAddress ("localhost", 8080)); - request.output.write ("hello\n"); - - // wait for response (there is an optional timeout supported) - char[64] response; - auto size = request.input.read (response); - - // close socket - request.close; - - // display server response - Cout (response[0..size]).newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/networking/socketserver.d --- a/tango/example/networking/socketserver.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/******************************************************************************* - - Shows how to create a basic socket server, and how to talk to - it from a socket client. Note that both the server and client - are entirely simplistic, and therefore this is for illustration - purposes only. See HttpServer for something more robust. - -*******************************************************************************/ - -private import tango.core.Thread; - -private import tango.io.Console; - -private import tango.net.ServerSocket, - tango.net.SocketConduit; - -/******************************************************************************* - - Create a socket server, and have it respond to a request - -*******************************************************************************/ - -void main() -{ - const int port = 8080; - - // thread body for socket-listener - void run() - { - auto server = new ServerSocket (new InternetAddress(port)); - - // wait for requests - auto request = server.accept; - - // write a response - request.output.write ("server replies 'hello'"); - } - - // start server in a separate thread, and wait for it to start - (new Thread (&run)).start; - Thread.sleep (0.250); - - // make a connection request to the server - auto request = new SocketConduit; - request.connect (new InternetAddress("localhost", port)); - - // wait for and display response (there is an optional timeout) - char[64] response; - auto len = request.input.read (response); - Cout (response[0..len]).newline; - - request.close; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/synchronization/barrier.d --- a/tango/example/synchronization/barrier.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas - Converted to use core.sync by Sean Kelly -*******************************************************************************/ - -private import tango.core.sync.Barrier; -private import tango.core.sync.Mutex; -private import tango.core.Exception; -private import tango.core.Thread; -private import tango.io.Stdout; -private import tango.text.convert.Integer; -debug (barrier) -{ - private import tango.util.log.Log; - private import tango.util.log.ConsoleAppender; - private import tango.util.log.DateLayout; -} - - -/** - * Example program for the tango.core.sync.Barrier module. - */ -void main(char[][] args) -{ - const uint MaxThreadCount = 100; - const uint LoopsPerThread = 10000; - - debug (barrier) - { - Logger log = Log.getLogger("barrier"); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - log.info("Barrier test"); - } - - Barrier barrier = new Barrier(MaxThreadCount); - Mutex mutex = new Mutex(); - uint count = 0; - uint correctCount = 0; - - void barrierTestThread() - { - debug (barrier) - { - Logger log = Log.getLogger("barrier." ~ Thread.getThis().name()); - - log.trace("Starting thread"); - } - - try - { - for (uint i; i < LoopsPerThread; ++i) - { - // 'count' is a resource shared by multiple threads, so we must - // acquire the mutex before modifying it. - synchronized (mutex) - { - // debug (barrier) - // log.trace("Acquired mutex"); - count++; - // debug (barrier) - // log.trace("Releasing mutex"); - } - } - - // We wait for all the threads to finish counting. - debug (barrier) - log.trace("Waiting on barrier"); - barrier.wait(); - debug (barrier) - log.trace("Barrier was opened"); - - // We make sure that all the threads exited the barrier after - // *all* of them had finished counting. - synchronized (mutex) - { - // debug (barrier) - // log.trace("Acquired mutex"); - if (count == MaxThreadCount * LoopsPerThread) - { - ++correctCount; - } - // debug (barrier) - // log.trace("Releasing mutex"); - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in Barrier test thread {0}:\n{1}\n", - Thread.getThis().name, e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught in Barrier test thread {0}:\n{1}\n", - Thread.getThis().name, e.toString()); - } - } - - ThreadGroup group = new ThreadGroup(); - Thread thread; - char[10] tmp; - - for (uint i = 0; i < MaxThreadCount; ++i) - { - thread = new Thread(&barrierTestThread); - thread.name = "thread-" ~ format(tmp, i); - - group.add(thread); - debug (barrier) - log.trace("Created thread " ~ thread.name); - thread.start(); - } - - debug (barrier) - log.trace("Waiting for threads to finish"); - group.joinAll(); - - if (count == MaxThreadCount * LoopsPerThread) - { - debug (barrier) - log.info("The Barrier test was successful"); - } - else - { - debug (barrier) - { - log.error("The Barrier is not working properly: the counter has an incorrect value"); - assert(false); - } - else - { - assert(false, "The Barrier is not working properly: the counter has an incorrect value"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/synchronization/condition.d --- a/tango/example/synchronization/condition.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,307 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas - Converted to use core.sync by Sean Kelly -*******************************************************************************/ - -private import tango.core.sync.Condition; -private import tango.core.Exception; -private import tango.core.Thread; -private import tango.text.convert.Integer; -private import tango.io.Stdout; -debug (condition) -{ - private import tango.util.log.Log; - private import tango.util.log.ConsoleAppender; - private import tango.util.log.DateLayout; -} - - -void main(char[][] args) -{ - debug (condition) - { - Logger log = Log.getLogger("condition"); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - log.info("Condition test"); - } - - testNotifyOne(); - testNotifyAll(); -} - - -/** - * Test for Condition.notify(). - */ -void testNotifyOne() -{ - debug (condition) - { - Logger log = Log.getLogger("condition.notify-one"); - } - - scope Mutex mutex = new Mutex(); - scope Condition cond = new Condition(mutex); - int waiting = 0; - Thread thread; - - void notifyOneTestThread() - { - debug (condition) - { - Logger log = Log.getLogger("condition.notify-one." ~ Thread.getThis().name()); - - log.trace("Starting thread"); - } - - try - { - synchronized (mutex) - { - debug (condition) - log.trace("Acquired mutex"); - - scope(exit) - { - debug (condition) - log.trace("Releasing mutex"); - } - - waiting++; - - while (waiting != 2) - { - debug (condition) - log.trace("Waiting on condition variable"); - cond.wait(); - } - - debug (condition) - log.trace("Condition variable was signaled"); - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in Condition test thread {0}:\n{1}", - Thread.getThis().name(), e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught in Condition test thread {0}:\n{1}", - Thread.getThis().name(), e.toString()); - } - debug (condition) - log.trace("Exiting thread"); - } - - thread = new Thread(¬ifyOneTestThread); - thread.name = "thread-1"; - - debug (condition) - log.trace("Created thread " ~ thread.name); - thread.start(); - - try - { - // Poor man's barrier: wait until the other thread is waiting. - while (true) - { - synchronized (mutex) - { - if (waiting != 1) - { - Thread.yield(); - } - else - { - break; - } - } - } - - synchronized (mutex) - { - debug (condition) - log.trace("Acquired mutex"); - - waiting++; - - debug (condition) - log.trace("Notifying test thread"); - cond.notify(); - - debug (condition) - log.trace("Releasing mutex"); - } - - thread.join(); - - if (waiting == 2) - { - debug (condition) - log.info("The Condition notification test to one thread was successful"); - } - else - { - debug (condition) - { - log.error("The condition variable notification to one thread is not working"); - assert(false); - } - else - { - assert(false, "The condition variable notification to one thread is not working"); - } - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in main thread:\n{0}", e.toString()); - } -} - - -/** - * Test for Condition.notifyAll(). - */ -void testNotifyAll() -{ - const uint MaxThreadCount = 10; - - debug (condition) - { - Logger log = Log.getLogger("condition.notify-all"); - } - - scope Mutex mutex = new Mutex(); - scope Condition cond = new Condition(mutex); - int waiting = 0; - - /** - * This thread waits for a notification from the main thread. - */ - void notifyAllTestThread() - { - debug (condition) - { - Logger log = Log.getLogger("condition.notify-all." ~ Thread.getThis().name()); - - log.trace("Starting thread"); - } - - try - { - synchronized (mutex) - { - debug (condition) - log.trace("Acquired mutex"); - - waiting++; - - while (waiting != MaxThreadCount + 1) - { - debug (condition) - log.trace("Waiting on condition variable"); - cond.wait(); - } - - debug (condition) - log.trace("Condition variable was signaled"); - - debug (condition) - log.trace("Releasing mutex"); - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in Condition test thread {0}:\n{1}", - Thread.getThis().name(), e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught in Condition test thread {0}:\n{1}", - Thread.getThis().name(), e.toString()); - } - debug (condition) - log.trace("Exiting thread"); - } - - ThreadGroup group = new ThreadGroup(); - Thread thread; - char[10] tmp; - - for (uint i = 0; i < MaxThreadCount; ++i) - { - thread = new Thread(¬ifyAllTestThread); - thread.name = "thread-" ~ format(tmp, i); - - group.add(thread); - debug (condition) - log.trace("Created thread " ~ thread.name); - thread.start(); - } - - try - { - // Poor man's barrier: wait until all the threads are waiting. - while (true) - { - synchronized (mutex) - { - if (waiting != MaxThreadCount) - { - Thread.yield(); - } - else - { - break; - } - } - } - - synchronized (mutex) - { - debug (condition) - log.trace("Acquired mutex"); - - waiting++; - - debug (condition) - log.trace("Notifying all threads"); - cond.notifyAll(); - - debug (condition) - log.trace("Releasing mutex"); - } - - debug (condition) - log.trace("Waiting for threads to finish"); - group.joinAll(); - - if (waiting == MaxThreadCount + 1) - { - debug (condition) - log.info("The Condition notification test to many threads was successful"); - } - else - { - debug (condition) - { - log.error("The condition variable notification to many threads is not working"); - assert(false); - } - else - { - assert(false, "The condition variable notification to many threads is not working"); - } - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in main thread:\n{0}", e.toString()); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/synchronization/mutex.d --- a/tango/example/synchronization/mutex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas - Converted to use core.sync by Sean Kelly -*******************************************************************************/ - -private import tango.core.sync.Mutex; -private import tango.core.Exception; -private import tango.core.Thread; -private import tango.io.Stdout; -private import tango.text.convert.Integer; -debug (mutex) -{ - private import tango.util.log.Log; - private import tango.util.log.ConsoleAppender; - private import tango.util.log.DateLayout; -} - - -/** - * Example program for the tango.core.sync.Mutex module. - */ -void main(char[][] args) -{ - debug (mutex) - { - Logger log = Log.getLogger("mutex"); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - log.info("Mutex test"); - } - - testNonRecursive(); - testLocking(); - testRecursive(); -} - -/** - * Test that non-recursive mutexes actually do what they're supposed to do. - * - * Remarks: - * Windows only supports recursive mutexes. - */ -void testNonRecursive() -{ - version (Posix) - { - debug (mutex) - { - Logger log = Log.getLogger("mutex.non-recursive"); - } - - Mutex mutex = new Mutex(Mutex.Type.NonRecursive); - bool couldLock; - - try - { - mutex.lock(); - debug (mutex) - log.trace("Acquired mutex"); - couldLock = mutex.tryLock(); - if (couldLock) - { - debug (mutex) - { - log.trace("Re-acquired mutex"); - log.trace("Releasing mutex"); - } - mutex.unlock(); - } - else - { - debug (mutex) - log.trace("Re-acquiring the mutex failed"); - } - debug (mutex) - log.trace("Releasing mutex"); - mutex.unlock(); - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught when testing non-recursive mutexes:\n{0}\n", e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught when testing non-recursive mutexes:\n{0}\n", e.toString()); - } - - if (!couldLock) - { - debug (mutex) - log.info("The non-recursive Mutex test was successful"); - } - else - { - debug (mutex) - { - log.error("Non-recursive mutexes are not working: " - "Mutex.tryAcquire() did not fail on an already acquired mutex"); - assert(false); - } - else - { - assert(false, "Non-recursive mutexes are not working: " - "Mutex.tryAcquire() did not fail on an already acquired mutex"); - } - } - } -} - -/** - * Create several threads that acquire and release a mutex several times. - */ -void testLocking() -{ - const uint MaxThreadCount = 10; - const uint LoopsPerThread = 1000; - - debug (mutex) - { - Logger log = Log.getLogger("mutex.locking"); - } - - Mutex mutex = new Mutex(); - uint lockCount = 0; - - void mutexLockingThread() - { - try - { - for (uint i; i < LoopsPerThread; i++) - { - synchronized (mutex) - { - lockCount++; - } - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught inside mutex testing thread:\n{0}\n", e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught inside mutex testing thread:\n{0}\n", e.toString()); - } - } - - ThreadGroup group = new ThreadGroup(); - Thread thread; - char[10] tmp; - - for (uint i = 0; i < MaxThreadCount; i++) - { - thread = new Thread(&mutexLockingThread); - thread.name = "thread-" ~ format(tmp, i); - - debug (mutex) - log.trace("Created thread " ~ thread.name); - thread.start(); - - group.add(thread); - } - - debug (mutex) - log.trace("Waiting for threads to finish"); - group.joinAll(); - - if (lockCount == MaxThreadCount * LoopsPerThread) - { - debug (mutex) - log.info("The Mutex locking test was successful"); - } - else - { - debug (mutex) - { - log.error("Mutex locking is not working properly: " - "the number of times the mutex was acquired is incorrect"); - assert(false); - } - else - { - assert(false,"Mutex locking is not working properly: " - "the number of times the mutex was acquired is incorrect"); - } - } -} - -/** - * Test that recursive mutexes actually do what they're supposed to do. - */ -void testRecursive() -{ - const uint LoopsPerThread = 1000; - - debug (mutex) - { - Logger log = Log.getLogger("mutex.recursive"); - } - - Mutex mutex = new Mutex; - uint lockCount = 0; - - try - { - for (uint i = 0; i < LoopsPerThread; i++) - { - mutex.lock(); - lockCount++; - } - } - catch (SyncException e) - { - Stderr.formatln("Sync exception caught in recursive mutex test:\n{0}\n", e.toString()); - } - catch (Exception e) - { - Stderr.formatln("Unexpected exception caught in recursive mutex test:\n{0}\n", e.toString()); - } - - for (uint i = 0; i < lockCount; i++) - { - mutex.unlock(); - } - - if (lockCount == LoopsPerThread) - { - debug (mutex) - log.info("The recursive Mutex test was successful"); - } - else - { - debug (mutex) - { - log.error("Recursive mutexes are not working: " - "the number of times the mutex was acquired is incorrect"); - assert(false); - } - else - { - assert(false, "Recursive mutexes are not working: " - "the number of times the mutex was acquired is incorrect"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/synchronization/readwritemutex.d --- a/tango/example/synchronization/readwritemutex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas - Converted to use core.sync by Sean Kelly -*******************************************************************************/ - -private import tango.core.sync.ReadWriteMutex; -private import tango.core.sync.Mutex; -private import tango.core.Thread; -private import tango.text.convert.Integer; -debug (readwritemutex) -{ - private import tango.util.log.Log; - private import tango.util.log.ConsoleAppender; - private import tango.util.log.DateLayout; -} - - -/** - * Example program for the tango.core.sync.ReadWriteMutex module. - */ -void main(char[][] args) -{ - const uint ReaderThreads = 100; - const uint WriterThreads = 20; - const uint LoopsPerReader = 10000; - const uint LoopsPerWriter = 1000; - const uint CounterIncrement = 3; - - debug (readwritemutex) - { - Logger log = Log.getLogger("readwritemutex"); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - log.info("ReadWriteMutex test"); - } - - ReadWriteMutex rwlock = new ReadWriteMutex(); - Mutex mutex = new Mutex(); - uint readCount = 0; - uint passed = 0; - uint failed = 0; - - void mutexReaderThread() - { - debug (readwritemutex) - { - Logger log = Log.getLogger("readwritemutex." ~ Thread.getThis().name()); - - log.trace("Starting reader thread"); - } - - for (uint i = 0; i < LoopsPerReader; ++i) - { - // All the reader threads acquire the mutex for reading and when they are - // all done - synchronized (rwlock.reader) - { - for (uint j = 0; j < CounterIncrement; ++j) - { - synchronized (mutex) - { - ++readCount; - } - } - } - } - } - - void mutexWriterThread() - { - debug (readwritemutex) - { - Logger log = Log.getLogger("readwritemutex." ~ Thread.getThis().name()); - - log.trace("Starting writer thread"); - } - - for (uint i = 0; i < LoopsPerWriter; ++i) - { - synchronized (rwlock.writer) - { - synchronized (mutex) - { - if (readCount % 3 == 0) - { - ++passed; - } - } - } - } - } - - ThreadGroup group = new ThreadGroup(); - Thread thread; - char[10] tmp; - - for (uint i = 0; i < ReaderThreads; ++i) - { - thread = new Thread(&mutexReaderThread); - thread.name = "reader-" ~ format(tmp, i); - - debug (readwritemutex) - log.trace("Created reader thread " ~ thread.name); - thread.start(); - - group.add(thread); - } - - for (uint i = 0; i < WriterThreads; ++i) - { - thread = new Thread(&mutexWriterThread); - thread.name = "writer-" ~ format(tmp, i); - - debug (readwritemutex) - log.trace("Created writer thread " ~ thread.name); - thread.start(); - - group.add(thread); - } - - debug (readwritemutex) - log.trace("Waiting for threads to finish"); - group.joinAll(); - - if (passed == WriterThreads * LoopsPerWriter) - { - debug (readwritemutex) - log.info("The ReadWriteMutex test was successful"); - } - else - { - debug (readwritemutex) - { - log.error("The ReadWriteMutex is not working properly: the counter has an incorrect value"); - assert(false); - } - else - { - assert(false, "The ReadWriteMutex is not working properly: the counter has an incorrect value"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/synchronization/semaphore.d --- a/tango/example/synchronization/semaphore.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,340 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2007 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas - Converted to use core.sync by Sean Kelly -*******************************************************************************/ - -module semaphore; - -private import tango.core.sync.Semaphore; -private import tango.core.sync.Mutex; -private import tango.core.Exception; -private import tango.core.Exception; -private import tango.core.Thread; -private import tango.io.Console; -private import tango.text.stream.LineIterator; -private import tango.text.convert.Integer; -private import tango.sys.Process; - -debug (semaphore) -{ - private import tango.util.log.Log; - private import tango.util.log.ConsoleAppender; - private import tango.util.log.DateLayout; -} - -const char[] SemaphoreName = "TestProcessSemaphore"; - - -/** - * Example program for the tango.core.sync.Barrier module. - */ -int main(char[][] args) -{ - if (args.length == 1) - { - debug (semaphore) - { - Logger log = Log.getLogger("semaphore"); - - log.addAppender(new ConsoleAppender(new DateLayout())); - - log.info("Semaphore test"); - } - - testSemaphore(); - testProcessSemaphore(args[0]); - - return 0; - } - else - { - return testSecondProcessSemaphore(); - } -} - -/** - * Test for single-process (multi-threaded) semaphores. - */ -void testSemaphore() -{ - const uint MaxThreadCount = 10; - - // Semaphore used in the tests. Start it "locked" (i.e., its initial - // count is 0). - Semaphore sem = new Semaphore(MaxThreadCount - 1); - Mutex mutex = new Mutex(); - uint count = 0; - bool passed = false; - - void semaphoreTestThread() - { - debug (semaphore) - { - Logger log = Log.getLogger("semaphore.single." ~ Thread.getThis().name()); - - log.trace("Starting thread"); - } - - try - { - uint threadNumber; - - // 'count' is a resource shared by multiple threads, so we must - // acquire the mutex before modifying it. - synchronized (mutex) - { - // debug (semaphore) - // log.trace("Acquired mutex"); - threadNumber = ++count; - // debug (semaphore) - // log.trace("Releasing mutex"); - } - - // We wait for all the threads to finish counting. - if (threadNumber < MaxThreadCount) - { - sem.wait(); - debug (semaphore) - log.trace("Acquired semaphore"); - - while (true) - { - synchronized (mutex) - { - if (count >= MaxThreadCount + 1) - break; - } - Thread.yield(); - } - - debug (semaphore) - log.trace("Releasing semaphore"); - sem.notify(); - } - else - { - passed = !sem.tryWait(); - if (passed) - { - debug (semaphore) - log.trace("Tried to acquire the semaphore too many times and failed: OK"); - } - else - { - debug (semaphore) - log.error("Tried to acquire the semaphore too may times and succeeded: FAILED"); - - debug (semaphore) - log.trace("Releasing semaphore"); - sem.notify(); - } - synchronized (mutex) - { - count++; - } - } - } - catch (SyncException e) - { - Cerr("Sync exception caught in Semaphore test thread " ~ Thread.getThis().name ~ - ":\n" ~ e.toString()).newline; - } - catch (Exception e) - { - Cerr("Unexpected exception caught in Semaphore test thread " ~ Thread.getThis().name ~ - ":\n" ~ e.toString()).newline; - } - } - - debug (semaphore) - { - Logger log = Log.getLogger("semaphore.single"); - } - - ThreadGroup group = new ThreadGroup(); - Thread thread; - char[10] tmp; - - for (uint i = 0; i < MaxThreadCount; ++i) - { - thread = new Thread(&semaphoreTestThread); - thread.name = "thread-" ~ tango.text.convert.Integer.format(tmp, i); - - group.add(thread); - debug (semaphore) - log.trace("Created thread " ~ thread.name); - thread.start(); - } - - debug (semaphore) - log.trace("Waiting for threads to finish"); - group.joinAll(); - - if (passed) - { - debug (semaphore) - log.info("The Semaphore test was successful"); - } - else - { - debug (semaphore) - { - log.error("The Semaphore is not working properly: it allowed " - "to be acquired more than it should have done"); - assert(false); - } - else - { - assert(false, "The Semaphore is not working properly: it allowed " - "to be acquired more than it should have done"); - } - } -} - -/** - * Test for multi-process semaphores: this test works by creating a copy of - * this process that tries to acquire the ProcessSemaphore that was created - * in this function. If everything works as expected, the attempt should fail, - * as the count of the semaphore is set to 1. - */ -void testProcessSemaphore(char[] programName) -{ - /+ - bool success = false; - - debug (semaphore) - { - Logger log = Log.getLogger("semaphore.multi"); - Logger childLog = Log.getLogger("semaphore.multi.child"); - - log.info("ProcessSemaphore test"); - } - - try - { - scope ProcessSemaphore sem = new ProcessSemaphore(SemaphoreName, 1); - Process proc = new Process(programName, "2"); - - debug (semaphore) - log.trace("Created ProcessSemaphore('" ~ SemaphoreName ~ "')'"); - - sem.wait(); - debug (semaphore) - log.trace("Acquired semaphore in main process"); - - debug (semaphore) - log.trace("Executing child test process: " ~ proc.toString()); - proc.execute(); - - debug (semaphore) - { - foreach (line; new LineIterator!(char)(proc.stdout)) - { - childLog.trace(line); - } - } - foreach (line; new LineIterator!(char)(proc.stderr)) - { - Cerr(line).newline; - } - - debug (semaphore) - log.trace("Waiting for child process to finish"); - auto result = proc.wait(); - - success = (result.reason == Process.Result.Exit && result.status == 2); - - debug (semaphore) - log.trace("Releasing semaphore in main process"); - sem.notify(); - } - catch (SyncException e) - { - Cerr("Sync exception caught in ProcessSemaphore main test process:\n" ~ e.toString()).newline; - } - catch (ProcessException e) - { - Cerr("Process exception caught in ProcessSemaphore main test process:\n" ~ e.toString()).newline; - } - catch (Exception e) - { - Cerr("Unexpected exception caught in ProcessSemaphore main test process:\n" ~ e.toString()).newline; - } - - if (success) - { - debug (semaphore) - log.info("The ProcessSemaphore test was successful"); - } - else - { - debug (semaphore) - { - log.error("The multi-process semaphore is not working"); - assert(false); - } - else - { - assert(false, "The multi-process semaphore is not working"); - } - } - +/ -} - -/** - * Test for multi-process semaphores (second process). - */ -int testSecondProcessSemaphore() -{ - int rc = 0; - - /+ - debug (semaphore) - { - Cout("Starting child process\n"); - } - - try - { - scope ProcessSemaphore sem = new ProcessSemaphore(SemaphoreName); - bool success; - - success = !sem.tryAcquire(); - if (success) - { - debug (semaphore) - Cout("Tried to acquire semaphore in child process and failed: OK\n"); - rc = 2; - } - else - { - debug (semaphore) - { - Cout("Acquired semaphore in child process: this should not have happened\n"); - Cout("Releasing semaphore in child process\n"); - } - sem.notify(); - rc = 1; - } - } - catch (SyncException e) - { - Cerr("Sync exception caught in ProcessSemaphore child test process:\n" ~ e.toString()).newline; - } - catch (ProcessException e) - { - Cerr("Process exception caught in ProcessSemaphore child test process:\n" ~ e.toString()).newline; - } - catch (Exception e) - { - Cerr("Unexpected exception caught in ProcessSemaphore child test process:\n" ~ e.toString()).newline; - } - - debug (semaphore) - Cout("Leaving child process\n"); - - +/ - return rc; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/system/arguments.d --- a/tango/example/system/arguments.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -/******************************************************************************* - Illustrates use of the Arguments class. -*******************************************************************************/ - -import tango.util.Arguments; -import tango.io.Stdout; -import tango.io.FileConduit; -import tango.text.stream.LineIterator; - -void usage() -{ - Stdout("Usage: [OPTIONS]... FILES...").newline; - Stdout("This is a program that does something.").newline; - Stdout.newline; - Stdout("OPTIONS: ").newline; - Stdout("Output this help message: -?, --help").newline; - Stdout("Do cool things to your files: -c, -C, --cool").newline; - Stdout("Use filename as response file: -r, -R, --response").newline; -} - -void main(char[][] cmdlArgs) -{ - char[][] implicitArguments = ["files"]; - - char[][][] argumentAliases; - argumentAliases ~= ["help", "?"]; - argumentAliases ~= ["cool", "C", "c"]; - argumentAliases ~= ["response", "R", "r"]; - - auto args = new Arguments(cmdlArgs, implicitArguments, argumentAliases); - - bool fileExistsValidation(char[] arg) - { - bool rtn; - FilePath argFile = new FilePath(arg); - rtn = argFile.exists; - if (!rtn) - Stdout.format("Specified path does not exist: {}", arg).newline; - return rtn; - } - - bool singleFileValidation(char[][] args, inout char[] invalidArg) - { - if (args.length > 1) - { - Stdout("Cannot specify multiple paths for argument.").newline; - invalidArg = args[1]; - } - else - return true; - return false; - } - - args.addValidation("response", &fileExistsValidation); - args.addValidation("response", &singleFileValidation); - args.addValidation("files", true, true); - - bool argsValidated = true; - try - args.validate; - catch (ArgumentException ex) - { - if (ex.reason == ArgumentException.ExceptionReason.MISSING_ARGUMENT) - Stdout.format("Missing Argument: {} ({})", ex.name, ex.msg).newline; - else if (ex.reason == ArgumentException.ExceptionReason.MISSING_PARAMETER) - Stdout.format("Missing Parameter to Argument: {} ({})", ex.name, ex.msg).newline; - else if (ex.reason == ArgumentException.ExceptionReason.INVALID_PARAMETER) - Stdout.format("Invalid Parameter: {} ({})", ex.name, ex.msg).newline; - Stdout.newline; - argsValidated = false; - } - - if ((!argsValidated) || ("help" in args)) - usage(); - else - {// ready to run - if ("response" in args) - { - Stdout(args["response"][0]).newline; - auto file = new FileConduit(args["response"][0]); - auto lines = new LineIterator!(char)(file); - char[][] arguments; - foreach (line; lines) - arguments ~= line.dup; - args.parse(arguments, implicitArguments, argumentAliases); - } - if ("cool" in args) - { - Stdout ("Listing the files to be actioned in a cool way.").newline; - foreach (char[] file; args["files"]) - Stdout.format("{}", file).newline; - Stdout ("Cool and secret action performed.").newline; - } - if ("x" in args) - Stdout.format("User set the X factor to '{}'", args["x"]).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/system/localtime.d --- a/tango/example/system/localtime.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/******************************************************************************* - - localtime.d - -*******************************************************************************/ - -private import tango.io.Stdout; - -private import tango.time.WallClock; - -/****************************************************************************** - - Example code to format a local time in the following format: - "Wed Dec 31 16:00:00 GMT-0800 1969". The day and month names - would typically be extracted from a locale instance, but we - convert them locally here for the sake of simplicity - -******************************************************************************/ - -void main () -{ - /// list of day names - static char[][] days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - - /// list of month names - static char[][] months = - [ - "Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", - ]; - - // retreive local time - auto dt = WallClock.toDate; - - // get GMT difference in minutes - auto tz = cast(int) WallClock.zone.minutes; - char sign = '+'; - if (tz < 0) - tz = -tz, sign = '-'; - - // format date - Stdout.formatln ("{}, {} {:d2} {:d2}:{:d2}:{:d2} GMT{}{:d2}:{:d2} {}", - days[dt.date.dow], - months[dt.date.month-1], - dt.date.day, - dt.time.hours, - dt.time.minutes, - dt.time.seconds, - sign, - tz / 60, - tz % 60, - dt.date.year - ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/system/normpath.d --- a/tango/example/system/normpath.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/***************************************************************** - - Simple example that shows possible inputs to normalize and the - corresponding outputs. - - Put into public domain by Lars Ivar Igesund. - -*****************************************************************/ - -import tango.io.Stdout; - -import tango.util.PathUtil; - -int main() -{ -version (Posix) { - Stdout(normalize ( "/foo/../john")).newline; - Stdout(normalize ( "foo/../john")).newline; - Stdout(normalize ( "foo/bar/..")).newline; - Stdout(normalize ( "foo/bar/../john")).newline; - Stdout(normalize ( "foo/bar/doe/../../john")).newline; - Stdout(normalize ( "foo/bar/doe/../../john/../bar")).newline; - Stdout(normalize ( "./foo/bar/doe")).newline; - Stdout(normalize ( "./foo/bar/doe/../../john/../bar")).newline; - Stdout(normalize ( "./foo/bar/../../john/../bar")).newline; - Stdout(normalize ( "foo/bar/./doe/../../john")).newline; - Stdout(normalize ( "../../foo/bar/./doe/../../john")).newline; - Stdout(normalize ( "../../../foo/bar")).newline; - Stdout("** Should now throw exception as the following path is invalid for normalization.").newline; - Stdout(normalize ( "/../../../foo/bar")).newline; -} -version (Windows) { - Stdout(normalize ( "C:\\foo\\..\\john")).newline; - Stdout(normalize ( "foo\\..\\john")).newline; - Stdout(normalize ( "foo\\bar\\..")).newline; - Stdout(normalize ( "foo\\bar\\..\\john")).newline; - Stdout(normalize ( "foo\\bar\\doe\\..\\..\\john")).newline; - Stdout(normalize ( "foo\\bar\\doe\\..\\..\\john\\..\\bar")).newline; - Stdout(normalize ( ".\\foo\\bar\\doe")).newline; - Stdout(normalize ( ".\\foo\\bar\\doe\\..\\..\\john\\..\\bar")).newline; - Stdout(normalize ( ".\\foo\\bar\\..\\..\\john\\..\\bar")).newline; - Stdout(normalize ( "foo\\bar\\.\\doe\\..\\..\\john")).newline; - Stdout(normalize ( "..\\..\\foo\\bar\\.\\doe\\..\\..\\john")).newline; - Stdout(normalize ( "..\\..\\..\\foo\\bar")).newline; - Stdout("** Should now throw exception as the following path is invalid for normalization.").newline; - Stdout(normalize ( "C:\\..\\..\\..\\foo\\bar")).newline; -} - - - return 0; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/system/process.d --- a/tango/example/system/process.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -private import tango.io.Stdout; -private import tango.sys.Process; -private import tango.core.Exception; - -private import tango.text.stream.LineIterator; - - -/** - * Example program for the tango.sys.Process class. - */ -void main() -{ - version (Windows) - char[] command = "ping -n 4 localhost"; - else version (Posix) - char[] command = "ping -c 4 localhost"; - else - assert(false, "Unsupported platform"); - - try - { - auto p = new Process(command, null); - - Stdout.formatln("Executing {0}", p.toString()); - p.execute(); - - Stdout.formatln("Output from process: {0} (pid {1})\n---", - p.programName, p.pid); - - foreach (line; new LineIterator!(char)(p.stdout)) - { - Stdout.formatln("{0}", line); - } - - Stdout.print("---\n"); - - auto result = p.wait(); - - Stdout.formatln("Process '{0}' ({1}) finished: {2}", - p.programName, p.pid, result.toString()); - } - catch (ProcessException e) - { - Stdout.formatln("Process execution failed: {0}", e.toString()); - } - catch (IOException e) - { - Stdout.formatln("Input/output exception caught: {0}", e.toString()); - } - catch (Exception e) - { - Stdout.formatln("Unexpected exception caught: {0}", e.toString()); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/formatalign.d --- a/tango/example/text/formatalign.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/** - - Example showing how the alignment component in a format string argument works. - - Put into public domain by Lars Ivar Igesund - -*/ - -import tango.io.Stdout; - -void main(){ - char[] myFName = "Johnny"; - Stdout.formatln("First Name = |{0,15}|", myFName); - Stdout.formatln("Last Name = |{0,15}|", "Foo de Bar"); - - Stdout.formatln("First Name = |{0,-15}|", myFName); - Stdout.formatln("Last Name = |{0,-15}|", "Foo de Bar"); - - Stdout.formatln("First name = |{0,5}|", myFName); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/formatindex.d --- a/tango/example/text/formatindex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -/** - - Example that shows how the format specifiers can be used to index into - the argument list. - - Put into public domain by Lars Ivar Igesund. - -*/ - -import tango.io.Stdout; - -void main(){ - Stdout.formatln("Many {1} can now be {0} around to make {2} easier,\n and {1} can also be repeated.", - "switched", "arguments", "localization"); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/formatspec.d --- a/tango/example/text/formatspec.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -/** - - Example showing how to use format specifier components in a format string's - argument. - - Put into public domain by Lars Ivar Igesund - -*/ - -import tango.io.Stdout; - -void main(){ - double avogadros = 6.0221415e23; - Stdout.formatln("I have {0:C} in cash.", 100); - Stdout.formatln("Avogadro's number is {0:E}.", avogadros); - Stdout.formatln("Avogadro's number (with alignment) is {0,4:E}.", avogadros); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/localetime.d --- a/tango/example/text/localetime.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -/****************************************************************************** - - Example to format a locale-based time. For a default locale of - en-gb, this examples formats in the following manner: - - "Thu, 27 April 2006 18:20:47 +1" - -******************************************************************************/ - -private import tango.io.Console; - -private import tango.time.Clock; - -private import tango.text.locale.Locale; - -void main () -{ - auto layout = new Locale; - - Cout (layout ("{:ddd, dd MMMM yyyy HH:mm:ss z}", Clock.now)).newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/properties.d --- a/tango/example/text/properties.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -private import tango.io.Buffer, - tango.io.Console; - -private import tango.text.Properties; - -/******************************************************************************* - - Illustrates simple usage of tango.text.Properties - -*******************************************************************************/ - -void main() -{ - char[][char[]] aa; - aa ["foo"] = "something"; - aa ["bar"] = "something else"; - aa ["wumpus"] = ""; - - // write associative-array to a buffer; could use a file - auto props = new Properties!(char); - auto buffer = new Buffer (256); - props.save (buffer, aa); - - // reset and repopulate AA from the buffer - aa = null; - props.load (buffer, (char[] name, char[] value){aa[name] = value;}); - - // display result - foreach (name, value; aa) - Cout (name) (" = ") (value).newline; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/example/text/token.d --- a/tango/example/text/token.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/******************************************************************************* - - Tokenize input from the console. There are a variety of handy - tokenizers in the tango.text package ~ this illustrates usage - of an iterator that recognizes quoted-strings within an input - array, and splits elements on a provided set of delimiters - -*******************************************************************************/ - -import tango.io.Console; - -import Text = tango.text.Util; - -void main() -{ - // flush the console output, since we have no newline present - Cout ("Please enter some space-separated tokens: ") (); - - // create quote-aware iterator for handling space-delimited - // tokens from the console input - foreach (element; Text.quotes (Text.trim(Cin.get), " \t")) - Cout ("<") (element) ("> "); - - Cout.newline; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/BitManip.d --- a/tango/lib/common/tango/core/BitManip.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -/** - * This module contains a collection of bit-level operations. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - */ -module tango.core.BitManip; - - -version( DDoc ) -{ - /** - * Scans the bits in v starting with bit 0, looking - * for the first set bit. - * Returns: - * The bit number of the first bit set. - * The return value is undefined if v is zero. - */ - int bsf( uint v ); - - - /** - * Scans the bits in v from the most significant bit - * to the least significant bit, looking - * for the first set bit. - * Returns: - * The bit number of the first bit set. - * The return value is undefined if v is zero. - * Example: - * --- - * import std.intrinsic; - * - * int main() - * { - * uint v; - * int x; - * - * v = 0x21; - * x = bsf(v); - * printf("bsf(x%x) = %d\n", v, x); - * x = bsr(v); - * printf("bsr(x%x) = %d\n", v, x); - * return 0; - * } - * --- - * Output: - * bsf(x21) = 0
- * bsr(x21) = 5 - */ - int bsr( uint v ); - - - /** - * Tests the bit. - */ - int bt( uint* p, uint bitnum ); - - - /** - * Tests and complements the bit. - */ - int btc( uint* p, uint bitnum ); - - - /** - * Tests and resets (sets to 0) the bit. - */ - int btr( uint* p, uint bitnum ); - - - /** - * Tests and sets the bit. - * Params: - * p = a non-NULL pointer to an array of uints. - * index = a bit number, starting with bit 0 of p[0], - * and progressing. It addresses bits like the expression: - --- - p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1))) - --- - * Returns: - * A non-zero value if the bit was set, and a zero - * if it was clear. - * - * Example: - * --- - import std.intrinsic; - - int main() - { - uint array[2]; - - array[0] = 2; - array[1] = 0x100; - - printf("btc(array, 35) = %d\n", btc(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("btc(array, 35) = %d\n", btc(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("bts(array, 35) = %d\n", bts(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("btr(array, 35) = %d\n", btr(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("bt(array, 1) = %d\n", bt(array, 1)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - return 0; - } - * --- - * Output: -
-    btc(array, 35) = 0
-    array = [0]:x2, [1]:x108
-    btc(array, 35) = -1
-    array = [0]:x2, [1]:x100
-    bts(array, 35) = 0
-    array = [0]:x2, [1]:x108
-    btr(array, 35) = -1
-    array = [0]:x2, [1]:x100
-    bt(array, 1) = -1
-    array = [0]:x2, [1]:x100
-    
- */ - int bts( uint* p, uint bitnum ); - - - /** - * Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes - * byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3 - * becomes byte 0. - */ - uint bswap( uint v ); - - - /** - * Reads I/O port at port_address. - */ - ubyte inp( uint port_address ); - - - /** - * ditto - */ - ushort inpw( uint port_address ); - - - /** - * ditto - */ - uint inpl( uint port_address ); - - - /** - * Writes and returns value to I/O port at port_address. - */ - ubyte outp( uint port_address, ubyte value ); - - - /** - * ditto - */ - ushort outpw( uint port_address, ushort value ); - - - /** - * ditto - */ - uint outpl( uint port_address, uint value ); -} -else version( LLVMDC ) -{ - // From GDC ... public domain! - - int bsf(uint v) - { - uint m = 1; - uint i; - for (i = 0; i < 32; i++,m<<=1) { - if (v&m) - return i; - } - return i; // supposed to be undefined - } - - int bsr(uint v) - { - uint m = 0x80000000; - uint i; - for (i = 32; i ; i--,m>>>=1) { - if (v&m) - return i-1; - } - return i; // supposed to be undefined - } - - int bt(uint *p, uint bitnum) - { - return (p[bitnum / (uint.sizeof*8)] & (1<<(bitnum & ((uint.sizeof*8)-1)))) ? -1 : 0 ; - } - - int btc(uint *p, uint bitnum) - { - uint * q = p + (bitnum / (uint.sizeof*8)); - uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); - int result = *q & mask; - *q ^= mask; - return result ? -1 : 0; - } - - int btr(uint *p, uint bitnum) - { - uint * q = p + (bitnum / (uint.sizeof*8)); - uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); - int result = *q & mask; - *q &= ~mask; - return result ? -1 : 0; - } - - int bts(uint *p, uint bitnum) - { - uint * q = p + (bitnum / (uint.sizeof*8)); - uint mask = 1 << (bitnum & ((uint.sizeof*8) - 1)); - int result = *q & mask; - *q |= mask; - return result ? -1 : 0; - } - - pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32") - uint bswap(uint val); - - ubyte inp(uint p) { return 0; } - ushort inpw(uint p) { return 0; } - uint inpl(uint p) { return 0; } - - ubyte outp(uint p, ubyte v) { return v; } - ushort outpw(uint p, ushort v) { return v; } - uint outpl(uint p, uint v) { return v; } -} -else -{ - public import std.intrinsic; -} - - -/** - * Calculates the number of set bits in a 32-bit integer. - */ -int popcnt( uint x ) -{ - // Avoid branches, and the potential for cache misses which - // could be incurred with a table lookup. - - // We need to mask alternate bits to prevent the - // sum from overflowing. - // add neighbouring bits. Each bit is 0 or 1. - x = x - ((x>>1) & 0x5555_5555); - // now each two bits of x is a number 00,01 or 10. - // now add neighbouring pairs - x = ((x&0xCCCC_CCCC)>>2) + (x&0x3333_3333); - // now each nibble holds 0000-0100. Adding them won't - // overflow any more, so we don't need to mask any more - - // Now add the nibbles, then the bytes, then the words - // We still need to mask to prevent double-counting. - // Note that if we used a rotate instead of a shift, we - // wouldn't need the masks, and could just divide the sum - // by 8 to account for the double-counting. - // On some CPUs, it may be faster to perform a multiply. - - x += (x>>4); - x &= 0x0F0F_0F0F; - x += (x>>8); - x &= 0x00FF_00FF; - x += (x>>16); - x &= 0xFFFF; - return x; -} - - -debug( UnitTest ) -{ - unittest - { - assert( popcnt( 0 ) == 0 ); - assert( popcnt( 7 ) == 3 ); - assert( popcnt( 0xAA )== 4 ); - assert( popcnt( 0x8421_1248 ) == 8 ); - assert( popcnt( 0xFFFF_FFFF ) == 32 ); - assert( popcnt( 0xCCCC_CCCC ) == 16 ); - assert( popcnt( 0x7777_7777 ) == 24 ); - } -} - - -/** - * Reverses the order of bits in a 32-bit integer. - */ -uint bitswap( uint x ) -{ - - version( D_InlineAsm_X86 ) - { - asm - { - // Author: Tiago Gasiba. - mov EDX, EAX; - shr EAX, 1; - and EDX, 0x5555_5555; - and EAX, 0x5555_5555; - shl EDX, 1; - or EAX, EDX; - mov EDX, EAX; - shr EAX, 2; - and EDX, 0x3333_3333; - and EAX, 0x3333_3333; - shl EDX, 2; - or EAX, EDX; - mov EDX, EAX; - shr EAX, 4; - and EDX, 0x0f0f_0f0f; - and EAX, 0x0f0f_0f0f; - shl EDX, 4; - or EAX, EDX; - bswap EAX; - } - } - else - { - // swap odd and even bits - x = ((x >> 1) & 0x5555_5555) | ((x & 0x5555_5555) << 1); - // swap consecutive pairs - x = ((x >> 2) & 0x3333_3333) | ((x & 0x3333_3333) << 2); - // swap nibbles - x = ((x >> 4) & 0x0F0F_0F0F) | ((x & 0x0F0F_0F0F) << 4); - // swap bytes - x = ((x >> 8) & 0x00FF_00FF) | ((x & 0x00FF_00FF) << 8); - // swap 2-byte long pairs - x = ( x >> 16 ) | ( x << 16); - return x; - - } -} - - -debug( UnitTest ) -{ - unittest - { - assert( bitswap( 0x8000_0100 ) == 0x0080_0001 ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/Exception.d --- a/tango/lib/common/tango/core/Exception.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,629 +0,0 @@ -/** - * The exception module defines all system-level exceptions and provides a - * mechanism to alter system-level error handling. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly, Kris Bell. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly, Kris Bell - */ -module tango.core.Exception; - - -private -{ - alias void function( char[] file, size_t line, char[] msg = null ) assertHandlerType; - alias TracedExceptionInfo function( void* ptr = null ) traceHandlerType; - - assertHandlerType assertHandler = null; - traceHandlerType traceHandler = null; -} - - -interface TracedExceptionInfo -{ - int opApply( int delegate( inout char[] ) ); -} - - -//////////////////////////////////////////////////////////////////////////////// -/* -- Exception - - OutOfMemoryException - - - TracedException - - SwitchException - - AssertException - - ArrayBoundsException - - FinalizeException - - - PlatformException - - ProcessException - - ThreadException - - FiberException - - SyncException - - IOException - - SocketException - - SocketAcceptException - - AddressException - - HostException - - VfsException - - ClusterException - - - NoSuchElementException - - CorruptedIteratorException - - - IllegalArgumentException - - IllegalElementException - - - TextException - - RegexException - - LocaleException - - UnicodeException - - - PayloadException -*/ -//////////////////////////////////////////////////////////////////////////////// - - -/** - * Thrown on an out of memory error. - */ -class OutOfMemoryException : Exception -{ - this( char[] file, size_t line ) - { - super( "Memory allocation failed", file, line ); - } - - char[] toString() - { - return msg ? super.toString() : "Memory allocation failed"; - } -} - - -/** - * Stores a stack trace when thrown. - */ -class TracedException : Exception -{ - this( char[] msg ) - { - super( msg ); - m_info = traceContext(); - } - - this( char[] msg, Exception e ) - { - super( msg, e ); - m_info = traceContext(); - } - - this( char[] msg, char[] file, size_t line ) - { - super( msg, file, line ); - m_info = traceContext(); - } - - char[] toString() - { - if( m_info is null ) - return super.toString(); - char[] buf = super.toString(); - buf ~= "\n----------------"; - foreach( line; m_info ) - buf ~= "\n" ~ line; - return buf; - } - - int opApply( int delegate( inout char[] buf ) dg ) - { - if( m_info is null ) - return 0; - return m_info.opApply( dg ); - } - -private: - TracedExceptionInfo m_info; -} - - -/** - * Base class for operating system or library exceptions. - */ -class PlatformException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - -/** - * Thrown on an assert error. - */ -class AssertException : TracedException -{ - this( char[] file, size_t line ) - { - super( "Assertion failure", file, line ); - } - - this( char[] msg, char[] file, size_t line ) - { - super( msg, file, line ); - } -} - - -/** - * Thrown on an array bounds error. - */ -class ArrayBoundsException : TracedException -{ - this( char[] file, size_t line ) - { - super( "Array index out of bounds", file, line ); - } -} - - -/** - * Thrown on finalize error. - */ -class FinalizeException : TracedException -{ - ClassInfo info; - - this( ClassInfo c, Exception e = null ) - { - super( "Finalization error", e ); - info = c; - } - - char[] toString() - { - //return "An exception was thrown while finalizing an instance of class " ~ info.name; - assert(0); - } -} - - -/** - * Thrown on a switch error. - */ -class SwitchException : TracedException -{ - this( char[] file, size_t line ) - { - super( "No appropriate switch clause found", file, line ); - } -} - - -/** - * Represents a text processing error. - */ -class TextException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - -/** - * Thrown on a unicode conversion error. - */ -class UnicodeException : TextException -{ - size_t idx; - - this( char[] msg, size_t idx ) - { - super( msg ); - this.idx = idx; - } -} - - -/** - * Base class for thread exceptions. - */ -class ThreadException : PlatformException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for fiber exceptions. - */ -class FiberException : ThreadException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for synchronization exceptions. - */ -class SyncException : PlatformException -{ - this( char[] msg ) - { - super( msg ); - } -} - - - -/** - * The basic exception thrown by the tango.io package. One should try to ensure - * that all Tango exceptions related to IO are derived from this one. - */ -class IOException : PlatformException -{ - this( char[] msg ) - { - super( msg ); - } -} - -/** - * The basic exception thrown by the tango.io.vfs package. - */ -private class VfsException : IOException -{ - this( char[] msg ) - { - super( msg ); - } -} - -/** - * The basic exception thrown by the tango.io.cluster package. - */ -private class ClusterException : IOException -{ - this( char[] msg ) - { - super( msg ); - } -} - -/** - * Base class for socket exceptions. - */ -class SocketException : IOException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for exception thrown by an InternetHost. - */ -class HostException : IOException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for exceptiond thrown by an Address. - */ -class AddressException : IOException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Thrown when a socket failed to accept an incoming connection. - */ -class SocketAcceptException : SocketException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Thrown on a process error. - */ -class ProcessException : PlatformException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for regluar expression exceptions. - */ -class RegexException : TextException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Base class for locale exceptions. - */ -class LocaleException : TextException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * RegistryException is thrown when the NetworkRegistry encounters a - * problem during proxy registration, or when it sees an unregistered - * guid. - */ -class RegistryException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Thrown when an illegal argument is encountered. - */ -class IllegalArgumentException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * - * IllegalElementException is thrown by Collection methods - * that add (or replace) elements (and/or keys) when their - * arguments are null or do not pass screeners. - * - */ -class IllegalElementException : IllegalArgumentException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Thrown on past-the-end errors by iterators and containers. - */ -class NoSuchElementException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -/** - * Thrown when a corrupt iterator is detected. - */ -class CorruptedIteratorException : NoSuchElementException -{ - this( char[] msg ) - { - super( msg ); - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Overrides -//////////////////////////////////////////////////////////////////////////////// - - -/** - * Overrides the default assert hander with a user-supplied version. - * - * Params: - * h = The new assert handler. Set to null to use the default handler. - */ -void setAssertHandler( assertHandlerType h ) -{ - assertHandler = h; -} - - -/** - * Overrides the default trace hander with a user-supplied version. - * - * Params: - * h = The new trace handler. Set to null to use the default handler. - */ -void setTraceHandler( traceHandlerType h ) -{ - traceHandler = h; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Overridable Callbacks -//////////////////////////////////////////////////////////////////////////////// - -private extern(C) int printf(char*,...); - -/** - * A callback for assert errors in D. The user-supplied assert handler will - * be called if one has been supplied, otherwise an AssertException will be - * thrown. - * - * Params: - * file = The name of the file that signaled this error. - * line = The line number on which this error occurred. - */ -extern (C) void onAssertError( char[] file, size_t line ) -{ - printf("Assertion failed:\n"); - printf("%.*s(%lu)\n", file.length, file.ptr, line); - if( assertHandler is null ) { - throw new AssertException( file, line ); - } - assertHandler( file, line ); -} - - -/** - * A callback for assert errors in D. The user-supplied assert handler will - * be called if one has been supplied, otherwise an AssertException will be - * thrown. - * - * Params: - * file = The name of the file that signaled this error. - * line = The line number on which this error occurred. - * msg = An error message supplied by the user. - */ -extern (C) void onAssertErrorMsg( char[] file, size_t line, char[] msg ) -{ - printf("Assertion failed:\n"); - printf("%.*s(%lu):\n", file.length, file.ptr, line); - printf("%.*s\n", msg.length, msg.ptr); - if( assertHandler is null ) - throw new AssertException( msg, file, line ); - assertHandler( file, line, msg ); -} - - -/** - * This function will be called when a TracedException is constructed. The - * user-supplied trace handler will be called if one has been supplied, - * otherwise no trace will be generated. - * - * Params: - * ptr = A pointer to the location from which to generate the trace, or null - * if the trace should be generated from within the trace handler - * itself. - * - * Returns: - * An object describing the current calling context or null if no handler is - * supplied. - */ -TracedExceptionInfo traceContext( void* ptr = null ) -{ - if( traceHandler is null ) - return null; - return traceHandler( ptr ); -} - -//////////////////////////////////////////////////////////////////////////////// -// Internal Error Callbacks -//////////////////////////////////////////////////////////////////////////////// - - -/** - * A callback for array bounds errors in D. An ArrayBoundsException will be - * thrown. - * - * Params: - * file = The name of the file that signaled this error. - * line = The line number on which this error occurred. - * - * Throws: - * ArrayBoundsException. - */ -extern (C) void onArrayBoundsError( char[] file, size_t line ) -{ - throw new ArrayBoundsException( file, line ); -} - - -/** - * A callback for finalize errors in D. A FinalizeException will be thrown. - * - * Params: - * e = The exception thrown during finalization. - * - * Throws: - * FinalizeException. - */ -extern (C) void onFinalizeError( ClassInfo info, Exception ex ) -{ - throw new FinalizeException( info, ex ); -} - - -/** - * A callback for out of memory errors in D. An OutOfMemoryException will be - * thrown. - * - * Throws: - * OutOfMemoryException. - */ -extern (C) void onOutOfMemoryError() -{ - // NOTE: Since an out of memory condition exists, no allocation must occur - // while generating this object. - throw cast(OutOfMemoryException) cast(void*) OutOfMemoryException.classinfo.init; -} - - -/** - * A callback for switch errors in D. A SwitchException will be thrown. - * - * Params: - * file = The name of the file that signaled this error. - * line = The line number on which this error occurred. - * - * Throws: - * SwitchException. - */ -extern (C) void onSwitchError( char[] file, size_t line ) -{ - throw new SwitchException( file, line ); -} - - -/** - * A callback for unicode errors in D. A UnicodeException will be thrown. - * - * Params: - * msg = Information about the error. - * idx = String index where this error was detected. - * - * Throws: - * UnicodeException. - */ -extern (C) void onUnicodeError( char[] msg, size_t idx ) -{ - throw new UnicodeException( msg, idx ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/Memory.d --- a/tango/lib/common/tango/core/Memory.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,458 +0,0 @@ -/** - * The memory module provides an interface to the garbage collector and to - * any other OS or API-level memory management facilities. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Memory; - - -private -{ - extern (C) void gc_init(); - extern (C) void gc_term(); - - extern (C) void gc_enable(); - extern (C) void gc_disable(); - extern (C) void gc_collect(); - - extern (C) uint gc_getAttr( void* p ); - extern (C) uint gc_setAttr( void* p, uint a ); - extern (C) uint gc_clrAttr( void* p, uint a ); - - extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); - extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); - extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0 ); - extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ); - extern (C) void gc_free( void* p ); - - extern (C) void* gc_addrOf( void* p ); - extern (C) size_t gc_sizeOf( void* p ); - - struct BlkInfo_ - { - void* base; - size_t size; - uint attr; - } - - extern (C) BlkInfo_ gc_query( void* p ); - - extern (C) void gc_addRoot( void* p ); - extern (C) void gc_addRange( void* p, size_t sz ); - - extern (C) void gc_removeRoot( void* p ); - extern (C) void gc_removeRange( void* p ); - - alias bool function( Object obj ) collectHandlerType; -} - - -/** - * This struct encapsulates all garbage collection functionality for the D - * programming language. - */ -struct GC -{ - /** - * Enables the garbage collector if collections have previously been - * suspended by a call to disable. This function is reentrant, and - * must be called once for every call to disable before the garbage - * collector is enabled. - */ - static void enable() - { - gc_enable(); - } - - - /** - * Disables the garbage collector. This function is reentrant, but - * enable must be called once for each call to disable. - */ - static void disable() - { - gc_disable(); - } - - - /** - * Begins a full collection. While the meaning of this may change based - * on the garbage collector implementation, typical behavior is to scan - * all stack segments for roots, mark accessible memory blocks as alive, - * and then to reclaim free space. This action may need to suspend all - * running threads for at least part of the collection process. - */ - static void collect() - { - gc_collect(); - } - - - /** - * Elements for a bit field representing memory block attributes. These - * are manipulated via the getAttr, setAttr, clrAttr functions. - */ - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, /// Finalize the data in this block on collect. - NO_SCAN = 0b0000_0010, /// Do not scan through this block on collect. - NO_MOVE = 0b0000_0100 /// Do not move this memory block on collect. - } - - - /** - * Contains aggregate information about a block of managed memory. The - * purpose of this struct is to support a more efficient query style in - * instances where detailed information is needed. - * - * base = A pointer to the base of the block in question. - * size = The size of the block, calculated from base. - * attr = Attribute bits set on the memory block. - */ - alias BlkInfo_ BlkInfo; - - - /** - * Returns a bit field representing all block attributes set for the memory - * referenced by p. If p references memory not originally allocated by this - * garbage collector, points to the interior of a memory block, or if p is - * null, zero will be returned. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - * - * Returns: - * A bit field containing any bits set for the memory block referenced by - * p or zero on error. - */ - static uint getAttr( void* p ) - { - return gc_getAttr( p ); - } - - - /** - * Sets the specified bits for the memory references by p. If p references - * memory not originally allocated by this garbage collector, points to the - * interior of a memory block, or if p is null, no action will be performed. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - * a = A bit field containing any bits to set for this memory block. - * - * The result of a call to getAttr after the specified bits have been - * set. - */ - static uint setAttr( void* p, uint a ) - { - return gc_setAttr( p, a ); - } - - - /** - * Clears the specified bits for the memory references by p. If p - * references memory not originally allocated by this garbage collector, - * points to the interior of a memory block, or if p is null, no action - * will be performed. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - * a = A bit field containing any bits to clear for this memory block. - * - * Returns: - * The result of a call to getAttr after the specified bits have been - * cleared. - */ - static uint clrAttr( void* p, uint a ) - { - return gc_clrAttr( p, a ); - } - - - /** - * Requests an aligned block of managed memory from the garbage collector. - * This memory may be deleted at will with a call to free, or it may be - * discarded and cleaned up automatically during a collection run. If - * allocation fails, this function will call onOutOfMemory which is - * expected to throw an OutOfMemoryException. - * - * Params: - * sz = The desired allocation size in bytes. - * ba = A bitmask of the attributes to set on this block. - * - * Returns: - * A reference to the allocated memory or null if insufficient memory - * is available. - * - * Throws: - * OutOfMemoryException on allocation failure. - */ - static void* malloc( size_t sz, uint ba = 0 ) - { - return gc_malloc( sz, ba ); - } - - - /** - * Requests an aligned block of managed memory from the garbage collector, - * which is initialized with all bits set to zero. This memory may be - * deleted at will with a call to free, or it may be discarded and cleaned - * up automatically during a collection run. If allocation fails, this - * function will call onOutOfMemory which is expected to throw an - * OutOfMemoryException. - * - * Params: - * sz = The desired allocation size in bytes. - * ba = A bitmask of the attributes to set on this block. - * - * Returns: - * A reference to the allocated memory or null if insufficient memory - * is available. - * - * Throws: - * OutOfMemoryException on allocation failure. - */ - static void* calloc( size_t sz, uint ba = 0 ) - { - return gc_calloc( sz, ba ); - } - - - /** - * If sz is zero, the memory referenced by p will be deallocated as if - * by a call to free. A new memory block of size sz will then be - * allocated as if by a call to malloc, or the implementation may instead - * resize the memory block in place. The contents of the new memory block - * will be the same as the contents of the old memory block, up to the - * lesser of the new and old sizes. Note that existing memory will only - * be freed by realloc if sz is equal to zero. The garbage collector is - * otherwise expected to later reclaim the memory block if it is unused. - * If allocation fails, this function will call onOutOfMemory which is - * expected to throw an OutOfMemoryException. If p references memory not - * originally allocated by this garbage collector, or if it points to the - * interior of a memory block, no action will be taken. If ba is zero - * (the default) and p references the head of a valid, known memory block - * then any bits set on the current block will be set on the new block if a - * reallocation is required. If ba is not zero and p references the head - * of a valid, known memory block then the bits in ba will replace those on - * the current memory block and will also be set on the new block if a - * reallocation is required. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - * sz = The desired allocation size in bytes. - * ba = A bitmask of the attributes to set on this block. - * - * Returns: - * A reference to the allocated memory on success or null if sz is - * zero. On failure, the original value of p is returned. - * - * Throws: - * OutOfMemoryException on allocation failure. - */ - static void* realloc( void* p, size_t sz, uint ba = 0 ) - { - return gc_realloc( p, sz, ba ); - } - - - /** - * Requests that the managed memory block referenced by p be extended in - * place by at least mx bytes, with a desired extension of sz bytes. If an - * extension of the required size is not possible, if p references memory - * not originally allocated by this garbage collector, or if p points to - * the interior of a memory block, no action will be taken. - * - * Params: - * mx = The minimum extension size in bytes. - * sz = The desired extension size in bytes. - * - * Returns: - * The size in bytes of the extended memory block referenced by p or zero - * if no extension occurred. - */ - static size_t extend( void* p, size_t mx, size_t sz ) - { - return gc_extend( p, mx, sz ); - } - - - /** - * Deallocates the memory referenced by p. If p is null, no action - * occurs. If p references memory not originally allocated by this - * garbage collector, or if it points to the interior of a memory block, - * no action will be taken. The block will not be finalized regardless - * of whether the FINALIZE attribute is set. If finalization is desired, - * use delete instead. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - */ - static void free( void* p ) - { - gc_free( p ); - } - - - /** - * Returns the base address of the memory block containing p. This value - * is useful to determine whether p is an interior pointer, and the result - * may be passed to routines such as sizeOf which may otherwise fail. If p - * references memory not originally allocated by this garbage collector, if - * p is null, or if the garbage collector does not support this operation, - * null will be returned. - * - * Params: - * p = A pointer to the root or the interior of a valid memory block or to - * null. - * - * Returns: - * The base address of the memory block referenced by p or null on error. - */ - static void* addrOf( void* p ) - { - return gc_addrOf( p ); - } - - - /** - * Returns the true size of the memory block referenced by p. This value - * represents the maximum number of bytes for which a call to realloc may - * resize the existing block in place. If p references memory not - * originally allocated by this garbage collector, points to the interior - * of a memory block, or if p is null, zero will be returned. - * - * Params: - * p = A pointer to the root of a valid memory block or to null. - * - * Returns: - * The size in bytes of the memory block referenced by p or zero on error. - */ - static size_t sizeOf( void* p ) - { - return gc_sizeOf( p ); - } - - - /** - * Returns aggregate information about the memory block containing p. If p - * references memory not originally allocated by this garbage collector, if - * p is null, or if the garbage collector does not support this operation, - * BlkInfo.init will be returned. Typically, support for this operation - * is dependent on support for addrOf. - * - * Params: - * p = A pointer to the root or the interior of a valid memory block or to - * null. - * - * Returns: - * Information regarding the memory block referenced by p or BlkInfo.init - * on error. - */ - static BlkInfo query( void* p ) - { - return gc_query( p ); - } - - - /** - * Adds the memory address referenced by p to an internal list of roots to - * be scanned during a collection. If p is null, no operation is - * performed. - * - * Params: - * p = A pointer to a valid memory address or to null. - */ - static void addRoot( void* p ) - { - gc_addRoot( p ); - } - - - /** - * Adds the memory block referenced by p and of size sz to an internal list - * of ranges to be scanned during a collection. If p is null, no operation - * is performed. - * - * Params: - * p = A pointer to a valid memory address or to null. - * sz = The size in bytes of the block to add. If sz is zero then the - * no operation will occur. If p is null then sz must be zero. - */ - static void addRange( void* p, size_t sz ) - { - gc_addRange( p, sz ); - } - - - /** - * Removes the memory block referenced by p from an internal list of roots - * to be scanned during a collection. If p is null or does not represent - * a value previously passed to add(void*) then no operation is performed. - * - * p = A pointer to a valid memory address or to null. - */ - static void removeRoot( void* p ) - { - gc_removeRoot( p ); - } - - - /** - * Removes the memory block referenced by p from an internal list of ranges - * to be scanned during a collection. If p is null or does not represent - * a value previously passed to add(void*, size_t) then no operation is - * performed. - * - * Params: - * p = A pointer to a valid memory address or to null. - */ - static void removeRange( void* p ) - { - gc_removeRange( p ); - } - - - /** - * Overrides the default collect hander with a user-supplied version. - * - * Params: - * h = The new collect handler. Set to null to use the default handler. - */ - static void collectHandler( collectHandlerType h ) - { - sm_collectHandler = h; - } - - -private: - static collectHandlerType sm_collectHandler = null; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Overridable Callbacks -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This function will be called when resource objects (ie. objects with a dtor) - * are finalized by the garbage collector. The user-supplied collect handler - * will be called if one has been supplied, otherwise no action will be taken. - * - * Params: - * obj = The object being collected. - * - * Returns: - * true if the runtime should call this object's dtor and false if not. - * Default behavior is to return true. - */ -extern (C) bool onCollectResource( Object obj ) -{ - if( GC.sm_collectHandler is null ) - return true; - return GC.sm_collectHandler( obj ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/Runtime.d --- a/tango/lib/common/tango/core/Runtime.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -/** - * The runtime module exposes information specific to the D runtime code. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Runtime; - - -private -{ - extern (C) bool rt_isHalting(); - - alias bool function() moduleUnitTesterType; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Runtime -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This struct encapsulates all functionality related to the underlying runtime - * module for the calling context. - */ -struct Runtime -{ - /** - * Returns true if the runtime is halting. Under normal circumstances, - * this will be set between the time that normal application code has - * exited and before module dtors are called. - * - * Returns: - * true if the runtime is halting. - */ - static bool isHalting() - { - return rt_isHalting(); - } - - - /** - * Overrides the default module unit tester with a user-supplied version. - * - * Params: - * h = The new unit tester. Set to null to use the default unit tester. - */ - static void moduleUnitTester( moduleUnitTesterType h ) - { - sm_moduleUnitTester = h; - } - - -private: - static moduleUnitTesterType sm_moduleUnitTester = null; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Overridable Callbacks -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This routine is called by the runtime to run module unit tests on startup. - * The user-supplied unit tester will be called if one has been supplied, - * otherwise all unit tests will be run in sequence. - * - * Returns: - * true if execution should continue after testing is complete and false if - * not. Default behavior is to return true. - */ -extern (C) bool runModuleUnitTests() -{ - if( Runtime.sm_moduleUnitTester is null ) - { - foreach( m; ModuleInfo ) - { - if( m.unitTest ) - m.unitTest(); - } - return true; - } - return Runtime.sm_moduleUnitTester(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/Thread.d --- a/tango/lib/common/tango/core/Thread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3278 +0,0 @@ -/** - * The thread module provides support for thread creation and management. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Thread; - - -// this should be true for most architectures -version = StackGrowsDown; - - -public -{ -// import tango.core.TimeSpan; -} -private -{ - import tango.core.Exception; - - - // - // exposed by compiler runtime - // - extern (C) void* rt_stackBottom(); - extern (C) void* rt_stackTop(); - - - void* getStackBottom() - { - return rt_stackBottom(); - } - - - void* getStackTop() - { - version( D_InlineAsm_X86 ) - { - asm - { - naked; - mov EAX, ESP; - ret; - } - } - else - { - return rt_stackTop(); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Thread Entry Point and Signal Handlers -//////////////////////////////////////////////////////////////////////////////// - - -version( Win32 ) -{ - private - { - import tango.stdc.stdint : uintptr_t; // for _beginthreadex decl below - import tango.sys.win32.UserGdi; - - const DWORD TLS_OUT_OF_INDEXES = 0xFFFFFFFF; - - // - // avoid multiple imports via tango.sys.windows.process - // - extern (Windows) alias uint function(void*) btex_fptr; - extern (C) uintptr_t _beginthreadex(void*, uint, btex_fptr, void*, uint, uint*); - - - // - // entry point for Windows threads - // - extern (Windows) uint thread_entryPoint( void* arg ) - { - Thread obj = cast(Thread) arg; - assert( obj ); - scope( exit ) Thread.remove( obj ); - - assert( obj.m_curr is &obj.m_main ); - obj.m_main.bstack = getStackBottom(); - obj.m_main.tstack = obj.m_main.bstack; - Thread.add( &obj.m_main ); - Thread.setThis( obj ); - - // NOTE: No GC allocations may occur until the stack pointers have - // been set and Thread.getThis returns a valid reference to - // this thread object (this latter condition is not strictly - // necessary on Win32 but it should be followed for the sake - // of consistency). - - // TODO: Consider putting an auto exception object here (using - // alloca) forOutOfMemoryError plus something to track - // whether an exception is in-flight? - - try - { - obj.run(); - } - catch( Object o ) - { - obj.m_unhandled = o; - } - return 0; - } - - - // - // copy of the same-named function in phobos.std.thread--it uses the - // Windows naming convention to be consistent with GetCurrentThreadId - // - HANDLE GetCurrentThreadHandle() - { - const uint DUPLICATE_SAME_ACCESS = 0x00000002; - - HANDLE curr = GetCurrentThread(), - proc = GetCurrentProcess(), - hndl; - - DuplicateHandle( proc, curr, proc, &hndl, 0, TRUE, DUPLICATE_SAME_ACCESS ); - return hndl; - } - } -} -else version( Posix ) -{ - private - { - import tango.stdc.posix.semaphore; - import tango.stdc.posix.pthread; - import tango.stdc.posix.signal; - import tango.stdc.posix.time; - import tango.stdc.errno; - - extern (C) int getErrno(); - - version( GNU ) - { - import gcc.builtins; - } - - - // - // entry point for POSIX threads - // - extern (C) void* thread_entryPoint( void* arg ) - { - Thread obj = cast(Thread) arg; - assert( obj ); - scope( exit ) - { - // NOTE: isRunning should be set to false after the thread is - // removed or a double-removal could occur between this - // function and thread_suspendAll. - Thread.remove( obj ); - obj.m_isRunning = false; - } - - static extern (C) void thread_cleanupHandler( void* arg ) - { - Thread obj = cast(Thread) arg; - assert( obj ); - - // NOTE: If the thread terminated abnormally, just set it as - // not running and let thread_suspendAll remove it from - // the thread list. This is safer and is consistent - // with the Windows thread code. - obj.m_isRunning = false; - } - - // NOTE: Using void to skip the initialization here relies on - // knowledge of how pthread_cleanup is implemented. It may - // not be appropriate for all platforms. However, it does - // avoid the need to link the pthread module. If any - // implementation actually requires default initialization - // then pthread_cleanup should be restructured to maintain - // the current lack of a link dependency. - pthread_cleanup cleanup = void; - cleanup.push( &thread_cleanupHandler, cast(void*) obj ); - - // NOTE: For some reason this does not always work for threads. - //obj.m_main.bstack = getStackBottom(); - version( D_InlineAsm_X86 ) - { - static void* getBasePtr() - { - asm - { - naked; - mov EAX, EBP; - ret; - } - } - - obj.m_main.bstack = getBasePtr(); - } - else version( StackGrowsDown ) - obj.m_main.bstack = &obj + 1; - else - obj.m_main.bstack = &obj; - obj.m_main.tstack = obj.m_main.bstack; - assert( obj.m_curr == &obj.m_main ); - Thread.add( &obj.m_main ); - Thread.setThis( obj ); - - // NOTE: No GC allocations may occur until the stack pointers have - // been set and Thread.getThis returns a valid reference to - // this thread object (this latter condition is not strictly - // necessary on Win32 but it should be followed for the sake - // of consistency). - - // TODO: Consider putting an auto exception object here (using - // alloca) forOutOfMemoryError plus something to track - // whether an exception is in-flight? - - try - { - obj.run(); - } - catch( Object o ) - { - obj.m_unhandled = o; - } - return null; - } - - - // - // used to track the number of suspended threads - // - sem_t suspendCount; - - - extern (C) void thread_suspendHandler( int sig ) - in - { - assert( sig == SIGUSR1 ); - } - body - { - version( LLVMDC ) - { - // put registers on the stack - version(D_InlineAsm_X86) - { - uint _eax, _ecx, _edx, _ebx, _esp, _ebp, _esi, _edi; - asm - { - mov _eax, EAX; - mov _ecx, ECX; - mov _edx, EDX; - mov _ebx, EBX; - mov _esp, ESP; - mov _ebp, EBP; - mov _esi, ESI; - mov _edi, EDI; - } - } - else - { - // FIXME - } - } - else version( D_InlineAsm_X86 ) - { - asm - { - pushad; - } - } - else version( GNU ) - { - __builtin_unwind_init(); - } - else - { - static assert( false, "Architecture not supported." ); - } - - // NOTE: Since registers are being pushed and popped from the stack, - // any other stack data used by this function should be gone - // before the stack cleanup code is called below. - { - Thread obj = Thread.getThis(); - - // NOTE: The thread reference returned by getThis is set within - // the thread startup code, so it is possible that this - // handler may be called before the reference is set. In - // this case it is safe to simply suspend and not worry - // about the stack pointers as the thread will not have - // any references to GC-managed data. - if( obj && !obj.m_lock ) - { - obj.m_curr.tstack = getStackTop(); - } - - sigset_t sigres = void; - int status; - - status = sigfillset( &sigres ); - assert( status == 0 ); - - status = sigdelset( &sigres, SIGUSR2 ); - assert( status == 0 ); - - status = sem_post( &suspendCount ); - assert( status == 0 ); - - sigsuspend( &sigres ); - - if( obj && !obj.m_lock ) - { - obj.m_curr.tstack = obj.m_curr.bstack; - } - } - - version( LLVMDC ) - { - // nothing to do - } - else version( D_InlineAsm_X86 ) - { - asm - { - popad; - } - } - else version( GNU ) - { - // registers will be popped automatically - } - else - { - static assert( false, "Architecture not supported." ); - } - } - - - extern (C) void thread_resumeHandler( int sig ) - in - { - assert( sig == SIGUSR2 ); - } - body - { - - } - } -} -else -{ - // NOTE: This is the only place threading versions are checked. If a new - // version is added, the module code will need to be searched for - // places where version-specific code may be required. This can be - // easily accomlished by searching for 'Windows' or 'Posix'. - static assert( false, "Unknown threading implementation." ); -} - - -//////////////////////////////////////////////////////////////////////////////// -// Thread -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class encapsulates all threading functionality for the D - * programming language. As thread manipulation is a required facility - * for garbage collection, all user threads should derive from this - * class, and instances of this class should never be explicitly deleted. - * A new thread may be created using either derivation or composition, as - * in the following example. - * - * Example: - * ----------------------------------------------------------------------------- - * - * class DerivedThread : Thread - * { - * this() - * { - * super( &run ); - * } - * - * private : - * void run() - * { - * printf( "Derived thread running.\n" ); - * } - * } - * - * void threadFunc() - * { - * printf( "Composed thread running.\n" ); - * } - * - * // create instances of each type - * Thread derived = new DerivedThread(); - * Thread composed = new Thread( &threadFunc ); - * - * // start both threads - * derived.start(); - * composed.start(); - * - * ----------------------------------------------------------------------------- - */ -class Thread -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a thread object which is associated with a static - * D function. - * - * Params: - * fn = The thread function. - * sz = The stack size for this thread. - * - * In: - * fn must not be null. - */ - this( void function() fn, size_t sz = 0 ) - in - { - assert( fn ); - } - body - { - m_fn = fn; - m_sz = sz; - m_call = Call.FN; - m_curr = &m_main; - } - - - /** - * Initializes a thread object which is associated with a dynamic - * D function. - * - * Params: - * dg = The thread function. - * sz = The stack size for this thread. - * - * In: - * dg must not be null. - */ - this( void delegate() dg, size_t sz = 0 ) - in - { - assert( dg ); - } - body - { - m_dg = dg; - m_sz = sz; - m_call = Call.DG; - m_curr = &m_main; - } - - - /** - * Cleans up any remaining resources used by this object. - */ - ~this() - { - if( m_addr == m_addr.init ) - { - return; - } - - version( Win32 ) - { - m_addr = m_addr.init; - CloseHandle( m_hndl ); - m_hndl = m_hndl.init; - } - else version( Posix ) - { - pthread_detach( m_addr ); - m_addr = m_addr.init; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Starts the thread and invokes the function or delegate passed upon - * construction. - * - * In: - * This routine may only be called once per thread instance. - * - * Throws: - * ThreadException if the thread fails to start. - */ - final void start() - in - { - assert( !next && !prev ); - } - body - { - version( Win32 ) {} else - version( Posix ) - { - pthread_attr_t attr; - - if( pthread_attr_init( &attr ) ) - throw new ThreadException( "Error initializing thread attributes" ); - if( m_sz && pthread_attr_setstacksize( &attr, m_sz ) ) - throw new ThreadException( "Error initializing thread stack size" ); - } - - // NOTE: This operation needs to be synchronized to avoid a race - // condition with the GC. Without this lock, the thread - // could start and allocate memory before being added to - // the global thread list, preventing it from being scanned - // and causing memory to be collected that is still in use. - synchronized( slock ) - { - version( Win32 ) - { - m_hndl = cast(HANDLE) _beginthreadex( null, m_sz, &thread_entryPoint, cast(void*) this, 0, &m_addr ); - if( cast(size_t) m_hndl == 0 ) - throw new ThreadException( "Error creating thread" ); - } - else version( Posix ) - { - m_isRunning = true; - scope( failure ) m_isRunning = false; - - if( pthread_create( &m_addr, &attr, &thread_entryPoint, cast(void*) this ) != 0 ) - throw new ThreadException( "Error creating thread" ); - } - multiThreadedFlag = true; - add( this ); - } - } - - - /** - * Waits for this thread to complete. If the thread terminated as the - * result of an unhandled exception, this exception will be rethrown. - * - * Params: - * rethrow = Rethrow any unhandled exception which may have caused this - * thread to terminate. - * - * Throws: - * ThreadException if the operation fails. - * Any exception not handled by the joined thread. - */ - final void join( bool rethrow = true ) - { - version( Win32 ) - { - if( WaitForSingleObject( m_hndl, INFINITE ) != WAIT_OBJECT_0 ) - throw new ThreadException( "Unable to join thread" ); - // NOTE: m_addr must be cleared before m_hndl is closed to avoid - // a race condition with isRunning. The operation is labeled - // volatile to prevent compiler reordering. - volatile m_addr = m_addr.init; - CloseHandle( m_hndl ); - m_hndl = m_hndl.init; - } - else version( Posix ) - { - if( pthread_join( m_addr, null ) != 0 ) - throw new ThreadException( "Unable to join thread" ); - // NOTE: pthread_join acts as a substitute for pthread_detach, - // which is normally called by the dtor. Setting m_addr - // to zero ensures that pthread_detach will not be called - // on object destruction. - volatile m_addr = m_addr.init; - } - if( rethrow && m_unhandled ) - { - throw m_unhandled; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // General Properties - //////////////////////////////////////////////////////////////////////////// - - - /** - * Gets the user-readable label for this thread. - * - * Returns: - * The name of this thread. - */ - final char[] name() - { - synchronized( this ) - { - return m_name; - } - } - - - /** - * Sets the user-readable label for this thread. - * - * Params: - * val = The new name of this thread. - */ - final void name( char[] val ) - { - synchronized( this ) - { - m_name = val.dup; - } - } - - - /** - * Gets the daemon status for this thread. - * - * Returns: - * true if this is a daemon thread. - */ - final bool isDaemon() - { - synchronized( this ) - { - return m_isDaemon; - } - } - - - /** - * Sets the daemon status for this thread. - * - * Params: - * val = The new daemon status for this thread. - */ - final void isDaemon( bool val ) - { - synchronized( this ) - { - m_isDaemon = val; - } - } - - - /** - * Tests whether this thread is running. - * - * Returns: - * true if the thread is running, false if not. - */ - final bool isRunning() - { - if( m_addr == m_addr.init ) - { - return false; - } - - version( Win32 ) - { - uint ecode = 0; - GetExitCodeThread( m_hndl, &ecode ); - return ecode == STILL_ACTIVE; - } - else version( Posix ) - { - // NOTE: It should be safe to access this value without - // memory barriers because word-tearing and such - // really isn't an issue for boolean values. - return m_isRunning; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Thread Priority Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * The minimum scheduling priority that may be set for a thread. On - * systems where multiple scheduling policies are defined, this value - * represents the minimum valid priority for the scheduling policy of - * the process. - */ - static const int PRIORITY_MIN; - - - /** - * The maximum scheduling priority that may be set for a thread. On - * systems where multiple scheduling policies are defined, this value - * represents the minimum valid priority for the scheduling policy of - * the process. - */ - static const int PRIORITY_MAX; - - - /** - * Gets the scheduling priority for the associated thread. - * - * Returns: - * The scheduling priority of this thread. - */ - final int priority() - { - version( Win32 ) - { - return GetThreadPriority( m_hndl ); - } - else version( Posix ) - { - int policy; - sched_param param; - - if( pthread_getschedparam( m_addr, &policy, ¶m ) ) - throw new ThreadException( "Unable to get thread priority" ); - return param.sched_priority; - } - } - - - /** - * Sets the scheduling priority for the associated thread. - * - * Params: - * val = The new scheduling priority of this thread. - */ - final void priority( int val ) - { - version( Win32 ) - { - if( !SetThreadPriority( m_hndl, val ) ) - throw new ThreadException( "Unable to set thread priority" ); - } - else version( Posix ) - { - // NOTE: pthread_setschedprio is not implemented on linux, so use - // the more complicated get/set sequence below. - //if( pthread_setschedprio( m_addr, val ) ) - // throw new ThreadException( "Unable to set thread priority" ); - - int policy; - sched_param param; - - if( pthread_getschedparam( m_addr, &policy, ¶m ) ) - throw new ThreadException( "Unable to set thread priority" ); - param.sched_priority = val; - if( pthread_setschedparam( m_addr, policy, ¶m ) ) - throw new ThreadException( "Unable to set thread priority" ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Actions on Calling Thread - //////////////////////////////////////////////////////////////////////////// - - - /** - * Suspends the calling thread for at least the supplied time, up to a - * maximum of (uint.max - 1) milliseconds. - * - * Params: - * period = The minimum duration the calling thread should be suspended, - * in seconds. Sub-second durations are specified as fractional - * values. - * - * In: - * period must be less than (uint.max - 1) milliseconds. - * - * Example: - * ------------------------------------------------------------------------- - * - * Thread.sleep( 0.05 ); // sleep for 50 milliseconds - * Thread.sleep( 5 ); // sleep for 5 seconds - * - * ------------------------------------------------------------------------- - */ - static void sleep( double period ) - in - { - // NOTE: The fractional value added to period is to correct fp error. - assert( period * 1000 + 0.1 < uint.max - 1 ); - } - body - { - version( Win32 ) - { - Sleep( cast(uint)( period * 1000 + 0.1 ) ); - } - else version( Posix ) - { - timespec tin = void; - timespec tout = void; - - period += 0.000_000_000_1; - - if( tin.tv_sec.max < period ) - { - tin.tv_sec = tin.tv_sec.max; - tin.tv_nsec = 0; - } - else - { - tin.tv_sec = cast(typeof(tin.tv_sec)) period; - tin.tv_nsec = cast(typeof(tin.tv_nsec)) ((period % 1.0) * 1_000_000_000); - } - - while( true ) - { - if( !nanosleep( &tin, &tout ) ) - return; - if( getErrno() != EINTR ) - throw new ThreadException( "Unable to sleep for specified duration" ); - tin = tout; - } - } - } - - - /+ - /** - * Suspends the calling thread for at least the supplied time, up to a - * maximum of (uint.max - 1) milliseconds. - * - * Params: - * period = The minimum duration the calling thread should be suspended. - * - * In: - * period must be less than (uint.max - 1) milliseconds. - * - * Example: - * ------------------------------------------------------------------------- - * - * Thread.sleep( TimeSpan.milliseconds( 50 ) ); // sleep for 50 milliseconds - * Thread.sleep( TimeSpan.seconds( 5 ) ); // sleep for 5 seconds - * - * ------------------------------------------------------------------------- - */ - static void sleep( TimeSpan period ) - in - { - assert( period.milliseconds < uint.max - 1 ); - } - body - { - version( Win32 ) - { - Sleep( cast(uint)( period.milliseconds ) ); - } - else version( Posix ) - { - timespec tin = void; - timespec tout = void; - - if( tin.tv_sec.max < period.seconds ) - { - tin.tv_sec = tin.tv_sec.max; - tin.tv_nsec = 0; - } - else - { - tin.tv_sec = cast(typeof(tin.tv_sec)) period.seconds; - tin.tv_nsec = cast(typeof(tin.tv_nsec)) period.nanoseconds % 1_000_000_000; - } - - while( true ) - { - if( !nanosleep( &tin, &tout ) ) - return; - if( getErrno() != EINTR ) - throw new ThreadException( "Unable to sleep for specified duration" ); - tin = tout; - } - } - } - - - /** - * Suspends the calling thread for at least the supplied time, up to a - * maximum of (uint.max - 1) milliseconds. - * - * Params: - * period = The minimum duration the calling thread should be suspended, - * in seconds. Sub-second durations are specified as fractional - * values. Please note that because period is a floating-point - * number, some accuracy may be lost for certain intervals. For - * this reason, the TimeSpan overload is preferred in instances - * where an exact interval is required. - * - * In: - * period must be less than (uint.max - 1) milliseconds. - * - * Example: - * ------------------------------------------------------------------------- - * - * Thread.sleep( 0.05 ); // sleep for 50 milliseconds - * Thread.sleep( 5 ); // sleep for 5 seconds - * - * ------------------------------------------------------------------------- - */ - static void sleep( double period ) - { - sleep( TimeSpan.interval( period ) ); - } - +/ - - - /** - * Forces a context switch to occur away from the calling thread. - */ - static void yield() - { - version( Win32 ) - { - // NOTE: Sleep(1) is necessary because Sleep(0) does not give - // lower priority threads any timeslice, so looping on - // Sleep(0) could be resource-intensive in some cases. - Sleep( 1 ); - } - else version( Posix ) - { - sched_yield(); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Thread Accessors - //////////////////////////////////////////////////////////////////////////// - - - /** - * Provides a reference to the calling thread. - * - * Returns: - * The thread object representing the calling thread. The result of - * deleting this object is undefined. - */ - static Thread getThis() - { - // NOTE: This function may not be called until thread_init has - // completed. See thread_suspendAll for more information - // on why this might occur. - version( Win32 ) - { - return cast(Thread) TlsGetValue( sm_this ); - } - else version( Posix ) - { - return cast(Thread) pthread_getspecific( sm_this ); - } - } - - - /** - * Provides a list of all threads currently being tracked by the system. - * - * Returns: - * An array containing references to all threads currently being - * tracked by the system. The result of deleting any contained - * objects is undefined. - */ - static Thread[] getAll() - { - synchronized( slock ) - { - size_t pos = 0; - Thread[] buf = new Thread[sm_tlen]; - - foreach( Thread t; Thread ) - { - buf[pos++] = t; - } - return buf; - } - } - - - /** - * Operates on all threads currently being tracked by the system. The - * result of deleting any Thread object is undefined. - * - * Params: - * - * dg = The supplied code as a delegate. - * - * Returns: - * Zero if all elemented are visited, nonzero if not. - */ - static int opApply( int delegate( inout Thread ) dg ) - { - synchronized( slock ) - { - int ret = 0; - - for( Thread t = sm_tbeg; t; t = t.next ) - { - ret = dg( t ); - if( ret ) - break; - } - return ret; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Local Storage Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Indicates the number of local storage pointers available at program - * startup. It is recommended that this number be at least 64. - */ - static const uint LOCAL_MAX = 64; - - - /** - * Reserves a local storage pointer for use and initializes this - * location to null for all running threads. - * - * Returns: - * A key representing the array offset of this memory location. - */ - static uint createLocal() - { - synchronized( slock ) - { - foreach( uint key, inout bool set; sm_local ) - { - if( !set ) - { - //foreach( Thread t; sm_tbeg ) Bug in GDC 0.24 SVN (r139) - for( Thread t = sm_tbeg; t; t = t.next ) - { - t.m_local[key] = null; - } - set = true; - return key; - } - } - throw new ThreadException( "No more local storage slots available" ); - } - } - - - /** - * Marks the supplied key as available and sets the associated location - * to null for all running threads. It is assumed that any key passed - * to this function is valid. The result of calling this function for - * a key which is still in use is undefined. - * - * Params: - * key = The key to delete. - */ - static void deleteLocal( uint key ) - { - synchronized( slock ) - { - sm_local[key] = false; - // foreach( Thread t; sm_tbeg ) Bug in GDC 0.24 SVN (r139) - for( Thread t = sm_tbeg; t; t = t.next ) - { - t.m_local[key] = null; - } - } - } - - - /** - * Gets the data associated with the supplied key value. It is assumed - * that any key passed to this function is valid. - * - * Params: - * key = The location which holds the desired data. - * - * Returns: - * The data associated with the supplied key. - */ - static void* getLocal( uint key ) - { - return getThis().m_local[key]; - } - - - /** - * Stores the supplied value in the specified location. It is assumed - * that any key passed to this function is valid. - * - * Params: - * key = The location to store the supplied data. - * val = The data to store. - * - * Returns: - * A copy of the data which has just been stored. - */ - static void* setLocal( uint key, void* val ) - { - return getThis().m_local[key] = val; - } - - - //////////////////////////////////////////////////////////////////////////// - // Static Initalizer - //////////////////////////////////////////////////////////////////////////// - - - /** - * This initializer is used to set thread constants. All functional - * initialization occurs within thread_init(). - */ - static this() - { - version( Win32 ) - { - PRIORITY_MIN = -15; - PRIORITY_MAX = 15; - } - else version( Posix ) - { - int policy; - sched_param param; - pthread_t self = pthread_self(); - - int status = pthread_getschedparam( self, &policy, ¶m ); - assert( status == 0 ); - - PRIORITY_MIN = sched_get_priority_min( policy ); - assert( PRIORITY_MIN != -1 ); - - PRIORITY_MAX = sched_get_priority_max( policy ); - assert( PRIORITY_MAX != -1 ); - } - } - - -private: - // - // Initializes a thread object which has no associated executable function. - // This is used for the main thread initialized in thread_init(). - // - this() - { - m_call = Call.NO; - m_curr = &m_main; - } - - - // - // Thread entry point. Invokes the function or delegate passed on - // construction (if any). - // - final void run() - { - switch( m_call ) - { - case Call.FN: - m_fn(); - break; - case Call.DG: - m_dg(); - break; - default: - break; - } - } - - -private: - // - // The type of routine passed on thread construction. - // - enum Call - { - NO, - FN, - DG - } - - - // - // Standard types - // - version( Win32 ) - { - alias uint TLSKey; - alias uint ThreadAddr; - } - else version( Posix ) - { - alias pthread_key_t TLSKey; - alias pthread_t ThreadAddr; - } - - - // - // Local storage - // - static bool[LOCAL_MAX] sm_local; - static TLSKey sm_this; - - void*[LOCAL_MAX] m_local; - - - // - // Standard thread data - // - version( Win32 ) - { - HANDLE m_hndl; - } - ThreadAddr m_addr; - Call m_call; - char[] m_name; - union - { - void function() m_fn; - void delegate() m_dg; - } - size_t m_sz; - version( Posix ) - { - bool m_isRunning; - } - bool m_isDaemon; - Object m_unhandled; - - -private: - //////////////////////////////////////////////////////////////////////////// - // Storage of Active Thread - //////////////////////////////////////////////////////////////////////////// - - - // - // Sets a thread-local reference to the current thread object. - // - static void setThis( Thread t ) - { - version( Win32 ) - { - TlsSetValue( sm_this, cast(void*) t ); - } - else version( Posix ) - { - pthread_setspecific( sm_this, cast(void*) t ); - } - } - - -private: - //////////////////////////////////////////////////////////////////////////// - // Thread Context and GC Scanning Support - //////////////////////////////////////////////////////////////////////////// - - - final void pushContext( Context* c ) - in - { - assert( !c.within ); - } - body - { - c.within = m_curr; - m_curr = c; - } - - - final void popContext() - in - { - assert( m_curr && m_curr.within ); - } - body - { - Context* c = m_curr; - m_curr = c.within; - c.within = null; - } - - - final Context* topContext() - in - { - assert( m_curr ); - } - body - { - return m_curr; - } - - - static struct Context - { - void* bstack, - tstack; - Context* within; - Context* next, - prev; - } - - - Context m_main; - Context* m_curr; - bool m_lock; - - version( Win32 ) - { - uint[8] m_reg; // edi,esi,ebp,esp,ebx,edx,ecx,eax - } - - -private: - //////////////////////////////////////////////////////////////////////////// - // GC Scanning Support - //////////////////////////////////////////////////////////////////////////// - - - // NOTE: The GC scanning process works like so: - // - // 1. Suspend all threads. - // 2. Scan the stacks of all suspended threads for roots. - // 3. Resume all threads. - // - // Step 1 and 3 require a list of all threads in the system, while - // step 2 requires a list of all thread stacks (each represented by - // a Context struct). Traditionally, there was one stack per thread - // and the Context structs were not necessary. However, Fibers have - // changed things so that each thread has its own 'main' stack plus - // an arbitrary number of nested stacks (normally referenced via - // m_curr). Also, there may be 'free-floating' stacks in the system, - // which are Fibers that are not currently executing on any specific - // thread but are still being processed and still contain valid - // roots. - // - // To support all of this, the Context struct has been created to - // represent a stack range, and a global list of Context structs has - // been added to enable scanning of these stack ranges. The lifetime - // (and presence in the Context list) of a thread's 'main' stack will - // be equivalent to the thread's lifetime. So the Ccontext will be - // added to the list on thread entry, and removed from the list on - // thread exit (which is essentially the same as the presence of a - // Thread object in its own global list). The lifetime of a Fiber's - // context, however, will be tied to the lifetime of the Fiber object - // itself, and Fibers are expected to add/remove their Context struct - // on construction/deletion. - - - // - // All use of the global lists should synchronize on this lock. - // - static Object slock() - { - return Thread.classinfo; - } - - - static Context* sm_cbeg; - static size_t sm_clen; - - static Thread sm_tbeg; - static size_t sm_tlen; - - // - // Used for ordering threads in the global thread list. - // - Thread prev; - Thread next; - - - //////////////////////////////////////////////////////////////////////////// - // Global Context List Operations - //////////////////////////////////////////////////////////////////////////// - - - // - // Add a context to the global context list. - // - static void add( Context* c ) - in - { - assert( c ); - assert( !c.next && !c.prev ); - } - body - { - synchronized( slock ) - { - if( sm_cbeg ) - { - c.next = sm_cbeg; - sm_cbeg.prev = c; - } - sm_cbeg = c; - ++sm_clen; - } - } - - - // - // Remove a context from the global context list. - // - static void remove( Context* c ) - in - { - assert( c ); - assert( c.next || c.prev ); - } - body - { - synchronized( slock ) - { - if( c.prev ) - c.prev.next = c.next; - if( c.next ) - c.next.prev = c.prev; - if( sm_cbeg == c ) - sm_cbeg = c.next; - --sm_clen; - } - // NOTE: Don't null out c.next or c.prev because opApply currently - // follows c.next after removing a node. This could be easily - // addressed by simply returning the next node from this function, - // however, a context should never be re-added to the list anyway - // and having next and prev be non-null is a good way to - // ensure that. - } - - - //////////////////////////////////////////////////////////////////////////// - // Global Thread List Operations - //////////////////////////////////////////////////////////////////////////// - - - // - // Add a thread to the global thread list. - // - static void add( Thread t ) - in - { - assert( t ); - assert( !t.next && !t.prev ); - assert( t.isRunning ); - } - body - { - synchronized( slock ) - { - if( sm_tbeg ) - { - t.next = sm_tbeg; - sm_tbeg.prev = t; - } - sm_tbeg = t; - ++sm_tlen; - } - } - - - // - // Remove a thread from the global thread list. - // - static void remove( Thread t ) - in - { - assert( t ); - assert( t.next || t.prev ); - version( Win32 ) - { - // NOTE: This doesn't work for Posix as m_isRunning must be set to - // false after the thread is removed during normal execution. - assert( !t.isRunning ); - } - } - body - { - synchronized( slock ) - { - // NOTE: When a thread is removed from the global thread list its - // main context is invalid and should be removed as well. - // It is possible that t.m_curr could reference more - // than just the main context if the thread exited abnormally - // (if it was terminated), but we must assume that the user - // retains a reference to them and that they may be re-used - // elsewhere. Therefore, it is the responsibility of any - // object that creates contexts to clean them up properly - // when it is done with them. - remove( &t.m_main ); - - if( t.prev ) - t.prev.next = t.next; - if( t.next ) - t.next.prev = t.prev; - if( sm_tbeg == t ) - sm_tbeg = t.next; - --sm_tlen; - } - // NOTE: Don't null out t.next or t.prev because opApply currently - // follows t.next after removing a node. This could be easily - // addressed by simply returning the next node from this function, - // however, a thread should never be re-added to the list anyway - // and having next and prev be non-null is a good way to - // ensure that. - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// GC Support Routines -//////////////////////////////////////////////////////////////////////////////// - - -/** - * Initializes the thread module. This function must be called by the - * garbage collector on startup and before any other thread routines - * are called. - */ -extern (C) void thread_init() -{ - // NOTE: If thread_init itself performs any allocations then the thread - // routines reserved for garbage collector use may be called while - // thread_init is being processed. However, since no memory should - // exist to be scanned at this point, it is sufficient for these - // functions to detect the condition and return immediately. - - version( Win32 ) - { - Thread.sm_this = TlsAlloc(); - assert( Thread.sm_this != TLS_OUT_OF_INDEXES ); - } - else version( Posix ) - { - int status; - sigaction_t sigusr1 = void; - sigaction_t sigusr2 = void; - - // This is a quick way to zero-initialize the structs without using - // memset or creating a link dependency on their static initializer. - (cast(byte*) &sigusr1)[0 .. sigaction_t.sizeof] = 0; - (cast(byte*) &sigusr2)[0 .. sigaction_t.sizeof] = 0; - - // NOTE: SA_RESTART indicates that system calls should restart if they - // are interrupted by a signal, but this is not available on all - // Posix systems, even those that support multithreading. - static if( is( typeof( SA_RESTART ) ) ) - sigusr1.sa_flags = SA_RESTART; - else - sigusr1.sa_flags = 0; - sigusr1.sa_handler = &thread_suspendHandler; - // NOTE: We want to ignore all signals while in this handler, so fill - // sa_mask to indicate this. - status = sigfillset( &sigusr1.sa_mask ); - assert( status == 0 ); - - // NOTE: Since SIGUSR2 should only be issued for threads within the - // suspend handler, we don't want this signal to trigger a - // restart. - sigusr2.sa_flags = 0; - sigusr2.sa_handler = &thread_resumeHandler; - // NOTE: We want to ignore all signals while in this handler, so fill - // sa_mask to indicate this. - status = sigfillset( &sigusr2.sa_mask ); - assert( status == 0 ); - - status = sigaction( SIGUSR1, &sigusr1, null ); - assert( status == 0 ); - - status = sigaction( SIGUSR2, &sigusr2, null ); - assert( status == 0 ); - - status = sem_init( &suspendCount, 0, 0 ); - assert( status == 0 ); - - status = pthread_key_create( &Thread.sm_this, null ); - assert( status == 0 ); - } - - thread_attachThis(); -} - - -/** - * Registers the calling thread for use with Tango. If this routine is called - * for a thread which is already registered, the result is undefined. - */ -extern (C) void thread_attachThis() -{ - version( Win32 ) - { - Thread thisThread = new Thread(); - Thread.Context* thisContext = &thisThread.m_main; - assert( thisContext == thisThread.m_curr ); - - thisThread.m_addr = GetCurrentThreadId(); - thisThread.m_hndl = GetCurrentThreadHandle(); - thisContext.bstack = getStackBottom(); - thisContext.tstack = thisContext.bstack; - - thisThread.m_isDaemon = true; - - Thread.setThis( thisThread ); - } - else version( Posix ) - { - Thread thisThread = new Thread(); - Thread.Context* thisContext = thisThread.m_curr; - assert( thisContext == &thisThread.m_main ); - - thisThread.m_addr = pthread_self(); - thisContext.bstack = getStackBottom(); - thisContext.tstack = thisContext.bstack; - - thisThread.m_isRunning = true; - thisThread.m_isDaemon = true; - - Thread.setThis( thisThread ); - } - - Thread.add( thisThread ); - Thread.add( thisContext ); -} - - -/** - * Deregisters the calling thread from use with Tango. If this routine is - * called for a thread which is already registered, the result is undefined. - */ -extern (C) void thread_detachThis() -{ - Thread.remove( Thread.getThis() ); -} - - -/** - * Joins all non-daemon threads that are currently running. This is done by - * performing successive scans through the thread list until a scan consists - * of only daemon threads. - */ -extern (C) void thread_joinAll() -{ - - while( true ) - { - Thread nonDaemon = null; - - foreach( t; Thread ) - { - if( !t.isDaemon ) - { - nonDaemon = t; - break; - } - } - if( nonDaemon is null ) - return; - nonDaemon.join(); - } -} - - -/** - * Performs intermediate shutdown of the thread module. - */ -static ~this() -{ - // NOTE: The functionality related to garbage collection must be minimally - // operable after this dtor completes. Therefore, only minimal - // cleanup may occur. - - for( Thread t = Thread.sm_tbeg; t; t = t.next ) - { - if( !t.isRunning ) - Thread.remove( t ); - } -} - - -// Used for needLock below -private bool multiThreadedFlag = false; - - -/** - * This function is used to determine whether the the process is - * multi-threaded. Optimizations may only be performed on this - * value if the programmer can guarantee that no path from the - * enclosed code will start a thread. - * - * Returns: - * True if Thread.start() has been called in this process. - */ -extern (C) bool thread_needLock() -{ - return multiThreadedFlag; -} - - -// Used for suspendAll/resumeAll below -private uint suspendDepth = 0; - - -/** - * Suspend all threads but the calling thread for "stop the world" garbage - * collection runs. This function may be called multiple times, and must - * be followed by a matching number of calls to thread_resumeAll before - * processing is resumed. - * - * Throws: - * ThreadException if the suspend operation fails for a running thread. - */ -extern (C) void thread_suspendAll() -{ - /** - * Suspend the specified thread and load stack and register information for - * use by thread_scanAll. If the supplied thread is the calling thread, - * stack and register information will be loaded but the thread will not - * be suspended. If the suspend operation fails and the thread is not - * running then it will be removed from the global thread list, otherwise - * an exception will be thrown. - * - * Params: - * t = The thread to suspend. - * - * Throws: - * ThreadException if the suspend operation fails for a running thread. - */ - void suspend( Thread t ) - { - version( Win32 ) - { - if( t.m_addr != GetCurrentThreadId() && SuspendThread( t.m_hndl ) == 0xFFFFFFFF ) - { - if( !t.isRunning ) - { - Thread.remove( t ); - return; - } - throw new ThreadException( "Unable to suspend thread" ); - } - - CONTEXT context = void; - context.ContextFlags = CONTEXT_INTEGER | CONTEXT_CONTROL; - - if( !GetThreadContext( t.m_hndl, &context ) ) - throw new ThreadException( "Unable to load thread context" ); - if( !t.m_lock ) - t.m_curr.tstack = cast(void*) context.Esp; - // edi,esi,ebp,esp,ebx,edx,ecx,eax - t.m_reg[0] = context.Edi; - t.m_reg[1] = context.Esi; - t.m_reg[2] = context.Ebp; - t.m_reg[3] = context.Esp; - t.m_reg[4] = context.Ebx; - t.m_reg[5] = context.Edx; - t.m_reg[6] = context.Ecx; - t.m_reg[7] = context.Eax; - } - else version( Posix ) - { - if( t.m_addr != pthread_self() ) - { - if( pthread_kill( t.m_addr, SIGUSR1 ) != 0 ) - { - if( !t.isRunning ) - { - Thread.remove( t ); - return; - } - throw new ThreadException( "Unable to suspend thread" ); - } - // NOTE: It's really not ideal to wait for each thread to signal - // individually -- rather, it would be better to suspend - // them all and wait once at the end. However, semaphores - // don't really work this way, and the obvious alternative - // (looping on an atomic suspend count) requires either - // the atomic module (which only works on x86) or other - // specialized functionality. It would also be possible - // to simply loop on sem_wait at the end, but I'm not - // convinced that this would be much faster than the - // current approach. - sem_wait( &suspendCount ); - } - else if( !t.m_lock ) - { - t.m_curr.tstack = getStackTop(); - } - } - } - - - // NOTE: We've got an odd chicken & egg problem here, because while the GC - // is required to call thread_init before calling any other thread - // routines, thread_init may allocate memory which could in turn - // trigger a collection. Thus, thread_suspendAll, thread_scanAll, - // and thread_resumeAll must be callable before thread_init completes, - // with the assumption that no other GC memory has yet been allocated - // by the system, and thus there is no risk of losing data if the - // global thread list is empty. The check of Thread.sm_tbeg - // below is done to ensure thread_init has completed, and therefore - // that calling Thread.getThis will not result in an error. For the - // short time when Thread.sm_tbeg is null, there is no reason - // not to simply call the multithreaded code below, with the - // expectation that the foreach loop will never be entered. - if( !multiThreadedFlag && Thread.sm_tbeg ) - { - if( ++suspendDepth == 1 ) - suspend( Thread.getThis() ); - return; - } - synchronized( Thread.slock ) - { - if( ++suspendDepth > 1 ) - return; - - // NOTE: I'd really prefer not to check isRunning within this loop but - // not doing so could be problematic if threads are termianted - // abnormally and a new thread is created with the same thread - // address before the next GC run. This situation might cause - // the same thread to be suspended twice, which would likely - // cause the second suspend to fail, the garbage collection to - // abort, and Bad Things to occur. - for( Thread t = Thread.sm_tbeg; t; t = t.next ) - { - if( t.isRunning ) - suspend( t ); - else - Thread.remove( t ); - } - - version( Posix ) - { - // wait on semaphore -- see note in suspend for - // why this is currently not implemented - } - } -} - - -/** - * Resume all threads but the calling thread for "stop the world" garbage - * collection runs. This function must be called once for each preceding - * call to thread_suspendAll before the threads are actually resumed. - * - * In: - * This routine must be preceded by a call to thread_suspendAll. - * - * Throws: - * ThreadException if the resume operation fails for a running thread. - */ -extern (C) void thread_resumeAll() -in -{ - assert( suspendDepth > 0 ); -} -body -{ - /** - * Resume the specified thread and unload stack and register information. - * If the supplied thread is the calling thread, stack and register - * information will be unloaded but the thread will not be resumed. If - * the resume operation fails and the thread is not running then it will - * be removed from the global thread list, otherwise an exception will be - * thrown. - * - * Params: - * t = The thread to resume. - * - * Throws: - * ThreadException if the resume fails for a running thread. - */ - void resume( Thread t ) - { - version( Win32 ) - { - if( t.m_addr != GetCurrentThreadId() && ResumeThread( t.m_hndl ) == 0xFFFFFFFF ) - { - if( !t.isRunning ) - { - Thread.remove( t ); - return; - } - throw new ThreadException( "Unable to resume thread" ); - } - - if( !t.m_lock ) - t.m_curr.tstack = t.m_curr.bstack; - t.m_reg[0 .. $] = 0; - } - else version( Posix ) - { - if( t.m_addr != pthread_self() ) - { - if( pthread_kill( t.m_addr, SIGUSR2 ) != 0 ) - { - if( !t.isRunning ) - { - Thread.remove( t ); - return; - } - throw new ThreadException( "Unable to resume thread" ); - } - } - else if( !t.m_lock ) - { - t.m_curr.tstack = t.m_curr.bstack; - } - } - } - - - // NOTE: See thread_suspendAll for the logic behind this. - if( !multiThreadedFlag && Thread.sm_tbeg ) - { - if( --suspendDepth == 0 ) - resume( Thread.getThis() ); - return; - } - synchronized( Thread.slock ) - { - if( --suspendDepth > 0 ) - return; - - for( Thread t = Thread.sm_tbeg; t; t = t.next ) - { - resume( t ); - } - } -} - - -private alias void delegate( void*, void* ) scanAllThreadsFn; - - -/** - * The main entry point for garbage collection. The supplied delegate - * will be passed ranges representing both stack and register values. - * - * Params: - * scan = The scanner function. It should scan from p1 through p2 - 1. - * curStackTop = An optional pointer to the top of the calling thread's stack. - * - * In: - * This routine must be preceded by a call to thread_suspendAll. - */ -extern (C) void thread_scanAll( scanAllThreadsFn scan, void* curStackTop = null ) -in -{ - assert( suspendDepth > 0 ); -} -body -{ - Thread thisThread = null; - void* oldStackTop = null; - - if( curStackTop && Thread.sm_tbeg ) - { - thisThread = Thread.getThis(); - if( !thisThread.m_lock ) - { - oldStackTop = thisThread.m_curr.tstack; - thisThread.m_curr.tstack = curStackTop; - } - } - - scope( exit ) - { - if( curStackTop && Thread.sm_tbeg ) - { - if( !thisThread.m_lock ) - { - thisThread.m_curr.tstack = oldStackTop; - } - } - } - - // NOTE: Synchronizing on Thread.slock is not needed because this - // function may only be called after all other threads have - // been suspended from within the same lock. - for( Thread.Context* c = Thread.sm_cbeg; c; c = c.next ) - { - version( StackGrowsDown ) - { - // NOTE: We can't index past the bottom of the stack - // so don't do the "+1" for StackGrowsDown. - if( c.tstack && c.tstack < c.bstack ) - scan( c.tstack, c.bstack ); - } - else - { - if( c.bstack && c.bstack < c.tstack ) - scan( c.bstack, c.tstack + 1 ); - } - } - version( Win32 ) - { - for( Thread t = Thread.sm_tbeg; t; t = t.next ) - { - scan( &t.m_reg[0], &t.m_reg[0] + t.m_reg.length ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Thread Local -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class encapsulates the operations required to initialize, access, and - * destroy thread local data. - */ -class ThreadLocal( T ) -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes thread local storage for the indicated value which will be - * initialized to def for all threads. - * - * Params: - * def = The default value to return if no value has been explicitly set. - */ - this( T def = T.init ) - { - m_def = def; - m_key = Thread.createLocal(); - } - - - ~this() - { - Thread.deleteLocal( m_key ); - } - - - //////////////////////////////////////////////////////////////////////////// - // Accessors - //////////////////////////////////////////////////////////////////////////// - - - /** - * Gets the value last set by the calling thread, or def if no such value - * has been set. - * - * Returns: - * The stored value or def if no value is stored. - */ - T val() - { - Wrap* wrap = cast(Wrap*) Thread.getLocal( m_key ); - - return wrap ? wrap.val : m_def; - } - - - /** - * Copies newval to a location specific to the calling thread, and returns - * newval. - * - * Params: - * newval = The value to set. - * - * Returns: - * The value passed to this function. - */ - T val( T newval ) - { - Wrap* wrap = cast(Wrap*) Thread.getLocal( m_key ); - - if( wrap is null ) - { - wrap = new Wrap; - Thread.setLocal( m_key, wrap ); - } - wrap.val = newval; - return newval; - } - - -private: - // - // A wrapper for the stored data. This is needed for determining whether - // set has ever been called for this thread (and therefore whether the - // default value should be returned) and also to flatten the differences - // between data that is smaller and larger than (void*).sizeof. The - // obvious tradeoff here is an extra per-thread allocation for each - // ThreadLocal value as compared to calling the Thread routines directly. - // - struct Wrap - { - T val; - } - - - T m_def; - uint m_key; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Thread Group -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class is intended to simplify certain common programming techniques. - */ -class ThreadGroup -{ - /** - * Creates and starts a new Thread object that executes fn and adds it to - * the list of tracked threads. - * - * Params: - * fn = The thread function. - * - * Returns: - * A reference to the newly created thread. - */ - final Thread create( void function() fn ) - { - Thread t = new Thread( fn ); - - t.start(); - synchronized - { - m_all[t] = t; - } - return t; - } - - - /** - * Creates and starts a new Thread object that executes dg and adds it to - * the list of tracked threads. - * - * Params: - * dg = The thread function. - * - * Returns: - * A reference to the newly created thread. - */ - final Thread create( void delegate() dg ) - { - Thread t = new Thread( dg ); - - t.start(); - synchronized - { - m_all[t] = t; - } - return t; - } - - - /** - * Add t to the list of tracked threads if it is not already being tracked. - * - * Params: - * t = The thread to add. - * - * In: - * t must not be null. - */ - final void add( Thread t ) - in - { - assert( t ); - } - body - { - synchronized - { - m_all[t] = t; - } - } - - - /** - * Removes t from the list of tracked threads. No operation will be - * performed if t is not currently being tracked by this object. - * - * Params: - * t = The thread to remove. - * - * In: - * t must not be null. - */ - final void remove( Thread t ) - in - { - assert( t ); - } - body - { - synchronized - { - m_all.remove( t ); - } - } - - - /** - * Operates on all threads currently tracked by this object. - */ - final int opApply( int delegate( inout Thread ) dg ) - { - synchronized - { - int ret = 0; - - // NOTE: This loop relies on the knowledge that m_all uses the - // Thread object for both the key and the mapped value. - foreach( Thread t; m_all.keys ) - { - ret = dg( t ); - if( ret ) - break; - } - return ret; - } - } - - - /** - * Iteratively joins all tracked threads. This function will block add, - * remove, and opApply until it completes. - * - * Params: - * rethrow = Rethrow any unhandled exception which may have caused the - * current thread to terminate. - * - * Throws: - * Any exception not handled by the joined threads. - */ - final void joinAll( bool rethrow = true ) - { - synchronized - { - // NOTE: This loop relies on the knowledge that m_all uses the - // Thread object for both the key and the mapped value. - foreach( Thread t; m_all.keys ) - { - t.join( rethrow ); - } - } - } - - -private: - Thread[Thread] m_all; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Fiber Platform Detection and Memory Allocation -//////////////////////////////////////////////////////////////////////////////// - - -private -{ - version( D_InlineAsm_X86 ) - { - version( LLVMDC ) - { - } - else version( X86_64 ) - { - - } - else - { - version( Win32 ) - version = AsmX86_Win32; - else version( Posix ) - version = AsmX86_Posix; - } - } - else version( PPC ) - { - version( Posix ) - version = AsmPPC_Posix; - } - - - version( Posix ) - { - import tango.stdc.posix.unistd; // for sysconf - import tango.stdc.posix.sys.mman; // for mmap - import tango.stdc.posix.stdlib; // for malloc, valloc, free - - version( AsmX86_Win32 ) {} else - version( AsmX86_Posix ) {} else - version( AsmPPC_Posix ) {} else - { - // NOTE: The ucontext implementation requires architecture specific - // data definitions to operate so testing for it must be done - // by checking for the existence of ucontext_t rather than by - // a version identifier. Please note that this is considered - // an obsolescent feature according to the POSIX spec, so a - // custom solution is still preferred. - import tango.stdc.posix.ucontext; - } - } - - const size_t PAGESIZE; -} - - -static this() -{ - static if( is( typeof( GetSystemInfo ) ) ) - { - SYSTEM_INFO info; - GetSystemInfo( &info ); - - PAGESIZE = info.dwPageSize; - assert( PAGESIZE < int.max ); - } - else static if( is( typeof( sysconf ) ) && - is( typeof( _SC_PAGESIZE ) ) ) - { - PAGESIZE = cast(typeof(PAGESIZE))sysconf( _SC_PAGESIZE ); - assert( PAGESIZE < int.max ); - } - else - { - version( PPC ) - PAGESIZE = 8192; - else - PAGESIZE = 4096; - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Fiber Entry Point and Context Switch -//////////////////////////////////////////////////////////////////////////////// - - -private -{ - extern (C) void fiber_entryPoint() - { - Fiber obj = Fiber.getThis(); - assert( obj ); - - assert( Thread.getThis().m_curr is obj.m_ctxt ); - volatile Thread.getThis().m_lock = false; - obj.m_ctxt.tstack = obj.m_ctxt.bstack; - obj.m_state = Fiber.State.EXEC; - - try - { - obj.run(); - } - catch( Object o ) - { - obj.m_unhandled = o; - } - - static if( is( typeof( ucontext_t ) ) ) - obj.m_ucur = &obj.m_utxt; - - obj.m_state = Fiber.State.TERM; - obj.switchOut(); - } - - - // NOTE: If AsmPPC_Posix is defined then the context switch routine will - // be defined externally until GDC supports inline PPC ASM. - version( AsmPPC_Posix ) - extern (C) void fiber_switchContext( void** oldp, void* newp ); - else - extern (C) void fiber_switchContext( void** oldp, void* newp ) - { - // NOTE: The data pushed and popped in this routine must match the - // default stack created by Fiber.initStack or the initial - // switch into a new context will fail. - - version( AsmX86_Win32 ) - { - asm - { - naked; - - // save current stack state - push EBP; - mov EBP, ESP; - push EAX; - push dword ptr FS:[0]; - push dword ptr FS:[4]; - push dword ptr FS:[8]; - push EBX; - push ESI; - push EDI; - - // store oldp again with more accurate address - mov EAX, dword ptr 8[EBP]; - mov [EAX], ESP; - // load newp to begin context switch - mov ESP, dword ptr 12[EBP]; - - // load saved state from new stack - pop EDI; - pop ESI; - pop EBX; - pop dword ptr FS:[8]; - pop dword ptr FS:[4]; - pop dword ptr FS:[0]; - pop EAX; - pop EBP; - - // 'return' to complete switch - ret; - } - } - else version( AsmX86_Posix ) - { - asm - { - naked; - - // save current stack state - push EBP; - mov EBP, ESP; - push EAX; - push EBX; - push ESI; - push EDI; - - // store oldp again with more accurate address - mov EAX, dword ptr 8[EBP]; - mov [EAX], ESP; - // load newp to begin context switch - mov ESP, dword ptr 12[EBP]; - - // load saved state from new stack - pop EDI; - pop ESI; - pop EBX; - pop EAX; - pop EBP; - - // 'return' to complete switch - ret; - } - } - else static if( is( typeof( ucontext_t ) ) ) - { - Fiber cfib = Fiber.getThis(); - void* ucur = cfib.m_ucur; - - *oldp = &ucur; - swapcontext( **(cast(ucontext_t***) oldp), - *(cast(ucontext_t**) newp) ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Fiber -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class provides a cooperative concurrency mechanism integrated with the - * threading and garbage collection functionality. Calling a fiber may be - * considered a blocking operation that returns when the fiber yields (via - * Fiber.yield()). Execution occurs within the context of the calling thread - * so synchronization is not necessary to guarantee memory visibility so long - * as the same thread calls the fiber each time. Please note that there is no - * requirement that a fiber be bound to one specific thread. Rather, fibers - * may be freely passed between threads so long as they are not currently - * executing. Like threads, a new fiber thread may be created using either - * derivation or composition, as in the following example. - * - * Example: - * ---------------------------------------------------------------------- - * - * class DerivedFiber : Fiber - * { - * this() - * { - * super( &run ); - * } - * - * private : - * void run() - * { - * printf( "Derived fiber running.\n" ); - * } - * } - * - * void fiberFunc() - * { - * printf( "Composed fiber running.\n" ); - * Fiber.yield(); - * printf( "Composed fiber running.\n" ); - * } - * - * // create instances of each type - * Fiber derived = new DerivedFiber(); - * Fiber composed = new Fiber( &fiberFunc ); - * - * // call both fibers once - * derived.call(); - * composed.call(); - * printf( "Execution returned to calling context.\n" ); - * composed.call(); - * - * // since each fiber has run to completion, each should have state TERM - * assert( derived.state == Fiber.State.TERM ); - * assert( composed.state == Fiber.State.TERM ); - * - * ---------------------------------------------------------------------- - * - * Authors: Based on a design by Mikola Lysenko. - */ -class Fiber -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a fiber object which is associated with a static - * D function. - * - * Params: - * fn = The thread function. - * sz = The stack size for this fiber. - * - * In: - * fn must not be null. - */ - this( void function() fn, size_t sz = PAGESIZE ) - in - { - assert( fn ); - } - body - { - m_fn = fn; - m_call = Call.FN; - m_state = State.HOLD; - allocStack( sz ); - initStack(); - } - - - /** - * Initializes a fiber object which is associated with a dynamic - * D function. - * - * Params: - * dg = The thread function. - * sz = The stack size for this fiber. - * - * In: - * dg must not be null. - */ - this( void delegate() dg, size_t sz = PAGESIZE ) - in - { - assert( dg ); - } - body - { - m_dg = dg; - m_call = Call.DG; - m_state = State.HOLD; - allocStack( sz ); - initStack(); - } - - - /** - * Cleans up any remaining resources used by this object. - */ - ~this() - { - // NOTE: A live reference to this object will exist on its associated - // stack from the first time its call() method has been called - // until its execution completes with State.TERM. Thus, the only - // times this dtor should be called are either if the fiber has - // terminated (and therefore has no active stack) or if the user - // explicitly deletes this object. The latter case is an error - // but is not easily tested for, since State.HOLD may imply that - // the fiber was just created but has never been run. There is - // not a compelling case to create a State.INIT just to offer a - // means of ensuring the user isn't violating this object's - // contract, so for now this requirement will be enforced by - // documentation only. - freeStack(); - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Transfers execution to this fiber object. The calling context will be - * suspended until the fiber calls Fiber.yield() or until it terminates - * via an unhandled exception. - * - * Params: - * rethrow = Rethrow any unhandled exception which may have caused this - * fiber to terminate. - * - * In: - * This fiber must be in state HOLD. - * - * Throws: - * Any exception not handled by the joined thread. - */ - final void call( bool rethrow = true ) - in - { - assert( m_state == State.HOLD ); - } - body - { - Fiber cur = getThis(); - - static if( is( typeof( ucontext_t ) ) ) - m_ucur = cur ? &cur.m_utxt : &Fiber.sm_utxt; - - setThis( this ); - this.switchIn(); - setThis( cur ); - - static if( is( typeof( ucontext_t ) ) ) - m_ucur = null; - - // NOTE: If the fiber has terminated then the stack pointers must be - // reset. This ensures that the stack for this fiber is not - // scanned if the fiber has terminated. This is necessary to - // prevent any references lingering on the stack from delaying - // the collection of otherwise dead objects. The most notable - // being the current object, which is referenced at the top of - // fiber_entryPoint. - if( m_state == State.TERM ) - { - m_ctxt.tstack = m_ctxt.bstack; - } - if( m_unhandled ) - { - Object obj = m_unhandled; - m_unhandled = null; - if( rethrow ) - { - throw obj; - } - } - } - - - /** - * Resets this fiber so that it may be re-used. This routine may only be - * called for fibers that have terminated, as doing otherwise could result - * in scope-dependent functionality that is not executed. Stack-based - * classes, for example, may not be cleaned up properly if a fiber is reset - * before it has terminated. - * - * In: - * This fiber must be in state TERM. - */ - final void reset() - in - { - assert( m_state == State.TERM ); - assert( m_ctxt.tstack == m_ctxt.bstack ); - } - body - { - m_state = State.HOLD; - initStack(); - m_unhandled = null; - } - - - //////////////////////////////////////////////////////////////////////////// - // General Properties - //////////////////////////////////////////////////////////////////////////// - - - /** - * A fiber may occupy one of three states: HOLD, EXEC, and TERM. The HOLD - * state applies to any fiber that is suspended and ready to be called. - * The EXEC state will be set for any fiber that is currently executing. - * And the TERM state is set when a fiber terminates. Once a fiber - * terminates, it must be reset before it may be called again. - */ - enum State - { - HOLD, /// - EXEC, /// - TERM /// - } - - - /** - * Gets the current state of this fiber. - * - * Returns: - * The state of this fiber as an enumerated value. - */ - final State state() - { - return m_state; - } - - - //////////////////////////////////////////////////////////////////////////// - // Actions on Calling Fiber - //////////////////////////////////////////////////////////////////////////// - - - /** - * Forces a context switch to occur away from the calling fiber. - */ - static void yield() - { - Fiber cur = getThis(); - assert( cur, "Fiber.yield() called with no active fiber" ); - assert( cur.m_state == State.EXEC ); - - static if( is( typeof( ucontext_t ) ) ) - cur.m_ucur = &cur.m_utxt; - - cur.m_state = State.HOLD; - cur.switchOut(); - cur.m_state = State.EXEC; - } - - - /** - * Forces a context switch to occur away from the calling fiber and then - * throws obj in the calling fiber. - * - * Params: - * obj = The object to throw. - * - * In: - * obj must not be null. - */ - static void yieldAndThrow( Object obj ) - in - { - assert( obj ); - } - body - { - Fiber cur = getThis(); - assert( cur, "Fiber.yield() called with no active fiber" ); - assert( cur.m_state == State.EXEC ); - - static if( is( typeof( ucontext_t ) ) ) - cur.m_ucur = &cur.m_utxt; - - cur.m_unhandled = obj; - cur.m_state = State.HOLD; - cur.switchOut(); - cur.m_state = State.EXEC; - } - - - //////////////////////////////////////////////////////////////////////////// - // Fiber Accessors - //////////////////////////////////////////////////////////////////////////// - - - /** - * Provides a reference to the calling fiber or null if no fiber is - * currently active. - * - * Returns: - * The fiber object representing the calling fiber or null if no fiber - * is currently active. The result of deleting this object is undefined. - */ - static Fiber getThis() - { - version( Win32 ) - { - return cast(Fiber) TlsGetValue( sm_this ); - } - else version( Posix ) - { - return cast(Fiber) pthread_getspecific( sm_this ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Static Initialization - //////////////////////////////////////////////////////////////////////////// - - - static this() - { - version( Win32 ) - { - sm_this = TlsAlloc(); - assert( sm_this != TLS_OUT_OF_INDEXES ); - } - else version( Posix ) - { - int status; - - status = pthread_key_create( &sm_this, null ); - assert( status == 0 ); - - static if( is( typeof( ucontext_t ) ) ) - { - status = getcontext( &sm_utxt ); - assert( status == 0 ); - } - } - } - - -private: - // - // Initializes a fiber object which has no associated executable function. - // - this() - { - m_call = Call.NO; - } - - - // - // Fiber entry point. Invokes the function or delegate passed on - // construction (if any). - // - final void run() - { - switch( m_call ) - { - case Call.FN: - m_fn(); - break; - case Call.DG: - m_dg(); - break; - default: - break; - } - } - - -private: - // - // The type of routine passed on fiber construction. - // - enum Call - { - NO, - FN, - DG - } - - - // - // Standard fiber data - // - Call m_call; - union - { - void function() m_fn; - void delegate() m_dg; - } - bool m_isRunning; - Object m_unhandled; - State m_state; - - -private: - //////////////////////////////////////////////////////////////////////////// - // Stack Management - //////////////////////////////////////////////////////////////////////////// - - - // - // Allocate a new stack for this fiber. - // - final void allocStack( size_t sz ) - in - { - assert( !m_pmem && !m_ctxt ); - } - body - { - // adjust alloc size to a multiple of PAGESIZE - sz += PAGESIZE - 1; - sz -= sz % PAGESIZE; - - // NOTE: This instance of Thread.Context is dynamic so Fiber objects - // can be collected by the GC so long as no user level references - // to the object exist. If m_ctxt were not dynamic then its - // presence in the global context list would be enough to keep - // this object alive indefinitely. An alternative to allocating - // room for this struct explicitly would be to mash it into the - // base of the stack being allocated below. However, doing so - // requires too much special logic to be worthwhile. - m_ctxt = new Thread.Context; - - static if( is( typeof( VirtualAlloc ) ) ) - { - // reserve memory for stack - m_pmem = VirtualAlloc( null, - sz + PAGESIZE, - MEM_RESERVE, - PAGE_NOACCESS ); - if( !m_pmem ) - { - throw new FiberException( "Unable to reserve memory for stack" ); - } - - version( StackGrowsDown ) - { - void* stack = m_pmem + PAGESIZE; - void* guard = m_pmem; - void* pbase = stack + sz; - } - else - { - void* stack = m_pmem; - void* guard = m_pmem + sz; - void* pbase = stack; - } - - // allocate reserved stack segment - stack = VirtualAlloc( stack, - sz, - MEM_COMMIT, - PAGE_READWRITE ); - if( !stack ) - { - throw new FiberException( "Unable to allocate memory for stack" ); - } - - // allocate reserved guard page - guard = VirtualAlloc( guard, - PAGESIZE, - MEM_COMMIT, - PAGE_READWRITE | PAGE_GUARD ); - if( !guard ) - { - throw new FiberException( "Unable to create guard page for stack" ); - } - - m_ctxt.bstack = pbase; - m_ctxt.tstack = pbase; - m_size = sz; - } - else - { static if( is( typeof( mmap ) ) ) - { - m_pmem = mmap( null, - sz, - PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_ANON, - -1, - 0 ); - if( m_pmem == MAP_FAILED ) - m_pmem = null; - } - else static if( is( typeof( valloc ) ) ) - { - m_pmem = valloc( sz ); - } - else static if( is( typeof( malloc ) ) ) - { - m_pmem = malloc( sz ); - } - else - { - m_pmem = null; - } - - if( !m_pmem ) - { - throw new FiberException( "Unable to allocate memory for stack" ); - } - - version( StackGrowsDown ) - { - m_ctxt.bstack = m_pmem + sz; - m_ctxt.tstack = m_pmem + sz; - } - else - { - m_ctxt.bstack = m_pmem; - m_ctxt.tstack = m_pmem; - } - m_size = sz; - } - - Thread.add( m_ctxt ); - } - - - // - // Free this fiber's stack. - // - final void freeStack() - in - { - assert( m_pmem && m_ctxt ); - } - body - { - // NOTE: Since this routine is only ever expected to be called from - // the dtor, pointers to freed data are not set to null. - - // NOTE: m_ctxt is guaranteed to be alive because it is held in the - // global context list. - Thread.remove( m_ctxt ); - - static if( is( typeof( VirtualAlloc ) ) ) - { - VirtualFree( m_pmem, 0, MEM_RELEASE ); - } - else static if( is( typeof( mmap ) ) ) - { - munmap( m_pmem, m_size ); - } - else static if( is( typeof( valloc ) ) ) - { - free( m_pmem ); - } - else static if( is( typeof( malloc ) ) ) - { - free( m_pmem ); - } - delete m_ctxt; - } - - - // - // Initialize the allocated stack. - // - final void initStack() - in - { - assert( m_ctxt.tstack && m_ctxt.tstack == m_ctxt.bstack ); - assert( cast(size_t) m_ctxt.bstack % (void*).sizeof == 0 ); - } - body - { - void* pstack = m_ctxt.tstack; - scope( exit ) m_ctxt.tstack = pstack; - - void push( size_t val ) - { - version( StackGrowsDown ) - { - pstack -= size_t.sizeof; - *(cast(size_t*) pstack) = val; - } - else - { - pstack += size_t.sizeof; - *(cast(size_t*) pstack) = val; - } - } - - // NOTE: On OS X the stack must be 16-byte aligned according to the - // IA-32 call spec. - version( darwin ) - { - pstack = cast(void*)(cast(uint)(pstack) - (cast(uint)(pstack) & 0x0F)); - } - - version( AsmX86_Win32 ) - { - push( cast(size_t) &fiber_entryPoint ); // EIP - push( 0xFFFFFFFF ); // EBP - push( 0x00000000 ); // EAX - push( 0xFFFFFFFF ); // FS:[0] - // BUG: Are the frame pointers the same for both versions? - version( StackGrowsDown ) - { - push( cast(size_t) m_ctxt.bstack ); // FS:[4] - push( cast(size_t) m_ctxt.bstack + m_size ); // FS:[8] - } - else - { - push( cast(size_t) m_ctxt.bstack ); // FS:[4] - push( cast(size_t) m_ctxt.bstack + m_size ); // FS:[8] - } - push( 0x00000000 ); // EBX - push( 0x00000000 ); // ESI - push( 0x00000000 ); // EDI - } - else version( AsmX86_Posix ) - { - push( cast(size_t) &fiber_entryPoint ); // EIP - push( 0x00000000 ); // EBP - push( 0x00000000 ); // EAX - push( 0x00000000 ); // EBX - push( 0x00000000 ); // ESI - push( 0x00000000 ); // EDI - } - else version( AsmPPC_Posix ) - { - version( StackGrowsDown ) - { - pstack -= int.sizeof * 5; - } - else - { - pstack += int.sizeof * 5; - } - - push( cast(size_t) &fiber_entryPoint ); // link register - push( 0x00000000 ); // control register - push( 0x00000000 ); // old stack pointer - - // GPR values - version( StackGrowsDown ) - { - pstack -= int.sizeof * 20; - } - else - { - pstack += int.sizeof * 20; - } - - assert( cast(uint) pstack & 0x0f == 0 ); - } - else static if( is( typeof( ucontext_t ) ) ) - { - getcontext( &m_utxt ); - m_utxt.uc_stack.ss_sp = m_ctxt.bstack; - m_utxt.uc_stack.ss_size = m_size; - makecontext( &m_utxt, &fiber_entryPoint, 0 ); - // NOTE: If ucontext is being used then the top of the stack will - // be a pointer to the ucontext_t struct for that fiber. - push( cast(size_t) &m_utxt ); - } - } - - - Thread.Context* m_ctxt; - size_t m_size; - void* m_pmem; - - static if( is( typeof( ucontext_t ) ) ) - { - // NOTE: The static ucontext instance is used to represent the context - // of the main application thread. - static ucontext_t sm_utxt = void; - ucontext_t m_utxt = void; - ucontext_t* m_ucur = null; - } - - -private: - //////////////////////////////////////////////////////////////////////////// - // Storage of Active Fiber - //////////////////////////////////////////////////////////////////////////// - - - // - // Sets a thread-local reference to the current fiber object. - // - static void setThis( Fiber f ) - { - version( Win32 ) - { - TlsSetValue( sm_this, cast(void*) f ); - } - else version( Posix ) - { - pthread_setspecific( sm_this, cast(void*) f ); - } - } - - - static Thread.TLSKey sm_this; - - -private: - //////////////////////////////////////////////////////////////////////////// - // Context Switching - //////////////////////////////////////////////////////////////////////////// - - - // - // Switches into the stack held by this fiber. - // - final void switchIn() - { - Thread tobj = Thread.getThis(); - void** oldp = &tobj.m_curr.tstack; - void* newp = m_ctxt.tstack; - - // NOTE: The order of operations here is very important. The current - // stack top must be stored before m_lock is set, and pushContext - // must not be called until after m_lock is set. This process - // is intended to prevent a race condition with the suspend - // mechanism used for garbage collection. If it is not followed, - // a badly timed collection could cause the GC to scan from the - // bottom of one stack to the top of another, or to miss scanning - // a stack that still contains valid data. The old stack pointer - // oldp will be set again before the context switch to guarantee - // that it points to exactly the correct stack location so the - // successive pop operations will succeed. - *oldp = getStackTop(); - volatile tobj.m_lock = true; - tobj.pushContext( m_ctxt ); - - fiber_switchContext( oldp, newp ); - - // NOTE: As above, these operations must be performed in a strict order - // to prevent Bad Things from happening. - tobj.popContext(); - volatile tobj.m_lock = false; - tobj.m_curr.tstack = tobj.m_curr.bstack; - } - - - // - // Switches out of the current stack and into the enclosing stack. - // - final void switchOut() - { - Thread tobj = Thread.getThis(); - void** oldp = &m_ctxt.tstack; - void* newp = tobj.m_curr.within.tstack; - - // NOTE: The order of operations here is very important. The current - // stack top must be stored before m_lock is set, and pushContext - // must not be called until after m_lock is set. This process - // is intended to prevent a race condition with the suspend - // mechanism used for garbage collection. If it is not followed, - // a badly timed collection could cause the GC to scan from the - // bottom of one stack to the top of another, or to miss scanning - // a stack that still contains valid data. The old stack pointer - // oldp will be set again before the context switch to guarantee - // that it points to exactly the correct stack location so the - // successive pop operations will succeed. - *oldp = getStackTop(); - volatile tobj.m_lock = true; - - fiber_switchContext( oldp, newp ); - - // NOTE: As above, these operations must be performed in a strict order - // to prevent Bad Things from happening. - volatile tobj.m_lock = false; - tobj.m_curr.tstack = tobj.m_curr.bstack; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/core/ThreadASM.S --- a/tango/lib/common/tango/core/ThreadASM.S Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,136 +0,0 @@ -/** - * Tango Fiber switching assembler code. - * - * Author: Mikola Lysenko - */ - -/************************************************************************************ - * POWER PC ASM BITS - ************************************************************************************/ -#if defined( __ppc__ ) || defined( __PPC__ ) || defined( __powerpc__ ) - - -/** - * Performs a context switch. - * - * r3 - old context pointer - * r4 - new context pointer - * - */ -.text -.align 2 -.globl _fiber_switchContext -_fiber_switchContext: - - /* Save linkage area */ - mflr r0 - mfcr r5 - stw r0, 8(r1) - stw r5, 4(r1) - - /* Save GPRs */ - stw r11, (-1 * 4)(r1) - stw r13, (-2 * 4)(r1) - stw r14, (-3 * 4)(r1) - stw r15, (-4 * 4)(r1) - stw r16, (-5 * 4)(r1) - stw r17, (-6 * 4)(r1) - stw r18, (-7 * 4)(r1) - stw r19, (-8 * 4)(r1) - stw r20, (-9 * 4)(r1) - stw r21, (-10 * 4)(r1) - stw r22, (-11 * 4)(r1) - stw r23, (-12 * 4)(r1) - stw r24, (-13 * 4)(r1) - stw r25, (-14 * 4)(r1) - stw r26, (-15 * 4)(r1) - stw r27, (-16 * 4)(r1) - stw r28, (-17 * 4)(r1) - stw r29, (-18 * 4)(r1) - stw r30, (-19 * 4)(r1) - stwu r31, (-20 * 4)(r1) - - /* We update the stack pointer here, since we do not want the GC to - scan the floating point registers. */ - - /* Save FPRs */ - stfd f14, (-1 * 8)(r1) - stfd f15, (-2 * 8)(r1) - stfd f16, (-3 * 8)(r1) - stfd f17, (-4 * 8)(r1) - stfd f18, (-5 * 8)(r1) - stfd f19, (-6 * 8)(r1) - stfd f20, (-7 * 8)(r1) - stfd f21, (-8 * 8)(r1) - stfd f22, (-9 * 8)(r1) - stfd f23, (-10 * 8)(r1) - stfd f24, (-11 * 8)(r1) - stfd f25, (-12 * 8)(r1) - stfd f26, (-13 * 8)(r1) - stfd f27, (-14 * 8)(r1) - stfd f28, (-15 * 8)(r1) - stfd f29, (-16 * 8)(r1) - stfd f30, (-17 * 8)(r1) - stfd f31, (-18 * 8)(r1) - - /* Update the old stack pointer */ - stw r1, 0(r3) - - /* Set new stack pointer */ - addi r1, r4, 20 * 4 - - /* Restore linkage area */ - lwz r0, 8(r1) - lwz r5, 4(r1) - - /* Restore GPRs */ - lwz r11, (-1 * 4)(r1) - lwz r13, (-2 * 4)(r1) - lwz r14, (-3 * 4)(r1) - lwz r15, (-4 * 4)(r1) - lwz r16, (-5 * 4)(r1) - lwz r17, (-6 * 4)(r1) - lwz r18, (-7 * 4)(r1) - lwz r19, (-8 * 4)(r1) - lwz r20, (-9 * 4)(r1) - lwz r21, (-10 * 4)(r1) - lwz r22, (-11 * 4)(r1) - lwz r23, (-12 * 4)(r1) - lwz r24, (-13 * 4)(r1) - lwz r25, (-14 * 4)(r1) - lwz r26, (-15 * 4)(r1) - lwz r27, (-16 * 4)(r1) - lwz r28, (-17 * 4)(r1) - lwz r29, (-18 * 4)(r1) - lwz r30, (-19 * 4)(r1) - lwz r31, (-20 * 4)(r1) - - - /* Restore FPRs */ - lfd f14, (-1 * 8)(r4) - lfd f15, (-2 * 8)(r4) - lfd f16, (-3 * 8)(r4) - lfd f17, (-4 * 8)(r4) - lfd f18, (-5 * 8)(r4) - lfd f19, (-6 * 8)(r4) - lfd f20, (-7 * 8)(r4) - lfd f21, (-8 * 8)(r4) - lfd f22, (-9 * 8)(r4) - lfd f23, (-10 * 8)(r4) - lfd f24, (-11 * 8)(r4) - lfd f25, (-12 * 8)(r4) - lfd f26, (-13 * 8)(r4) - lfd f27, (-14 * 8)(r4) - lfd f28, (-15 * 8)(r4) - lfd f29, (-16 * 8)(r4) - lfd f30, (-17 * 8)(r4) - lfd f31, (-18 * 8)(r4) - - /* Set condition and link register */ - mtcr r5 - mtlr r0 - - /* Return and switch context */ - blr - -#endif diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/llvmdc.mak --- a/tango/lib/common/tango/llvmdc.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -# Makefile to build the common D runtime library for LLVM -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the common library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-cc-tango.a -LIB_MASK=libtango-cc-tango*.a -LIB_TARGET_C=libtango-cc-c-tango.a -LIB_MASK_C=libtango-cc-c-tango*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -#CFLAGS=-O3 $(ADD_CFLAGS) -CFLAGS=-g $(ADD_CFLAGS) - -#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) -DFLAGS=-g -w -noasm $(ADD_DFLAGS) - -#TFLAGS=-O3 -inline -w $(ADD_DFLAGS) -TFLAGS=-g -w -noasm $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=gcc -LC=llvm-ar rsv -CLC=ar rsv -DC=llvmdc -LLC=llvm-as - -INC_DEST=../../../tango -LIB_DEST=.. -DOC_DEST=../../../doc/tango - -.SUFFIXES: .s .S .c .cpp .d .ll .html .o .bc - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.bc: - $(DC) -c $(DFLAGS) -Hf$*.di $< -of$@ -# $(DC) -c $(DFLAGS) $< -of$@ - -.ll.bc: - $(LLC) -f -o=$@ $< - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html tango.ddoc $< - -targets : lib doc -all : lib doc -tango : lib -lib : tango.lib tango.clib -doc : tango.doc - -###################################################### - -OBJ_CORE= \ - core/BitManip.bc \ - core/Exception.bc \ - core/Memory.bc \ - core/Runtime.bc \ - core/Thread.bc -# core/ThreadASM.o - -OBJ_STDC= \ - stdc/wrap.o -# stdc/wrap.bc - -OBJ_STDC_POSIX= \ - stdc/posix/pthread_darwin.o - -ALL_OBJS= \ - $(OBJ_CORE) -# $(OBJ_STDC) -# $(OBJ_STDC_POSIX) - -###################################################### - -DOC_CORE= \ - core/BitManip.html \ - core/Exception.html \ - core/Memory.html \ - core/Runtime.html \ - core/Thread.html - - -ALL_DOCS= - -###################################################### - -tango.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - - -tango.clib : $(LIB_TARGET_C) - -$(LIB_TARGET_C) : $(OBJ_STDC) - $(RM) $@ - $(CLC) $@ $(OBJ_STDC) - - -tango.doc : $(ALL_DOCS) - echo Documentation generated. - -###################################################### - -### stdc/posix - -#stdc/posix/pthread_darwin.o : stdc/posix/pthread_darwin.d -# $(DC) -c $(DFLAGS) stdc/posix/pthread_darwin.d -of$@ - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(OBJ_STDC) - $(RM) $(ALL_DOCS) - find . -name "$(LIB_MASK)" | xargs $(RM) - find . -name "$(LIB_MASK_C)" | xargs $(RM) - -install : - $(MD) $(INC_DEST) - find . -name "*.di" -exec cp -f {} $(INC_DEST)/{} \; - $(MD) $(DOC_DEST) - find . -name "*.html" -exec cp -f {} $(DOC_DEST)/{} \; - $(MD) $(LIB_DEST) - find . -name "$(LIB_MASK)" -exec cp -f {} $(LIB_DEST)/{} \; - find . -name "$(LIB_MASK_C)" -exec cp -f {} $(LIB_DEST)/{} \; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/posix.mak --- a/tango/lib/common/tango/posix.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -# Makefile to build the common D runtime library for Linux -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the common library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-cc-tango.a -LIB_MASK=libtango-cc-tango*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-O -m32 $(ADD_CFLAGS) -#CFLAGS=-g -m32 $(ADD_CFLAGS) - -DFLAGS=-release -O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) -#DFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) - -TFLAGS=-O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) -#TFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc -version=Posix - -CC=gcc -LC=$(AR) -qsv -DC=dmd - -INC_DEST=../../../tango -LIB_DEST=.. -DOC_DEST=../../../doc/tango - -.SUFFIXES: .s .S .c .cpp .d .html .o - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.o: - $(DC) -c $(DFLAGS) -Hf$*.di $< -of$@ -# $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html tango.ddoc $< - -targets : lib doc -all : lib doc -tango : lib -lib : tango.lib -doc : tango.doc - -###################################################### - -OBJ_CORE= \ - core/BitManip.o \ - core/Exception.o \ - core/Memory.o \ - core/Runtime.o \ - core/Thread.o \ - core/ThreadASM.o - -OBJ_STDC= \ - stdc/wrap.o - -OBJ_STDC_POSIX= \ - stdc/posix/pthread_darwin.o - -ALL_OBJS= \ - $(OBJ_CORE) \ - $(OBJ_STDC) \ - $(OBJ_STDC_POSIX) - -###################################################### - -DOC_CORE= \ - core/BitManip.html \ - core/Exception.html \ - core/Memory.html \ - core/Runtime.html \ - core/Thread.html - - -ALL_DOCS= - -###################################################### - -tango.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -tango.doc : $(ALL_DOCS) - echo Documentation generated. - -###################################################### - -### stdc/posix - -stdc/posix/pthread_darwin.o : stdc/posix/pthread_darwin.d - $(DC) -c $(DFLAGS) stdc/posix/pthread_darwin.d -of$@ - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - find . -name "$(LIB_MASK)" | xargs $(RM) - -install : - $(MD) $(INC_DEST) - find . -name "*.di" -exec cp -f {} $(INC_DEST)/{} \; - $(MD) $(DOC_DEST) - find . -name "*.html" -exec cp -f {} $(DOC_DEST)/{} \; - $(MD) $(LIB_DEST) - find . -name "$(LIB_MASK)" -exec cp -f {} $(LIB_DEST)/{} \; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/stdc/posix/pthread_darwin.d --- a/tango/lib/common/tango/stdc/posix/pthread_darwin.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,334 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.pthread; - -public import tango.stdc.posix.sys.types; -public import tango.stdc.posix.sched; -public import tango.stdc.posix.time; -private import tango.stdc.stdlib; - -extern (C): - -// -// Required -// - -version( darwin ) -{ - int pthread_cond_broadcast(pthread_cond_t*); - int pthread_cond_destroy(pthread_cond_t*); - int pthread_cond_init(pthread_cond_t*, pthread_condattr_t*); - //int pthread_cond_signal(pthread_cond_t*); - //int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, timespec*); - int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); - - int pthread_mutex_destroy(pthread_mutex_t*); - int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); - int pthread_mutex_lock(pthread_mutex_t*); - int pthread_mutex_trylock(pthread_mutex_t*); - int pthread_mutex_unlock(pthread_mutex_t*); - - //int pthread_rwlock_destroy(pthread_rwlock_t*); - //int pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t*); - //int pthread_rwlock_rdlock(pthread_rwlock_t*); - int pthread_rwlock_tryrdlock(pthread_rwlock_t*); - int pthread_rwlock_trywrlock(pthread_rwlock_t*); - //int pthread_rwlock_unlock(pthread_rwlock_t*); - //int pthread_rwlock_wrlock(pthread_rwlock_t*); -} - -// -// Barrier (BAR) -// -/* -PTHREAD_BARRIER_SERIAL_THREAD - -int pthread_barrier_destroy(pthread_barrier_t*); -int pthread_barrier_init(pthread_barrier_t*, pthread_barrierattr_t*, uint); -int pthread_barrier_wait(pthread_barrier_t*); -int pthread_barrierattr_destroy(pthread_barrierattr_t*); -int pthread_barrierattr_getpshared(pthread_barrierattr_t*, int*); (BAR|TSH) -int pthread_barrierattr_init(pthread_barrierattr_t*); -int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); (BAR|TSH) -*/ - -version( darwin ) -{ - const PTHREAD_BARRIER_SERIAL_THREAD = -1; - - // defined in tango.stdc.posix.pthread and redefined here - enum - { - PTHREAD_PROCESS_PRIVATE, - PTHREAD_PROCESS_SHARED - } - - int pthread_barrier_destroy( pthread_barrier_t* barrier ) - { - if( barrier is null ) - return EINVAL; - if( barrier.b_waiters > 0 ) - return EBUSY; - int mret = pthread_mutex_destroy( &barrier.b_lock ); - int cret = pthread_cond_destroy( &barrier.b_cond ); - free( barrier ); - return mret ? mret : cret; - } - - int pthread_barrier_init( pthread_barrier_t* barrier, - pthread_barrierattr_t* attr, - uint count ) - { - if( barrier is null || count <= 0 ) - return EINVAL; - - pthread_barrier_t* newbarrier = cast(pthread_barrier_t*) - malloc( pthread_barrier_t.sizeof ); - if( newbarrier is null ) - return ENOMEM; - - int ret; - if( ( ret = pthread_mutex_init( &newbarrier.b_lock, null ) ) != 0 ) - { - free( newbarrier ); - return ret; - } - if( ( ret = pthread_cond_init( &newbarrier.b_cond, null ) ) != 0 ) - { - pthread_mutex_destroy( &newbarrier.b_lock ); - free( newbarrier ); - return ret; - } - newbarrier.b_waiters = 0; - newbarrier.b_count = count; - newbarrier.b_generation = 0; - *barrier = *newbarrier; - - return 0; - } - - int pthread_barrier_wait( pthread_barrier_t* barrier ) - { - if( barrier is null ) - return EINVAL; - - int ret; - if( ( ret = pthread_mutex_lock( &barrier.b_lock ) ) != 0 ) - return ret; - - if( ++barrier.b_waiters == barrier.b_count ) - { - // current thread is lastest thread - barrier.b_generation++; - barrier.b_waiters = 0; - if( ( ret = pthread_cond_broadcast( &barrier.b_cond ) ) == 0 ) - ret = PTHREAD_BARRIER_SERIAL_THREAD; - } - else - { - int gen = barrier.b_generation; - do - { - ret = pthread_cond_wait( &barrier.b_cond, &barrier.b_lock ); - // test generation to avoid bogus wakeup - } while( ret == 0 && gen == barrier.b_generation ); - } - pthread_mutex_unlock( &barrier.b_lock ); - return ret; - } - - int pthread_barrierattr_destroy( pthread_barrierattr_t* attr ) - { - if( attr is null ) - return EINVAL; - free( attr ); - return 0; - } - - int pthread_barrierattr_getpshared( pthread_barrierattr_t* attr, int* pshared ) - { - if( attr is null ) - return EINVAL; - *pshared = attr.pshared; - return 0; - } - - int pthread_barrierattr_init( pthread_barrierattr_t* attr ) - { - if( attr is null ) - return EINVAL; - if( ( attr = cast(pthread_barrierattr_t*) - malloc( pthread_barrierattr_t.sizeof ) ) is null ) - return ENOMEM; - attr.pshared = PTHREAD_PROCESS_PRIVATE; - return 0; - } - - int pthread_barrierattr_setpshared( pthread_barrierattr_t* attr, int pshared ) - { - if( attr is null ) - return EINVAL; - // only PTHREAD_PROCESS_PRIVATE is supported - if( pshared != PTHREAD_PROCESS_PRIVATE ) - return EINVAL; - attr.pshared = pshared; - return 0; - } -} - -// -// Timeouts (TMO) -// -/* -int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); -int pthread_rwlock_timedrdlock(pthread_rwlock_t*, timespec*); -int pthread_rwlock_timedwrlock(pthread_rwlock_t*, timespec*); -*/ - -version( darwin ) -{ - private - { - import tango.stdc.errno; - import tango.stdc.posix.unistd; - import tango.stdc.posix.sys.time; - - extern (D) - { - void timerclear( timeval* tvp ) - { - tvp.tv_sec = tvp.tv_usec = 0; - } - - bool timerisset( timeval* tvp ) - { - return tvp.tv_sec || tvp.tv_usec; - } - - bool timer_cmp_leq( timeval* tvp, timeval* uvp ) - { - return tvp.tv_sec == uvp.tv_sec ? - tvp.tv_usec <= uvp.tv_usec : - tvp.tv_sec <= uvp.tv_sec; - } - - void timeradd( timeval* tvp, timeval* uvp, timeval* vvp ) - { - vvp.tv_sec = tvp.tv_sec + uvp.tv_sec; - vvp.tv_usec = tvp.tv_usec + uvp.tv_usec; - if( vvp.tv_usec >= 1000000 ) - { - vvp.tv_sec++; - vvp.tv_usec -= 1000000; - } - } - - void timersub( timeval* tvp, timeval* uvp, timeval* vvp ) - { - vvp.tv_sec = tvp.tv_sec - uvp.tv_sec; - vvp.tv_usec = tvp.tv_usec - uvp.tv_usec; - if( vvp.tv_usec < 0 ) - { - vvp.tv_sec--; - vvp.tv_usec += 1000000; - } - } - - void TIMEVAL_TO_TIMESPEC( timeval* tv, timespec* ts ) - { - ts.tv_sec = tv.tv_sec; - ts.tv_nsec = tv.tv_usec * 1000; - } - - void TIMESPEC_TO_TIMEVAL( timeval* tv, timespec* ts ) - { - tv.tv_sec = ts.tv_sec; - tv.tv_usec = ts.tv_nsec / 1000; - } - } - } - - int pthread_mutex_timedlock( pthread_mutex_t* m, timespec* t ) - { - timeval currtime; - timeval maxwait; - TIMESPEC_TO_TIMEVAL( &maxwait, t ); - timeval waittime; - waittime.tv_usec = 100; - - while( timer_cmp_leq( &currtime, &maxwait ) ) - { - int ret = pthread_mutex_trylock( m ); - switch( ret ) - { - case 0: // locked successfully - return ret; - case EBUSY: // waiting - timeradd( &currtime, &waittime, &currtime ); - break; - default: - return ret; - } - usleep( waittime.tv_usec ); - } - return ETIMEDOUT; - } - - int pthread_rwlock_timedrdlock( pthread_rwlock_t *rwlock, timespec* t ) - { - timeval currtime; - timeval maxwait; - TIMESPEC_TO_TIMEVAL( &maxwait, t ); - timeval waittime; - waittime.tv_usec = 100; - - while( timer_cmp_leq( &currtime, &maxwait ) ) - { - int ret = pthread_rwlock_tryrdlock( rwlock ); - switch( ret ) - { - case 0: // locked successfully - return ret; - case EBUSY: // waiting - timeradd( &currtime, &waittime, &currtime ); - break; - default: - return ret; - } - usleep( waittime.tv_usec ); - } - return ETIMEDOUT; - } - - int pthread_rwlock_timedwrlock( pthread_rwlock_t* l, timespec* t ) - { - timeval currtime; - timeval maxwait; - TIMESPEC_TO_TIMEVAL( &maxwait, t ); - timeval waittime; - waittime.tv_usec = 100; - - while( timer_cmp_leq( &currtime, &maxwait ) ) - { - int ret = pthread_rwlock_trywrlock( l ); - switch( ret ) - { - case 0: // locked successfully - return ret; - case EBUSY: // waiting - timeradd( &currtime, &waittime, &currtime ); - break; - default: - return ret; - } - usleep( waittime.tv_usec ); - } - return ETIMEDOUT; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/stdc/wrap.c --- a/tango/lib/common/tango/stdc/wrap.c Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -#include - - -int getErrno() -{ - return errno; -} - - -int setErrno( int val ) -{ - errno = val; - return val; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/stdc/wrap.ll --- a/tango/lib/common/tango/stdc/wrap.ll Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -; ModuleID = 'wrap.bc' -@errno = external thread_local global i32 ; [#uses=2] - -define i32 @getErrno() { -entry: - %tmp = load i32* @errno ; [#uses=1] - ret i32 %tmp -} - -define i32 @setErrno(i32 %val) { -entry: - store i32 %val, i32* @errno - ret i32 %val -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/common/tango/win32.mak --- a/tango/lib/common/tango/win32.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -# Makefile to build the common D runtime library for Win32 -# Designed to work with DigitalMars make -# Targets: -# make -# Same as make all -# make lib -# Build the common library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=tango-cc-tango.lib -LIB_MASK=tango-cc-tango*.lib - -CP=xcopy /y -RM=del /f -MD=mkdir - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-mn -6 -r $(ADD_CFLAGS) -#CFLAGS=-g -mn -6 -r $(ADD_CFLAGS) - -DFLAGS=-release -O -inline -w -nofloat $(ADD_DFLAGS) -#DFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -TFLAGS=-O -inline -w -nofloat $(ADD_DFLAGS) -#TFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=dmc -LC=lib -DC=dmd - -INC_DEST=..\..\..\tango -LIB_DEST=.. -DOC_DEST=..\..\..\doc\tango - -.DEFAULT: .asm .c .cpp .d .html .obj - -.asm.obj: - $(CC) -c $< - -.c.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.d.obj: - $(DC) -c $(DFLAGS) -Hf$*.di $< -of$@ -# $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html tango.ddoc $< - -targets : lib doc -all : lib doc -tango : lib -lib : tango.lib -doc : tango.doc - -###################################################### - -OBJ_CORE= \ - core\BitManip.obj \ - core\Exception.obj \ - core\Memory.obj \ - core\Runtime.obj \ - core\Thread.obj - -OBJ_STDC= \ - stdc\wrap.obj - -ALL_OBJS= \ - $(OBJ_CORE) \ - $(OBJ_STDC) - -###################################################### - -DOC_CORE= \ - core\BitManip.html \ - core\Exception.html \ - core\Memory.html \ - core\Runtime.html \ - core\Thread.html - -ALL_DOCS= - -###################################################### - -tango.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) -c -n $@ $(ALL_OBJS) - -tango.doc : $(ALL_DOCS) - @echo Documentation generated. - -###################################################### - -### config - -# config.obj : config.d -# $(DC) -c $(DFLAGS) config.d -of$@ - -###################################################### - -clean : - $(RM) /s .\*.di - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(INC_DEST) - $(CP) /s *.di $(INC_DEST)\. - $(MD) $(DOC_DEST) - $(CP) /s *.html $(DOC_DEST)\. - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)\. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/aApply.d --- a/tango/lib/compiler/llvmdc/aApply.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,406 +0,0 @@ -/** - * Part of the D programming language runtime library. - */ - -/* - * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -/* This code handles decoding UTF strings for foreach loops. - * There are 6 combinations of conversions between char, wchar, - * and dchar, and 2 of each of those. - */ - -private import util.utf; - -/********************************************** - */ - -// dg is D, but _aApplycd() is C -extern (D) typedef int delegate(void *) dg_t; - -extern (C) int _aApplycd1(char[] aa, dg_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplycd1(), len = %d\n", len); - for (i = 0; i < len; ) - { dchar d; - - d = aa[i]; - if (d & 0x80) - d = decode(aa, i); - else - i++; - result = dg(cast(void *)&d); - if (result) - break; - } - return result; -} - -extern (C) int _aApplywd1(wchar[] aa, dg_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplywd1(), len = %d\n", len); - for (i = 0; i < len; ) - { dchar d; - - d = aa[i]; - if (d & ~0x7F) - d = decode(aa, i); - else - i++; - result = dg(cast(void *)&d); - if (result) - break; - } - return result; -} - -extern (C) int _aApplycw1(char[] aa, dg_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplycw1(), len = %d\n", len); - for (i = 0; i < len; ) - { dchar d; - wchar w; - - w = aa[i]; - if (w & 0x80) - { d = decode(aa, i); - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar)((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(cast(void *)&w); - if (result) - break; - w = cast(wchar)(((d - 0x10000) & 0x3FF) + 0xDC00); - } - } - else - i++; - result = dg(cast(void *)&w); - if (result) - break; - } - return result; -} - -extern (C) int _aApplywc1(wchar[] aa, dg_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplywc1(), len = %d\n", len); - for (i = 0; i < len; ) - { dchar d; - wchar w; - char c; - - w = aa[i]; - if (w & ~0x7F) - { - char[4] buf; - - d = decode(aa, i); - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { c = cast(char)w; - i++; - } - result = dg(cast(void *)&c); - if (result) - break; - } - return result; -} - -extern (C) int _aApplydc1(dchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplydc1(), len = %d\n", aa.length); - foreach (dchar d; aa) - { - char c; - - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { - c = cast(char)d; - } - result = dg(cast(void *)&c); - if (result) - break; - } - return result; -} - -extern (C) int _aApplydw1(dchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplydw1(), len = %d\n", aa.length); - foreach (dchar d; aa) - { - wchar w; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar)((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(cast(void *)&w); - if (result) - break; - w = cast(wchar)(((d - 0x10000) & 0x3FF) + 0xDC00); - } - result = dg(cast(void *)&w); - if (result) - break; - } - return result; -} - - -/****************************************************************************/ - -// dg is D, but _aApplycd2() is C -extern (D) typedef int delegate(void *, void *) dg2_t; - -extern (C) int _aApplycd2(char[] aa, dg2_t dg) -{ int result; - size_t i; - size_t n; - size_t len = aa.length; - - debug(apply) printf("_aApplycd2(), len = %d\n", len); - for (i = 0; i < len; i += n) - { dchar d; - - d = aa[i]; - if (d & 0x80) - { - n = i; - d = decode(aa, n); - n -= i; - } - else - n = 1; - result = dg(&i, cast(void *)&d); - if (result) - break; - } - return result; -} - -extern (C) int _aApplywd2(wchar[] aa, dg2_t dg) -{ int result; - size_t i; - size_t n; - size_t len = aa.length; - - debug(apply) printf("_aApplywd2(), len = %d\n", len); - for (i = 0; i < len; i += n) - { dchar d; - - d = aa[i]; - if (d & ~0x7F) - { - n = i; - d = decode(aa, n); - n -= i; - } - else - n = 1; - result = dg(&i, cast(void *)&d); - if (result) - break; - } - return result; -} - -extern (C) int _aApplycw2(char[] aa, dg2_t dg) -{ int result; - size_t i; - size_t n; - size_t len = aa.length; - - debug(apply) printf("_aApplycw2(), len = %d\n", len); - for (i = 0; i < len; i += n) - { dchar d; - wchar w; - - w = aa[i]; - if (w & 0x80) - { n = i; - d = decode(aa, n); - n -= i; - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(&i, cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - } - else - n = 1; - result = dg(&i, cast(void *)&w); - if (result) - break; - } - return result; -} - -extern (C) int _aApplywc2(wchar[] aa, dg2_t dg) -{ int result; - size_t i; - size_t n; - size_t len = aa.length; - - debug(apply) printf("_aApplywc2(), len = %d\n", len); - for (i = 0; i < len; i += n) - { dchar d; - wchar w; - char c; - - w = aa[i]; - if (w & ~0x7F) - { - char[4] buf; - - n = i; - d = decode(aa, n); - n -= i; - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(&i, cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { c = cast(char)w; - n = 1; - } - result = dg(&i, cast(void *)&c); - if (result) - break; - } - return result; -} - -extern (C) int _aApplydc2(dchar[] aa, dg2_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplydc2(), len = %d\n", len); - for (i = 0; i < len; i++) - { dchar d; - char c; - - d = aa[i]; - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(&i, cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { c = cast(char)d; - } - result = dg(&i, cast(void *)&c); - if (result) - break; - } - return result; -} - -extern (C) int _aApplydw2(dchar[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplydw2(), len = %d\n", aa.length); - foreach (size_t i, dchar d; aa) - { - wchar w; - auto j = i; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(&j, cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - result = dg(&j, cast(void *)&w); - if (result) - break; - } - return result; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/aApplyR.d --- a/tango/lib/compiler/llvmdc/aApplyR.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,975 +0,0 @@ - -/** - * Part of the D programming language runtime library. - */ - -/* - * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -/* This code handles decoding UTF strings for foreach_reverse loops. - * There are 6 combinations of conversions between char, wchar, - * and dchar, and 2 of each of those. - */ - -private import util.utf; - -/**********************************************/ -/* 1 argument versions */ - -// dg is D, but _aApplyRcd() is C -extern (D) typedef int delegate(void *) dg_t; - -extern (C) int _aApplyRcd1(in char[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRcd1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - - i--; - d = aa[i]; - if (d & 0x80) - { char c = cast(char)d; - uint j; - uint m = 0x3F; - d = 0; - while ((c & 0xC0) != 0xC0) - { if (i == 0) - onUnicodeError("Invalid UTF-8 sequence", 0); - i--; - d |= (c & 0x3F) << j; - j += 6; - m >>= 1; - c = aa[i]; - } - d |= (c & m) << j; - } - result = dg(cast(void *)&d); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRcd1.unittest\n"); - - auto s = "hello"c; - int i; - - foreach_reverse(dchar d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(dchar d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == '\U00100456'); break; - case 2: assert(d == '\u1234'); break; - case 3: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 4); -} - -/*****************************/ - -extern (C) int _aApplyRwd1(in wchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRwd1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - - i--; - d = aa[i]; - if (d >= 0xDC00 && d <= 0xDFFF) - { if (i == 0) - onUnicodeError("Invalid UTF-16 sequence", 0); - i--; - d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); - } - result = dg(cast(void *)&d); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRwd1.unittest\n"); - - auto s = "hello"w; - int i; - - foreach_reverse(dchar d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(dchar d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == '\U00100456'); break; - case 2: assert(d == '\u1234'); break; - case 3: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 4); -} - -/*****************************/ - -extern (C) int _aApplyRcw1(in char[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRcw1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - wchar w; - - i--; - w = aa[i]; - if (w & 0x80) - { char c = cast(char)w; - uint j; - uint m = 0x3F; - d = 0; - while ((c & 0xC0) != 0xC0) - { if (i == 0) - onUnicodeError("Invalid UTF-8 sequence", 0); - i--; - d |= (c & 0x3F) << j; - j += 6; - m >>= 1; - c = aa[i]; - } - d |= (c & m) << j; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - } - result = dg(cast(void *)&w); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRcw1.unittest\n"); - - auto s = "hello"c; - int i; - - foreach_reverse(wchar d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(wchar d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == 0xDBC1); break; - case 2: assert(d == 0xDC56); break; - case 3: assert(d == 0x1234); break; - case 4: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 5); -} - -/*****************************/ - -extern (C) int _aApplyRwc1(in wchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRwc1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - char c; - - i--; - d = aa[i]; - if (d >= 0xDC00 && d <= 0xDFFF) - { if (i == 0) - onUnicodeError("Invalid UTF-16 sequence", 0); - i--; - d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); - } - - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(cast(void *)&c2); - if (result) - return result; - } - continue; - } - c = cast(char)d; - result = dg(cast(void *)&c); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRwc1.unittest\n"); - - auto s = "hello"w; - int i; - - foreach_reverse(char d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(char d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == 0xF4); break; - case 2: assert(d == 0x80); break; - case 3: assert(d == 0x91); break; - case 4: assert(d == 0x96); break; - case 5: assert(d == 0xE1); break; - case 6: assert(d == 0x88); break; - case 7: assert(d == 0xB4); break; - case 8: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 9); -} - -/*****************************/ - -extern (C) int _aApplyRdc1(in dchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRdc1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0;) - { dchar d = aa[--i]; - char c; - - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { - c = cast(char)d; - } - result = dg(cast(void *)&c); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRdc1.unittest\n"); - - auto s = "hello"d; - int i; - - foreach_reverse(char d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(char d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == 0xF4); break; - case 2: assert(d == 0x80); break; - case 3: assert(d == 0x91); break; - case 4: assert(d == 0x96); break; - case 5: assert(d == 0xE1); break; - case 6: assert(d == 0x88); break; - case 7: assert(d == 0xB4); break; - case 8: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 9); -} - -/*****************************/ - -extern (C) int _aApplyRdw1(in dchar[] aa, dg_t dg) -{ int result; - - debug(apply) printf("_aApplyRdw1(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d = aa[--i]; - wchar w; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - result = dg(cast(void *)&w); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRdw1.unittest\n"); - - auto s = "hello"d; - int i; - - foreach_reverse(wchar d; s) - { - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(wchar d; s) - { - //printf("i = %d, d = %x\n", i, d); - switch (i) - { - case 0: assert(d == 'b'); break; - case 1: assert(d == 0xDBC1); break; - case 2: assert(d == 0xDC56); break; - case 3: assert(d == 0x1234); break; - case 4: assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 5); -} - - -/****************************************************************************/ -/* 2 argument versions */ - -// dg is D, but _aApplyRcd2() is C -extern (D) typedef int delegate(void *, void *) dg2_t; - -extern (C) int _aApplyRcd2(in char[] aa, dg2_t dg) -{ int result; - size_t i; - size_t len = aa.length; - - debug(apply) printf("_aApplyRcd2(), len = %d\n", len); - for (i = len; i != 0; ) - { dchar d; - - i--; - d = aa[i]; - if (d & 0x80) - { char c = cast(char)d; - uint j; - uint m = 0x3F; - d = 0; - while ((c & 0xC0) != 0xC0) - { if (i == 0) - onUnicodeError("Invalid UTF-8 sequence", 0); - i--; - d |= (c & 0x3F) << j; - j += 6; - m >>= 1; - c = aa[i]; - } - d |= (c & m) << j; - } - result = dg(&i, cast(void *)&d); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRcd2.unittest\n"); - - auto s = "hello"c; - int i; - - foreach_reverse(k, dchar d; s) - { - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, dchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(d == 'b'); assert(k == 8); break; - case 1: assert(d == '\U00100456'); assert(k == 4); break; - case 2: assert(d == '\u1234'); assert(k == 1); break; - case 3: assert(d == 'a'); assert(k == 0); break; - default: assert(0); - } - i++; - } - assert(i == 4); -} - -/*****************************/ - -extern (C) int _aApplyRwd2(in wchar[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplyRwd2(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - - i--; - d = aa[i]; - if (d >= 0xDC00 && d <= 0xDFFF) - { if (i == 0) - onUnicodeError("Invalid UTF-16 sequence", 0); - i--; - d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); - } - result = dg(&i, cast(void *)&d); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRwd2.unittest\n"); - - auto s = "hello"w; - int i; - - foreach_reverse(k, dchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, dchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(k == 4); assert(d == 'b'); break; - case 1: assert(k == 2); assert(d == '\U00100456'); break; - case 2: assert(k == 1); assert(d == '\u1234'); break; - case 3: assert(k == 0); assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 4); -} - -/*****************************/ - -extern (C) int _aApplyRcw2(in char[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplyRcw2(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - wchar w; - - i--; - w = aa[i]; - if (w & 0x80) - { char c = cast(char)w; - uint j; - uint m = 0x3F; - d = 0; - while ((c & 0xC0) != 0xC0) - { if (i == 0) - onUnicodeError("Invalid UTF-8 sequence", 0); - i--; - d |= (c & 0x3F) << j; - j += 6; - m >>= 1; - c = aa[i]; - } - d |= (c & m) << j; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(&i, cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - } - result = dg(&i, cast(void *)&w); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRcw2.unittest\n"); - - auto s = "hello"c; - int i; - - foreach_reverse(k, wchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, wchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(k == 8); assert(d == 'b'); break; - case 1: assert(k == 4); assert(d == 0xDBC1); break; - case 2: assert(k == 4); assert(d == 0xDC56); break; - case 3: assert(k == 1); assert(d == 0x1234); break; - case 4: assert(k == 0); assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 5); -} - -/*****************************/ - -extern (C) int _aApplyRwc2(in wchar[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplyRwc2(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d; - char c; - - i--; - d = aa[i]; - if (d >= 0xDC00 && d <= 0xDFFF) - { if (i == 0) - onUnicodeError("Invalid UTF-16 sequence", 0); - i--; - d = ((aa[i] - 0xD7C0) << 10) + (d - 0xDC00); - } - - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(&i, cast(void *)&c2); - if (result) - return result; - } - continue; - } - c = cast(char)d; - result = dg(&i, cast(void *)&c); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRwc2.unittest\n"); - - auto s = "hello"w; - int i; - - foreach_reverse(k, char d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, char d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(k == 4); assert(d == 'b'); break; - case 1: assert(k == 2); assert(d == 0xF4); break; - case 2: assert(k == 2); assert(d == 0x80); break; - case 3: assert(k == 2); assert(d == 0x91); break; - case 4: assert(k == 2); assert(d == 0x96); break; - case 5: assert(k == 1); assert(d == 0xE1); break; - case 6: assert(k == 1); assert(d == 0x88); break; - case 7: assert(k == 1); assert(d == 0xB4); break; - case 8: assert(k == 0); assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 9); -} - -/*****************************/ - -extern (C) int _aApplyRdc2(in dchar[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplyRdc2(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d = aa[--i]; - char c; - - if (d & ~0x7F) - { - char[4] buf; - - auto b = toUTF8(buf, d); - foreach (char c2; b) - { - result = dg(&i, cast(void *)&c2); - if (result) - return result; - } - continue; - } - else - { c = cast(char)d; - } - result = dg(&i, cast(void *)&c); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRdc2.unittest\n"); - - auto s = "hello"d; - int i; - - foreach_reverse(k, char d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, char d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(k == 3); assert(d == 'b'); break; - case 1: assert(k == 2); assert(d == 0xF4); break; - case 2: assert(k == 2); assert(d == 0x80); break; - case 3: assert(k == 2); assert(d == 0x91); break; - case 4: assert(k == 2); assert(d == 0x96); break; - case 5: assert(k == 1); assert(d == 0xE1); break; - case 6: assert(k == 1); assert(d == 0x88); break; - case 7: assert(k == 1); assert(d == 0xB4); break; - case 8: assert(k == 0); assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 9); -} - -/*****************************/ - -extern (C) int _aApplyRdw2(in dchar[] aa, dg2_t dg) -{ int result; - - debug(apply) printf("_aApplyRdw2(), len = %d\n", aa.length); - for (size_t i = aa.length; i != 0; ) - { dchar d = aa[--i]; - wchar w; - - if (d <= 0xFFFF) - w = cast(wchar) d; - else - { - w = cast(wchar) ((((d - 0x10000) >> 10) & 0x3FF) + 0xD800); - result = dg(&i, cast(void *)&w); - if (result) - break; - w = cast(wchar) (((d - 0x10000) & 0x3FF) + 0xDC00); - } - result = dg(&i, cast(void *)&w); - if (result) - break; - } - return result; -} - -unittest -{ - debug(apply) printf("_aApplyRdw2.unittest\n"); - - auto s = "hello"d; - int i; - - foreach_reverse(k, wchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - assert(k == 4 - i); - switch (i) - { - case 0: assert(d == 'o'); break; - case 1: assert(d == 'l'); break; - case 2: assert(d == 'l'); break; - case 3: assert(d == 'e'); break; - case 4: assert(d == 'h'); break; - default: assert(0); - } - i++; - } - assert(i == 5); - - s = "a\u1234\U00100456b"; - i = 0; - foreach_reverse(k, wchar d; s) - { - //printf("i = %d, k = %d, d = %x\n", i, k, d); - switch (i) - { - case 0: assert(k == 3); assert(d == 'b'); break; - case 1: assert(k == 2); assert(d == 0xDBC1); break; - case 2: assert(k == 2); assert(d == 0xDC56); break; - case 3: assert(k == 1); assert(d == 0x1234); break; - case 4: assert(k == 0); assert(d == 'a'); break; - default: assert(0); - } - i++; - } - assert(i == 5); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/aaA.d --- a/tango/lib/compiler/llvmdc/aaA.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,834 +0,0 @@ -//_ aaA.d - -/** - * Part of the D programming language runtime library. - * Implementation of associative arrays. - */ - -/* - * Copyright (C) 2000-2007 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - * Modified by Tomas Lindquist Olsen for use with LLVMDC. - */ - -private -{ - import tango.stdc.stdarg; - import tango.stdc.string; - - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, - NO_SCAN = 0b0000_0010, - NO_MOVE = 0b0000_0100, - ALL_BITS = 0b1111_1111 - } - - extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); - extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); - extern (C) void gc_free( void* p ); -} - -// Auto-rehash and pre-allocate - Dave Fladebo - -static size_t[] prime_list = [ - 97UL, 389UL, - 1543UL, 6151UL, - 24593UL, 98317UL, - 393241UL, 1572869UL, - 6291469UL, 25165843UL, - 100663319UL, 402653189UL, - 1610612741UL, 4294967291UL -]; - -// This is the type of the return value for dynamic arrays. -struct Array -{ - size_t length; - void* ptr; -} - -struct aaA -{ - aaA *left; - aaA *right; - hash_t hash; - /* key */ - /* value */ -} - -struct BB -{ - aaA*[] b; - size_t nodes; // total number of aaA nodes -} - -/* This is the type actually seen by the programmer, although - * it is completely opaque. - */ - -// LLVMDC doesn't pass structs in registers so no need to wrap it ... -alias BB* AA; - -/********************************** - * Align to next pointer boundary, so that - * GC won't be faced with misaligned pointers - * in value. - */ - -size_t aligntsize(size_t tsize) -{ - // Is pointer alignment on the x64 4 bytes or 8? - return (tsize + size_t.sizeof - 1) & ~(size_t.sizeof - 1); -} - -extern (C): - -/************************************************* - * Invariant for aa. - */ - -/+ -void _aaInvAh(aaA*[] aa) -{ - for (size_t i = 0; i < aa.length; i++) - { - if (aa[i]) - _aaInvAh_x(aa[i]); - } -} - -private int _aaCmpAh_x(aaA *e1, aaA *e2) -{ int c; - - c = e1.hash - e2.hash; - if (c == 0) - { - c = e1.key.length - e2.key.length; - if (c == 0) - c = memcmp((char *)e1.key, (char *)e2.key, e1.key.length); - } - return c; -} - -private void _aaInvAh_x(aaA *e) -{ - hash_t key_hash; - aaA *e1; - aaA *e2; - - key_hash = getHash(e.key); - assert(key_hash == e.hash); - - while (1) - { int c; - - e1 = e.left; - if (e1) - { - _aaInvAh_x(e1); // ordinary recursion - do - { - c = _aaCmpAh_x(e1, e); - assert(c < 0); - e1 = e1.right; - } while (e1 != null); - } - - e2 = e.right; - if (e2) - { - do - { - c = _aaCmpAh_x(e, e2); - assert(c < 0); - e2 = e2.left; - } while (e2 != null); - e = e.right; // tail recursion - } - else - break; - } -} -+/ - -/**************************************************** - * Determine number of entries in associative array. - */ - -size_t _aaLen(AA aa) -in -{ - //printf("_aaLen()+\n"); - //_aaInv(aa); -} -out (result) -{ - size_t len = 0; - - void _aaLen_x(aaA* ex) - { - auto e = ex; - len++; - - while (1) - { - if (e.right) - _aaLen_x(e.right); - e = e.left; - if (!e) - break; - len++; - } - } - - if (aa) - { - foreach (e; aa.b) - { - if (e) - _aaLen_x(e); - } - } - assert(len == result); - - //printf("_aaLen()-\n"); -} -body -{ - return aa ? aa.nodes : 0; -} - - -/************************************************* - * Get pointer to value in associative array indexed by key. - * Add entry for key if it is not already there. - */ - -void* _aaGet(AA* aa_arg, TypeInfo keyti, size_t valuesize, void* pkey) -in -{ - assert(aa_arg); -} -out (result) -{ - assert(result); - assert(*aa_arg); - assert((*aa_arg).b.length); - //assert(_aaInAh(*aa, key)); -} -body -{ - //auto pkey = cast(void *)(&valuesize + 1); - size_t i; - aaA *e; - auto keysize = aligntsize(keyti.tsize()); - - if (!*aa_arg) - *aa_arg = new BB(); - auto aa = *aa_arg; - - if (!aa.b.length) - { - alias aaA *pa; - auto len = prime_list[0]; - - aa.b = new pa[len]; - } - - auto key_hash = keyti.getHash(pkey); - //printf("hash = %d\n", key_hash); - i = key_hash % aa.b.length; - auto pe = &aa.b[i]; - while ((e = *pe) !is null) - { - if (key_hash == e.hash) - { - auto c = keyti.compare(pkey, e + 1); - if (c == 0) - goto Lret; - pe = (c < 0) ? &e.left : &e.right; - } - else - pe = (key_hash < e.hash) ? &e.left : &e.right; - } - - // Not found, create new elem - //printf("create new one\n"); - size_t size = aaA.sizeof + keysize + valuesize; - uint bits = keysize < (void*).sizeof && - keysize > (void).sizeof && - valuesize < (void*).sizeof && - valuesize > (void).sizeof ? BlkAttr.NO_SCAN : 0; - e = cast(aaA *) gc_calloc(size, bits); - memcpy(e + 1, pkey, keysize); - e.hash = key_hash; - *pe = e; - - auto nodes = ++aa.nodes; - //printf("length = %d, nodes = %d\n", (*aa).length, nodes); - if (nodes > aa.b.length * 4) - { - _aaRehash(aa_arg,keyti); - } - -Lret: - return cast(void *)(e + 1) + keysize; -} - - -/************************************************* - * Get pointer to value in associative array indexed by key. - * Returns null if it is not already there. - */ - -void* _aaGetRvalue(AA aa, TypeInfo keyti, size_t valuesize, void *pkey) -{ - //printf("_aaGetRvalue(valuesize = %u)\n", valuesize); - if (!aa) - return null; - - //auto pkey = cast(void *)(&valuesize + 1); - auto keysize = aligntsize(keyti.tsize()); - auto len = aa.b.length; - - if (len) - { - auto key_hash = keyti.getHash(pkey); - //printf("hash = %d\n", key_hash); - size_t i = key_hash % len; - auto e = aa.b[i]; - while (e !is null) - { - if (key_hash == e.hash) - { - auto c = keyti.compare(pkey, e + 1); - if (c == 0) - return cast(void *)(e + 1) + keysize; - e = (c < 0) ? e.left : e.right; - } - else - e = (key_hash < e.hash) ? e.left : e.right; - } - } - return null; // not found, caller will throw exception -} - - -/************************************************* - * Determine if key is in aa. - * Returns: - * null not in aa - * !=null in aa, return pointer to value - */ - -void* _aaIn(AA aa, TypeInfo keyti, void *pkey) -in -{ -} -out (result) -{ - //assert(result == 0 || result == 1); -} -body -{ - if (aa) - { - //auto pkey = cast(void *)(&keyti + 1); - - //printf("_aaIn(), .length = %d, .ptr = %x\n", aa.length, cast(uint)aa.ptr); - auto len = aa.b.length; - - if (len) - { - auto key_hash = keyti.getHash(pkey); - //printf("hash = %d\n", key_hash); - size_t i = key_hash % len; - auto e = aa.b[i]; - while (e !is null) - { - if (key_hash == e.hash) - { - auto c = keyti.compare(pkey, e + 1); - if (c == 0) - return cast(void *)(e + 1) + aligntsize(keyti.tsize()); - e = (c < 0) ? e.left : e.right; - } - else - e = (key_hash < e.hash) ? e.left : e.right; - } - } - } - - // Not found - return null; -} - -/************************************************* - * Delete key entry in aa[]. - * If key is not in aa[], do nothing. - */ - -void _aaDel(AA aa, TypeInfo keyti, void *pkey) -{ - //auto pkey = cast(void *)(&keyti + 1); - aaA *e; - - if (aa && aa.b.length) - { - auto key_hash = keyti.getHash(pkey); - //printf("hash = %d\n", key_hash); - size_t i = key_hash % aa.b.length; - auto pe = &aa.b[i]; - while ((e = *pe) !is null) // null means not found - { - if (key_hash == e.hash) - { - auto c = keyti.compare(pkey, e + 1); - if (c == 0) - { - if (!e.left && !e.right) - { - *pe = null; - } - else if (e.left && !e.right) - { - *pe = e.left; - e.left = null; - } - else if (!e.left && e.right) - { - *pe = e.right; - e.right = null; - } - else - { - *pe = e.left; - e.left = null; - do - pe = &(*pe).right; - while (*pe); - *pe = e.right; - e.right = null; - } - - aa.nodes--; - - // Should notify GC that e can be free'd now - break; - } - pe = (c < 0) ? &e.left : &e.right; - } - else - pe = (key_hash < e.hash) ? &e.left : &e.right; - } - } -} - - -/******************************************** - * Produce array of values from aa. - */ - -Array _aaValues(AA aa, size_t keysize, size_t valuesize) -in -{ - assert(keysize == aligntsize(keysize)); -} -body -{ - size_t resi; - Array a; - - void _aaValues_x(aaA* e) - { - do - { - memcpy(a.ptr + resi * valuesize, - cast(byte*)e + aaA.sizeof + keysize, - valuesize); - resi++; - if (e.left) - { if (!e.right) - { e = e.left; - continue; - } - _aaValues_x(e.left); - } - e = e.right; - } while (e !is null); - } - - if (aa) - { - a.length = _aaLen(aa); - a.ptr = cast(byte*) gc_malloc(a.length * valuesize, - valuesize < (void*).sizeof && - valuesize > (void).sizeof ? BlkAttr.NO_SCAN : 0); - resi = 0; - foreach (e; aa.b) - { - if (e) - _aaValues_x(e); - } - assert(resi == a.length); - } - return a; -} - - -/******************************************** - * Rehash an array. - */ - -void* _aaRehash(AA* paa, TypeInfo keyti) -in -{ - //_aaInvAh(paa); -} -out (result) -{ - //_aaInvAh(result); -} -body -{ - BB newb; - - void _aaRehash_x(aaA* olde) - { - while (1) - { - auto left = olde.left; - auto right = olde.right; - olde.left = null; - olde.right = null; - - aaA *e; - - //printf("rehash %p\n", olde); - auto key_hash = olde.hash; - size_t i = key_hash % newb.b.length; - auto pe = &newb.b[i]; - while ((e = *pe) !is null) - { - //printf("\te = %p, e.left = %p, e.right = %p\n", e, e.left, e.right); - assert(e.left != e); - assert(e.right != e); - if (key_hash == e.hash) - { - auto c = keyti.compare(olde + 1, e + 1); - assert(c != 0); - pe = (c < 0) ? &e.left : &e.right; - } - else - pe = (key_hash < e.hash) ? &e.left : &e.right; - } - *pe = olde; - - if (right) - { - if (!left) - { olde = right; - continue; - } - _aaRehash_x(right); - } - if (!left) - break; - olde = left; - } - } - - //printf("Rehash\n"); - if (*paa) - { - auto aa = *paa; - auto len = _aaLen(aa); - if (len) - { size_t i; - - for (i = 0; i < prime_list.length - 1; i++) - { - if (len <= prime_list[i]) - break; - } - len = prime_list[i]; - newb.b = new aaA*[len]; - - foreach (e; aa.b) - { - if (e) - _aaRehash_x(e); - } - - newb.nodes = (*aa).nodes; - } - - **paa = newb; - } - return *paa; -} - - -/******************************************** - * Produce array of N byte keys from aa. - */ - -Array _aaKeys(AA aa, size_t keysize) -{ - byte[] res; - size_t resi; - - void _aaKeys_x(aaA* e) - { - do - { - memcpy(&res[resi * keysize], cast(byte*)(e + 1), keysize); - resi++; - if (e.left) - { if (!e.right) - { e = e.left; - continue; - } - _aaKeys_x(e.left); - } - e = e.right; - } while (e !is null); - } - - auto len = _aaLen(aa); - if (!len) - return Array(); - res = (cast(byte*) gc_malloc(len * keysize, - keysize < (void*).sizeof && - keysize > (void).sizeof ? BlkAttr.NO_SCAN : 0))[0 .. len * keysize]; - resi = 0; - foreach (e; aa.b) - { - if (e) - _aaKeys_x(e); - } - assert(resi == len); - - return Array(len, res.ptr); -} - - -/********************************************** - * 'apply' for associative arrays - to support foreach - */ - -// dg is D, but _aaApply() is C -extern (D) typedef int delegate(void *) dg_t; - -int _aaApply(AA aa, size_t keysize, dg_t dg) -in -{ - assert(aligntsize(keysize) == keysize); -} -body -{ int result; - - //printf("_aaApply(aa = x%llx, keysize = %d, dg = x%llx)\n", aa, keysize, dg); - - int treewalker(aaA* e) - { int result; - - do - { - //printf("treewalker(e = %p, dg = x%llx)\n", e, dg); - result = dg(cast(void *)(e + 1) + keysize); - if (result) - break; - if (e.right) - { if (!e.left) - { - e = e.right; - continue; - } - result = treewalker(e.right); - if (result) - break; - } - e = e.left; - } while (e); - - return result; - } - - if (aa) - { - foreach (e; aa.b) - { - if (e) - { - result = treewalker(e); - if (result) - break; - } - } - } - return result; -} - -// dg is D, but _aaApply2() is C -extern (D) typedef int delegate(void *, void *) dg2_t; - -int _aaApply2(AA aa, size_t keysize, dg2_t dg) -in -{ - assert(aligntsize(keysize) == keysize); -} -body -{ int result; - - //printf("_aaApply(aa = x%llx, keysize = %d, dg = x%llx)\n", aa, keysize, dg); - - int treewalker(aaA* e) - { int result; - - do - { - //printf("treewalker(e = %p, dg = x%llx)\n", e, dg); - result = dg(cast(void *)(e + 1), cast(void *)(e + 1) + keysize); - if (result) - break; - if (e.right) - { if (!e.left) - { - e = e.right; - continue; - } - result = treewalker(e.right); - if (result) - break; - } - e = e.left; - } while (e); - - return result; - } - - if (aa) - { - foreach (e; aa.b) - { - if (e) - { - result = treewalker(e); - if (result) - break; - } - } - } - return result; -} - - -/*********************************** - * Construct an associative array of type ti from - * length pairs of key/value pairs. - */ - -/+ - -extern (C) -BB* _d_assocarrayliteralT(TypeInfo_AssociativeArray ti, size_t length, ...) -{ - auto valuesize = ti.next.tsize(); // value size - auto keyti = ti.key; - auto keysize = keyti.tsize(); // key size - BB* result; - - //printf("_d_assocarrayliteralT(keysize = %d, valuesize = %d, length = %d)\n", keysize, valuesize, length); - //printf("tivalue = %.*s\n", ti.next.classinfo.name); - if (length == 0 || valuesize == 0 || keysize == 0) - { - ; - } - else - { - va_list q; - va_start!(size_t)(q, length); - - result = new BB(); - size_t i; - - for (i = 0; i < prime_list.length - 1; i++) - { - if (length <= prime_list[i]) - break; - } - auto len = prime_list[i]; - result.b = new aaA*[len]; - - size_t keystacksize = (keysize + int.sizeof - 1) & ~(int.sizeof - 1); - size_t valuestacksize = (valuesize + int.sizeof - 1) & ~(int.sizeof - 1); - - size_t keytsize = aligntsize(keysize); - - for (size_t j = 0; j < length; j++) - { void* pkey = q; - q += keystacksize; - void* pvalue = q; - q += valuestacksize; - aaA* e; - - auto key_hash = keyti.getHash(pkey); - //printf("hash = %d\n", key_hash); - i = key_hash % len; - auto pe = &result.b[i]; - while (1) - { - e = *pe; - if (!e) - { - // Not found, create new elem - //printf("create new one\n"); - e = cast(aaA *) cast(void*) new void[aaA.sizeof + keytsize + valuesize]; - memcpy(e + 1, pkey, keysize); - e.hash = key_hash; - *pe = e; - result.nodes++; - break; - } - if (key_hash == e.hash) - { - auto c = keyti.compare(pkey, e + 1); - if (c == 0) - break; - pe = (c < 0) ? &e.left : &e.right; - } - else - pe = (key_hash < e.hash) ? &e.left : &e.right; - } - memcpy(cast(void *)(e + 1) + keytsize, pvalue, valuesize); - } - - va_end(q); - } - return result; -} - -+/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/adi.d --- a/tango/lib/compiler/llvmdc/adi.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,589 +0,0 @@ -//_ adi.d - -/** - * Part of the D programming language runtime library. - * Dynamic array property support routines - */ - -/* - * Copyright (C) 2000-2006 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - - -//debug=adi; // uncomment to turn on debugging printf's - -private -{ - import tango.stdc.string; - import tango.stdc.stdlib; - import util.utf; - - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, - NO_SCAN = 0b0000_0010, - NO_MOVE = 0b0000_0100, - ALL_BITS = 0b1111_1111 - } - - extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); - extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); - extern (C) void gc_free( void* p ); -} - - -struct Array -{ - size_t length; - void* ptr; -} - -/********************************************** - * Reverse array of chars. - * Handled separately because embedded multibyte encodings should not be - * reversed. - */ - -extern (C) Array _adReverseChar(char[] a) -{ - if (a.length > 1) - { - char[6] tmp; - char[6] tmplo; - char* lo = a.ptr; - char* hi = &a[length - 1]; - - while (lo < hi) - { auto clo = *lo; - auto chi = *hi; - - debug(adi) printf("lo = %d, hi = %d\n", lo, hi); - if (clo <= 0x7F && chi <= 0x7F) - { - debug(adi) printf("\tascii\n"); - *lo = chi; - *hi = clo; - lo++; - hi--; - continue; - } - - uint stridelo = UTF8stride[clo]; - - uint stridehi = 1; - while ((chi & 0xC0) == 0x80) - { - chi = *--hi; - stridehi++; - assert(hi >= lo); - } - if (lo == hi) - break; - - debug(adi) printf("\tstridelo = %d, stridehi = %d\n", stridelo, stridehi); - if (stridelo == stridehi) - { - - memcpy(tmp.ptr, lo, stridelo); - memcpy(lo, hi, stridelo); - memcpy(hi, tmp.ptr, stridelo); - lo += stridelo; - hi--; - continue; - } - - /* Shift the whole array. This is woefully inefficient - */ - memcpy(tmp.ptr, hi, stridehi); - memcpy(tmplo.ptr, lo, stridelo); - memmove(lo + stridehi, lo + stridelo , cast(size_t)(hi - lo) - stridelo); - memcpy(lo, tmp.ptr, stridehi); - memcpy(hi + stridehi - stridelo, tmplo.ptr, stridelo); - - lo += stridehi; - hi = hi - 1 + (stridehi - stridelo); - } - } - return Array(a.length, a.ptr); -} - -unittest -{ - auto a = "abcd"c; - - auto r = a.dup.reverse; - //writefln(r); - assert(r == "dcba"); - - a = "a\u1235\u1234c"; - //writefln(a); - r = a.dup.reverse; - //writefln(r); - assert(r == "c\u1234\u1235a"); - - a = "ab\u1234c"; - //writefln(a); - r = a.dup.reverse; - //writefln(r); - assert(r == "c\u1234ba"); - - a = "\u3026\u2021\u3061\n"; - r = a.dup.reverse; - assert(r == "\n\u3061\u2021\u3026"); -} - - -/********************************************** - * Reverse array of wchars. - * Handled separately because embedded multiword encodings should not be - * reversed. - */ - -extern (C) Array _adReverseWchar(wchar[] a) -{ - if (a.length > 1) - { - wchar[2] tmp; - wchar* lo = a.ptr; - wchar* hi = &a[length - 1]; - - while (lo < hi) - { auto clo = *lo; - auto chi = *hi; - - if ((clo < 0xD800 || clo > 0xDFFF) && - (chi < 0xD800 || chi > 0xDFFF)) - { - *lo = chi; - *hi = clo; - lo++; - hi--; - continue; - } - - int stridelo = 1 + (clo >= 0xD800 && clo <= 0xDBFF); - - int stridehi = 1; - if (chi >= 0xDC00 && chi <= 0xDFFF) - { - chi = *--hi; - stridehi++; - assert(hi >= lo); - } - if (lo == hi) - break; - - if (stridelo == stridehi) - { int stmp; - - assert(stridelo == 2); - assert(stmp.sizeof == 2 * (*lo).sizeof); - stmp = *cast(int*)lo; - *cast(int*)lo = *cast(int*)hi; - *cast(int*)hi = stmp; - lo += stridelo; - hi--; - continue; - } - - /* Shift the whole array. This is woefully inefficient - */ - memcpy(tmp.ptr, hi, stridehi * wchar.sizeof); - memcpy(hi + stridehi - stridelo, lo, stridelo * wchar.sizeof); - memmove(lo + stridehi, lo + stridelo , (hi - (lo + stridelo)) * wchar.sizeof); - memcpy(lo, tmp.ptr, stridehi * wchar.sizeof); - - lo += stridehi; - hi = hi - 1 + (stridehi - stridelo); - } - } - return Array(a.length, a.ptr); -} - -unittest -{ - wstring a = "abcd"; - wstring r; - - r = a.dup.reverse; - assert(r == "dcba"); - - a = "a\U00012356\U00012346c"; - r = a.dup.reverse; - assert(r == "c\U00012346\U00012356a"); - - a = "ab\U00012345c"; - r = a.dup.reverse; - assert(r == "c\U00012345ba"); -} - - -/********************************************** - * Support for array.reverse property. - */ - -extern (C) Array _adReverse(Array a, size_t szelem) - out (result) - { - assert(result.ptr is a.ptr); - } - body - { - if (a.length >= 2) - { - byte* tmp; - byte[16] buffer; - - void* lo = a.ptr; - void* hi = a.ptr + (a.length - 1) * szelem; - - tmp = buffer.ptr; - if (szelem > 16) - { - //version (Win32) - //tmp = cast(byte*) alloca(szelem); - //else - tmp = cast(byte*) gc_malloc(szelem); - } - - for (; lo < hi; lo += szelem, hi -= szelem) - { - memcpy(tmp, lo, szelem); - memcpy(lo, hi, szelem); - memcpy(hi, tmp, szelem); - } - - version (Win32) - { - } - else - { - //if (szelem > 16) - // BUG: bad code is generate for delete pointer, tries - // to call delclass. - //gc_free(tmp); - } - } - return Array(a.length, a.ptr); - } - -unittest -{ - debug(adi) printf("array.reverse.unittest\n"); - - int[] a = new int[5]; - int[] b; - size_t i; - - for (i = 0; i < 5; i++) - a[i] = i; - b = a.reverse; - assert(b is a); - for (i = 0; i < 5; i++) - assert(a[i] == 4 - i); - - struct X20 - { // More than 16 bytes in size - int a; - int b, c, d, e; - } - - X20[] c = new X20[5]; - X20[] d; - - for (i = 0; i < 5; i++) - { c[i].a = i; - c[i].e = 10; - } - d = c.reverse; - assert(d is c); - for (i = 0; i < 5; i++) - { - assert(c[i].a == 4 - i); - assert(c[i].e == 10); - } -} - -/********************************************** - * Sort array of chars. - */ - -extern (C) Array _adSortChar(char[] a) -{ - if (a.length > 1) - { - dchar[] da = toUTF32(a); - da.sort; - size_t i = 0; - foreach (dchar d; da) - { char[4] buf; - auto t = toUTF8(buf, d); - a[i .. i + t.length] = t[]; - i += t.length; - } - delete da; - } - return Array(a.length, a.ptr); -} - -/********************************************** - * Sort array of wchars. - */ - -extern (C) Array _adSortWchar(wchar[] a) -{ - if (a.length > 1) - { - dchar[] da = toUTF32(a); - da.sort; - size_t i = 0; - foreach (dchar d; da) - { wchar[2] buf; - auto t = toUTF16(buf, d); - a[i .. i + t.length] = t[]; - i += t.length; - } - delete da; - } - return Array(a.length, a.ptr); -} - -/*************************************** - * Support for array equality test. - */ - -extern (C) int _adEq(Array a1, Array a2, TypeInfo ti) -{ - debug(adi) printf("_adEq(a1.length = %d, a2.length = %d)\n", a1.length, a2.length); - - if (a1.length != a2.length) - return 0; // not equal - else if (a1.ptr == a2.ptr) - return 1; // equal - - // let typeinfo decide - return ti.equals(&a1, &a2); -} - -unittest -{ - debug(adi) printf("array.Eq unittest\n"); - - auto a = "hello"c; - - assert(a != "hel"); - assert(a != "helloo"); - assert(a != "betty"); - assert(a == "hello"); - assert(a != "hxxxx"); -} - -/*************************************** - * Support for array compare test. - */ - -extern (C) int _adCmp(Array a1, Array a2, TypeInfo ti) -{ - debug(adi) printf("adCmp()\n"); - - if (a1.ptr == a2.ptr && - a1.length == a2.length) - return 0; - - auto len = a1.length; - if (a2.length < len) - len = a2.length; - - // let typeinfo decide - return ti.compare(&a1, &a2); -} - -unittest -{ - debug(adi) printf("array.Cmp unittest\n"); - - auto a = "hello"c; - - assert(a > "hel"); - assert(a >= "hel"); - assert(a < "helloo"); - assert(a <= "helloo"); - assert(a > "betty"); - assert(a >= "betty"); - assert(a == "hello"); - assert(a <= "hello"); - assert(a >= "hello"); -} - -/*************************************** - * Support for array compare test. - */ - -extern (C) int _adCmpChar(Array a1, Array a2) -{ - version(D_InlineAsm_X86) - { - //version = Asm86; - } - version (Asm86) - { - asm - { naked ; - - push EDI ; - push ESI ; - - mov ESI,a1+4[4+ESP] ; - mov EDI,a2+4[4+ESP] ; - - mov ECX,a1[4+ESP] ; - mov EDX,a2[4+ESP] ; - - cmp ECX,EDX ; - jb GotLength ; - - mov ECX,EDX ; - -GotLength: - cmp ECX,4 ; - jb DoBytes ; - - // Do alignment if neither is dword aligned - test ESI,3 ; - jz Aligned ; - - test EDI,3 ; - jz Aligned ; -DoAlign: - mov AL,[ESI] ; //align ESI to dword bounds - mov DL,[EDI] ; - - cmp AL,DL ; - jnz Unequal ; - - inc ESI ; - inc EDI ; - - test ESI,3 ; - - lea ECX,[ECX-1] ; - jnz DoAlign ; -Aligned: - mov EAX,ECX ; - - // do multiple of 4 bytes at a time - - shr ECX,2 ; - jz TryOdd ; - - repe ; - cmpsd ; - - jnz UnequalQuad ; - -TryOdd: - mov ECX,EAX ; -DoBytes: - // if still equal and not end of string, do up to 3 bytes slightly - // slower. - - and ECX,3 ; - jz Equal ; - - repe ; - cmpsb ; - - jnz Unequal ; -Equal: - mov EAX,a1[4+ESP] ; - mov EDX,a2[4+ESP] ; - - sub EAX,EDX ; - pop ESI ; - - pop EDI ; - ret ; - -UnequalQuad: - mov EDX,[EDI-4] ; - mov EAX,[ESI-4] ; - - cmp AL,DL ; - jnz Unequal ; - - cmp AH,DH ; - jnz Unequal ; - - shr EAX,16 ; - - shr EDX,16 ; - - cmp AL,DL ; - jnz Unequal ; - - cmp AH,DH ; -Unequal: - sbb EAX,EAX ; - pop ESI ; - - or EAX,1 ; - pop EDI ; - - ret ; - } - } - else - { - int len; - int c; - - debug(adi) printf("adCmpChar()\n"); - len = cast(int)a1.length; - if (a2.length < len) - len = cast(int)a2.length; - c = memcmp(cast(char *)a1.ptr, cast(char *)a2.ptr, len); - if (!c) - c = cast(int)a1.length - cast(int)a2.length; - return c; - } -} - -unittest -{ - debug(adi) printf("array.CmpChar unittest\n"); - - auto a = "hello"c; - - assert(a > "hel"); - assert(a >= "hel"); - assert(a < "helloo"); - assert(a <= "helloo"); - assert(a > "betty"); - assert(a >= "betty"); - assert(a == "hello"); - assert(a <= "hello"); - assert(a >= "hello"); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/arrays.d --- a/tango/lib/compiler/llvmdc/arrays.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -private import llvm.intrinsic; - -extern(C): - -int memcmp(void*,void*,size_t); -size_t strlen(char*); - -version(LLVM64) -alias llvm_memcpy_i64 llvm_memcpy; -else -alias llvm_memcpy_i32 llvm_memcpy; - -// per-element array init routines - -void _d_array_init_i1(bool* a, size_t n, bool v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_i8(ubyte* a, size_t n, ubyte v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_i16(ushort* a, size_t n, ushort v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_i32(uint* a, size_t n, uint v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_i64(ulong* a, size_t n, ulong v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_float(float* a, size_t n, float v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_double(double* a, size_t n, double v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_real(real* a, size_t n, real v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_pointer(void** a, size_t n, void* v) -{ - auto p = a; - auto end = a+n; - while (p !is end) - *p++ = v; -} - -void _d_array_init_mem(void* a, size_t na, void* v, size_t nv) -{ - auto p = a; - auto end = a + na*nv; - while (p !is end) { - llvm_memcpy(p,v,nv,0); - p += nv; - } -} - -// for array cast -size_t _d_array_cast_len(size_t len, size_t elemsz, size_t newelemsz) -{ - if (newelemsz == 1) { - return len*elemsz; - } - else if (len % newelemsz) { - throw new Exception("Bad array cast"); - } - return (len*elemsz)/newelemsz; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/cast.d --- a/tango/lib/compiler/llvmdc/cast.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,196 +0,0 @@ -/* - * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -extern (C): - -//debug = PRINTF; -debug(PRINTF) int printf(char*, ...); - -/****************************************** - * Given a pointer: - * If it is an Object, return that Object. - * If it is an interface, return the Object implementing the interface. - * If it is null, return null. - * Else, undefined crash - */ - -Object _d_toObject(void* p) -{ Object o; - debug(PRINTF) printf("toObject(%p)\n", p); - if (p) - { - o = cast(Object)p; - debug(PRINTF) printf("o = %p\n", o); - debug(PRINTF) printf("o.vtbl = %p\n", *cast(void**)p); - ClassInfo oc = o.classinfo; - debug(PRINTF) printf("oc = %p\n", oc); - Interface *pi = **cast(Interface ***)p; - debug(PRINTF) printf("pi = %p\n", pi); - - /* Interface.offset lines up with ClassInfo.name.ptr, - * so we rely on pointers never being less than 64K, - * and interface vtable offsets never being greater. - */ - if (pi.offset < 0x10000) - { - debug(PRINTF) printf("\tpi.offset = %d\n", pi.offset); - o = cast(Object)(p - pi.offset); - } - } - debug(PRINTF) printf("toObject = %p\n", o); - return o; -} - - -/************************************* - * Attempts to cast Object o to class c. - * Returns o if successful, null if not. - */ - -Object _d_interface_cast(void* p, ClassInfo c) -{ Object o; - - debug(PRINTF) printf("_d_interface_cast(p = %p, c = '%.*s')\n", p, c.name.length, c.name.ptr); - if (p) - { - Interface *pi = **cast(Interface ***)p; - - debug(PRINTF) printf("\tpi.offset = %d\n", pi.offset); - o = cast(Object)(p - pi.offset); - return _d_dynamic_cast(o, c); - } - debug(PRINTF) printf("_d_interface_cast = %p\n", o); - return o; -} - -Object _d_dynamic_cast(Object o, ClassInfo c) -{ ClassInfo oc; - size_t offset = 0; - - debug(PRINTF) printf("_d_dynamic_cast(o = %p, c = '%.*s')\n", o, c.name.length, c.name.ptr); - - if (o) - { - oc = o.classinfo; - if (_d_isbaseof2(oc, c, offset)) - { - debug(PRINTF) printf("\toffset = %d\n", offset); - o = cast(Object)(cast(void*)o + offset); - } - else - o = null; - } - //printf("\tresult = %p\n", o); - debug(PRINTF) printf("_d_dynamic_cast = %p\n", o); - return o; -} - -int _d_isbaseof2(ClassInfo oc, ClassInfo c, ref size_t offset) -{ int i; - - debug(PRINTF) printf("_d_isbaseof2(%.*s, %.*s, %ul)\n", oc.name.length, oc.name.ptr, c.name.length, c.name.ptr, offset); - - if (oc is c) - return 1; - do - { - debug(PRINTF) printf("oc.interfaces.length = %ul\n", oc.interfaces.length); - if (oc.base is c) - return 1; - for (i = 0; i < oc.interfaces.length; i++) - { - ClassInfo ic; - - ic = oc.interfaces[i].classinfo; - debug(PRINTF) printf("checking %.*s\n", ic.name.length, ic.name.ptr); - if (ic is c) - { offset = cast(size_t)oc.interfaces[i].offset; - return 1; - } - } - for (i = 0; i < oc.interfaces.length; i++) - { - ClassInfo ic; - - ic = oc.interfaces[i].classinfo; - if (_d_isbaseof2(ic, c, offset)) - { offset = cast(size_t)oc.interfaces[i].offset; - return 1; - } - } - oc = oc.base; - } while (oc); - return 0; -} - -int _d_isbaseof(ClassInfo oc, ClassInfo c) -{ int i; - - if (oc is c) - return 1; - do - { - if (oc.base is c) - return 1; - for (i = 0; i < oc.interfaces.length; i++) - { - ClassInfo ic; - - ic = oc.interfaces[i].classinfo; - if (ic is c || _d_isbaseof(ic, c)) - return 1; - } - oc = oc.base; - } while (oc); - return 0; -} - -/********************************* - * Find the vtbl[] associated with Interface ic. - */ - -void *_d_interface_vtbl(ClassInfo ic, Object o) -{ int i; - ClassInfo oc; - - //printf("__d_interface_vtbl(o = %p, ic = %p)\n", o, ic); - - assert(o); - - oc = o.classinfo; - for (i = 0; i < oc.interfaces.length; i++) - { - ClassInfo oic; - - oic = oc.interfaces[i].classinfo; - if (oic is ic) - { - return cast(void *)oc.interfaces[i].vtbl; - } - } - assert(0); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/critical.c --- a/tango/lib/compiler/llvmdc/critical.c Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -/* - * Placed into the Public Domain - * written by Walter Bright, Digital Mars - * www.digitalmars.com - */ - -/* ================================= Win32 ============================ */ - -#if _WIN32 - -#include - -/****************************************** - * Enter/exit critical section. - */ - -/* We don't initialize critical sections unless we actually need them. - * So keep a linked list of the ones we do use, and in the static destructor - * code, walk the list and release them. - */ - -typedef struct D_CRITICAL_SECTION -{ - struct D_CRITICAL_SECTION *next; - CRITICAL_SECTION cs; -} D_CRITICAL_SECTION; - -static D_CRITICAL_SECTION *dcs_list; -static D_CRITICAL_SECTION critical_section; -static volatile int inited; - -void _d_criticalenter(D_CRITICAL_SECTION *dcs) -{ - if (!dcs->next) - { - EnterCriticalSection(&critical_section.cs); - if (!dcs->next) // if, in the meantime, another thread didn't set it - { - dcs->next = dcs_list; - dcs_list = dcs; - InitializeCriticalSection(&dcs->cs); - } - LeaveCriticalSection(&critical_section.cs); - } - EnterCriticalSection(&dcs->cs); -} - -void _d_criticalexit(D_CRITICAL_SECTION *dcs) -{ - LeaveCriticalSection(&dcs->cs); -} - -void _STI_critical_init() -{ - if (!inited) - { InitializeCriticalSection(&critical_section.cs); - dcs_list = &critical_section; - inited = 1; - } -} - -void _STD_critical_term() -{ - if (inited) - { inited = 0; - while (dcs_list) - { - DeleteCriticalSection(&dcs_list->cs); - dcs_list = dcs_list->next; - } - } -} - -#endif - -/* ================================= linux ============================ */ - -#if linux - -#include -#include -#include - -/****************************************** - * Enter/exit critical section. - */ - -/* We don't initialize critical sections unless we actually need them. - * So keep a linked list of the ones we do use, and in the static destructor - * code, walk the list and release them. - */ - -typedef struct D_CRITICAL_SECTION -{ - struct D_CRITICAL_SECTION *next; - pthread_mutex_t cs; -} D_CRITICAL_SECTION; - -static D_CRITICAL_SECTION *dcs_list; -static D_CRITICAL_SECTION critical_section; -static pthread_mutexattr_t _criticals_attr; - -void _STI_critical_init(void); -void _STD_critical_term(void); - -void _d_criticalenter(D_CRITICAL_SECTION *dcs) -{ - if (!dcs_list) - { _STI_critical_init(); - atexit(_STD_critical_term); - } - //printf("_d_criticalenter(dcs = x%x)\n", dcs); - if (!dcs->next) - { - pthread_mutex_lock(&critical_section.cs); - if (!dcs->next) // if, in the meantime, another thread didn't set it - { - dcs->next = dcs_list; - dcs_list = dcs; - pthread_mutex_init(&dcs->cs, &_criticals_attr); - } - pthread_mutex_unlock(&critical_section.cs); - } - pthread_mutex_lock(&dcs->cs); -} - -void _d_criticalexit(D_CRITICAL_SECTION *dcs) -{ - //printf("_d_criticalexit(dcs = x%x)\n", dcs); - pthread_mutex_unlock(&dcs->cs); -} - -void _STI_critical_init() -{ - if (!dcs_list) - { //printf("_STI_critical_init()\n"); - pthread_mutexattr_init(&_criticals_attr); - pthread_mutexattr_settype(&_criticals_attr, PTHREAD_MUTEX_RECURSIVE_NP); - - // The global critical section doesn't need to be recursive - pthread_mutex_init(&critical_section.cs, 0); - dcs_list = &critical_section; - } -} - -void _STD_critical_term() -{ - if (dcs_list) - { //printf("_STI_critical_term()\n"); - while (dcs_list) - { - //printf("\tlooping... %x\n", dcs_list); - pthread_mutex_destroy(&dcs_list->cs); - dcs_list = dcs_list->next; - } - } -} - -#endif - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/dmain2.d --- a/tango/lib/compiler/llvmdc/dmain2.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,291 +0,0 @@ -/* - * Placed into the Public Domain. - * written by Walter Bright - * www.digitalmars.com - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -private -{ - import util.console; - - import tango.stdc.stddef; - import tango.stdc.stdlib; - import tango.stdc.string; -} - -version( Win32 ) -{ - extern (Windows) void* LocalFree(void*); - extern (Windows) wchar_t* GetCommandLineW(); - extern (Windows) wchar_t** CommandLineToArgvW(wchar_t*, int*); - extern (Windows) export int WideCharToMultiByte(uint, uint, wchar_t*, int, char*, int, char*, int); - //pragma(lib, "shell32.lib"); // needed for CommandLineToArgvW - //pragma(lib, "tango-win32-dmd.lib"); // links Tango's Win32 library to reduce EXE size -} - -extern (C) void _STI_monitor_staticctor(); -extern (C) void _STD_monitor_staticdtor(); -extern (C) void _STI_critical_init(); -extern (C) void _STD_critical_term(); -extern (C) void gc_init(); -extern (C) void gc_term(); -extern (C) void _moduleCtor(); -extern (C) void _moduleDtor(); -extern (C) void thread_joinAll(); - -//debug=PRINTF; -debug(PRINTF) extern (C) int printf(char*, ...); - -/*********************************** - * These functions must be defined for any D program linked - * against this library. - */ -extern (C) void onAssertError( char[] file, size_t line ); -extern (C) void onAssertErrorMsg( char[] file, size_t line, char[] msg ); -extern (C) void onArrayBoundsError( char[] file, size_t line ); -extern (C) void onSwitchError( char[] file, size_t line ); -extern (C) bool runModuleUnitTests(); - -// this function is called from the utf module -//extern (C) void onUnicodeError( char[] msg, size_t idx ); - -/*********************************** - * These are internal callbacks for various language errors. - */ -extern (C) void _d_assert( char[] file, uint line ) -{ - onAssertError( file, line ); -} - -extern (C) void _d_assert_msg( char[] msg, char[] file, uint line ) -{ - onAssertErrorMsg( file, line, msg ); -} - -extern (C) void _d_array_bounds( char[] file, uint line ) -{ - onArrayBoundsError( file, line ); -} - -extern (C) void _d_switch_error( char[] file, uint line ) -{ - onSwitchError( file, line ); -} - -bool _d_isHalting = false; - -extern (C) bool rt_isHalting() -{ - return _d_isHalting; -} - -extern (C) bool rt_trapExceptions = true; - -void _d_criticalInit() -{ - _STI_monitor_staticctor(); - _STI_critical_init(); -} - -// this is here so users can manually initialize the runtime -// for example, when there is no main function etc. -extern (C) bool rt_init( void delegate( Exception ) dg = null ) -{ - _d_criticalInit(); - - try - { - gc_init(); - _moduleCtor(); - return true; - } - catch( Exception e ) - { - if( dg ) - dg( e ); - } - catch - { - - } - _d_criticalTerm(); - return false; -} - -void _d_criticalTerm() -{ - _STD_critical_term(); - _STD_monitor_staticdtor(); -} - -// this is here so users can manually terminate the runtime -// for example, when there is no main function etc. -extern (C) bool rt_term( void delegate( Exception ) dg = null ) -{ - try - { - thread_joinAll(); - _d_isHalting = true; - _moduleDtor(); - gc_term(); - return true; - } - catch( Exception e ) - { - if( dg ) - dg( e ); - } - catch - { - - } - finally - { - _d_criticalTerm(); - } - return false; -} - -/*********************************** - * The D main() function supplied by the user's program - */ -int main(char[][] args); - -/*********************************** - * Substitutes for the C main() function. - * It's purpose is to wrap the call to the D main() - * function and catch any unhandled exceptions. - */ - -extern (C) int main(int argc, char **argv, char** env) -{ - char[][] args; - int result; - - debug(PRINTF) printf("main ctors\n"); - _STI_monitor_staticctor(); - _STI_critical_init(); - - debug(PRINTF) printf("main args\n"); - version (Win32) - { - wchar_t* wcbuf = GetCommandLineW(); - size_t wclen = wcslen(wcbuf); - int wargc = 0; - wchar_t** wargs = CommandLineToArgvW(wcbuf, &wargc); - assert(wargc == argc); - - char* cargp = null; - size_t cargl = WideCharToMultiByte(65001, 0, wcbuf, wclen, null, 0, null, 0); - - cargp = cast(char*) alloca(cargl); - args = ((cast(char[]*) alloca(wargc * (char[]).sizeof)))[0 .. wargc]; - - for (size_t i = 0, p = 0; i < wargc; i++) - { - int wlen = wcslen( wargs[i] ); - int clen = WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, null, 0, null, 0); - args[i] = cargp[p .. p+clen]; - p += clen; assert(p <= cargl); - WideCharToMultiByte(65001, 0, &wargs[i][0], wlen, &args[i][0], clen, null, 0); - } - LocalFree(wargs); - wargs = null; - wargc = 0; - } - else version (linux) - { - char[]* am = cast(char[]*) malloc(argc * (char[]).sizeof); - scope(exit) free(am); - - for (size_t i = 0; i < argc; i++) - { - auto len = strlen(argv[i]); - am[i] = argv[i][0 .. len]; - } - args = am[0 .. argc]; - } - - debug(PRINTF) printf("main trap exceptions\n"); - bool trapExceptions = rt_trapExceptions; - - void tryExec(void delegate() dg) - { - debug(PRINTF) printf("main try exec\n"); - if (trapExceptions) - { - try - { - dg(); - } - catch (Exception e) - { - while (e) - { - if (e.file) - { - debug(PRINTF) printf("%.*s(%u): %.*s\n", e.file.length, e.file.ptr, e.line, e.msg.length, e.msg.ptr); - console (e.classinfo.name)("@")(e.file)("(")(e.line)("): ")(e.msg)("\n"); - } - else - { - // debug(PRINTF) printf("%.*s\n", e.toString()); - console (e.classinfo.name)(": ")(e.toString)("\n"); - } - e = e.next; - } - result = EXIT_FAILURE; - } - catch (Object o) - { - // fprintf(stderr, "%.*s\n", o.toString()); - console (o.toString)("\n"); - result = EXIT_FAILURE; - } - } - else - { - dg(); - } - } - - // NOTE: The lifetime of a process is much like the lifetime of an object: - // it is initialized, then used, then destroyed. If initialization - // fails, the successive two steps are never reached. However, if - // initialization succeeds, then cleanup will occur even if the use - // step fails in some way. Here, the use phase consists of running - // the user's main function. If main terminates with an exception, - // the exception is handled and then cleanup begins. An exception - // thrown during cleanup, however, will abort the cleanup process. - - void runMain() - { - debug(PRINTF) printf("main runMain\n"); - result = main(args); - } - - void runAll() - { - debug(PRINTF) printf("main runAll\n"); - gc_init(); - _moduleCtor(); - if (runModuleUnitTests()) - tryExec(&runMain); - thread_joinAll(); - _d_isHalting = true; - _moduleDtor(); - gc_term(); - } - - tryExec(&runAll); - - debug(PRINTF) printf("main dtor\n"); - _STD_critical_term(); - _STD_monitor_staticdtor(); - - return result; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/eh.d --- a/tango/lib/compiler/llvmdc/eh.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,356 +0,0 @@ -/** - * This module contains functions and structures required for - * exception handling. - */ -module eh; - -import util.console; - -// debug = EH_personality; - -// current EH implementation works on x86 linux only -version(X86) version(linux) version=X86_LINUX; - -private extern(C) void abort(); -private extern(C) int printf(char*, ...); - -// D runtime functions -extern(C) { - int _d_isbaseof(ClassInfo oc, ClassInfo c); -} - -// libunwind headers -extern(C) -{ - enum _Unwind_Reason_Code - { - NO_REASON = 0, - FOREIGN_EXCEPTION_CAUGHT = 1, - FATAL_PHASE2_ERROR = 2, - FATAL_PHASE1_ERROR = 3, - NORMAL_STOP = 4, - END_OF_STACK = 5, - HANDLER_FOUND = 6, - INSTALL_CONTEXT = 7, - CONTINUE_UNWIND = 8 - } - - enum _Unwind_Action - { - SEARCH_PHASE = 1, - CLEANUP_PHASE = 2, - HANDLER_PHASE = 3, - FORCE_UNWIND = 4 - } - - alias void* _Unwind_Context_Ptr; - - alias void function(_Unwind_Reason_Code, _Unwind_Exception*) _Unwind_Exception_Cleanup_Fn; - - struct _Unwind_Exception - { - char[8] exception_class; - _Unwind_Exception_Cleanup_Fn exception_cleanup; - int private_1; - int private_2; - } - -version(X86_LINUX) -{ - void _Unwind_Resume(_Unwind_Exception*); - _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception*); - ulong _Unwind_GetLanguageSpecificData(_Unwind_Context_Ptr context); - ulong _Unwind_GetIP(_Unwind_Context_Ptr context); - ulong _Unwind_SetIP(_Unwind_Context_Ptr context, ulong new_value); - ulong _Unwind_SetGR(_Unwind_Context_Ptr context, int index, ulong new_value); - ulong _Unwind_GetRegionStart(_Unwind_Context_Ptr context); -} -else -{ - // runtime calls these directly - void _Unwind_Resume(_Unwind_Exception*) - { - console("_Unwind_Resume is not implemented on this platform.\n"); - } - _Unwind_Reason_Code _Unwind_RaiseException(_Unwind_Exception*) - { - console("_Unwind_RaiseException is not implemented on this platform.\n"); - return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; - } -} - -} - - -// helpers for reading certain DWARF data -//TODO: It may not be a good idea to use exceptions for error handling within exception handling code -private ubyte* get_uleb128(ubyte* addr, ref size_t res) -{ - res = 0; - size_t bitsize = 0; - - // read as long as high bit is set - while(*addr & 0x80) { - res |= (*addr & 0x7f) << bitsize; - bitsize += 7; - addr += 1; - if(bitsize >= size_t.sizeof*8) - throw new Exception("tried to read uleb128 that exceeded size of size_t"); - } - // read last - if(bitsize != 0 && *addr >= 1 << size_t.sizeof*8 - bitsize) - throw new Exception("tried to read uleb128 that exceeded size of size_t"); - res |= (*addr) << bitsize; - - return addr + 1; -} - -private ubyte* get_sleb128(ubyte* addr, ref ptrdiff_t res) -{ - res = 0; - size_t bitsize = 0; - - // read as long as high bit is set - while(*addr & 0x80) { - res |= (*addr & 0x7f) << bitsize; - bitsize += 7; - addr += 1; - if(bitsize >= size_t.sizeof*8) - throw new Exception("tried to read sleb128 that exceeded size of size_t"); - } - // read last - if(bitsize != 0 && *addr >= 1 << size_t.sizeof*8 - bitsize) - throw new Exception("tried to read sleb128 that exceeded size of size_t"); - res |= (*addr) << bitsize; - - // take care of sign - if(bitsize < size_t.sizeof*8 && ((*addr) & 0x40)) - res |= cast(ptrdiff_t)(-1) ^ ((1 << (bitsize+7)) - 1); - - return addr + 1; -} - - -// exception struct used by the runtime. -// _d_throw allocates a new instance and passes the address of its -// _Unwind_Exception member to the unwind call. The personality -// routine is then able to get the whole struct by looking at the data -// surrounding the unwind info. -struct _d_exception -{ - Object exception_object; - _Unwind_Exception unwind_info; -} - -// the 8-byte string identifying the type of exception -// the first 4 are for vendor, the second 4 for language -//TODO: This may be the wrong way around -char[8] _d_exception_class = "LLDCD1\0\0"; - - -// -// x86 Linux specific implementation of personality function -// and helpers -// -version(X86_LINUX) -{ - -// the personality routine gets called by the unwind handler and is responsible for -// reading the EH tables and deciding what to do -extern(C) _Unwind_Reason_Code _d_eh_personality(int ver, _Unwind_Action actions, ulong exception_class, _Unwind_Exception* exception_info, _Unwind_Context_Ptr context) -{ - // check ver: the C++ Itanium ABI only allows ver == 1 - if(ver != 1) - return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; - - // check exceptionClass - //TODO: Treat foreign exceptions with more respect - if((cast(char*)&exception_class)[0..8] != _d_exception_class) - return _Unwind_Reason_Code.FATAL_PHASE1_ERROR; - - // find call site table, action table and classinfo table - // Note: callsite and action tables do not contain static-length - // data and will be parsed as needed - // Note: classinfo_table points past the end of the table - ubyte* callsite_table; - ubyte* action_table; - ClassInfo* classinfo_table; - _d_getLanguageSpecificTables(context, callsite_table, action_table, classinfo_table); - - - /* - find landing pad and action table index belonging to ip by walking - the callsite_table - */ - ubyte* callsite_walker = callsite_table; - - // get the instruction pointer - // will be used to find the right entry in the callsite_table - // -1 because it will point past the last instruction - ulong ip = _Unwind_GetIP(context) - 1; - - // address block_start is relative to - ulong region_start = _Unwind_GetRegionStart(context); - - // table entries - uint block_start_offset, block_size; - ulong landing_pad; - size_t action_offset; - - while(true) { - // if we've gone through the list and found nothing... - if(callsite_walker >= action_table) - return _Unwind_Reason_Code.CONTINUE_UNWIND; - - block_start_offset = *cast(uint*)callsite_walker; - block_size = *(cast(uint*)callsite_walker + 1); - landing_pad = *(cast(uint*)callsite_walker + 2); - if(landing_pad) - landing_pad += region_start; - callsite_walker = get_uleb128(callsite_walker + 3*uint.sizeof, action_offset); - - debug(EH_personality_verbose) printf("%d %d %d\n", block_start_offset, block_size, landing_pad); - - // since the list is sorted, as soon as we're past the ip - // there's no handler to be found - if(ip < region_start + block_start_offset) - return _Unwind_Reason_Code.CONTINUE_UNWIND; - - // if we've found our block, exit - if(ip < region_start + block_start_offset + block_size) - break; - } - - debug(EH_personality) printf("Found correct landing pad and actionOffset %d\n", action_offset); - - // now we need the exception's classinfo to find a handler - // the exception_info is actually a member of a larger _d_exception struct - // the runtime allocated. get that now - _d_exception* exception_struct = cast(_d_exception*)(cast(ubyte*)exception_info - _d_exception.unwind_info.offsetof); - - // if there's no action offset and no landing pad, continue unwinding - if(!action_offset && !landing_pad) - return _Unwind_Reason_Code.CONTINUE_UNWIND; - - // if there's no action offset but a landing pad, this is a cleanup handler - else if(!action_offset && landing_pad) - return _d_eh_install_finally_context(actions, landing_pad, exception_struct, context); - - /* - walk action table chain, comparing classinfos using _d_isbaseof - */ - ubyte* action_walker = action_table + action_offset - 1; - - ptrdiff_t ti_offset, next_action_offset; - while(true) { - action_walker = get_sleb128(action_walker, ti_offset); - // it is intentional that we not modify action_walker here - // next_action_offset is from current action_walker position - get_sleb128(action_walker, next_action_offset); - - // negative are 'filters' which we don't use - assert(ti_offset >= 0 && "Filter actions are unsupported"); - - // zero means cleanup, which we require to be the last action - if(ti_offset == 0) { - assert(next_action_offset == 0 && "Cleanup action must be last in chain"); - return _d_eh_install_finally_context(actions, landing_pad, exception_struct, context); - } - - // get classinfo for action and check if the one in the - // exception structure is a base - ClassInfo catch_ci = classinfo_table[-ti_offset]; - debug(EH_personality) printf("Comparing catch %s to exception %s\n", catch_ci.name.ptr, exception_struct.exception_object.classinfo.name.ptr); - if(_d_isbaseof(exception_struct.exception_object.classinfo, catch_ci)) - return _d_eh_install_catch_context(actions, ti_offset, landing_pad, exception_struct, context); - - // we've walked through all actions and found nothing... - if(next_action_offset == 0) - return _Unwind_Reason_Code.CONTINUE_UNWIND; - else - action_walker += next_action_offset; - } - - assert(false); -} - -// These are the register numbers for SetGR that -// llvm's eh.exception and eh.selector intrinsics -// will pick up. -// Found by trial-and-error and probably platform dependent! -private int eh_exception_regno = 0; -private int eh_selector_regno = 2; - -private _Unwind_Reason_Code _d_eh_install_catch_context(_Unwind_Action actions, ptrdiff_t switchval, ulong landing_pad, _d_exception* exception_struct, _Unwind_Context_Ptr context) -{ - debug(EH_personality) printf("Found catch clause!\n"); - - if(actions & _Unwind_Action.SEARCH_PHASE) - return _Unwind_Reason_Code.HANDLER_FOUND; - - else if(actions & _Unwind_Action.HANDLER_PHASE) - { - debug(EH_personality) printf("Setting switch value to: %d!\n", switchval); - _Unwind_SetGR(context, eh_exception_regno, cast(ulong)cast(void*)(exception_struct.exception_object)); - _Unwind_SetGR(context, eh_selector_regno, switchval); - _Unwind_SetIP(context, landing_pad); - return _Unwind_Reason_Code.INSTALL_CONTEXT; - } - - assert(false); -} - -private _Unwind_Reason_Code _d_eh_install_finally_context(_Unwind_Action actions, ulong landing_pad, _d_exception* exception_struct, _Unwind_Context_Ptr context) -{ - // if we're merely in search phase, continue - if(actions & _Unwind_Action.SEARCH_PHASE) - return _Unwind_Reason_Code.CONTINUE_UNWIND; - - debug(EH_personality) printf("Calling cleanup routine...\n"); - - _Unwind_SetGR(context, eh_exception_regno, cast(ulong)exception_struct); - _Unwind_SetGR(context, eh_selector_regno, 0); - _Unwind_SetIP(context, landing_pad); - return _Unwind_Reason_Code.INSTALL_CONTEXT; -} - -private void _d_getLanguageSpecificTables(_Unwind_Context_Ptr context, ref ubyte* callsite, ref ubyte* action, ref ClassInfo* ci) -{ - ubyte* data = cast(ubyte*)_Unwind_GetLanguageSpecificData(context); - - //TODO: Do proper DWARF reading here - assert(*data++ == 0xff); - - assert(*data++ == 0x00); - size_t cioffset; - data = get_uleb128(data, cioffset); - ci = cast(ClassInfo*)(data + cioffset); - - assert(*data++ == 0x03); - size_t callsitelength; - data = get_uleb128(data, callsitelength); - action = data + callsitelength; - - callsite = data; -} - -} // end of x86 Linux specific implementation - - -extern(C) void _d_throw_exception(Object e) -{ - if (e !is null) - { - _d_exception* exc_struct = new _d_exception; - exc_struct.unwind_info.exception_class[] = _d_exception_class; - exc_struct.exception_object = e; - _Unwind_Reason_Code ret = _Unwind_RaiseException(&exc_struct.unwind_info); - console("_Unwind_RaiseException failed with reason code: ")(ret)("\n"); - } - abort(); -} - -extern(C) void _d_eh_resume_unwind(_d_exception* exception_struct) -{ - _Unwind_Resume(&exception_struct.unwind_info); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/genobj.d --- a/tango/lib/compiler/llvmdc/genobj.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1294 +0,0 @@ -/** - * Part of the D programming language runtime library. - * Forms the symbols available to all D programs. Includes - * Object, which is the root of the class object hierarchy. - * - * This module is implicitly imported. - * Macros: - * WIKI = Object - */ - -/* - * Copyright (C) 2004-2007 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - * Modified by Tomas Lindquist Olsen for use with LLVMDC. - */ - -module object; - -//debug=PRINTF - -private -{ - import tango.stdc.string; // : memcmp, memcpy, memmove; - import tango.stdc.stdlib; // : calloc, realloc, free; - import util.string; - debug(PRINTF) import tango.stdc.stdio; // : printf; - - extern (C) void onOutOfMemoryError(); - extern (C) Object _d_newclass(ClassInfo ci); -} - -// NOTE: For some reason, this declaration method doesn't work -// in this particular file (and this file only). It must -// be a DMD thing. -//alias typeof(int.sizeof) size_t; -//alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; - -version( LLVM64 ) -{ - alias ulong size_t; - alias long ptrdiff_t; -} -else -{ - alias uint size_t; - alias int ptrdiff_t; -} - -alias size_t hash_t; - -/** - * All D class objects inherit from Object. - */ -class Object -{ - /** - * Convert Object to a human readable string. - */ - char[] toString() - { - return this.classinfo.name; - } - - /** - * Compute hash function for Object. - */ - hash_t toHash() - { - // BUG: this prevents a compacting GC from working, needs to be fixed - return cast(hash_t)cast(void*)this; - } - - /** - * Compare with another Object obj. - * Returns: - * $(TABLE - * $(TR $(TD this < obj) $(TD < 0)) - * $(TR $(TD this == obj) $(TD 0)) - * $(TR $(TD this > obj) $(TD > 0)) - * ) - */ - int opCmp(Object o) - { - // BUG: this prevents a compacting GC from working, needs to be fixed - //return cast(int)cast(void*)this - cast(int)cast(void*)o; - - //throw new Exception("need opCmp for class " ~ this.classinfo.name); - return this !is o; - } - - /** - * Returns !=0 if this object does have the same contents as obj. - */ - int opEquals(Object o) - { - return cast(int)(this is o); - } - - interface Monitor - { - void lock(); - void unlock(); - } -} - -/** - * Information about an interface. - * When an object is accessed via an interface, an Interface* appears as the - * first entry in its vtbl. - */ -struct Interface -{ - ClassInfo classinfo; /// .classinfo for this interface (not for containing class) - void*[] vtbl; - ptrdiff_t offset; /// offset to Interface 'this' from Object 'this' -} - -/** - * Runtime type information about a class. Can be retrieved for any class type - * or instance by using the .classinfo property. - * A pointer to this appears as the first entry in the class's vtbl[]. - */ -class ClassInfo : Object -{ - byte[] init; /** class static initializer - * (init.length gives size in bytes of class) - */ - char[] name; /// class name - void*[] vtbl; /// virtual function pointer table - Interface[] interfaces; /// interfaces this class implements - ClassInfo base; /// base class - void* destructor; - void function(Object) classInvariant; - uint flags; - // 1: // IUnknown - // 2: // has no possible pointers into GC memory - // 4: // has offTi[] member - // 8: // has constructors - void* deallocator; - OffsetTypeInfo[] offTi; - void function(Object) defaultConstructor; // default Constructor - - /** - * Search all modules for ClassInfo corresponding to classname. - * Returns: null if not found - */ - static ClassInfo find(char[] classname) - { - foreach (m; ModuleInfo) - { - //writefln("module %s, %d", m.name, m.localClasses.length); - foreach (c; m.localClasses) - { - //writefln("\tclass %s", c.name); - if (c.name == classname) - return c; - } - } - return null; - } - - /** - * Create instance of Object represented by 'this'. - */ - Object create() - { - if (flags & 8 && !defaultConstructor) - return null; - Object o = _d_newclass(this); - if (flags & 8 && defaultConstructor) - { - defaultConstructor(o); - } - return o; - } -} - -/** - * Array of pairs giving the offset and type information for each - * member in an aggregate. - */ -struct OffsetTypeInfo -{ - size_t offset; /// Offset of member from start of object - TypeInfo ti; /// TypeInfo for this member -} - -/** - * Runtime type information about a type. - * Can be retrieved for any type using a - * TypeidExpression. - */ -class TypeInfo -{ - hash_t toHash() - { hash_t hash; - - foreach (char c; this.toString()) - hash = hash * 9 + c; - return hash; - } - - int opCmp(Object o) - { - if (this is o) - return 0; - TypeInfo ti = cast(TypeInfo)o; - if (ti is null) - return 1; - return stringCompare(this.toString(), ti.toString()); - } - - int opEquals(Object o) - { - /* TypeInfo instances are singletons, but duplicates can exist - * across DLL's. Therefore, comparing for a name match is - * sufficient. - */ - if (this is o) - return 1; - TypeInfo ti = cast(TypeInfo)o; - return cast(int)(ti && this.toString() == ti.toString()); - } - - /// Returns a hash of the instance of a type. - hash_t getHash(void *p) { return cast(hash_t)p; } - - /// Compares two instances for equality. - int equals(void *p1, void *p2) { return cast(int)(p1 == p2); } - - /// Compares two instances for <, ==, or >. - int compare(void *p1, void *p2) { return 0; } - - /// Returns size of the type. - size_t tsize() { return 0; } - - /// Swaps two instances of the type. - void swap(void *p1, void *p2) - { - size_t n = tsize(); - for (size_t i = 0; i < n; i++) - { byte t; - - t = (cast(byte *)p1)[i]; - (cast(byte *)p1)[i] = (cast(byte *)p2)[i]; - (cast(byte *)p2)[i] = t; - } - } - - /// Get TypeInfo for 'next' type, as defined by what kind of type this is, - /// null if none. - TypeInfo next() { return null; } - - /// Return default initializer, null if default initialize to 0 - void[] init() { return null; } - - /// Get flags for type: 1 means GC should scan for pointers - uint flags() { return 0; } - - /// Get type information on the contents of the type; null if not available - OffsetTypeInfo[] offTi() { return null; } -} - -class TypeInfo_Typedef : TypeInfo -{ - char[] toString() { return name; } - - int opEquals(Object o) - { TypeInfo_Typedef c; - - return cast(int) - (this is o || - ((c = cast(TypeInfo_Typedef)o) !is null && - this.name == c.name && - this.base == c.base)); - } - - hash_t getHash(void *p) { return base.getHash(p); } - int equals(void *p1, void *p2) { return base.equals(p1, p2); } - int compare(void *p1, void *p2) { return base.compare(p1, p2); } - size_t tsize() { return base.tsize(); } - void swap(void *p1, void *p2) { return base.swap(p1, p2); } - - TypeInfo next() { return base; } - uint flags() { return base.flags(); } - void[] init() { return m_init.length ? m_init : base.init(); } - - TypeInfo base; - char[] name; - void[] m_init; -} - -class TypeInfo_Enum : TypeInfo_Typedef -{ -} - -class TypeInfo_Pointer : TypeInfo -{ - char[] toString() { return m_next.toString() ~ "*"; } - - int opEquals(Object o) - { TypeInfo_Pointer c; - - return this is o || - ((c = cast(TypeInfo_Pointer)o) !is null && - this.m_next == c.m_next); - } - - hash_t getHash(void *p) - { - return cast(hash_t)*cast(void**)p; - } - - int equals(void *p1, void *p2) - { - return cast(int)(*cast(void* *)p1 == *cast(void* *)p2); - } - - int compare(void *p1, void *p2) - { - if (*cast(void* *)p1 < *cast(void* *)p2) - return -1; - else if (*cast(void* *)p1 > *cast(void* *)p2) - return 1; - else - return 0; - } - - size_t tsize() - { - return (void*).sizeof; - } - - void swap(void *p1, void *p2) - { void* tmp; - tmp = *cast(void**)p1; - *cast(void**)p1 = *cast(void**)p2; - *cast(void**)p2 = tmp; - } - - TypeInfo next() { return m_next; } - uint flags() { return 1; } - - TypeInfo m_next; -} - -class TypeInfo_Array : TypeInfo -{ - char[] toString() { return value.toString() ~ "[]"; } - - int opEquals(Object o) - { TypeInfo_Array c; - - return cast(int) - (this is o || - ((c = cast(TypeInfo_Array)o) !is null && - this.value == c.value)); - } - - hash_t getHash(void *p) - { size_t sz = value.tsize(); - hash_t hash = 0; - void[] a = *cast(void[]*)p; - for (size_t i = 0; i < a.length; i++) - hash += value.getHash(a.ptr + i * sz); - return hash; - } - - int equals(void *p1, void *p2) - { - void[] a1 = *cast(void[]*)p1; - void[] a2 = *cast(void[]*)p2; - if (a1.length != a2.length) - return 0; - size_t sz = value.tsize(); - for (size_t i = 0; i < a1.length; i++) - { - if (!value.equals(a1.ptr + i * sz, a2.ptr + i * sz)) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - void[] a1 = *cast(void[]*)p1; - void[] a2 = *cast(void[]*)p2; - size_t sz = value.tsize(); - size_t len = a1.length; - - if (a2.length < len) - len = a2.length; - for (size_t u = 0; u < len; u++) - { - int result = value.compare(a1.ptr + u * sz, a2.ptr + u * sz); - if (result) - return result; - } - return cast(int)a1.length - cast(int)a2.length; - } - - size_t tsize() - { - return (void[]).sizeof; - } - - void swap(void *p1, void *p2) - { void[] tmp; - tmp = *cast(void[]*)p1; - *cast(void[]*)p1 = *cast(void[]*)p2; - *cast(void[]*)p2 = tmp; - } - - TypeInfo value; - - TypeInfo next() - { - return value; - } - - uint flags() { return 1; } -} - -class TypeInfo_StaticArray : TypeInfo -{ - char[] toString() - { - char [10] tmp = void; - return value.toString() ~ "[" ~ intToUtf8(tmp, len) ~ "]"; - } - - int opEquals(Object o) - { TypeInfo_StaticArray c; - - return cast(int) - (this is o || - ((c = cast(TypeInfo_StaticArray)o) !is null && - this.len == c.len && - this.value == c.value)); - } - - hash_t getHash(void *p) - { size_t sz = value.tsize(); - hash_t hash = 0; - for (size_t i = 0; i < len; i++) - hash += value.getHash(p + i * sz); - return hash; - } - - int equals(void *p1, void *p2) - { - size_t sz = value.tsize(); - - for (size_t u = 0; u < len; u++) - { - if (!value.equals(p1 + u * sz, p2 + u * sz)) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - size_t sz = value.tsize(); - - for (size_t u = 0; u < len; u++) - { - int result = value.compare(p1 + u * sz, p2 + u * sz); - if (result) - return result; - } - return 0; - } - - size_t tsize() - { - return len * value.tsize(); - } - - void swap(void *p1, void *p2) - { void* tmp; - size_t sz = value.tsize(); - ubyte[16] buffer; - void* pbuffer; - - if (sz < buffer.sizeof) - tmp = buffer.ptr; - else - tmp = pbuffer = (new void[sz]).ptr; - - for (size_t u = 0; u < len; u += sz) - { size_t o = u * sz; - memcpy(tmp, p1 + o, sz); - memcpy(p1 + o, p2 + o, sz); - memcpy(p2 + o, tmp, sz); - } - if (pbuffer) - delete pbuffer; - } - - void[] init() { return value.init(); } - TypeInfo next() { return value; } - uint flags() { return value.flags(); } - - TypeInfo value; - size_t len; -} - -class TypeInfo_AssociativeArray : TypeInfo -{ - char[] toString() - { - return next.toString() ~ "[" ~ key.toString() ~ "]"; - } - - int opEquals(Object o) - { TypeInfo_AssociativeArray c; - - return this is o || - ((c = cast(TypeInfo_AssociativeArray)o) !is null && - this.key == c.key && - this.value == c.value); - } - - // BUG: need to add the rest of the functions - - size_t tsize() - { - return (char[int]).sizeof; - } - - TypeInfo next() { return value; } - uint flags() { return 1; } - - TypeInfo value; - TypeInfo key; -} - -class TypeInfo_Function : TypeInfo -{ - char[] toString() - { - return next.toString() ~ "()"; - } - - int opEquals(Object o) - { TypeInfo_Function c; - - return this is o || - ((c = cast(TypeInfo_Function)o) !is null && - this.next == c.next); - } - - // BUG: need to add the rest of the functions - - size_t tsize() - { - return 0; // no size for functions - } - - TypeInfo next; -} - -class TypeInfo_Delegate : TypeInfo -{ - char[] toString() - { - return next.toString() ~ " delegate()"; - } - - int opEquals(Object o) - { TypeInfo_Delegate c; - - return this is o || - ((c = cast(TypeInfo_Delegate)o) !is null && - this.next == c.next); - } - - // BUG: need to add the rest of the functions - - size_t tsize() - { alias int delegate() dg; - return dg.sizeof; - } - - uint flags() { return 1; } - - TypeInfo next; -} - -class TypeInfo_Class : TypeInfo -{ - char[] toString() { return info.name; } - - int opEquals(Object o) - { TypeInfo_Class c; - - return this is o || - ((c = cast(TypeInfo_Class)o) !is null && - this.info.name == c.classinfo.name); - } - - hash_t getHash(void *p) - { - Object o = *cast(Object*)p; - return o ? o.toHash() : 0; - } - - int equals(void *p1, void *p2) - { - Object o1 = *cast(Object*)p1; - Object o2 = *cast(Object*)p2; - - return (o1 is o2) || (o1 && o1.opEquals(o2)); - } - - int compare(void *p1, void *p2) - { - Object o1 = *cast(Object*)p1; - Object o2 = *cast(Object*)p2; - int c = 0; - - // Regard null references as always being "less than" - if (o1 !is o2) - { - if (o1) - { if (!o2) - c = 1; - else - c = o1.opCmp(o2); - } - else - c = -1; - } - return c; - } - - size_t tsize() - { - return Object.sizeof; - } - - uint flags() { return 1; } - - OffsetTypeInfo[] offTi() - { - return (info.flags & 4) ? info.offTi : null; - } - - ClassInfo info; -} - -class TypeInfo_Interface : TypeInfo -{ - char[] toString() { return info.name; } - - int opEquals(Object o) - { TypeInfo_Interface c; - - return this is o || - ((c = cast(TypeInfo_Interface)o) !is null && - this.info.name == c.classinfo.name); - } - - hash_t getHash(void *p) - { - Interface* pi = **cast(Interface ***)*cast(void**)p; - Object o = cast(Object)(*cast(void**)p - pi.offset); - assert(o); - return o.toHash(); - } - - int equals(void *p1, void *p2) - { - Interface* pi = **cast(Interface ***)*cast(void**)p1; - Object o1 = cast(Object)(*cast(void**)p1 - pi.offset); - pi = **cast(Interface ***)*cast(void**)p2; - Object o2 = cast(Object)(*cast(void**)p2 - pi.offset); - - return o1 == o2 || (o1 && o1.opCmp(o2) == 0); - } - - int compare(void *p1, void *p2) - { - Interface* pi = **cast(Interface ***)*cast(void**)p1; - Object o1 = cast(Object)(*cast(void**)p1 - pi.offset); - pi = **cast(Interface ***)*cast(void**)p2; - Object o2 = cast(Object)(*cast(void**)p2 - pi.offset); - int c = 0; - - // Regard null references as always being "less than" - if (o1 != o2) - { - if (o1) - { if (!o2) - c = 1; - else - c = o1.opCmp(o2); - } - else - c = -1; - } - return c; - } - - size_t tsize() - { - return Object.sizeof; - } - - uint flags() { return 1; } - - ClassInfo info; -} - -class TypeInfo_Struct : TypeInfo -{ - char[] toString() { return name; } - - int opEquals(Object o) - { TypeInfo_Struct s; - - return this is o || - ((s = cast(TypeInfo_Struct)o) !is null && - this.name == s.name && - this.init.length == s.init.length); - } - - hash_t getHash(void *p) - { hash_t h; - - assert(p); - if (xtoHash) - { debug(PRINTF) printf("getHash() using xtoHash\n"); - h = (*xtoHash)(p); - } - else - { - debug(PRINTF) printf("getHash() using default hash\n"); - // A sorry hash algorithm. - // Should use the one for strings. - // BUG: relies on the GC not moving objects - for (size_t i = 0; i < m_init.length; i++) - { h = h * 9 + *cast(ubyte*)p; - p++; - } - } - return h; - } - - int equals(void *p1, void *p2) - { int c; - - if (p1 == p2) - c = 1; - else if (!p1 || !p2) - c = 0; - else if (xopEquals) - c = (*xopEquals)(p1, p2); - else - // BUG: relies on the GC not moving objects - c = (memcmp(p1, p2, m_init.length) == 0); - return c; - } - - int compare(void *p1, void *p2) - { - int c = 0; - - // Regard null references as always being "less than" - if (p1 != p2) - { - if (p1) - { if (!p2) - c = 1; - else if (xopCmp) - c = (*xopCmp)(p1, p2); - else - // BUG: relies on the GC not moving objects - c = memcmp(p1, p2, m_init.length); - } - else - c = -1; - } - return c; - } - - size_t tsize() - { - return m_init.length; - } - - void[] init() { return m_init; } - - uint flags() { return m_flags; } - - char[] name; - void[] m_init; // initializer; never null - - hash_t function(void*) xtoHash; - int function(void*,void*) xopEquals; - int function(void*,void*) xopCmp; - char[] function(void*) xtoString; - - uint m_flags; -} - -class TypeInfo_Tuple : TypeInfo -{ - TypeInfo[] elements; - - char[] toString() - { - char[] s; - s = "("; - foreach (i, element; elements) - { - if (i) - s ~= ','; - s ~= element.toString(); - } - s ~= ")"; - return s; - } - - int opEquals(Object o) - { - if (this is o) - return 1; - - auto t = cast(TypeInfo_Tuple)o; - if (t && elements.length == t.elements.length) - { - for (size_t i = 0; i < elements.length; i++) - { - if (elements[i] != t.elements[i]) - return 0; - } - return 1; - } - return 0; - } - - hash_t getHash(void *p) - { - assert(0); - } - - int equals(void *p1, void *p2) - { - assert(0); - } - - int compare(void *p1, void *p2) - { - assert(0); - } - - size_t tsize() - { - assert(0); - } - - void swap(void *p1, void *p2) - { - assert(0); - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Exception -//////////////////////////////////////////////////////////////////////////////// - - -class Exception : Object -{ - interface TraceInfo - { - int opApply( int delegate( inout char[] ) ); - } - - char[] msg; - char[] file; - size_t line; - TraceInfo info; - Exception next; - - this( char[] msg, Exception next = null ) - { - this.msg = msg; - this.next = next; - this.info = traceContext(); - } - - this( char[] msg, char[] file, size_t line, Exception next = null ) - { - this(msg, next); - this.file = file; - this.line = line; - this.info = traceContext(); - } - - char[] toString() - { - return msg; - } -} - - -alias Exception.TraceInfo function( void* ptr = null ) TraceHandler; -private TraceHandler traceHandler = null; - - -/** - * Overrides the default trace hander with a user-supplied version. - * - * Params: - * h = The new trace handler. Set to null to use the default handler. - */ -extern (C) void rt_setTraceHandler( TraceHandler h ) -{ - traceHandler = h; -} - - -/** - * This function will be called when an Exception is constructed. The - * user-supplied trace handler will be called if one has been supplied, - * otherwise no trace will be generated. - * - * Params: - * ptr = A pointer to the location from which to generate the trace, or null - * if the trace should be generated from within the trace handler - * itself. - * - * Returns: - * An object describing the current calling context or null if no handler is - * supplied. - */ -Exception.TraceInfo traceContext( void* ptr = null ) -{ - if( traceHandler is null ) - return null; - return traceHandler( ptr ); -} - - -//////////////////////////////////////////////////////////////////////////////// -// ModuleInfo -//////////////////////////////////////////////////////////////////////////////// - - -enum -{ - MIctorstart = 1, // we've started constructing it - MIctordone = 2, // finished construction - MIstandalone = 4, // module ctor does not depend on other module - // ctors being done first - MIhasictor = 8, // has ictor member -} - - -class ModuleInfo -{ - char[] name; - ModuleInfo[] importedModules; - ClassInfo[] localClasses; - uint flags; - - void function() ctor; // module static constructor (order dependent) - void function() dtor; // module static destructor - void function() unitTest; // module unit tests - - void* xgetMembers; // module getMembers() function - - void function() ictor; // module static constructor (order independent) - - static int opApply( int delegate( inout ModuleInfo ) dg ) - { - int ret = 0; - - foreach( m; _moduleinfo_array ) - { - ret = dg( m ); - if( ret ) - break; - } - return ret; - } -} - - -// this gets initialized in _moduleCtor() -extern (C) ModuleInfo[] _moduleinfo_array; - -// This linked list is created by a compiler generated function inserted -// into the .ctor list by the compiler. -struct ModuleReference -{ - ModuleReference* next; - ModuleInfo mod; -} -extern (C) ModuleReference* _Dmodule_ref; // start of linked list - -// this list is built from the linked list above -ModuleInfo[] _moduleinfo_dtors; -uint _moduleinfo_dtors_i; - -/** - * Initialize the modules. - */ - -extern (C) void _moduleCtor() -{ - debug(PRINTF) printf("_moduleCtor()\n"); - - int len = 0; - ModuleReference *mr; - - for (mr = _Dmodule_ref; mr; mr = mr.next) - len++; - _moduleinfo_array = new ModuleInfo[len]; - len = 0; - for (mr = _Dmodule_ref; mr; mr = mr.next) - { _moduleinfo_array[len] = mr.mod; - len++; - } - - _moduleinfo_dtors = new ModuleInfo[_moduleinfo_array.length]; - debug(PRINTF) printf("_moduleinfo_dtors = x%x\n", cast(void *)_moduleinfo_dtors); - _moduleIndependentCtors(); - _moduleCtor2(_moduleinfo_array, 0); -} - -extern (C) void _moduleIndependentCtors() -{ - debug(PRINTF) printf("_moduleIndependentCtors()\n"); - foreach (m; _moduleinfo_array) - { - if (m && m.flags & MIhasictor && m.ictor) - { - (*m.ictor)(); - } - } - debug(PRINTF) printf("_moduleIndependentCtors() DONE\n"); -} - -void _moduleCtor2(ModuleInfo[] mi, int skip) -{ - debug(PRINTF) printf("_moduleCtor2(): %d modules\n", mi.length); - for (uint i = 0; i < mi.length; i++) - { - ModuleInfo m = mi[i]; - - debug(PRINTF) printf("\tmodule[%d] = '%p'\n", i, m); - if (!m) - continue; - debug(PRINTF) printf("\tmodule[%d] = '%.*s'\n", i, m.name.length, m.name.ptr); - if (m.flags & MIctordone) - continue; - debug(PRINTF) printf("\tmodule[%d] = '%.*s', m = x%x\n", i, m.name.length, m.name.ptr, m); - - if (m.ctor || m.dtor) - { - if (m.flags & MIctorstart) - { if (skip || m.flags & MIstandalone) - continue; - throw new Exception( "Cyclic dependency in module " ~ m.name ); - } - - m.flags |= MIctorstart; - _moduleCtor2(m.importedModules, 0); - if (m.ctor) - (*m.ctor)(); - m.flags &= ~MIctorstart; - m.flags |= MIctordone; - - // Now that construction is done, register the destructor - //printf("\tadding module dtor x%x\n", m); - assert(_moduleinfo_dtors_i < _moduleinfo_dtors.length); - _moduleinfo_dtors[_moduleinfo_dtors_i++] = m; - } - else - { - m.flags |= MIctordone; - _moduleCtor2(m.importedModules, 1); - } - } - debug(PRINTF) printf("_moduleCtor2() DONE\n"); -} - -/** - * Destruct the modules. - */ - -// Starting the name with "_STD" means under linux a pointer to the -// function gets put in the .dtors segment. - -extern (C) void _moduleDtor() -{ - debug(PRINTF) printf("_moduleDtor(): %d modules\n", _moduleinfo_dtors_i); - - for (uint i = _moduleinfo_dtors_i; i-- != 0;) - { - ModuleInfo m = _moduleinfo_dtors[i]; - - debug(PRINTF) printf("\tmodule[%d] = '%.*s', x%x\n", i, m.name, m); - if (m.dtor) - { - (*m.dtor)(); - } - } - debug(PRINTF) printf("_moduleDtor() done\n"); -} - -//////////////////////////////////////////////////////////////////////////////// -// Monitor -//////////////////////////////////////////////////////////////////////////////// - -alias Object.Monitor IMonitor; -alias void delegate(Object) DEvent; - -// NOTE: The dtor callback feature is only supported for monitors that are not -// supplied by the user. The assumption is that any object with a user- -// supplied monitor may have special storage or lifetime requirements and -// that as a result, storing references to local objects within Monitor -// may not be safe or desirable. Thus, devt is only valid if impl is -// null. -struct Monitor -{ - IMonitor impl; - /* internal */ - DEvent[] devt; - /* stuff */ -} - -Monitor* getMonitor(Object h) -{ - return cast(Monitor*) (cast(void**) h)[1]; -} - -void setMonitor(Object h, Monitor* m) -{ - (cast(void**) h)[1] = m; -} - -extern (C) void _d_monitor_create(Object); -extern (C) void _d_monitor_destroy(Object); -extern (C) void _d_monitor_lock(Object); -extern (C) int _d_monitor_unlock(Object); - -extern (C) void _d_monitordelete(Object h, bool det) -{ - Monitor* m = getMonitor(h); - - if (m !is null) - { - IMonitor i = m.impl; - if (i is null) - { - _d_monitor_devt(m, h); - _d_monitor_destroy(h); - setMonitor(h, null); - return; - } - if (det && (cast(void*) i) !is (cast(void*) h)) - delete i; - setMonitor(h, null); - } -} - -extern (C) void _d_monitorenter(Object h) -{ - Monitor* m = getMonitor(h); - - if (m is null) - { - _d_monitor_create(h); - m = getMonitor(h); - } - - IMonitor i = m.impl; - - if (i is null) - { - _d_monitor_lock(h); - return; - } - i.lock(); -} - -extern (C) void _d_monitorexit(Object h) -{ - Monitor* m = getMonitor(h); - IMonitor i = m.impl; - - if (i is null) - { - _d_monitor_unlock(h); - return; - } - i.unlock(); -} - -extern (C) void _d_monitor_devt(Monitor* m, Object h) -{ - if (m.devt.length) - { - DEvent[] devt; - - synchronized (h) - { - devt = m.devt; - m.devt = null; - } - foreach (v; devt) - { - if (v) - v(h); - } - free(devt.ptr); - } -} - -extern (C) void rt_attachDisposeEvent(Object h, DEvent e) -{ - synchronized (h) - { - Monitor* m = getMonitor(h); - assert(m.impl is null); - - foreach (inout v; m.devt) - { - if (v is null || v == e) - { - v = e; - return; - } - } - - auto len = m.devt.length + 4; // grow by 4 elements - auto pos = m.devt.length; // insert position - auto p = realloc(m.devt.ptr, DEvent.sizeof * len); - if (!p) - onOutOfMemoryError(); - m.devt = (cast(DEvent*)p)[0 .. len]; - m.devt[pos+1 .. len] = null; - m.devt[pos] = e; - } -} - -extern (C) void rt_detachDisposeEvent(Object h, DEvent e) -{ - synchronized (h) - { - Monitor* m = getMonitor(h); - assert(m.impl is null); - - foreach (p, v; m.devt) - { - if (v == e) - { - memmove(&m.devt[p], - &m.devt[p+1], - (m.devt.length - p - 1) * DEvent.sizeof); - m.devt[$ - 1] = null; - return; - } - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/lifetime.d --- a/tango/lib/compiler/llvmdc/lifetime.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1029 +0,0 @@ -/** - * This module contains all functions related to an object's lifetime: - * allocation, resizing, deallocation, and finalization. - * - * Copyright: Copyright (C) 2004-2007 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, Sean Kelly, Tomas Lindquist Olsen - */ -module lifetime; - -//debug=PRINTF; -//debug=PRINTF2; - -private -{ - import tango.stdc.stdlib; - import tango.stdc.string; - import tango.stdc.stdarg; - debug(PRINTF) import tango.stdc.stdio; - else debug(PRINTF2) import tango.stdc.stdio; -} - - -private -{ - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, - NO_SCAN = 0b0000_0010, - NO_MOVE = 0b0000_0100, - ALL_BITS = 0b1111_1111 - } - - struct BlkInfo - { - void* base; - size_t size; - uint attr; - } - - extern (C) uint gc_getAttr( void* p ); - extern (C) uint gc_setAttr( void* p, uint a ); - extern (C) uint gc_clrAttr( void* p, uint a ); - - extern (C) void* gc_malloc( size_t sz, uint ba = 0 ); - extern (C) void* gc_calloc( size_t sz, uint ba = 0 ); - extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ); - extern (C) void gc_free( void* p ); - - extern (C) void* gc_addrOf( void* p ); - extern (C) size_t gc_sizeOf( void* p ); - extern (C) BlkInfo gc_query( void* p ); - - extern (C) bool onCollectResource( Object o ); - extern (C) void onFinalizeError( ClassInfo c, Exception e ); - extern (C) void onOutOfMemoryError(); - - extern (C) void _d_monitordelete(Object h, bool det = true); - - enum - { - PAGESIZE = 4096 - } -} - - -/** - * - */ -extern (C) Object _d_newclass(ClassInfo ci) -{ - void* p; - - debug(PRINTF2) printf("_d_newclass(ci = %p, %s)\n", ci, cast(char *)ci.name.ptr); - /+ - if (ci.flags & 1) // if COM object - { /* COM objects are not garbage collected, they are reference counted - * using AddRef() and Release(). They get free'd by C's free() - * function called by Release() when Release()'s reference count goes - * to zero. - */ - p = tango.stdc.stdlib.malloc(ci.init.length); - if (!p) - onOutOfMemoryError(); - } - else - +/ - { - p = gc_malloc(ci.init.length, - BlkAttr.FINALIZE | (ci.flags & 2 ? BlkAttr.NO_SCAN : 0)); - debug(PRINTF2) printf(" p = %p\n", p); - } - - debug(PRINTF2) - { - printf("p = %p\n", p); - printf("ci = %p, ci.init = %p, len = %d\n", ci, ci.init.ptr, ci.init.length); - printf("vptr = %p\n", *cast(void**) ci.init.ptr); - printf("vtbl[0] = %p\n", (*cast(void***) ci.init.ptr)[0]); - printf("vtbl[1] = %p\n", (*cast(void***) ci.init.ptr)[1]); - printf("init[0] = %p\n", (cast(uint**) ci.init.ptr)[0]); - printf("init[1] = %p\n", (cast(uint**) ci.init.ptr)[1]); - printf("init[2] = %p\n", (cast(uint**) ci.init.ptr)[2]); - printf("init[3] = %p\n", (cast(uint**) ci.init.ptr)[3]); - printf("init[4] = %p\n", (cast(uint**) ci.init.ptr)[4]); - } - - // initialize it - // llvmdc does this inline - //(cast(byte*) p)[0 .. ci.init.length] = ci.init[]; - - debug(PRINTF) printf("initialization done\n"); - return cast(Object) p; -} - -/** - * - */ -extern (C) void _d_delinterface(void* p) -{ - if (p) - { - Interface* pi = **cast(Interface ***)p; - Object o = cast(Object)(p - pi.offset); - - _d_delclass(o); - //*p = null; - } -} - -// used for deletion -private extern (D) alias void function(Object) fp_t; - - -/** - * - */ -extern (C) void _d_delclass(Object p) -{ - if (p) - { - debug(PRINTF) printf("_d_delclass(%p)\n", p); - - ClassInfo **pc = cast(ClassInfo **)p; - if (*pc) - { - ClassInfo c = **pc; - - rt_finalize(cast(void*) p); - - if (c.deallocator) - { - fp_t fp = cast(fp_t)c.deallocator; - (*fp)(p); // call deallocator - //*p = null; - return; - } - } - else - { - rt_finalize(cast(void*) p); - } - gc_free(cast(void*) p); - //*p = null; - } -} - -/+ - -/** - * - */ -struct Array -{ - size_t length; - void* data; -} - -+/ - -/** - * Allocate a new array of length elements. - * ti is the type of the resulting array, or pointer to element. - * (For when the array is initialized to 0) - */ -extern (C) void* _d_newarrayT(TypeInfo ti, size_t length) -{ - void* p; - auto size = ti.next.tsize(); // array element size - - debug(PRINTF) printf("_d_newarrayT(length = %u, size = %d)\n", length, size); - if (length == 0 || size == 0) - return null; - - version (D_InlineAsm_X86) - { - asm - { - mov EAX,size ; - mul EAX,length ; - mov size,EAX ; - jc Loverflow ; - } - } - else - size *= length; - p = gc_malloc(size + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - debug(PRINTF) printf(" p = %p\n", p); - memset(p, 0, size); - return p; - -Loverflow: - onOutOfMemoryError(); - return null; -} - -/** - * For when the array has a non-zero initializer. - */ -extern (C) void* _d_newarrayiT(TypeInfo ti, size_t length) -{ - void* result; - auto size = ti.next.tsize(); // array element size - - debug(PRINTF) printf("_d_newarrayiT(length = %d, size = %d)\n", length, size); - - if (length == 0 || size == 0) - result = null; - else - { - auto initializer = ti.next.init(); - auto isize = initializer.length; - auto q = initializer.ptr; - version (D_InlineAsm_X86) - { - asm - { - mov EAX,size ; - mul EAX,length ; - mov size,EAX ; - jc Loverflow ; - } - } - else - size *= length; - auto p = gc_malloc(size + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - debug(PRINTF) printf(" p = %p\n", p); - if (isize == 1) - memset(p, *cast(ubyte*)q, size); - else if (isize == int.sizeof) - { - int init = *cast(int*)q; - size /= int.sizeof; - for (size_t u = 0; u < size; u++) - { - (cast(int*)p)[u] = init; - } - } - else - { - for (size_t u = 0; u < size; u += isize) - { - memcpy(p + u, q, isize); - } - } - result = p; - } - return result; - -Loverflow: - onOutOfMemoryError(); - return null; -} - -/** - * - */ -extern (C) void* _d_newarraymT(TypeInfo ti, int ndims, size_t* dims) -{ - void* result; - - debug(PRINTF) printf("_d_newarraymT(ndims = %d)\n", ndims); - if (ndims == 0) - result = null; - else - { - static void[] foo(TypeInfo ti, size_t* pdim, int ndims) - { - size_t dim = *pdim; - void[] p; - - debug(PRINTF) printf("foo(ti = %p, ti.next = %p, dim = %d, ndims = %d\n", ti, ti.next, dim, ndims); - if (ndims == 1) - { - auto r = _d_newarrayT(ti, dim); - return r[0 .. dim]; - } - else - { - p = gc_malloc(dim * (void[]).sizeof + 1)[0 .. dim]; - for (int i = 0; i < dim; i++) - { - (cast(void[]*)p.ptr)[i] = foo(ti.next, pdim + 1, ndims - 1); - } - } - return p; - } - - result = foo(ti, dims, ndims).ptr; - debug(PRINTF) printf("result = %p\n", result); - - version (none) - { - for (int i = 0; i < ndims; i++) - { - printf("index %d: %d\n", i, *dims++); - } - } - } - return result; -} - - -/** - * - */ -extern (C) void* _d_newarraymiT(TypeInfo ti, int ndims, size_t* dims) -{ - void* result; - - debug(PRINTF) printf("_d_newarraymiT(ndims = %d)\n", ndims); - if (ndims == 0) - result = null; - else - { - static void[] foo(TypeInfo ti, size_t* pdim, int ndims) - { - size_t dim = *pdim; - void[] p; - - if (ndims == 1) - { - auto r = _d_newarrayiT(ti, dim); - p = r[0 .. dim]; - } - else - { - p = gc_malloc(dim * (void[]).sizeof + 1)[0 .. dim]; - for (int i = 0; i < dim; i++) - { - (cast(void[]*)p.ptr)[i] = foo(ti.next, pdim + 1, ndims - 1); - } - } - return p; - } - - result = foo(ti, dims, ndims).ptr; - debug(PRINTF) printf("result = %p\n", result); - - version (none) - { - for (int i = 0; i < ndims; i++) - { - printf("index %d: %d\n", i, *dims++); - printf("init = %d\n", *dims++); - } - } - } - return result; -} - -/+ - -/** - * - */ -void* _d_allocmemory(size_t nbytes) -{ - return gc_malloc(nbytes); -} - -+/ - -/** - * for allocating a single POD value - */ -extern (C) void* _d_allocmemoryT(TypeInfo ti) -{ - return gc_malloc(ti.tsize(), (ti.flags() & 1) ? BlkAttr.NO_SCAN : 0); -} - -/** - * - */ -extern (C) void _d_delarray(size_t plength, void* pdata) -{ -// if (p) -// { - assert(!plength || pdata); - - if (pdata) - gc_free(pdata); -// p.data = null; -// p.length = 0; -// } -} - -/** - * - */ -extern (C) void _d_delmemory(void* p) -{ - if (p) - { - gc_free(p); - //*p = null; - } -} - - -/** - * - */ -extern (C) void _d_callfinalizer(void* p) -{ - rt_finalize( p ); -} - - -/** - * - */ -extern (C) void rt_finalize(void* p, bool det = true) -{ - debug(PRINTF) printf("rt_finalize(p = %p)\n", p); - - if (p) // not necessary if called from gc - { - ClassInfo** pc = cast(ClassInfo**)p; - - if (*pc) - { - ClassInfo c = **pc; - - try - { - if (det || onCollectResource(cast(Object)p)) - { - do - { - if (c.destructor) - { - debug(PRINTF) printf("calling dtor of %.*s\n", c.name.length, c.name.ptr); - fp_t fp = cast(fp_t)c.destructor; - (*fp)(cast(Object)p); // call destructor - } - c = c.base; - } while (c); - } - if ((cast(void**)p)[1]) // if monitor is not null - _d_monitordelete(cast(Object)p, det); - } - catch (Exception e) - { - onFinalizeError(**pc, e); - } - finally - { - *pc = null; // zero vptr - } - } - } -} - -/** - * Resize dynamic arrays with 0 initializers. - */ -extern (C) byte* _d_arraysetlengthT(TypeInfo ti, size_t newlength, size_t plength, byte* pdata) -in -{ - assert(ti); - assert(!plength || pdata); -} -body -{ - byte* newdata; - size_t sizeelem = ti.next.tsize(); - - debug(PRINTF) - { - printf("_d_arraysetlengthT(sizeelem = %d, newlength = %d)\n", sizeelem, newlength); - printf("\tp.data = %p, p.length = %d\n", pdata, plength); - } - - if (newlength) - { - version (D_InlineAsm_X86) - { - size_t newsize = void; - - asm - { - mov EAX, newlength; - mul EAX, sizeelem; - mov newsize, EAX; - jc Loverflow; - } - } - else - { - size_t newsize = sizeelem * newlength; - - if (newsize / newlength != sizeelem) - goto Loverflow; - } - - debug(PRINTF) printf("newsize = %x, newlength = %x\n", newsize, newlength); - - if (pdata) - { - newdata = pdata; - if (newlength > plength) - { - size_t size = plength * sizeelem; - auto info = gc_query(pdata); - - if (info.size <= newsize || info.base != pdata) - { - if (info.size >= PAGESIZE && info.base == pdata) - { // Try to extend in-place - auto u = gc_extend(pdata, (newsize + 1) - info.size, (newsize + 1) - info.size); - if (u) - { - goto L1; - } - } - newdata = cast(byte *)gc_malloc(newsize + 1, info.attr); - newdata[0 .. size] = pdata[0 .. size]; - } - L1: - newdata[size .. newsize] = 0; - } - } - else - { - newdata = cast(byte *)gc_calloc(newsize + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - } - } - else - { - newdata = pdata; - } - - return newdata; - -Loverflow: - onOutOfMemoryError(); - return null; -} - - -/** - * Resize arrays for non-zero initializers. - * p pointer to array lvalue to be updated - * newlength new .length property of array - * sizeelem size of each element of array - * initsize size of initializer - * ... initializer - */ -extern (C) byte* _d_arraysetlengthiT(TypeInfo ti, size_t newlength, size_t plength, byte* pdata) -in -{ - assert(!plength || pdata); -} -body -{ - byte* newdata; - TypeInfo tinext = ti.next; - size_t sizeelem = tinext.tsize(); - void[] initializer = tinext.init(); - size_t initsize = initializer.length; - - assert(sizeelem); - assert(initsize); - assert(initsize <= sizeelem); - assert((sizeelem / initsize) * initsize == sizeelem); - - debug(PRINTF) - { - printf("_d_arraysetlengthiT(sizeelem = %d, newlength = %d, initsize = %d)\n", sizeelem, newlength, initsize); - printf("\tp.data = %p, p.length = %d\n", pdata, plength); - } - - if (newlength) - { - version (D_InlineAsm_X86) - { - size_t newsize = void; - - asm - { - mov EAX,newlength ; - mul EAX,sizeelem ; - mov newsize,EAX ; - jc Loverflow ; - } - } - else - { - size_t newsize = sizeelem * newlength; - - if (newsize / newlength != sizeelem) - goto Loverflow; - } - debug(PRINTF) printf("newsize = %x, newlength = %x\n", newsize, newlength); - - size_t size = plength * sizeelem; - - if (pdata) - { - newdata = pdata; - if (newlength > plength) - { - auto info = gc_query(pdata); - - if (info.size <= newsize || info.base != pdata) - { - if (info.size >= PAGESIZE && info.base == pdata) - { // Try to extend in-place - auto u = gc_extend(pdata, (newsize + 1) - info.size, (newsize + 1) - info.size); - if (u) - { - goto L1; - } - } - newdata = cast(byte *)gc_malloc(newsize + 1, info.attr); - newdata[0 .. size] = pdata[0 .. size]; - L1: ; - } - } - } - else - { - newdata = cast(byte *)gc_malloc(newsize + 1, !(tinext.flags() & 1) ? BlkAttr.NO_SCAN : 0); - } - - auto q = initializer.ptr; // pointer to initializer - - if (newsize > size) - { - if (initsize == 1) - { - debug(PRINTF) printf("newdata = %p, size = %d, newsize = %d, *q = %d\n", newdata, size, newsize, *cast(byte*)q); - newdata[size .. newsize] = *(cast(byte*)q); - } - else - { - for (size_t u = size; u < newsize; u += initsize) - { - memcpy(newdata + u, q, initsize); - } - } - } - } - else - { - newdata = pdata; - } - - return newdata; - -Loverflow: - onOutOfMemoryError(); - return null; -} - -/+ - -/** - * Append y[] to array x[]. - * size is size of each array element. - */ -extern (C) long _d_arrayappendT(TypeInfo ti, Array *px, byte[] y) -{ - auto sizeelem = ti.next.tsize(); // array element size - auto info = gc_query(px.data); - auto length = px.length; - auto newlength = length + y.length; - auto newsize = newlength * sizeelem; - - if (info.size < newsize || info.base != px.data) - { byte* newdata; - - if (info.size >= PAGESIZE && info.base == px.data) - { // Try to extend in-place - auto u = gc_extend(px.data, (newsize + 1) - info.size, (newsize + 1) - info.size); - if (u) - { - goto L1; - } - } - newdata = cast(byte *)gc_malloc(newCapacity(newlength, sizeelem) + 1, info.attr); - memcpy(newdata, px.data, length * sizeelem); - px.data = newdata; - } - L1: - px.length = newlength; - memcpy(px.data + length * sizeelem, y.ptr, y.length * sizeelem); - return *cast(long*)px; -} - - -/** - * - */ -size_t newCapacity(size_t newlength, size_t size) -{ - version(none) - { - size_t newcap = newlength * size; - } - else - { - /* - * Better version by Dave Fladebo: - * This uses an inverse logorithmic algorithm to pre-allocate a bit more - * space for larger arrays. - * - Arrays smaller than PAGESIZE bytes are left as-is, so for the most - * common cases, memory allocation is 1 to 1. The small overhead added - * doesn't affect small array perf. (it's virtually the same as - * current). - * - Larger arrays have some space pre-allocated. - * - As the arrays grow, the relative pre-allocated space shrinks. - * - The logorithmic algorithm allocates relatively more space for - * mid-size arrays, making it very fast for medium arrays (for - * mid-to-large arrays, this turns out to be quite a bit faster than the - * equivalent realloc() code in C, on Linux at least. Small arrays are - * just as fast as GCC). - * - Perhaps most importantly, overall memory usage and stress on the GC - * is decreased significantly for demanding environments. - */ - size_t newcap = newlength * size; - size_t newext = 0; - - if (newcap > PAGESIZE) - { - //double mult2 = 1.0 + (size / log10(pow(newcap * 2.0,2.0))); - - // redo above line using only integer math - - static int log2plus1(size_t c) - { int i; - - if (c == 0) - i = -1; - else - for (i = 1; c >>= 1; i++) - { - } - return i; - } - - /* The following setting for mult sets how much bigger - * the new size will be over what is actually needed. - * 100 means the same size, more means proportionally more. - * More means faster but more memory consumption. - */ - //long mult = 100 + (1000L * size) / (6 * log2plus1(newcap)); - long mult = 100 + (1000L * size) / log2plus1(newcap); - - // testing shows 1.02 for large arrays is about the point of diminishing return - if (mult < 102) - mult = 102; - newext = cast(size_t)((newcap * mult) / 100); - newext -= newext % size; - debug(PRINTF) printf("mult: %2.2f, alloc: %2.2f\n",mult/100.0,newext / cast(double)size); - } - newcap = newext > newcap ? newext : newcap; - debug(PRINTF) printf("newcap = %d, newlength = %d, size = %d\n", newcap, newlength, size); - } - return newcap; -} - - -/** - * - */ -extern (C) byte[] _d_arrayappendcT(TypeInfo ti, inout byte[] x, ...) -{ - auto sizeelem = ti.next.tsize(); // array element size - auto info = gc_query(x.ptr); - auto length = x.length; - auto newlength = length + 1; - auto newsize = newlength * sizeelem; - - assert(info.size == 0 || length * sizeelem <= info.size); - - debug(PRINTF) printf("_d_arrayappendcT(sizeelem = %d, ptr = %p, length = %d, cap = %d)\n", sizeelem, x.ptr, x.length, info.size); - - if (info.size <= newsize || info.base != x.ptr) - { byte* newdata; - - if (info.size >= PAGESIZE && info.base == x.ptr) - { // Try to extend in-place - auto u = gc_extend(x.ptr, (newsize + 1) - info.size, (newsize + 1) - info.size); - if (u) - { - goto L1; - } - } - debug(PRINTF) printf("_d_arrayappendcT(length = %d, newlength = %d, cap = %d)\n", length, newlength, info.size); - auto newcap = newCapacity(newlength, sizeelem); - assert(newcap >= newlength * sizeelem); - newdata = cast(byte *)gc_malloc(newcap + 1, info.attr); - memcpy(newdata, x.ptr, length * sizeelem); - (cast(void**)(&x))[1] = newdata; - } - L1: - byte *argp = cast(byte *)(&ti + 2); - - *cast(size_t *)&x = newlength; - x.ptr[length * sizeelem .. newsize] = argp[0 .. sizeelem]; - assert((cast(size_t)x.ptr & 15) == 0); - assert(gc_sizeOf(x.ptr) > x.length * sizeelem); - return x; -} - - -/** - * - */ -extern (C) byte[] _d_arraycatT(TypeInfo ti, byte[] x, byte[] y) -out (result) -{ - auto sizeelem = ti.next.tsize(); // array element size - debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p sizeelem = %d => %d,%p)\n", x.length, x.ptr, y.length, y.ptr, sizeelem, result.length, result.ptr); - assert(result.length == x.length + y.length); - for (size_t i = 0; i < x.length * sizeelem; i++) - assert((cast(byte*)result)[i] == (cast(byte*)x)[i]); - for (size_t i = 0; i < y.length * sizeelem; i++) - assert((cast(byte*)result)[x.length * sizeelem + i] == (cast(byte*)y)[i]); - - size_t cap = gc_sizeOf(result.ptr); - assert(!cap || cap > result.length * sizeelem); -} -body -{ - version (none) - { - /* Cannot use this optimization because: - * char[] a, b; - * char c = 'a'; - * b = a ~ c; - * c = 'b'; - * will change the contents of b. - */ - if (!y.length) - return x; - if (!x.length) - return y; - } - - debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p)\n", x.length, x.ptr, y.length, y.ptr); - auto sizeelem = ti.next.tsize(); // array element size - debug(PRINTF) printf("_d_arraycatT(%d,%p ~ %d,%p sizeelem = %d)\n", x.length, x.ptr, y.length, y.ptr, sizeelem); - size_t xlen = x.length * sizeelem; - size_t ylen = y.length * sizeelem; - size_t len = xlen + ylen; - - if (!len) - return null; - - byte* p = cast(byte*)gc_malloc(len + 1, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - memcpy(p, x.ptr, xlen); - memcpy(p + xlen, y.ptr, ylen); - p[len] = 0; - return p[0 .. x.length + y.length]; -} - - -/** - * - */ -extern (C) byte[] _d_arraycatnT(TypeInfo ti, uint n, ...) -{ void* a; - size_t length; - byte[]* p; - uint i; - byte[] b; - auto size = ti.next.tsize(); // array element size - - p = cast(byte[]*)(&n + 1); - - for (i = 0; i < n; i++) - { - b = *p++; - length += b.length; - } - if (!length) - return null; - - a = gc_malloc(length * size, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - p = cast(byte[]*)(&n + 1); - - uint j = 0; - for (i = 0; i < n; i++) - { - b = *p++; - if (b.length) - { - memcpy(a + j, b.ptr, b.length * size); - j += b.length * size; - } - } - - byte[] result; - *cast(int *)&result = length; // jam length - (cast(void **)&result)[1] = a; // jam ptr - return result; -} - - -/** - * - */ -extern (C) void* _d_arrayliteralT(TypeInfo ti, size_t length, ...) -{ - auto sizeelem = ti.next.tsize(); // array element size - void* result; - - debug(PRINTF) printf("_d_arrayliteralT(sizeelem = %d, length = %d)\n", sizeelem, length); - if (length == 0 || sizeelem == 0) - result = null; - else - { - result = gc_malloc(length * sizeelem, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - - va_list q; - va_start!(size_t)(q, length); - - size_t stacksize = (sizeelem + int.sizeof - 1) & ~(int.sizeof - 1); - - if (stacksize == sizeelem) - { - memcpy(result, q, length * sizeelem); - } - else - { - for (size_t i = 0; i < length; i++) - { - memcpy(result + i * sizeelem, q, sizeelem); - q += stacksize; - } - } - - va_end(q); - } - return result; -} - -+/ - - -/** - * Support for array.dup property. - */ -struct Array2 -{ - size_t length; - void* ptr; -} - - -/** - * - */ -extern (C) Array2 _adDupT(TypeInfo ti, Array2 a) -out (result) -{ - auto sizeelem = ti.next.tsize(); // array element size - assert(memcmp(result.ptr, a.ptr, a.length * sizeelem) == 0); -} -body -{ - Array2 r; - - if (a.length) - { - auto sizeelem = ti.next.tsize(); // array element size - auto size = a.length * sizeelem; - r.ptr = gc_malloc(size, !(ti.next.flags() & 1) ? BlkAttr.NO_SCAN : 0); - r.length = a.length; - memcpy(r.ptr, a.ptr, size); - } - return r; -} - - -unittest -{ - int[] a; - int[] b; - int i; - - a = new int[3]; - a[0] = 1; a[1] = 2; a[2] = 3; - b = a.dup; - assert(b.length == 3); - for (i = 0; i < 3; i++) - assert(b[i] == i + 1); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/llvm/intrinsic.d --- a/tango/lib/compiler/llvmdc/llvm/intrinsic.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -// code generator intrinsics -/* -pragma(LLVM_internal, "intrinsic", "llvm.returnaddress") - void* llvm_returnaddress(uint level); -*/ -pragma(LLVM_internal, "intrinsic", "llvm.frameaddress") - void* llvm_frameaddress(uint level); -/* -pragma(LLVM_internal, "intrinsic", "llvm.stacksave") - void* llvm_stacksave(); - -pragma(LLVM_internal, "intrinsic", "llvm.stackrestore") - void llvm_stackrestore(void* ptr); - -pragma(LLVM_internal, "intrinsic", "llvm.pcmarker") - void llvm_pcmarker(uint id); - -pragma(LLVM_internal, "intrinsic", "llvm.prefetch") - void llvm_prefetch(void* ptr, uint rw, uint locality); -*/ - -pragma(LLVM_internal, "intrinsic", "llvm.readcyclecounter") - ulong readcyclecounter(); - -// standard C intrinsics -pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i32") - void llvm_memcpy_i32(void* dst, void* src, uint len, uint alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.memcpy.i64") - void llvm_memcpy_i64(void* dst, void* src, ulong len, uint alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.memmove.i32") - void llvm_memmove_i32(void* dst, void* src, uint len, uint alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.memmove.i64") - void llvm_memmove_i64(void* dst, void* src, ulong len, int alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.memset.i32") - void llvm_memset_i32(void* dst, ubyte val, uint len, uint alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.memset.i64") - void llvm_memset_i64(void* dst, ubyte val, ulong len, uint alignment); - -pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f32") - float llvm_sqrt(float val); - -pragma(LLVM_internal, "intrinsic", "llvm.sqrt.f64") -{ - double llvm_sqrt(double val); - real llvm_sqrt(real val); -} - -pragma(LLVM_internal, "intrinsic", "llvm.powi.f32") - float llvm_powi(float val, int power); - -pragma(LLVM_internal, "intrinsic", "llvm.powi.f64") -{ - double llvm_powi(double val, int power); - real llvm_powi(real val, int power); -} - -// bit manipulation intrinsics -pragma(LLVM_internal, "intrinsic", "llvm.bswap.i16.i16") - ushort llvm_bswap(ushort val); - -pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32.i32") - uint llvm_bswap(uint val); - -pragma(LLVM_internal, "intrinsic", "llvm.bswap.i64.i64") - ulong llvm_bswap(ulong val); - -/* -pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i8") - uint llvm_ctpop_i8(ubyte src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i16") - uint llvm_ctpop_i16(ushort src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i32") - uint llvm_ctpop_i32(uint src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctpop.i64") - uint llvm_ctpop_i64(ulong src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i8") - uint llvm_ctlz_i8(ubyte src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i16") - uint llvm_ctlz_i16(ushort src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i32") - uint llvm_ctlz_i32(uint src); - -pragma(LLVM_internal, "intrinsic", "llvm.ctlz.i64") - uint llvm_ctlz_i64(ulong src); - -pragma(LLVM_internal, "intrinsic", "llvm.cttz.i8") - uint llvm_cttz_i8(ubyte src); - -pragma(LLVM_internal, "intrinsic", "llvm.cttz.i16") - uint llvm_cttz_i16(ushort src); - -pragma(LLVM_internal, "intrinsic", "llvm.cttz.i32") - uint llvm_cttz_i32(uint src); - -pragma(LLVM_internal, "intrinsic", "llvm.cttz.i64") - uint llvm_cttz_i64(ulong src); -*/ - -// atomic operations and synchronization intrinsics -// TODO -/* - -//declare i8 @llvm.atomic.lcs.i8.i8p.i8.i8( i8* , i8 , i8 ) -pragma(LLVM_internal, "intrinsic", "llvm.atomic.lcs.i8.i8p.i8.i8") - ubyte llvm_atomic_lcs_i8(void* ptr, ubyte cmp, ubyte val); - -declare i16 @llvm.atomic.lcs.i16.i16p.i16.i16( i16* , i16 , i16 ) -declare i32 @llvm.atomic.lcs.i32.i32p.i32.i32( i32* , i32 , i32 ) -declare i64 @llvm.atomic.lcs.i64.i64p.i64.i64( i64* , i64 , i64 ) - -declare i8 @llvm.atomic.ls.i8.i8p.i8( i8* , i8 ) -declare i16 @llvm.atomic.ls.i16.i16p.i16( i16* , i16 ) -declare i32 @llvm.atomic.ls.i32.i32p.i32( i32* , i32 ) -declare i64 @llvm.atomic.ls.i64.i64p.i64( i64* , i64 ) - -declare i8 @llvm.atomic.las.i8.i8p.i8( i8* , i8 ) -declare i16 @llvm.atomic.las.i16.i16p.i16( i16* , i16 ) -declare i32 @llvm.atomic.las.i32.i32p.i32( i32* , i32 ) -declare i64 @llvm.atomic.las.i64.i64p.i64( i64* , i64 ) - -declare i8 @llvm.atomic.lss.i8.i8.i8( i8* , i8 ) -declare i16 @llvm.atomic.lss.i16.i16.i16( i16* , i16 ) -declare i32 @llvm.atomic.lss.i32.i32.i32( i32* , i32 ) -declare i64 @llvm.atomic.lss.i64.i64.i64( i64* , i64 ) - -declare void @llvm.memory.barrier( i1 , i1 , i1 , i1 ) -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/llvmdc.mak --- a/tango/lib/compiler/llvmdc/llvmdc.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -# Makefile to build the LLVMDC compiler runtime D library for Linux -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the compiler runtime library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-base-llvmdc.a -LIB_MASK=libtango-base-llvmdc*.a - -LIB_TARGET_C=libtango-base-c-llvmdc.a -LIB_MASK_C=libtango-base-c-llvmdc*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -#CFLAGS=-O3 $(ADD_CFLAGS) -CFLAGS=-g $(ADD_CFLAGS) - -#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) -DFLAGS=-g -w $(ADD_DFLAGS) - -#TFLAGS=-O3 -inline -w $(ADD_DFLAGS) -TFLAGS=-g -w $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=gcc -LC=llvm-ar rsv -CLC=ar rsv -DC=llvmdc -LLC=llvm-as - -LIB_DEST=.. - -.SUFFIXES: .s .S .c .cpp .d .ll .html .o .bc - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.bc: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html llvmdc.ddoc $< - -targets : lib doc -all : lib doc -lib : llvmdc.lib llvmdc.clib -doc : llvmdc.doc - -###################################################### -OBJ_C= \ - monitor.o \ - critical.o - -OBJ_BASE= \ - aaA.bc \ - aApply.bc \ - aApplyR.bc \ - adi.bc \ - arrays.bc \ - cast.bc \ - dmain2.bc \ - eh.bc \ - genobj.bc \ - lifetime.bc \ - memory.bc \ - qsort2.bc \ - switch.bc \ - -OBJ_UTIL= \ - util/console.bc \ - util/ctype.bc \ - util/string.bc \ - util/utf.bc - -OBJ_TI= \ - typeinfo/ti_AC.bc \ - typeinfo/ti_Acdouble.bc \ - typeinfo/ti_Acfloat.bc \ - typeinfo/ti_Acreal.bc \ - typeinfo/ti_Adouble.bc \ - typeinfo/ti_Afloat.bc \ - typeinfo/ti_Ag.bc \ - typeinfo/ti_Aint.bc \ - typeinfo/ti_Along.bc \ - typeinfo/ti_Areal.bc \ - typeinfo/ti_Ashort.bc \ - typeinfo/ti_byte.bc \ - typeinfo/ti_C.bc \ - typeinfo/ti_cdouble.bc \ - typeinfo/ti_cfloat.bc \ - typeinfo/ti_char.bc \ - typeinfo/ti_creal.bc \ - typeinfo/ti_dchar.bc \ - typeinfo/ti_delegate.bc \ - typeinfo/ti_double.bc \ - typeinfo/ti_float.bc \ - typeinfo/ti_idouble.bc \ - typeinfo/ti_ifloat.bc \ - typeinfo/ti_int.bc \ - typeinfo/ti_ireal.bc \ - typeinfo/ti_long.bc \ - typeinfo/ti_ptr.bc \ - typeinfo/ti_real.bc \ - typeinfo/ti_short.bc \ - typeinfo/ti_ubyte.bc \ - typeinfo/ti_uint.bc \ - typeinfo/ti_ulong.bc \ - typeinfo/ti_ushort.bc \ - typeinfo/ti_void.bc \ - typeinfo/ti_wchar.bc - -ALL_OBJS= \ - $(OBJ_BASE) \ - $(OBJ_UTIL) \ - $(OBJ_TI) - -###################################################### - -ALL_DOCS= - -###################################################### - -llvmdc.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -llvmdc.clib : $(LIB_TARGET_C) - -$(LIB_TARGET_C) : $(OBJ_C) - $(RM) $@ - $(CLC) $@ $(OBJ_C) - -llvmdc.doc : $(ALL_DOCS) - echo No documentation available. - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(OBJ_C) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - $(RM) $(LIB_MASK_C) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)/. - $(CP) $(LIB_MASK_C) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/mars.h --- a/tango/lib/compiler/llvmdc/mars.h Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ - -/* - * Placed into the Public Domain - * written by Walter Bright, Digital Mars - * www.digitalmars.com - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -#include - -#if __cplusplus -extern "C" { -#endif - -struct ClassInfo; -struct Vtbl; - -typedef struct Vtbl -{ - size_t len; - void **vptr; -} Vtbl; - -typedef struct Interface -{ - struct ClassInfo *classinfo; - struct Vtbl vtbl; - int offset; -} Interface; - -typedef struct Object -{ - void **vptr; - void *monitor; -} Object; - -typedef struct ClassInfo -{ - Object object; - - size_t initlen; - void *init; - - size_t namelen; - char *name; - - Vtbl vtbl; - - size_t interfacelen; - Interface *interfaces; - - struct ClassInfo *baseClass; - - void *destructor; - void *invariant; - - int flags; -} ClassInfo; - -typedef struct Exception -{ - Object object; - - size_t msglen; - char* msg; - - size_t filelen; - char* file; - - size_t line; - - struct Exception *next; -} Exception; - -typedef struct Array -{ - size_t length; - void *ptr; -} Array; - -typedef struct Delegate -{ - void *thisptr; - void (*funcptr)(); -} Delegate; - -void _d_monitorenter(Object *h); -void _d_monitorexit(Object *h); - -int _d_isbaseof(ClassInfo *b, ClassInfo *c); -Object *_d_dynamic_cast(Object *o, ClassInfo *ci); - -Object * _d_newclass(ClassInfo *ci); -void _d_delclass(Object **p); - -void _d_OutOfMemory(); - -#if __cplusplus -} -#endif - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/memory.d --- a/tango/lib/compiler/llvmdc/memory.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/** - * This module exposes functionality for inspecting and manipulating memory. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, Sean Kelly - */ -module memory; - - -private -{ - version( linux ) - { - //version = SimpleLibcStackEnd; - - version( SimpleLibcStackEnd ) - { - extern (C) extern void* __libc_stack_end; - } - else - { - import tango.stdc.posix.dlfcn; - } - } - version(LLVMDC) - { - pragma(LLVM_internal, "intrinsic", "llvm.frameaddress") - { - void* llvm_frameaddress(uint level=0); - } - } -} - - -/** - * - */ -extern (C) void* rt_stackBottom() -{ - version( Win32 ) - { - asm - { - naked; - mov EAX,FS:4; - ret; - } - } - else version( linux ) - { - version( SimpleLibcStackEnd ) - { - return __libc_stack_end; - } - else - { - // See discussion: http://autopackage.org/forums/viewtopic.php?t=22 - static void** libc_stack_end; - - if( libc_stack_end == libc_stack_end.init ) - { - void* handle = dlopen( null, RTLD_NOW ); - libc_stack_end = cast(void**) dlsym( handle, "__libc_stack_end" ); - dlclose( handle ); - } - return *libc_stack_end; - } - } - else - { - static assert( false, "Operating system not supported." ); - } -} - - -/** - * - */ -extern (C) void* rt_stackTop() -{ - version(LLVMDC) - { - return llvm_frameaddress(); - } - else version( D_InlineAsm_X86 ) - { - asm - { - naked; - mov EAX, ESP; - ret; - } - } - else - { - static assert( false, "Architecture not supported." ); - } -} - - -private -{ - version( Win32 ) - { - extern (C) - { - extern int _data_start__; - extern int _bss_end__; - - alias _data_start__ Data_Start; - alias _bss_end__ Data_End; - } - } - else version( linux ) - { - extern (C) - { - extern int _data; - extern int __data_start; - extern int _end; - extern int _data_start__; - extern int _data_end__; - extern int _bss_start__; - extern int _bss_end__; - extern int __fini_array_end; - } - - alias __data_start Data_Start; - alias _end Data_End; - } - - alias void delegate( void*, void* ) scanFn; -} - - -/** - * - */ -extern (C) void rt_scanStaticData( scanFn scan ) -{ - version( Win32 ) - { - scan( &Data_Start, &Data_End ); - } - else version( linux ) - { - //printf("scanning static data from %p to %p\n", &Data_Start, &Data_End); - scan( &Data_Start, &Data_End ); - } - else - { - static assert( false, "Operating system not supported." ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/monitor.c --- a/tango/lib/compiler/llvmdc/monitor.c Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -// D programming language runtime library -// Public Domain -// written by Walter Bright, Digital Mars -// www.digitalmars.com - -// This is written in C because nobody has written a pthreads interface -// to D yet. - - -#include -#include -#include - -#if _WIN32 -#elif linux -#define USE_PTHREADS 1 -#else -#endif - -#if _WIN32 -#include -#endif - -#if USE_PTHREADS -#include -#endif - -#include "mars.h" - -// This is what the monitor reference in Object points to -typedef struct Monitor -{ - void* impl; // for user-level monitors - -#if _WIN32 - CRITICAL_SECTION mon; -#endif - -#if USE_PTHREADS - pthread_mutex_t mon; -#endif -} Monitor; - -#define MONPTR(h) (&((Monitor *)(h)->monitor)->mon) - -static volatile int inited; - -/* =============================== Win32 ============================ */ - -#if _WIN32 - -static CRITICAL_SECTION _monitor_critsec; - -void _STI_monitor_staticctor() -{ - if (!inited) - { InitializeCriticalSection(&_monitor_critsec); - inited = 1; - } -} - -void _STD_monitor_staticdtor() -{ - if (inited) - { inited = 0; - DeleteCriticalSection(&_monitor_critsec); - } -} - -void _d_monitor_create(Object *h) -{ - /* - * NOTE: Assume this is only called when h->monitor is null prior to the - * call. However, please note that another thread may call this function - * at the same time, so we can not assert this here. Instead, try and - * create a lock, and if one already exists then forget about it. - */ - - //printf("+_d_monitor_create(%p)\n", h); - assert(h); - Monitor *cs = NULL; - EnterCriticalSection(&_monitor_critsec); - if (!h->monitor) - { - cs = (Monitor *)calloc(sizeof(Monitor), 1); - assert(cs); - InitializeCriticalSection(&cs->mon); - h->monitor = (void *)cs; - cs = NULL; - } - LeaveCriticalSection(&_monitor_critsec); - if (cs) - free(cs); - //printf("-_d_monitor_create(%p)\n", h); -} - -void _d_monitor_destroy(Object *h) -{ - //printf("+_d_monitor_destroy(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - DeleteCriticalSection(MONPTR(h)); - free((void *)h->monitor); - h->monitor = NULL; - //printf("-_d_monitor_destroy(%p)\n", h); -} - -int _d_monitor_lock(Object *h) -{ - //printf("+_d_monitor_acquire(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - EnterCriticalSection(MONPTR(h)); - //printf("-_d_monitor_acquire(%p)\n", h); -} - -void _d_monitor_unlock(Object *h) -{ - //printf("+_d_monitor_release(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - LeaveCriticalSection(MONPTR(h)); - //printf("-_d_monitor_release(%p)\n", h); -} - -#endif - -/* =============================== linux ============================ */ - -#if USE_PTHREADS - -// Includes attribute fixes from David Friedman's GDC port - -static pthread_mutex_t _monitor_critsec; -static pthread_mutexattr_t _monitors_attr; - -void _STI_monitor_staticctor() -{ - if (!inited) - { - pthread_mutexattr_init(&_monitors_attr); - pthread_mutexattr_settype(&_monitors_attr, PTHREAD_MUTEX_RECURSIVE_NP); - pthread_mutex_init(&_monitor_critsec, 0); - inited = 1; - } -} - -void _STD_monitor_staticdtor() -{ - if (inited) - { inited = 0; - pthread_mutex_destroy(&_monitor_critsec); - pthread_mutexattr_destroy(&_monitors_attr); - } -} - -void _d_monitor_create(Object *h) -{ - /* - * NOTE: Assume this is only called when h->monitor is null prior to the - * call. However, please note that another thread may call this function - * at the same time, so we can not assert this here. Instead, try and - * create a lock, and if one already exists then forget about it. - */ - - //printf("+_d_monitor_create(%p)\n", h); - assert(h); - Monitor *cs = NULL; - pthread_mutex_lock(&_monitor_critsec); - if (!h->monitor) - { - cs = (Monitor *)calloc(sizeof(Monitor), 1); - assert(cs); - pthread_mutex_init(&cs->mon, & _monitors_attr); - h->monitor = (void *)cs; - cs = NULL; - } - pthread_mutex_unlock(&_monitor_critsec); - if (cs) - free(cs); - //printf("-_d_monitor_create(%p)\n", h); -} - -void _d_monitor_destroy(Object *h) -{ - //printf("+_d_monitor_destroy(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - pthread_mutex_destroy(MONPTR(h)); - free((void *)h->monitor); - h->monitor = NULL; - //printf("-_d_monitor_destroy(%p)\n", h); -} - -int _d_monitor_lock(Object *h) -{ - //printf("+_d_monitor_acquire(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - pthread_mutex_lock(MONPTR(h)); - //printf("-_d_monitor_acquire(%p)\n", h); -} - -void _d_monitor_unlock(Object *h) -{ - //printf("+_d_monitor_release(%p)\n", h); - assert(h && h->monitor && !(((Monitor*)h->monitor)->impl)); - pthread_mutex_unlock(MONPTR(h)); - //printf("-_d_monitor_release(%p)\n", h); -} - -#endif diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/qsort2.d --- a/tango/lib/compiler/llvmdc/qsort2.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ - -/* - * Placed into Public Domain - * written by Walter Bright - * www.digitalmars.com - * - * This is a public domain version of qsort.d. - * All it does is call C's qsort(), but runs a little slower since - * it needs to synchronize a global variable. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -//debug=qsort; - -private import tango.stdc.stdlib; - -struct Array -{ - size_t length; - void* ptr; -} - -private TypeInfo tiglobal; - -extern (C) int cmp(void* p1, void* p2) -{ - return tiglobal.compare(p1, p2); -} - -extern (C) Array _adSort(Array a, TypeInfo ti) -{ - synchronized - { - tiglobal = ti; - tango.stdc.stdlib.qsort(a.ptr, a.length, cast(size_t)ti.tsize(), &cmp); - } - return a; -} - - - -unittest -{ - debug(qsort) printf("array.sort.unittest()\n"); - - int a[] = new int[10]; - - a[0] = 23; - a[1] = 1; - a[2] = 64; - a[3] = 5; - a[4] = 6; - a[5] = 5; - a[6] = 17; - a[7] = 3; - a[8] = 0; - a[9] = -1; - - a.sort; - - for (int i = 0; i < a.length - 1; i++) - { - //printf("i = %d", i); - //printf(" %d %d\n", a[i], a[i + 1]); - assert(a[i] <= a[i + 1]); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/switch.d --- a/tango/lib/compiler/llvmdc/switch.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,425 +0,0 @@ -/* - * Copyright (C) 2004-2007 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -private import tango.stdc.string; -//private import tango.stdc.stdio; - -/****************************************************** - * Support for switch statements switching on strings. - * Input: - * table[] sorted array of strings generated by compiler - * ca string to look up in table - * Output: - * result index of match in table[] - * -1 if not in table - */ - -extern (C): - -int _d_switch_string(char[][] table, char[] ca) -in -{ - //printf("in _d_switch_string()\n"); - assert(table.length >= 0); - assert(ca.length >= 0); - - // Make sure table[] is sorted correctly - int j; - - for (j = 1; j < table.length; j++) - { - size_t len1 = table[j - 1].length; - size_t len2 = table[j].length; - - assert(len1 <= len2); - if (len1 == len2) - { - int ci; - - ci = memcmp(table[j - 1].ptr, table[j].ptr, len1); - assert(ci < 0); // ci==0 means a duplicate - } - } -} -out (result) -{ - int i; - int cj; - - //printf("out _d_switch_string()\n"); - if (result == -1) - { - // Not found - for (i = 0; i < table.length; i++) - { - if (table[i].length == ca.length) - { cj = memcmp(table[i].ptr, ca.ptr, ca.length); - assert(cj != 0); - } - } - } - else - { - assert(0 <= result && result < table.length); - for (i = 0; 1; i++) - { - assert(i < table.length); - if (table[i].length == ca.length) - { - cj = memcmp(table[i].ptr, ca.ptr, ca.length); - if (cj == 0) - { - assert(i == result); - break; - } - } - } - } -} -body -{ - //printf("body _d_switch_string(%.*s)\n", ca.length, ca.ptr); - size_t low; - size_t high; - size_t mid; - ptrdiff_t c; - char[] pca; - - low = 0; - high = table.length; - - version (none) - { - // Print table - printf("ca[] = '%s'\n", cast(char *)ca); - for (mid = 0; mid < high; mid++) - { - pca = table[mid]; - printf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); - } - } - if (high && - ca.length >= table[0].length && - ca.length <= table[high - 1].length) - { - // Looking for 0 length string, which would only be at the beginning - if (ca.length == 0) - return 0; - - char c1 = ca[0]; - - // Do binary search - while (low < high) - { - mid = (low + high) >> 1; - pca = table[mid]; - c = cast(ptrdiff_t)(ca.length - pca.length); - if (c == 0) - { - c = cast(ubyte)c1 - cast(ubyte)pca[0]; - if (c == 0) - { - c = memcmp(ca.ptr, pca.ptr, ca.length); - if (c == 0) - { //printf("found %d\n", mid); - return cast(int)mid; - } - } - } - if (c < 0) - { - high = mid; - } - else - { - low = mid + 1; - } - } - } - - //printf("not found\n"); - return -1; // not found -} - -unittest -{ - switch (cast(char []) "c") - { - case "coo": - default: - break; - } -} - -/********************************** - * Same thing, but for wide chars. - */ - -int _d_switch_ustring(wchar[][] table, wchar[] ca) -in -{ - //printf("in _d_switch_ustring()\n"); - assert(table.length >= 0); - assert(ca.length >= 0); - - // Make sure table[] is sorted correctly - int j; - - for (j = 1; j < table.length; j++) - { - size_t len1 = table[j - 1].length; - size_t len2 = table[j].length; - - assert(len1 <= len2); - if (len1 == len2) - { - int c; - - c = memcmp(table[j - 1].ptr, table[j].ptr, len1 * wchar.sizeof); - assert(c < 0); // c==0 means a duplicate - } - } -} -out (result) -{ - int i; - int c; - - //printf("out _d_switch_string()\n"); - if (result == -1) - { - // Not found - for (i = 0; i < table.length; i++) - { - if (table[i].length == ca.length) - { c = memcmp(table[i].ptr, ca.ptr, ca.length * wchar.sizeof); - assert(c != 0); - } - } - } - else - { - assert(0 <= result && result < table.length); - for (i = 0; 1; i++) - { - assert(i < table.length); - if (table[i].length == ca.length) - { - c = memcmp(table[i].ptr, ca.ptr, ca.length * wchar.sizeof); - if (c == 0) - { - assert(i == result); - break; - } - } - } - } -} -body -{ - //printf("body _d_switch_ustring()\n"); - size_t low; - size_t high; - size_t mid; - ptrdiff_t c; - wchar[] pca; - - low = 0; - high = table.length; - -/* - // Print table - wprintf("ca[] = '%.*s'\n", ca); - for (mid = 0; mid < high; mid++) - { - pca = table[mid]; - wprintf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); - } -*/ - - // Do binary search - while (low < high) - { - mid = (low + high) >> 1; - pca = table[mid]; - c = cast(ptrdiff_t)(ca.length - pca.length); - if (c == 0) - { - c = memcmp(ca.ptr, pca.ptr, ca.length * wchar.sizeof); - if (c == 0) - { //printf("found %d\n", mid); - return cast(int)mid; - } - } - if (c < 0) - { - high = mid; - } - else - { - low = mid + 1; - } - } - //printf("not found\n"); - return -1; // not found -} - - -unittest -{ - switch (cast(wchar []) "c") - { - case "coo": - default: - break; - } -} - - -/********************************** - * Same thing, but for wide chars. - */ - -int _d_switch_dstring(dchar[][] table, dchar[] ca) -in -{ - //printf("in _d_switch_dstring()\n"); - assert(table.length >= 0); - assert(ca.length >= 0); - - // Make sure table[] is sorted correctly - int j; - - for (j = 1; j < table.length; j++) - { - size_t len1 = table[j - 1].length; - size_t len2 = table[j].length; - - assert(len1 <= len2); - if (len1 == len2) - { - int c; - - c = memcmp(table[j - 1].ptr, table[j].ptr, len1 * dchar.sizeof); - assert(c < 0); // c==0 means a duplicate - } - } -} -out (result) -{ - int i; - int c; - - //printf("out _d_switch_string()\n"); - if (result == -1) - { - // Not found - for (i = 0; i < table.length; i++) - { - if (table[i].length == ca.length) - { c = memcmp(table[i].ptr, ca.ptr, ca.length * dchar.sizeof); - assert(c != 0); - } - } - } - else - { - assert(0 <= result && result < table.length); - for (i = 0; 1; i++) - { - assert(i < table.length); - if (table[i].length == ca.length) - { - c = memcmp(table[i].ptr, ca.ptr, ca.length * dchar.sizeof); - if (c == 0) - { - assert(i == result); - break; - } - } - } - } -} -body -{ - //printf("body _d_switch_ustring()\n"); - size_t low; - size_t high; - size_t mid; - ptrdiff_t c; - dchar[] pca; - - low = 0; - high = table.length; - -/* - // Print table - wprintf("ca[] = '%.*s'\n", ca); - for (mid = 0; mid < high; mid++) - { - pca = table[mid]; - wprintf("table[%d] = %d, '%.*s'\n", mid, pca.length, pca); - } -*/ - - // Do binary search - while (low < high) - { - mid = (low + high) >> 1; - pca = table[mid]; - c = cast(ptrdiff_t)(ca.length - pca.length); - if (c == 0) - { - c = memcmp(ca.ptr, pca.ptr, ca.length * dchar.sizeof); - if (c == 0) - { //printf("found %d\n", mid); - return cast(int)mid; - } - } - if (c < 0) - { - high = mid; - } - else - { - low = mid + 1; - } - } - //printf("not found\n"); - return -1; // not found -} - - -unittest -{ - switch (cast(dchar []) "c") - { - case "coo": - default: - break; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_AC.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_AC.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -module typeinfo.ti_AC; - -// Object[] - -class TypeInfo_AC : TypeInfo_Array -{ - hash_t getHash(void *p) - { Object[] s = *cast(Object[]*)p; - hash_t hash = 0; - - foreach (Object o; s) - { - if (o) - hash += o.toHash(); - } - return hash; - } - - int equals(void *p1, void *p2) - { - Object[] s1 = *cast(Object[]*)p1; - Object[] s2 = *cast(Object[]*)p2; - - if (s1.length == s2.length) - { - for (size_t u = 0; u < s1.length; u++) - { Object o1 = s1[u]; - Object o2 = s2[u]; - - // Do not pass null's to Object.opEquals() - if (o1 is o2 || - (!(o1 is null) && !(o2 is null) && o1.opEquals(o2))) - continue; - return 0; - } - return 1; - } - return 0; - } - - int compare(void *p1, void *p2) - { - Object[] s1 = *cast(Object[]*)p1; - Object[] s2 = *cast(Object[]*)p2; - ptrdiff_t c; - - c = cast(ptrdiff_t)s1.length - cast(ptrdiff_t)s2.length; - if (c == 0) - { - for (size_t u = 0; u < s1.length; u++) - { Object o1 = s1[u]; - Object o2 = s2[u]; - - if (o1 is o2) - continue; - - // Regard null references as always being "less than" - if (o1) - { - if (!o2) - { c = 1; - break; - } - c = o1.opCmp(o2); - if (c) - break; - } - else - { c = -1; - break; - } - } - } - if (c < 0) - c = -1; - else - c = 1; - return cast(int)c; - } - - size_t tsize() - { - return (Object[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(Object); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Acdouble.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Acdouble.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Acdouble; - -private import typeinfo.ti_cdouble; - -// cdouble[] - -class TypeInfo_Ar : TypeInfo_Array -{ - char[] toString() { return "cdouble[]"; } - - hash_t getHash(void *p) - { cdouble[] s = *cast(cdouble[]*)p; - size_t len = s.length; - cdouble *str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += (cast(uint *)str)[0]; - hash += (cast(uint *)str)[1]; - hash += (cast(uint *)str)[2]; - hash += (cast(uint *)str)[3]; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - cdouble[] s1 = *cast(cdouble[]*)p1; - cdouble[] s2 = *cast(cdouble[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_r._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - cdouble[] s1 = *cast(cdouble[]*)p1; - cdouble[] s2 = *cast(cdouble[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_r._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (cdouble[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(cdouble); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Acfloat.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Acfloat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Acfloat; - -private import typeinfo.ti_cfloat; - -// cfloat[] - -class TypeInfo_Aq : TypeInfo_Array -{ - char[] toString() { return "cfloat[]"; } - - hash_t getHash(void *p) - { cfloat[] s = *cast(cfloat[]*)p; - size_t len = s.length; - cfloat *str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += (cast(uint *)str)[0]; - hash += (cast(uint *)str)[1]; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - cfloat[] s1 = *cast(cfloat[]*)p1; - cfloat[] s2 = *cast(cfloat[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_q._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - cfloat[] s1 = *cast(cfloat[]*)p1; - cfloat[] s2 = *cast(cfloat[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_q._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (cfloat[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(cfloat); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Acreal.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Acreal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Acreal; - -private import typeinfo.ti_creal; - -// creal[] - -class TypeInfo_Ac : TypeInfo_Array -{ - char[] toString() { return "creal[]"; } - - hash_t getHash(void *p) - { creal[] s = *cast(creal[]*)p; - size_t len = s.length; - creal *str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += (cast(uint *)str)[0]; - hash += (cast(uint *)str)[1]; - hash += (cast(uint *)str)[2]; - hash += (cast(uint *)str)[3]; - hash += (cast(uint *)str)[4]; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - creal[] s1 = *cast(creal[]*)p1; - creal[] s2 = *cast(creal[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_c._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - creal[] s1 = *cast(creal[]*)p1; - creal[] s2 = *cast(creal[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_c._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (creal[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(creal); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Adouble.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Adouble.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Adouble; - -private import typeinfo.ti_double; - -// double[] - -class TypeInfo_Ad : TypeInfo_Array -{ - char[] toString() { return "double[]"; } - - hash_t getHash(void *p) - { double[] s = *cast(double[]*)p; - size_t len = s.length; - auto str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += (cast(uint *)str)[0]; - hash += (cast(uint *)str)[1]; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - double[] s1 = *cast(double[]*)p1; - double[] s2 = *cast(double[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_d._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - double[] s1 = *cast(double[]*)p1; - double[] s2 = *cast(double[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_d._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (double[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(double); - } -} - -// idouble[] - -class TypeInfo_Ap : TypeInfo_Ad -{ - char[] toString() { return "idouble[]"; } - - TypeInfo next() - { - return typeid(idouble); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Afloat.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Afloat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Afloat; - -private import typeinfo.ti_float; - -// float[] - -class TypeInfo_Af : TypeInfo_Array -{ - char[] toString() { return "float[]"; } - - hash_t getHash(void *p) - { float[] s = *cast(float[]*)p; - size_t len = s.length; - auto str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += *cast(uint *)str; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - float[] s1 = *cast(float[]*)p1; - float[] s2 = *cast(float[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_f._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - float[] s1 = *cast(float[]*)p1; - float[] s2 = *cast(float[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_f._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (float[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(float); - } -} - -// ifloat[] - -class TypeInfo_Ao : TypeInfo_Af -{ - char[] toString() { return "ifloat[]"; } - - TypeInfo next() - { - return typeid(ifloat); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Ag.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Ag.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ - -module typeinfo.ti_Ag; - -private import tango.stdc.string; -private import util.string; - -// byte[] - -class TypeInfo_Ag : TypeInfo_Array -{ - char[] toString() { return "byte[]"; } - - hash_t getHash(void *p) - { byte[] s = *cast(byte[]*)p; - size_t len = s.length; - byte *str = s.ptr; - hash_t hash = 0; - - while (1) - { - switch (len) - { - case 0: - return hash; - - case 1: - hash *= 9; - hash += *cast(ubyte *)str; - return hash; - - case 2: - hash *= 9; - hash += *cast(ushort *)str; - return hash; - - case 3: - hash *= 9; - hash += (*cast(ushort *)str << 8) + - (cast(ubyte *)str)[2]; - return hash; - - default: - hash *= 9; - hash += *cast(uint *)str; - str += 4; - len -= 4; - break; - } - } - - return hash; - } - - int equals(void *p1, void *p2) - { - byte[] s1 = *cast(byte[]*)p1; - byte[] s2 = *cast(byte[]*)p2; - - return s1.length == s2.length && - memcmp(cast(byte *)s1, cast(byte *)s2, s1.length) == 0; - } - - int compare(void *p1, void *p2) - { - byte[] s1 = *cast(byte[]*)p1; - byte[] s2 = *cast(byte[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int result = s1[u] - s2[u]; - if (result) - return result; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (byte[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(byte); - } -} - - -// ubyte[] - -class TypeInfo_Ah : TypeInfo_Ag -{ - char[] toString() { return "ubyte[]"; } - - int compare(void *p1, void *p2) - { - char[] s1 = *cast(char[]*)p1; - char[] s2 = *cast(char[]*)p2; - - return stringCompare(s1, s2); - } - - TypeInfo next() - { - return typeid(ubyte); - } -} - -// void[] - -class TypeInfo_Av : TypeInfo_Ah -{ - char[] toString() { return "void[]"; } - - TypeInfo next() - { - return typeid(void); - } -} - -// bool[] - -class TypeInfo_Ab : TypeInfo_Ah -{ - char[] toString() { return "bool[]"; } - - TypeInfo next() - { - return typeid(bool); - } -} - -// char[] - -class TypeInfo_Aa : TypeInfo_Ag -{ - char[] toString() { return "char[]"; } - - hash_t getHash(void *p) - { char[] s = *cast(char[]*)p; - hash_t hash = 0; - -version (all) -{ - foreach (char c; s) - hash = hash * 11 + c; -} -else -{ - size_t len = s.length; - char *str = s; - - while (1) - { - switch (len) - { - case 0: - return hash; - - case 1: - hash *= 9; - hash += *cast(ubyte *)str; - return hash; - - case 2: - hash *= 9; - hash += *cast(ushort *)str; - return hash; - - case 3: - hash *= 9; - hash += (*cast(ushort *)str << 8) + - (cast(ubyte *)str)[2]; - return hash; - - default: - hash *= 9; - hash += *cast(uint *)str; - str += 4; - len -= 4; - break; - } - } -} - return hash; - } - - TypeInfo next() - { - return typeid(char); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Aint.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Aint.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ - -module typeinfo.ti_Aint; - -private import tango.stdc.string; - -// int[] - -class TypeInfo_Ai : TypeInfo_Array -{ - char[] toString() { return "int[]"; } - - hash_t getHash(void *p) - { int[] s = *cast(int[]*)p; - auto len = s.length; - auto str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += *cast(uint *)str; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - int[] s1 = *cast(int[]*)p1; - int[] s2 = *cast(int[]*)p2; - - return s1.length == s2.length && - memcmp(cast(void *)s1, cast(void *)s2, s1.length * int.sizeof) == 0; - } - - int compare(void *p1, void *p2) - { - int[] s1 = *cast(int[]*)p1; - int[] s2 = *cast(int[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int result = s1[u] - s2[u]; - if (result) - return result; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (int[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(int); - } -} - -// uint[] - -class TypeInfo_Ak : TypeInfo_Ai -{ - char[] toString() { return "uint[]"; } - - int compare(void *p1, void *p2) - { - uint[] s1 = *cast(uint[]*)p1; - uint[] s2 = *cast(uint[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int result = s1[u] - s2[u]; - if (result) - return result; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - TypeInfo next() - { - return typeid(uint); - } -} - -// dchar[] - -class TypeInfo_Aw : TypeInfo_Ak -{ - char[] toString() { return "dchar[]"; } - - TypeInfo next() - { - return typeid(dchar); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Along.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Along.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ - -module typeinfo.ti_Along; - -private import tango.stdc.string; - -// long[] - -class TypeInfo_Al : TypeInfo_Array -{ - char[] toString() { return "long[]"; } - - hash_t getHash(void *p) - { long[] s = *cast(long[]*)p; - size_t len = s.length; - auto str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += *cast(uint *)str + *(cast(uint *)str + 1); - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - long[] s1 = *cast(long[]*)p1; - long[] s2 = *cast(long[]*)p2; - - return s1.length == s2.length && - memcmp(cast(void *)s1, cast(void *)s2, s1.length * long.sizeof) == 0; - } - - int compare(void *p1, void *p2) - { - long[] s1 = *cast(long[]*)p1; - long[] s2 = *cast(long[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - if (s1[u] < s2[u]) - return -1; - else if (s1[u] > s2[u]) - return 1; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (long[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(long); - } -} - - -// ulong[] - -class TypeInfo_Am : TypeInfo_Al -{ - char[] toString() { return "ulong[]"; } - - int compare(void *p1, void *p2) - { - ulong[] s1 = *cast(ulong[]*)p1; - ulong[] s2 = *cast(ulong[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - if (s1[u] < s2[u]) - return -1; - else if (s1[u] > s2[u]) - return 1; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - TypeInfo next() - { - return typeid(ulong); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Areal.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Areal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/* - * Copyright (C) 2004-2006 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_Areal; - -private import typeinfo.ti_real; - -// real[] - -class TypeInfo_Ae : TypeInfo_Array -{ - char[] toString() { return "real[]"; } - - hash_t getHash(void *p) - { real[] s = *cast(real[]*)p; - size_t len = s.length; - auto str = s.ptr; - hash_t hash = 0; - - while (len) - { - hash *= 9; - hash += (cast(uint *)str)[0]; - hash += (cast(uint *)str)[1]; - hash += (cast(ushort *)str)[4]; - str++; - len--; - } - - return hash; - } - - int equals(void *p1, void *p2) - { - real[] s1 = *cast(real[]*)p1; - real[] s2 = *cast(real[]*)p2; - size_t len = s1.length; - - if (len != s2.length) - return 0; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_e._equals(s1[u], s2[u]); - if (c == 0) - return 0; - } - return 1; - } - - int compare(void *p1, void *p2) - { - real[] s1 = *cast(real[]*)p1; - real[] s2 = *cast(real[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int c = TypeInfo_e._compare(s1[u], s2[u]); - if (c) - return c; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (real[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(real); - } -} - -// ireal[] - -class TypeInfo_Aj : TypeInfo_Ae -{ - char[] toString() { return "ireal[]"; } - - TypeInfo next() - { - return typeid(ireal); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_Ashort.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_Ashort.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,132 +0,0 @@ - -module typeinfo.ti_Ashort; - -private import tango.stdc.string; - -// short[] - -class TypeInfo_As : TypeInfo_Array -{ - char[] toString() { return "short[]"; } - - hash_t getHash(void *p) - { short[] s = *cast(short[]*)p; - size_t len = s.length; - short *str = s.ptr; - hash_t hash = 0; - - while (1) - { - switch (len) - { - case 0: - return hash; - - case 1: - hash *= 9; - hash += *cast(ushort *)str; - return hash; - - default: - hash *= 9; - hash += *cast(uint *)str; - str += 2; - len -= 2; - break; - } - } - - return hash; - } - - int equals(void *p1, void *p2) - { - short[] s1 = *cast(short[]*)p1; - short[] s2 = *cast(short[]*)p2; - - return s1.length == s2.length && - memcmp(cast(void *)s1, cast(void *)s2, s1.length * short.sizeof) == 0; - } - - int compare(void *p1, void *p2) - { - short[] s1 = *cast(short[]*)p1; - short[] s2 = *cast(short[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int result = s1[u] - s2[u]; - if (result) - return result; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - size_t tsize() - { - return (short[]).sizeof; - } - - uint flags() - { - return 1; - } - - TypeInfo next() - { - return typeid(short); - } -} - - -// ushort[] - -class TypeInfo_At : TypeInfo_As -{ - char[] toString() { return "ushort[]"; } - - int compare(void *p1, void *p2) - { - ushort[] s1 = *cast(ushort[]*)p1; - ushort[] s2 = *cast(ushort[]*)p2; - size_t len = s1.length; - - if (s2.length < len) - len = s2.length; - for (size_t u = 0; u < len; u++) - { - int result = s1[u] - s2[u]; - if (result) - return result; - } - if (s1.length < s2.length) - return -1; - else if (s1.length > s2.length) - return 1; - return 0; - } - - TypeInfo next() - { - return typeid(ushort); - } -} - -// wchar[] - -class TypeInfo_Au : TypeInfo_At -{ - char[] toString() { return "wchar[]"; } - - TypeInfo next() - { - return typeid(wchar); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_C.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_C.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -module typeinfo.ti_C; - -// Object - -class TypeInfo_C : TypeInfo -{ - hash_t getHash(void *p) - { - Object o = *cast(Object*)p; - assert(o); - return o.toHash(); - } - - int equals(void *p1, void *p2) - { - Object o1 = *cast(Object*)p1; - Object o2 = *cast(Object*)p2; - - return o1 == o2; - } - - int compare(void *p1, void *p2) - { - Object o1 = *cast(Object*)p1; - Object o2 = *cast(Object*)p2; - int c = 0; - - // Regard null references as always being "less than" - if (!(o1 is o2)) - { - if (o1) - { if (!o2) - c = 1; - else - c = o1.opCmp(o2); - } - else - c = -1; - } - return c; - } - - size_t tsize() - { - return Object.sizeof; - } - - uint flags() - { - return 1; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_byte.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_byte.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -// byte - -module typeinfo.ti_byte; - -class TypeInfo_g : TypeInfo -{ - char[] toString() { return "byte"; } - - hash_t getHash(void *p) - { - return *cast(byte *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(byte *)p1 == *cast(byte *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(byte *)p1 - *cast(byte *)p2; - } - - size_t tsize() - { - return byte.sizeof; - } - - void swap(void *p1, void *p2) - { - byte t; - - t = *cast(byte *)p1; - *cast(byte *)p1 = *cast(byte *)p2; - *cast(byte *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_cdouble.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_cdouble.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ - -// cdouble - -module typeinfo.ti_cdouble; - -class TypeInfo_r : TypeInfo -{ - char[] toString() { return "cdouble"; } - - hash_t getHash(void *p) - { - return (cast(uint *)p)[0] + (cast(uint *)p)[1] + - (cast(uint *)p)[2] + (cast(uint *)p)[3]; - } - - static int _equals(cdouble f1, cdouble f2) - { - return f1 == f2; - } - - static int _compare(cdouble f1, cdouble f2) - { int result; - - if (f1.re < f2.re) - result = -1; - else if (f1.re > f2.re) - result = 1; - else if (f1.im < f2.im) - result = -1; - else if (f1.im > f2.im) - result = 1; - else - result = 0; - return result; - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(cdouble *)p1, *cast(cdouble *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(cdouble *)p1, *cast(cdouble *)p2); - } - - size_t tsize() - { - return cdouble.sizeof; - } - - void swap(void *p1, void *p2) - { - cdouble t; - - t = *cast(cdouble *)p1; - *cast(cdouble *)p1 = *cast(cdouble *)p2; - *cast(cdouble *)p2 = t; - } - - void[] init() - { static cdouble r; - - return (cast(cdouble *)&r)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_cfloat.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_cfloat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ - -// cfloat - -module typeinfo.ti_cfloat; - -class TypeInfo_q : TypeInfo -{ - char[] toString() { return "cfloat"; } - - hash_t getHash(void *p) - { - return (cast(uint *)p)[0] + (cast(uint *)p)[1]; - } - - static int _equals(cfloat f1, cfloat f2) - { - return f1 == f2; - } - - static int _compare(cfloat f1, cfloat f2) - { int result; - - if (f1.re < f2.re) - result = -1; - else if (f1.re > f2.re) - result = 1; - else if (f1.im < f2.im) - result = -1; - else if (f1.im > f2.im) - result = 1; - else - result = 0; - return result; - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(cfloat *)p1, *cast(cfloat *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(cfloat *)p1, *cast(cfloat *)p2); - } - - size_t tsize() - { - return cfloat.sizeof; - } - - void swap(void *p1, void *p2) - { - cfloat t; - - t = *cast(cfloat *)p1; - *cast(cfloat *)p1 = *cast(cfloat *)p2; - *cast(cfloat *)p2 = t; - } - - void[] init() - { static cfloat r; - - return (cast(cfloat *)&r)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_char.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_char.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ - -module typeinfo.ti_char; - -class TypeInfo_a : TypeInfo -{ - char[] toString() { return "char"; } - - hash_t getHash(void *p) - { - return *cast(char *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(char *)p1 == *cast(char *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(char *)p1 - *cast(char *)p2; - } - - size_t tsize() - { - return char.sizeof; - } - - void swap(void *p1, void *p2) - { - char t; - - t = *cast(char *)p1; - *cast(char *)p1 = *cast(char *)p2; - *cast(char *)p2 = t; - } - - void[] init() - { static char c; - - return (cast(char *)&c)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_creal.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_creal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ - -// creal - -module typeinfo.ti_creal; - -class TypeInfo_c : TypeInfo -{ - char[] toString() { return "creal"; } - - hash_t getHash(void *p) - { - return (cast(uint *)p)[0] + (cast(uint *)p)[1] + - (cast(uint *)p)[2] + (cast(uint *)p)[3] + - (cast(uint *)p)[4]; - } - - static int _equals(creal f1, creal f2) - { - return f1 == f2; - } - - static int _compare(creal f1, creal f2) - { int result; - - if (f1.re < f2.re) - result = -1; - else if (f1.re > f2.re) - result = 1; - else if (f1.im < f2.im) - result = -1; - else if (f1.im > f2.im) - result = 1; - else - result = 0; - return result; - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(creal *)p1, *cast(creal *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(creal *)p1, *cast(creal *)p2); - } - - size_t tsize() - { - return creal.sizeof; - } - - void swap(void *p1, void *p2) - { - creal t; - - t = *cast(creal *)p1; - *cast(creal *)p1 = *cast(creal *)p2; - *cast(creal *)p2 = t; - } - - void[] init() - { static creal r; - - return (cast(creal *)&r)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_dchar.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_dchar.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ - -// dchar - -module typeinfo.ti_dchar; - -class TypeInfo_w : TypeInfo -{ - char[] toString() { return "dchar"; } - - hash_t getHash(void *p) - { - return *cast(dchar *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(dchar *)p1 == *cast(dchar *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(dchar *)p1 - *cast(dchar *)p2; - } - - size_t tsize() - { - return dchar.sizeof; - } - - void swap(void *p1, void *p2) - { - dchar t; - - t = *cast(dchar *)p1; - *cast(dchar *)p1 = *cast(dchar *)p2; - *cast(dchar *)p2 = t; - } - - void[] init() - { static dchar c; - - return (cast(dchar *)&c)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_delegate.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_delegate.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -// delegate - -module typeinfo.ti_delegate; - -alias void delegate(int) dg; - -class TypeInfo_D : TypeInfo -{ - hash_t getHash(void *p) - { long l = *cast(long *)p; - - return cast(uint)(l + (l >> 32)); - } - - int equals(void *p1, void *p2) - { - return *cast(dg *)p1 == *cast(dg *)p2; - } - - size_t tsize() - { - return dg.sizeof; - } - - void swap(void *p1, void *p2) - { - dg t; - - t = *cast(dg *)p1; - *cast(dg *)p1 = *cast(dg *)p2; - *cast(dg *)p2 = t; - } - - uint flags() - { - return 1; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_double.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_double.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ - -// double - -module typeinfo.ti_double; - -class TypeInfo_d : TypeInfo -{ - char[] toString() { return "double"; } - - hash_t getHash(void *p) - { - return (cast(uint *)p)[0] + (cast(uint *)p)[1]; - } - - static int _equals(double f1, double f2) - { - return f1 == f2 || - (f1 !<>= f1 && f2 !<>= f2); - } - - static int _compare(double d1, double d2) - { - if (d1 !<>= d2) // if either are NaN - { - if (d1 !<>= d1) - { if (d2 !<>= d2) - return 0; - return -1; - } - return 1; - } - return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(double *)p1, *cast(double *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(double *)p1, *cast(double *)p2); - } - - size_t tsize() - { - return double.sizeof; - } - - void swap(void *p1, void *p2) - { - double t; - - t = *cast(double *)p1; - *cast(double *)p1 = *cast(double *)p2; - *cast(double *)p2 = t; - } - - void[] init() - { static double r; - - return (cast(double *)&r)[0 .. 1]; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_float.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_float.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ - -// float - -module typeinfo.ti_float; - -class TypeInfo_f : TypeInfo -{ - char[] toString() { return "float"; } - - hash_t getHash(void *p) - { - return *cast(uint *)p; - } - - static int _equals(float f1, float f2) - { - return f1 == f2 || - (f1 !<>= f1 && f2 !<>= f2); - } - - static int _compare(float d1, float d2) - { - if (d1 !<>= d2) // if either are NaN - { - if (d1 !<>= d1) - { if (d2 !<>= d2) - return 0; - return -1; - } - return 1; - } - return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(float *)p1, *cast(float *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(float *)p1, *cast(float *)p2); - } - - size_t tsize() - { - return float.sizeof; - } - - void swap(void *p1, void *p2) - { - float t; - - t = *cast(float *)p1; - *cast(float *)p1 = *cast(float *)p2; - *cast(float *)p2 = t; - } - - void[] init() - { static float r; - - return (cast(float *)&r)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_idouble.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_idouble.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - -// idouble - -module typeinfo.ti_idouble; - -private import typeinfo.ti_double; - -class TypeInfo_p : TypeInfo_d -{ - char[] toString() { return "idouble"; } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ifloat.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ifloat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - -// ifloat - -module typeinfo.ti_ifloat; - -private import typeinfo.ti_float; - -class TypeInfo_o : TypeInfo_f -{ - char[] toString() { return "ifloat"; } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_int.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_int.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// int - -module typeinfo.ti_int; - -class TypeInfo_i : TypeInfo -{ - char[] toString() { return "int"; } - - hash_t getHash(void *p) - { - return *cast(uint *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(uint *)p1 == *cast(uint *)p2; - } - - int compare(void *p1, void *p2) - { - if (*cast(int*) p1 < *cast(int*) p2) - return -1; - else if (*cast(int*) p1 > *cast(int*) p2) - return 1; - return 0; - } - - size_t tsize() - { - return int.sizeof; - } - - void swap(void *p1, void *p2) - { - int t; - - t = *cast(int *)p1; - *cast(int *)p1 = *cast(int *)p2; - *cast(int *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ireal.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ireal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ - -// ireal - -module typeinfo.ti_ireal; - -private import typeinfo.ti_real; - -class TypeInfo_j : TypeInfo_e -{ - char[] toString() { return "ireal"; } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_long.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_long.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// long - -module typeinfo.ti_long; - -class TypeInfo_l : TypeInfo -{ - char[] toString() { return "long"; } - - hash_t getHash(void *p) - { - return *cast(uint *)p + (cast(uint *)p)[1]; - } - - int equals(void *p1, void *p2) - { - return *cast(long *)p1 == *cast(long *)p2; - } - - int compare(void *p1, void *p2) - { - if (*cast(long *)p1 < *cast(long *)p2) - return -1; - else if (*cast(long *)p1 > *cast(long *)p2) - return 1; - return 0; - } - - size_t tsize() - { - return long.sizeof; - } - - void swap(void *p1, void *p2) - { - long t; - - t = *cast(long *)p1; - *cast(long *)p1 = *cast(long *)p2; - *cast(long *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ptr.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ptr.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ - -// pointer - -module typeinfo.ti_ptr; - -class TypeInfo_P : TypeInfo -{ - hash_t getHash(void *p) - { - return cast(uint)*cast(void* *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(void* *)p1 == *cast(void* *)p2; - } - - int compare(void *p1, void *p2) - { - auto c = *cast(void* *)p1 - *cast(void* *)p2; - if (c < 0) - return -1; - else if (c > 0) - return 1; - return 0; - } - - size_t tsize() - { - return (void*).sizeof; - } - - void swap(void *p1, void *p2) - { - void* t; - - t = *cast(void* *)p1; - *cast(void* *)p1 = *cast(void* *)p2; - *cast(void* *)p2 = t; - } - - uint flags() - { - return 1; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_real.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_real.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ - -// real - -module typeinfo.ti_real; - -class TypeInfo_e : TypeInfo -{ - char[] toString() { return "real"; } - - hash_t getHash(void *p) - { - return (cast(uint *)p)[0] + (cast(uint *)p)[1] + (cast(ushort *)p)[4]; - } - - static int _equals(real f1, real f2) - { - return f1 == f2 || - (f1 !<>= f1 && f2 !<>= f2); - } - - static int _compare(real d1, real d2) - { - if (d1 !<>= d2) // if either are NaN - { - if (d1 !<>= d1) - { if (d2 !<>= d2) - return 0; - return -1; - } - return 1; - } - return (d1 == d2) ? 0 : ((d1 < d2) ? -1 : 1); - } - - int equals(void *p1, void *p2) - { - return _equals(*cast(real *)p1, *cast(real *)p2); - } - - int compare(void *p1, void *p2) - { - return _compare(*cast(real *)p1, *cast(real *)p2); - } - - size_t tsize() - { - return real.sizeof; - } - - void swap(void *p1, void *p2) - { - real t; - - t = *cast(real *)p1; - *cast(real *)p1 = *cast(real *)p2; - *cast(real *)p2 = t; - } - - void[] init() - { static real r; - - return (cast(real *)&r)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_short.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_short.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -// short - -module typeinfo.ti_short; - -class TypeInfo_s : TypeInfo -{ - char[] toString() { return "short"; } - - hash_t getHash(void *p) - { - return *cast(short *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(short *)p1 == *cast(short *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(short *)p1 - *cast(short *)p2; - } - - size_t tsize() - { - return short.sizeof; - } - - void swap(void *p1, void *p2) - { - short t; - - t = *cast(short *)p1; - *cast(short *)p1 = *cast(short *)p2; - *cast(short *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ubyte.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ubyte.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// ubyte - -module typeinfo.ti_ubyte; - -class TypeInfo_h : TypeInfo -{ - char[] toString() { return "ubyte"; } - - hash_t getHash(void *p) - { - return *cast(ubyte *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(ubyte *)p1 == *cast(ubyte *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(ubyte *)p1 - *cast(ubyte *)p2; - } - - size_t tsize() - { - return ubyte.sizeof; - } - - void swap(void *p1, void *p2) - { - ubyte t; - - t = *cast(ubyte *)p1; - *cast(ubyte *)p1 = *cast(ubyte *)p2; - *cast(ubyte *)p2 = t; - } -} - -class TypeInfo_b : TypeInfo_h -{ - char[] toString() { return "bool"; } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_uint.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_uint.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// uint - -module typeinfo.ti_uint; - -class TypeInfo_k : TypeInfo -{ - char[] toString() { return "uint"; } - - hash_t getHash(void *p) - { - return *cast(uint *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(uint *)p1 == *cast(uint *)p2; - } - - int compare(void *p1, void *p2) - { - if (*cast(uint*) p1 < *cast(uint*) p2) - return -1; - else if (*cast(uint*) p1 > *cast(uint*) p2) - return 1; - return 0; - } - - size_t tsize() - { - return uint.sizeof; - } - - void swap(void *p1, void *p2) - { - int t; - - t = *cast(uint *)p1; - *cast(uint *)p1 = *cast(uint *)p2; - *cast(uint *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ulong.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ulong.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// ulong - -module typeinfo.ti_ulong; - -class TypeInfo_m : TypeInfo -{ - char[] toString() { return "ulong"; } - - hash_t getHash(void *p) - { - return *cast(uint *)p + (cast(uint *)p)[1]; - } - - int equals(void *p1, void *p2) - { - return *cast(ulong *)p1 == *cast(ulong *)p2; - } - - int compare(void *p1, void *p2) - { - if (*cast(ulong *)p1 < *cast(ulong *)p2) - return -1; - else if (*cast(ulong *)p1 > *cast(ulong *)p2) - return 1; - return 0; - } - - size_t tsize() - { - return ulong.sizeof; - } - - void swap(void *p1, void *p2) - { - ulong t; - - t = *cast(ulong *)p1; - *cast(ulong *)p1 = *cast(ulong *)p2; - *cast(ulong *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_ushort.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_ushort.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ - -// ushort - -module typeinfo.ti_ushort; - -class TypeInfo_t : TypeInfo -{ - char[] toString() { return "ushort"; } - - hash_t getHash(void *p) - { - return *cast(ushort *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(ushort *)p1 == *cast(ushort *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(ushort *)p1 - *cast(ushort *)p2; - } - - size_t tsize() - { - return ushort.sizeof; - } - - void swap(void *p1, void *p2) - { - ushort t; - - t = *cast(ushort *)p1; - *cast(ushort *)p1 = *cast(ushort *)p2; - *cast(ushort *)p2 = t; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_void.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_void.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -// void - -module typeinfo.ti_void; - -class TypeInfo_v : TypeInfo -{ - char[] toString() { return "void"; } - - hash_t getHash(void *p) - { - assert(0); - } - - int equals(void *p1, void *p2) - { - return *cast(byte *)p1 == *cast(byte *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(byte *)p1 - *cast(byte *)p2; - } - - size_t tsize() - { - return void.sizeof; - } - - void swap(void *p1, void *p2) - { - byte t; - - t = *cast(byte *)p1; - *cast(byte *)p1 = *cast(byte *)p2; - *cast(byte *)p2 = t; - } - - uint flags() - { - return 1; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/typeinfo/ti_wchar.d --- a/tango/lib/compiler/llvmdc/typeinfo/ti_wchar.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ - -module typeinfo.ti_wchar; - - -class TypeInfo_u : TypeInfo -{ - char[] toString() { return "wchar"; } - - hash_t getHash(void *p) - { - return *cast(wchar *)p; - } - - int equals(void *p1, void *p2) - { - return *cast(wchar *)p1 == *cast(wchar *)p2; - } - - int compare(void *p1, void *p2) - { - return *cast(wchar *)p1 - *cast(wchar *)p2; - } - - size_t tsize() - { - return wchar.sizeof; - } - - void swap(void *p1, void *p2) - { - wchar t; - - t = *cast(wchar *)p1; - *cast(wchar *)p1 = *cast(wchar *)p2; - *cast(wchar *)p2 = t; - } - - void[] init() - { static wchar c; - - return (cast(wchar *)&c)[0 .. 1]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/util/console.d --- a/tango/lib/compiler/llvmdc/util/console.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Tango group. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: July 2006 - - - Various low-level console oriented utilities - -*******************************************************************************/ - -module util.console; - -private import util.string; - -version (Win32) - { - private extern (Windows) int GetStdHandle (int); - private extern (Windows) int WriteFile (int, char*, int, int*, void*); - } - -else - -version (Posix) - { - private extern (C) ptrdiff_t write (int, void*, size_t); - } - -/+ -// emit a char[] to the console. Note that Win32 does not handle utf8, but -// then neither does fprintf (stderr). This will handle redirection though. -// May need to remedy the utf8 issue -int console (char[] s) -{ - version (Win32) - { - int count; - if (WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null)) - return count; - return -1; - } - else - version (Posix) - { - return write (2, s.ptr, s.length); - } -} - -// emit an integer to the console -int console (uint i) -{ - char[10] tmp = void; - - return console (intToUtf8 (tmp, i)); -} -+/ - -struct Console -{ - Console opCall (char[] s) - { - version (Win32) - { - int count; - WriteFile (GetStdHandle(0xfffffff5), s.ptr, s.length, &count, null); - } - else - version (Posix) - { - write (2, s.ptr, s.length); - } - return *this; - } - - // emit an integer to the console - Console opCall (size_t i) - { - char[25] tmp = void; - - return console (intToUtf8 (tmp, i)); - } -} - -Console console; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/util/ctype.d --- a/tango/lib/compiler/llvmdc/util/ctype.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ - -/* - * Copyright (C) 2004-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -// Simple ASCII char classification functions - -module util.ctype; - -int isalnum(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG) : 0; } -int isalpha(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP) : 0; } -int iscntrl(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_CTL) : 0; } -int isdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_DIG) : 0; } -int islower(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_LC) : 0; } -int ispunct(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_PNC) : 0; } -int isspace(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_SPC) : 0; } -int isupper(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_UC) : 0; } -int isxdigit(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_HEX) : 0; } -int isgraph(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC) : 0; } -int isprint(dchar c) { return (c <= 0x7F) ? _ctype[c] & (_ALP|_DIG|_PNC|_BLK) : 0; } -int isascii(dchar c) { return c <= 0x7F; } - -dchar tolower(dchar c) - out (result) - { - assert(!isupper(result)); - } - body - { - return isupper(c) ? c + (cast(dchar)'a' - 'A') : c; - } - -dchar toupper(dchar c) - out (result) - { - assert(!islower(result)); - } - body - { - return islower(c) ? c - (cast(dchar)'a' - 'A') : c; - } - -private: - -enum -{ - _SPC = 8, - _CTL = 0x20, - _BLK = 0x40, - _HEX = 0x80, - _UC = 1, - _LC = 2, - _PNC = 0x10, - _DIG = 4, - _ALP = _UC|_LC, -} - -ubyte _ctype[128] = -[ - _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, - _CTL,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL|_SPC,_CTL,_CTL, - _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, - _CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL,_CTL, - _SPC|_BLK,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, - _PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC,_PNC, - _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, - _DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX,_DIG|_HEX, - _PNC,_PNC,_PNC,_PNC,_PNC,_PNC, - _PNC,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC|_HEX,_UC, - _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, - _UC,_UC,_UC,_UC,_UC,_UC,_UC,_UC, - _UC,_UC,_UC,_PNC,_PNC,_PNC,_PNC,_PNC, - _PNC,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC|_HEX,_LC, - _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, - _LC,_LC,_LC,_LC,_LC,_LC,_LC,_LC, - _LC,_LC,_LC,_PNC,_PNC,_PNC,_PNC,_CTL -]; - - -unittest -{ - assert(isspace(' ')); - assert(!isspace('z')); - assert(toupper('a') == 'A'); - assert(tolower('Q') == 'q'); - assert(!isxdigit('G')); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/util/string.d --- a/tango/lib/compiler/llvmdc/util/string.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Tango group. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: July 2006 - - - Various char[] utilities - -*******************************************************************************/ - -module util.string; - -private import tango.stdc.string; - -// convert uint to char[], within the given buffer -// Returns a valid slice of the populated buffer -char[] intToUtf8 (char[] tmp, size_t val) -in { - assert (tmp.length > 20, "atoi buffer should be 20 or more chars wide"); - } -body -{ - char* p = tmp.ptr + tmp.length; - - do { - *--p = (val % 10) + '0'; - } while (val /= 10); - - return tmp [cast(size_t)(p - tmp.ptr) .. $]; -} - - -// function to compare two strings -int stringCompare (char[] s1, char[] s2) -{ - auto len = s1.length; - - if (s2.length < len) - len = s2.length; - - int result = memcmp(s1.ptr, s2.ptr, len); - - if (result == 0) - result = cast(int)s1.length - cast(int)s2.length; - - return result; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/compiler/llvmdc/util/utf.d --- a/tango/lib/compiler/llvmdc/util/utf.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,851 +0,0 @@ -// utf.d - -/* - * Copyright (C) 2003-2004 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -// Description of UTF-8 at: -// http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 -// http://anubis.dkuug.dk/JTC1/SC2/WG2/docs/n1335 - - -module util.utf; - - -extern (C) void onUnicodeError( char[] msg, size_t idx ); - - -bool isValidDchar(dchar c) -{ - /* Note: FFFE and FFFF are specifically permitted by the - * Unicode standard for application internal use, but are not - * allowed for interchange. - * (thanks to Arcane Jill) - */ - - return c < 0xD800 || - (c > 0xDFFF && c <= 0x10FFFF /*&& c != 0xFFFE && c != 0xFFFF*/); -} - -unittest -{ - debug(utf) printf("utf.isValidDchar.unittest\n"); - assert(isValidDchar(cast(dchar)'a') == true); - assert(isValidDchar(cast(dchar)0x1FFFFF) == false); -} - - -/* This array gives the length of a UTF-8 sequence indexed by the value - * of the leading byte. An FF represents an illegal starting value of - * a UTF-8 sequence. - * FF is used instead of 0 to avoid having loops hang. - */ - -ubyte[256] UTF8stride = -[ - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, - 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, - 4,4,4,4,4,4,4,4,5,5,5,5,6,6,0xFF,0xFF, -]; - -uint stride(char[] s, size_t i) -{ - return UTF8stride[s[i]]; -} - -uint stride(wchar[] s, size_t i) -{ uint u = s[i]; - return 1 + (u >= 0xD800 && u <= 0xDBFF); -} - -uint stride(dchar[] s, size_t i) -{ - return 1; -} - -/******************************************* - * Given an index into an array of char's, - * and assuming that index is at the start of a UTF character, - * determine the number of UCS characters up to that index. - */ - -size_t toUCSindex(char[] s, size_t i) -{ - size_t n; - size_t j; - size_t stride; - - for (j = 0; j < i; j += stride) - { - stride = UTF8stride[s[j]]; - if (stride == 0xFF) - goto Lerr; - n++; - } - if (j > i) - { - Lerr: - onUnicodeError("invalid UTF-8 sequence", j); - } - return n; -} - -size_t toUCSindex(wchar[] s, size_t i) -{ - size_t n; - size_t j; - - for (j = 0; j < i; ) - { uint u = s[j]; - - j += 1 + (u >= 0xD800 && u <= 0xDBFF); - n++; - } - if (j > i) - { - Lerr: - onUnicodeError("invalid UTF-16 sequence", j); - } - return n; -} - -size_t toUCSindex(dchar[] s, size_t i) -{ - return i; -} - -/****************************************** - * Given a UCS index into an array of characters, return the UTF index. - */ - -size_t toUTFindex(char[] s, size_t n) -{ - size_t i; - - while (n--) - { - uint j = UTF8stride[s[i]]; - if (j == 0xFF) - onUnicodeError("invalid UTF-8 sequence", i); - i += j; - } - return i; -} - -size_t toUTFindex(wchar[] s, size_t n) -{ - size_t i; - - while (n--) - { wchar u = s[i]; - - i += 1 + (u >= 0xD800 && u <= 0xDBFF); - } - return i; -} - -size_t toUTFindex(dchar[] s, size_t n) -{ - return n; -} - -/* =================== Decode ======================= */ - -dchar decode(char[] s, inout size_t idx) - in - { - assert(idx >= 0 && idx < s.length); - } - out (result) - { - assert(isValidDchar(result)); - } - body - { - size_t len = s.length; - dchar V; - size_t i = idx; - char u = s[i]; - - if (u & 0x80) - { uint n; - char u2; - - /* The following encodings are valid, except for the 5 and 6 byte - * combinations: - * 0xxxxxxx - * 110xxxxx 10xxxxxx - * 1110xxxx 10xxxxxx 10xxxxxx - * 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx - * 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - * 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx - */ - for (n = 1; ; n++) - { - if (n > 4) - goto Lerr; // only do the first 4 of 6 encodings - if (((u << n) & 0x80) == 0) - { - if (n == 1) - goto Lerr; - break; - } - } - - // Pick off (7 - n) significant bits of B from first byte of octet - V = cast(dchar)(u & ((1 << (7 - n)) - 1)); - - if (i + (n - 1) >= len) - goto Lerr; // off end of string - - /* The following combinations are overlong, and illegal: - * 1100000x (10xxxxxx) - * 11100000 100xxxxx (10xxxxxx) - * 11110000 1000xxxx (10xxxxxx 10xxxxxx) - * 11111000 10000xxx (10xxxxxx 10xxxxxx 10xxxxxx) - * 11111100 100000xx (10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx) - */ - u2 = s[i + 1]; - if ((u & 0xFE) == 0xC0 || - (u == 0xE0 && (u2 & 0xE0) == 0x80) || - (u == 0xF0 && (u2 & 0xF0) == 0x80) || - (u == 0xF8 && (u2 & 0xF8) == 0x80) || - (u == 0xFC && (u2 & 0xFC) == 0x80)) - goto Lerr; // overlong combination - - for (uint j = 1; j != n; j++) - { - u = s[i + j]; - if ((u & 0xC0) != 0x80) - goto Lerr; // trailing bytes are 10xxxxxx - V = (V << 6) | (u & 0x3F); - } - if (!isValidDchar(V)) - goto Lerr; - i += n; - } - else - { - V = cast(dchar) u; - i++; - } - - idx = i; - return V; - - Lerr: - onUnicodeError("invalid UTF-8 sequence", i); - return V; // dummy return - } - -unittest -{ size_t i; - dchar c; - - debug(utf) printf("utf.decode.unittest\n"); - - static char[] s1 = "abcd"; - i = 0; - c = decode(s1, i); - assert(c == cast(dchar)'a'); - assert(i == 1); - c = decode(s1, i); - assert(c == cast(dchar)'b'); - assert(i == 2); - - static char[] s2 = "\xC2\xA9"; - i = 0; - c = decode(s2, i); - assert(c == cast(dchar)'\u00A9'); - assert(i == 2); - - static char[] s3 = "\xE2\x89\xA0"; - i = 0; - c = decode(s3, i); - assert(c == cast(dchar)'\u2260'); - assert(i == 3); - - static char[][] s4 = - [ "\xE2\x89", // too short - "\xC0\x8A", - "\xE0\x80\x8A", - "\xF0\x80\x80\x8A", - "\xF8\x80\x80\x80\x8A", - "\xFC\x80\x80\x80\x80\x8A", - ]; - - for (int j = 0; j < s4.length; j++) - { - try - { - i = 0; - c = decode(s4[j], i); - assert(0); - } - catch (Object o) - { - i = 23; - } - assert(i == 23); - } -} - -/********************************************************/ - -dchar decode(wchar[] s, inout size_t idx) - in - { - assert(idx >= 0 && idx < s.length); - } - out (result) - { - assert(isValidDchar(result)); - } - body - { - char[] msg; - dchar V; - size_t i = idx; - uint u = s[i]; - - if (u & ~0x7F) - { if (u >= 0xD800 && u <= 0xDBFF) - { uint u2; - - if (i + 1 == s.length) - { msg = "surrogate UTF-16 high value past end of string"; - goto Lerr; - } - u2 = s[i + 1]; - if (u2 < 0xDC00 || u2 > 0xDFFF) - { msg = "surrogate UTF-16 low value out of range"; - goto Lerr; - } - u = ((u - 0xD7C0) << 10) + (u2 - 0xDC00); - i += 2; - } - else if (u >= 0xDC00 && u <= 0xDFFF) - { msg = "unpaired surrogate UTF-16 value"; - goto Lerr; - } - else if (u == 0xFFFE || u == 0xFFFF) - { msg = "illegal UTF-16 value"; - goto Lerr; - } - else - i++; - } - else - { - i++; - } - - idx = i; - return cast(dchar)u; - - Lerr: - onUnicodeError(msg, i); - return cast(dchar)u; // dummy return - } - -/********************************************************/ - -dchar decode(dchar[] s, inout size_t idx) - in - { - assert(idx >= 0 && idx < s.length); - } - body - { - size_t i = idx; - dchar c = s[i]; - - if (!isValidDchar(c)) - goto Lerr; - idx = i + 1; - return c; - - Lerr: - onUnicodeError("invalid UTF-32 value", i); - return c; // dummy return - } - - -/* =================== Encode ======================= */ - -void encode(inout char[] s, dchar c) - in - { - assert(isValidDchar(c)); - } - body - { - char[] r = s; - - if (c <= 0x7F) - { - r ~= cast(char) c; - } - else - { - char[4] buf; - uint L; - - if (c <= 0x7FF) - { - buf[0] = cast(char)(0xC0 | (c >> 6)); - buf[1] = cast(char)(0x80 | (c & 0x3F)); - L = 2; - } - else if (c <= 0xFFFF) - { - buf[0] = cast(char)(0xE0 | (c >> 12)); - buf[1] = cast(char)(0x80 | ((c >> 6) & 0x3F)); - buf[2] = cast(char)(0x80 | (c & 0x3F)); - L = 3; - } - else if (c <= 0x10FFFF) - { - buf[0] = cast(char)(0xF0 | (c >> 18)); - buf[1] = cast(char)(0x80 | ((c >> 12) & 0x3F)); - buf[2] = cast(char)(0x80 | ((c >> 6) & 0x3F)); - buf[3] = cast(char)(0x80 | (c & 0x3F)); - L = 4; - } - else - { - assert(0); - } - r ~= buf[0 .. L]; - } - s = r; - } - -unittest -{ - debug(utf) printf("utf.encode.unittest\n"); - - char[] s = "abcd"; - encode(s, cast(dchar)'a'); - assert(s.length == 5); - assert(s == "abcda"); - - encode(s, cast(dchar)'\u00A9'); - assert(s.length == 7); - assert(s == "abcda\xC2\xA9"); - //assert(s == "abcda\u00A9"); // BUG: fix compiler - - encode(s, cast(dchar)'\u2260'); - assert(s.length == 10); - assert(s == "abcda\xC2\xA9\xE2\x89\xA0"); -} - -/********************************************************/ - -void encode(inout wchar[] s, dchar c) - in - { - assert(isValidDchar(c)); - } - body - { - wchar[] r = s; - - if (c <= 0xFFFF) - { - r ~= cast(wchar) c; - } - else - { - wchar[2] buf; - - buf[0] = cast(wchar) ((((c - 0x10000) >> 10) & 0x3FF) + 0xD800); - buf[1] = cast(wchar) (((c - 0x10000) & 0x3FF) + 0xDC00); - r ~= buf; - } - s = r; - } - -void encode(inout dchar[] s, dchar c) - in - { - assert(isValidDchar(c)); - } - body - { - s ~= c; - } - -/* =================== Validation ======================= */ - -void validate(char[] s) -{ - size_t len = s.length; - size_t i; - - for (i = 0; i < len; ) - { - decode(s, i); - } -} - -void validate(wchar[] s) -{ - size_t len = s.length; - size_t i; - - for (i = 0; i < len; ) - { - decode(s, i); - } -} - -void validate(dchar[] s) -{ - size_t len = s.length; - size_t i; - - for (i = 0; i < len; ) - { - decode(s, i); - } -} - -/* =================== Conversion to UTF8 ======================= */ - -char[] toUTF8(char[4] buf, dchar c) - in - { - assert(isValidDchar(c)); - } - body - { - if (c <= 0x7F) - { - buf[0] = cast(char) c; - return buf[0 .. 1]; - } - else if (c <= 0x7FF) - { - buf[0] = cast(char)(0xC0 | (c >> 6)); - buf[1] = cast(char)(0x80 | (c & 0x3F)); - return buf[0 .. 2]; - } - else if (c <= 0xFFFF) - { - buf[0] = cast(char)(0xE0 | (c >> 12)); - buf[1] = cast(char)(0x80 | ((c >> 6) & 0x3F)); - buf[2] = cast(char)(0x80 | (c & 0x3F)); - return buf[0 .. 3]; - } - else if (c <= 0x10FFFF) - { - buf[0] = cast(char)(0xF0 | (c >> 18)); - buf[1] = cast(char)(0x80 | ((c >> 12) & 0x3F)); - buf[2] = cast(char)(0x80 | ((c >> 6) & 0x3F)); - buf[3] = cast(char)(0x80 | (c & 0x3F)); - return buf[0 .. 4]; - } - assert(0); - } - -char[] toUTF8(char[] s) - in - { - validate(s); - } - body - { - return s; - } - -char[] toUTF8(wchar[] s) -{ - char[] r; - size_t i; - size_t slen = s.length; - - r.length = slen; - - for (i = 0; i < slen; i++) - { wchar c = s[i]; - - if (c <= 0x7F) - r[i] = cast(char)c; // fast path for ascii - else - { - r.length = i; - foreach (dchar c; s[i .. slen]) - { - encode(r, c); - } - break; - } - } - return r; -} - -char[] toUTF8(dchar[] s) -{ - char[] r; - size_t i; - size_t slen = s.length; - - r.length = slen; - - for (i = 0; i < slen; i++) - { dchar c = s[i]; - - if (c <= 0x7F) - r[i] = cast(char)c; // fast path for ascii - else - { - r.length = i; - foreach (dchar d; s[i .. slen]) - { - encode(r, d); - } - break; - } - } - return r; -} - -/* =================== Conversion to UTF16 ======================= */ - -wchar[] toUTF16(wchar[2] buf, dchar c) - in - { - assert(isValidDchar(c)); - } - body - { - if (c <= 0xFFFF) - { - buf[0] = cast(wchar) c; - return buf[0 .. 1]; - } - else - { - buf[0] = cast(wchar) ((((c - 0x10000) >> 10) & 0x3FF) + 0xD800); - buf[1] = cast(wchar) (((c - 0x10000) & 0x3FF) + 0xDC00); - return buf[0 .. 2]; - } - } - -wchar[] toUTF16(char[] s) -{ - wchar[] r; - size_t slen = s.length; - - r.length = slen; - r.length = 0; - for (size_t i = 0; i < slen; ) - { - dchar c = s[i]; - if (c <= 0x7F) - { - i++; - r ~= cast(wchar)c; - } - else - { - c = decode(s, i); - encode(r, c); - } - } - return r; -} - -wchar* toUTF16z(char[] s) -{ - wchar[] r; - size_t slen = s.length; - - r.length = slen + 1; - r.length = 0; - for (size_t i = 0; i < slen; ) - { - dchar c = s[i]; - if (c <= 0x7F) - { - i++; - r ~= cast(wchar)c; - } - else - { - c = decode(s, i); - encode(r, c); - } - } - r ~= "\000"; - return r.ptr; -} - -wchar[] toUTF16(wchar[] s) - in - { - validate(s); - } - body - { - return s; - } - -wchar[] toUTF16(dchar[] s) -{ - wchar[] r; - size_t slen = s.length; - - r.length = slen; - r.length = 0; - for (size_t i = 0; i < slen; i++) - { - encode(r, s[i]); - } - return r; -} - -/* =================== Conversion to UTF32 ======================= */ - -dchar[] toUTF32(char[] s) -{ - dchar[] r; - size_t slen = s.length; - size_t j = 0; - - r.length = slen; // r[] will never be longer than s[] - for (size_t i = 0; i < slen; ) - { - dchar c = s[i]; - if (c >= 0x80) - c = decode(s, i); - else - i++; // c is ascii, no need for decode - r[j++] = c; - } - return r[0 .. j]; -} - -dchar[] toUTF32(wchar[] s) -{ - dchar[] r; - size_t slen = s.length; - size_t j = 0; - - r.length = slen; // r[] will never be longer than s[] - for (size_t i = 0; i < slen; ) - { - dchar c = s[i]; - if (c >= 0x80) - c = decode(s, i); - else - i++; // c is ascii, no need for decode - r[j++] = c; - } - return r[0 .. j]; -} - -dchar[] toUTF32(dchar[] s) - in - { - validate(s); - } - body - { - return s; - } - -/* ================================ tests ================================== */ - -unittest -{ - debug(utf) printf("utf.toUTF.unittest\n"); - - char[] c; - wchar[] w; - dchar[] d; - - c = "hello"; - w = toUTF16(c); - assert(w == "hello"); - d = toUTF32(c); - assert(d == "hello"); - - c = toUTF8(w); - assert(c == "hello"); - d = toUTF32(w); - assert(d == "hello"); - - c = toUTF8(d); - assert(c == "hello"); - w = toUTF16(d); - assert(w == "hello"); - - - c = "hel\u1234o"; - w = toUTF16(c); - assert(w == "hel\u1234o"); - d = toUTF32(c); - assert(d == "hel\u1234o"); - - c = toUTF8(w); - assert(c == "hel\u1234o"); - d = toUTF32(w); - assert(d == "hel\u1234o"); - - c = toUTF8(d); - assert(c == "hel\u1234o"); - w = toUTF16(d); - assert(w == "hel\u1234o"); - - - c = "he\U0010AAAAllo"; - w = toUTF16(c); - //foreach (wchar c; w) printf("c = x%x\n", c); - //foreach (wchar c; cast(wchar[])"he\U0010AAAAllo") printf("c = x%x\n", c); - assert(w == "he\U0010AAAAllo"); - d = toUTF32(c); - assert(d == "he\U0010AAAAllo"); - - c = toUTF8(w); - assert(c == "he\U0010AAAAllo"); - d = toUTF32(w); - assert(d == "he\U0010AAAAllo"); - - c = toUTF8(d); - assert(c == "he\U0010AAAAllo"); - w = toUTF16(d); - assert(w == "he\U0010AAAAllo"); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/gc.d --- a/tango/lib/gc/basic/gc.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/** - * This module contains the garbage collector front-end. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, Sean Kelly - */ - -private import gcx; -private import tango.stdc.stdlib; - -version=GCCLASS; - -version (GCCLASS) - alias GC gc_t; -else - alias GC* gc_t; - -gc_t _gc; - -extern (C) void thread_init(); - -extern (C) void gc_init() -{ - version (GCCLASS) - { void* p; - ClassInfo ci = GC.classinfo; - - p = tango.stdc.stdlib.malloc(ci.init.length); - (cast(byte*)p)[0 .. ci.init.length] = ci.init[]; - _gc = cast(GC)p; - } - else - { - _gc = cast(GC*) tango.stdc.stdlib.calloc(1, GC.sizeof); - } - _gc.initialize(); - // NOTE: The GC must initialize the thread library - // before its first collection. - thread_init(); -} - -extern (C) void gc_term() -{ - // NOTE: There may be daemons threads still running when this routine is - // called. If so, cleaning memory out from under then is a good - // way to make them crash horribly. This probably doesn't matter - // much since the app is supposed to be shutting down anyway, but - // I'm disabling cleanup for now until I can think about it some - // more. - // - // NOTE: Due to popular demand, this has been re-enabled. It still has - // the problems mentioned above though, so I guess we'll see. - - _gc.fullCollectNoStack(); // not really a 'collect all' -- still scans - // static data area, roots, and ranges. - _gc.Dtor(); -} - -extern (C) void gc_enable() -{ - _gc.enable(); -} - -extern (C) void gc_disable() -{ - _gc.disable(); -} - -extern (C) void gc_collect() -{ - _gc.fullCollect(); -} - -extern (C) uint gc_getAttr( void* p ) -{ - return _gc.getAttr( p ); -} - -extern (C) uint gc_setAttr( void* p, uint a ) -{ - return _gc.setAttr( p, a ); -} - -extern (C) uint gc_clrAttr( void* p, uint a ) -{ - return _gc.clrAttr( p, a ); -} - -extern (C) void* gc_malloc( size_t sz, uint ba = 0 ) -{ - return _gc.malloc( sz, ba ); -} - -extern (C) void* gc_calloc( size_t sz, uint ba = 0 ) -{ - return _gc.calloc( sz, ba ); -} - -extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0 ) -{ - return _gc.realloc( p, sz, ba ); -} - -extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ) -{ - return _gc.extend( p, mx, sz ); -} - -extern (C) void gc_free( void* p ) -{ - _gc.free( p ); -} - -extern (C) void* gc_addrOf( void* p ) -{ - return _gc.addrOf( p ); -} - -extern (C) size_t gc_sizeOf( void* p ) -{ - return _gc.sizeOf( p ); -} - -extern (C) BlkInfo gc_query( void* p ) -{ - return _gc.query( p ); -} - -extern (C) void gc_addRoot( void* p ) -{ - _gc.addRoot( p ); -} - -extern (C) void gc_addRange( void* p, size_t sz ) -{ - _gc.addRange( p, sz ); -} - -extern (C) void gc_removeRoot( void *p ) -{ - _gc.removeRoot( p ); -} - -extern (C) void gc_removeRange( void *p ) -{ - _gc.removeRange( p ); -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/gcalloc.d --- a/tango/lib/gc/basic/gcalloc.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,213 +0,0 @@ -/** - * This module contains allocation functions for the garbage collector. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, David Friedman, Sean Kelly - */ - - -version (Win32) -{ - private import tango.sys.win32.UserGdi; - - alias int pthread_t; - - pthread_t pthread_self() - { - return cast(pthread_t) GetCurrentThreadId(); - } - - //version = GC_Use_Alloc_Win32; -} -else version (Posix) -{ - private import tango.stdc.posix.sys.mman; - private import tango.stdc.stdlib; - - //version = GC_Use_Alloc_MMap; -} -else -{ - private import tango.stdc.stdlib; - - //version = GC_Use_Alloc_Malloc; -} - -/+ -static if(is(typeof(VirtualAlloc))) - version = GC_Use_Alloc_Win32; -else static if (is(typeof(mmap))) - version = GC_Use_Alloc_MMap; -else static if (is(typeof(valloc))) - version = GC_Use_Alloc_Valloc; -else static if (is(typeof(malloc))) - version = GC_Use_Alloc_Malloc; -else static assert(false, "No supported allocation methods available."); -+/ - -static if (is(typeof(VirtualAlloc))) // version (GC_Use_Alloc_Win32) -{ - /** - * Map memory. - */ - void *os_mem_map(size_t nbytes) - { - return VirtualAlloc(null, nbytes, MEM_RESERVE, PAGE_READWRITE); - } - - - /** - * Commit memory. - * Returns: - * 0 success - * !=0 failure - */ - int os_mem_commit(void *base, size_t offset, size_t nbytes) - { void *p; - - p = VirtualAlloc(base + offset, nbytes, MEM_COMMIT, PAGE_READWRITE); - return cast(int)(p == null); - } - - - /** - * Decommit memory. - * Returns: - * 0 success - * !=0 failure - */ - int os_mem_decommit(void *base, size_t offset, size_t nbytes) - { - return cast(int)(VirtualFree(base + offset, nbytes, MEM_DECOMMIT) == 0); - } - - - /** - * Unmap memory allocated with os_mem_map(). - * Memory must have already been decommitted. - * Returns: - * 0 success - * !=0 failure - */ - int os_mem_unmap(void *base, size_t nbytes) - { - return cast(int)(VirtualFree(base, 0, MEM_RELEASE) == 0); - } -} -else static if (is(typeof(mmap))) // else version (GC_Use_Alloc_MMap) -{ - void *os_mem_map(size_t nbytes) - { void *p; - - p = mmap(null, nbytes, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANON, -1, 0); - return (p == MAP_FAILED) ? null : p; - } - - - int os_mem_commit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_decommit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_unmap(void *base, size_t nbytes) - { - return munmap(base, nbytes); - } -} -else static if (is(typeof(valloc))) // else version (GC_Use_Alloc_Valloc) -{ - void *os_mem_map(size_t nbytes) - { - return valloc(nbytes); - } - - - int os_mem_commit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_decommit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_unmap(void *base, size_t nbytes) - { - free(base); - return 0; - } -} -else static if (is(typeof(malloc))) // else version (GC_Use_Alloc_Malloc) -{ - // NOTE: This assumes malloc granularity is at least (void*).sizeof. If - // (req_size + PAGESIZE) is allocated, and the pointer is rounded up - // to PAGESIZE alignment, there will be space for a void* at the end - // after PAGESIZE bytes used by the GC. - - - private import gcx; // for PAGESIZE - - - const size_t PAGE_MASK = PAGESIZE - 1; - - - void *os_mem_map(size_t nbytes) - { byte *p, q; - p = cast(byte *) malloc(nbytes + PAGESIZE); - q = p + ((PAGESIZE - ((cast(size_t) p & PAGE_MASK))) & PAGE_MASK); - * cast(void**)(q + nbytes) = p; - return q; - } - - - int os_mem_commit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_decommit(void *base, size_t offset, size_t nbytes) - { - return 0; - } - - - int os_mem_unmap(void *base, size_t nbytes) - { - free( *cast(void**)( cast(byte*) base + nbytes ) ); - return 0; - } -} -else -{ - static assert(false, "No supported allocation methods available."); -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/gcbits.d --- a/tango/lib/gc/basic/gcbits.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/** - * This module contains a specialized bitset implementation. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, David Friedman, Sean Kelly - */ - - -private import tango.core.BitManip; -private import tango.stdc.string; -private import tango.stdc.stdlib; -private extern (C) void onOutOfMemoryError(); - - -version (DigitalMars) -{ - version = bitops; -} -else version (GNU) -{ - // use the unoptimized version -} -else version(LLVMDC) -{ - // ditto -} -else version (D_InlineAsm_X86) -{ - version = Asm86; -} - -struct GCBits -{ - const int BITS_PER_WORD = 32; - const int BITS_SHIFT = 5; - const int BITS_MASK = 31; - - uint *data = null; - uint nwords = 0; // allocated words in data[] excluding sentinals - uint nbits = 0; // number of bits in data[] excluding sentinals - - void Dtor() - { - if (data) - { - free(data); - data = null; - } - } - - invariant - { - if (data) - { - assert(nwords * data[0].sizeof * 8 >= nbits); - } - } - - void alloc(uint nbits) - { - this.nbits = nbits; - nwords = (nbits + (BITS_PER_WORD - 1)) >> BITS_SHIFT; - data = cast(uint *)calloc(nwords + 2, uint.sizeof); - if (!data) - onOutOfMemoryError(); - } - - uint test(uint i) - in - { - assert(i < nbits); - } - body - { - //return (cast(bit *)(data + 1))[i]; - return data[1 + (i >> BITS_SHIFT)] & (1 << (i & BITS_MASK)); - } - - void set(uint i) - in - { - assert(i < nbits); - } - body - { - //(cast(bit *)(data + 1))[i] = 1; - data[1 + (i >> BITS_SHIFT)] |= (1 << (i & BITS_MASK)); - } - - void clear(uint i) - in - { - assert(i < nbits); - } - body - { - //(cast(bit *)(data + 1))[i] = 0; - data[1 + (i >> BITS_SHIFT)] &= ~(1 << (i & BITS_MASK)); - } - - uint testClear(uint i) - { - version (bitops) - { - return std.intrinsic.btr(data + 1, i); - } - else version (Asm86) - { - asm - { - naked ; - mov EAX,data[EAX] ; - mov ECX,i-4[ESP] ; - btr 4[EAX],ECX ; - sbb EAX,EAX ; - ret 4 ; - } - } - else - { uint result; - - //result = (cast(bit *)(data + 1))[i]; - //(cast(bit *)(data + 1))[i] = 0; - - uint *p = &data[1 + (i >> BITS_SHIFT)]; - uint mask = (1 << (i & BITS_MASK)); - result = *p & mask; - *p &= ~mask; - return result; - } - } - - void zero() - { - memset(data + 1, 0, nwords * uint.sizeof); - } - - void copy(GCBits *f) - in - { - assert(nwords == f.nwords); - } - body - { - memcpy(data + 1, f.data + 1, nwords * uint.sizeof); - } - - uint *base() - in - { - assert(data); - } - body - { - return data + 1; - } -} - -unittest -{ - GCBits b; - - b.alloc(786); - assert(b.test(123) == 0); - assert(b.testClear(123) == 0); - b.set(123); - assert(b.test(123) != 0); - assert(b.testClear(123) != 0); - assert(b.test(123) == 0); - - b.set(785); - b.set(0); - assert(b.test(785) != 0); - assert(b.test(0) != 0); - b.zero(); - assert(b.test(785) == 0); - assert(b.test(0) == 0); - - GCBits b2; - b2.alloc(786); - b2.set(38); - b.copy(&b2); - assert(b.test(38) != 0); - b2.Dtor(); - - b.Dtor(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/gcstats.d --- a/tango/lib/gc/basic/gcstats.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -/** - * This module contains garbage collector statistics functionality. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, Sean Kelly - */ - - -/** - * - */ -struct GCStats -{ - size_t poolsize; // total size of pool - size_t usedsize; // bytes allocated - size_t freeblocks; // number of blocks marked FREE - size_t freelistsize; // total of memory on free lists - size_t pageblocks; // number of blocks marked PAGE -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/gcx.d --- a/tango/lib/gc/basic/gcx.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2898 +0,0 @@ -/** - * This module contains the garbage collector implementation. - * - * Copyright: Copyright (C) 2001-2007 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, in both source and binary form, subject to the following - * restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - * Authors: Walter Bright, David Friedman, Sean Kelly - */ - -// D Programming Language Garbage Collector implementation - -/************** Debugging ***************************/ - -//debug = PRINTF; // turn on printf's -//debug = COLLECT_PRINTF; // turn on printf's -//debug = THREADINVARIANT; // check thread integrity -//debug = LOGGING; // log allocations / frees -//debug = MEMSTOMP; // stomp on memory -//debug = SENTINEL; // add underrun/overrrun protection -//debug = PTRCHECK; // more pointer checking -//debug = PTRCHECK2; // thorough but slow pointer checking - -/*************** Configuration *********************/ - -version = STACKGROWSDOWN; // growing the stack means subtracting from the stack pointer - // (use for Intel X86 CPUs) - // else growing the stack means adding to the stack pointer -version = MULTI_THREADED; // produce multithreaded version - -/***************************************************/ - -private import gcbits; -private import gcstats; -private import gcalloc; - -private import cstdlib = tango.stdc.stdlib : calloc, free, malloc, realloc; -private import cstring = tango.stdc.string : memcpy, memmove, memset; - -private import tango.stdc.stdio; -version(Posix) -{ - private import tango.stdc.posix.pthread; -} - -version (GNU) -{ - // BUG: The following import will likely not work, since the gcc - // subdirectory is elsewhere. Instead, perhaps the functions - // could be declared directly or some other resolution could - // be found. - private import gcc.builtins; // for __builtin_unwind_init -} - - -private -{ - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, - NO_SCAN = 0b0000_0010, - NO_MOVE = 0b0000_0100, - ALL_BITS = 0b1111_1111 - } - - struct BlkInfo - { - void* base; - size_t size; - uint attr; - } - - extern (C) void* rt_stackBottom(); - extern (C) void* rt_stackTop(); - - extern (C) void rt_finalize( void* p, bool det = true ); - - alias void delegate( void*, void* ) scanFn; - - extern (C) void rt_scanStaticData( scanFn scan ); - - version (MULTI_THREADED) - { - extern (C) bool thread_needLock(); - extern (C) void thread_suspendAll(); - extern (C) void thread_resumeAll(); - - extern (C) void thread_scanAll( scanFn fn, void* curStackTop = null ); - } - - extern (C) void onOutOfMemoryError(); -} - - -alias GC gc_t; - - -/* ======================= Leak Detector =========================== */ - - -debug (LOGGING) -{ - struct Log - { - void* p; - size_t size; - uint line; - char* file; - void* parent; - - void print() - { - printf(" p = %x, size = %d, parent = %x ", p, size, parent); - if (file) - { - printf("%s(%u)", file, line); - } - printf("\n"); - } - } - - - struct LogArray - { - size_t dim; - size_t allocdim; - Log *data; - - void Dtor() - { - if (data) - cstdlib.free(data); - data = null; - } - - void reserve(size_t nentries) - { - assert(dim <= allocdim); - if (allocdim - dim < nentries) - { - allocdim = (dim + nentries) * 2; - assert(dim + nentries <= allocdim); - if (!data) - { - data = cast(Log *)cstdlib.malloc(allocdim * Log.sizeof); - if (!data && allocdim) - onOutOfMemoryError(); - } - else - { Log *newdata; - - newdata = cast(Log *)cstdlib.malloc(allocdim * Log.sizeof); - if (!newdata && allocdim) - onOutOfMemoryError(); - cstring.memcpy(newdata, data, dim * Log.sizeof); - cstdlib.free(data); - data = newdata; - } - } - } - - - void push(Log log) - { - reserve(1); - data[dim++] = log; - } - - void remove(size_t i) - { - cstring.memmove(data + i, data + i + 1, (dim - i) * Log.sizeof); - dim--; - } - - - size_t find(void *p) - { - for (size_t i = 0; i < dim; i++) - { - if (data[i].p == p) - return i; - } - return ~0u; // not found - } - - - void copy(LogArray *from) - { - reserve(from.dim - dim); - assert(from.dim <= allocdim); - cstring.memcpy(data, from.data, from.dim * Log.sizeof); - dim = from.dim; - } - } -} - - -/* ============================ GC =============================== */ - - -class GCLock { } // just a dummy so we can get a global lock - - -const uint GCVERSION = 1; // increment every time we change interface - // to GC. - -class GC -{ - // For passing to debug code - static size_t line; - static char* file; - - uint gcversion = GCVERSION; - - Gcx *gcx; // implementation - static ClassInfo gcLock; // global lock - - - void initialize() - { - gcLock = GCLock.classinfo; - gcx = cast(Gcx *)cstdlib.calloc(1, Gcx.sizeof); - if (!gcx) - onOutOfMemoryError(); - gcx.initialize(); - setStackBottom(rt_stackBottom()); - } - - - void Dtor() - { - version (linux) - { - //debug(PRINTF) printf("Thread %x ", pthread_self()); - //debug(PRINTF) printf("GC.Dtor()\n"); - } - - if (gcx) - { - gcx.Dtor(); - cstdlib.free(gcx); - gcx = null; - } - } - - - invariant - { - if (gcx) - { - gcx.thread_Invariant(); - } - } - - - /** - * - */ - void enable() - { - if (!thread_needLock()) - { - assert(gcx.disabled > 0); - gcx.disabled--; - } - else synchronized (gcLock) - { - assert(gcx.disabled > 0); - gcx.disabled--; - } - } - - - /** - * - */ - void disable() - { - if (!thread_needLock()) - { - gcx.disabled++; - } - else synchronized (gcLock) - { - gcx.disabled++; - } - } - - - /** - * - */ - uint getAttr(void* p) - { - if (!p) - { - return 0; - } - - uint go() - { - Pool* pool = gcx.findPool(p); - uint oldb = 0; - - if (pool) - { - uint biti = (p - pool.baseAddr) / 16; - - oldb = gcx.getBits(pool, biti); - } - return oldb; - } - - if (!thread_needLock()) - { - return go(); - } - else synchronized (gcLock) - { - return go(); - } - } - - - /** - * - */ - uint setAttr(void* p, uint mask) - { - if (!p) - { - return 0; - } - - uint go() - { - Pool* pool = gcx.findPool(p); - uint oldb = 0; - - if (pool) - { - uint biti = (p - pool.baseAddr) / 16; - - oldb = gcx.getBits(pool, biti); - gcx.setBits(pool, biti, mask); - } - return oldb; - } - - if (!thread_needLock()) - { - return go(); - } - else synchronized (gcLock) - { - return go(); - } - } - - - /** - * - */ - uint clrAttr(void* p, uint mask) - { - if (!p) - { - return 0; - } - - uint go() - { - Pool* pool = gcx.findPool(p); - uint oldb = 0; - - if (pool) - { - uint biti = (p - pool.baseAddr) / 16; - - oldb = gcx.getBits(pool, biti); - gcx.clrBits(pool, biti, mask); - } - return oldb; - } - - if (!thread_needLock()) - { - return go(); - } - else synchronized (gcLock) - { - return go(); - } - } - - - /** - * - */ - void *malloc(size_t size, uint bits = 0) - { - if (!size) - { - return null; - } - - if (!thread_needLock()) - { - return mallocNoSync(size, bits); - } - else synchronized (gcLock) - { - return mallocNoSync(size, bits); - } - } - - - // - // - // - private void *mallocNoSync(size_t size, uint bits = 0) - { - assert(size != 0); - - void *p = null; - Bins bin; - - //debug(PRINTF) printf("GC::malloc(size = %d, gcx = %p)\n", size, gcx); - assert(gcx); - //debug(PRINTF) printf("gcx.self = %x, pthread_self() = %x\n", gcx.self, pthread_self()); - - size += SENTINEL_EXTRA; - - // Compute size bin - // Cache previous binsize lookup - Dave Fladebo. - static size_t lastsize = -1; - static Bins lastbin; - if (size == lastsize) - bin = lastbin; - else - { - bin = gcx.findBin(size); - lastsize = size; - lastbin = bin; - } - - if (bin < B_PAGE) - { - p = gcx.bucket[bin]; - if (p == null) - { - if (!gcx.allocPage(bin) && !gcx.disabled) // try to find a new page - { - if (!thread_needLock()) - { - /* Then we haven't locked it yet. Be sure - * and lock for a collection, since a finalizer - * may start a new thread. - */ - synchronized (gcLock) - { - gcx.fullcollectshell(); - } - } - else if (!gcx.fullcollectshell()) // collect to find a new page - { - //gcx.newPool(1); - } - } - if (!gcx.bucket[bin] && !gcx.allocPage(bin)) - { int result; - - gcx.newPool(1); // allocate new pool to find a new page - result = gcx.allocPage(bin); - if (!result) - onOutOfMemoryError(); - } - p = gcx.bucket[bin]; - } - - // Return next item from free list - gcx.bucket[bin] = (cast(List *)p).next; - if( !(bits & BlkAttr.NO_SCAN) ) - cstring.memset(p + size, 0, binsize[bin] - size); - //debug(PRINTF) printf("\tmalloc => %x\n", p); - debug (MEMSTOMP) cstring.memset(p, 0xF0, size); - } - else - { - p = gcx.bigAlloc(size); - if (!p) - onOutOfMemoryError(); - } - size -= SENTINEL_EXTRA; - p = sentinel_add(p); - sentinel_init(p, size); - gcx.log_malloc(p, size); - - if (bits) - { - Pool *pool = gcx.findPool(p); - assert(pool); - - gcx.setBits(pool, (p - pool.baseAddr) / 16, bits); - } - return p; - } - - - /** - * - */ - void *calloc(size_t size, uint bits = 0) - { - if (!size) - { - return null; - } - - if (!thread_needLock()) - { - return callocNoSync(size, bits); - } - else synchronized (gcLock) - { - return callocNoSync(size, bits); - } - } - - - // - // - // - private void *callocNoSync(size_t size, uint bits = 0) - { - assert(size != 0); - - //debug(PRINTF) printf("calloc: %x len %d\n", p, len); - void *p = mallocNoSync(size, bits); - cstring.memset(p, 0, size); - return p; - } - - - /** - * - */ - void *realloc(void *p, size_t size, uint bits = 0) - { - if (!thread_needLock()) - { - return reallocNoSync(p, size, bits); - } - else synchronized (gcLock) - { - return reallocNoSync(p, size, bits); - } - } - - - // - // - // - private void *reallocNoSync(void *p, size_t size, uint bits = 0) - { - if (!size) - { if (p) - { freeNoSync(p); - p = null; - } - } - else if (!p) - { - p = mallocNoSync(size, bits); - } - else - { void *p2; - size_t psize; - - //debug(PRINTF) printf("GC::realloc(p = %x, size = %u)\n", p, size); - version (SENTINEL) - { - sentinel_Invariant(p); - psize = *sentinel_size(p); - if (psize != size) - { - if (psize) - { - Pool *pool = gcx.findPool(p); - - if (pool) - { - uint biti = cast(uint)(p - pool.baseAddr) / 16; - - if (bits) - { - gcx.clrBits(pool, biti, BlkAttr.ALL_BITS); - gcx.setBits(pool, biti, bits); - } - else - { - bits = gcx.getBits(pool, biti); - } - } - } - p2 = mallocNoSync(size, bits); - if (psize < size) - size = psize; - //debug(PRINTF) printf("\tcopying %d bytes\n",size); - cstring.memcpy(p2, p, size); - p = p2; - } - } - else - { - psize = gcx.findSize(p); // find allocated size - if (psize >= PAGESIZE && size >= PAGESIZE) - { - auto psz = psize / PAGESIZE; - auto newsz = (size + PAGESIZE - 1) / PAGESIZE; - if (newsz == psz) - return p; - - auto pool = gcx.findPool(p); - auto pagenum = (p - pool.baseAddr) / PAGESIZE; - - if (newsz < psz) - { // Shrink in place - synchronized (gcLock) - { - debug (MEMSTOMP) cstring.memset(p + size, 0xF2, psize - size); - pool.freePages(pagenum + newsz, psz - newsz); - } - return p; - } - else if (pagenum + newsz <= pool.npages) - { - // Attempt to expand in place - synchronized (gcLock) - { - for (size_t i = pagenum + psz; 1;) - { - if (i == pagenum + newsz) - { - debug (MEMSTOMP) cstring.memset(p + psize, 0xF0, size - psize); - cstring.memset(&pool.pagetable[pagenum + psz], B_PAGEPLUS, newsz - psz); - return p; - } - if (i == pool.ncommitted) - { - auto u = pool.extendPages(pagenum + newsz - pool.ncommitted); - if (u == ~0u) - break; - i = pagenum + newsz; - continue; - } - if (pool.pagetable[i] != B_FREE) - break; - i++; - } - } - } - } - if (psize < size || // if new size is bigger - psize > size * 2) // or less than half - { - if (psize) - { - Pool *pool = gcx.findPool(p); - - if (pool) - { - uint biti = cast(uint)(p - pool.baseAddr) / 16; - - if (bits) - { - gcx.clrBits(pool, biti, BlkAttr.ALL_BITS); - gcx.setBits(pool, biti, bits); - } - else - { - bits = gcx.getBits(pool, biti); - } - } - } - p2 = mallocNoSync(size, bits); - if (psize < size) - size = psize; - //debug(PRINTF) printf("\tcopying %d bytes\n",size); - cstring.memcpy(p2, p, size); - p = p2; - } - } - } - return p; - } - - - /** - * Attempt to in-place enlarge the memory block pointed to by p by at least - * minbytes beyond its current capacity, up to a maximum of maxsize. This - * does not attempt to move the memory block (like realloc() does). - * - * Returns: - * 0 if could not extend p, - * total size of entire memory block if successful. - */ - size_t extend(void* p, size_t minsize, size_t maxsize) - { - if (!thread_needLock()) - { - return extendNoSync(p, minsize, maxsize); - } - else synchronized (gcLock) - { - return extendNoSync(p, minsize, maxsize); - } - } - - - // - // - // - private size_t extendNoSync(void* p, size_t minsize, size_t maxsize) - in - { - assert( minsize <= maxsize ); - } - body - { - //debug(PRINTF) printf("GC::extend(p = %x, minsize = %u, maxsize = %u)\n", p, minsize, maxsize); - version (SENTINEL) - { - return 0; - } - auto psize = gcx.findSize(p); // find allocated size - if (psize < PAGESIZE) - return 0; // cannot extend buckets - - auto psz = psize / PAGESIZE; - auto minsz = (minsize + PAGESIZE - 1) / PAGESIZE; - auto maxsz = (maxsize + PAGESIZE - 1) / PAGESIZE; - - auto pool = gcx.findPool(p); - auto pagenum = (p - pool.baseAddr) / PAGESIZE; - - size_t sz; - for (sz = 0; sz < maxsz; sz++) - { - auto i = pagenum + psz + sz; - if (i == pool.ncommitted) - break; - if (pool.pagetable[i] != B_FREE) - { if (sz < minsz) - return 0; - break; - } - } - if (sz >= minsz) - { - } - else if (pagenum + psz + sz == pool.ncommitted) - { - auto u = pool.extendPages(minsz - sz); - if (u == ~0u) - return 0; - sz = minsz; - } - else - return 0; - debug (MEMSTOMP) cstring.memset(p + psize, 0xF0, (psz + sz) * PAGESIZE - psize); - cstring.memset(pool.pagetable + pagenum + psz, B_PAGEPLUS, sz); - gcx.p_cache = null; - gcx.size_cache = 0; - return (psz + sz) * PAGESIZE; - } - - - /** - * - */ - void free(void *p) - { - if (!p) - { - return; - } - - if (!thread_needLock()) - { - return freeNoSync(p); - } - else synchronized (gcLock) - { - return freeNoSync(p); - } - } - - - // - // - // - private void freeNoSync(void *p) - { - assert (p); - - Pool *pool; - uint pagenum; - Bins bin; - uint biti; - - // Find which page it is in - pool = gcx.findPool(p); - if (!pool) // if not one of ours - return; // ignore - sentinel_Invariant(p); - p = sentinel_sub(p); - pagenum = (p - pool.baseAddr) / PAGESIZE; - biti = cast(uint)(p - pool.baseAddr) / 16; - gcx.clrBits(pool, biti, BlkAttr.ALL_BITS); - - bin = cast(Bins)pool.pagetable[pagenum]; - if (bin == B_PAGE) // if large alloc - { int npages; - uint n; - - // Free pages - npages = 1; - n = pagenum; - while (++n < pool.ncommitted && pool.pagetable[n] == B_PAGEPLUS) - npages++; - debug (MEMSTOMP) cstring.memset(p, 0xF2, npages * PAGESIZE); - pool.freePages(pagenum, npages); - } - else - { // Add to free list - List *list = cast(List *)p; - - debug (MEMSTOMP) cstring.memset(p, 0xF2, binsize[bin]); - - list.next = gcx.bucket[bin]; - gcx.bucket[bin] = list; - } - gcx.log_free(sentinel_add(p)); - } - - - /** - * Determine the base address of the block containing p. If p is not a gc - * allocated pointer, return null. - */ - void* addrOf(void *p) - { - if (!p) - { - return null; - } - - if (!thread_needLock()) - { - return addrOfNoSync(p); - } - else synchronized (gcLock) - { - return addrOfNoSync(p); - } - } - - - // - // - // - void* addrOfNoSync(void *p) - { - if (!p) - { - return null; - } - - return gcx.findBase(p); - } - - - /** - * Determine the allocated size of pointer p. If p is an interior pointer - * or not a gc allocated pointer, return 0. - */ - size_t sizeOf(void *p) - { - if (!p) - { - return 0; - } - - if (!thread_needLock()) - { - return sizeOfNoSync(p); - } - else synchronized (gcLock) - { - return sizeOfNoSync(p); - } - } - - - // - // - // - private size_t sizeOfNoSync(void *p) - { - assert (p); - - version (SENTINEL) - { - p = sentinel_sub(p); - size_t size = gcx.findSize(p); - - // Check for interior pointer - // This depends on: - // 1) size is a power of 2 for less than PAGESIZE values - // 2) base of memory pool is aligned on PAGESIZE boundary - if (cast(size_t)p & (size - 1) & (PAGESIZE - 1)) - size = 0; - return size ? size - SENTINAL_EXTRA : 0; - } - else - { - if (p == gcx.p_cache) - return gcx.size_cache; - - size_t size = gcx.findSize(p); - - // Check for interior pointer - // This depends on: - // 1) size is a power of 2 for less than PAGESIZE values - // 2) base of memory pool is aligned on PAGESIZE boundary - if (cast(size_t)p & (size - 1) & (PAGESIZE - 1)) - size = 0; - else - { - gcx.p_cache = p; - gcx.size_cache = size; - } - - return size; - } - } - - - /** - * Determine the base address of the block containing p. If p is not a gc - * allocated pointer, return null. - */ - BlkInfo query(void *p) - { - if (!p) - { - BlkInfo i; - return i; - } - - if (!thread_needLock()) - { - return queryNoSync(p); - } - else synchronized (gcLock) - { - return queryNoSync(p); - } - } - - - // - // - // - BlkInfo queryNoSync(void *p) - { - assert(p); - - return gcx.getInfo(p); - } - - - /** - * Verify that pointer p: - * 1) belongs to this memory pool - * 2) points to the start of an allocated piece of memory - * 3) is not on a free list - */ - void check(void *p) - { - if (!p) - { - return; - } - - if (!thread_needLock()) - { - checkNoSync(p); - } - else synchronized (gcLock) - { - checkNoSync(p); - } - } - - - // - // - // - private void checkNoSync(void *p) - { - assert(p); - - sentinel_Invariant(p); - debug (PTRCHECK) - { - Pool* pool; - uint pagenum; - Bins bin; - size_t size; - - p = sentinel_sub(p); - pool = gcx.findPool(p); - assert(pool); - pagenum = (p - pool.baseAddr) / PAGESIZE; - bin = cast(Bins)pool.pagetable[pagenum]; - assert(bin <= B_PAGE); - size = binsize[bin]; - assert((cast(size_t)p & (size - 1)) == 0); - - debug (PTRCHECK2) - { - if (bin < B_PAGE) - { - // Check that p is not on a free list - List *list; - - for (list = gcx.bucket[bin]; list; list = list.next) - { - assert(cast(void *)list != p); - } - } - } - } - } - - - // - // - // - private void setStackBottom(void *p) - { - version (STACKGROWSDOWN) - { - //p = (void *)((uint *)p + 4); - if (p > gcx.stackBottom) - { - //debug(PRINTF) printf("setStackBottom(%x)\n", p); - gcx.stackBottom = p; - } - } - else - { - //p = (void *)((uint *)p - 4); - if (p < gcx.stackBottom) - { - //debug(PRINTF) printf("setStackBottom(%x)\n", p); - gcx.stackBottom = cast(char *)p; - } - } - } - - - /** - * add p to list of roots - */ - void addRoot(void *p) - { - if (!p) - { - return; - } - - if (!thread_needLock()) - { - gcx.addRoot(p); - } - else synchronized (gcLock) - { - gcx.addRoot(p); - } - } - - - /** - * remove p from list of roots - */ - void removeRoot(void *p) - { - if (!p) - { - return; - } - - if (!thread_needLock()) - { - gcx.removeRoot(p); - } - else synchronized (gcLock) - { - gcx.removeRoot(p); - } - } - - - /** - * add range to scan for roots - */ - void addRange(void *p, size_t sz) - { - if (!p || !sz) - { - return; - } - - //debug(PRINTF) printf("+GC.addRange(pbot = x%x, ptop = x%x)\n", pbot, ptop); - if (!thread_needLock()) - { - gcx.addRange(p, p + sz); - } - else synchronized (gcLock) - { - gcx.addRange(p, p + sz); - } - //debug(PRINTF) printf("-GC.addRange()\n"); - } - - - /** - * remove range - */ - void removeRange(void *p) - { - if (!p) - { - return; - } - - if (!thread_needLock()) - { - gcx.removeRange(p); - } - else synchronized (gcLock) - { - gcx.removeRange(p); - } - } - - - /** - * do full garbage collection - */ - void fullCollect() - { - debug(PRINTF) printf("GC.fullCollect()\n"); - - if (!thread_needLock()) - { - gcx.fullcollectshell(); - } - else synchronized (gcLock) - { - gcx.fullcollectshell(); - } - - version (none) - { - GCStats stats; - - getStats(stats); - debug(PRINTF) printf("poolsize = %x, usedsize = %x, freelistsize = %x\n", - stats.poolsize, stats.usedsize, stats.freelistsize); - } - - gcx.log_collect(); - } - - - /** - * do full garbage collection ignoring roots - */ - void fullCollectNoStack() - { - if (!thread_needLock()) - { - gcx.noStack++; - gcx.fullcollectshell(); - gcx.noStack--; - } - else synchronized (gcLock) - { - gcx.noStack++; - gcx.fullcollectshell(); - gcx.noStack--; - } - } - - - /** - * Retrieve statistics about garbage collection. - * Useful for debugging and tuning. - */ - void getStats(out GCStats stats) - { - if (!thread_needLock()) - { - getStatsNoSync(stats); - } - else synchronized (gcLock) - { - getStatsNoSync(stats); - } - } - - - // - // - // - private void getStatsNoSync(out GCStats stats) - { - size_t psize = 0; - size_t usize = 0; - size_t flsize = 0; - - size_t n; - size_t bsize = 0; - - //debug(PRINTF) printf("getStats()\n"); - cstring.memset(&stats, 0, GCStats.sizeof); - - for (n = 0; n < gcx.npools; n++) - { Pool *pool = gcx.pooltable[n]; - - psize += pool.ncommitted * PAGESIZE; - for (uint j = 0; j < pool.ncommitted; j++) - { - Bins bin = cast(Bins)pool.pagetable[j]; - if (bin == B_FREE) - stats.freeblocks++; - else if (bin == B_PAGE) - stats.pageblocks++; - else if (bin < B_PAGE) - bsize += PAGESIZE; - } - } - - for (n = 0; n < B_PAGE; n++) - { - //debug(PRINTF) printf("bin %d\n", n); - for (List *list = gcx.bucket[n]; list; list = list.next) - { - //debug(PRINTF) printf("\tlist %x\n", list); - flsize += binsize[n]; - } - } - - usize = bsize - flsize; - - stats.poolsize = psize; - stats.usedsize = bsize - flsize; - stats.freelistsize = flsize; - } -} - - -/* ============================ Gcx =============================== */ - -enum -{ PAGESIZE = 4096, - COMMITSIZE = (4096*16), - POOLSIZE = (4096*256), -} - - -enum -{ - B_16, - B_32, - B_64, - B_128, - B_256, - B_512, - B_1024, - B_2048, - B_PAGE, // start of large alloc - B_PAGEPLUS, // continuation of large alloc - B_FREE, // free page - B_UNCOMMITTED, // memory not committed for this page - B_MAX -} - - -alias ubyte Bins; - - -struct List -{ - List *next; -} - - -struct Range -{ - void *pbot; - void *ptop; -} - - -const uint binsize[B_MAX] = [ 16,32,64,128,256,512,1024,2048,4096 ]; -const uint notbinsize[B_MAX] = [ ~(16u-1),~(32u-1),~(64u-1),~(128u-1),~(256u-1), - ~(512u-1),~(1024u-1),~(2048u-1),~(4096u-1) ]; - -/* ============================ Gcx =============================== */ - - -struct Gcx -{ - debug (THREADINVARIANT) - { - pthread_t self; - void thread_Invariant() - { - if (self != pthread_self()) - printf("thread_Invariant(): gcx = %x, self = %x, pthread_self() = %x\n", this, self, pthread_self()); - assert(self == pthread_self()); - } - } - else - { - void thread_Invariant() { } - } - - void *p_cache; - size_t size_cache; - - size_t nroots; - size_t rootdim; - void **roots; - - size_t nranges; - size_t rangedim; - Range *ranges; - - uint noStack; // !=0 means don't scan stack - uint log; // turn on logging - uint anychanges; - void *stackBottom; - uint inited; - int disabled; // turn off collections if >0 - - byte *minAddr; // min(baseAddr) - byte *maxAddr; // max(topAddr) - - uint npools; - Pool **pooltable; - - List *bucket[B_MAX]; // free list for each size - - - void initialize() - { int dummy; - - (cast(byte *)this)[0 .. Gcx.sizeof] = 0; - stackBottom = cast(char *)&dummy; - log_init(); - debug (THREADINVARIANT) - self = pthread_self(); - //printf("gcx = %p, self = %x\n", this, self); - inited = 1; - } - - - void Dtor() - { - inited = 0; - - for (uint i = 0; i < npools; i++) - { Pool *pool = pooltable[i]; - - pool.Dtor(); - cstdlib.free(pool); - } - if (pooltable) - cstdlib.free(pooltable); - - if (roots) - cstdlib.free(roots); - - if (ranges) - cstdlib.free(ranges); - } - - - void Invariant() { } - - - invariant - { - if (inited) - { - //printf("Gcx.invariant(): this = %p\n", this); - uint i; - - // Assure we're called on the right thread - debug (THREADINVARIANT) assert(self == pthread_self()); - - for (i = 0; i < npools; i++) - { Pool *pool = pooltable[i]; - - pool.Invariant(); - if (i == 0) - { - assert(minAddr == pool.baseAddr); - } - if (i + 1 < npools) - { - assert(pool.opCmp(pooltable[i + 1]) < 0); - } - else if (i + 1 == npools) - { - assert(maxAddr == pool.topAddr); - } - } - - if (roots) - { - assert(rootdim != 0); - assert(nroots <= rootdim); - } - - if (ranges) - { - assert(rangedim != 0); - assert(nranges <= rangedim); - - for (i = 0; i < nranges; i++) - { - assert(ranges[i].pbot); - assert(ranges[i].ptop); - assert(ranges[i].pbot <= ranges[i].ptop); - } - } - - for (i = 0; i < B_PAGE; i++) - { - for (List *list = bucket[i]; list; list = list.next) - { - } - } - } - } - - - /** - * - */ - void addRoot(void *p) - { - if (nroots == rootdim) - { - size_t newdim = rootdim * 2 + 16; - void** newroots; - - newroots = cast(void **)cstdlib.malloc(newdim * newroots[0].sizeof); - if (!newroots) - onOutOfMemoryError(); - if (roots) - { cstring.memcpy(newroots, roots, nroots * newroots[0].sizeof); - cstdlib.free(roots); - } - roots = newroots; - rootdim = newdim; - } - roots[nroots] = p; - nroots++; - } - - - /** - * - */ - void removeRoot(void *p) - { - for (size_t i = nroots; i--;) - { - if (roots[i] == p) - { - nroots--; - cstring.memmove(roots + i, roots + i + 1, (nroots - i) * roots[0].sizeof); - return; - } - } - assert(0); - } - - - /** - * - */ - void addRange(void *pbot, void *ptop) - { - debug(PRINTF) printf("Thread %x ", pthread_self()); - debug(PRINTF) printf("%x.Gcx::addRange(%x, %x), nranges = %d\n", this, pbot, ptop, nranges); - if (nranges == rangedim) - { - size_t newdim = rangedim * 2 + 16; - Range *newranges; - - newranges = cast(Range *)cstdlib.malloc(newdim * newranges[0].sizeof); - if (!newranges) - onOutOfMemoryError(); - if (ranges) - { cstring.memcpy(newranges, ranges, nranges * newranges[0].sizeof); - cstdlib.free(ranges); - } - ranges = newranges; - rangedim = newdim; - } - ranges[nranges].pbot = pbot; - ranges[nranges].ptop = ptop; - nranges++; - } - - - /** - * - */ - void removeRange(void *pbot) - { - debug(PRINTF) printf("Thread %x ", pthread_self()); - debug(PRINTF) printf("%x.Gcx.removeRange(%x), nranges = %d\n", this, pbot, nranges); - for (size_t i = nranges; i--;) - { - if (ranges[i].pbot == pbot) - { - nranges--; - cstring.memmove(ranges + i, ranges + i + 1, (nranges - i) * ranges[0].sizeof); - return; - } - } - debug(PRINTF) printf("Wrong thread\n"); - - // This is a fatal error, but ignore it. - // The problem is that we can get a Close() call on a thread - // other than the one the range was allocated on. - //assert(zero); - } - - - /** - * Find Pool that pointer is in. - * Return null if not in a Pool. - * Assume pooltable[] is sorted. - */ - Pool *findPool(void *p) - { - if (p >= minAddr && p < maxAddr) - { - if (npools == 1) - { - return pooltable[0]; - } - - for (uint i = 0; i < npools; i++) - { Pool *pool; - - pool = pooltable[i]; - if (p < pool.topAddr) - { if (pool.baseAddr <= p) - return pool; - break; - } - } - } - return null; - } - - - /** - * Find base address of block containing pointer p. - * Returns null if not a gc'd pointer - */ - void* findBase(void *p) - { - Pool *pool; - - pool = findPool(p); - if (pool) - { - size_t offset = cast(size_t)(p - pool.baseAddr); - uint pn = offset / PAGESIZE; - Bins bin = cast(Bins)pool.pagetable[pn]; - - // Adjust bit to be at start of allocated memory block - if (bin <= B_PAGE) - { - return pool.baseAddr + (offset & notbinsize[bin]); - } - else if (bin == B_PAGEPLUS) - { - do - { --pn, offset -= PAGESIZE; - } while (cast(Bins)pool.pagetable[pn] == B_PAGEPLUS); - - return pool.baseAddr + (offset & (offset.max ^ (PAGESIZE-1))); - } - else - { - // we are in a B_FREE or B_UNCOMMITTED page - return null; - } - } - return null; - } - - - /** - * Find size of pointer p. - * Returns 0 if not a gc'd pointer - */ - size_t findSize(void *p) - { - Pool *pool; - size_t size = 0; - - pool = findPool(p); - if (pool) - { - uint pagenum; - Bins bin; - - pagenum = (cast(uint)(p - pool.baseAddr)) / PAGESIZE; - bin = cast(Bins)pool.pagetable[pagenum]; - size = binsize[bin]; - if (bin == B_PAGE) - { uint npages = pool.ncommitted; - ubyte* pt; - uint i; - - pt = &pool.pagetable[0]; - for (i = pagenum + 1; i < npages; i++) - { - if (pt[i] != B_PAGEPLUS) - break; - } - size = (i - pagenum) * PAGESIZE; - } - } - return size; - } - - - /** - * - */ - BlkInfo getInfo(void* p) - { - Pool *pool; - BlkInfo info; - - pool = findPool(p); - if (pool) - { - size_t offset = cast(size_t)(p - pool.baseAddr); - uint pn = offset / PAGESIZE; - Bins bin = cast(Bins)pool.pagetable[pn]; - - //////////////////////////////////////////////////////////////////// - // findAddr - //////////////////////////////////////////////////////////////////// - - if (bin <= B_PAGE) - { - info.base = pool.baseAddr + (offset & notbinsize[bin]); - } - else if (bin == B_PAGEPLUS) - { - do - { --pn, offset -= PAGESIZE; - } while (cast(Bins)pool.pagetable[pn] == B_PAGEPLUS); - - info.base = pool.baseAddr + (offset & (offset.max ^ (PAGESIZE-1))); - - // fix bin for use by size calc below - bin = cast(Bins)pool.pagetable[pn]; - } - - //////////////////////////////////////////////////////////////////// - // findSize - //////////////////////////////////////////////////////////////////// - - info.size = binsize[bin]; - if (bin == B_PAGE) - { uint npages = pool.ncommitted; - ubyte* pt; - uint i; - - pt = &pool.pagetable[0]; - for (i = pn + 1; i < npages; i++) - { - if (pt[i] != B_PAGEPLUS) - break; - } - info.size = (i - pn) * PAGESIZE; - } - - //////////////////////////////////////////////////////////////////// - // getBits - //////////////////////////////////////////////////////////////////// - - info.attr = getBits(pool, offset / 16); - } - return info; - } - - - /** - * Compute bin for size. - */ - static Bins findBin(size_t size) - { Bins bin; - - if (size <= 256) - { - if (size <= 64) - { - if (size <= 16) - bin = B_16; - else if (size <= 32) - bin = B_32; - else - bin = B_64; - } - else - { - if (size <= 128) - bin = B_128; - else - bin = B_256; - } - } - else - { - if (size <= 1024) - { - if (size <= 512) - bin = B_512; - else - bin = B_1024; - } - else - { - if (size <= 2048) - bin = B_2048; - else - bin = B_PAGE; - } - } - return bin; - } - - - /** - * Allocate a chunk of memory that is larger than a page. - * Return null if out of memory. - */ - void *bigAlloc(size_t size) - { - Pool *pool; - uint npages; - uint n; - uint pn; - uint freedpages; - void *p; - int state; - - npages = (size + PAGESIZE - 1) / PAGESIZE; - - for (state = 0; ; ) - { - // This code could use some refinement when repeatedly - // allocating very large arrays. - - for (n = 0; n < npools; n++) - { - pool = pooltable[n]; - pn = pool.allocPages(npages); - if (pn != ~0u) - goto L1; - } - - // Failed - switch (state) - { - case 0: - if (disabled) - { state = 1; - continue; - } - // Try collecting - freedpages = fullcollectshell(); - if (freedpages >= npools * ((POOLSIZE / PAGESIZE) / 4)) - { state = 1; - continue; - } - // Allocate new pool - pool = newPool(npages); - if (!pool) - { state = 2; - continue; - } - pn = pool.allocPages(npages); - assert(pn != ~0u); - goto L1; - case 1: - // Allocate new pool - pool = newPool(npages); - if (!pool) - goto Lnomemory; - pn = pool.allocPages(npages); - assert(pn != ~0u); - goto L1; - case 2: - goto Lnomemory; - default: - assert(false); - } - } - - L1: - pool.pagetable[pn] = B_PAGE; - if (npages > 1) - cstring.memset(&pool.pagetable[pn + 1], B_PAGEPLUS, npages - 1); - p = pool.baseAddr + pn * PAGESIZE; - cstring.memset(cast(char *)p + size, 0, npages * PAGESIZE - size); - debug (MEMSTOMP) cstring.memset(p, 0xF1, size); - //debug(PRINTF) printf("\tp = %x\n", p); - return p; - - Lnomemory: - return null; // let mallocNoSync handle the error - } - - - /** - * Allocate a new pool with at least npages in it. - * Sort it into pooltable[]. - * Return null if failed. - */ - Pool *newPool(uint npages) - { - Pool *pool; - Pool **newpooltable; - uint newnpools; - uint i; - - //debug(PRINTF) printf("************Gcx::newPool(npages = %d)****************\n", npages); - - // Round up to COMMITSIZE pages - npages = (npages + (COMMITSIZE/PAGESIZE) - 1) & ~(COMMITSIZE/PAGESIZE - 1); - - // Minimum of POOLSIZE - if (npages < POOLSIZE/PAGESIZE) - npages = POOLSIZE/PAGESIZE; - else if (npages > POOLSIZE/PAGESIZE) - { // Give us 150% of requested size, so there's room to extend - auto n = npages + (npages >> 1); - if (n < size_t.max/PAGESIZE) - npages = n; - } - - // Allocate successively larger pools up to 8 megs - if (npools) - { uint n; - - n = npools; - if (n > 8) - n = 8; // cap pool size at 8 megs - n *= (POOLSIZE / PAGESIZE); - if (npages < n) - npages = n; - } - - pool = cast(Pool *)cstdlib.calloc(1, Pool.sizeof); - if (pool) - { - pool.initialize(npages); - if (!pool.baseAddr) - goto Lerr; - - newnpools = npools + 1; - newpooltable = cast(Pool **)cstdlib.realloc(pooltable, newnpools * (Pool *).sizeof); - if (!newpooltable) - goto Lerr; - - // Sort pool into newpooltable[] - for (i = 0; i < npools; i++) - { - if (pool.opCmp(newpooltable[i]) < 0) - break; - } - cstring.memmove(newpooltable + i + 1, newpooltable + i, (npools - i) * (Pool *).sizeof); - newpooltable[i] = pool; - - pooltable = newpooltable; - npools = newnpools; - - minAddr = pooltable[0].baseAddr; - maxAddr = pooltable[npools - 1].topAddr; - } - return pool; - - Lerr: - pool.Dtor(); - cstdlib.free(pool); - return null; - } - - - /** - * Allocate a page of bin's. - * Returns: - * 0 failed - */ - int allocPage(Bins bin) - { - Pool *pool; - uint n; - uint pn; - byte *p; - byte *ptop; - - //debug(PRINTF) printf("Gcx::allocPage(bin = %d)\n", bin); - for (n = 0; n < npools; n++) - { - pool = pooltable[n]; - pn = pool.allocPages(1); - if (pn != ~0u) - goto L1; - } - return 0; // failed - - L1: - pool.pagetable[pn] = cast(ubyte)bin; - - // Convert page to free list - size_t size = binsize[bin]; - List **b = &bucket[bin]; - - p = pool.baseAddr + pn * PAGESIZE; - ptop = p + PAGESIZE; - for (; p < ptop; p += size) - { - (cast(List *)p).next = *b; - *b = cast(List *)p; - } - return 1; - } - - - /** - * Search a range of memory values and mark any pointers into the GC pool. - */ - void mark(void *pbot, void *ptop) - { - void **p1 = cast(void **)pbot; - void **p2 = cast(void **)ptop; - uint changes = 0; - - //printf("marking range: %p -> %p\n", pbot, ptop); - for (; p1 < p2; p1++) - { - Pool *pool; - byte *p = cast(byte *)(*p1); - - //if (log) debug(PRINTF) printf("\tmark %x\n", p); - if (p >= minAddr) - { - pool = findPool(p); - if (pool) - { - size_t offset = cast(size_t)(p - pool.baseAddr); - uint biti; - uint pn = offset / PAGESIZE; - Bins bin = cast(Bins)pool.pagetable[pn]; - - //debug(PRINTF) printf("\t\tfound pool %x, base=%x, pn = %d, bin = %d, biti = x%x\n", pool, pool.baseAddr, pn, bin, biti); - - // Adjust bit to be at start of allocated memory block - if (bin <= B_PAGE) - { - biti = (offset & notbinsize[bin]) >> 4; - //debug(PRINTF) printf("\t\tbiti = x%x\n", biti); - } - else if (bin == B_PAGEPLUS) - { - do - { --pn; - } while (cast(Bins)pool.pagetable[pn] == B_PAGEPLUS); - biti = pn * (PAGESIZE / 16); - } - else - { - // Don't mark bits in B_FREE or B_UNCOMMITTED pages - continue; - } - - //debug(PRINTF) printf("\t\tmark(x%x) = %d\n", biti, pool.mark.test(biti)); - if (!pool.mark.test(biti)) - { - //if (log) debug(PRINTF) printf("\t\tmarking %x\n", p); - pool.mark.set(biti); - if (!pool.noscan.test(biti)) - { - pool.scan.set(biti); - changes = 1; - } - log_parent(sentinel_add(pool.baseAddr + biti * 16), sentinel_add(pbot)); - } - } - } - } - anychanges |= changes; - } - - - /** - * Return number of full pages free'd. - */ - size_t fullcollectshell() - { - // The purpose of the 'shell' is to ensure all the registers - // get put on the stack so they'll be scanned - void *sp; - size_t result; - version(LLVMDC) - { - // put registers on the stack - version(D_InlineAsm_X86) - { - uint _eax, _ecx, _edx, _ebx, _esp, _ebp, _esi, _edi; - asm - { - mov _eax, EAX; - mov _ecx, ECX; - mov _edx, EDX; - mov _ebx, EBX; - mov _esp, ESP; - mov _ebp, EBP; - mov _esi, ESI; - mov _edi, EDI; - mov sp, ESP; - } - } - else - { - // FIXME - } - } - else version (GNU) - { - __builtin_unwind_init(); - sp = & sp; - } - else - { - asm - { - pushad ; - mov sp[EBP],ESP ; - } - } - result = fullcollect(sp); - version(LLVMDC) - { - // nothing to do - } - else version (GNU) - { - // nothing to do - } - else - { - asm - { - popad ; - } - } - return result; - } - - - /** - * - */ - size_t fullcollect(void *stackTop) - { - uint n; - Pool *pool; - - debug(COLLECT_PRINTF) printf("Gcx.fullcollect()\n"); - - thread_suspendAll(); - - p_cache = null; - size_cache = 0; - - anychanges = 0; - for (n = 0; n < npools; n++) - { - pool = pooltable[n]; - pool.mark.zero(); - pool.scan.zero(); - pool.freebits.zero(); - } - - // Mark each free entry, so it doesn't get scanned - for (n = 0; n < B_PAGE; n++) - { - for (List *list = bucket[n]; list; list = list.next) - { - pool = findPool(list); - assert(pool); - pool.freebits.set(cast(uint)(cast(byte *)list - pool.baseAddr) / 16); - } - } - - for (n = 0; n < npools; n++) - { - pool = pooltable[n]; - pool.mark.copy(&pool.freebits); - } - - rt_scanStaticData( &mark ); - - version (MULTI_THREADED) - { - if (!noStack) - { - // Scan stacks and registers for each paused thread - thread_scanAll( &mark, stackTop ); - } - } - else - { - if (!noStack) - { - // Scan stack for main thread - debug(PRINTF) printf(" scan stack bot = %x, top = %x\n", stackTop, stackBottom); - version (STACKGROWSDOWN) - mark(stackTop, stackBottom); - else - mark(stackBottom, stackTop); - } - } - - // Scan roots[] - debug(COLLECT_PRINTF) printf("scan roots[]\n"); - mark(roots, roots + nroots); - - // Scan ranges[] - debug(COLLECT_PRINTF) printf("scan ranges[]\n"); - //log++; - for (n = 0; n < nranges; n++) - { - debug(COLLECT_PRINTF) printf("\t%x .. %x\n", ranges[n].pbot, ranges[n].ptop); - mark(ranges[n].pbot, ranges[n].ptop); - } - //log--; - - debug(COLLECT_PRINTF) printf("\tscan heap\n"); - while (anychanges) - { - anychanges = 0; - for (n = 0; n < npools; n++) - { - uint *bbase; - uint *b; - uint *btop; - - pool = pooltable[n]; - - bbase = pool.scan.base(); - btop = bbase + pool.scan.nwords; - for (b = bbase; b < btop;) - { Bins bin; - uint pn; - uint u; - uint bitm; - byte *o; - - bitm = *b; - if (!bitm) - { b++; - continue; - } - *b = 0; - - o = pool.baseAddr + (b - bbase) * 32 * 16; - if (!(bitm & 0xFFFF)) - { - bitm >>= 16; - o += 16 * 16; - } - for (; bitm; o += 16, bitm >>= 1) - { - if (!(bitm & 1)) - continue; - - pn = (o - pool.baseAddr) / PAGESIZE; - bin = cast(Bins)pool.pagetable[pn]; - if (bin < B_PAGE) - { - mark(o, o + binsize[bin]); - } - else if (bin == B_PAGE || bin == B_PAGEPLUS) - { - if (bin == B_PAGEPLUS) - { - while (pool.pagetable[pn - 1] != B_PAGE) - pn--; - } - u = 1; - while (pn + u < pool.ncommitted && pool.pagetable[pn + u] == B_PAGEPLUS) - u++; - mark(o, o + u * PAGESIZE); - } - } - } - } - } - - thread_resumeAll(); - - // Free up everything not marked - debug(COLLECT_PRINTF) printf("\tfree'ing\n"); - size_t freedpages = 0; - size_t freed = 0; - for (n = 0; n < npools; n++) - { uint pn; - uint ncommitted; - uint *bbase; - - pool = pooltable[n]; - bbase = pool.mark.base(); - ncommitted = pool.ncommitted; - for (pn = 0; pn < ncommitted; pn++, bbase += PAGESIZE / (32 * 16)) - { - Bins bin = cast(Bins)pool.pagetable[pn]; - - if (bin < B_PAGE) - { byte *p; - byte *ptop; - uint biti; - uint bitstride; - uint size = binsize[bin]; - - p = pool.baseAddr + pn * PAGESIZE; - ptop = p + PAGESIZE; - biti = pn * (PAGESIZE/16); - bitstride = size / 16; - - version(none) // BUG: doesn't work because freebits() must also be cleared - { - // If free'd entire page - if (bbase[0] == 0 && bbase[1] == 0 && bbase[2] == 0 && bbase[3] == 0 && - bbase[4] == 0 && bbase[5] == 0 && bbase[6] == 0 && bbase[7] == 0) - { - for (; p < ptop; p += size, biti += bitstride) - { - if (pool.finals.nbits && pool.finals.testClear(biti)) - rt_finalize(cast(List *)sentinel_add(p), false/*noStack > 0*/); - gcx.clrBits(pool, biti, BlkAttr.ALL_BITS); - - List *list = cast(List *)p; - //debug(PRINTF) printf("\tcollecting %x\n", list); - log_free(sentinel_add(list)); - - debug (MEMSTOMP) cstring.memset(p, 0xF3, size); - } - pool.pagetable[pn] = B_FREE; - freed += PAGESIZE; - //debug(PRINTF) printf("freeing entire page %d\n", pn); - continue; - } - } - for (; p < ptop; p += size, biti += bitstride) - { - if (!pool.mark.test(biti)) - { - sentinel_Invariant(sentinel_add(p)); - - pool.freebits.set(biti); - if (pool.finals.nbits && pool.finals.testClear(biti)) - rt_finalize(cast(List *)sentinel_add(p), false/*noStack > 0*/); - clrBits(pool, biti, BlkAttr.ALL_BITS); - - List *list = cast(List *)p; - debug(PRINTF) printf("\tcollecting %x\n", list); - log_free(sentinel_add(list)); - - debug (MEMSTOMP) cstring.memset(p, 0xF3, size); - - freed += size; - } - } - } - else if (bin == B_PAGE) - { uint biti = pn * (PAGESIZE / 16); - - if (!pool.mark.test(biti)) - { byte *p = pool.baseAddr + pn * PAGESIZE; - - sentinel_Invariant(sentinel_add(p)); - if (pool.finals.nbits && pool.finals.testClear(biti)) - rt_finalize(sentinel_add(p), false/*noStack > 0*/); - clrBits(pool, biti, BlkAttr.ALL_BITS); - - debug(COLLECT_PRINTF) printf("\tcollecting big %x\n", p); - log_free(sentinel_add(p)); - pool.pagetable[pn] = B_FREE; - freedpages++; - debug (MEMSTOMP) cstring.memset(p, 0xF3, PAGESIZE); - while (pn + 1 < ncommitted && pool.pagetable[pn + 1] == B_PAGEPLUS) - { - pn++; - pool.pagetable[pn] = B_FREE; - freedpages++; - - debug (MEMSTOMP) - { p += PAGESIZE; - cstring.memset(p, 0xF3, PAGESIZE); - } - } - } - } - } - } - - // Zero buckets - bucket[] = null; - - // Free complete pages, rebuild free list - debug(COLLECT_PRINTF) printf("\tfree complete pages\n"); - size_t recoveredpages = 0; - for (n = 0; n < npools; n++) - { uint pn; - uint ncommitted; - - pool = pooltable[n]; - ncommitted = pool.ncommitted; - for (pn = 0; pn < ncommitted; pn++) - { - Bins bin = cast(Bins)pool.pagetable[pn]; - uint biti; - uint u; - - if (bin < B_PAGE) - { - uint size = binsize[bin]; - uint bitstride = size / 16; - uint bitbase = pn * (PAGESIZE / 16); - uint bittop = bitbase + (PAGESIZE / 16); - byte *p; - - biti = bitbase; - for (biti = bitbase; biti < bittop; biti += bitstride) - { if (!pool.freebits.test(biti)) - goto Lnotfree; - } - pool.pagetable[pn] = B_FREE; - recoveredpages++; - continue; - - Lnotfree: - p = pool.baseAddr + pn * PAGESIZE; - for (u = 0; u < PAGESIZE; u += size) - { biti = bitbase + u / 16; - if (pool.freebits.test(biti)) - { List *list; - - list = cast(List *)(p + u); - if (list.next != bucket[bin]) // avoid unnecessary writes - list.next = bucket[bin]; - bucket[bin] = list; - } - } - } - } - } - - debug(COLLECT_PRINTF) printf("recovered pages = %d\n", recoveredpages); - debug(COLLECT_PRINTF) printf("\tfree'd %u bytes, %u pages from %u pools\n", freed, freedpages, npools); - - return freedpages + recoveredpages; - } - - - /** - * - */ - uint getBits(Pool* pool, uint biti) - in - { - assert( pool ); - } - body - { - uint bits; - - if (pool.finals.nbits && - pool.finals.test(biti)) - bits |= BlkAttr.FINALIZE; - if (pool.noscan.test(biti)) - bits |= BlkAttr.NO_SCAN; -// if (pool.nomove.nbits && -// pool.nomove.test(biti)) -// bits |= BlkAttr.NO_MOVE; - return bits; - } - - - /** - * - */ - void setBits(Pool* pool, uint biti, uint mask) - in - { - assert( pool ); - } - body - { - if (mask & BlkAttr.FINALIZE) - { - if (!pool.finals.nbits) - pool.finals.alloc(pool.mark.nbits); - pool.finals.set(biti); - } - if (mask & BlkAttr.NO_SCAN) - { - pool.noscan.set(biti); - } -// if (mask & BlkAttr.NO_MOVE) -// { -// if (!pool.nomove.nbits) -// pool.nomove.alloc(pool.mark.nbits); -// pool.nomove.set(biti); -// } - } - - - /** - * - */ - void clrBits(Pool* pool, uint biti, uint mask) - in - { - assert( pool ); - } - body - { - if (mask & BlkAttr.FINALIZE && pool.finals.nbits) - pool.finals.clear(biti); - if (mask & BlkAttr.NO_SCAN) - pool.noscan.clear(biti); -// if (mask & BlkAttr.NO_MOVE && pool.nomove.nbits) -// pool.nomove.clear(biti); - } - - - /***** Leak Detector ******/ - - - debug (LOGGING) - { - LogArray current; - LogArray prev; - - - void log_init() - { - //debug(PRINTF) printf("+log_init()\n"); - current.reserve(1000); - prev.reserve(1000); - //debug(PRINTF) printf("-log_init()\n"); - } - - - void log_malloc(void *p, size_t size) - { - //debug(PRINTF) printf("+log_malloc(p = %x, size = %d)\n", p, size); - Log log; - - log.p = p; - log.size = size; - log.line = GC.line; - log.file = GC.file; - log.parent = null; - - GC.line = 0; - GC.file = null; - - current.push(log); - //debug(PRINTF) printf("-log_malloc()\n"); - } - - - void log_free(void *p) - { - //debug(PRINTF) printf("+log_free(%x)\n", p); - size_t i; - - i = current.find(p); - if (i == ~0u) - { - debug(PRINTF) printf("free'ing unallocated memory %x\n", p); - } - else - current.remove(i); - //debug(PRINTF) printf("-log_free()\n"); - } - - - void log_collect() - { - //debug(PRINTF) printf("+log_collect()\n"); - // Print everything in current that is not in prev - - debug(PRINTF) printf("New pointers this cycle: --------------------------------\n"); - size_t used = 0; - for (size_t i = 0; i < current.dim; i++) - { - size_t j; - - j = prev.find(current.data[i].p); - if (j == ~0u) - current.data[i].print(); - else - used++; - } - - debug(PRINTF) printf("All roots this cycle: --------------------------------\n"); - for (size_t i = 0; i < current.dim; i++) - { - void *p; - size_t j; - - p = current.data[i].p; - if (!findPool(current.data[i].parent)) - { - j = prev.find(current.data[i].p); - if (j == ~0u) - debug(PRINTF) printf("N"); - else - debug(PRINTF) printf(" ");; - current.data[i].print(); - } - } - - debug(PRINTF) printf("Used = %d-------------------------------------------------\n", used); - prev.copy(¤t); - - debug(PRINTF) printf("-log_collect()\n"); - } - - - void log_parent(void *p, void *parent) - { - //debug(PRINTF) printf("+log_parent()\n"); - size_t i; - - i = current.find(p); - if (i == ~0u) - { - debug(PRINTF) printf("parent'ing unallocated memory %x, parent = %x\n", p, parent); - Pool *pool; - pool = findPool(p); - assert(pool); - size_t offset = cast(size_t)(p - pool.baseAddr); - uint biti; - uint pn = offset / PAGESIZE; - Bins bin = cast(Bins)pool.pagetable[pn]; - biti = (offset & notbinsize[bin]); - debug(PRINTF) printf("\tbin = %d, offset = x%x, biti = x%x\n", bin, offset, biti); - } - else - { - current.data[i].parent = parent; - } - //debug(PRINTF) printf("-log_parent()\n"); - } - - } - else - { - void log_init() { } - void log_malloc(void *p, size_t size) { } - void log_free(void *p) { } - void log_collect() { } - void log_parent(void *p, void *parent) { } - } -} - - -/* ============================ Pool =============================== */ - - -struct Pool -{ - byte* baseAddr; - byte* topAddr; - GCBits mark; // entries already scanned, or should not be scanned - GCBits scan; // entries that need to be scanned - GCBits freebits; // entries that are on the free list - GCBits finals; // entries that need finalizer run on them - GCBits noscan; // entries that should not be scanned - - uint npages; - uint ncommitted; // ncommitted <= npages - ubyte* pagetable; - - - void initialize(uint npages) - { - size_t poolsize; - - //debug(PRINTF) printf("Pool::Pool(%u)\n", npages); - poolsize = npages * PAGESIZE; - assert(poolsize >= POOLSIZE); - baseAddr = cast(byte *)os_mem_map(poolsize); - - // Some of the code depends on page alignment of memory pools - assert((cast(uint)baseAddr & (PAGESIZE - 1)) == 0); - - if (!baseAddr) - { - //debug(PRINTF) printf("GC fail: poolsize = x%x, errno = %d\n", poolsize, errno); - //debug(PRINTF) printf("message = '%s'\n", sys_errlist[errno]); - - npages = 0; - poolsize = 0; - } - //assert(baseAddr); - topAddr = baseAddr + poolsize; - - mark.alloc(poolsize / 16); - scan.alloc(poolsize / 16); - freebits.alloc(poolsize / 16); - noscan.alloc(poolsize / 16); - - pagetable = cast(ubyte*)cstdlib.malloc(npages); - if (!pagetable) - onOutOfMemoryError(); - cstring.memset(pagetable, B_UNCOMMITTED, npages); - - this.npages = npages; - ncommitted = 0; - } - - - void Dtor() - { - if (baseAddr) - { - int result; - - if (ncommitted) - { - result = os_mem_decommit(baseAddr, 0, ncommitted * PAGESIZE); - assert(result == 0); - ncommitted = 0; - } - - if (npages) - { - result = os_mem_unmap(baseAddr, npages * PAGESIZE); - assert(result == 0); - npages = 0; - } - - baseAddr = null; - topAddr = null; - } - if (pagetable) - cstdlib.free(pagetable); - - mark.Dtor(); - scan.Dtor(); - freebits.Dtor(); - finals.Dtor(); - noscan.Dtor(); - } - - - void Invariant() { } - - - invariant - { - //mark.Invariant(); - //scan.Invariant(); - //freebits.Invariant(); - //finals.Invariant(); - //noscan.Invariant(); - - if (baseAddr) - { - //if (baseAddr + npages * PAGESIZE != topAddr) - //printf("baseAddr = %p, npages = %d, topAddr = %p\n", baseAddr, npages, topAddr); - assert(baseAddr + npages * PAGESIZE == topAddr); - assert(ncommitted <= npages); - } - - for (uint i = 0; i < npages; i++) - { Bins bin = cast(Bins)pagetable[i]; - - assert(bin < B_MAX); - } - } - - - /** - * Allocate n pages from Pool. - * Returns ~0u on failure. - */ - uint allocPages(uint n) - { - uint i; - uint n2; - - //debug(PRINTF) printf("Pool::allocPages(n = %d)\n", n); - n2 = n; - for (i = 0; i < ncommitted; i++) - { - if (pagetable[i] == B_FREE) - { - if (--n2 == 0) - { //debug(PRINTF) printf("\texisting pn = %d\n", i - n + 1); - return i - n + 1; - } - } - else - n2 = n; - } - return extendPages(n); - } - - /** - * Extend Pool by n pages. - * Returns ~0u on failure. - */ - uint extendPages(uint n) - { - //debug(PRINTF) printf("Pool::extendPages(n = %d)\n", n); - if (ncommitted + n <= npages) - { - uint tocommit; - - tocommit = (n + (COMMITSIZE/PAGESIZE) - 1) & ~(COMMITSIZE/PAGESIZE - 1); - if (ncommitted + tocommit > npages) - tocommit = npages - ncommitted; - //debug(PRINTF) printf("\tlooking to commit %d more pages\n", tocommit); - //fflush(stdout); - if (os_mem_commit(baseAddr, ncommitted * PAGESIZE, tocommit * PAGESIZE) == 0) - { - cstring.memset(pagetable + ncommitted, B_FREE, tocommit); - auto i = ncommitted; - ncommitted += tocommit; - - while (i && pagetable[i - 1] == B_FREE) - i--; - - return i; - } - //debug(PRINTF) printf("\tfailed to commit %d pages\n", tocommit); - } - - return ~0u; - } - - - /** - * Free npages pages starting with pagenum. - */ - void freePages(uint pagenum, uint npages) - { - cstring.memset(&pagetable[pagenum], B_FREE, npages); - } - - - /** - * Used for sorting pooltable[] - */ - int opCmp(Pool *p2) - { - if (baseAddr < p2.baseAddr) - return -1; - else - return cast(int)(baseAddr > p2.baseAddr); - } -} - - -/* ============================ SENTINEL =============================== */ - - -version (SENTINEL) -{ - const size_t SENTINEL_PRE = cast(size_t) 0xF4F4F4F4F4F4F4F4UL; // 32 or 64 bits - const ubyte SENTINEL_POST = 0xF5; // 8 bits - const uint SENTINEL_EXTRA = 2 * size_t.sizeof + 1; - - - size_t* sentinel_size(void *p) { return &(cast(size_t *)p)[-2]; } - size_t* sentinel_pre(void *p) { return &(cast(size_t *)p)[-1]; } - ubyte* sentinel_post(void *p) { return &(cast(ubyte *)p)[sentinel_size(p)]; } - - - void sentinel_init(void *p, size_t size) - { - *sentinel_size(p) = size; - *sentinel_pre(p) = SENTINEL_PRE; - *sentinel_post(p) = SENTINEL_POST; - } - - - void sentinel_Invariant(void *p) - { - assert(*sentinel_pre(p) == SENTINEL_PRE); - assert(*sentinel_post(p) == SENTINEL_POST); - } - - - void *sentinel_add(void *p) - { - return p + 2 * size_t.sizeof; - } - - - void *sentinel_sub(void *p) - { - return p - 2 * size_t.sizeof; - } -} -else -{ - const uint SENTINEL_EXTRA = 0; - - - void sentinel_init(void *p, size_t size) - { - } - - - void sentinel_Invariant(void *p) - { - } - - - void *sentinel_add(void *p) - { - return p; - } - - - void *sentinel_sub(void *p) - { - return p; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/llvmdc.mak --- a/tango/lib/gc/basic/llvmdc.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -# Makefile to build the garbage collector D library for LLVMDC -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-gc-basic.a -LIB_MASK=libtango-gc-basic*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -#CFLAGS=-O3 $(ADD_CFLAGS) -CFLAGS=-g $(ADD_CFLAGS) - -#DFLAGS=-release -O3 -inline -w -nofloat $(ADD_DFLAGS) -DFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -#TFLAGS=-O3 -inline -w -nofloat $(ADD_DFLAGS) -TFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=gcc -LC=llvm-ar rsv -DC=llvmdc - -LIB_DEST=.. - -.SUFFIXES: .s .S .c .cpp .d .html .o .bc - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.bc: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : basic.lib -doc : basic.doc - -###################################################### - -ALL_OBJS= \ - gc.bc \ - gcalloc.bc \ - gcbits.bc \ - gcstats.bc \ - gcx.bc - -###################################################### - -ALL_DOCS= - -###################################################### - -basic.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -basic.doc : $(ALL_DOCS) - echo No documentation available. - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/posix.mak --- a/tango/lib/gc/basic/posix.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -# Makefile to build the garbage collector D library for Posix -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-gc-basic.a -LIB_MASK=libtango-gc-basic*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-O -m32 $(ADD_CFLAGS) -#CFLAGS=-g -m32 $(ADD_CFLAGS) - -DFLAGS=-release -O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) -#DFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) - -TFLAGS=-O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) -#TFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc -version=Posix - -CC=gcc -LC=$(AR) -qsv -DC=dmd - -LIB_DEST=.. - -.SUFFIXES: .s .S .c .cpp .d .html .o - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.o: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : basic.lib -doc : basic.doc - -###################################################### - -ALL_OBJS= \ - gc.o \ - gcalloc.o \ - gcbits.o \ - gcstats.o \ - gcx.o - -###################################################### - -ALL_DOCS= - -###################################################### - -basic.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -basic.doc : $(ALL_DOCS) - echo No documentation available. - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/basic/win32.mak --- a/tango/lib/gc/basic/win32.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -# Makefile to build the garbage collector D library for Win32 -# Designed to work with DigitalMars make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=tango-gc-basic.lib -LIB_MASK=tango-gc-basic*.lib - -CP=xcopy /y -RM=del /f -MD=mkdir - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-mn -6 -r $(ADD_CFLAGS) -#CFLAGS=-g -mn -6 -r $(ADD_CFLAGS) - -DFLAGS=-release -O -inline -w -nofloat $(ADD_DFLAGS) -#DFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -TFLAGS=-O -inline -w -nofloat $(ADD_DFLAGS) -#TFLAGS=-g -w -nofloat $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=dmc -LC=lib -DC=dmd - -LIB_DEST=.. - -.DEFAULT: .asm .c .cpp .d .html .obj - -.asm.obj: - $(CC) -c $< - -.c.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.d.obj: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : basic.lib -doc : basic.doc - -###################################################### - -ALL_OBJS= \ - gc.obj \ - gcalloc.obj \ - gcbits.obj \ - gcstats.obj \ - gcx.obj - -###################################################### - -ALL_DOCS= - -###################################################### - -basic.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) -c -n $@ $(ALL_OBJS) - -basic.doc : $(ALL_DOCS) - @echo No documentation available. - -###################################################### - -clean : - $(RM) /s *.di - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)\. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/stub/gc.d --- a/tango/lib/gc/stub/gc.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/** - * This module contains a minimal garbage collector implementation according to - * Tango requirements. This library is mostly intended to serve as an example, - * but it is usable in applications which do not rely on a garbage collector - * to clean up memory (ie. when dynamic array resizing is not used, and all - * memory allocated with 'new' is freed deterministically with 'delete'). - * - * Please note that block attribute data must be tracked, or at a minimum, the - * FINALIZE bit must be tracked for any allocated memory block because calling - * rt_finalize on a non-object block can result in an access violation. In the - * allocator below, this tracking is done via a leading uint bitmask. A real - * allocator may do better to store this data separately, similar to the basic - * GC normally used by Tango. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - */ - -private import tango.stdc.stdlib; - -private -{ - enum BlkAttr : uint - { - FINALIZE = 0b0000_0001, - NO_SCAN = 0b0000_0010, - NO_MOVE = 0b0000_0100, - ALL_BITS = 0b1111_1111 - } - - struct BlkInfo - { - void* base; - size_t size; - uint attr; - } - - extern (C) void thread_init(); - extern (C) void onOutOfMemoryError(); -} - -extern (C) void gc_init() -{ - // NOTE: The GC must initialize the thread library before its first - // collection, and always before returning from gc_init(). - thread_init(); -} - -extern (C) void gc_term() -{ - -} - -extern (C) void gc_enable() -{ - -} - -extern (C) void gc_disable() -{ - -} - -extern (C) void gc_collect() -{ - -} - -extern (C) uint gc_getAttr( void* p ) -{ - return 0; -} - -extern (C) uint gc_setAttr( void* p, uint a ) -{ - return 0; -} - -extern (C) uint gc_clrAttr( void* p, uint a ) -{ - return 0; -} - -extern (C) void* gc_malloc( size_t sz, uint ba = 0 ) -{ - void* p = malloc( sz ); - - if( sz && p is null ) - onOutOfMemoryError(); - return p; -} - -extern (C) void* gc_calloc( size_t sz, uint ba = 0 ) -{ - void* p = calloc( 1, sz ); - - if( sz && p is null ) - onOutOfMemoryError(); - return p; -} - -extern (C) void* gc_realloc( void* p, size_t sz, uint ba = 0 ) -{ - p = realloc( p, sz ); - - if( sz && p is null ) - onOutOfMemoryError(); - return p; -} - -extern (C) size_t gc_extend( void* p, size_t mx, size_t sz ) -{ - return 0; -} - -extern (C) void gc_free( void* p ) -{ - free( p ); -} - -extern (C) void* gc_addrOf( void* p ) -{ - return null; -} - -extern (C) size_t gc_sizeOf( void* p ) -{ - return 0; -} - -extern (C) BlkInfo gc_query( void* p ) -{ - return BlkInfo.init; -} - -extern (C) void gc_addRoot( void* p ) -{ - -} - -extern (C) void gc_addRange( void* p, size_t sz ) -{ - -} - -extern (C) void gc_removeRoot( void *p ) -{ - -} - -extern (C) void gc_removeRange( void *p ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/stub/llvmdc.mak --- a/tango/lib/gc/stub/llvmdc.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,96 +0,0 @@ -# Makefile to build the garbage collector D library for Posix -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-gc-stub.a -LIB_MASK=libtango-gc-stub*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -#CFLAGS=-O3 $(ADD_CFLAGS) -CFLAGS=-g $(ADD_CFLAGS) - -#DFLAGS=-release -O3 -inline -w $(ADD_DFLAGS) -DFLAGS=-g $(ADD_DFLAGS) - -#TFLAGS=-O3 -inline $(ADD_DFLAGS) -TFLAGS=-g $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=gcc -LC=llvm-ar rsv -DC=llvmdc - -LIB_DEST=.. - -.SUFFIXES: .s .S .c .cpp .d .html .o .bc - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.bc: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : stub.lib -doc : stub.doc - -###################################################### - -ALL_OBJS= \ - gc.bc - -###################################################### - -ALL_DOCS= - -###################################################### - -stub.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -stub.doc : $(ALL_DOCS) - echo No documentation available. - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/stub/posix.mak --- a/tango/lib/gc/stub/posix.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,98 +0,0 @@ -# Makefile to build the garbage collector D library for Posix -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-gc-stub.a -LIB_MASK=libtango-gc-stub*.a - -CP=cp -f -RM=rm -f -MD=mkdir -p - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-O -m32 $(ADD_CFLAGS) -#CFLAGS=-g -m32 $(ADD_CFLAGS) - -### warnings disabled because gcx has issues ### - -DFLAGS=-release -O -inline -version=Posix $(ADD_DFLAGS) -#DFLAGS=-g -version=Posix $(ADD_DFLAGS) - -TFLAGS=-O -inline -version=Posix $(ADD_DFLAGS) -#TFLAGS=-g -version=Posix $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc -version=Posix - -CC=gcc -LC=$(AR) -qsv -DC=dmd - -LIB_DEST=.. - -.SUFFIXES: .s .S .c .cpp .d .html .o - -.s.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.S.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.c.o: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.o: - g++ -c $(CFLAGS) $< -o$@ - -.d.o: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : stub.lib -doc : stub.doc - -###################################################### - -ALL_OBJS= \ - gc.o - -###################################################### - -ALL_DOCS= - -###################################################### - -stub.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) $@ $(ALL_OBJS) - -stub.doc : $(ALL_DOCS) - echo No documentation available. - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/gc/stub/win32.mak --- a/tango/lib/gc/stub/win32.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -# Makefile to build the garbage collector D library for Win32 -# Designed to work with DigitalMars make -# Targets: -# make -# Same as make all -# make lib -# Build the garbage collector library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=tango-gc-stub.lib -LIB_MASK=tango-gc-stub*.lib - -CP=xcopy /y -RM=del /f -MD=mkdir - -ADD_CFLAGS= -ADD_DFLAGS= - -CFLAGS=-mn -6 -r $(ADD_CFLAGS) -#CFLAGS=-g -mn -6 -r $(ADD_CFLAGS) - -### warnings disabled because gcx has issues ### - -DFLAGS=-release -O -inline $(ADD_DFLAGS) -#DFLAGS=-g -release $(ADD_DFLAGS) - -TFLAGS=-O -inline $(ADD_DFLAGS) -#TFLAGS=-g $(ADD_DFLAGS) - -DOCFLAGS=-version=DDoc - -CC=dmc -LC=lib -DC=dmd - -LIB_DEST=.. - -.DEFAULT: .asm .c .cpp .d .html .obj - -.asm.obj: - $(CC) -c $< - -.c.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.cpp.obj: - $(CC) -c $(CFLAGS) $< -o$@ - -.d.obj: - $(DC) -c $(DFLAGS) $< -of$@ - -.d.html: - $(DC) -c -o- $(DOCFLAGS) -Df$*.html $< -# $(DC) -c -o- $(DOCFLAGS) -Df$*.html dmd.ddoc $< - -targets : lib doc -all : lib doc -lib : stub.lib -doc : stub.doc - -###################################################### - -ALL_OBJS= \ - gc.obj - -###################################################### - -ALL_DOCS= - -###################################################### - -stub.lib : $(LIB_TARGET) - -$(LIB_TARGET) : $(ALL_OBJS) - $(RM) $@ - $(LC) -c -n $@ $(ALL_OBJS) - -stub.doc : $(ALL_DOCS) - @echo No documentation available. - -###################################################### - -clean : - $(RM) /s *.di - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - $(RM) $(LIB_MASK) - -install : - $(MD) $(LIB_DEST) - $(CP) $(LIB_MASK) $(LIB_DEST)\. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/lib/llvmdc-posix.mak --- a/tango/lib/llvmdc-posix.mak Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -# Makefile to build the composite D runtime library for Linux -# Designed to work with GNU make -# Targets: -# make -# Same as make all -# make lib -# Build the runtime library -# make doc -# Generate documentation -# make clean -# Delete unneeded files created by build process - -LIB_TARGET=libtango-base-llvmdc.a -LIB_MASK=libtango-base-llvmdc*.a -LIB_TARGET_C=libtango-base-c-llvmdc.a -LIB_MASK_C=libtango-base-c-llvmdc*.a -LIB_NAME_NATIVE=libtango-base-llvmdc-native -LIB_TARGET_NATIVE=$(LIB_NAME_NATIVE).a - -DIR_CC=./common/tango -DIR_RT=./compiler/llvmdc -DIR_GC=./gc/basic -#DIR_GC=./gc/stub - -CP=cp -f -RM=rm -f -MD=mkdir -p - -CC=gcc -LC=llvm-ar rsv -CLC=ar rsv -DC=llvmdc -LLVMLINK=llvm-link -LLC=llc - -ADD_CFLAGS= -ADD_DFLAGS= - -targets : nativelib doc -all : nativelib lib doc - -###################################################### - -ALL_OBJS= - -###################################################### - -ALL_DOCS= - -###################################################### - -lib : $(ALL_OBJS) - make -C $(DIR_CC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" - make -C $(DIR_RT) -fllvmdc.mak lib - make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" - find . -name $(LIB_MASK) | xargs $(RM) - $(LC) $(LIB_TARGET) `find $(DIR_CC) -name "*.bc" | xargs echo` - $(LC) $(LIB_TARGET) `find $(DIR_RT) -name "*.bc" | xargs echo` - $(LC) $(LIB_TARGET) `find $(DIR_GC) -name "*.bc" | xargs echo` - $(CLC) $(LIB_TARGET_C) `find $(DIR_CC) -name "*.o" | xargs echo` - $(CLC) $(LIB_TARGET_C) `find $(DIR_RT) -name "*.o" | xargs echo` - -nativelib: $(ALL_OBJS) - make -C $(DIR_CC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" - make -C $(DIR_RT) -fllvmdc.mak lib - make -C $(DIR_GC) -fllvmdc.mak lib DC=$(DC) ADD_DFLAGS="$(ADD_DFLAGS)" ADD_CFLAGS="$(ADD_CFLAGS)" - - $(RM) $(LIB_NAME_NATIVE)* - - # first link all bcs together to a single bitcode file - $(LLVMLINK) -o=$(LIB_NAME_NATIVE)-llvm.bc `find $(DIR_CC) $(DIR_RT) $(DIR_GC) -name "*.bc"` - # then compile to assembler - $(LLC) -o=$(LIB_NAME_NATIVE)-llvm.s $(LIB_NAME_NATIVE)-llvm.bc - # assemble native code - $(CC) -c -o $(LIB_NAME_NATIVE)-llvm.o $(LIB_NAME_NATIVE)-llvm.s - # make an archive containing it and the other native object files - $(CLC) $(LIB_TARGET_NATIVE) $(LIB_NAME_NATIVE)-llvm.o `find $(DIR_CC) $(DIR_RT) -name "*.o"` - - -doc : $(ALL_DOCS) - make -C $(DIR_CC) -fllvmdc.mak doc - make -C $(DIR_RT) -fllvmdc.mak doc - make -C $(DIR_GC) -fllvmdc.mak doc - -###################################################### - -clean : - find . -name "*.di" | xargs $(RM) - $(RM) $(ALL_OBJS) - $(RM) $(ALL_DOCS) - make -C $(DIR_CC) -fllvmdc.mak clean - make -C $(DIR_RT) -fllvmdc.mak clean - make -C $(DIR_GC) -fllvmdc.mak clean - $(RM) $(LIB_MASK) - $(RM) $(LIB_MASK_C) - $(RM) $(LIB_NAME_NATIVE)* - -install : - make -C $(DIR_CC) -fllvmdc.mak install - make -C $(DIR_RT) -fllvmdc.mak install - make -C $(DIR_GC) -fllvmdc.mak install - $(CP) $(LIB_MASK) $(LIB_DEST)/. - $(CP) $(LIB_MASK_C) $(LIB_DEST)/. diff -r 76078c8ab5b9 -r 44f08170f4ef tango/object.di --- a/tango/object.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -module object; - -alias typeof(int.sizeof) size_t; -alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; - -alias size_t hash_t; - -class Object -{ - char[] toString(); - hash_t toHash(); - int opCmp(Object o); - int opEquals(Object o); - - interface Monitor - { - void lock(); - void unlock(); - } -} - -struct Interface -{ - ClassInfo classinfo; - void*[] vtbl; - ptrdiff_t offset; // offset to Interface 'this' from Object 'this' -} - -class ClassInfo : Object -{ - byte[] init; // class static initializer - char[] name; // class name - void*[] vtbl; // virtual function pointer table - Interface[] interfaces; - ClassInfo base; - void* destructor; - void(*classInvariant)(Object); - uint flags; - // 1: // IUnknown - // 2: // has no possible pointers into GC memory - // 4: // has offTi[] member - // 8: // has constructors - void* deallocator; - OffsetTypeInfo[] offTi; - void* defaultConstructor; - - static ClassInfo find(char[] classname); - Object create(); -} - -struct OffsetTypeInfo -{ - size_t offset; - TypeInfo ti; -} - -class TypeInfo -{ - hash_t getHash(void *p); - int equals(void *p1, void *p2); - int compare(void *p1, void *p2); - size_t tsize(); - void swap(void *p1, void *p2); - TypeInfo next(); - void[] init(); - uint flags(); - // 1: // has possible pointers into GC memory - OffsetTypeInfo[] offTi(); -} - -class TypeInfo_Typedef : TypeInfo -{ - TypeInfo base; - char[] name; - void[] m_init; -} - -class TypeInfo_Enum : TypeInfo_Typedef -{ -} - -class TypeInfo_Pointer : TypeInfo -{ - TypeInfo m_next; -} - -class TypeInfo_Array : TypeInfo -{ - TypeInfo value; -} - -class TypeInfo_StaticArray : TypeInfo -{ - TypeInfo value; - size_t len; -} - -class TypeInfo_AssociativeArray : TypeInfo -{ - TypeInfo value; - TypeInfo key; -} - -class TypeInfo_Function : TypeInfo -{ - TypeInfo next; -} - -class TypeInfo_Delegate : TypeInfo -{ - TypeInfo next; -} - -class TypeInfo_Class : TypeInfo -{ - ClassInfo info; -} - -class TypeInfo_Interface : TypeInfo -{ - ClassInfo info; -} - -class TypeInfo_Struct : TypeInfo -{ - char[] name; - void[] m_init; - - uint function(void*) xtoHash; - int function(void*,void*) xopEquals; - int function(void*,void*) xopCmp; - char[] function(void*) xtoString; - - uint m_flags; -} - -class TypeInfo_Tuple : TypeInfo -{ - TypeInfo[] elements; -} - -class ModuleInfo -{ - char[] name; - ModuleInfo[] importedModules; - ClassInfo[] localClasses; - uint flags; - - void function() ctor; - void function() dtor; - void function() unitTest; - - void* xgetMembers; - void function() ictor; - - static int opApply( int delegate( inout ModuleInfo ) ); -} - -class Exception : Object -{ - char[] msg; - char[] file; - size_t line; - Exception next; - - this(char[] msg, Exception next = null); - this(char[] msg, char[] file, size_t line, Exception next = null); - char[] toString(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/std/c/stdarg.di --- a/tango/std/c/stdarg.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/** - * These functions are built-in intrinsics to the compiler. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: David Friedman - */ -module std.c.stdarg; - -version( GNU ) -{ - private import gcc.builtins; - alias __builtin_va_list va_list; - alias __builtin_va_end va_end; - alias __builtin_va_copy va_copy; -} - -template va_start(T) -{ - void va_start( out va_list ap, inout T parmn ) - { - - } -} - -template va_arg(T) -{ - T va_arg( inout va_list ap ) - { - return T.init; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/std/intrinsic.di --- a/tango/std/intrinsic.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/** - * These functions are built-in intrinsics to the compiler. - * - * Intrinsic functions are functions built in to the compiler, usually to take - * advantage of specific CPU features that are inefficient to handle via - * external functions. The compiler's optimizer and code generator are fully - * integrated in with intrinsic functions, bringing to bear their full power on - * them. This can result in some surprising speedups. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Walter Bright - */ -module std.intrinsic; - -// LLVMDC doesn't use this module! -version( LLVMDC ) -{ - static assert(0, "LLVMDC does not support the std.intrinsic module with Tango"); -} - -/** - * Scans the bits in v starting with bit 0, looking - * for the first set bit. - * Returns: - * The bit number of the first bit set. - * The return value is undefined if v is zero. - */ -int bsf( uint v ); - - -/** - * Scans the bits in v from the most significant bit - * to the least significant bit, looking - * for the first set bit. - * Returns: - * The bit number of the first bit set. - * The return value is undefined if v is zero. - * Example: - * --- - * import std.intrinsic; - * - * int main() - * { - * uint v; - * int x; - * - * v = 0x21; - * x = bsf(v); - * printf("bsf(x%x) = %d\n", v, x); - * x = bsr(v); - * printf("bsr(x%x) = %d\n", v, x); - * return 0; - * } - * --- - * Output: - * bsf(x21) = 0
- * bsr(x21) = 5 - */ -int bsr( uint v ); - - -/** - * Tests the bit. - */ -int bt( uint* p, uint bitnum ); - - -/** - * Tests and complements the bit. - */ -int btc( uint* p, uint bitnum ); - - -/** - * Tests and resets (sets to 0) the bit. - */ -int btr( uint* p, uint bitnum ); - - -/** - * Tests and sets the bit. - * Params: - * p = a non-NULL pointer to an array of uints. - * index = a bit number, starting with bit 0 of p[0], - * and progressing. It addresses bits like the expression: ---- -p[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1))) ---- - * Returns: - * A non-zero value if the bit was set, and a zero - * if it was clear. - * - * Example: - * --- -import std.intrinsic; - -int main() -{ - uint array[2]; - - array[0] = 2; - array[1] = 0x100; - - printf("btc(array, 35) = %d\n", btc(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("btc(array, 35) = %d\n", btc(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("bts(array, 35) = %d\n", bts(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("btr(array, 35) = %d\n", btr(array, 35)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - printf("bt(array, 1) = %d\n", bt(array, 1)); - printf("array = [0]:x%x, [1]:x%x\n", array[0], array[1]); - - return 0; -} - * --- - * Output: -
-btc(array, 35) = 0
-array = [0]:x2, [1]:x108
-btc(array, 35) = -1
-array = [0]:x2, [1]:x100
-bts(array, 35) = 0
-array = [0]:x2, [1]:x108
-btr(array, 35) = -1
-array = [0]:x2, [1]:x100
-bt(array, 1) = -1
-array = [0]:x2, [1]:x100
-
- */ -int bts( uint* p, uint bitnum ); - - -/** - * Swaps bytes in a 4 byte uint end-to-end, i.e. byte 0 becomes - * byte 3, byte 1 becomes byte 2, byte 2 becomes byte 1, byte 3 - * becomes byte 0. - */ -uint bswap( uint v ); - - -/** - * Reads I/O port at port_address. - */ -ubyte inp( uint port_address ); - - -/** - * ditto - */ -ushort inpw( uint port_address ); - - -/** - * ditto - */ -uint inpl( uint port_address ); - - -/** - * Writes and returns value to I/O port at port_address. - */ -ubyte outp( uint port_address, ubyte value ); - - -/** - * ditto - */ -ushort outpw( uint port_address, ushort value ); - - -/** - * ditto - */ -uint outpl( uint port_address, uint value ); \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/std/stdarg.di --- a/tango/std/stdarg.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/** - * These functions are built-in intrinsics to the compiler. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: David Friedman - */ -module std.stdarg; - -version( GNU ) -{ - private import gcc.builtins; - alias __builtin_va_list va_list; - alias __builtin_va_end va_end; - alias __builtin_va_copy va_copy; -} - -template va_start(T) -{ - void va_start( out va_list ap, inout T parmn ) - { - - } -} - -template va_arg(T) -{ - T va_arg( inout va_list ap ) - { - return T.init; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Array.d --- a/tango/tango/core/Array.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3285 +0,0 @@ -/** - * The array module provides array manipulation routines in a manner that - * balances performance and flexibility. Operations are provided for sorting, - * and for processing both sorted and unsorted arrays. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Array; - - -private import tango.core.Traits; -private import tango.stdc.stdlib : alloca; - - -version( DDoc ) -{ - typedef int Num; - typedef int Elem; - - typedef bool function( Elem ) Pred1E; - typedef bool function( Elem, Elem ) Pred2E; -} - - -private -{ - struct IsEqual( T ) - { - static bool opCall( T p1, T p2 ) - { - // TODO: Fix this if/when opEquals is changed to return a bool. - static if( is( T == class ) || is( T == struct ) ) - return (p1 == p2) != 0; - else - return p1 == p2; - } - } - - - struct IsLess( T ) - { - static bool opCall( T p1, T p2 ) - { - return p1 < p2; - } - } - - - template ElemTypeOf( T ) - { - alias typeof(T[0]) ElemTypeOf; - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Find -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t find( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - - - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t find( Elem[] buf, Elem[] pat, Pred2E pred = Pred2E.init ); - -} -else -{ - template find_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - foreach( size_t pos, Elem cur; buf ) - { - if( pred( cur, pat ) ) - return pos; - } - return buf.length; - } - - - size_t fn( Elem[] buf, Elem[] pat, Pred pred = Pred.init ) - { - if( buf.length == 0 || - pat.length == 0 || - buf.length < pat.length ) - { - return buf.length; - } - - size_t end = buf.length - pat.length + 1; - - for( size_t pos = 0; pos < end; ++pos ) - { - if( pred( buf[pos], pat[0] ) ) - { - size_t mat = 0; - - do - { - if( ++mat >= pat.length ) - return pos - pat.length + 1; - if( ++pos >= buf.length ) - return buf.length; - } while( pred( buf[pos], pat[mat] ) ); - pos -= mat; - } - } - return buf.length; - } - } - - - template find( Buf, Pat ) - { - size_t find( Buf buf, Pat pat ) - { - return find_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template find( Buf, Pat, Pred ) - { - size_t find( Buf buf, Pat pat, Pred pred ) - { - return find_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - // find element - assert( find( "", 'a' ) == 0 ); - assert( find( "abc", 'a' ) == 0 ); - assert( find( "abc", 'b' ) == 1 ); - assert( find( "abc", 'c' ) == 2 ); - assert( find( "abc", 'd' ) == 3 ); - - // null parameters - assert( find( "", "" ) == 0 ); - assert( find( "a", "" ) == 1 ); - assert( find( "", "a" ) == 0 ); - - // exact match - assert( find( "abc", "abc" ) == 0 ); - - // simple substring match - assert( find( "abc", "a" ) == 0 ); - assert( find( "abca", "a" ) == 0 ); - assert( find( "abc", "b" ) == 1 ); - assert( find( "abc", "c" ) == 2 ); - assert( find( "abc", "d" ) == 3 ); - - // multi-char substring match - assert( find( "abc", "ab" ) == 0 ); - assert( find( "abcab", "ab" ) == 0 ); - assert( find( "abc", "bc" ) == 1 ); - assert( find( "abc", "ac" ) == 3 ); - assert( find( "abrabracadabra", "abracadabra" ) == 3 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Reverse Find -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LP)buf.length .. 0$(RB), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t rfind( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - - - /** - * Performs a linear scan of buf from $(LP)buf.length .. 0$(RB), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t rfind( Elem[] buf, Elem[] pat, Pred2E pred = Pred2E.init ); -} -else -{ - template rfind_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - if( buf.length == 0 ) - return buf.length; - - size_t pos = buf.length; - - do - { - if( pred( buf[--pos], pat ) ) - return pos; - } while( pos > 0 ); - return buf.length; - } - - - size_t fn( Elem[] buf, Elem[] pat, Pred pred = Pred.init ) - { - if( buf.length == 0 || - pat.length == 0 || - buf.length < pat.length ) - { - return buf.length; - } - - size_t pos = buf.length - pat.length + 1; - - do - { - if( pred( buf[--pos], pat[0] ) ) - { - size_t mat = 0; - - do - { - if( ++mat >= pat.length ) - return pos - pat.length + 1; - if( ++pos >= buf.length ) - return buf.length; - } while( pred( buf[pos], pat[mat] ) ); - pos -= mat; - } - } while( pos > 0 ); - return buf.length; - } - } - - - template rfind( Buf, Pat ) - { - size_t rfind( Buf buf, Pat pat ) - { - return rfind_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template rfind( Buf, Pat, Pred ) - { - size_t rfind( Buf buf, Pat pat, Pred pred ) - { - return rfind_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - // rfind element - assert( rfind( "", 'a' ) == 0 ); - assert( rfind( "abc", 'a' ) == 0 ); - assert( rfind( "abc", 'b' ) == 1 ); - assert( rfind( "abc", 'c' ) == 2 ); - assert( rfind( "abc", 'd' ) == 3 ); - - // null parameters - assert( rfind( "", "" ) == 0 ); - assert( rfind( "a", "" ) == 1 ); - assert( rfind( "", "a" ) == 0 ); - - // exact match - assert( rfind( "abc", "abc" ) == 0 ); - - // simple substring match - assert( rfind( "abc", "a" ) == 0 ); - assert( rfind( "abca", "a" ) == 3 ); - assert( rfind( "abc", "b" ) == 1 ); - assert( rfind( "abc", "c" ) == 2 ); - assert( rfind( "abc", "d" ) == 3 ); - - // multi-char substring match - assert( rfind( "abc", "ab" ) == 0 ); - assert( rfind( "abcab", "ab" ) == 3 ); - assert( rfind( "abc", "bc" ) == 1 ); - assert( rfind( "abc", "ac" ) == 3 ); - assert( rfind( "abracadabrabra", "abracadabra" ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// KMP Find -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * This function uses the KMP algorithm and offers O(M+N) performance but - * must allocate a temporary buffer of size pat.sizeof to do so. If it is - * available on the target system, alloca will be used for the allocation, - * otherwise a standard dynamic memory allocation will occur. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t kfind( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - - - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * This function uses the KMP algorithm and offers O(M+N) performance but - * must allocate a temporary buffer of size pat.sizeof to do so. If it is - * available on the target system, alloca will be used for the allocation, - * otherwise a standard dynamic memory allocation will occur. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t kfind( Elem[] buf, Elem[] pat, Pred2E pred = Pred2E.init ); -} -else -{ - template kfind_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - foreach( size_t pos, Elem cur; buf ) - { - if( pred( cur, pat ) ) - return pos; - } - return buf.length; - } - - - size_t fn( Elem[] buf, Elem[] pat, Pred pred = Pred.init ) - { - if( buf.length == 0 || - pat.length == 0 || - buf.length < pat.length ) - { - return buf.length; - } - - static if( is( alloca ) ) - { - size_t[] func = (cast(size_t*) alloca( (pat.length + 1) * size_t.sizeof ))[0 .. pat.length + 1]; - } - else - { - size_t[] func = new size_t[pat.length + 1]; - scope( exit ) delete func; // force cleanup - } - - func[0] = 0; - - // - // building prefix-function - // - for( size_t m = 0, i = 1 ; i < pat.length ; ++i ) - { - while( ( m > 0 ) && !pred( pat[m], pat[i] ) ) - m = func[m - 1]; - if( pred( pat[m], pat[i] ) ) - ++m; - func[i] = m; - } - - // - // searching - // - for( size_t m = 0, i = 0; i < buf.length; ++i ) - { - while( ( m > 0 ) && !pred( pat[m], buf[i] ) ) - m = func[m - 1]; - if( pred( pat[m], buf[i] ) ) - { - ++m; - if( m == pat.length ) - { - return i - pat.length + 1; - } - } - } - - return buf.length; - } - } - - - template kfind( Buf, Pat ) - { - size_t kfind( Buf buf, Pat pat ) - { - return kfind_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template kfind( Buf, Pat, Pred ) - { - size_t kfind( Buf buf, Pat pat, Pred pred ) - { - return kfind_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - // find element - assert( kfind( "", 'a' ) == 0 ); - assert( kfind( "abc", 'a' ) == 0 ); - assert( kfind( "abc", 'b' ) == 1 ); - assert( kfind( "abc", 'c' ) == 2 ); - assert( kfind( "abc", 'd' ) == 3 ); - - // null parameters - assert( kfind( "", "" ) == 0 ); - assert( kfind( "a", "" ) == 1 ); - assert( kfind( "", "a" ) == 0 ); - - // exact match - assert( kfind( "abc", "abc" ) == 0 ); - - // simple substring match - assert( kfind( "abc", "a" ) == 0 ); - assert( kfind( "abca", "a" ) == 0 ); - assert( kfind( "abc", "b" ) == 1 ); - assert( kfind( "abc", "c" ) == 2 ); - assert( kfind( "abc", "d" ) == 3 ); - - // multi-char substring match - assert( kfind( "abc", "ab" ) == 0 ); - assert( kfind( "abcab", "ab" ) == 0 ); - assert( kfind( "abc", "bc" ) == 1 ); - assert( kfind( "abc", "ac" ) == 3 ); - assert( kfind( "abrabracadabra", "abracadabra" ) == 3 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// KMP Reverse Find -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LP)buf.length .. 0$(RB), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * This function uses the KMP algorithm and offers O(M+N) performance but - * must allocate a temporary buffer of size pat.sizeof to do so. If it is - * available on the target system, alloca will be used for the allocation, - * otherwise a standard dynamic memory allocation will occur. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t krfind( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - - - /** - * Performs a linear scan of buf from $(LP)buf.length .. 0$(RB), returning - * the index of the first element matching pat, or buf.length if no match - * was found. Comparisons will be performed using the supplied predicate - * or '==' if none is supplied. - * - * This function uses the KMP algorithm and offers O(M+N) performance but - * must allocate a temporary buffer of size pat.sizeof to do so. If it is - * available on the target system, alloca will be used for the allocation, - * otherwise a standard dynamic memory allocation will occur. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t krfind( Elem[] buf, Elem[] pat, Pred2E pred = Pred2E.init ); -} -else -{ - template krfind_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - if( buf.length == 0 ) - return buf.length; - - size_t pos = buf.length; - - do - { - if( pred( buf[--pos], pat ) ) - return pos; - } while( pos > 0 ); - return buf.length; - } - - - size_t fn( Elem[] buf, Elem[] pat, Pred pred = Pred.init ) - { - if( buf.length == 0 || - pat.length == 0 || - buf.length < pat.length ) - { - return buf.length; - } - - static if( is( alloca ) ) - { - size_t[] func = (cast(size_t*) alloca( (pat.length + 1) * size_t.sizeof ))[0 .. pat.length + 1]; - } - else - { - size_t[] func = new size_t[pat.length + 1]; - scope( exit ) delete func; // force cleanup - } - - func[$ - 1] = 0; - - // - // building prefix-function - // - for( size_t m = 0, i = pat.length - 1; i > 0; --i ) - { - while( ( m > 0 ) && !pred( pat[length - m - 1], pat[i - 1] ) ) - m = func[length - m]; - if( pred( pat[length - m - 1], pat[i - 1] ) ) - ++m; - func[i - 1] = m; - } - - // - // searching - // - size_t m = 0; - size_t i = buf.length; - do - { - --i; - while( ( m > 0 ) && !pred( pat[length - m - 1], buf[i] ) ) - m = func[length - m - 1]; - if( pred( pat[length - m - 1], buf[i] ) ) - { - ++m; - if ( m == pat.length ) - { - return i; - } - } - } while( i > 0 ); - - return buf.length; - } - } - - - template krfind( Buf, Pat ) - { - size_t krfind( Buf buf, Pat pat ) - { - return krfind_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template krfind( Buf, Pat, Pred ) - { - size_t krfind( Buf buf, Pat pat, Pred pred ) - { - return krfind_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - // rfind element - assert( krfind( "", 'a' ) == 0 ); - assert( krfind( "abc", 'a' ) == 0 ); - assert( krfind( "abc", 'b' ) == 1 ); - assert( krfind( "abc", 'c' ) == 2 ); - assert( krfind( "abc", 'd' ) == 3 ); - - // null parameters - assert( krfind( "", "" ) == 0 ); - assert( krfind( "a", "" ) == 1 ); - assert( krfind( "", "a" ) == 0 ); - - // exact match - assert( krfind( "abc", "abc" ) == 0 ); - - // simple substring match - assert( krfind( "abc", "a" ) == 0 ); - assert( krfind( "abca", "a" ) == 3 ); - assert( krfind( "abc", "b" ) == 1 ); - assert( krfind( "abc", "c" ) == 2 ); - assert( krfind( "abc", "d" ) == 3 ); - - // multi-char substring match - assert( krfind( "abc", "ab" ) == 0 ); - assert( krfind( "abcab", "ab" ) == 3 ); - assert( krfind( "abc", "bc" ) == 1 ); - assert( krfind( "abc", "ac" ) == 3 ); - assert( krfind( "abracadabrabra", "abracadabra" ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Find-If -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element where pred returns true. - * - * Params: - * buf = The array to search. - * pred = The evaluation predicate, which should return true if the - * element is a valid match and false if not. This predicate - * may be any callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t findIf( Elem[] buf, Pred1E pred ); -} -else -{ - template findIf_( Elem, Pred ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred ) - { - foreach( size_t pos, Elem cur; buf ) - { - if( pred( cur ) ) - return pos; - } - return buf.length; - } - } - - - template findIf( Buf, Pred ) - { - size_t findIf( Buf buf, Pred pred ) - { - return findIf_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( findIf( "bcecg", ( char c ) { return c == 'a'; } ) == 5 ); - assert( findIf( "bcecg", ( char c ) { return c == 'b'; } ) == 0 ); - assert( findIf( "bcecg", ( char c ) { return c == 'c'; } ) == 1 ); - assert( findIf( "bcecg", ( char c ) { return c == 'd'; } ) == 5 ); - assert( findIf( "bcecg", ( char c ) { return c == 'g'; } ) == 4 ); - assert( findIf( "bcecg", ( char c ) { return c == 'h'; } ) == 5 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Reverse Find-If -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LP)buf.length .. 0$(RB), returning - * the index of the first element where pred returns true. - * - * Params: - * buf = The array to search. - * pred = The evaluation predicate, which should return true if the - * element is a valid match and false if not. This predicate - * may be any callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t rfindIf( Elem[] buf, Pred1E pred ); -} -else -{ - template rfindIf_( Elem, Pred ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred ) - { - if( buf.length == 0 ) - return buf.length; - - size_t pos = buf.length; - - do - { - if( pred( buf[--pos] ) ) - return pos; - } while( pos > 0 ); - return buf.length; - } - } - - - template rfindIf( Buf, Pred ) - { - size_t rfindIf( Buf buf, Pred pred ) - { - return rfindIf_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( rfindIf( "bcecg", ( char c ) { return c == 'a'; } ) == 5 ); - assert( rfindIf( "bcecg", ( char c ) { return c == 'b'; } ) == 0 ); - assert( rfindIf( "bcecg", ( char c ) { return c == 'c'; } ) == 3 ); - assert( rfindIf( "bcecg", ( char c ) { return c == 'd'; } ) == 5 ); - assert( rfindIf( "bcecg", ( char c ) { return c == 'g'; } ) == 4 ); - assert( rfindIf( "bcecg", ( char c ) { return c == 'h'; } ) == 5 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Find Adjacent -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * the index of the first element that compares equal to the next element - * in the sequence. Comparisons will be performed using the supplied - * predicate or '==' if none is supplied. - * - * Params: - * buf = The array to scan. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t findAdj( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - -} -else -{ - template findAdj_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred = Pred.init ) - { - if( buf.length < 2 ) - return buf.length; - - Elem sav = buf[0]; - - foreach( size_t pos, Elem cur; buf[1 .. $] ) - { - if( pred( cur, sav ) ) - return pos; - sav = cur; - } - return buf.length; - } - } - - - template findAdj( Buf ) - { - size_t findAdj( Buf buf ) - { - return findAdj_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template findAdj( Buf, Pred ) - { - size_t findAdj( Buf buf, Pred pred ) - { - return findAdj_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( findAdj( "aabcdef" ) == 0 ); - assert( findAdj( "abcddef" ) == 3 ); - assert( findAdj( "abcdeff" ) == 5 ); - assert( findAdj( "abcdefg" ) == 7 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Contains -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * true if an element matching pat is found. Comparisons will be performed - * using the supplied predicate or '<' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * True if an element equivalent to pat is found, false if not. - */ - size_t contains( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - - - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * true if a sequence matching pat is found. Comparisons will be performed - * using the supplied predicate or '<' if none is supplied. - * - * Params: - * buf = The array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * True if an element equivalent to pat is found, false if not. - */ - size_t contains( Elem[] buf, Elem[] pat, Pred2E pred = Pred2E.init ); -} -else -{ - template contains( Buf, Pat ) - { - size_t contains( Buf buf, Pat pat ) - { - return find( buf, pat ) != buf.length; - } - } - - - template contains( Buf, Pat, Pred ) - { - size_t contains( Buf buf, Pat pat, Pred pred ) - { - return find( buf, pat, pred ) != buf.length; - } - } - - - debug( UnitTest ) - { - unittest - { - // find element - assert( !contains( "", 'a' ) ); - assert( contains( "abc", 'a' ) ); - assert( contains( "abc", 'b' ) ); - assert( contains( "abc", 'c' ) ); - assert( !contains( "abc", 'd' ) ); - - // null parameters - assert( !contains( "", "" ) ); - assert( !contains( "a", "" ) ); - assert( !contains( "", "a" ) ); - - // exact match - assert( contains( "abc", "abc" ) ); - - // simple substring match - assert( contains( "abc", "a" ) ); - assert( contains( "abca", "a" ) ); - assert( contains( "abc", "b" ) ); - assert( contains( "abc", "c" ) ); - assert( !contains( "abc", "d" ) ); - - // multi-char substring match - assert( contains( "abc", "ab" ) ); - assert( contains( "abcab", "ab" ) ); - assert( contains( "abc", "bc" ) ); - assert( !contains( "abc", "ac" ) ); - assert( contains( "abrabracadabra", "abracadabra" ) ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Mismatch -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a parallel linear scan of bufA and bufB from $(LB)0 .. N$(RP) - * where N = min$(LP)bufA.length, bufB.length$(RP), returning the index of - * the first element in bufA which does not match the corresponding element - * in bufB or N if no mismatch occurs. Comparisons will be performed using - * the supplied predicate or '==' if none is supplied. - * - * Params: - * bufA = The array to evaluate. - * bufB = The array to match against. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first mismatch or N if the first N elements of bufA - * and bufB match, where N = min$(LP)bufA.length, bufB.length$(RP). - */ - size_t mismatch( Elem[] bufA, Elem[] bufB, Pred2E pred = Pred2E.init ); - -} -else -{ - template mismatch_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] bufA, Elem[] bufB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - - while( posA < bufA.length && posB < bufB.length ) - { - if( !pred( bufB[posB], bufA[posA] ) ) - break; - ++posA, ++posB; - } - return posA; - } - } - - - template mismatch( BufA, BufB ) - { - size_t mismatch( BufA bufA, BufB bufB ) - { - return mismatch_!(ElemTypeOf!(BufA)).fn( bufA, bufB ); - } - } - - - template mismatch( BufA, BufB, Pred ) - { - size_t mismatch( BufA bufA, BufB bufB, Pred pred ) - { - return mismatch_!(ElemTypeOf!(BufA), Pred).fn( bufA, bufB, pred ); - } - } - - debug( UnitTest ) - { - unittest - { - assert( mismatch( "a", "abcdefg" ) == 1 ); - assert( mismatch( "abcdefg", "a" ) == 1 ); - - assert( mismatch( "x", "abcdefg" ) == 0 ); - assert( mismatch( "abcdefg", "x" ) == 0 ); - - assert( mismatch( "xbcdefg", "abcdefg" ) == 0 ); - assert( mismatch( "abcdefg", "xbcdefg" ) == 0 ); - - assert( mismatch( "abcxefg", "abcdefg" ) == 3 ); - assert( mismatch( "abcdefg", "abcxefg" ) == 3 ); - - assert( mismatch( "abcdefx", "abcdefg" ) == 6 ); - assert( mismatch( "abcdefg", "abcdefx" ) == 6 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Count -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * a count of the number of elements matching pat. Comparisons will be - * performed using the supplied predicate or '==' if none is supplied. - * - * Params: - * buf = The array to scan. - * pat = The pattern to match. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The number of elements matching pat. - */ - size_t count( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); - -} -else -{ - template count_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - size_t cnt = 0; - - foreach( size_t pos, Elem cur; buf ) - { - if( pred( cur, pat ) ) - ++cnt; - } - return cnt; - } - } - - - template count( Buf, Pat ) - { - size_t count( Buf buf, Pat pat ) - { - return count_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template count( Buf, Pat, Pred ) - { - size_t count( Buf buf, Pat pat, Pred pred ) - { - return count_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( count( "gbbbi", 'a' ) == 0 ); - assert( count( "gbbbi", 'g' ) == 1 ); - assert( count( "gbbbi", 'b' ) == 3 ); - assert( count( "gbbbi", 'i' ) == 1 ); - assert( count( "gbbbi", 'd' ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Count-If -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), returning - * a count of the number of elements where pred returns true. - * - * Params: - * buf = The array to scan. - * pred = The evaluation predicate, which should return true if the - * element is a valid match and false if not. This predicate - * may be any callable type. - * - * Returns: - * The number of elements where pred returns true. - */ - size_t countIf( Elem[] buf, Pred1E pred = Pred1E.init ); - -} -else -{ - template countIf_( Elem, Pred ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred ) - { - size_t cnt = 0; - - foreach( size_t pos, Elem cur; buf ) - { - if( pred( cur ) ) - ++cnt; - } - return cnt; - } - } - - - template countIf( Buf, Pred ) - { - size_t countIf( Buf buf, Pred pred ) - { - return countIf_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( countIf( "gbbbi", ( char c ) { return c == 'a'; } ) == 0 ); - assert( countIf( "gbbbi", ( char c ) { return c == 'g'; } ) == 1 ); - assert( countIf( "gbbbi", ( char c ) { return c == 'b'; } ) == 3 ); - assert( countIf( "gbbbi", ( char c ) { return c == 'i'; } ) == 1 ); - assert( countIf( "gbbbi", ( char c ) { return c == 'd'; } ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Replace -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), replacing - * occurrences of pat with val. Comparisons will be performed using the - * supplied predicate or '==' if none is supplied. - * - * Params: - * buf = The array to scan. - * pat = The pattern to match. - * val = The value to substitute. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The number of elements replaced. - */ - size_t replace( Elem[] buf, Elem pat, Elem val, Pred2E pred = Pred2E.init ); - -} -else -{ - template replace_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Elem val, Pred pred = Pred.init ) - { - size_t cnt = 0; - - foreach( size_t pos, inout Elem cur; buf ) - { - if( pred( cur, pat ) ) - { - cur = val; - ++cnt; - } - } - return cnt; - } - } - - - template replace( Buf, Elem ) - { - size_t replace( Buf buf, Elem pat, Elem val ) - { - return replace_!(ElemTypeOf!(Buf)).fn( buf, pat, val ); - } - } - - - template replace( Buf, Elem, Pred ) - { - size_t replace( Buf buf, Elem pat, Elem val, Pred pred ) - { - return replace_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, val, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( replace( "gbbbi".dup, 'a', 'b' ) == 0 ); - assert( replace( "gbbbi".dup, 'g', 'h' ) == 1 ); - assert( replace( "gbbbi".dup, 'b', 'c' ) == 3 ); - assert( replace( "gbbbi".dup, 'i', 'j' ) == 1 ); - assert( replace( "gbbbi".dup, 'd', 'e' ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Replace-If -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), replacing - * elements where pred returns true with val. - * - * Params: - * buf = The array to scan. - * val = The value to substitute. - * pred = The evaluation predicate, which should return true if the - * element is a valid match and false if not. This predicate - * may be any callable type. - * - * Returns: - * The number of elements replaced. - */ - size_t replaceIf( Elem[] buf, Elem val, Pred2E pred = Pred2E.init ); - -} -else -{ - template replaceIf_( Elem, Pred ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem val, Pred pred ) - { - size_t cnt = 0; - - foreach( size_t pos, inout Elem cur; buf ) - { - if( pred( cur ) ) - { - cur = val; - ++cnt; - } - } - return cnt; - } - } - - - template replaceIf( Buf, Elem, Pred ) - { - size_t replaceIf( Buf buf, Elem val, Pred pred ) - { - return replaceIf_!(ElemTypeOf!(Buf), Pred).fn( buf, val, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( replaceIf( "gbbbi".dup, 'b', ( char c ) { return c == 'a'; } ) == 0 ); - assert( replaceIf( "gbbbi".dup, 'h', ( char c ) { return c == 'g'; } ) == 1 ); - assert( replaceIf( "gbbbi".dup, 'c', ( char c ) { return c == 'b'; } ) == 3 ); - assert( replaceIf( "gbbbi".dup, 'j', ( char c ) { return c == 'i'; } ) == 1 ); - assert( replaceIf( "gbbbi".dup, 'e', ( char c ) { return c == 'd'; } ) == 0 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Remove -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), moving all - * elements matching pat to the end of the sequence. The relative order of - * elements not matching pat will be preserved. Comparisons will be - * performed using the supplied predicate or '==' if none is supplied. - * - * Params: - * buf = The array to scan. This parameter is not marked 'inout' - * to allow temporary slices to be modified. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on the - * result of this operation, even though it may be viewed as a - * side-effect. - * pat = The pattern to match against. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The number of elements that do not match pat. - */ - size_t remove( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); -} -else -{ - template remove_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - size_t cnt = 0; - - for( size_t pos = 0, len = buf.length; pos < len; ++pos ) - { - if( pred( buf[pos], pat ) ) - ++cnt; - else - exch( pos, pos - cnt ); - } - return buf.length - cnt; - } - } - - - template remove( Buf, Pat ) - { - size_t remove( Buf buf, Pat pat ) - { - return remove_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template remove( Buf, Pat, Pred ) - { - size_t remove( Buf buf, Pat pat, Pred pred ) - { - return remove_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf, char pat, size_t num ) - { - assert( remove( buf, pat ) == num ); - foreach( pos, cur; buf ) - { - assert( pos < num ? cur != pat : cur == pat ); - } - } - - test( "abcdefghij".dup, 'x', 10 ); - test( "xabcdefghi".dup, 'x', 9 ); - test( "abcdefghix".dup, 'x', 9 ); - test( "abxxcdefgh".dup, 'x', 8 ); - test( "xaxbcdxxex".dup, 'x', 5 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Remove-If -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), moving all - * elements that satisfy pred to the end of the sequence. The relative - * order of elements that do not satisfy pred will be preserved. - * - * Params: - * buf = The array to scan. This parameter is not marked 'inout' - * to allow temporary slices to be modified. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on the - * result of this operation, even though it may be viewed as a - * side-effect. - * pred = The evaluation predicate, which should return true if the - * element satisfies the condition and false if not. This - * predicate may be any callable type. - * - * Returns: - * The number of elements that do not satisfy pred. - */ - size_t removeIf( Elem[] buf, Pred1E pred ); -} -else -{ - template removeIf_( Elem, Pred ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - size_t cnt = 0; - - for( size_t pos = 0, len = buf.length; pos < len; ++pos ) - { - if( pred( buf[pos] ) ) - ++cnt; - else - exch( pos, pos - cnt ); - } - return buf.length - cnt; - } - } - - - template removeIf( Buf, Pred ) - { - size_t removeIf( Buf buf, Pred pred ) - { - return removeIf_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf, bool delegate( char ) dg, size_t num ) - { - assert( removeIf( buf, dg ) == num ); - foreach( pos, cur; buf ) - { - assert( pos < num ? !dg( cur ) : dg( cur ) ); - } - } - - test( "abcdefghij".dup, ( char c ) { return c == 'x'; }, 10 ); - test( "xabcdefghi".dup, ( char c ) { return c == 'x'; }, 9 ); - test( "abcdefghix".dup, ( char c ) { return c == 'x'; }, 9 ); - test( "abxxcdefgh".dup, ( char c ) { return c == 'x'; }, 8 ); - test( "xaxbcdxxex".dup, ( char c ) { return c == 'x'; }, 5 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unique -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a linear scan of buf from $(LB)0 .. buf.length$(RP), moving all - * but the first element of each consecutive group of duplicate elements to - * the end of the sequence. The relative order of all remaining elements - * will be preserved. Comparisons will be performed using the supplied - * predicate or '==' if none is supplied. - * - * Params: - * buf = The array to scan. This parameter is not marked 'inout' - * to allow temporary slices to be modified. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on the - * result of this operation, even though it may be viewed as a - * side-effect. - * pred = The evaluation predicate, which should return true if e1 is - * equal to e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The number of unique elements in buf. - */ - size_t unique( Elem[] buf, Pred2E pred = Pred2E.init ); -} -else -{ - template unique_( Elem, Pred = IsEqual!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - if( buf.length < 2 ) - return buf.length; - - size_t cnt = 0; - Elem pat = buf[0]; - - for( size_t pos = 1, len = buf.length; pos < len; ++pos ) - { - if( pred( buf[pos], pat ) ) - ++cnt; - else - { - pat = buf[pos]; - exch( pos, pos - cnt ); - } - } - return buf.length - cnt; - } - } - - - template unique( Buf ) - { - size_t unique( Buf buf ) - { - return unique_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template unique( Buf, Pred ) - { - size_t unique( Buf buf, Pred pred ) - { - return unique_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf, char[] pat ) - { - assert( unique( buf ) == pat.length ); - foreach( pos, cur; pat ) - { - assert( buf[pos] == cur ); - } - } - - test( "abcdefghij".dup, "abcdefghij" ); - test( "aabcdefghi".dup, "abcdefghi" ); - test( "bcdefghijj".dup, "bcdefghij" ); - test( "abccdefghi".dup, "abcdefghi" ); - test( "abccdddefg".dup, "abcdefg" ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Partition -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Partitions buf such that all elements that satisfy pred will be placed - * before the elements that do not satisfy pred. The algorithm is not - * required to be stable. - * - * Params: - * buf = The array to partition. This parameter is not marked 'inout' - * to allow temporary slices to be sorted. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on - * the result of this operation, even though it may be viewed - * as a side-effect. - * pred = The evaluation predicate, which should return true if the - * element satisfies the condition and false if not. This - * predicate may be any callable type. - * - * Returns: - * The number of elements that satisfy pred. - */ - size_t partition( Elem[] buf, Pred1E pred ); -} -else -{ - template partition_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - size_t fn( Elem[] buf, Pred pred ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - if( buf.length < 2 ) - return 0; - - size_t l = 0, - r = buf.length, - i = l, - j = r - 1; - - while( true ) - { - while( i < r && pred( buf[i] ) ) - ++i; - while( j > l && !pred( buf[j] ) ) - --j; - if( i >= j ) - break; - exch( i++, j-- ); - } - return i; - } - } - - - template partition( Buf, Pred ) - { - size_t partition( Buf buf, Pred pred ) - { - return partition_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf, bool delegate( char ) dg, size_t num ) - { - assert( partition( buf, dg ) == num ); - for( size_t pos = 0; pos < buf.length; ++pos ) - { - assert( pos < num ? dg( buf[pos] ) : !dg( buf[pos] ) ); - } - } - - test( "abcdefg".dup, ( char c ) { return c < 'a'; }, 0 ); - test( "gfedcba".dup, ( char c ) { return c < 'a'; }, 0 ); - test( "abcdefg".dup, ( char c ) { return c < 'h'; }, 7 ); - test( "gfedcba".dup, ( char c ) { return c < 'h'; }, 7 ); - test( "abcdefg".dup, ( char c ) { return c < 'd'; }, 3 ); - test( "gfedcba".dup, ( char c ) { return c < 'd'; }, 3 ); - test( "bbdaabc".dup, ( char c ) { return c < 'c'; }, 5 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Select -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Partitions buf with num - 1 as a pivot such that the first num elements - * will be less than or equal to the remaining elements in the array. - * Comparisons will be performed using the supplied predicate or '<' if - * none is supplied. The algorithm is not required to be stable. - * - * Params: - * buf = The array to partition. This parameter is not marked 'inout' - * to allow temporary slices to be sorted. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on - * the result of this operation, even though it may be viewed - * as a side-effect. - * num = The number of elements which are considered significant in - * this array, where num - 1 is the pivot around which partial - * sorting will occur. For example, if num is buf.length / 2 - * then select will effectively partition the array around its - * median value, with the elements in the first half of the array - * evaluating as less than or equal to the elements in the second - * half. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the pivot point, which will be the lesser of num - 1 and - * buf.length. - */ - size_t select( Elem[] buf, Num num, Pred2E pred = Pred2E.init ); -} -else -{ - template select_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - size_t fn( Elem[] buf, size_t num, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - if( buf.length < 2 ) - return buf.length; - - size_t l = 0, - r = buf.length - 1, - k = num; - - while( r > l ) - { - size_t i = l, - j = r - 1; - Elem v = buf[r]; - - while( true ) - { - while( i < r && pred( buf[i], v ) ) - ++i; - while( j > l && pred( v, buf[j] ) ) - --j; - if( i >= j ) - break; - exch( i++, j-- ); - } - exch( i, r ); - if( i >= k ) - r = i - 1; - if( i <= k ) - l = i + 1; - } - return num - 1; - } - } - - - template select( Buf, Num ) - { - size_t select( Buf buf, Num num ) - { - return select_!(ElemTypeOf!(Buf)).fn( buf, num ); - } - } - - - template select( Buf, Num, Pred ) - { - size_t select( Buf buf, Num num, Pred pred ) - { - return select_!(ElemTypeOf!(Buf), Pred).fn( buf, num, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - char[] buf = "efedcaabca".dup; - size_t num = buf.length / 2; - size_t pos = select( buf, num ); - - assert( pos == num - 1 ); - foreach( cur; buf[0 .. pos] ) - assert( cur <= buf[pos] ); - foreach( cur; buf[pos .. $] ) - assert( cur >= buf[pos] ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Sort -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Sorts buf using the supplied predicate or '<' if none is supplied. The - * algorithm is not required to be stable. The current implementation is - * based on quicksort, but uses a three-way partitioning scheme to improve - * performance for ranges containing duplicate values (Bentley and McIlroy, - * 1993). - * - * Params: - * buf = The array to sort. This parameter is not marked 'inout' to - * allow temporary slices to be sorted. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on - * the result of this operation, even though it may be viewed - * as a side-effect. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - */ - void sort( Elem[] buf, Pred2E pred = Pred2E.init ); -} -else -{ - template sort_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - void fn( Elem[] buf, Pred pred = Pred.init ) - { - bool equiv( Elem p1, Elem p2 ) - { - return !pred( p1, p2 ) && !pred( p2, p1 ); - } - - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - void quicksort( size_t l, size_t r ) - { - if( r <= l ) - return; - - // This implementation of quicksort improves upon the classic - // algorithm by partitioning the array into three parts, one - // each for keys smaller than, equal to, and larger than the - // partitioning element, v: - // - // |--less than v--|--equal to v--|--greater than v--[v] - // l j i r - // - // This approach sorts ranges containing duplicate elements - // more quickly. During processing, the following situation - // is maintained: - // - // |--equal--|--less--|--[###]--|--greater--|--equal--[v] - // l p i j q r - // - // Please note that this implementation varies from the typical - // algorithm by replacing the use of signed index values with - // unsigned values. - - Elem v = buf[r]; - size_t i = l, - j = r, - p = l, - q = r; - - while( true ) - { - while( pred( buf[i], v ) ) - ++i; - while( pred( v, buf[--j] ) ) - if( j == l ) break; - if( i >= j ) - break; - exch( i, j ); - if( equiv( buf[i], v ) ) - exch( p++, i ); - if( equiv( v, buf[j] ) ) - exch( --q, j ); - ++i; - } - exch( i, r ); - if( p < i ) - { - j = i - 1; - for( size_t k = l; k < p; k++, j-- ) - exch( k, j ); - quicksort( l, j ); - } - if( ++i < q ) - { - for( size_t k = r - 1; k >= q; k--, i++ ) - exch( k, i ); - quicksort( i, r ); - } - } - - if( buf.length > 1 ) - { - quicksort( 0, buf.length - 1 ); - } - } - } - - - template sort( Buf ) - { - void sort( Buf buf ) - { - return sort_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template sort( Buf, Pred ) - { - void sort( Buf buf, Pred pred ) - { - return sort_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf ) - { - sort( buf ); - char sav = buf[0]; - foreach( cur; buf ) - { - assert( cur >= sav ); - sav = cur; - } - } - - test( "mkcvalsidivjoaisjdvmzlksvdjioawmdsvmsdfefewv".dup ); - test( "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf".dup ); - test( "the quick brown fox jumped over the lazy dog".dup ); - test( "abcdefghijklmnopqrstuvwxyz".dup ); - test( "zyxwvutsrqponmlkjihgfedcba".dup ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Lower Bound -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a binary search of buf, returning the index of the first - * location where pat may be inserted without disrupting sort order. If - * the sort order of pat precedes all elements in buf then 0 will be - * returned. If the sort order of pat succeeds the largest element in buf - * then buf.length will be returned. Comparisons will be performed using - * the supplied predicate or '<' if none is supplied. - * - * Params: - * buf = The sorted array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t lbound( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); -} -else -{ - template lbound_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - size_t beg = 0, - end = buf.length, - mid = end / 2; - - while( beg < end ) - { - if( pred( buf[mid], pat ) ) - beg = mid + 1; - else - end = mid; - mid = beg + ( end - beg ) / 2; - } - return mid; - } - } - - - template lbound( Buf, Pat ) - { - size_t lbound( Buf buf, Pat pat ) - { - return lbound_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template lbound( Buf, Pat, Pred ) - { - size_t lbound( Buf buf, Pat pat, Pred pred ) - { - return lbound_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( lbound( "bcefg", 'a' ) == 0 ); - assert( lbound( "bcefg", 'h' ) == 5 ); - assert( lbound( "bcefg", 'd' ) == 2 ); - assert( lbound( "bcefg", 'e' ) == 2 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Upper Bound -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a binary search of buf, returning the index of the first - * location beyond where pat may be inserted without disrupting sort order. - * If the sort order of pat precedes all elements in buf then 0 will be - * returned. If the sort order of pat succeeds the largest element in buf - * then buf.length will be returned. Comparisons will be performed using - * the supplied predicate or '<' if none is supplied. - * - * Params: - * buf = The sorted array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * The index of the first match or buf.length if no match was found. - */ - size_t ubound( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); -} -else -{ - template ubound_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - size_t fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - size_t beg = 0, - end = buf.length, - mid = end / 2; - - while( beg < end ) - { - if( !pred( pat, buf[mid] ) ) - beg = mid + 1; - else - end = mid; - mid = beg + ( end - beg ) / 2; - } - return mid; - } - } - - - template ubound( Buf, Pat ) - { - size_t ubound( Buf buf, Pat pat ) - { - return ubound_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template ubound( Buf, Pat, Pred ) - { - size_t ubound( Buf buf, Pat pat, Pred pred ) - { - return ubound_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( ubound( "bcefg", 'a' ) == 0 ); - assert( ubound( "bcefg", 'h' ) == 5 ); - assert( ubound( "bcefg", 'd' ) == 2 ); - assert( ubound( "bcefg", 'e' ) == 3 ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Binary Search -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a binary search of buf, returning true if an element equivalent - * to pat is found. Comparisons will be performed using the supplied - * predicate or '<' if none is supplied. - * - * Params: - * buf = The sorted array to search. - * pat = The pattern to search for. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * True if an element equivalent to pat is found, false if not. - */ - bool bsearch( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); -} -else -{ - template bsearch_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred) ); - - - bool fn( Elem[] buf, Elem pat, Pred pred = Pred.init ) - { - size_t pos = lbound( buf, pat, pred ); - return pos < buf.length && !( pat < buf[pos] ); - } - } - - - template bsearch( Buf, Pat ) - { - bool bsearch( Buf buf, Pat pat ) - { - return bsearch_!(ElemTypeOf!(Buf)).fn( buf, pat ); - } - } - - - template bsearch( Buf, Pat, Pred ) - { - bool bsearch( Buf buf, Pat pat, Pred pred ) - { - return bsearch_!(ElemTypeOf!(Buf), Pred).fn( buf, pat, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( !bsearch( "bcefg", 'a' ) ); - assert( bsearch( "bcefg", 'b' ) ); - assert( bsearch( "bcefg", 'c' ) ); - assert( !bsearch( "bcefg", 'd' ) ); - assert( bsearch( "bcefg", 'e' ) ); - assert( bsearch( "bcefg", 'f' ) ); - assert( bsearch( "bcefg", 'g' ) ); - assert( !bsearch( "bcefg", 'h' ) ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Includes -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Performs a parallel linear scan of setA and setB from $(LB)0 .. N$(RP) - * where N = min$(LP)setA.length, setB.length$(RP), returning true if setA - * includes all elements in setB and false if not. Both setA and setB are - * required to be sorted, and duplicates in setB require an equal number of - * duplicates in setA. Comparisons will be performed using the supplied - * predicate or '<' if none is supplied. - * - * Params: - * setA = The sorted array to evaluate. - * setB = The sorted array to match against. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * true if setA includes all elements in setB, false if not. - */ - bool includes( Elem[] setA, Elem[] setB, Pred2E pred = Pred2E.init ); -} -else -{ - template includes_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - bool fn( Elem[] setA, Elem[] setB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - - while( posA < setA.length && posB < setB.length ) - { - if( pred( setB[posB], setA[posA] ) ) - return false; - else if( pred( setA[posA], setB[posB] ) ) - ++posA; - else - ++posA, ++posB; - } - return posB == setB.length; - } - } - - - template includes( BufA, BufB ) - { - bool includes( BufA setA, BufB setB ) - { - return includes_!(ElemTypeOf!(BufA)).fn( setA, setB ); - } - } - - - template includes( BufA, BufB, Pred ) - { - bool includes( BufA setA, BufB setB, Pred pred ) - { - return includes_!(ElemTypeOf!(BufA), Pred).fn( setA, setB, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( includes( "abcdefg", "a" ) ); - assert( includes( "abcdefg", "g" ) ); - assert( includes( "abcdefg", "d" ) ); - assert( includes( "abcdefg", "abcdefg" ) ); - assert( includes( "aaaabbbcdddefgg", "abbbcdefg" ) ); - - assert( !includes( "abcdefg", "aaabcdefg" ) ); - assert( !includes( "abcdefg", "abcdefggg" ) ); - assert( !includes( "abbbcdefg", "abbbbcdefg" ) ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Union Of -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Computes the union of setA and setB as a set operation and returns the - * retult in a new sorted array. Both setA and setB are required to be - * sorted. If either setA or setB contain duplicates, the result will - * contain the larger number of duplicates from setA and setB. When an - * overlap occurs, entries will be copied from setA. Comparisons will be - * performed using the supplied predicate or '<' if none is supplied. - * - * Params: - * setA = The first sorted array to evaluate. - * setB = The second sorted array to evaluate. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * A new array containing the union of setA and setB. - */ - Elem[] unionOf( Elem[] setA, Elem[] setB, Pred2E pred = Pred2E.init ); -} -else -{ - template unionOf_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - Elem[] fn( Elem[] setA, Elem[] setB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - Elem[] setU; - - while( posA < setA.length && posB < setB.length ) - { - if( pred( setA[posA], setB[posB] ) ) - setU ~= setA[posA++]; - else if( pred( setB[posB], setA[posA] ) ) - setU ~= setB[posB++]; - else - setU ~= setA[posA++], posB++; - } - setU ~= setA[posA .. $]; - setU ~= setB[posB .. $]; - return setU; - } - } - - - template unionOf( BufA, BufB ) - { - ElemTypeOf!(BufA)[] unionOf( BufA setA, BufB setB ) - { - return unionOf_!(ElemTypeOf!(BufA)).fn( setA, setB ); - } - } - - - template unionOf( BufA, BufB, Pred ) - { - ElemTypeOf!(BufA)[] unionOf( BufA setA, BufB setB, Pred pred ) - { - return unionOf_!(ElemTypeOf!(BufA), Pred).fn( setA, setB, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( unionOf( "", "" ) == "" ); - assert( unionOf( "abc", "def" ) == "abcdef" ); - assert( unionOf( "abbbcd", "aadeefg" ) == "aabbbcdeefg" ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Intersection Of -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Computes the intersection of setA and setB as a set operation and - * returns the retult in a new sorted array. Both setA and setB are - * required to be sorted. If either setA or setB contain duplicates, the - * result will contain the smaller number of duplicates from setA and setB. - * All entries will be copied from setA. Comparisons will be performed - * using the supplied predicate or '<' if none is supplied. - * - * Params: - * setA = The first sorted array to evaluate. - * setB = The second sorted array to evaluate. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * A new array containing the intersection of setA and setB. - */ - Elem[] intersectionOf( Elem[] setA, Elem[] setB, Pred2E pred = Pred2E.init ); -} -else -{ - template intersectionOf_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - Elem[] fn( Elem[] setA, Elem[] setB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - Elem[] setI; - - while( posA < setA.length && posB < setB.length ) - { - if( pred( setA[posA], setB[posB] ) ) - ++posA; - else if( pred( setB[posB], setA[posA] ) ) - ++posB; - else - setI ~= setA[posA++], posB++; - } - return setI; - } - } - - - template intersectionOf( BufA, BufB ) - { - ElemTypeOf!(BufA)[] intersectionOf( BufA setA, BufB setB ) - { - return intersectionOf_!(ElemTypeOf!(BufA)).fn( setA, setB ); - } - } - - - template intersectionOf( BufA, BufB, Pred ) - { - ElemTypeOf!(BufA)[] intersectionOf( BufA setA, BufB setB, Pred pred ) - { - return intersectionOf_!(ElemTypeOf!(BufA), Pred).fn( setA, setB, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( intersectionOf( "", "" ) == "" ); - assert( intersectionOf( "abc", "def" ) == "" ); - assert( intersectionOf( "abbbcd", "aabdddeefg" ) == "abd" ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Missing From -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Returns a new array containing all elements in setA which are not - * present in setB. Both setA and setB are required to be sorted. - * Comparisons will be performed using the supplied predicate or '<' - * if none is supplied. - * - * Params: - * setA = The first sorted array to evaluate. - * setB = The second sorted array to evaluate. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * A new array containing the elements in setA that are not in setB. - */ - Elem[] missingFrom( Elem[] setA, Elem[] setB, Pred2E pred = Pred2E.init ); -} -else -{ - template missingFrom_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - Elem[] fn( Elem[] setA, Elem[] setB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - Elem[] setM; - - while( posA < setA.length && posB < setB.length ) - { - if( pred( setA[posA], setB[posB] ) ) - setM ~= setA[posA++]; - else if( pred( setB[posB], setA[posA] ) ) - ++posB; - else - ++posA, ++posB; - } - setM ~= setA[posA .. $]; - return setM; - } - } - - - template missingFrom( BufA, BufB ) - { - ElemTypeOf!(BufA)[] missingFrom( BufA setA, BufB setB ) - { - return missingFrom_!(ElemTypeOf!(BufA)).fn( setA, setB ); - } - } - - - template missingFrom( BufA, BufB, Pred ) - { - ElemTypeOf!(BufA)[] missingFrom( BufA setA, BufB setB, Pred pred ) - { - return missingFrom_!(ElemTypeOf!(BufA), Pred).fn( setA, setB, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( missingFrom( "", "" ) == "" ); - assert( missingFrom( "", "abc" ) == "" ); - assert( missingFrom( "abc", "" ) == "abc" ); - assert( missingFrom( "abc", "abc" ) == "" ); - assert( missingFrom( "abc", "def" ) == "abc" ); - assert( missingFrom( "abbbcd", "abd" ) == "bbc" ); - assert( missingFrom( "abcdef", "bc" ) == "adef" ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Difference Of -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Returns a new array containing all elements in setA which are not - * present in setB and the elements in setB which are not present in - * setA. Both setA and setB are required to be sorted. Comparisons - * will be performed using the supplied predicate or '<' if none is - * supplied. - * - * Params: - * setA = The first sorted array to evaluate. - * setB = The second sorted array to evaluate. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - * - * Returns: - * A new array containing the elements in setA that are not in setB - * and the elements in setB that are not in setA. - */ - Elem[] differenceOf( Elem[] setA, Elem[] setB, Pred2E pred = Pred2E.init ); -} -else -{ - template differenceOf_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - Elem[] fn( Elem[] setA, Elem[] setB, Pred pred = Pred.init ) - { - size_t posA = 0, - posB = 0; - Elem[] setD; - - while( posA < setA.length && posB < setB.length ) - { - if( pred( setA[posA], setB[posB] ) ) - setD ~= setA[posA++]; - else if( pred( setB[posB], setA[posA] ) ) - setD ~= setB[posB++]; - else - ++posA, ++posB; - } - setD ~= setA[posA .. $]; - setD ~= setB[posB .. $]; - return setD; - } - } - - - template differenceOf( BufA, BufB ) - { - ElemTypeOf!(BufA)[] differenceOf( BufA setA, BufB setB ) - { - return differenceOf_!(ElemTypeOf!(BufA)).fn( setA, setB ); - } - } - - - template differenceOf( BufA, BufB, Pred ) - { - ElemTypeOf!(BufA)[] differenceOf( BufA setA, BufB setB, Pred pred ) - { - return differenceOf_!(ElemTypeOf!(BufA), Pred).fn( setA, setB, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - assert( differenceOf( "", "" ) == "" ); - assert( differenceOf( "", "abc" ) == "abc" ); - assert( differenceOf( "abc", "" ) == "abc" ); - assert( differenceOf( "abc", "abc" ) == "" ); - assert( differenceOf( "abc", "def" ) == "abcdef" ); - assert( differenceOf( "abbbcd", "abd" ) == "bbc" ); - assert( differenceOf( "abd", "abbbcd" ) == "bbc" ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Make Heap -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Converts buf to a heap using the supplied predicate or '<' if none is - * supplied. - * - * Params: - * buf = The array to convert. This parameter is not marked 'inout' to - * allow temporary slices to be sorted. As buf is not resized in - * any way, omitting the 'inout' qualifier has no effect on the - * result of this operation, even though it may be viewed as a - * side-effect. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - */ - void makeHeap( Elem[] buf, Pred2E pred = Pred2E.init ); -} -else -{ - template makeHeap_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - void fn( Elem[] buf, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - void fixDown( size_t pos, size_t end ) - { - if( end <= pos ) - return; - while( pos <= ( end - 1 ) / 2 ) - { - size_t nxt = 2 * pos + 1; - - if( nxt < end && pred( buf[nxt], buf[nxt + 1] ) ) - ++nxt; - if( !pred( buf[pos], buf[nxt] ) ) - break; - exch( pos, nxt ); - pos = nxt; - } - } - - if( buf.length < 2 ) - return; - - size_t end = buf.length - 1, - pos = end / 2 + 2; - - do - { - fixDown( --pos, end ); - } while( pos > 0 ); - } - } - - - template makeHeap( Buf ) - { - void makeHeap( Buf buf ) - { - return makeHeap_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template makeHeap( Buf, Pred ) - { - void makeHeap( Buf buf, Pred pred ) - { - return makeHeap_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void basic( char[] buf ) - { - if( buf.length < 2 ) - return; - - size_t pos = 0, - end = buf.length - 1; - - while( pos <= ( end - 1 ) / 2 ) - { - assert( buf[pos] >= buf[2 * pos + 1] ); - if( 2 * pos + 1 < end ) - { - assert( buf[pos] >= buf[2 * pos + 2] ); - } - ++pos; - } - } - - void test( char[] buf ) - { - makeHeap( buf ); - basic( buf ); - } - - test( "mkcvalsidivjoaisjdvmzlksvdjioawmdsvmsdfefewv".dup ); - test( "asdfasdfasdfasdfasdfasdfasdfasdfasdfasdfasdf".dup ); - test( "the quick brown fox jumped over the lazy dog".dup ); - test( "abcdefghijklmnopqrstuvwxyz".dup ); - test( "zyxwvutsrqponmlkjihgfedcba".dup ); - test( "ba".dup ); - test( "a".dup ); - test( "".dup ); - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Push Heap -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Adds val to buf by appending it and adjusting it up the heap. - * - * Params: - * buf = The heap to modify. This parameter is marked 'inout' because - * buf.length will be altered. - * val = The element to push onto buf. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - */ - void pushHeap( inout Elem[] buf, Elem val, Pred2E pred = Pred2E.init ); -} -else -{ - template pushHeap_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - void fn( inout Elem[] buf, Elem val, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - void fixUp( size_t pos ) - { - if( pos < 1 ) - return; - size_t par = ( pos - 1 ) / 2; - while( pos > 0 && pred( buf[par], buf[pos] ) ) - { - exch( par, pos ); - pos = par; - par = ( pos - 1 ) / 2; - } - } - - buf ~= val; - if( buf.length > 1 ) - { - fixUp( buf.length - 1 ); - } - } - } - - - template pushHeap( Buf, Val ) - { - void pushHeap( inout Buf buf, Val val ) - { - return pushHeap_!(ElemTypeOf!(Buf)).fn( buf, val ); - } - } - - - template pushHeap( Buf, Val, Pred ) - { - void pushHeap( inout Buf buf, Val val, Pred pred ) - { - return pushHeap_!(ElemTypeOf!(Buf), Pred).fn( buf, val, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void basic( char[] buf ) - { - if( buf.length < 2 ) - return; - - size_t pos = 0, - end = buf.length - 1; - - while( pos <= ( end - 1 ) / 2 ) - { - assert( buf[pos] >= buf[2 * pos + 1] ); - if( 2 * pos + 1 < end ) - { - assert( buf[pos] >= buf[2 * pos + 2] ); - } - ++pos; - } - } - - char[] buf; - - foreach( cur; "abcdefghijklmnopqrstuvwxyz" ) - { - pushHeap( buf, cur ); - basic( buf ); - } - - buf.length = 0; - - foreach( cur; "zyxwvutsrqponmlkjihgfedcba" ) - { - pushHeap( buf, cur ); - basic( buf ); - } - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Pop Heap -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Removes the top element from buf by swapping it with the bottom element, - * adjusting it down the heap, and reducing the length of buf by one. - * - * Params: - * buf = The heap to modify. This parameter is marked 'inout' because - * buf.length will be altered. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - */ - void popHeap( inout Elem[] buf, Pred2E pred = Pred2E.init ); -} -else -{ - template popHeap_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - void fn( inout Elem[] buf, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - void fixDown( size_t pos, size_t end ) - { - if( end <= pos ) - return; - while( pos <= ( end - 1 ) / 2 ) - { - size_t nxt = 2 * pos + 1; - - if( nxt < end && pred( buf[nxt], buf[nxt + 1] ) ) - ++nxt; - if( !pred( buf[pos], buf[nxt] ) ) - break; - exch( pos, nxt ); - pos = nxt; - } - } - - if( buf.length > 1 ) - { - exch( 0, buf.length - 1 ); - fixDown( 0, buf.length - 2 ); - } - if( buf.length > 0 ) - { - buf.length = buf.length - 1; - } - } - } - - - template popHeap( Buf ) - { - void popHeap( inout Buf buf ) - { - return popHeap_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template popHeap( Buf, Pred ) - { - void popHeap( inout Buf buf, Pred pred ) - { - return popHeap_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - void test( char[] buf ) - { - if( buf.length < 2 ) - return; - - size_t pos = 0, - end = buf.length - 1; - - while( pos <= ( end - 1 ) / 2 ) - { - assert( buf[pos] >= buf[2 * pos + 1] ); - if( 2 * pos + 1 < end ) - { - assert( buf[pos] >= buf[2 * pos + 2] ); - } - ++pos; - } - } - - char[] buf = "zyxwvutsrqponmlkjihgfedcba".dup; - - while( buf.length > 0 ) - { - popHeap( buf ); - test( buf ); - } - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Sort Heap -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - /** - * Sorts buf as a heap using the supplied predicate or '<' if none is - * supplied. Calling makeHeap and sortHeap on an array in succession - * has the effect of sorting the array using the heapsort algorithm. - * - * Params: - * buf = The heap to sort. This parameter is not marked 'inout' to - * allow temporary slices to be sorted. As buf is not resized - * in any way, omitting the 'inout' qualifier has no effect on - * the result of this operation, even though it may be viewed - * as a side-effect. - * pred = The evaluation predicate, which should return true if e1 is - * less than e2 and false if not. This predicate may be any - * callable type. - */ - void sortHeap( Elem[] buf, Pred2E pred = Pred2E.init ); -} -else -{ - template sortHeap_( Elem, Pred = IsLess!(Elem) ) - { - static assert( isCallableType!(Pred ) ); - - - void fn( Elem[] buf, Pred pred = Pred.init ) - { - // NOTE: Indexes are passed instead of references because DMD does - // not inline the reference-based version. - void exch( size_t p1, size_t p2 ) - { - Elem t = buf[p1]; - buf[p1] = buf[p2]; - buf[p2] = t; - } - - void fixDown( size_t pos, size_t end ) - { - if( end <= pos ) - return; - while( pos <= ( end - 1 ) / 2 ) - { - size_t nxt = 2 * pos + 1; - - if( nxt < end && pred( buf[nxt], buf[nxt + 1] ) ) - ++nxt; - if( !pred( buf[pos], buf[nxt] ) ) - break; - exch( pos, nxt ); - pos = nxt; - } - } - - if( buf.length < 2 ) - return; - - size_t pos = buf.length - 1; - - while( pos > 0 ) - { - exch( 0, pos ); - fixDown( 0, --pos ); - } - } - } - - - template sortHeap( Buf ) - { - void sortHeap( Buf buf ) - { - return sortHeap_!(ElemTypeOf!(Buf)).fn( buf ); - } - } - - - template sortHeap( Buf, Pred ) - { - void sortHeap( Buf buf, Pred pred ) - { - return sortHeap_!(ElemTypeOf!(Buf), Pred).fn( buf, pred ); - } - } - - - debug( UnitTest ) - { - unittest - { - char[] buf = "zyxwvutsrqponmlkjihgfedcba".dup; - - sortHeap( buf ); - char sav = buf[0]; - foreach( cur; buf ) - { - assert( cur >= sav ); - sav = cur; - } - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Atomic.d --- a/tango/tango/core/Atomic.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1644 +0,0 @@ -/** - * The atomic module is intended to provide some basic support for lock-free - * concurrent programming. Some common operations are defined, each of which - * may be performed using the specified memory barrier or a less granular - * barrier if the hardware does not support the version requested. This - * model is based on a design by Alexander Terekhov as outlined in - * - * this thread. Another useful reference for memory ordering on modern - * architectures is this - * article by Paul McKenney. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Atomic; - - -//////////////////////////////////////////////////////////////////////////////// -// Synchronization Options -//////////////////////////////////////////////////////////////////////////////// - - -/** - * Memory synchronization flag. If the supplied option is not available on the - * current platform then a stronger method will be used instead. - */ -enum msync -{ - raw, /// not sequenced - hlb, /// hoist-load barrier - hsb, /// hoist-store barrier - slb, /// sink-load barrier - ssb, /// sink-store barrier - acq, /// hoist-load + hoist-store barrier - rel, /// sink-load + sink-store barrier - seq, /// fully sequenced (acq + rel) -} - - -//////////////////////////////////////////////////////////////////////////////// -// Internal Type Checking -//////////////////////////////////////////////////////////////////////////////// - - -private -{ - version( DDoc ) {} else - { - import tango.core.Traits; - - - template isValidAtomicType( T ) - { - const bool isValidAtomicType = T.sizeof == byte.sizeof || - T.sizeof == short.sizeof || - T.sizeof == int.sizeof || - T.sizeof == long.sizeof; - } - - - template isValidNumericType( T ) - { - const bool isValidNumericType = isIntegerType!( T ) || - isPointerType!( T ); - } - - - template isHoistOp( msync ms ) - { - const bool isHoistOp = ms == msync.hlb || - ms == msync.hsb || - ms == msync.acq || - ms == msync.seq; - } - - - template isSinkOp( msync ms ) - { - const bool isSinkOp = ms == msync.slb || - ms == msync.ssb || - ms == msync.rel || - ms == msync.seq; - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// DDoc Documentation for Atomic Functions -//////////////////////////////////////////////////////////////////////////////// - - -version( DDoc ) -{ - //////////////////////////////////////////////////////////////////////////// - // Atomic Load - //////////////////////////////////////////////////////////////////////////// - - - /** - * Supported msync values: - * msync.raw - * msync.hlb - * msync.acq - * msync.seq - */ - template atomicLoad( msync ms, T ) - { - /** - * Refreshes the contents of 'val' from main memory. This operation is - * both lock-free and atomic. - * - * Params: - * val = The value to load. This value must be properly aligned. - * - * Returns: - * The loaded value. - */ - T atomicLoad( inout T val ) - { - return val; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store - //////////////////////////////////////////////////////////////////////////// - - - /** - * Supported msync values: - * msync.raw - * msync.ssb - * msync.acq - * msync.rel - * msync.seq - */ - template atomicStore( msync ms, T ) - { - /** - * Stores 'newval' to the memory referenced by 'val'. This operation - * is both lock-free and atomic. - * - * Params: - * val = The destination variable. - * newval = The value to store. - */ - void atomicStore( inout T val, T newval ) - { - - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic StoreIf - //////////////////////////////////////////////////////////////////////////// - - - /** - * Supported msync values: - * msync.raw - * msync.ssb - * msync.acq - * msync.rel - * msync.seq - */ - template atomicStoreIf( msync ms, T ) - { - /** - * Stores 'newval' to the memory referenced by 'val' if val is equal to - * 'equalTo'. This operation is both lock-free and atomic. - * - * Params: - * val = The destination variable. - * newval = The value to store. - * equalTo = The comparison value. - * - * Returns: - * true if the store occurred, false if not. - */ - bool atomicStoreIf( inout T val, T newval, T equalTo ) - { - return false; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Increment - //////////////////////////////////////////////////////////////////////////// - - - /** - * Supported msync values: - * msync.raw - * msync.ssb - * msync.acq - * msync.rel - * msync.seq - */ - template atomicIncrement( msync ms, T ) - { - /** - * This operation is only legal for built-in value and pointer types, - * and is equivalent to an atomic "val = val + 1" operation. This - * function exists to facilitate use of the optimized increment - * instructions provided by some architecures. If no such instruction - * exists on the target platform then the behavior will perform the - * operation using more traditional means. This operation is both - * lock-free and atomic. - * - * Params: - * val = The value to increment. - * - * Returns: - * The result of an atomicLoad of val immediately following the - * increment operation. This value is not required to be equal to the - * newly stored value. Thus, competing writes are allowed to occur - * between the increment and successive load operation. - */ - T atomicIncrement( inout T val ) - { - return val; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Decrement - //////////////////////////////////////////////////////////////////////////// - - - /** - * Supported msync values: - * msync.raw - * msync.ssb - * msync.acq - * msync.rel - * msync.seq - */ - template atomicDecrement( msync ms, T ) - { - /** - * This operation is only legal for built-in value and pointer types, - * and is equivalent to an atomic "val = val - 1" operation. This - * function exists to facilitate use of the optimized decrement - * instructions provided by some architecures. If no such instruction - * exists on the target platform then the behavior will perform the - * operation using more traditional means. This operation is both - * lock-free and atomic. - * - * Params: - * val = The value to decrement. - * - * Returns: - * The result of an atomicLoad of val immediately following the - * increment operation. This value is not required to be equal to the - * newly stored value. Thus, competing writes are allowed to occur - * between the increment and successive load operation. - */ - T atomicDecrement( inout T val ) - { - return val; - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// x86 Atomic Function Implementation -//////////////////////////////////////////////////////////////////////////////// - - -else version( D_InlineAsm_X86 ) -{ - version( X86 ) - { - version( BuildInfo ) - { - pragma( msg, "tango.core.Atomic: using IA-32 inline asm" ); - } - - version = Has32BitOps; - version = Has64BitCAS; - } - version( X86_64 ) - { - version( BuildInfo ) - { - pragma( msg, "tango.core.Atomic: using AMD64 inline asm" ); - } - - version = Has64BitOps; - } - - private - { - //////////////////////////////////////////////////////////////////////// - // x86 Value Requirements - //////////////////////////////////////////////////////////////////////// - - - // NOTE: Strictly speaking, the x86 supports atomic operations on - // unaligned values. However, this is far slower than the - // common case, so such behavior should be prohibited. - template atomicValueIsProperlyAligned( T ) - { - bool atomicValueIsProperlyAligned( size_t addr ) - { - return addr % T.sizeof == 0; - } - } - - - //////////////////////////////////////////////////////////////////////// - // x86 Synchronization Requirements - //////////////////////////////////////////////////////////////////////// - - - // NOTE: While x86 loads have acquire semantics for stores, it appears - // that independent loads may be reordered by some processors - // (notably the AMD64). This implies that the hoist-load barrier - // op requires an ordering instruction, which also extends this - // requirement to acquire ops (though hoist-store should not need - // one if support is added for this later). However, since no - // modern architectures will reorder dependent loads to occur - // before the load they depend on (except the Alpha), raw loads - // are actually a possible means of ordering specific sequences - // of loads in some instances. The original atomic<> - // implementation provides a 'ddhlb' ordering specifier for - // data-dependent loads to handle this situation, but as there - // are no plans to support the Alpha there is no reason to add - // that option here. - // - // For reference, the old behavior (acquire semantics for loads) - // required a memory barrier if: ms == msync.seq || isSinkOp!(ms) - template needsLoadBarrier( msync ms ) - { - const bool needsLoadBarrier = ms != msync.raw; - } - - - // NOTE: x86 stores implicitly have release semantics so a membar is only - // necessary on acquires. - template needsStoreBarrier( msync ms ) - { - const bool needsStoreBarrier = ms == msync.seq || isHoistOp!(ms); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Load - //////////////////////////////////////////////////////////////////////////// - - - template atomicLoad( msync ms = msync.seq, T ) - { - T atomicLoad( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof == byte.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 1 Byte Load - //////////////////////////////////////////////////////////////// - - - static if( needsLoadBarrier!(ms) ) - { - volatile asm - { - mov BL, 42; - mov AL, 42; - mov ECX, val; - lock; - cmpxchg [ECX], BL; - } - } - else - { - volatile - { - return val; - } - } - } - else static if( T.sizeof == short.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 2 Byte Load - //////////////////////////////////////////////////////////////// - - static if( needsLoadBarrier!(ms) ) - { - volatile asm - { - mov BX, 42; - mov AX, 42; - mov ECX, val; - lock; - cmpxchg [ECX], BX; - } - } - else - { - volatile - { - return val; - } - } - } - else static if( T.sizeof == int.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 4 Byte Load - //////////////////////////////////////////////////////////////// - - - static if( needsLoadBarrier!(ms) ) - { - volatile asm - { - mov EBX, 42; - mov EAX, 42; - mov ECX, val; - lock; - cmpxchg [ECX], EBX; - } - } - else - { - volatile - { - return val; - } - } - } - else static if( T.sizeof == long.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 8 Byte Load - //////////////////////////////////////////////////////////////// - - - version( Has64BitOps ) - { - //////////////////////////////////////////////////////////// - // 8 Byte Load on 64-Bit Processor - //////////////////////////////////////////////////////////// - - - static if( needsLoadBarrier!(ms) ) - { - volatile asm - { - mov RAX, val; - lock; - mov RAX, [RAX]; - } - } - else - { - volatile - { - return val; - } - } - } - else - { - //////////////////////////////////////////////////////////// - // 8 Byte Load on 32-Bit Processor - //////////////////////////////////////////////////////////// - - - pragma( msg, "This operation is only available on 64-bit platforms." ); - static assert( false ); - } - } - else - { - //////////////////////////////////////////////////////////////// - // Not a 1, 2, 4, or 8 Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store - //////////////////////////////////////////////////////////////////////////// - - - template atomicStore( msync ms = msync.seq, T ) - { - void atomicStore( inout T val, T newval ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof == byte.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 1 Byte Store - //////////////////////////////////////////////////////////////// - - - static if( needsStoreBarrier!(ms) ) - { - volatile asm - { - mov EAX, val; - mov BL, newval; - lock; - xchg [EAX], BL; - } - } - else - { - volatile asm - { - mov EAX, val; - mov BL, newval; - mov [EAX], BL; - } - } - } - else static if( T.sizeof == short.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 2 Byte Store - //////////////////////////////////////////////////////////////// - - - static if( needsStoreBarrier!(ms) ) - { - volatile asm - { - mov EAX, val; - mov BX, newval; - lock; - xchg [EAX], BX; - } - } - else - { - volatile asm - { - mov EAX, val; - mov BX, newval; - mov [EAX], BX; - } - } - } - else static if( T.sizeof == int.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 4 Byte Store - //////////////////////////////////////////////////////////////// - - - static if( needsStoreBarrier!(ms) ) - { - volatile asm - { - mov EAX, val; - mov EBX, newval; - lock; - xchg [EAX], EBX; - } - } - else - { - volatile asm - { - mov EAX, val; - mov EBX, newval; - mov [EAX], EBX; - } - } - } - else static if( T.sizeof == long.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 8 Byte Store - //////////////////////////////////////////////////////////////// - - - version( Has64BitOps ) - { - //////////////////////////////////////////////////////////// - // 8 Byte Store on 64-Bit Processor - //////////////////////////////////////////////////////////// - - - static if( needsStoreBarrier!(ms) ) - { - volatile asm - { - mov RAX, val; - mov RBX, newval; - lock; - xchg [RAX], RBX; - } - } - else - { - volatile asm - { - mov RAX, val; - mov RBX, newval; - mov [RAX], RBX; - } - } - } - else - { - //////////////////////////////////////////////////////////// - // 8 Byte Store on 32-Bit Processor - //////////////////////////////////////////////////////////// - - - pragma( msg, "This operation is only available on 64-bit platforms." ); - static assert( false ); - } - } - else - { - //////////////////////////////////////////////////////////////// - // Not a 1, 2, 4, or 8 Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store If - //////////////////////////////////////////////////////////////////////////// - - - template atomicStoreIf( msync ms = msync.seq, T ) - { - bool atomicStoreIf( inout T val, T newval, T equalTo ) - in - { - // NOTE: 32 bit x86 systems support 8 byte CAS, which only requires - // 4 byte alignment, so use size_t as the align type here. - static if( T.sizeof > size_t.sizeof ) - assert( atomicValueIsProperlyAligned!(size_t)( cast(size_t) &val ) ); - else - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof == byte.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 1 Byte StoreIf - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov BL, newval; - mov AL, equalTo; - mov ECX, val; - lock; // lock always needed to make this op atomic - cmpxchg [ECX], BL; - setz AL; - } - } - else static if( T.sizeof == short.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 2 Byte StoreIf - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov BX, newval; - mov AX, equalTo; - mov ECX, val; - lock; // lock always needed to make this op atomic - cmpxchg [ECX], BX; - setz AL; - } - } - else static if( T.sizeof == int.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 4 Byte StoreIf - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EBX, newval; - mov EAX, equalTo; - mov ECX, val; - lock; // lock always needed to make this op atomic - cmpxchg [ECX], EBX; - setz AL; - } - } - else static if( T.sizeof == long.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 8 Byte StoreIf - //////////////////////////////////////////////////////////////// - - - version( Has64BitOps ) - { - //////////////////////////////////////////////////////////// - // 8 Byte StoreIf on 64-Bit Processor - //////////////////////////////////////////////////////////// - - - volatile asm - { - mov RBX, newval; - mov RAX, equalTo; - mov RCX, val; - lock; // lock always needed to make this op atomic - cmpxchg [RCX], RBX; - setz AL; - } - } - else version( Has64BitCAS ) - { - //////////////////////////////////////////////////////////// - // 8 Byte StoreIf on 32-Bit Processor - //////////////////////////////////////////////////////////// - - - volatile asm - { - lea EDI, newval; - mov EBX, [EDI]; - mov ECX, 4[EDI]; - lea EDI, equalTo; - mov EAX, [EDI]; - mov EDX, 4[EDI]; - mov EDI, val; - lock; // lock always needed to make this op atomic - cmpxch8b [EDI]; - setz AL; - } - } - } - else - { - //////////////////////////////////////////////////////////////// - // Not a 1, 2, 4, or 8 Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Increment - //////////////////////////////////////////////////////////////////////////// - - - template atomicIncrement( msync ms = msync.seq, T ) - { - // - // NOTE: This operation is only valid for integer or pointer types - // - static assert( isValidNumericType!(T) ); - - - T atomicIncrement( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof == byte.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 1 Byte Increment - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - inc [EAX]; - mov AL, [EAX]; - } - } - else static if( T.sizeof == short.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 2 Byte Increment - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - inc [EAX]; - mov AX, [EAX]; - } - } - else static if( T.sizeof == int.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 4 Byte Increment - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - inc [EAX]; - mov EAX, [EAX]; - } - } - else static if( T.sizeof == long.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 8 Byte Increment - //////////////////////////////////////////////////////////////// - - - version( Has64BitOps ) - { - //////////////////////////////////////////////////////////// - // 8 Byte Increment on 64-Bit Processor - //////////////////////////////////////////////////////////// - - - volatile asm - { - mov RAX, val; - lock; // lock always needed to make this op atomic - inc [RAX]; - mov RAX, [RAX]; - } - } - else - { - //////////////////////////////////////////////////////////// - // 8 Byte Increment on 32-Bit Processor - //////////////////////////////////////////////////////////// - - - pragma( msg, "This operation is only available on 64-bit platforms." ); - static assert( false ); - } - } - else - { - //////////////////////////////////////////////////////////////// - // Not a 1, 2, 4, or 8 Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Decrement - //////////////////////////////////////////////////////////////////////////// - - - template atomicDecrement( msync ms = msync.seq, T ) - { - // - // NOTE: This operation is only valid for integer or pointer types - // - static assert( isValidNumericType!(T) ); - - - T atomicDecrement( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof == byte.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 1 Byte Decrement - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - dec [EAX]; - mov AL, [EAX]; - } - } - else static if( T.sizeof == short.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 2 Byte Decrement - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - dec [EAX]; - mov AX, [EAX]; - } - } - else static if( T.sizeof == int.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 4 Byte Decrement - //////////////////////////////////////////////////////////////// - - - volatile asm - { - mov EAX, val; - lock; // lock always needed to make this op atomic - dec [EAX]; - mov EAX, [EAX]; - } - } - else static if( T.sizeof == long.sizeof ) - { - //////////////////////////////////////////////////////////////// - // 8 Byte Decrement - //////////////////////////////////////////////////////////////// - - - version( Has64BitOps ) - { - //////////////////////////////////////////////////////////// - // 8 Byte Decrement on 64-Bit Processor - //////////////////////////////////////////////////////////// - - - volatile asm - { - mov RAX, val; - lock; // lock always needed to make this op atomic - dec [RAX]; - mov RAX, [RAX]; - } - } - else - { - //////////////////////////////////////////////////////////// - // 8 Byte Decrement on 32-Bit Processor - //////////////////////////////////////////////////////////// - - - pragma( msg, "This operation is only available on 64-bit platforms." ); - static assert( false ); - } - } - else - { - //////////////////////////////////////////////////////////////// - // Not a 1, 2, 4, or 8 Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } -} -else -{ - version( BuildInfo ) - { - pragma( msg, "tango.core.Atomic: using synchronized ops" ); - } - - private - { - //////////////////////////////////////////////////////////////////////// - // Default Value Requirements - //////////////////////////////////////////////////////////////////////// - - - template atomicValueIsProperlyAligned( T ) - { - bool atomicValueIsProperlyAligned( size_t addr ) - { - return addr % T.sizeof == 0; - } - } - - - //////////////////////////////////////////////////////////////////////// - // Default Synchronization Requirements - //////////////////////////////////////////////////////////////////////// - - - template needsLoadBarrier( msync ms ) - { - const bool needsLoadBarrier = ms != msync.raw; - } - - - template needsStoreBarrier( msync ms ) - { - const bool needsStoreBarrier = ms != msync.raw; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Load - //////////////////////////////////////////////////////////////////////////// - - - template atomicLoad( msync ms = msync.seq, T ) - { - T atomicLoad( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof <= (void*).sizeof ) - { - //////////////////////////////////////////////////////////////// - // <= (void*).sizeof Byte Load - //////////////////////////////////////////////////////////////// - - - static if( needsLoadBarrier!(ms) ) - { - synchronized - { - return val; - } - } - else - { - volatile - { - return val; - } - } - } - else - { - //////////////////////////////////////////////////////////////// - // > (void*).sizeof Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store - //////////////////////////////////////////////////////////////////////////// - - - template atomicStore( msync ms = msync.seq, T ) - { - void atomicStore( inout T val, T newval ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof <= (void*).sizeof ) - { - //////////////////////////////////////////////////////////////// - // <= (void*).sizeof Byte Store - //////////////////////////////////////////////////////////////// - - - static if( needsStoreBarrier!(ms) ) - { - synchronized - { - val = newval; - } - } - else - { - volatile - { - val = newval; - } - } - } - else - { - //////////////////////////////////////////////////////////////// - // > (void*).sizeof Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store If - //////////////////////////////////////////////////////////////////////////// - - - template atomicStoreIf( msync ms = msync.seq, T ) - { - bool atomicStoreIf( inout T val, T newval, T equalTo ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof <= (void*).sizeof ) - { - //////////////////////////////////////////////////////////////// - // <= (void*).sizeof Byte StoreIf - //////////////////////////////////////////////////////////////// - - - synchronized - { - if( val == equalTo ) - { - val = newval; - return true; - } - return false; - } - } - else - { - //////////////////////////////////////////////////////////////// - // > (void*).sizeof Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - ///////////////////////////////////////////////////////////////////////////// - // Atomic Increment - //////////////////////////////////////////////////////////////////////////// - - - template atomicIncrement( msync ms = msync.seq, T ) - { - // - // NOTE: This operation is only valid for integer or pointer types - // - static assert( isValidNumericType!(T) ); - - - T atomicIncrement( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof <= (void*).sizeof ) - { - //////////////////////////////////////////////////////////////// - // <= (void*).sizeof Byte Increment - //////////////////////////////////////////////////////////////// - - - synchronized - { - return ++val; - } - } - else - { - //////////////////////////////////////////////////////////////// - // > (void*).sizeof Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Decrement - //////////////////////////////////////////////////////////////////////////// - - - template atomicDecrement( msync ms = msync.seq, T ) - { - // - // NOTE: This operation is only valid for integer or pointer types - // - static assert( isValidNumericType!(T) ); - - - T atomicDecrement( inout T val ) - in - { - assert( atomicValueIsProperlyAligned!(T)( cast(size_t) &val ) ); - } - body - { - static if( T.sizeof <= (void*).sizeof ) - { - //////////////////////////////////////////////////////////////// - // <= (void*).sizeof Byte Decrement - //////////////////////////////////////////////////////////////// - - - synchronized - { - return --val; - } - } - else - { - //////////////////////////////////////////////////////////////// - // > (void*).sizeof Byte Type - //////////////////////////////////////////////////////////////// - - - pragma( msg, "Invalid template type specified." ); - static assert( false ); - } - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Atomic -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This struct represents a value which will be subject to competing access. - * All accesses to this value will be synchronized with main memory, and - * various memory barriers may be employed for instruction ordering. Any - * primitive type of size equal to or smaller than the memory bus size is - * allowed, so 32-bit machines may use values with size <= int.sizeof and - * 64-bit machines may use values with size <= long.sizeof. The one exception - * to this rule is that architectures that support DCAS will allow double-wide - * storeIf operations. The 32-bit x86 architecture, for example, supports - * 64-bit storeIf operations. - */ -struct Atomic( T ) -{ - //////////////////////////////////////////////////////////////////////////// - // Atomic Load - //////////////////////////////////////////////////////////////////////////// - - - template load( msync ms = msync.seq ) - { - static assert( ms == msync.raw || ms == msync.hlb || - ms == msync.acq || ms == msync.seq, - "ms must be one of: msync.raw, msync.hlb, msync.acq, msync.seq" ); - - /** - * Refreshes the contents of this value from main memory. This - * operation is both lock-free and atomic. - * - * Returns: - * The loaded value. - */ - T load() - { - return atomicLoad!(ms,T)( m_val ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic Store - //////////////////////////////////////////////////////////////////////////// - - - template store( msync ms = msync.seq ) - { - static assert( ms == msync.raw || ms == msync.ssb || - ms == msync.acq || ms == msync.rel || - ms == msync.seq, - "ms must be one of: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq" ); - - /** - * Stores 'newval' to the memory referenced by this value. This - * operation is both lock-free and atomic. - * - * Params: - * newval = The value to store. - */ - void store( T newval ) - { - atomicStore!(ms,T)( m_val, newval ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Atomic StoreIf - //////////////////////////////////////////////////////////////////////////// - - - template storeIf( msync ms = msync.seq ) - { - static assert( ms == msync.raw || ms == msync.ssb || - ms == msync.acq || ms == msync.rel || - ms == msync.seq, - "ms must be one of: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq" ); - - /** - * Stores 'newval' to the memory referenced by this value if val is - * equal to 'equalTo'. This operation is both lock-free and atomic. - * - * Params: - * newval = The value to store. - * equalTo = The comparison value. - * - * Returns: - * true if the store occurred, false if not. - */ - bool storeIf( T newval, T equalTo ) - { - return atomicStoreIf!(ms,T)( m_val, newval, equalTo ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // Numeric Functions - //////////////////////////////////////////////////////////////////////////// - - - /** - * The following additional functions are available for integer types. - */ - static if( isValidNumericType!(T) ) - { - //////////////////////////////////////////////////////////////////////// - // Atomic Increment - //////////////////////////////////////////////////////////////////////// - - - template increment( msync ms = msync.seq ) - { - static assert( ms == msync.raw || ms == msync.ssb || - ms == msync.acq || ms == msync.rel || - ms == msync.seq, - "ms must be one of: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq" ); - - /** - * This operation is only legal for built-in value and pointer - * types, and is equivalent to an atomic "val = val + 1" operation. - * This function exists to facilitate use of the optimized - * increment instructions provided by some architecures. If no - * such instruction exists on the target platform then the - * behavior will perform the operation using more traditional - * means. This operation is both lock-free and atomic. - * - * Returns: - * The result of an atomicLoad of val immediately following the - * increment operation. This value is not required to be equal to - * the newly stored value. Thus, competing writes are allowed to - * occur between the increment and successive load operation. - */ - T increment() - { - return atomicIncrement!(ms,T)( m_val ); - } - } - - - //////////////////////////////////////////////////////////////////////// - // Atomic Decrement - //////////////////////////////////////////////////////////////////////// - - - template decrement( msync ms = msync.seq ) - { - static assert( ms == msync.raw || ms == msync.ssb || - ms == msync.acq || ms == msync.rel || - ms == msync.seq, - "ms must be one of: msync.raw, msync.ssb, msync.acq, msync.rel, msync.seq" ); - - /** - * This operation is only legal for built-in value and pointer - * types, and is equivalent to an atomic "val = val - 1" operation. - * This function exists to facilitate use of the optimized - * decrement instructions provided by some architecures. If no - * such instruction exists on the target platform then the behavior - * will perform the operation using more traditional means. This - * operation is both lock-free and atomic. - * - * Returns: - * The result of an atomicLoad of val immediately following the - * increment operation. This value is not required to be equal to - * the newly stored value. Thus, competing writes are allowed to - * occur between the increment and successive load operation. - */ - T decrement() - { - return atomicDecrement!(ms,T)( m_val ); - } - } - } - -private: - T m_val; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Support Code for Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -private -{ - version( DDoc ) {} else - { - template testLoad( msync ms, T ) - { - void testLoad( T val = T.init + 1 ) - { - T base; - Atomic!(T) atom; - - assert( atom.load!(ms)() == base ); - base = val; - atom.m_val = val; - assert( atom.load!(ms)() == base ); - } - } - - - template testStore( msync ms, T ) - { - void testStore( T val = T.init + 1 ) - { - T base; - Atomic!(T) atom; - - assert( atom.m_val == base ); - base = val; - atom.store!(ms)( base ); - assert( atom.m_val == base ); - } - } - - - template testStoreIf( msync ms, T ) - { - void testStoreIf( T val = T.init + 1 ) - { - T base; - Atomic!(T) atom; - - assert( atom.m_val == base ); - base = val; - atom.storeIf!(ms)( base, val ); - assert( atom.m_val != base ); - atom.storeIf!(ms)( base, T.init ); - assert( atom.m_val == base ); - } - } - - - template testIncrement( msync ms, T ) - { - void testIncrement( T val = T.init + 1 ) - { - T base = val; - T incr = val; - Atomic!(T) atom; - - atom.m_val = val; - assert( atom.m_val == base && incr == base ); - base = cast(T)( base + 1 ); - incr = atom.increment!(ms)(); - assert( atom.m_val == base && incr == base ); - } - } - - - template testDecrement( msync ms, T ) - { - void testDecrement( T val = T.init + 1 ) - { - T base = val; - T decr = val; - Atomic!(T) atom; - - atom.m_val = val; - assert( atom.m_val == base && decr == base ); - base = cast(T)( base - 1 ); - decr = atom.decrement!(ms)(); - assert( atom.m_val == base && decr == base ); - } - } - - - template testType( T ) - { - void testType( T val = T.init +1 ) - { - testLoad!(msync.raw, T)( val ); - testLoad!(msync.hlb, T)( val ); - testLoad!(msync.acq, T)( val ); - testLoad!(msync.seq, T)( val ); - - testStore!(msync.raw, T)( val ); - testStore!(msync.ssb, T)( val ); - testStore!(msync.acq, T)( val ); - testStore!(msync.rel, T)( val ); - testStore!(msync.seq, T)( val ); - - testStoreIf!(msync.raw, T)( val ); - testStoreIf!(msync.ssb, T)( val ); - testStoreIf!(msync.acq, T)( val ); - testStoreIf!(msync.rel, T)( val ); - testStoreIf!(msync.seq, T)( val ); - - static if( isValidNumericType!(T) ) - { - testIncrement!(msync.raw, T)( val ); - testIncrement!(msync.ssb, T)( val ); - testIncrement!(msync.acq, T)( val ); - testIncrement!(msync.rel, T)( val ); - testIncrement!(msync.seq, T)( val ); - - testDecrement!(msync.raw, T)( val ); - testDecrement!(msync.ssb, T)( val ); - testDecrement!(msync.acq, T)( val ); - testDecrement!(msync.rel, T)( val ); - testDecrement!(msync.seq, T)( val ); - } - } - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - unittest - { - testType!(bool)(); - - testType!(byte)(); - testType!(ubyte)(); - - testType!(short)(); - testType!(ushort)(); - - testType!(int)(); - testType!(uint)(); - - int x; - testType!(void*)( &x ); - - version( Has64BitOps ) - { - testType!(long)(); - testType!(ulong)(); - } - else version( Has64BitCAS ) - { - testStoreIf!(msync.raw, long)(); - testStoreIf!(msync.ssb, long)(); - testStoreIf!(msync.acq, long)(); - testStoreIf!(msync.rel, long)(); - testStoreIf!(msync.seq, long)(); - - testStoreIf!(msync.raw, ulong)(); - testStoreIf!(msync.ssb, ulong)(); - testStoreIf!(msync.acq, ulong)(); - testStoreIf!(msync.rel, ulong)(); - testStoreIf!(msync.seq, ulong)(); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/BitArray.d --- a/tango/tango/core/BitArray.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,971 +0,0 @@ -/** - * This module contains a packed bit array implementation in the style of D's - * built-in dynamic arrays. - * - * Copyright: Copyright (C) 2005-2006 Digital Mars, www.digitalmars.com. - * All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Walter Bright, Sean Kelly - */ -module tango.core.BitArray; - - -private import tango.core.BitManip; - - -/** - * An array of bits. - */ -struct BitArray -{ - size_t len; - uint* ptr; - - - /** - * - */ - static BitArray opCall( bool[] bits ) - { - BitArray temp; - - temp.length = bits.length; - foreach( pos, val; bits ) - temp[pos] = val; - return temp; - } - - /** - * - */ - size_t length() - { - return len; - } - - - /** - * - */ - void length(size_t newlen) - { - if (newlen != len) - { - size_t olddim = dim(); - size_t newdim = (newlen + 31) / 32; - - if (newdim != olddim) - { - // Create a fake array so we can use D's realloc machinery - uint[] b = ptr[0 .. olddim]; - - b.length = newdim; // realloc - ptr = b.ptr; - if (newdim & 31) - { - // Set any pad bits to 0 - ptr[newdim - 1] &= ~(~0 << (newdim & 31)); - } - } - len = newlen; - } - } - - - /** - * - */ - size_t dim() - { - return (len + 31) / 32; - } - - - /** - * Support for array.dup property for BitArray. - */ - BitArray dup() - { - BitArray ba; - - uint[] b = ptr[0 .. dim].dup; - ba.len = len; - ba.ptr = b.ptr; - return ba; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a; - BitArray b; - int i; - - a.length = 3; - a[0] = 1; a[1] = 0; a[2] = 1; - b = a.dup; - assert(b.length == 3); - for (i = 0; i < 3; i++) - { - //printf("b[%d] = %d\n", i, b[i]); - assert(b[i] == (((i ^ 1) & 1) ? true : false)); - } - } - } - - - /** - * Set BitArray to contents of ba[] - */ - void opAssign(bool[] ba) - { - length = ba.length; - foreach (i, b; ba) - { - (*this)[i] = b; - } - } - - - /** - * Map BitArray onto v[], with numbits being the number of bits - * in the array. Does not copy the data. - * - * This is the inverse of opCast. - */ - void init(void[] v, size_t numbits) - in - { - assert(numbits <= v.length * 8); - assert((v.length & 3) == 0); - } - body - { - ptr = cast(uint*)v.ptr; - len = numbits; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b; - void[] v; - - v = cast(void[])a; - b.init(v, a.length); - - assert(b[0] == 1); - assert(b[1] == 0); - assert(b[2] == 1); - assert(b[3] == 0); - assert(b[4] == 1); - - a[0] = 0; - assert(b[0] == 0); - - assert(a == b); - } - } - - - /** - * Support for array.reverse property for BitArray. - */ - BitArray reverse() - out (result) - { - assert(result == *this); - } - body - { - if (len >= 2) - { - bool t; - size_t lo, hi; - - lo = 0; - hi = len - 1; - for (; lo < hi; lo++, hi--) - { - t = (*this)[lo]; - (*this)[lo] = (*this)[hi]; - (*this)[hi] = t; - } - } - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray b; - static bool[5] data = [1,0,1,1,0]; - int i; - - b = data; - b.reverse; - for (i = 0; i < data.length; i++) - { - assert(b[i] == data[4 - i]); - } - } - } - - - /** - * Support for array.sort property for BitArray. - */ - BitArray sort() - out (result) - { - assert(result == *this); - } - body - { - if (len >= 2) - { - size_t lo, hi; - - lo = 0; - hi = len - 1; - while (1) - { - while (1) - { - if (lo >= hi) - goto Ldone; - if ((*this)[lo] == true) - break; - lo++; - } - - while (1) - { - if (lo >= hi) - goto Ldone; - if ((*this)[hi] == false) - break; - hi--; - } - - (*this)[lo] = false; - (*this)[hi] = true; - - lo++; - hi--; - } - Ldone: - ; - } - return *this; - } - - - debug( UnitTest ) - { - unittest - { - static uint x = 0b1100011000; - static BitArray ba = { 10, &x }; - - ba.sort; - for (size_t i = 0; i < 6; i++) - assert(ba[i] == false); - for (size_t i = 6; i < 10; i++) - assert(ba[i] == true); - } - } - - - /** - * Support for foreach loops for BitArray. - */ - int opApply(int delegate(inout bool) dg) - { - int result; - - for (size_t i = 0; i < len; i++) - { - bool b = opIndex(i); - result = dg(b); - opIndexAssign(b,i); - if (result) - break; - } - return result; - } - - /** ditto */ - int opApply(int delegate(inout size_t, inout bool) dg) - { - int result; - - for (size_t i = 0; i < len; i++) - { - bool b = opIndex(i); - result = dg(i, b); - opIndexAssign(b,i); - if (result) - break; - } - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1]; - - int i; - foreach (b;a) - { - switch (i) - { - case 0: assert(b == true); break; - case 1: assert(b == false); break; - case 2: assert(b == true); break; - default: assert(0); - } - i++; - } - - foreach (j,b;a) - { - switch (j) - { - case 0: assert(b == true); break; - case 1: assert(b == false); break; - case 2: assert(b == true); break; - default: assert(0); - } - } - } - } - - - /** - * Support for operators == and != for bit arrays. - */ - int opEquals(BitArray a2) - { - int i; - - if (this.length != a2.length) - return 0; // not equal - byte *p1 = cast(byte*)this.ptr; - byte *p2 = cast(byte*)a2.ptr; - uint n = this.length / 8; - for (i = 0; i < n; i++) - { - if (p1[i] != p2[i]) - return 0; // not equal - } - - ubyte mask; - - n = this.length & 7; - mask = cast(ubyte)((1 << n) - 1); - //printf("i = %d, n = %d, mask = %x, %x, %x\n", i, n, mask, p1[i], p2[i]); - return (mask == 0) || (p1[i] & mask) == (p2[i] & mask); - } - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1]; - BitArray c = [1,0,1,0,1,0,1]; - BitArray d = [1,0,1,1,1]; - BitArray e = [1,0,1,0,1]; - - assert(a != b); - assert(a != c); - assert(a != d); - assert(a == e); - } - } - - - /** - * Implement comparison operators. - */ - int opCmp(BitArray a2) - { - uint len; - uint i; - - len = this.length; - if (a2.length < len) - len = a2.length; - ubyte* p1 = cast(ubyte*)this.ptr; - ubyte* p2 = cast(ubyte*)a2.ptr; - uint n = len / 8; - for (i = 0; i < n; i++) - { - if (p1[i] != p2[i]) - break; // not equal - } - for (uint j = i * 8; j < len; j++) - { ubyte mask = cast(ubyte)(1 << j); - int c; - - c = cast(int)(p1[i] & mask) - cast(int)(p2[i] & mask); - if (c) - return c; - } - return cast(int)this.len - cast(int)a2.length; - } - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1]; - BitArray c = [1,0,1,0,1,0,1]; - BitArray d = [1,0,1,1,1]; - BitArray e = [1,0,1,0,1]; - - assert(a > b); - assert(a >= b); - assert(a < c); - assert(a <= c); - assert(a < d); - assert(a <= d); - assert(a == e); - assert(a <= e); - assert(a >= e); - } - } - - - /** - * Convert to void[]. - */ - void[] opCast() - { - return cast(void[])ptr[0 .. dim]; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - void[] v = cast(void[])a; - - assert(v.length == a.dim * uint.sizeof); - } - } - - - /** - * Support for [$(I index)] operation for BitArray. - */ - bool opIndex(size_t i) - in - { - assert(i < len); - } - body - { - return cast(bool)bt(ptr, i); - } - - - /** - * Support for unary operator ~ for bit arrays. - */ - BitArray opCom() - { - auto dim = this.dim(); - - BitArray result; - - result.length = len; - for (size_t i = 0; i < dim; i++) - result.ptr[i] = ~this.ptr[i]; - if (len & 31) - result.ptr[dim - 1] &= ~(~0 << (len & 31)); - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = ~a; - - assert(b[0] == 0); - assert(b[1] == 1); - assert(b[2] == 0); - assert(b[3] == 1); - assert(b[4] == 0); - } - } - - - /** - * Support for binary operator & for bit arrays. - */ - BitArray opAnd(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - BitArray result; - - result.length = len; - for (size_t i = 0; i < dim; i++) - result.ptr[i] = this.ptr[i] & e2.ptr[i]; - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - BitArray c = a & b; - - assert(c[0] == 1); - assert(c[1] == 0); - assert(c[2] == 1); - assert(c[3] == 0); - assert(c[4] == 0); - } - } - - - /** - * Support for binary operator | for bit arrays. - */ - BitArray opOr(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - BitArray result; - - result.length = len; - for (size_t i = 0; i < dim; i++) - result.ptr[i] = this.ptr[i] | e2.ptr[i]; - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - BitArray c = a | b; - - assert(c[0] == 1); - assert(c[1] == 0); - assert(c[2] == 1); - assert(c[3] == 1); - assert(c[4] == 1); - } - } - - - /** - * Support for binary operator ^ for bit arrays. - */ - BitArray opXor(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - BitArray result; - - result.length = len; - for (size_t i = 0; i < dim; i++) - result.ptr[i] = this.ptr[i] ^ e2.ptr[i]; - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - BitArray c = a ^ b; - - assert(c[0] == 0); - assert(c[1] == 0); - assert(c[2] == 0); - assert(c[3] == 1); - assert(c[4] == 1); - } - } - - - /** - * Support for binary operator - for bit arrays. - * - * $(I a - b) for BitArrays means the same thing as $(I a & ~b). - */ - BitArray opSub(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - BitArray result; - - result.length = len; - for (size_t i = 0; i < dim; i++) - result.ptr[i] = this.ptr[i] & ~e2.ptr[i]; - return result; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - BitArray c = a - b; - - assert(c[0] == 0); - assert(c[1] == 0); - assert(c[2] == 0); - assert(c[3] == 0); - assert(c[4] == 1); - } - } - - - /** - * Support for binary operator ~ for bit arrays. - */ - BitArray opCat(bool b) - { - BitArray r; - - r = this.dup; - r.length = len + 1; - r[len] = b; - return r; - } - - - /** ditto */ - BitArray opCat_r(bool b) - { - BitArray r; - - r.length = len + 1; - r[0] = b; - for (size_t i = 0; i < len; i++) - r[1 + i] = (*this)[i]; - return r; - } - - - /** ditto */ - BitArray opCat(BitArray b) - { - BitArray r; - - r = this.dup(); - r ~= b; - return r; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0]; - BitArray b = [0,1,0]; - BitArray c; - - c = (a ~ b); - assert(c.length == 5); - assert(c[0] == 1); - assert(c[1] == 0); - assert(c[2] == 0); - assert(c[3] == 1); - assert(c[4] == 0); - - c = (a ~ true); - assert(c.length == 3); - assert(c[0] == 1); - assert(c[1] == 0); - assert(c[2] == 1); - - c = (false ~ a); - assert(c.length == 3); - assert(c[0] == 0); - assert(c[1] == 1); - assert(c[2] == 0); - } - } - - - /** - * Support for [$(I index)] operation for BitArray. - */ - bool opIndexAssign(bool b, size_t i) - in - { - assert(i < len); - } - body - { - if (b) - bts(ptr, i); - else - btr(ptr, i); - return b; - } - - - /** - * Support for operator &= bit arrays. - */ - BitArray opAndAssign(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - for (size_t i = 0; i < dim; i++) - ptr[i] &= e2.ptr[i]; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - a &= b; - assert(a[0] == 1); - assert(a[1] == 0); - assert(a[2] == 1); - assert(a[3] == 0); - assert(a[4] == 0); - } - } - - - /** - * Support for operator |= for bit arrays. - */ - BitArray opOrAssign(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - for (size_t i = 0; i < dim; i++) - ptr[i] |= e2.ptr[i]; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - a |= b; - assert(a[0] == 1); - assert(a[1] == 0); - assert(a[2] == 1); - assert(a[3] == 1); - assert(a[4] == 1); - } - } - - - /** - * Support for operator ^= for bit arrays. - */ - BitArray opXorAssign(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - for (size_t i = 0; i < dim; i++) - ptr[i] ^= e2.ptr[i]; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - a ^= b; - assert(a[0] == 0); - assert(a[1] == 0); - assert(a[2] == 0); - assert(a[3] == 1); - assert(a[4] == 1); - } - } - - - /** - * Support for operator -= for bit arrays. - * - * $(I a -= b) for BitArrays means the same thing as $(I a &= ~b). - */ - BitArray opSubAssign(BitArray e2) - in - { - assert(len == e2.length); - } - body - { - auto dim = this.dim(); - - for (size_t i = 0; i < dim; i++) - ptr[i] &= ~e2.ptr[i]; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b = [1,0,1,1,0]; - - a -= b; - assert(a[0] == 0); - assert(a[1] == 0); - assert(a[2] == 0); - assert(a[3] == 0); - assert(a[4] == 1); - } - } - - - /** - * Support for operator ~= for bit arrays. - */ - BitArray opCatAssign(bool b) - { - length = len + 1; - (*this)[len - 1] = b; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0,1,0,1]; - BitArray b; - - b = (a ~= true); - assert(a[0] == 1); - assert(a[1] == 0); - assert(a[2] == 1); - assert(a[3] == 0); - assert(a[4] == 1); - assert(a[5] == 1); - - assert(b == a); - } - } - - - /** - * ditto - */ - BitArray opCatAssign(BitArray b) - { - auto istart = len; - length = len + b.length; - for (auto i = istart; i < len; i++) - (*this)[i] = b[i - istart]; - return *this; - } - - - debug( UnitTest ) - { - unittest - { - BitArray a = [1,0]; - BitArray b = [0,1,0]; - BitArray c; - - c = (a ~= b); - assert(a.length == 5); - assert(a[0] == 1); - assert(a[1] == 0); - assert(a[2] == 0); - assert(a[3] == 1); - assert(a[4] == 0); - - assert(c == a); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/BitManip.di --- a/tango/tango/core/BitManip.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -// D import file generated from 'core/BitManip.d' -module tango.core.BitManip; -version (DDoc) -{ - int bsf(uint v); - int bsr(uint v); - int bt(uint* p, uint bitnum); - int btc(uint* p, uint bitnum); - int btr(uint* p, uint bitnum); - int bts(uint* p, uint bitnum); - uint bswap(uint v); - ubyte inp(uint port_address); - ushort inpw(uint port_address); - uint inpl(uint port_address); - ubyte outp(uint port_address, ubyte value); - ushort outpw(uint port_address, ushort value); - uint outpl(uint port_address, uint value); -} -else -{ - version (LLVMDC) -{ - int bsf(uint v); - int bsr(uint v); - int bt(uint* p, uint bitnum) -{ -return p[bitnum / ((uint).sizeof * 8)] & 1 << (bitnum & (uint).sizeof * 8 - 1) ? -1 : 0; -} - int btc(uint* p, uint bitnum) -{ -uint* q = p + bitnum / ((uint).sizeof * 8); -uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); -int result = *q & mask; -*q ^= mask; -return result ? -1 : 0; -} - int btr(uint* p, uint bitnum) -{ -uint* q = p + bitnum / ((uint).sizeof * 8); -uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); -int result = *q & mask; -*q &= ~mask; -return result ? -1 : 0; -} - int bts(uint* p, uint bitnum) -{ -uint* q = p + bitnum / ((uint).sizeof * 8); -uint mask = 1 << (bitnum & (uint).sizeof * 8 - 1); -int result = *q & mask; -*q |= mask; -return result ? -1 : 0; -} - pragma(LLVM_internal, "intrinsic", "llvm.bswap.i32") -{ - uint bswap(uint val); -} - ubyte inp(uint p) -{ -return 0; -} - ushort inpw(uint p) -{ -return 0; -} - uint inpl(uint p) -{ -return 0; -} - ubyte outp(uint p, ubyte v) -{ -return v; -} - ushort outpw(uint p, ushort v) -{ -return v; -} - uint outpl(uint p, uint v) -{ -return v; -} -} -else -{ - public -{ - import std.intrinsic; -} -} -} -int popcnt(uint x) -{ -x = x - (x >> 1 & 1431655765); -x = ((x & -858993460u) >> 2) + (x & 858993459); -x += x >> 4; -x &= 252645135; -x += x >> 8; -x &= 16711935; -x += x >> 16; -x &= 65535; -return x; -} -debug (UnitTest) -{ - } -uint bitswap(uint x); -debug (UnitTest) -{ - } diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/ByteSwap.d --- a/tango/tango/core/ByteSwap.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,117 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: October 2004 - - version: Feb 20th 2005 - Asm version removed by Aleksey Bobnev - - author: Kris, Aleksey Bobnev - -*******************************************************************************/ - -module tango.core.ByteSwap; - -import tango.core.BitManip; - -/******************************************************************************* - - Reverse byte order for specific datum sizes. Note that the - byte-swap approach avoids alignment issues, so is probably - faster overall than a traditional 'shift' implementation. - -*******************************************************************************/ - -struct ByteSwap -{ - /*********************************************************************** - - ***********************************************************************/ - - final static void swap16 (void *dst, uint bytes) - { - ubyte* p = cast(ubyte*) dst; - while (bytes) - { - ubyte b = p[0]; - p[0] = p[1]; - p[1] = b; - - p += short.sizeof; - bytes -= short.sizeof; - } - } - - /*********************************************************************** - - ***********************************************************************/ - - final static void swap32 (void *dst, uint bytes) - { - uint* p = cast(uint*) dst; - while (bytes) - { - *p = bswap(*p); - p ++; - bytes -= int.sizeof; - } - } - - /*********************************************************************** - - ***********************************************************************/ - - final static void swap64 (void *dst, uint bytes) - { - uint* p = cast(uint*) dst; - while (bytes) - { - uint i = p[0]; - p[0] = bswap(p[1]); - p[1] = bswap(i); - - p += (long.sizeof / int.sizeof); - bytes -= long.sizeof; - } - } - - /*********************************************************************** - - ***********************************************************************/ - - final static void swap80 (void *dst, uint bytes) - { - ubyte* p = cast(ubyte*) dst; - while (bytes) - { - ubyte b = p[0]; - p[0] = p[9]; - p[9] = b; - - b = p[1]; - p[1] = p[8]; - p[8] = b; - - b = p[2]; - p[2] = p[7]; - p[7] = b; - - b = p[3]; - p[3] = p[6]; - p[6] = b; - - b = p[4]; - p[4] = p[5]; - p[5] = b; - - p += real.sizeof; - bytes -= real.sizeof; - } - } -} - - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Exception.di --- a/tango/tango/core/Exception.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -// D import file generated from 'core/Exception.d' -module tango.core.Exception; -private -{ - alias void function(char[] file, size_t line, char[] msg = null) assertHandlerType; - alias TracedExceptionInfo function(void* ptr = null) traceHandlerType; - assertHandlerType assertHandler = null; - traceHandlerType traceHandler = null; -} -interface TracedExceptionInfo -{ - int opApply(int delegate(ref char[])); -} -class OutOfMemoryException : Exception -{ - this(char[] file, size_t line) -{ -super("Memory allocation failed",file,line); -} - char[] toString() -{ -return msg ? super.toString() : "Memory allocation failed"; -} -} -class TracedException : Exception -{ - this(char[] msg) -{ -super(msg); -m_info = traceContext(); -} - this(char[] msg, Exception e) -{ -super(msg,e); -m_info = traceContext(); -} - this(char[] msg, char[] file, size_t line) -{ -super(msg,file,line); -m_info = traceContext(); -} - char[] toString(); - int opApply(int delegate(ref char[] buf) dg); - private -{ - TracedExceptionInfo m_info; -} -} -class PlatformException : TracedException -{ - this(char[] msg) -{ -super(msg); -} -} -class AssertException : TracedException -{ - this(char[] file, size_t line) -{ -super("Assertion failure",file,line); -} - this(char[] msg, char[] file, size_t line) -{ -super(msg,file,line); -} -} -class ArrayBoundsException : TracedException -{ - this(char[] file, size_t line) -{ -super("Array index out of bounds",file,line); -} -} -class FinalizeException : TracedException -{ - ClassInfo info; - this(ClassInfo c, Exception e = null) -{ -super("Finalization error",e); -info = c; -} - char[] toString() -{ -assert(0); -} -} -class SwitchException : TracedException -{ - this(char[] file, size_t line) -{ -super("No appropriate switch clause found",file,line); -} -} -class TextException : TracedException -{ - this(char[] msg) -{ -super(msg); -} -} -class UnicodeException : TextException -{ - size_t idx; - this(char[] msg, size_t idx) -{ -super(msg); -this.idx = idx; -} -} -class ThreadException : PlatformException -{ - this(char[] msg) -{ -super(msg); -} -} -class FiberException : ThreadException -{ - this(char[] msg) -{ -super(msg); -} -} -class SyncException : PlatformException -{ - this(char[] msg) -{ -super(msg); -} -} -class IOException : PlatformException -{ - this(char[] msg) -{ -super(msg); -} -} -private -{ - class VfsException : IOException -{ - this(char[] msg) -{ -super(msg); -} -} -} -private -{ - class ClusterException : IOException -{ - this(char[] msg) -{ -super(msg); -} -} -} -class SocketException : IOException -{ - this(char[] msg) -{ -super(msg); -} -} -class HostException : IOException -{ - this(char[] msg) -{ -super(msg); -} -} -class AddressException : IOException -{ - this(char[] msg) -{ -super(msg); -} -} -class SocketAcceptException : SocketException -{ - this(char[] msg) -{ -super(msg); -} -} -class ProcessException : PlatformException -{ - this(char[] msg) -{ -super(msg); -} -} -class RegexException : TextException -{ - this(char[] msg) -{ -super(msg); -} -} -class LocaleException : TextException -{ - this(char[] msg) -{ -super(msg); -} -} -class RegistryException : TracedException -{ - this(char[] msg) -{ -super(msg); -} -} -class IllegalArgumentException : TracedException -{ - this(char[] msg) -{ -super(msg); -} -} -class IllegalElementException : IllegalArgumentException -{ - this(char[] msg) -{ -super(msg); -} -} -class NoSuchElementException : TracedException -{ - this(char[] msg) -{ -super(msg); -} -} -class CorruptedIteratorException : NoSuchElementException -{ - this(char[] msg) -{ -super(msg); -} -} -void setAssertHandler(assertHandlerType h) -{ -assertHandler = h; -} -void setTraceHandler(traceHandlerType h) -{ -traceHandler = h; -} -private -{ - extern (C) -{ - int printf(char*,...); -} -} -extern (C) -{ - void onAssertError(char[] file, size_t line); -} -extern (C) -{ - void onAssertErrorMsg(char[] file, size_t line, char[] msg); -} -TracedExceptionInfo traceContext(void* ptr = null); -extern (C) -{ - void onArrayBoundsError(char[] file, size_t line); -} -extern (C) -{ - void onFinalizeError(ClassInfo info, Exception ex); -} -extern (C) -{ - void onOutOfMemoryError(); -} -extern (C) -{ - void onSwitchError(char[] file, size_t line); -} -extern (C) -{ - void onUnicodeError(char[] msg, size_t idx); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Memory.di --- a/tango/tango/core/Memory.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -// D import file generated from 'core/Memory.d' -module tango.core.Memory; -private -{ - extern (C) -{ - void gc_init(); -} - extern (C) -{ - void gc_term(); -} - extern (C) -{ - void gc_enable(); -} - extern (C) -{ - void gc_disable(); -} - extern (C) -{ - void gc_collect(); -} - extern (C) -{ - uint gc_getAttr(void* p); -} - extern (C) -{ - uint gc_setAttr(void* p, uint a); -} - extern (C) -{ - uint gc_clrAttr(void* p, uint a); -} - extern (C) -{ - void* gc_malloc(size_t sz, uint ba = 0); -} - extern (C) -{ - void* gc_calloc(size_t sz, uint ba = 0); -} - extern (C) -{ - void* gc_realloc(void* p, size_t sz, uint ba = 0); -} - extern (C) -{ - size_t gc_extend(void* p, size_t mx, size_t sz); -} - extern (C) -{ - void gc_free(void* p); -} - extern (C) -{ - void* gc_addrOf(void* p); -} - extern (C) -{ - size_t gc_sizeOf(void* p); -} - struct BlkInfo_ -{ - void* base; - size_t size; - uint attr; -} - extern (C) -{ - BlkInfo_ gc_query(void* p); -} - extern (C) -{ - void gc_addRoot(void* p); -} - extern (C) -{ - void gc_addRange(void* p, size_t sz); -} - extern (C) -{ - void gc_removeRoot(void* p); -} - extern (C) -{ - void gc_removeRange(void* p); -} - alias bool function(Object obj) collectHandlerType; -} -struct GC -{ - static -{ - void enable() -{ -gc_enable(); -} -} - static -{ - void disable() -{ -gc_disable(); -} -} - static -{ - void collect() -{ -gc_collect(); -} -} - enum BlkAttr : uint -{ -FINALIZE = 1, -NO_SCAN = 2, -NO_MOVE = 4, -} - alias BlkInfo_ BlkInfo; - static -{ - uint getAttr(void* p) -{ -return gc_getAttr(p); -} -} - static -{ - uint setAttr(void* p, uint a) -{ -return gc_setAttr(p,a); -} -} - static -{ - uint clrAttr(void* p, uint a) -{ -return gc_clrAttr(p,a); -} -} - static -{ - void* malloc(size_t sz, uint ba = 0) -{ -return gc_malloc(sz,ba); -} -} - static -{ - void* calloc(size_t sz, uint ba = 0) -{ -return gc_calloc(sz,ba); -} -} - static -{ - void* realloc(void* p, size_t sz, uint ba = 0) -{ -return gc_realloc(p,sz,ba); -} -} - static -{ - size_t extend(void* p, size_t mx, size_t sz) -{ -return gc_extend(p,mx,sz); -} -} - static -{ - void free(void* p) -{ -gc_free(p); -} -} - static -{ - void* addrOf(void* p) -{ -return gc_addrOf(p); -} -} - static -{ - size_t sizeOf(void* p) -{ -return gc_sizeOf(p); -} -} - static -{ - BlkInfo query(void* p) -{ -return gc_query(p); -} -} - static -{ - void addRoot(void* p) -{ -gc_addRoot(p); -} -} - static -{ - void addRange(void* p, size_t sz) -{ -gc_addRange(p,sz); -} -} - static -{ - void removeRoot(void* p) -{ -gc_removeRoot(p); -} -} - static -{ - void removeRange(void* p) -{ -gc_removeRange(p); -} -} - static -{ - void collectHandler(collectHandlerType h) -{ -sm_collectHandler = h; -} -} - private -{ - static -{ - collectHandlerType sm_collectHandler = null; -} -} -} -extern (C) -{ - bool onCollectResource(Object obj); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Runtime.di --- a/tango/tango/core/Runtime.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -// D import file generated from 'core/Runtime.d' -module tango.core.Runtime; -private -{ - extern (C) -{ - bool rt_isHalting(); -} - alias bool function() moduleUnitTesterType; -} -struct Runtime -{ - static -{ - bool isHalting() -{ -return rt_isHalting(); -} -} - static -{ - void moduleUnitTester(moduleUnitTesterType h) -{ -sm_moduleUnitTester = h; -} -} - private -{ - static -{ - moduleUnitTesterType sm_moduleUnitTester = null; -} -} -} -extern (C) -{ - bool runModuleUnitTests(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Signal.d --- a/tango/tango/core/Signal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,276 +0,0 @@ -/** - * The signal module provides a basic implementation of the listener pattern - * using the "Signals and Slots" model from Qt. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Signal; - - -private import tango.core.Array; - - -/** - * A signal is an event which contains a collection of listeners (called - * slots). When a signal is called, that call will be propagated to each - * attached slot in a synchronous manner. It is legal for a slot to call a - * signal's attach and detach methods when it is signaled. When this occurs, - * attach events will be queued and processed after the signal has propagated - * to all slots, but detach events are processed immediately. This ensures - * that it is safe for slots to be deleted at any time, even within a slot - * routine. - * - * Example: - * ----------------------------------------------------------------------------- - * - * class Button - * { - * Signal!(Button) press; - * } - * - * void wasPressed( Button b ) - * { - * printf( "Button was pressed.\n" ); - * } - * - * Button b = new Button; - * - * b.press.attach( &wasPressed ); - * b.press( b ); - * - * ----------------------------------------------------------------------------- - * - * Please note that this implementation does not use weak pointers to store - * references to slots. This design was chosen because weak pointers are - * inherently unsafe when combined with non-deterministic destruction, with - * many of the same limitations as destructors in the same situation. It is - * still possible to obtain weak-pointer behavior, but this must be done - * through a proxy object instead. - */ -struct Signal( Args... ) -{ - alias void delegate(Args) SlotDg; /// - alias void function(Args) SlotFn; /// - - alias opCall call; /// Alias to simplify chained calling. - - - /** - * The signal procedure. When called, each of the attached slots will be - * called synchronously. - * - * args = The signal arguments. - */ - void opCall( Args args ) - { - synchronized - { - m_blk = true; - - for( size_t i = 0; i < m_dgs.length; ++i ) - { - if( m_dgs[i] !is null ) - m_dgs[i]( args ); - } - m_dgs.length = m_dgs.remove( cast(SlotDg) null ); - - for( size_t i = 0; i < m_fns.length; ++i ) - { - if( m_fns[i] !is null ) - m_fns[i]( args ); - } - m_fns.length = m_fns.remove( cast(SlotFn) null ); - - m_blk = false; - - procAdds(); - } - } - - - /** - * Attaches a delegate to this signal. A delegate may be either attached - * or detached, so successive calls to attach for the same delegate will - * have no effect. - * - * dg = The delegate to attach. - */ - void attach( SlotDg dg ) - { - synchronized - { - if( m_blk ) - { - m_add ~= Add( dg ); - } - else - { - auto pos = m_dgs.find( dg ); - if( pos == m_dgs.length ) - m_dgs ~= dg; - } - } - } - - - /** - * Attaches a function to this signal. A function may be either attached - * or detached, so successive calls to attach for the same function will - * have no effect. - * - * fn = The function to attach. - */ - void attach( SlotFn fn ) - { - synchronized - { - if( m_blk ) - { - m_add ~= Add( fn ); - } - else - { - auto pos = m_fns.find( fn ); - if( pos == m_fns.length ) - m_fns ~= fn; - } - } - } - - - /** - * Detaches a delegate from this signal. - * - * dg = The delegate to detach. - */ - void detach( SlotDg dg ) - { - synchronized - { - auto pos = m_dgs.find( dg ); - if( pos < m_dgs.length ) - m_dgs[pos] = null; - } - } - - - /** - * Detaches a function from this signal. - * - * fn = The function to detach. - */ - void detach( SlotFn fn ) - { - synchronized - { - auto pos = m_fns.find( fn ); - if( pos < m_fns.length ) - m_fns[pos] = null; - } - } - - -private: - struct Add - { - enum Type - { - DG, - FN - } - - static Add opCall( SlotDg d ) - { - Add e; - e.ty = Type.DG; - e.dg = d; - return e; - } - - static Add opCall( SlotFn f ) - { - Add e; - e.ty = Type.FN; - e.fn = f; - return e; - } - - union - { - SlotDg dg; - SlotFn fn; - } - Type ty; - } - - - void procAdds() - { - foreach( a; m_add ) - { - if( a.ty == Add.Type.DG ) - m_dgs ~= a.dg; - else - m_fns ~= a.fn; - } - m_add.length = 0; - } - - - SlotDg[] m_dgs; - SlotFn[] m_fns; - Add[] m_add; - bool m_blk; -} - - -debug( UnitTest ) -{ - unittest - { - class Button - { - Signal!(Button) press; - } - - int count = 0; - - void wasPressedA( Button b ) - { - ++count; - } - - void wasPressedB( Button b ) - { - ++count; - } - - Button b = new Button; - - b.press.attach( &wasPressedA ); - b.press( b ); - assert( count == 1 ); - - count = 0; - b.press.attach( &wasPressedB ); - b.press( b ); - assert( count == 2 ); - - count = 0; - b.press.attach( &wasPressedA ); - b.press( b ); - assert( count == 2 ); - - count = 0; - b.press.detach( &wasPressedB ); - b.press( b ); - assert( count == 1 ); - - count = 0; - b.press.detach( &wasPressedA ); - b.press( b ); - assert( count == 0 ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Thread.di --- a/tango/tango/core/Thread.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,746 +0,0 @@ -// D import file generated from 'core/Thread.d' -module tango.core.Thread; -version = StackGrowsDown; -public -{ -} -private -{ - import tango.core.Exception; - extern (C) -{ - void* rt_stackBottom(); -} - extern (C) -{ - void* rt_stackTop(); -} - void* getStackBottom() -{ -return rt_stackBottom(); -} - void* getStackTop(); -} -version (Win32) -{ - private -{ - import tango.stdc.stdint; - import tango.sys.win32.UserGdi; - const -{ - DWORD TLS_OUT_OF_INDEXES = -1u; -} - extern (Windows) -{ - alias uint function(void*) btex_fptr; -} - extern (C) -{ - uintptr_t _beginthreadex(void*, uint, btex_fptr, void*, uint, uint*); -} - extern (Windows) -{ - uint thread_entryPoint(void* arg); -} - HANDLE GetCurrentThreadHandle() -{ -const uint DUPLICATE_SAME_ACCESS = 2; -HANDLE curr = GetCurrentThread(); -HANDLE proc = GetCurrentProcess(); -HANDLE hndl; -DuplicateHandle(proc,curr,proc,&hndl,0,TRUE,DUPLICATE_SAME_ACCESS); -return hndl; -} -} -} -else -{ - version (Posix) -{ - private -{ - import tango.stdc.posix.semaphore; - import tango.stdc.posix.pthread; - import tango.stdc.posix.signal; - import tango.stdc.posix.time; - import tango.stdc.errno; - extern (C) -{ - int getErrno(); -} - version (GNU) -{ - import gcc.builtins; -} - extern (C) -{ - void* thread_entryPoint(void* arg); -} - sem_t suspendCount; - extern (C) -{ - void thread_suspendHandler(int sig); -} - extern (C) -{ - void thread_resumeHandler(int sig) -in -{ -assert(sig == SIGUSR2); -} -body -{ -} -} -} -} -else -{ - static assert(false,"Unknown threading implementation."); -} -} -class Thread -{ - this(void function() fn, size_t sz = 0) -in -{ -assert(fn); -} -body -{ -m_fn = fn; -m_sz = sz; -m_call = Call.FN; -m_curr = &m_main; -} - this(void delegate() dg, size_t sz = 0) -in -{ -assert(dg); -} -body -{ -m_dg = dg; -m_sz = sz; -m_call = Call.DG; -m_curr = &m_main; -} - final -{ - void start(); -} - final -{ - void join(bool rethrow = true); -} - final -{ - char[] name(); -} - final -{ - void name(char[] val); -} - final -{ - bool isDaemon(); -} - final -{ - void isDaemon(bool val); -} - final -{ - bool isRunning(); -} - static const -{ - int PRIORITY_MIN; -} - static const -{ - int PRIORITY_MAX; -} - final -{ - int priority(); -} - final -{ - void priority(int val); -} - static -{ - void sleep(double period); -} - static -{ - void yield(); -} - static -{ - Thread getThis(); -} - static -{ - Thread[] getAll(); -} - static -{ - int opApply(int delegate(ref Thread) dg); -} - static const -{ - uint LOCAL_MAX = 64; -} - static -{ - uint createLocal(); -} - static -{ - void deleteLocal(uint key); -} - static -{ - void* getLocal(uint key) -{ -return getThis().m_local[key]; -} -} - static -{ - void* setLocal(uint key, void* val) -{ -return getThis().m_local[key] = val; -} -} - static this(); - private -{ - this() -{ -m_call = Call.NO; -m_curr = &m_main; -} - final -{ - void run(); -} - private -{ - enum Call -{ -NO, -FN, -DG, -} - version (Win32) -{ - alias uint TLSKey; - alias uint ThreadAddr; -} -else -{ - version (Posix) -{ - alias pthread_key_t TLSKey; - alias pthread_t ThreadAddr; -} -} - static -{ - bool[LOCAL_MAX] sm_local; -} - static -{ - TLSKey sm_this; -} - void*[LOCAL_MAX] m_local; - version (Win32) -{ - HANDLE m_hndl; -} - ThreadAddr m_addr; - Call m_call; - char[] m_name; - union -{ -void function() m_fn; -void delegate() m_dg; -} - size_t m_sz; - version (Posix) -{ - bool m_isRunning; -} - bool m_isDaemon; - Object m_unhandled; - private -{ - static -{ - void setThis(Thread t); -} - private -{ - final -{ - void pushContext(Context* c) -in -{ -assert(!c.within); -} -body -{ -c.within = m_curr; -m_curr = c; -} -} - final -{ - void popContext() -in -{ -assert(m_curr && m_curr.within); -} -body -{ -Context* c = m_curr; -m_curr = c.within; -c.within = null; -} -} - final -{ - Context* topContext() -in -{ -assert(m_curr); -} -body -{ -return m_curr; -} -} - static -{ - struct Context -{ - void* bstack; - void* tstack; - Context* within; - Context* next; - Context* prev; -} -} - Context m_main; - Context* m_curr; - bool m_lock; - version (Win32) -{ - uint[8] m_reg; -} - private -{ - static -{ - Object slock() -{ -return Thread.classinfo; -} -} - static -{ - Context* sm_cbeg; -} - static -{ - size_t sm_clen; -} - static -{ - Thread sm_tbeg; -} - static -{ - size_t sm_tlen; -} - Thread prev; - Thread next; - static -{ - void add(Context* c); -} - static -{ - void remove(Context* c); -} - static -{ - void add(Thread t); -} - static -{ - void remove(Thread t); -} -} -} -} -} -} -} -extern (C) -{ - void thread_init(); -} -extern (C) -{ - void thread_attachThis(); -} -extern (C) -{ - void thread_detachThis() -{ -Thread.remove(Thread.getThis()); -} -} -extern (C) -{ - void thread_joinAll(); -} -private -{ - bool multiThreadedFlag = false; -} -extern (C) -{ - bool thread_needLock() -{ -return multiThreadedFlag; -} -} -private -{ - uint suspendDepth = 0; -} -extern (C) -{ - void thread_suspendAll(); -} -extern (C) -{ - void thread_resumeAll(); -} -private -{ - alias void delegate(void*, void*) scanAllThreadsFn; -} -extern (C) -{ - void thread_scanAll(scanAllThreadsFn scan, void* curStackTop = null); -} -template ThreadLocal(T) -{ -class ThreadLocal -{ - this(T def = T.init) -{ -m_def = def; -m_key = Thread.createLocal(); -} - T val() -{ -Wrap* wrap = cast(Wrap*)Thread.getLocal(m_key); -return wrap ? wrap.val : m_def; -} - T val(T newval) -{ -Wrap* wrap = cast(Wrap*)Thread.getLocal(m_key); -if (wrap is null) -{ -wrap = new Wrap; -Thread.setLocal(m_key,wrap); -} -wrap.val = newval; -return newval; -} - private -{ - struct Wrap -{ - T val; -} - T m_def; - uint m_key; -} -} -} -class ThreadGroup -{ - final -{ - Thread create(void function() fn); -} - final -{ - Thread create(void delegate() dg); -} - final -{ - void add(Thread t); -} - final -{ - void remove(Thread t); -} - final -{ - int opApply(int delegate(ref Thread) dg); -} - final -{ - void joinAll(bool rethrow = true); -} - private -{ - Thread[Thread] m_all; -} -} -private -{ - version (D_InlineAsm_X86) -{ - version (X86_64) -{ -} -else -{ - version (Win32) -{ - version = AsmX86_Win32; -} -else -{ - version (Posix) -{ - version = AsmX86_Posix; -} -} -} -} -else -{ - version (PPC) -{ - version (Posix) -{ - version = AsmPPC_Posix; -} -} -} - version (Posix) -{ - import tango.stdc.posix.unistd; - import tango.stdc.posix.sys.mman; - import tango.stdc.posix.stdlib; - version (AsmX86_Win32) -{ -} -else -{ - version (AsmX86_Posix) -{ -} -else -{ - version (AsmPPC_Posix) -{ -} -else -{ - import tango.stdc.posix.ucontext; -} -} -} -} - const -{ - size_t PAGESIZE; -} -} -static this(); -private -{ - extern (C) -{ - void fiber_entryPoint(); -} - version (AsmPPC_Posix) -{ - extern (C) -{ - void fiber_switchContext(void** oldp, void* newp); -} -} -else -{ - extern (C) -{ - void fiber_switchContext(void** oldp, void* newp); -} -} -} -class Fiber -{ - this(void function() fn, size_t sz = PAGESIZE) -in -{ -assert(fn); -} -body -{ -m_fn = fn; -m_call = Call.FN; -m_state = State.HOLD; -allocStack(sz); -initStack(); -} - this(void delegate() dg, size_t sz = PAGESIZE) -in -{ -assert(dg); -} -body -{ -m_dg = dg; -m_call = Call.DG; -m_state = State.HOLD; -allocStack(sz); -initStack(); -} - final -{ - void call(bool rethrow = true); -} - final -{ - void reset() -in -{ -assert(m_state == State.TERM); -assert(m_ctxt.tstack == m_ctxt.bstack); -} -body -{ -m_state = State.HOLD; -initStack(); -m_unhandled = null; -} -} - enum State -{ -HOLD, -EXEC, -TERM, -} - final -{ - State state() -{ -return m_state; -} -} - static -{ - void yield(); -} - static -{ - void yieldAndThrow(Object obj); -} - static -{ - Fiber getThis(); -} - static this(); - private -{ - this() -{ -m_call = Call.NO; -} - final -{ - void run(); -} - private -{ - enum Call -{ -NO, -FN, -DG, -} - Call m_call; - union -{ -void function() m_fn; -void delegate() m_dg; -} - bool m_isRunning; - Object m_unhandled; - State m_state; - private -{ - final -{ - void allocStack(size_t sz); -} - final -{ - void freeStack(); -} - final -{ - void initStack(); -} - Thread.Context* m_ctxt; - size_t m_size; - void* m_pmem; - static if(is(typeof(ucontext_t))) -{ - static -{ - ucontext_t sm_utxt = void; -} - ucontext_t m_utxt = void; - ucontext_t* m_ucur = null; -} - private -{ - static -{ - void setThis(Fiber f); -} - static -{ - Thread.TLSKey sm_this; -} - private -{ - final -{ - void switchIn(); -} - final -{ - void switchOut(); -} -} -} -} -} -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Traits.d --- a/tango/tango/core/Traits.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,219 +0,0 @@ -/** - * The traits module defines tools useful for obtaining detailed type - * information at compile-time. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.Traits; - - -/** - * - */ -template isCharType( T ) -{ - const bool isCharType = is( T == char ) || - is( T == wchar ) || - is( T == dchar ); -} - - -/** - * - */ -template isSignedIntegerType( T ) -{ - const bool isSignedIntegerType = is( T == byte ) || - is( T == short ) || - is( T == int ) || - is( T == long )/+|| - is( T == cent )+/; -} - - -/** - * - */ -template isUnsignedIntegerType( T ) -{ - const bool isUnsignedIntegerType = is( T == ubyte ) || - is( T == ushort ) || - is( T == uint ) || - is( T == ulong )/+|| - is( T == ucent )+/; -} - - -/** - * - */ -template isIntegerType( T ) -{ - const bool isIntegerType = isSignedIntegerType!(T) || - isUnsignedIntegerType!(T); -} - - -/** - * - */ -template isRealType( T ) -{ - const bool isRealType = is( T == float ) || - is( T == double ) || - is( T == real ); -} - - -/** - * - */ -template isComplexType( T ) -{ - const bool isComplexType = is( T == cfloat ) || - is( T == cdouble ) || - is( T == creal ); -} - - -/** - * - */ -template isImaginaryType( T ) -{ - const bool isImaginaryType = is( T == ifloat ) || - is( T == idouble ) || - is( T == ireal ); -} - - -/** - * - */ -template isFloatingPointType( T ) -{ - const bool isFloatingPointType = isRealType!(T) || - isComplexType!(T) || - isImaginaryType!(T); -} - - -/** - * - */ -template isPointerType( T ) -{ - const bool isPointerType = is( typeof(*T) ); -} - - -/** - * - */ -template isReferenceType( T ) -{ - - const bool isReferenceType = isPointerType!(T) || - is( T == class ) || - is( T == interface ) || - is( T == delegate ); -} - - -/** - * - */ -template isDynamicArrayType( T ) -{ - const bool isDynamicArrayType = is( typeof(T.init[0])[] == T ); -} - - -/** - * - */ -template isStaticArrayType( T ) -{ - const bool isStaticArrayType = is( typeof(T.init)[(T).sizeof / typeof(T.init).sizeof] == T ); -} - - -/** - * - */ -private template isAssocArrayType( T ) -{ - const bool isAssocArrayType = is( typeof(T.init.values[0])[typeof(T.init.keys[0])] == T ); -} - - -/** - * - */ -template isCallableType( T ) -{ - const bool isCallableType = is( T == function ) || - is( typeof(*T) == function ) || - is( T == delegate ) || - is( typeof(T.opCall) == function ); -} - - -/** - * - */ -template ReturnTypeOf( Fn ) -{ - static if( is( Fn Ret == return ) ) - alias Ret ReturnTypeOf; - else - static assert( false, "Argument has no return type." ); -} - - -/** - * - */ -template ReturnTypeOf( alias fn ) -{ - alias ReturnTypeOf!(typeof(fn)) ReturnTypeOf; -} - - -/** - * - */ -template ParameterTupleOf( Fn ) -{ - static if( is( Fn Params == function ) ) - alias Params ParameterTupleOf; - else static if( is( Fn Params == delegate ) ) - alias ParameterTupleOf!(Params) ParameterTupleOf; - else static if( is( Fn Params == Params* ) ) - alias ParameterTupleOf!(Params) ParameterTupleOf; - else - static assert( false, "Argument has no parameters." ); -} - - -/** - * - */ -template ParameterTupleOf( alias fn ) -{ - alias ParameterTupleOf!(typeof(fn)) ParameterTupleOf; -} - - -/** - * - */ -template BaseTypeTupleOf( T ) -{ - static if( is( T Base == super ) ) - alias Base BaseTypeTupleOf; - else - static assert( false, "Argument is not a class or interface." ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Tuple.d --- a/tango/tango/core/Tuple.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,223 +0,0 @@ -/** - * The tuple module defines a template struct used for arbitrary data grouping. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Walter Bright, Sean Kelly - */ -module tango.core.Tuple; - - -/** - * A Tuple is a an aggregate of typed values. Tuples are useful for returning - * a set of values from a function or for passing a set of parameters to a - * function. - * - * NOTE: Since the transition from user-defined to built-in tuples, the ability - * to return tuples from a function has been lost. Until this issue is - * addressed within the language, tuples must be enclosed in a struct - * if they are to be returned from a function. - * - * Example: - * ---------------------------------------------------------------------- - * - * alias Tuple!(int, real) T1; - * alias Tuple!(int, long) T2; - * struct Wrap( Vals... ) - * { - * Vals val; - * } - * - * Wrap!(T2) func( T1 val ) - * { - * Wrap!(T2) ret; - * ret.val[0] = val[0]; - * ret.val[1] = val[0] * cast(long) val[1]; - * return ret; - * } - * - * ---------------------------------------------------------------------- - * - * This is the original tuple example, and demonstates what should be possible - * with tuples. Hopefully, language support will be added for this feature - * soon. - * - * Example: - * ---------------------------------------------------------------------- - * - * alias Tuple!(int, real) T1; - * alias Tuple!(int, long) T2; - * - * T2 func( T1 val ) - * { - * T2 ret; - * ret[0] = val[0]; - * ret[1] = val[0] * cast(long) val[1]; - * return ret; - * } - * - * - * // tuples may be composed - * alias Tuple!(int) IntTuple; - * alias Tuple!(IntTuple, long) RetTuple; - * - * // tuples are equivalent to a set of function parameters of the same type - * RetTuple t = func( 1, 2.3 ); - * - * ---------------------------------------------------------------------- - */ -template Tuple( TList... ) -{ - alias TList Tuple; -} - - -/** - * Returns the index of the first occurrence of T in TList or Tlist.length if - * not found. - */ -template IndexOf( T, TList... ) -{ - static if( TList.length == 0 ) - const size_t IndexOf = 0; - else static if( is( T == TList[0] ) ) - const size_t IndexOf = 0; - else - const size_t IndexOf = 1 + IndexOf!( T, TList[1 .. $] ); -} - - -/** - * Returns a Tuple with the first occurrence of T removed from TList. - */ -template Remove( T, TList... ) -{ - static if( TList.length == 0 ) - alias TList Remove; - else static if( is( T == TList[0] ) ) - alias TList[1 .. $] Remove; - else - alias Tuple!( TList[0], Remove!( T, TList[1 .. $] ) ) Remove; -} - - -/** - * Returns a Tuple with all occurrences of T removed from TList. - */ -template RemoveAll( T, TList... ) -{ - static if( TList.length == 0 ) - alias TList RemoveAll; - else static if( is( T == TList[0] ) ) - alias .RemoveAll!( T, TList[1 .. $] ) RemoveAll; - else - alias Tuple!( TList[0], .RemoveAll!( T, TList[1 .. $] ) ) RemoveAll; -} - - -/** - * Returns a Tuple with the first offuccrence of T replaced with U. - */ -template Replace( T, U, TList... ) -{ - static if( TList.length == 0 ) - alias TList Replace; - else static if( is( T == TList[0] ) ) - alias Tuple!(U, TList[1 .. $]) Replace; - else - alias Tuple!( TList[0], Replace!( T, U, TList[1 .. $] ) ) Replace; -} - - -/** - * Returns a Tuple with all occurrences of T replaced with U. - */ -template ReplaceAll( T, U, TList... ) -{ - static if( TList.length == 0 ) - alias TList ReplaceAll; - else static if( is( T == TList[0] ) ) - alias Tuple!( U, ReplaceAll!( T, U, TList[1 .. $] ) ) ReplaceAll; - else - alias Tuple!( TList[0], ReplaceAll!( T, U, TList[1 .. $] ) ) ReplaceAll; -} - - -/** - * Returns a Tuple with the types from TList declared in reverse order. - */ -template Reverse( TList... ) -{ - static if( TList.length == 0 ) - alias TList Reverse; - else - alias Tuple!( Reverse!( TList[1 .. $]), TList[0] ) Reverse; -} - - -/** - * Returns a Tuple with all duplicate types removed. - */ -template Unique( TList... ) -{ - static if( TList.length == 0 ) - alias TList Unique; - else - alias Tuple!( TList[0], - Unique!( RemoveAll!( TList[0], - TList[1 .. $] ) ) ) Unique; -} - - -/** - * Returns the type from TList that is the most derived from T. If no such - * type is found then T will be returned. - */ -template MostDerived( T, TList... ) -{ - static if( TList.length == 0 ) - alias T MostDerived; - else static if( is( TList[0] : T ) ) - alias MostDerived!( TList[0], TList[1 .. $] ) MostDerived; - else - alias MostDerived!( T, TList[1 .. $] ) MostDerived; -} - - -/** - * Returns a Tuple with the types sorted so that the most derived types are - * ordered before the remaining types. - */ -template DerivedToFront( TList... ) -{ - static if( TList.length == 0 ) - alias TList DerivedToFront; - else - alias Tuple!( MostDerived!( TList[0], TList[1 .. $] ), - DerivedToFront!( ReplaceAll!( MostDerived!( TList[0], TList[1 .. $] ), - TList[0], - TList[1 .. $] ) ) ) DerivedToFront; -} - - -/* - * A brief test of the above templates. - */ -static assert( 0 == IndexOf!(int, int, float, char)); -static assert( 1 == IndexOf!(float, int, float, char)); -static assert( 3 == IndexOf!(double, int, float, char)); - -static assert( is( Remove!(int, int, float, int) == Remove!(void, float, int) ) ); -static assert( is( RemoveAll!(int, int, float, int) == Remove!(void, float) ) ); -static assert( is( Remove!(float, int, float, int) == Remove!(void, int, int) ) ); -static assert( is( Remove!(double, int, float, int) == Remove!(void, int, float, int) ) ); - -static assert( is( Replace!(int, char, int, float, int) == Remove!(void, char, float, int) ) ); -static assert( is( ReplaceAll!(int, char, int, float, int) == Remove!(void, char, float, char) ) ); -static assert( is( Replace!(float, char, int, float, int) == Remove!(void, int, char, int) ) ); -static assert( is( Replace!(double, char, int, float, int) == Remove!(void, int, float, int) ) ); - -static assert( is( Reverse!(float, float[], double, char, int) == - Unique!(int, char, double, float[], char, int, float, double) ) ); - -static assert( is( MostDerived!(int, long, short) == short ) ); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Vararg.d --- a/tango/tango/core/Vararg.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/** - * The vararg module is intended to facilitate vararg manipulation in D. - * It should be interface compatible with the C module "stdarg," and the - * two modules may share a common implementation if possible (as is done - * here). - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Hauke Duden, Walter Bright - */ -module tango.core.Vararg; - - -version( GNU ) -{ - public import std.stdarg; -} -else version( LLVMDC ) -{ - /** - * The base vararg list type. - */ - alias void* va_list; - - /** - * This function returns the next argument in the sequence referenced by - * the supplied argument pointer. The argument pointer will be adjusted - * to point to the next arggument in the sequence. - * - * Params: - * vp = The argument pointer. - * - * Returns: - * The next argument in the sequence. The result is undefined if vp - * does not point to a valid argument. - */ - T va_arg(T)(ref va_list vp) - { -// size_t size = T.sizeof > size_t.sizeof ? size_t.sizeof : T.sizeof; -// va_list vptmp = cast(va_list)((cast(size_t)vp + size - 1) & ~(size - 1)); -// vp = vptmp + T.sizeof; -// return *cast(T*)vptmp; - T* arg = cast(T*) vp; - vp = cast(va_list) ( cast(void*) vp + ( ( T.sizeof + size_t.sizeof - 1 ) & ~( size_t.sizeof - 1 ) ) ); - return *arg; - } -} -else -{ - /** - * The base vararg list type. - */ - alias void* va_list; - - - template va_start( T ) - { - /** - * This function initializes the supplied argument pointer for subsequent - * use by va_arg and va_end. - * - * Params: - * ap = The argument pointer to initialize. - * paramn = The identifier of the rightmost parameter in the function - * parameter list. - */ - void va_start( out va_list ap, inout T parmn ) - { - ap = cast(va_list) ( cast(void*) &parmn + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); - } - } - - - template va_arg( T ) - { - /** - * This function returns the next argument in the sequence referenced by - * the supplied argument pointer. The argument pointer will be adjusted - * to point to the next arggument in the sequence. - * - * Params: - * ap = The argument pointer. - * - * Returns: - * The next argument in the sequence. The result is undefined if ap - * does not point to a valid argument. - */ - T va_arg( inout va_list ap ) - { - T arg = *cast(T*) ap; - ap = cast(va_list) ( cast(void*) ap + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); - return arg; - } - } - - - /** - * This function cleans up any resources allocated by va_start. It is - * currently a no-op and exists mostly for syntax compatibility with - * the variadric argument functions for C. - * - * Params: - * ap = The argument pointer. - */ - void va_end( va_list ap ) - { - - } - - - /** - * This function copied the argument pointer src to dst. - * - * Params: - * src = The source pointer. - * dst = The destination pointer. - */ - void va_copy( out va_list dst, va_list src ) - { - dst = src; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Variant.d --- a/tango/tango/core/Variant.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,677 +0,0 @@ -/** - * The variant module contains a variant, or polymorphic type. - * - * Copyright: Copyright (C) 2005-2007 The Tango Team. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Daniel Keep, Sean Kelly - */ -module tango.core.Variant; - -private import tango.core.Exception : TracedException; -private import tango.core.Vararg : va_list; - -private -{ - template maxT(uint a, uint b) - { - const maxT = (a > b) ? a : b; - } - - struct AtomicTypes - { - union - { - bool _bool; - char _char; - wchar _wchar; - dchar _dchar; - byte _byte; - short _short; - int _int; - long _long; - ubyte _ubyte; - ushort _ushort; - uint _uint; - ulong _ulong; - float _float; - double _double; - real _real; - ifloat _ifloat; - idouble _idouble; - ireal _ireal; - void* ptr; - void[] arr; - Object obj; - ubyte[maxT!(_real.sizeof,arr.sizeof)] data; - } - } - - template isAtomicType(T) - { - static if( is( T == bool ) - || is( T == char ) - || is( T == wchar ) - || is( T == dchar ) - || is( T == byte ) - || is( T == short ) - || is( T == int ) - || is( T == long ) - || is( T == ubyte ) - || is( T == ushort ) - || is( T == uint ) - || is( T == ulong ) - || is( T == float ) - || is( T == double ) - || is( T == real ) - || is( T == ifloat ) - || is( T == idouble ) - || is( T == ireal ) ) - const isAtomicType = true; - else - const isAtomicType = false; - } - - template isArray(T) - { - static if( is( T U : U[] ) ) - const isArray = true; - else - const isArray = false; - } - - template isPointer(T) - { - static if( is( T U : U* ) ) - const isPointer = true; - else - const isPointer = false; - } - - template isObject(T) - { - static if( is( T : Object ) ) - const isObject = true; - else - const isObject = false; - } - - template isStaticArray(T) - { - static if( is( typeof(T.init)[(T).sizeof / typeof(T.init).sizeof] == T ) ) - const isStaticArray = true; - else - const isStaticArray = false; - } - - bool isAny(T,argsT...)(T v, argsT args) - { - foreach( arg ; args ) - if( v is arg ) return true; - return false; - } - - const tibool = typeid(bool); - const tichar = typeid(char); - const tiwchar = typeid(wchar); - const tidchar = typeid(dchar); - const tibyte = typeid(byte); - const tishort = typeid(short); - const tiint = typeid(int); - const tilong = typeid(long); - const tiubyte = typeid(ubyte); - const tiushort = typeid(ushort); - const tiuint = typeid(uint); - const tiulong = typeid(ulong); - const tifloat = typeid(float); - const tidouble = typeid(double); - const tireal = typeid(real); - const tiifloat = typeid(ifloat); - const tiidouble = typeid(idouble); - const tiireal = typeid(ireal); - - bool canImplicitCastTo(dsttypeT)(TypeInfo srctype) - { - static if( is( dsttypeT == char ) ) - return isAny(srctype, tibool, tiubyte); - - else static if( is( dsttypeT == wchar ) ) - return isAny(srctype, tibool, tiubyte, tiushort, tichar); - - else static if( is( dsttypeT == dchar ) ) - return isAny(srctype, tibool, tiubyte, tiushort, tiuint, tichar, - tiwchar); - - else static if( is( dsttypeT == byte ) ) - return isAny(srctype, tibool); - - else static if( is( dsttypeT == ubyte ) ) - return isAny(srctype, tibool, tichar); - - else static if( is( dsttypeT == short ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tichar); - - else static if( is( dsttypeT == ushort ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tichar, tiwchar); - - else static if( is( dsttypeT == int ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tishort, tiushort, - tichar, tiwchar); - - else static if( is( dsttypeT == uint ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tishort, tiushort, - tichar, tiwchar, tidchar); - - else static if( is( dsttypeT == long ) || is( dsttypeT == ulong ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tishort, tiushort, - tiint, tiuint, tichar, tiwchar, tidchar); - - else static if( is( dsttypeT == float ) ) - return isAny(srctype, tibool, tibyte, tiubyte); - - else static if( is( dsttypeT == double ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tifloat); - - else static if( is( dsttypeT == real ) ) - return isAny(srctype, tibool, tibyte, tiubyte, tifloat, tidouble); - - else static if( is( dsttypeT == idouble ) ) - return isAny(srctype, tiifloat); - - else static if( is( dsttypeT == ireal ) ) - return isAny(srctype, tiifloat, tiidouble); - - else - return false; - } - - template storageT(T) - { - static if( isStaticArray!(T) ) - alias typeof(T.dup) storageT; - else - alias T storageT; - } -} - -/** - * This exception is thrown whenever you attempt to get the value of a Variant - * without using a compatible type. - */ -class VariantTypeMismatchException : TracedException -{ - this(TypeInfo expected, TypeInfo got) - { - super("cannot convert "~expected.toString - ~" value to a "~got.toString); - } -} - -/** - * The Variant type is used to dynamically store values of different types at - * runtime. - * - * You can create a Variant using either the pseudo-constructor or direct - * assignment. - * - * ----- - * Variant v = Variant(42); - * v = "abc"; - * ----- - */ -struct Variant -{ - /** - * This pseudo-constructor is used to place a value into a new Variant. - * - * Params: - * value = The value you wish to put in the Variant. - * - * Returns: - * The new Variant. - */ - static Variant opCall(T)(T value) - { - Variant _this; - - static if( isStaticArray!(T) ) - _this = value.dup; - - else - _this = value; - - return _this; - } - - /** - * This operator allows you to assign arbitrary values directly into an - * existing Variant. - * - * Params: - * value = The value you wish to put in the Variant. - * - * Returns: - * The new value of the assigned-to variant. - */ - Variant opAssign(T)(T value) - { - static if( isStaticArray!(T) ) - { - return (*this = value.dup); - } - else - { - type = typeid(T); - - static if( isAtomicType!(T) ) - { - mixin("this.value._"~T.stringof~"=value;"); - } - else static if( isArray!(T) ) - { - this.value.arr = (cast(void*)value.ptr) - [0 .. value.length]; - } - else static if( isPointer!(T) ) - { - this.value.ptr = cast(void*)T; - } - else static if( isObject!(T) ) - { - this.value.obj = T; - } - else - { - if( T.sizeof <= this.value.data.length ) - { - this.value.data[0..T.sizeof] = - (cast(ubyte*)&value)[0..T.sizeof]; - } - else - { - auto buffer = (cast(ubyte*)&value)[0..T.sizeof].dup; - this.value.arr = cast(void[])buffer; - } - } - return *this; - } - } - - /** - * This member can be used to determine if the value stored in the Variant - * is of the specified type. Note that this comparison is exact: it does - * not take implicit casting rules into account. - * - * Returns: - * true if the Variant contains a value of type T, false otherwise. - */ - bool isA(T)() - { - return cast(bool)(typeid(T) is type); - } - - /** - * This member can be used to determine if the value stored in the Variant - * is of the specified type. This comparison attempts to take implicit - * conversion rules into account. - * - * Returns: - * true if the Variant contains a value of type T, or if the Variant - * contains a value that can be implicitly cast to type T; false - * otherwise. - */ - bool isImplicitly(T)() - { - return ( cast(bool)(typeid(T) is type) - || canImplicitCastTo!(T)(type) ); - } - - /** - * This determines whether the Variant has an assigned value or not. It - * is simply short-hand for calling the isA member with a type of void. - * - * Returns: - * true if the Variant does not contain a value, false otherwise. - */ - bool isEmpty() - { - return isA!(void); - } - - /** - * This member will clear the Variant, returning it to an empty state. - */ - void clear() - { - _type = typeid(void); - value = value.init; - } - - /** - * This is the primary mechanism for extracting a value from a Variant. - * Given a destination type S, it will attempt to extract the value of the - * Variant into that type. If the value contained within the Variant - * cannot be implicitly cast to the given type S, it will throw an - * exception. - * - * You can check to see if this operation will fail by calling the - * isImplicitly member with the type S. - * - * Returns: - * The value stored within the Variant. - */ - storageT!(S) get(S)() - { - alias storageT!(S) T; - - if( type !is typeid(T) - // Let D do runtime check itself - && !isObject!(T) - // Allow implicit upcasts - && !canImplicitCastTo!(T)(type) - ) - throw new VariantTypeMismatchException(type,typeid(T)); - - static if( isAtomicType!(T) ) - { - if( type is typeid(T) ) - { - return mixin("this.value._"~T.stringof); - } - else - { - if( type is tibool ) return cast(T)this.value._bool; - else if( type is tichar ) return cast(T)this.value._char; - else if( type is tiwchar ) return cast(T)this.value._wchar; - else if( type is tidchar ) return cast(T)this.value._dchar; - else if( type is tibyte ) return cast(T)this.value._byte; - else if( type is tishort ) return cast(T)this.value._short; - else if( type is tiint ) return cast(T)this.value._int; - else if( type is tilong ) return cast(T)this.value._long; - else if( type is tiubyte ) return cast(T)this.value._ubyte; - else if( type is tiushort ) return cast(T)this.value._ushort; - else if( type is tiuint ) return cast(T)this.value._uint; - else if( type is tiulong ) return cast(T)this.value._ulong; - else if( type is tifloat ) return cast(T)this.value._float; - else if( type is tidouble ) return cast(T)this.value._double; - else if( type is tireal ) return cast(T)this.value._real; - else if( type is tiifloat ) return cast(T)this.value._ifloat; - else if( type is tiidouble ) return cast(T)this.value._idouble; - else if( type is tiireal ) return cast(T)this.value._ireal; - else - throw new VariantTypeMismatchException(type,typeid(T)); - } - } - else static if( isArray!(T) ) - { - return (cast(typeof(T[0])*)this.value.arr.ptr) - [0 .. this.value.arr.length]; - } - else static if( isPointer!(T) ) - { - return cast(T)this.value.ptr; - } - else static if( isObject!(T) ) - { - return cast(T)this.value.obj; - } - else - { - if( T.sizeof <= this.value.data.length ) - { - T result; - (cast(ubyte*)&result)[0..T.sizeof] = - this.value.data[0..T.sizeof]; - return result; - } - else - { - T result; - (cast(ubyte*)&result)[0..T.sizeof] = - (cast(ubyte[])this.value.arr)[0..T.sizeof]; - return result; - } - } - assert(false); - } - - /** - * The following operator overloads are defined for the sake of - * convenience. It is important to understand that they do not allow you - * to use a Variant as both the left-hand and right-hand sides of an - * expression. One side of the operator must be a concrete type in order - * for the Variant to know what code to generate. - */ - typeof(T+T) opAdd(T)(T rhs) { return get!(T) + rhs; } - typeof(T+T) opAdd_r(T)(T lhs) { return lhs + get!(T); } /// ditto - typeof(T-T) opSub(T)(T rhs) { return get!(T) - rhs; } /// ditto - typeof(T-T) opSub_r(T)(T lhs) { return lhs - get!(T); } /// ditto - typeof(T*T) opMul(T)(T rhs) { return get!(T) * rhs; } /// ditto - typeof(T*T) opMul_r(T)(T lhs) { return lhs * get!(T); } /// ditto - typeof(T/T) opDiv(T)(T rhs) { return get!(T) / rhs; } /// ditto - typeof(T/T) opDiv_r(T)(T lhs) { return lhs / get!(T); } /// ditto - typeof(T%T) opMod(T)(T rhs) { return get!(T) % rhs; } /// ditto - typeof(T%T) opMod_r(T)(T lhs) { return lhs % get!(T); } /// ditto - typeof(T&T) opAnd(T)(T rhs) { return get!(T) & rhs; } /// ditto - typeof(T&T) opAnd_r(T)(T lhs) { return lhs & get!(T); } /// ditto - typeof(T|T) opOr(T)(T rhs) { return get!(T) | rhs; } /// ditto - typeof(T|T) opOr_r(T)(T lhs) { return lhs | get!(T); } /// ditto - typeof(T^T) opXor(T)(T rhs) { return get!(T) ^ rhs; } /// ditto - typeof(T^T) opXor_r(T)(T lhs) { return lhs ^ get!(T); } /// ditto - typeof(T<>T) opShr(T)(T rhs) { return get!(T) >> rhs; } /// ditto - typeof(T>>T) opShr_r(T)(T lhs) { return lhs >> get!(T); } /// ditto - typeof(T>>>T) opUShr(T)(T rhs) { return get!(T) >>> rhs; } /// ditto - typeof(T>>>T) opUShr_r(T)(T lhs){ return lhs >>> get!(T); } /// ditto - typeof(T~T) opCat(T)(T rhs) { return get!(T) ~ rhs; } /// ditto - typeof(T~T) opCat_r(T)(T lhs) { return lhs ~ get!(T); } /// ditto - - Variant opAddAssign(T)(T value) { return (*this = get!(T) + value); } /// ditto - Variant opSubAssign(T)(T value) { return (*this = get!(T) - value); } /// ditto - Variant opMulAssign(T)(T value) { return (*this = get!(T) * value); } /// ditto - Variant opDivAssign(T)(T value) { return (*this = get!(T) / value); } /// ditto - Variant opModAssign(T)(T value) { return (*this = get!(T) % value); } /// ditto - Variant opAndAssign(T)(T value) { return (*this = get!(T) & value); } /// ditto - Variant opOrAssign(T)(T value) { return (*this = get!(T) | value); } /// ditto - Variant opXorAssign(T)(T value) { return (*this = get!(T) ^ value); } /// ditto - Variant opShlAssign(T)(T value) { return (*this = get!(T) << value); } /// ditto - Variant opShrAssign(T)(T value) { return (*this = get!(T) >> value); } /// ditto - Variant opUShrAssign(T)(T value){ return (*this = get!(T) >>> value); } /// ditto - Variant opCatAssign(T)(T value) { return (*this = get!(T) ~ value); } /// ditto - - /** - * The following operators can be used with Variants on both sides. Note - * that these operators do not follow the standard rules of - * implicit conversions. - */ - int opEquals(T)(T rhs) - { - static if( is( T == Variant ) ) - return opEqualsVariant(rhs); - else - return get!(T) == rhs; - } - - /// ditto - int opCmp(T)(T rhs) - { - static if( is( T == Variant ) ) - return opCmpVariant(rhs); - else - { - auto lhs = get!(T); - return (lhs < rhs) ? -1 : (lhs == rhs) ? 0 : 1; - } - } - - /// ditto - hash_t toHash() - { - return type.getHash(data.ptr); - } - - /** - * Performs "stringification" of the value stored within the Variant. In - * the case of the Variant having no assigned value, it will return the - * string "Variant.init". - * - * Returns: - * The string representation of the value contained within the Variant. - */ - char[] toString() - { - return type.toString; - } - - /** - * This can be used to retrieve the TypeInfo for the currently stored - * value. - */ - TypeInfo type() - { - return _type; - } - -private: - TypeInfo _type = typeid(void); - AtomicTypes value; - - TypeInfo type(TypeInfo v) - { - return (_type = v); - } - - int opEqualsVariant(Variant rhs) - { - if( type != rhs.type ) return false; - return cast(bool) type.equals(data.ptr, rhs.data.ptr); - } - - int opCmpVariant(Variant rhs) - { - if( type != rhs.type ) - throw new VariantTypeMismatchException(type, rhs.type); - return type.compare(data.ptr, rhs.data.ptr); - } - - void[] data() - { - if( type.tsize <= value.data.length ) - return cast(void[])(value.data); - else - return value.arr; - } -} - -debug( UnitTest ) -{ - unittest - { - Variant v; - assert( v.isA!(void), v.type.toString ); - assert( v.isEmpty, v.type.toString ); - - v = 42; - assert( v.isA!(int), v.type.toString ); - assert( v.isImplicitly!(long), v.type.toString ); - assert( v.isImplicitly!(ulong), v.type.toString ); - assert( !v.isImplicitly!(uint), v.type.toString ); - assert( v.get!(int) == 42 ); - assert( v.get!(long) == 42L ); - assert( v.get!(ulong) == 42uL ); - - v.clear; - assert( v.isA!(void), v.type.toString ); - assert( v.isEmpty, v.type.toString ); - - v = "Hello, World!"c; - assert( v.isA!(char[]), v.type.toString ); - assert( !v.isImplicitly!(wchar[]), v.type.toString ); - assert( v.get!(char[]) == "Hello, World!" ); - - v = [1,2,3,4,5]; - assert( v.isA!(int[]), v.type.toString ); - assert( v.get!(int[]) == [1,2,3,4,5] ); - - v = 3.1413; - assert( v.isA!(double), v.type.toString ); - assert( v.isImplicitly!(real), v.type.toString ); - assert( !v.isImplicitly!(float), v.type.toString ); - assert( v.get!(double) == 3.1413 ); - - auto u = Variant(v); - assert( u.isA!(double), u.type.toString ); - assert( u.get!(double) == 3.1413 ); - - v = 38; - assert( v + 4 == 42 ); - assert( 4 + v == 42 ); - assert( v - 4 == 34 ); - assert( 4 - v == -34 ); - assert( v * 2 == 76 ); - assert( 2 * v == 76 ); - assert( v / 2 == 19 ); - assert( 2 / v == 0 ); - assert( v % 2 == 0 ); - assert( 2 % v == 2 ); - assert( (v & 6) == 6 ); - assert( (6 & v) == 6 ); - assert( (v | 9) == 47 ); - assert( (9 | v) == 47 ); - assert( (v ^ 5) == 35 ); - assert( (5 ^ v) == 35 ); - assert( v << 1 == 76 ); - assert( 1 << Variant(2) == 4 ); - assert( v >> 1 == 19 ); - assert( 4 >> Variant(2) == 1 ); - - assert( Variant("abc") ~ "def" == "abcdef" ); - assert( "abc" ~ Variant("def") == "abcdef" ); - - v = 38; v += 4; assert( v == 42 ); - v = 38; v -= 4; assert( v == 34 ); - v = 38; v *= 2; assert( v == 76 ); - v = 38; v /= 2; assert( v == 19 ); - v = 38; v %= 2; assert( v == 0 ); - v = 38; v &= 6; assert( v == 6 ); - v = 38; v |= 9; assert( v == 47 ); - v = 38; v ^= 5; assert( v == 35 ); - v = 38; v <<= 1; assert( v == 76 ); - v = 38; v >>= 1; assert( v == 19 ); - - v = "abc"; v ~= "def"; assert( v == "abcdef" ); - - assert( Variant(0) < Variant(42) ); - assert( Variant(42) > Variant(0) ); - assert( Variant(21) == Variant(21) ); - assert( Variant(0) != Variant(42) ); - assert( Variant("bar") == Variant("bar") ); - assert( Variant("foo") != Variant("bar") ); - { - auto v1 = Variant(42); - auto v2 = Variant("foo"); - auto v3 = Variant(1+2.0i); - - int[Variant] hash; - hash[v1] = 0; - hash[v2] = 1; - hash[v3] = 2; - - assert( hash[v1] == 0 ); - assert( hash[v2] == 1 ); - assert( hash[v3] == 2 ); - } - { - int[char[]] hash; - hash["a"] = 1; - hash["b"] = 2; - hash["c"] = 3; - Variant vhash = hash; - - assert( vhash.get!(int[char[]])["a"] == 1 ); - assert( vhash.get!(int[char[]])["b"] == 2 ); - assert( vhash.get!(int[char[]])["c"] == 3 ); - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/Version.d --- a/tango/tango/core/Version.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jan 2007: Initial release - - author: Kris - - Exposes the library version number - -*******************************************************************************/ - -module tango.core.Version; - -public const Tango = 0.994f; - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/Barrier.d --- a/tango/tango/core/sync/Barrier.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,148 +0,0 @@ -/** - * The barrier module provides a primitive for synchronizing the progress of - * a group of threads. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.Barrier; - - -public import tango.core.Exception : SyncException; -private import tango.core.sync.Condition; -private import tango.core.sync.Mutex; - -version( Win32 ) -{ - private import tango.sys.win32.UserGdi; -} -else version( Posix ) -{ - private import tango.stdc.errno; - private import tango.stdc.posix.pthread; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Barrier -// -// void wait(); -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class represents a barrier across which threads may only travel in - * groups of a specific size. - */ -class Barrier -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a barrier object which releases threads in groups of limit - * in size. - * - * Params: - * limit = The number of waiting threads to release in unison. - * - * Throws: - * SyncException on error. - */ - this( uint limit ) - in - { - assert( limit > 0 ); - } - body - { - m_lock = new Mutex; - m_cond = new Condition( m_lock ); - m_group = 0; - m_limit = limit; - m_count = limit; - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Wait for the pre-determined number of threads and then proceed. - * - * Throws: - * SyncException on error. - */ - void wait() - { - synchronized( m_lock ) - { - uint group = m_group; - - if( --m_count == 0 ) - { - m_group++; - m_count = m_limit; - m_cond.notifyAll(); - } - while( group == m_group ) - m_cond.wait(); - } - } - - -private: - Mutex m_lock; - Condition m_cond; - uint m_group; - uint m_limit; - uint m_count; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - private import tango.core.Thread; - - - unittest - { - int numThreads = 10; - auto barrier = new Barrier( numThreads ); - auto synInfo = new Object; - int numReady = 0; - int numPassed = 0; - - void threadFn() - { - synchronized( synInfo ) - { - ++numReady; - } - barrier.wait(); - synchronized( synInfo ) - { - ++numPassed; - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numThreads; ++i ) - { - group.create( &threadFn ); - } - group.joinAll(); - assert( numReady == numThreads && numPassed == numThreads ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/Condition.d --- a/tango/tango/core/sync/Condition.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,560 +0,0 @@ -/** - * The condition module provides a primitive for synchronized condition - * checking. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.Condition; - - -public import tango.core.Exception : SyncException; -public import tango.core.sync.Mutex; - -version( Win32 ) -{ - private import tango.core.sync.Semaphore; - private import tango.sys.win32.UserGdi; -} -else version( Posix ) -{ - private import tango.core.sync.Config; - private import tango.stdc.errno; - private import tango.stdc.posix.pthread; - private import tango.stdc.posix.time; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Condition -// -// void wait(); -// void notify(); -// void notifyAll(); -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class represents a condition variable as concieved by C.A.R. Hoare. As - * per Mesa type monitors however, "signal" has been replaced with "notify" to - * indicate that control is not transferred to the waiter when a notification - * is sent. - */ -class Condition -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a condition object which is associated with the supplied - * mutex object. - * - * Params: - * m = The mutex with which this condition will be associated. - * - * Throws: - * SyncException on error. - */ - this( Mutex m ) - { - version( Win32 ) - { - m_blockLock = CreateSemaphoreA( null, 1, 1, null ); - if( m_blockLock == m_blockLock.init ) - throw new SyncException( "Unable to initialize condition" ); - scope(failure) CloseHandle( m_blockLock ); - - m_blockQueue = CreateSemaphoreA( null, 0, int.max, null ); - if( m_blockQueue == m_blockQueue.init ) - throw new SyncException( "Unable to initialize condition" ); - scope(failure) CloseHandle( m_blockQueue ); - - InitializeCriticalSection( &m_unblockLock ); - m_assocMutex = m; - } - else version( Posix ) - { - m_mutexAddr = m.handleAddr(); - - int rc = pthread_cond_init( &m_hndl, null ); - if( rc ) - throw new SyncException( "Unable to initialize condition" ); - } - } - - - ~this() - { - version( Win32 ) - { - BOOL rc = CloseHandle( m_blockLock ); - assert( rc, "Unable to destroy condition" ); - rc = CloseHandle( m_blockQueue ); - assert( rc, "Unable to destroy condition" ); - DeleteCriticalSection( &m_unblockLock ); - } - else version( Posix ) - { - int rc = pthread_cond_destroy( &m_hndl ); - assert( !rc, "Unable to destroy condition" ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Wait until notified. - * - * Throws: - * SyncException on error. - */ - void wait() - { - version( Win32 ) - { - timedWait( INFINITE ); - } - else version( Posix ) - { - int rc = pthread_cond_wait( &m_hndl, m_mutexAddr ); - if( rc ) - throw new SyncException( "Unable to wait for condition" ); - } - } - - - /** - * Suspends the calling thread until a notification occurs or until the - * supplied time period has elapsed. The supplied period may be up to a - * maximum of (uint.max - 1) milliseconds. - * - * Params: - * period = The time to wait, in seconds (fractional values are accepted). - * - * In: - * period must be less than (uint.max - 1) milliseconds. - * - * Returns: - * true if notified before the timeout and false if not. - * - * Throws: - * SyncException on error. - */ - bool wait( double period ) - in - { - // NOTE: The fractional value added to period is to correct fp error. - assert( period * 1000 + 0.1 < uint.max - 1 ); - } - body - { - version( Win32 ) - { - return timedWait( cast(uint)(period * 1000 + 0.1) ); - } - else version( Posix ) - { - timespec t; - - getTimespec( t ); - adjTimespec( t, period ); - int rc = pthread_cond_timedwait( &m_hndl, m_mutexAddr, &t ); - if( !rc ) - return true; - if( rc == ETIMEDOUT ) - return false; - throw new SyncException( "Unable to wait for condition" ); - } - } - - /** - * Notifies one waiter. - * - * Throws: - * SyncException on error. - */ - void notify() - { - version( Win32 ) - { - notify( false ); - } - else version( Posix ) - { - int rc = pthread_cond_signal( &m_hndl ); - if( rc ) - throw new SyncException( "Unable to notify condition" ); - } - } - - - /** - * Notifies all waiters. - * - * Throws: - * SyncException on error. - */ - void notifyAll() - { - version( Win32 ) - { - notify( true ); - } - else version( Posix ) - { - int rc = pthread_cond_broadcast( &m_hndl ); - if( rc ) - throw new SyncException( "Unable to notify condition" ); - } - } - - -private: - version( Win32 ) - { - bool timedWait( DWORD timeout ) - { - int numSignalsLeft; - int numWaitersGone; - DWORD rc; - - rc = WaitForSingleObject( m_blockLock, INFINITE ); - assert( rc == WAIT_OBJECT_0 ); - - m_numWaitersBlocked++; - - rc = ReleaseSemaphore( m_blockLock, 1, null ); - assert( rc ); - - m_assocMutex.unlock(); - scope(failure) m_assocMutex.lock(); - - rc = WaitForSingleObject( m_blockQueue, timeout ); - assert( rc == WAIT_OBJECT_0 || rc == WAIT_TIMEOUT ); - bool timedOut = (rc == WAIT_TIMEOUT); - - EnterCriticalSection( &m_unblockLock ); - scope(failure) LeaveCriticalSection( &m_unblockLock ); - - if( (numSignalsLeft = m_numWaitersToUnblock) != 0 ) - { - if ( timedOut ) - { - // timeout (or canceled) - if( m_numWaitersBlocked != 0 ) - { - m_numWaitersBlocked--; - // do not unblock next waiter below (already unblocked) - numSignalsLeft = 0; - } - else - { - // spurious wakeup pending!! - m_numWaitersGone = 1; - } - } - if( --m_numWaitersToUnblock == 0 ) - { - if( m_numWaitersBlocked != 0 ) - { - // open the gate - rc = ReleaseSemaphore( m_blockLock, 1, null ); - assert( rc ); - // do not open the gate below again - numSignalsLeft = 0; - } - else if( (numWaitersGone = m_numWaitersGone) != 0 ) - { - m_numWaitersGone = 0; - } - } - } - else if( ++m_numWaitersGone == int.max / 2 ) - { - // timeout/canceled or spurious event :-) - rc = WaitForSingleObject( m_blockLock, INFINITE ); - assert( rc == WAIT_OBJECT_0 ); - // something is going on here - test of timeouts? - m_numWaitersBlocked -= m_numWaitersGone; - rc = ReleaseSemaphore( m_blockLock, 1, null ); - assert( rc == WAIT_OBJECT_0 ); - m_numWaitersGone = 0; - } - - LeaveCriticalSection( &m_unblockLock ); - - if( numSignalsLeft == 1 ) - { - // better now than spurious later (same as ResetEvent) - for( ; numWaitersGone > 0; --numWaitersGone ) - { - rc = WaitForSingleObject( m_blockQueue, INFINITE ); - assert( rc == WAIT_OBJECT_0 ); - } - // open the gate - rc = ReleaseSemaphore( m_blockLock, 1, null ); - assert( rc ); - } - else if( numSignalsLeft != 0 ) - { - // unblock next waiter - rc = ReleaseSemaphore( m_blockQueue, 1, null ); - assert( rc ); - } - m_assocMutex.lock(); - return !timedOut; - } - - - void notify( bool all ) - { - DWORD rc; - - EnterCriticalSection( &m_unblockLock ); - scope(failure) LeaveCriticalSection( &m_unblockLock ); - - if( m_numWaitersToUnblock != 0 ) - { - if( m_numWaitersBlocked == 0 ) - { - LeaveCriticalSection( &m_unblockLock ); - return; - } - if( all ) - { - m_numWaitersToUnblock += m_numWaitersBlocked; - m_numWaitersBlocked = 0; - } - else - { - m_numWaitersToUnblock++; - m_numWaitersBlocked--; - } - LeaveCriticalSection( &m_unblockLock ); - } - else if( m_numWaitersBlocked > m_numWaitersGone ) - { - rc = WaitForSingleObject( m_blockLock, INFINITE ); - assert( rc == WAIT_OBJECT_0 ); - if( 0 != m_numWaitersGone ) - { - m_numWaitersBlocked -= m_numWaitersGone; - m_numWaitersGone = 0; - } - if( all ) - { - m_numWaitersToUnblock = m_numWaitersBlocked; - m_numWaitersBlocked = 0; - } - else - { - m_numWaitersToUnblock = 1; - m_numWaitersBlocked--; - } - LeaveCriticalSection( &m_unblockLock ); - rc = ReleaseSemaphore( m_blockQueue, 1, null ); - assert( rc ); - } - else - { - LeaveCriticalSection( &m_unblockLock ); - } - } - - - // NOTE: This implementation uses Algorithm 8c as described here: - // http://groups.google.com/group/comp.programming.threads/ - // browse_frm/thread/1692bdec8040ba40/e7a5f9d40e86503a - HANDLE m_blockLock; // auto-reset event (now semaphore) - HANDLE m_blockQueue; // auto-reset event (now semaphore) - Mutex m_assocMutex; // external mutex/CS - CRITICAL_SECTION m_unblockLock; // internal mutex/CS - int m_numWaitersGone = 0; - int m_numWaitersBlocked = 0; - int m_numWaitersToUnblock = 0; - } - else version( Posix ) - { - pthread_cond_t m_hndl; - pthread_mutex_t* m_mutexAddr; - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - private import tango.core.Thread; - private import tango.core.sync.Mutex; - private import tango.core.sync.Semaphore; - - - void testNotify() - { - auto mutex = new Mutex; - auto condReady = new Condition( mutex ); - auto semDone = new Semaphore; - auto synLoop = new Object; - int numWaiters = 10; - int numTries = 10; - int numReady = 0; - int numTotal = 0; - int numDone = 0; - int numPost = 0; - - void waiter() - { - for( int i = 0; i < numTries; ++i ) - { - synchronized( mutex ) - { - while( numReady < 1 ) - { - condReady.wait(); - } - --numReady; - ++numTotal; - } - - synchronized( synLoop ) - { - ++numDone; - } - semDone.wait(); - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numWaiters; ++i ) - group.create( &waiter ); - - for( int i = 0; i < numTries; ++i ) - { - for( int j = 0; j < numWaiters; ++j ) - { - synchronized( mutex ) - { - ++numReady; - condReady.notify(); - } - } - while( true ) - { - synchronized( synLoop ) - { - if( numDone >= numWaiters ) - break; - } - Thread.yield(); - } - for( int j = 0; j < numWaiters; ++j ) - { - semDone.notify(); - } - } - - group.joinAll(); - assert( numTotal == numWaiters * numTries ); - } - - - void testNotifyAll() - { - auto mutex = new Mutex; - auto condReady = new Condition( mutex ); - int numWaiters = 10; - int numReady = 0; - int numDone = 0; - bool alert = false; - - void waiter() - { - synchronized( mutex ) - { - ++numReady; - while( !alert ) - condReady.wait(); - ++numDone; - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numWaiters; ++i ) - group.create( &waiter ); - - while( true ) - { - synchronized( mutex ) - { - if( numReady >= numWaiters ) - { - alert = true; - condReady.notifyAll(); - break; - } - } - Thread.yield(); - } - group.joinAll(); - assert( numReady == numWaiters && numDone == numWaiters ); - } - - - void testWaitTimeout() - { - auto mutex = new Mutex; - auto condReady = new Condition( mutex ); - bool waiting = false; - bool alertedOne = true; - bool alertedTwo = true; - - void waiter() - { - synchronized( mutex ) - { - waiting = true; - alertedOne = condReady.wait( 1 ); - alertedTwo = condReady.wait( 1 ); - } - } - - auto thread = new Thread( &waiter ); - thread.start(); - - while( true ) - { - synchronized( mutex ) - { - if( waiting ) - { - condReady.notify(); - break; - } - } - Thread.yield(); - } - thread.join(); - assert( waiting && alertedOne && !alertedTwo ); - } - - - unittest - { - testNotify(); - testNotifyAll(); - testWaitTimeout(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/Config.d --- a/tango/tango/core/sync/Config.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/** - * The config module contains utility routines and configuration information - * specific to this package. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.Config; - - -public import tango.core.Exception : SyncException; - - -version( Posix ) -{ - private import tango.stdc.posix.time; - private import tango.stdc.posix.sys.time; - - - void getTimespec( inout timespec t ) - { - static if( is( typeof( clock_gettime ) ) ) - { - clock_gettime( CLOCK_REALTIME, &t ); - } - else - { - timeval tv; - - gettimeofday( &tv, null ); - (cast(byte*) &t)[0 .. t.sizeof] = 0; - t.tv_sec = cast(typeof(t.tv_sec)) tv.tv_sec; - t.tv_nsec = cast(typeof(t.tv_nsec)) tv.tv_usec * 1_000; - } - } - - - void adjTimespec( inout timespec t, double v ) - { - enum - { - SECS_TO_NANOS = 1_000_000_000 - } - - // NOTE: The fractional value added to period is to correct fp error. - v += 0.000_000_000_1; - - if( t.tv_sec.max - t.tv_sec < v ) - { - t.tv_sec = t.tv_sec.max; - t.tv_nsec = 0; - } - else - { - alias typeof(t.tv_sec) Secs; - alias typeof(t.tv_nsec) Nanos; - - t.tv_sec += cast(Secs) v; - auto ns = cast(long)((v % 1.0) * SECS_TO_NANOS); - if( SECS_TO_NANOS - t.tv_nsec < ns ) - { - t.tv_sec += 1; - ns -= SECS_TO_NANOS; - } - t.tv_nsec += cast(Nanos) ns; - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/Mutex.d --- a/tango/tango/core/sync/Mutex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -/** - * The mutex module provides a primitive for maintaining mutually exclusive - * access. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.Mutex; - - -public import tango.core.Exception : SyncException; - -version( Win32 ) -{ - private import tango.sys.win32.UserGdi; -} -else version( Posix ) -{ - private import tango.stdc.posix.pthread; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Mutex -// -// void lock(); -// void unlock(); -// bool tryLock(); -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class represents a general purpose, recursive mutex. - */ -class Mutex : - Object.Monitor -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a mutex object. - * - * Throws: - * SyncException on error. - */ - this() - { - version( Win32 ) - { - InitializeCriticalSection( &m_hndl ); - } - else version( Posix ) - { - int rc = pthread_mutex_init( &m_hndl, &sm_attr ); - if( rc ) - throw new SyncException( "Unable to initialize mutex" ); - } - m_proxy.link = this; - (cast(void**) this)[1] = &m_proxy; - } - - - ~this() - { - version( Win32 ) - { - DeleteCriticalSection( &m_hndl ); - } - else version( Posix ) - { - int rc = pthread_mutex_destroy( &m_hndl ); - assert( !rc, "Unable to destroy mutex" ); - } - (cast(void**) this)[1] = null; - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * If this lock is not already held by the caller, the lock is acquired, - * then the internal counter is incremented by one. - * - * Throws: - * SyncException on error. - */ - void lock() - { - version( Win32 ) - { - EnterCriticalSection( &m_hndl ); - } - else version( Posix ) - { - int rc = pthread_mutex_lock( &m_hndl ); - if( rc ) - throw new SyncException( "Unable to lock mutex" ); - } - } - - - /** - * Decrements the internal lock count by one. If this brings the count to - * zero, the lock is released. - * - * Throws: - * SyncException on error. - */ - void unlock() - { - version( Win32 ) - { - LeaveCriticalSection( &m_hndl ); - } - else version( Posix ) - { - int rc = pthread_mutex_unlock( &m_hndl ); - if( rc ) - throw new SyncException( "Unable to unlock mutex" ); - } - } - - - /** - * If the lock is held by another caller, the method returns. Otherwise, - * the lock is acquired if it is not already held, and then the internal - * counter is incremented by one. - * - * Returns: - * true if the lock was acquired and false if not. - * - * Throws: - * SyncException on error. - */ - bool tryLock() - { - version( Win32 ) - { - return TryEnterCriticalSection( &m_hndl ) != 0; - } - else version( Posix ) - { - return pthread_mutex_trylock( &m_hndl ) == 0; - } - } - - - version( Posix ) - { - static this() - { - int rc = pthread_mutexattr_init( &sm_attr ); - assert( !rc ); - - rc = pthread_mutexattr_settype( &sm_attr, PTHREAD_MUTEX_RECURSIVE ); - assert( !rc ); - } - - - static ~this() - { - int rc = pthread_mutexattr_destroy( &sm_attr ); - assert( !rc ); - } - } - - -private: - version( Win32 ) - { - CRITICAL_SECTION m_hndl; - } - else version( Posix ) - { - static pthread_mutexattr_t sm_attr; - - pthread_mutex_t m_hndl; - } - - struct MonitorProxy - { - Object.Monitor link; - } - - MonitorProxy m_proxy; - - -package: - version( Posix ) - { - pthread_mutex_t* handleAddr() - { - return &m_hndl; - } - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - private import tango.core.Thread; - - - unittest - { - auto mutex = new Mutex; - int numThreads = 10; - int numTries = 1000; - int lockCount = 0; - - void testFn() - { - for( int i = 0; i < numTries; ++i ) - { - synchronized( mutex ) - { - ++lockCount; - } - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numThreads; ++i ) - group.create( &testFn ); - - group.joinAll(); - assert( lockCount == numThreads * numTries ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/ReadWriteMutex.d --- a/tango/tango/core/sync/ReadWriteMutex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,513 +0,0 @@ -/** - * The read/write mutex module provides a primitive for maintaining shared read - * access and mutually exclusive write access. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.ReadWriteMutex; - - -public import tango.core.Exception : SyncException; -private import tango.core.sync.Condition; -private import tango.core.sync.Mutex; - -version( Win32 ) -{ - private import tango.sys.win32.UserGdi; -} -else version( Posix ) -{ - private import tango.stdc.posix.pthread; -} - - -//////////////////////////////////////////////////////////////////////////////// -// ReadWriteMutex -// -// Reader reader(); -// Writer writer(); -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class represents a mutex that allows any number of readers to enter, - * but when a writer enters, all other readers and writers are blocked. - * - * Please note that this mutex is not recursive and is intended to guard access - * to data only. Also, no deadlock checking is in place because doing so would - * require dynamic memory allocation, which would reduce performance by an - * unacceptable amount. As a result, any attempt to recursively acquire this - * mutex may well deadlock the caller, particularly if a write lock is acquired - * while holding a read lock, or vice-versa. In practice, this should not be - * an issue however, because it is uncommon to call deeply into unknown code - * while holding a lock that simply protects data. - */ -class ReadWriteMutex -{ - /** - * Defines the policy used by this mutex. Currently, two policies are - * defined. - * - * The first will queue writers until no readers hold the mutex, then - * pass the writers through one at a time. If a reader acquires the mutex - * while there are still writers queued, the reader will take precedence. - * - * The second will queue readers if there are any writers queued. Writers - * are passed through one at a time, and once there are no writers present, - * all queued readers will be alerted. - * - * Future policies may offer a more even balance between reader and writer - * precedence. - */ - enum Policy - { - PREFER_READERS, /// Readers get preference. This may starve writers. - PREFER_WRITERS /// Writers get preference. This may starve readers. - } - - - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a read/write mutex object with the supplied policy. - * - * Params: - * policy = The policy to use. - * - * Throws: - * SyncException on error. - */ - this( Policy policy = Policy.PREFER_WRITERS ) - { - m_commonMutex = new Mutex; - if( !m_commonMutex ) - throw new SyncException( "Unable to initialize mutex" ); - scope(failure) delete m_commonMutex; - - m_readerQueue = new Condition( m_commonMutex ); - if( !m_readerQueue ) - throw new SyncException( "Unable to initialize mutex" ); - scope(failure) delete m_readerQueue; - - m_writerQueue = new Condition( m_commonMutex ); - if( !m_writerQueue ) - throw new SyncException( "Unable to initialize mutex" ); - scope(failure) delete m_writerQueue; - - m_policy = policy; - version(LLVMDC) - { - pragma(msg, "ReadWriteMutex is broken on LLVMDC"); - } - else - { - m_reader = new Reader; - m_writer = new Writer; - } - } - - - //////////////////////////////////////////////////////////////////////////// - // General Properties - //////////////////////////////////////////////////////////////////////////// - - - /** - * Gets the policy for the associated mutex. - * - * Returns: - * The policy used by this mutex. - */ - Policy policy() - { - return m_policy; - } - - - //////////////////////////////////////////////////////////////////////////// - // Reader/Writer Handles - //////////////////////////////////////////////////////////////////////////// - - - /** - * Gets an object representing the reader lock for the associated mutex. - * - * Returns: - * A reader sub-mutex. - */ - Reader reader() - { - return m_reader; - } - - - /** - * Gets an object representing the writer lock for the associated mutex. - * - * Returns: - * A writer sub-mutex. - */ - Writer writer() - { - return m_writer; - } - - - //////////////////////////////////////////////////////////////////////////// - // Reader - //////////////////////////////////////////////////////////////////////////// - - - /** - * This class can be considered a mutex in its own right, and is used to - * negotiate a read lock for the enclosing mutex. - */ - class Reader : - Object.Monitor - { - /** - * Initializes a read/write mutex reader proxy object. - */ - this() - { - m_proxy.link = this; - (cast(void**) this)[1] = &m_proxy; - } - - - /** - * Acquires a read lock on the enclosing mutex. - */ - void lock() - { - synchronized( m_commonMutex ) - { - ++m_numQueuedReaders; - scope(exit) --m_numQueuedReaders; - - while( shouldQueueReader() ) - m_readerQueue.wait(); - ++m_numActiveReaders; - } - } - - - /** - * Releases a read lock on the enclosing mutex. - */ - void unlock() - { - synchronized( m_commonMutex ) - { - if( --m_numActiveReaders < 1 ) - { - if( m_numQueuedWriters > 0 ) - m_writerQueue.notify(); - } - } - } - - - /** - * Attempts to acquire a read lock on the enclosing mutex. If one can - * be obtained without blocking, the lock is acquired and true is - * returned. If not, the lock is not acquired and false is returned. - * - * Returns: - * true if the lock was acquired and false if not. - */ - bool tryLock() - { - synchronized( m_commonMutex ) - { - if( shouldQueueReader() ) - return false; - ++m_numActiveReaders; - return true; - } - } - - - private: - bool shouldQueueReader() - { - if( m_numActiveWriters > 0 ) - return true; - - switch( m_policy ) - { - case Policy.PREFER_WRITERS: - return m_numQueuedWriters > 0; - - case Policy.PREFER_READERS: - default: - break; - } - - return false; - } - - struct MonitorProxy - { - Object.Monitor link; - } - - MonitorProxy m_proxy; - } - - - //////////////////////////////////////////////////////////////////////////// - // Writer - //////////////////////////////////////////////////////////////////////////// - - - /** - * This class can be considered a mutex in its own right, and is used to - * negotiate a write lock for the enclosing mutex. - */ - class Writer : - Object.Monitor - { - /** - * Initializes a read/write mutex writer proxy object. - */ - this() - { - m_proxy.link = this; - (cast(void**) this)[1] = &m_proxy; - } - - - /** - * Acquires a write lock on the enclosing mutex. - */ - void lock() - { - synchronized( m_commonMutex ) - { - ++m_numQueuedWriters; - scope(exit) --m_numQueuedWriters; - - while( shouldQueueWriter() ) - m_writerQueue.wait(); - ++m_numActiveWriters; - } - } - - - /** - * Releases a write lock on the enclosing mutex. - */ - void unlock() - { - synchronized( m_commonMutex ) - { - if( --m_numActiveWriters < 1 ) - { - switch( m_policy ) - { - default: - case Policy.PREFER_READERS: - if( m_numQueuedReaders > 0 ) - m_readerQueue.notifyAll(); - else if( m_numQueuedWriters > 0 ) - m_writerQueue.notify(); - break; - case Policy.PREFER_WRITERS: - if( m_numQueuedWriters > 0 ) - m_writerQueue.notify(); - else if( m_numQueuedReaders > 0 ) - m_readerQueue.notifyAll(); - } - } - } - } - - - /** - * Attempts to acquire a write lock on the enclosing mutex. If one can - * be obtained without blocking, the lock is acquired and true is - * returned. If not, the lock is not acquired and false is returned. - * - * Returns: - * true if the lock was acquired and false if not. - */ - bool tryLock() - { - synchronized( m_commonMutex ) - { - if( shouldQueueWriter() ) - return false; - ++m_numActiveWriters; - return true; - } - } - - - private: - bool shouldQueueWriter() - { - if( m_numActiveWriters > 0 || - m_numActiveReaders > 0 ) - return true; - switch( m_policy ) - { - case Policy.PREFER_READERS: - return m_numQueuedReaders > 0; - - case Policy.PREFER_WRITERS: - default: - break; - } - - return false; - } - - struct MonitorProxy - { - Object.Monitor link; - } - - MonitorProxy m_proxy; - } - - -private: - Policy m_policy; - Reader m_reader; - Writer m_writer; - - Mutex m_commonMutex; - Condition m_readerQueue; - Condition m_writerQueue; - - int m_numQueuedReaders; - int m_numActiveReaders; - int m_numQueuedWriters; - int m_numActiveWriters; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - private import tango.core.Thread; - - - void testRead( ReadWriteMutex.Policy policy ) - { - auto mutex = new ReadWriteMutex( policy ); - auto synInfo = new Object; - int numThreads = 10; - int numReaders = 0; - int maxReaders = 0; - - void readerFn() - { - synchronized( mutex.reader() ) - { - synchronized( synInfo ) - { - if( ++numReaders > maxReaders ) - maxReaders = numReaders; - } - Thread.yield(); - synchronized( synInfo ) - { - --numReaders; - } - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numThreads; ++i ) - { - group.create( &readerFn ); - } - group.joinAll(); - assert( numReaders < 1 && maxReaders > 1 ); - } - - - void testReadWrite( ReadWriteMutex.Policy policy ) - { - auto mutex = new ReadWriteMutex( policy ); - auto synInfo = new Object; - int numThreads = 10; - int numReaders = 0; - int numWriters = 0; - int maxReaders = 0; - int maxWriters = 0; - int numTries = 20; - - void readerFn() - { - for( int i = 0; i < numTries; ++i ) - { - synchronized( mutex.reader() ) - { - synchronized( synInfo ) - { - if( ++numReaders > maxReaders ) - maxReaders = numReaders; - } - Thread.yield(); - synchronized( synInfo ) - { - --numReaders; - } - } - } - } - - void writerFn() - { - for( int i = 0; i < numTries; ++i ) - { - synchronized( mutex.writer() ) - { - synchronized( synInfo ) - { - if( ++numWriters > maxWriters ) - maxWriters = numWriters; - } - Thread.yield(); - synchronized( synInfo ) - { - --numWriters; - } - } - } - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numThreads; ++i ) - { - group.create( &readerFn ); - group.create( &writerFn ); - } - group.joinAll(); - assert( numReaders < 1 && maxReaders > 1 && - numWriters < 1 && maxWriters < 2 ); - } - - - unittest - { - testRead( ReadWriteMutex.Policy.PREFER_READERS ); - testRead( ReadWriteMutex.Policy.PREFER_WRITERS ); - testReadWrite( ReadWriteMutex.Policy.PREFER_READERS ); - testReadWrite( ReadWriteMutex.Policy.PREFER_WRITERS ); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/core/sync/Semaphore.d --- a/tango/tango/core/sync/Semaphore.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,401 +0,0 @@ -/** - * The semaphore module provides a general use semaphore for synchronization. - * - * Copyright: Copyright (C) 2005-2006 Sean Kelly. All rights reserved. - * License: BSD style: $(LICENSE) - * Authors: Sean Kelly - */ -module tango.core.sync.Semaphore; - - -public import tango.core.Exception : SyncException; - -version( Win32 ) -{ - private import tango.sys.win32.UserGdi; -} -else version( Posix ) -{ - private import tango.core.sync.Config; - private import tango.stdc.errno; - private import tango.stdc.posix.pthread; - private import tango.stdc.posix.semaphore; -} - - -//////////////////////////////////////////////////////////////////////////////// -// Semaphore -// -// void wait(); -// void notify(); -// bool tryWait(); -//////////////////////////////////////////////////////////////////////////////// - - -/** - * This class represents a general counting semaphore as concieved by Edsger - * Dijkstra. As per Mesa type monitors however, "signal" has been replaced - * with "notify" to indicate that control is not transferred to the waiter when - * a notification is sent. - */ -class Semaphore -{ - //////////////////////////////////////////////////////////////////////////// - // Initialization - //////////////////////////////////////////////////////////////////////////// - - - /** - * Initializes a semaphore object with the specified initial count. - * - * Params: - * count = The initial count for the semaphore. - * - * Throws: - * SyncException on error. - */ - this( uint count = 0 ) - { - version( Win32 ) - { - m_hndl = CreateSemaphoreA( null, count, int.max, null ); - if( m_hndl == m_hndl.init ) - throw new SyncException( "Unable to create semaphore" ); - } - else version( Posix ) - { - int rc = sem_init( &m_hndl, 0, count ); - if( rc ) - throw new SyncException( "Unable to create semaphore" ); - } - } - - - ~this() - { - version( Win32 ) - { - BOOL rc = CloseHandle( m_hndl ); - assert( rc, "Unable to destroy semaphore" ); - } - else version( Posix ) - { - int rc = sem_destroy( &m_hndl ); - assert( !rc, "Unable to destroy semaphore" ); - } - } - - - //////////////////////////////////////////////////////////////////////////// - // General Actions - //////////////////////////////////////////////////////////////////////////// - - - /** - * Wait until the current count is above zero, then atomically decrement - * the count by one and return. - * - * Throws: - * SyncException on error. - */ - void wait() - { - version( Win32 ) - { - DWORD rc = WaitForSingleObject( m_hndl, INFINITE ); - if( rc != WAIT_OBJECT_0 ) - throw new SyncException( "Unable to wait for semaphore" ); - } - else version( Posix ) - { - while( true ) - { - if( !sem_wait( &m_hndl ) ) - return; - if( errno != EINTR ) - throw new SyncException( "Unable to wait for semaphore" ); - } - } - } - - - /** - * Suspends the calling thread until the current count moves above zero or - * until the supplied time period has elapsed. If the count moves above - * zero in this interval, then atomically decrement the count by one and - * return true. Otherwise, return false. The supplied period may be up to - * a maximum of (uint.max - 1) milliseconds. - * - * Params: - * period = The number of seconds to wait. - * - * In: - * period must be less than (uint.max - 1) milliseconds. - * - * Returns: - * true if notified before the timeout and false if not. - * - * Throws: - * SyncException on error. - */ - bool wait( double period ) - in - { - assert( period * 1000 + 0.1 < uint.max - 1); - } - body - { - version( Win32 ) - { - DWORD t = cast(DWORD)(period * 1000 + 0.1); - switch( WaitForSingleObject( m_hndl, t ) ) - { - case WAIT_OBJECT_0: - return true; - case WAIT_TIMEOUT: - return false; - default: - throw new SyncException( "Unable to wait for semaphore" ); - } - } - else version( Posix ) - { - timespec t; - - getTimespec( t ); - adjTimespec( t, period ); - - while( true ) - { - if( !sem_timedwait( &m_hndl, &t ) ) - return true; - if( errno == ETIMEDOUT ) - return false; - if( errno != EINTR ) - throw new SyncException( "Unable to wait for semaphore" ); - } - } - - // -w trip - return false; - } - - - /** - * Atomically increment the current count by one. This will notify one - * waiter, if there are any in the queue. - * - * Throws: - * SyncException on error. - */ - void notify() - { - version( Win32 ) - { - if( !ReleaseSemaphore( m_hndl, 1, null ) ) - throw new SyncException( "Unable to notify semaphore" ); - } - else version( Posix ) - { - int rc = sem_post( &m_hndl ); - if( rc ) - throw new SyncException( "Unable to notify semaphore" ); - } - } - - - /** - * If the current count is equal to zero, return. Otherwise, atomically - * decrement the count by one and return true. - * - * Returns: - * true if the count was above zero and false if not. - * - * Throws: - * SyncException on error. - */ - bool tryWait() - { - version( Win32 ) - { - switch( WaitForSingleObject( m_hndl, 0 ) ) - { - case WAIT_OBJECT_0: - return true; - case WAIT_TIMEOUT: - return false; - default: - throw new SyncException( "Unable to wait for semaphore" ); - } - } - else version( Posix ) - { - while( true ) - { - if( !sem_trywait( &m_hndl ) ) - return true; - if( errno == EAGAIN ) - return false; - if( errno != EINTR ) - throw new SyncException( "Unable to wait for semaphore" ); - } - } - - // -w trip - return false; - } - - -private: - version( Win32 ) - { - HANDLE m_hndl; - } - else version( Posix ) - { - sem_t m_hndl; - } -} - - -//////////////////////////////////////////////////////////////////////////////// -// Unit Tests -//////////////////////////////////////////////////////////////////////////////// - - -debug( UnitTest ) -{ - private import tango.core.Thread; - - - void testWait() - { - auto semaphore = new Semaphore; - int numToProduce = 10; - bool allProduced = false; - auto synProduced = new Object; - int numConsumed = 0; - auto synConsumed = new Object; - int numConsumers = 10; - int numComplete = 0; - auto synComplete = new Object; - - void consumer() - { - while( true ) - { - semaphore.wait(); - - synchronized( synProduced ) - { - if( allProduced ) - break; - } - - synchronized( synConsumed ) - { - ++numConsumed; - } - } - - synchronized( synComplete ) - { - ++numComplete; - } - } - - void producer() - { - assert( !semaphore.tryWait() ); - - for( int i = 0; i < numToProduce; ++i ) - { - semaphore.notify(); - Thread.yield(); - } - - synchronized( synProduced ) - { - allProduced = true; - } - - for( int i = 0; i < numConsumers; ++i ) - { - semaphore.notify(); - Thread.yield(); - } - - for( int i = numConsumers * 10; i > 0; --i ) - { - synchronized( synComplete ) - { - if( numComplete == numConsumers ) - break; - } - } - - synchronized( synComplete ) - { - assert( numComplete == numConsumers ); - } - assert( numConsumed == numToProduce ); - - assert( !semaphore.tryWait() ); - semaphore.notify(); - assert( semaphore.tryWait() ); - assert( !semaphore.tryWait() ); - } - - auto group = new ThreadGroup; - - for( int i = 0; i < numConsumers; ++i ) - group.create( &consumer ); - group.create( &producer ); - group.joinAll(); - } - - - void testWaitTimeout() - { - auto synReady = new Object; - auto semReady = new Semaphore; - bool waiting = false; - bool alertedOne = true; - bool alertedTwo = true; - - void waiter() - { - synchronized( synReady ) - { - waiting = true; - } - alertedOne = semReady.wait( 0.1 ); - alertedTwo = semReady.wait( 0.1 ); - } - - auto thread = new Thread( &waiter ); - thread.start(); - - while( true ) - { - synchronized( synReady ) - { - if( waiting ) - { - semReady.notify(); - break; - } - } - Thread.yield(); - } - thread.join(); - assert( waiting && alertedOne && !alertedTwo ); - } - - - unittest - { - testWait(); - testWaitTimeout(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/collection.d --- a/tango/tango/group/collection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -/** - * - * copyright: Copyright (c) 2007 Steven Schveighoffer. All rights reserved - * license: BSD style: $(LICENSE) - * version: Nov 2007: Initial release - * author: schveiguy - * - * Convenience module to import all collection related modules - */ - -module tango.group.collection; - -public import tango.util.collection.HashMap, - tango.util.collection.TreeMap, - tango.util.collection.TreeBag, - tango.util.collection.LinkMap, - tango.util.collection.HashSet, - tango.util.collection.LinkSeq, - tango.util.collection.ArrayBag, - tango.util.collection.ArraySeq, - tango.util.collection.CircularSeq; - -public import tango.util.collection.model.Seq, - tango.util.collection.model.Map, - tango.util.collection.model.Set, - tango.util.collection.model.Bag, - tango.util.collection.model.View, - tango.util.collection.model.BagView, - tango.util.collection.model.SeqView, - tango.util.collection.model.MapView, - tango.util.collection.model.SetView, - tango.util.collection.model.Iterator, - tango.util.collection.model.Sortable, - tango.util.collection.model.Dispenser, - tango.util.collection.model.Comparator, - tango.util.collection.model.HashParams, - tango.util.collection.model.SortedKeys, - tango.util.collection.model.SortedValues, - tango.util.collection.model.GuardIterator; - - -public import tango.util.collection.iterator.ArrayIterator, - tango.util.collection.iterator.FilteringIterator, - tango.util.collection.iterator.InterleavingIterator; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/convert.d --- a/tango/tango/group/convert.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Nov 2007: Initial release - - author: Kris - - Convenience module to import renamed text conversions - -*******************************************************************************/ - -module tango.net.convert; - -public import Utf = tango.text.convert.Utf; -public import Float = tango.text.convert.Float; -public import Integer = tango.text.convert.Integer; -public import TimeStamp = tango.text.convert.TimeStamp; - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/digest.d --- a/tango/tango/group/digest.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,25 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.io.digest modules - -*******************************************************************************/ - -module tango.group.digest; - -public import tango.io.digest.Md2; -public import tango.io.digest.Md4; -public import tango.io.digest.Md5; -public import tango.io.digest.Sha0; -public import tango.io.digest.Sha1; -public import tango.io.digest.Sha01; -public import tango.io.digest.Sha256; -public import tango.io.digest.Sha512; -public import tango.io.digest.Tiger; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/file.d --- a/tango/tango/group/file.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,31 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.io - -*******************************************************************************/ - -module tango.group.file; - -public import tango.io.File, - tango.io.Print, - tango.io.Stdout, - tango.io.Buffer, - tango.io.Conduit, - tango.io.Console, - tango.io.FilePath, - tango.io.FileScan, - tango.io.FileConst, - tango.io.FileRoots, - tango.io.FileSystem, - tango.io.GrowBuffer, - tango.io.FileConduit, - tango.io.UnicodeFile, - tango.io.MappedBuffer; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/http.d --- a/tango/tango/group/http.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.net.http modules - -*******************************************************************************/ - -module tango.group.http; - -public import tango.net.http.HttpGet; -public import tango.net.http.HttpPost; -public import tango.net.http.HttpConst; -public import tango.net.http.HttpClient; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/log.d --- a/tango/tango/group/log.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.util.log modules - -*******************************************************************************/ - -module tango.group.log; - -public import tango.util.log.Log; -public import tango.util.log.Logger; -public import tango.util.log.Hierarchy; -public import tango.util.log.DateLayout; -public import tango.util.log.Log4Layout; -public import tango.util.log.EventLayout; -public import tango.util.log.FileAppender; -public import tango.util.log.MailAppender; -public import tango.util.log.SocketAppender; -public import tango.util.log.ConsoleAppender; -public import tango.util.log.RollingFileAppender; - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/math.d --- a/tango/tango/group/math.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.math modules - -*******************************************************************************/ - -module tango.group.math; - -public import tango.math.Math; -public import tango.math.IEEE; -public import tango.math.Random; -public import tango.math.Bessel; -public import tango.math.Elliptic; -public import tango.math.Probability; -public import tango.math.ErrorFunction; -public import tango.math.GammaFunction; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/net.d --- a/tango/tango/group/net.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.net modules - -*******************************************************************************/ - -module tango.group.net; - -public import tango.net.Uri; -public import tango.net.ServerSocket; -public import tango.net.SocketConduit; -public import tango.net.SocketListener; -public import tango.net.InternetAddress; -public import tango.net.DatagramConduit; -public import tango.net.MulticastConduit; - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/stream.d --- a/tango/tango/group/stream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import streams - -*******************************************************************************/ - -module tango.group.stream; - -public import tango.io.stream.UtfStream, - tango.io.stream.MapStream, - tango.io.stream.LineStream, - tango.io.stream.DataStream, - tango.io.stream.FileStream, - tango.io.stream.TypedStream, - tango.io.stream.SnoopStream, - tango.io.stream.FormatStream, - tango.io.stream.GreedyStream, - tango.io.stream.DigestStream, - tango.io.stream.EndianStream, - tango.io.stream.BufferStream, - tango.io.stream.TextFileStream, - tango.io.stream.DataFileStream; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/text.d --- a/tango/tango/group/text.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import text modules - -*******************************************************************************/ - -module tango.group.text; - -public import tango.text.Text; -public import tango.text.Regex; -public import tango.text.Ascii; - -public import Util = tango.text.Util; - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/group/time.d --- a/tango/tango/group/time.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,21 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2007: Initial release - - author: Kris - - Convenience module to import tango.time modules - -*******************************************************************************/ - -module tango.group.time; - -public import tango.time.Time; -public import tango.time.Clock; -public import tango.time.ISO8601; -public import tango.time.WallClock; -public import tango.time.StopWatch; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/Buffer.d --- a/tango/tango/io/Buffer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1420 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004: Initial release - Dec 2006: Outback release - - authors: Kris - -*******************************************************************************/ - -module tango.io.Buffer; - -private import tango.core.Exception; - -public import tango.io.model.IBuffer, - tango.io.model.IConduit; - -/****************************************************************************** - -******************************************************************************/ - -extern (C) -{ - protected void * memcpy (void *dst, void *src, uint); -} - -/******************************************************************************* - - Buffer is central concept in Tango I/O. Each buffer acts - as a queue (line) where items are removed from the front - and new items are added to the back. Buffers are modeled - by tango.io.model.IBuffer, and a concrete implementation - is provided by this class. - - Buffer can be read from and written to directly, though - various data-converters and filters are often leveraged - to apply structure to what might otherwise be simple raw - data. - - Buffers may also be tokenized by applying an Iterator. - This can be handy when one is dealing with text input, - and/or the content suits a more fluid format than most - typical converters support. Iterator tokens are mapped - directly onto buffer content (sliced), making them quite - efficient in practice. Like other types of buffer client, - multiple iterators can be mapped onto one common buffer - and access will be serialized. - - Buffers are sometimes memory-only, in which case there - is nothing left to do when a client has consumed all the - content. Other buffers are themselves bound to an external - device called a conduit. When this is the case, a consumer - will eventually cause a buffer to reload via its associated - conduit and previous buffer content will be lost. - - A similar approach is applied to clients which populate a - buffer, whereby the content of a full buffer will be flushed - to a bound conduit before continuing. Another variation is - that of a memory-mapped buffer, whereby the buffer content - is mapped directly to virtual memory exposed via the OS. This - can be used to address large files as an array of content. - - Direct buffer manipulation typically involves appending, - as in the following example: - --- - // create a small buffer - auto buf = new Buffer (256); - - auto foo = "to write some D"; - - // append some text directly to it - buf.append ("now is the time for all good men ").append(foo); - --- - - Alternatively, one might use a formatter to append the buffer: - --- - auto output = new FormatOutput (new Buffer(256)); - output.format ("now is the time for {} good men {}", 3, foo); - --- - - A slice() method will return all valid content within a buffer. - GrowBuffer can be used instead, where one wishes to append beyond - a specified limit. - - A common usage of a buffer is in conjunction with a conduit, - such as FileConduit. Each conduit exposes a preferred-size for - its associated buffers, utilized during buffer construction: - --- - auto file = new FileConduit ("file.name"); - auto buf = new Buffer (file); - --- - - However, this is typically hidden by higher level constructors - such as those exposed via the stream wrappers. For example: - --- - auto input = new DataInput (new FileInput("file.name")); - --- - - There is indeed a buffer between the resultant stream and the - file source, but explicit buffer construction is unecessary in - common cases. - - An Iterator is constructed in a similar manner, where you provide - it an input stream to operate upon. There's a variety of iterators - available in the tango.text.stream package, and they are templated - for each of utf8, utf16, and utf32. This example uses a line iterator - to sweep a text file: - --- - auto lines = new LineInput (new FileInput("file.name")); - foreach (line; lines) - Cout(line).newline; - --- - - Buffers are useful for many purposes within Tango, but there - are times when it may be more appropriate to sidestep them. For - such cases, all conduit derivatives (such as FileConduit) support - direct array-based IO via a pair of read() and write() methods. - -*******************************************************************************/ - -class Buffer : IBuffer -{ - protected OutputStream sink; // optional data sink - protected InputStream source; // optional data source - protected void[] data; // the raw data buffer - protected uint index; // current read position - protected uint extent; // limit of valid content - protected uint dimension; // maximum extent of content - - - protected static char[] overflow = "output buffer is full"; - protected static char[] underflow = "input buffer is empty"; - protected static char[] eofRead = "end-of-flow whilst reading"; - protected static char[] eofWrite = "end-of-flow whilst writing"; - - /*********************************************************************** - - Ensure the buffer remains valid between method calls - - ***********************************************************************/ - - invariant - { - assert (index <= extent); - assert (extent <= dimension); - } - - /*********************************************************************** - - Construct a buffer - - Params: - conduit = the conduit to buffer - - Remarks: - Construct a Buffer upon the provided conduit. A relevant - buffer size is supplied via the provided conduit. - - ***********************************************************************/ - - this (IConduit conduit) - { - assert (conduit); - - this (conduit.bufferSize); - setConduit (conduit); - } - - /*********************************************************************** - - Construct a buffer - - Params: - stream = an input stream - capacity = desired buffer capacity - - Remarks: - Construct a Buffer upon the provided input stream. - - ***********************************************************************/ - - this (InputStream stream, uint capacity) - { - this (capacity); - input = stream; - } - - /*********************************************************************** - - Construct a buffer - - Params: - stream = an output stream - capacity = desired buffer capacity - - Remarks: - Construct a Buffer upon the provided output stream. - - ***********************************************************************/ - - this (OutputStream stream, uint capacity) - { - this (capacity); - output = stream; - } - - /*********************************************************************** - - Construct a buffer - - Params: - capacity = the number of bytes to make available - - Remarks: - Construct a Buffer with the specified number of bytes. - - ***********************************************************************/ - - this (uint capacity = 0) - { - setContent (new ubyte[capacity], 0); - assert(this !is null); - } - - /*********************************************************************** - - Construct a buffer - - Params: - data = the backing array to buffer within - - Remarks: - Prime a buffer with an application-supplied array. All content - is considered valid for reading, and thus there is no writable - space initially available. - - ***********************************************************************/ - - this (void[] data) - { - setContent (data, data.length); - } - - /*********************************************************************** - - Construct a buffer - - Params: - data = the backing array to buffer within - readable = the number of bytes initially made - readable - - Remarks: - Prime buffer with an application-supplied array, and - indicate how much readable data is already there. A - write operation will begin writing immediately after - the existing readable content. - - This is commonly used to attach a Buffer instance to - a local array. - - ***********************************************************************/ - - this (void[] data, uint readable) - { - setContent (data, readable); - } - - /*********************************************************************** - - Attempt to share an upstream Buffer, and create an instance - where there not one available. - - Params: - stream = an input stream - size = a hint of the desired buffer size. Defaults to the - conduit-defined size - - Remarks: - If an upstream Buffer instances is visible, it will be shared. - Otherwise, a new instance is created based upon the bufferSize - exposed by the stream endpoint (conduit). - - ***********************************************************************/ - - static IBuffer share (InputStream stream, uint size=uint.max) - { - auto b = cast(Buffered) stream; - if (b) - return b.buffer; - - if (size is uint.max) - size = stream.conduit.bufferSize; - - return new Buffer (stream, size); - } - - /*********************************************************************** - - Attempt to share an upstream Buffer, and create an instance - where there not one available. - - Params: - stream = an output stream - size = a hint of the desired buffer size. Defaults to the - conduit-defined size - - Remarks: - If an upstream Buffer instances is visible, it will be shared. - Otherwise, a new instance is created based upon the bufferSize - exposed by the stream endpoint (conduit). - - ***********************************************************************/ - - static IBuffer share (OutputStream stream, uint size=uint.max) - { - auto b = cast(Buffered) stream; - if (b) - return b.buffer; - - if (size is uint.max) - size = stream.conduit.bufferSize; - - return new Buffer (stream, size); - } - - /*********************************************************************** - - Reset the buffer content - - Params: - data = the backing array to buffer within. All content - is considered valid - - Returns: - the buffer instance - - Remarks: - Set the backing array with all content readable. Writing - to this will either flush it to an associated conduit, or - raise an Eof condition. Use clear() to reset the content - (make it all writable). - - ***********************************************************************/ - - IBuffer setContent (void[] data) - { - return setContent (data, data.length); - } - - /*********************************************************************** - - Reset the buffer content - - Params: - data = the backing array to buffer within - readable = the number of bytes within data considered - valid - - Returns: - the buffer instance - - Remarks: - Set the backing array with some content readable. Writing - to this will either flush it to an associated conduit, or - raise an Eof condition. Use clear() to reset the content - (make it all writable). - - ***********************************************************************/ - - IBuffer setContent (void[] data, uint readable) - { - this.data = data; - this.extent = readable; - this.dimension = data.length; - - // reset to start of input - this.index = 0; - - return this; - } - - /*********************************************************************** - - Access buffer content - - Params: - size = number of bytes to access - eat = whether to consume the content or not - - Returns: - the corresponding buffer slice when successful, or - null if there's not enough data available (Eof; Eob). - - Remarks: - Read a slice of data from the buffer, loading from the - conduit as necessary. The specified number of bytes is - sliced from the buffer, and marked as having been read - when the 'eat' parameter is set true. When 'eat' is set - false, the read position is not adjusted. - - Note that the slice cannot be larger than the size of - the buffer ~ use method fill(void[]) instead where you - simply want the content copied, or use conduit.read() - to extract directly from an attached conduit. Also note - that if you need to retain the slice, then it should be - .dup'd before the buffer is compressed or repopulated. - - Examples: - --- - // create a buffer with some content - auto buffer = new Buffer ("hello world"); - - // consume everything unread - auto slice = buffer.slice (buffer.readable); - --- - - ***********************************************************************/ - - void[] slice (uint size, bool eat = true) - { - if (size > readable) - { - if (source is null) - error (underflow); - - // make some space? This will try to leave as much content - // in the buffer as possible, such that entire records may - // be aliased directly from within. - if (size > writable) - { - if (size > dimension) - error (underflow); - compress (); - } - - // populate tail of buffer with new content - do { - if (fill(source) is IConduit.Eof) - error (eofRead); - } while (size > readable); - } - - auto i = index; - if (eat) - index += size; - return data [i .. i + size]; - } - - /********************************************************************** - - Fill the provided buffer. Returns the number of bytes - actually read, which will be less that dst.length when - Eof has been reached and IConduit.Eof thereafter - - **********************************************************************/ - - uint fill (void[] dst) - { - uint len = 0; - - while (len < dst.length) - { - uint i = read (dst [len .. $]); - if (i is IConduit.Eof) - return (len > 0) ? len : IConduit.Eof; - len += i; - } - return len; - } - - /*********************************************************************** - - Copy buffer content into the provided dst - - Params: - dst = destination of the content - bytes = size of dst - - Returns: - A reference to the populated content - - Remarks: - Fill the provided array with content. We try to satisfy - the request from the buffer content, and read directly - from an attached conduit where more is required. - - ***********************************************************************/ - - void[] readExact (void* dst, uint bytes) - { - auto tmp = dst [0 .. bytes]; - if (fill (tmp) != bytes) - error (eofRead); - - return tmp; - } - - /*********************************************************************** - - Append content - - Params: - src = the content to _append - - Returns a chaining reference if all content was written. - Throws an IOException indicating eof or eob if not. - - Remarks: - Append an array to this buffer, and flush to the - conduit as necessary. This is often used in lieu of - a Writer. - - ***********************************************************************/ - - IBuffer append (void[] src) - { - return append (src.ptr, src.length); - } - - /*********************************************************************** - - Append content - - Params: - src = the content to _append - length = the number of bytes in src - - Returns a chaining reference if all content was written. - Throws an IOException indicating eof or eob if not. - - Remarks: - Append an array to this buffer, and flush to the - conduit as necessary. This is often used in lieu of - a Writer. - - ***********************************************************************/ - - IBuffer append (void* src, uint length) - { - if (length > writable) - // can we write externally? - if (sink) - { - flush (); - - // check for pathological case - if (length > dimension) - { - do { - auto written = sink.write (src [0 .. length]); - if (written is IConduit.Eof) - error (eofWrite); - src += written, length -= written; - } while (length > dimension); - } - } - else - error (overflow); - copy (src, length); - return this; - } - - /*********************************************************************** - - Append content - - Params: - other = a buffer with content available - - Returns: - Returns a chaining reference if all content was written. - Throws an IOException indicating eof or eob if not. - - Remarks: - Append another buffer to this one, and flush to the - conduit as necessary. This is often used in lieu of - a Writer. - - ***********************************************************************/ - - IBuffer append (IBuffer other) - { - return append (other.slice); - } - - /*********************************************************************** - - Consume content from a producer - - Params: - The content to consume. This is consumed verbatim, and in - raw binary format ~ no implicit conversions are performed. - - Remarks: - This is often used in lieu of a Writer, and enables simple - classes, such as FilePath and Uri, to emit content directly - into a buffer (thus avoiding potential heap activity) - - Examples: - --- - auto path = new FilePath (somepath); - - path.produce (&buffer.consume); - --- - - ***********************************************************************/ - - void consume (void[] x) - { - append (x); - } - - /*********************************************************************** - - Retrieve the valid content - - Returns: - a void[] slice of the buffer - - Remarks: - Return a void[] slice of the buffer, from the current position - up to the limit of valid content. The content remains in the - buffer for future extraction. - - ***********************************************************************/ - - void[] slice () - { - return data [index .. extent]; - } - - /*********************************************************************** - - Move the current read location - - Params: - size = the number of bytes to move - - Returns: - Returns true if successful, false otherwise. - - Remarks: - Skip ahead by the specified number of bytes, streaming from - the associated conduit as necessary. - - Can also reverse the read position by 'size' bytes, when size - is negative. This may be used to support lookahead operations. - Note that a negative size will fail where there is not sufficient - content available in the buffer (can't _skip beyond the beginning). - - ***********************************************************************/ - - bool skip (int size) - { - if (size < 0) - { - size = -size; - if (index >= size) - { - index -= size; - return true; - } - return false; - } - return slice(size) !is null; - } - - /*********************************************************************** - - Iterator support - - Params: - scan = the delagate to invoke with the current content - - Returns: - Returns true if a token was isolated, false otherwise. - - Remarks: - Upon success, the delegate should return the byte-based - index of the consumed pattern (tail end of it). Failure - to match a pattern should be indicated by returning an - IConduit.Eof - - Each pattern is expected to be stripped of the delimiter. - An end-of-file condition causes trailing content to be - placed into the token. Requests made beyond Eof result - in empty matches (length is zero). - - Note that additional iterator and/or reader instances - will operate in lockstep when bound to a common buffer. - - ***********************************************************************/ - - bool next (uint delegate (void[]) scan) - { - while (read(scan) is IConduit.Eof) - // not found - are we streaming? - if (source) - { - // did we start at the beginning? - if (position) - // nope - move partial token to start of buffer - compress (); - else - // no more space in the buffer? - if (writable is 0) - error ("Token is too large to fit within buffer"); - - // read another chunk of data - if (fill(source) is IConduit.Eof) - return false; - } - else - return false; - - return true; - } - - /*********************************************************************** - - Available content - - Remarks: - Return count of _readable bytes remaining in buffer. This is - calculated simply as limit() - position() - - ***********************************************************************/ - - uint readable () - { - return extent - index; - } - - /*********************************************************************** - - Available space - - Remarks: - Return count of _writable bytes available in buffer. This is - calculated simply as capacity() - limit() - - ***********************************************************************/ - - uint writable () - { - return dimension - extent; - } - - /*********************************************************************** - - Write into this buffer - - Params: - dg = the callback to provide buffer access to - - Returns: - Returns whatever the delegate returns. - - Remarks: - Exposes the raw data buffer at the current _write position, - The delegate is provided with a void[] representing space - available within the buffer at the current _write position. - - The delegate should return the appropriate number of bytes - if it writes valid content, or IConduit.Eof on error. - - ***********************************************************************/ - - uint write (uint delegate (void[]) dg) - { - int count = dg (data [extent..dimension]); - - if (count != IConduit.Eof) - { - extent += count; - assert (extent <= dimension); - } - return count; - } - - /*********************************************************************** - - Read directly from this buffer - - Params: - dg = callback to provide buffer access to - - Returns: - Returns whatever the delegate returns. - - Remarks: - Exposes the raw data buffer at the current _read position. The - delegate is provided with a void[] representing the available - data, and should return zero to leave the current _read position - intact. - - If the delegate consumes data, it should return the number of - bytes consumed; or IConduit.Eof to indicate an error. - - ***********************************************************************/ - - uint read (uint delegate (void[]) dg) - { - int count = dg (data [index..extent]); - - if (count != IConduit.Eof) - { - index += count; - assert (index <= extent); - } - return count; - } - - /*********************************************************************** - - Compress buffer space - - Returns: - the buffer instance - - Remarks: - If we have some data left after an export, move it to - front-of-buffer and set position to be just after the - remains. This is for supporting certain conduits which - choose to write just the initial portion of a request. - - Limit is set to the amount of data remaining. Position - is always reset to zero. - - ***********************************************************************/ - - IBuffer compress () - { - uint r = readable (); - - if (index > 0 && r > 0) - // content may overlap ... - memcpy (&data[0], &data[index], r); - - index = 0; - extent = r; - return this; - } - - /*********************************************************************** - - Fill buffer from the specific conduit - - Returns: - Returns the number of bytes read, or Conduit.Eof - - Remarks: - Try to _fill the available buffer with content from the - specified conduit. We try to read as much as possible - by clearing the buffer when all current content has been - eaten. If there is no space available, nothing will be - read. - - ***********************************************************************/ - - uint fill (InputStream src) - { - if (src is null) - return IConduit.Eof; - - if (readable is 0) - index = extent = 0; // same as clear(), but without chain - else - if (writable is 0) - return 0; - - return write (&src.read); - } - - /*********************************************************************** - - Drain buffer content to the specific conduit - - Returns: - Returns the number of bytes written - - Remarks: - Write as much of the buffer that the associated conduit - can consume. The conduit is not obliged to consume all - content, so some may remain within the buffer. - - Throws an IOException on premature Eof. - - ***********************************************************************/ - - final uint drain (OutputStream dst) - { - if (dst is null) - return IConduit.Eof; - - uint ret = read (&dst.write); - if (ret is IConduit.Eof) - error (eofWrite); - - compress (); - return ret; - } - - /*********************************************************************** - - Truncate buffer content - - Remarks: - Truncate the buffer within its extent. Returns true if - the new length is valid, false otherwise. - - ***********************************************************************/ - - bool truncate (uint length) - { - if (length <= data.length) - { - extent = length; - return true; - } - return false; - } - - /*********************************************************************** - - Access buffer limit - - Returns: - Returns the limit of readable content within this buffer. - - Remarks: - Each buffer has a capacity, a limit, and a position. The - capacity is the maximum content a buffer can contain, limit - represents the extent of valid content, and position marks - the current read location. - - ***********************************************************************/ - - uint limit () - { - return extent; - } - - /*********************************************************************** - - Access buffer capacity - - Returns: - Returns the maximum capacity of this buffer - - Remarks: - Each buffer has a capacity, a limit, and a position. The - capacity is the maximum content a buffer can contain, limit - represents the extent of valid content, and position marks - the current read location. - - ***********************************************************************/ - - uint capacity () - { - return dimension; - } - - /*********************************************************************** - - Access buffer read position - - Returns: - Returns the current read-position within this buffer - - Remarks: - Each buffer has a capacity, a limit, and a position. The - capacity is the maximum content a buffer can contain, limit - represents the extent of valid content, and position marks - the current read location. - - ***********************************************************************/ - - uint position () - { - return index; - } - - /*********************************************************************** - - Set external conduit - - Params: - conduit = the conduit to attach to - - Remarks: - Sets the external conduit associated with this buffer. - - Buffers do not require an external conduit to operate, but - it can be convenient to associate one. For example, methods - fill() & drain() use it to import/export content as necessary. - - ***********************************************************************/ - - IBuffer setConduit (IConduit conduit) - { - sink = conduit.output; - source = conduit.input; - return this; - } - - /*********************************************************************** - - Set output stream - - Params: - sink = the stream to attach to - - Remarks: - Sets the external output stream associated with this buffer. - - Buffers do not require an external stream to operate, but - it can be convenient to associate one. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - final IBuffer output (OutputStream sink) - { - this.sink = sink; - return this; - } - - /*********************************************************************** - - Set input stream - - Params: - source = the stream to attach to - - Remarks: - Sets the external input stream associated with this buffer. - - Buffers do not require an external stream to operate, but - it can be convenient to associate one. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - final IBuffer input (InputStream source) - { - this.source = source; - return this; - } - - /*********************************************************************** - - Access buffer content - - Remarks: - Return the entire backing array. Exposed for subclass usage - only - - ***********************************************************************/ - - protected void[] getContent () - { - return data; - } - - /*********************************************************************** - - Copy content into buffer - - Params: - src = the soure of the content - size = the length of content at src - - Remarks: - Bulk _copy of data from 'src'. The new content is made - available for reading. This is exposed for subclass use - only - - ***********************************************************************/ - - protected void copy (void *src, uint size) - { - // avoid "out of bounds" test on zero size - if (size) - { - // content may overlap ... - memcpy (&data[extent], src, size); - extent += size; - } - } - - /*********************************************************************** - - Cast to a target type without invoking the wrath of the - runtime checks for misalignment. Instead, we truncate the - array length - - ***********************************************************************/ - - static T[] convert(T)(void[] x) - { - return (cast(T*) x.ptr) [0 .. (x.length / T.sizeof)]; - } - - - - /**********************************************************************/ - /*********************** Buffered Interface ***************************/ - /**********************************************************************/ - - IBuffer buffer () - { - return this; - } - - - /**********************************************************************/ - /******************** Stream & Conduit Interfaces *********************/ - /**********************************************************************/ - - - /*********************************************************************** - - Return the name of this conduit - - ***********************************************************************/ - - override char[] toString () - { - return ""; - } - - /*********************************************************************** - - Generic IOException thrower - - Params: - msg = a text message describing the exception reason - - Remarks: - Throw an IOException with the provided message - - ***********************************************************************/ - - final void error (char[] msg) - { - throw new IOException (msg); - } - - /*********************************************************************** - - Flush all buffer content to the specific conduit - - Remarks: - Flush the contents of this buffer. This will block until - all content is actually flushed via the associated conduit, - whereas drain() will not. - - Do nothing where a conduit is not attached, enabling memory - buffers to treat flush as a noop. - - Throws an IOException on premature Eof. - - ***********************************************************************/ - - override OutputStream flush () - { - if (sink) - { - while (readable() > 0) - drain (sink); - - // flush the filter chain also - sink.flush; - } - return this; - } - - /*********************************************************************** - - Clear buffer content - - Remarks: - Reset 'position' and 'limit' to zero. This effectively - clears all content from the buffer. - - ***********************************************************************/ - - override InputStream clear () - { - index = extent = 0; - - // clear the filter chain also - if (source) - source.clear; - return this; - } - - /*********************************************************************** - - Copy content via this buffer from the provided src - conduit. - - Remarks: - The src conduit has its content transferred through - this buffer via a series of fill & drain operations, - until there is no more content available. The buffer - content should be explicitly flushed by the caller. - - Throws an IOException on premature eof - - ***********************************************************************/ - - override OutputStream copy (InputStream src) - { - while (fill(src) != IConduit.Eof) - // don't drain until we actually need to - if (writable is 0) - if (sink) - drain (sink); - else - error (overflow); - return this; - } - - /*********************************************************************** - - Transfer content into the provided dst - - Params: - dst = destination of the content - - Returns: - return the number of bytes read, which may be less than - dst.length. Eof is returned when no further content is - available. - - Remarks: - Populates the provided array with content. We try to - satisfy the request from the buffer content, and read - directly from an attached conduit when the buffer is - empty. - - ***********************************************************************/ - - override uint read (void[] dst) - { - uint content = readable(); - if (content) - { - if (content >= dst.length) - content = dst.length; - - // transfer buffer content - dst [0 .. content] = data [index .. index + content]; - index += content; - } - else - if (source) - { - // pathological cases read directly from conduit - if (dst.length > dimension) - content = source.read (dst); - else - // keep buffer partially populated - if ((content = fill(source)) != IConduit.Eof && content > 0) - content = read (dst); - } - else - content = IConduit.Eof; - return content; - } - - /*********************************************************************** - - Emulate OutputStream.write() - - Params: - src = the content to write - - Returns: - return the number of bytes written, which may be less than - provided (conceptually). - - Remarks: - Appends src content to the buffer, flushing to an attached - conduit as necessary. An IOException is thrown upon write - failure. - - ***********************************************************************/ - - override uint write (void[] src) - { - append (src.ptr, src.length); - return src.length; - } - - /*********************************************************************** - - Access configured conduit - - Returns: - Returns the conduit associated with this buffer. Returns - null if the buffer is purely memory based; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external conduit to operate, but - it can be convenient to associate one. For example, methods - fill() & drain() use it to import/export content as necessary. - - ***********************************************************************/ - - final override IConduit conduit () - { - if (sink) - return sink.conduit; - else - if (source) - return source.conduit; - return this; - } - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O - - ***********************************************************************/ - - final override uint bufferSize () - { - return 32 * 1024; - } - - /*********************************************************************** - - Is the conduit alive? - - ***********************************************************************/ - - final override bool isAlive () - { - return true; - } - - /*********************************************************************** - - Exposes configured output stream - - Returns: - Returns the OutputStream associated with this buffer. Returns - null if the buffer is not attached to an output; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external stream to operate, but - it can be convenient to associate them. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - final OutputStream output () - { - return sink; - } - - /*********************************************************************** - - Exposes configured input stream - - Returns: - Returns the InputStream associated with this buffer. Returns - null if the buffer is not attached to an input; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external stream to operate, but - it can be convenient to associate them. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - final InputStream input () - { - return source; - } - - /*********************************************************************** - - Release external resources - - ***********************************************************************/ - - final override void detach () - { - } - - /*********************************************************************** - - Close the stream - - Remarks: - Propagate request to an attached OutputStream (this is a - requirement for the OutputStream interface) - - ***********************************************************************/ - - override void close () - { - if (sink) - sink.close; - else - if (source) - source.close; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/Conduit.d --- a/tango/tango/io/Conduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - - author: Kris - -*******************************************************************************/ - -module tango.io.Conduit; - -private import tango.core.Exception; - -public import tango.io.model.IConduit; - -/******************************************************************************* - - Conduit abstract base-class, implementing interface IConduit. - Only the conduit-specific read(), write(), fileHandle() and - bufferSize() need to be implemented for a concrete conduit - implementation. See FileConduit for an example. - - Conduits provide virtualized access to external content, and - represent things like files or Internet connections. Conduits - expose a pair of streams, are modelled by tango.io.model.IConduit, - and are implemented via classes such as FileConduit & SocketConduit. - - Additional kinds of conduit are easy to construct: one either - subclasses tango.io.Conduit, or implements tango.io.model.IConduit. - A conduit typically reads and writes from/to an IBuffer in large - chunks, typically the entire buffer. Alternatively, one can invoke - input.read(dst[]) and/or output.write(src[]) directly. - -*******************************************************************************/ - -class Conduit : IConduit, ISelectable -{ - /*********************************************************************** - - Return the name of this conduit - - ***********************************************************************/ - - abstract char[] toString (); - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O - - ***********************************************************************/ - - abstract uint bufferSize (); - - /*********************************************************************** - - Models a handle-oriented device. We need to revisit this - - TODO: figure out how to avoid exposing this in the general - case - - ***********************************************************************/ - - abstract Handle fileHandle (); - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst. Eof is returned whenever an end-of-flow - condition arises. - - ***********************************************************************/ - - abstract uint read (void[] dst); - - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided. Eof is returned when - an end-of-flow condition arises. - - ***********************************************************************/ - - abstract uint write (void [] src); - - /*********************************************************************** - - Disconnect this conduit - - ***********************************************************************/ - - abstract void detach (); - - /*********************************************************************** - - Is the conduit alive? Default behaviour returns true - - ***********************************************************************/ - - bool isAlive () - { - return true; - } - - /*********************************************************************** - - Return the host. This is part of the Stream interface - - ***********************************************************************/ - - final IConduit conduit() - { - return this; - } - - /*********************************************************************** - - clear any buffered input - - ***********************************************************************/ - - InputStream clear () {return this;} - - /*********************************************************************** - - Write buffered output - - ***********************************************************************/ - - OutputStream flush () {return this;} - - /*********************************************************************** - - Close this conduit - - Remarks: - Both input and output are detached, and are no longer usable - - ***********************************************************************/ - - final void close () - { - this.detach; - } - - /*********************************************************************** - - Return the current input stream - - ***********************************************************************/ - - final InputStream input () - { - return this; - } - - /*********************************************************************** - - Return the current output stream - - ***********************************************************************/ - - final OutputStream output () - { - return this; - } - - /*********************************************************************** - - Throw an IOException, with the provided message - - ***********************************************************************/ - - final void error (char[] msg) - { - throw new IOException (msg); - } - - /*********************************************************************** - - Transfer the content of another conduit to this one. Returns - the dst OutputStream, or throws IOException on failure. - - ***********************************************************************/ - - final OutputStream copy (InputStream src) - { - return transfer (src, this); - } - - /*********************************************************************** - - Transfer the content of one stream to another. Returns - the dst OutputStream, and throws IOException on failure. - Queries dst to identify what size of buffer to utilize. - - ***********************************************************************/ - - static OutputStream transfer (InputStream src, OutputStream dst) - { - uint len = 0; - auto con = dst.conduit; - auto tmp = new byte [con.bufferSize]; - while ((len = src.read(tmp)) != IConduit.Eof) - { - auto p = tmp.ptr; - for (uint j; len > 0; len -= j, p += j) - if ((j = dst.write (p[0..len])) is IConduit.Eof) - con.error ("Conduit.copy :: Eof while writing to: "~con.toString); - } - delete tmp; - return dst; - } -} - - -/******************************************************************************* - - Base class for input stream filtering - -*******************************************************************************/ - -class InputFilter : InputStream -{ - protected InputStream host; - - /*********************************************************************** - - Attach to the provided stream - - ***********************************************************************/ - - this (InputStream host) - { - assert (host, "input stream host cannot be null"); - this.host = host; - } - - /*********************************************************************** - - Return the hosting conduit - - ***********************************************************************/ - - IConduit conduit () - { - return host.conduit; - } - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst. Eof is returned whenever an end-of-flow - condition arises. - - ***********************************************************************/ - - uint read (void[] dst) - { - return host.read (dst); - } - - /*********************************************************************** - - Clear any buffered content - - ***********************************************************************/ - - InputStream clear () - { - host.clear; - return this; - } - - /*********************************************************************** - - Close the input - - ***********************************************************************/ - - void close () - { - host.close; - } -} - - -/******************************************************************************* - - Base class for output stream filtering - -*******************************************************************************/ - -class OutputFilter : OutputStream -{ - protected OutputStream host; - - /*********************************************************************** - - Attach to the provided stream - - ***********************************************************************/ - - this (OutputStream host) - { - assert (host, "output stream host cannot be null"); - this.host = host; - } - - /*********************************************************************** - - Return the hosting conduit - - ***********************************************************************/ - - IConduit conduit () - { - return host.conduit; - } - - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided. Eof is returned when - an end-of-flow condition arises. - - ***********************************************************************/ - - uint write (void[] src) - { - return host.write (src); - } - - /*********************************************************************** - - Emit/purge buffered content - - ***********************************************************************/ - - OutputStream flush () - { - host.flush; - return this; - } - - /*********************************************************************** - - Close the output - - ***********************************************************************/ - - void close () - { - host.close; - } - - /*********************************************************************** - - Transfer the content of another conduit to this one. Returns - a reference to this class, or throws IOException on failure. - - ***********************************************************************/ - - OutputStream copy (InputStream src) - { - return Conduit.transfer (src, this); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/Console.d --- a/tango/tango/io/Console.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,653 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Feb 2005 - version: Heavily revised for unicode; November 2005 - Outback release: December 2006 - - author: Kris - -*******************************************************************************/ - -module tango.io.Console; - -private import tango.sys.Common; - -private import tango.io.Buffer, - tango.io.DeviceConduit; - - -version (Posix) - private import tango.stdc.posix.unistd; // needed for isatty() - - -/******************************************************************************* - - low level console IO support. - - Note that for a while this was templated for each of char, wchar, - and dchar. It became clear after some usage that the console is - more useful if it sticks to Utf8 only. See ConsoleConduit below - for details. - - Redirecting the standard IO handles (via a shell) operates as one - would expect, though the redirected content should likely restrict - itself to utf8 - -*******************************************************************************/ - -struct Console -{ - version (Win32) - const char[] Eol = "\r\n"; - else - const char[] Eol = "\n"; - - - /********************************************************************** - - Model console input as a buffer. Note that we read utf8 - only. - - **********************************************************************/ - - class Input - { - private Buffer buffer; - private bool redirect; - - public alias copyln get; - - /************************************************************** - - Attach console input to the provided device - - **************************************************************/ - - private this (Conduit conduit, bool redirected) - { - assert (conduit); - redirect = redirected; - buffer = new Buffer (conduit); - } - - /************************************************************** - - Return the next line available from the console, - or null when there is nothing available. The value - returned is a duplicate of the buffer content (it - has .dup applied). - - Each line ending is removed unless parameter raw is - set to true - - **************************************************************/ - - final char[] copyln (bool raw = false) - { - char[] line; - - return readln (line, raw) ? line.dup : null; - } - - /************************************************************** - - Retreive a line of text from the console and map - it to the given argument. The input is sliced, - not copied, so use .dup appropriately. Each line - ending is removed unless parameter raw is set to - true. - - Returns false when there is no more input. - - **************************************************************/ - - final bool readln (inout char[] content, bool raw=false) - { - uint line (void[] input) - { - auto text = cast(char[]) input; - foreach (i, c; text) - if (c is '\n') - { - auto j = i; - if (raw) - ++j; - else - if (j && (text[j-1] is '\r')) - --j; - content = text [0 .. j]; - return i+1; - } - return IConduit.Eof; - } - - return buffer.next(&line) || - (content = cast(char[]) buffer.slice(buffer.readable), false); - } - - /************************************************************** - - Return the associated stream - - **************************************************************/ - - final InputStream stream () - { - return buffer; - } - - /************************************************************** - - Is this device redirected? - - Returns: - True if redirected, false otherwise. - - Remarks: - Reflects the console redirection status from when - this module was instantiated - - **************************************************************/ - - final bool redirected () - { - return redirect; - } - - /************************************************************** - - Set redirection state to the provided boolean - - Remarks: - Configure the console redirection status, where - a redirected console is more efficient (dictates - whether newline() performs automatic flushing or - not) - - **************************************************************/ - - final Input redirected (bool yes) - { - redirect = yes; - return this; - } - - /************************************************************** - - Returns the configured source - - Remarks: - Provides access to the underlying mechanism for - console input. Use this to retain prior state - when temporarily switching inputs - - **************************************************************/ - - final InputStream input () - { - return buffer.input; - } - - /************************************************************** - - Divert input to an alternate source - - **************************************************************/ - - final Input input (InputStream source) - { - buffer.input = source; - return this; - } - } - - - /********************************************************************** - - Console output accepts utf8 only, by default - - **********************************************************************/ - - class Output - { - private Buffer buffer; - private bool redirect; - - public alias append opCall; - public alias flush opCall; - - /************************************************************** - - Attach console output to the provided device - - **************************************************************/ - - private this (Conduit conduit, bool redirected) - { - redirect = redirected; - buffer = new Buffer (conduit); - } - - /************************************************************** - - Append to the console. We accept UTF8 only, so - all other encodings should be handled via some - higher level API - - **************************************************************/ - - final Output append (char[] x) - { - buffer.append (x.ptr, x.length); - return this; - } - - /************************************************************** - - Append content - - Params: - other = an object with a useful toString() method - - Returns: - Returns a chaining reference if all content was - written. Throws an IOException indicating eof or - eob if not. - - Remarks: - Append the result of other.toString() to the console - - **************************************************************/ - - final Output append (Object other) - { - return append (other.toString); - } - - /************************************************************** - - Append a newline and flush the console buffer. If - the output is redirected, flushing does not occur - automatically. - - Returns: - Returns a chaining reference if content was written. - Throws an IOException indicating eof or eob if not. - - Remarks: - Emit a newline into the buffer, and autoflush the - current buffer content for an interactive console. - Redirected consoles do not flush automatically on - a newline. - - **************************************************************/ - - final Output newline () - { - buffer.append (Eol); - if (redirect is false) - buffer.flush; - - return this; - } - - /************************************************************** - - Explicitly flush console output - - Returns: - Returns a chaining reference if content was written. - Throws an IOException indicating eof or eob if not. - - Remarks: - Flushes the console buffer to attached conduit - - **************************************************************/ - - final Output flush () - { - buffer.flush; - return this; - } - - /************************************************************** - - Return the associated stream - - **************************************************************/ - - final OutputStream stream () - { - return buffer; - } - - /************************************************************** - - Is this device redirected? - - Returns: - True if redirected, false otherwise. - - Remarks: - Reflects the console redirection status - - **************************************************************/ - - final bool redirected () - { - return redirect; - } - - /************************************************************** - - Set redirection state to the provided boolean - - Remarks: - Configure the console redirection status, where - a redirected console is more efficient (dictates - whether newline() performs automatic flushing or - not) - - **************************************************************/ - - final Output redirected (bool yes) - { - redirect = yes; - return this; - } - - /************************************************************** - - Returns the configured output sink - - Remarks: - Provides access to the underlying mechanism for - console output. Use this to retain prior state - when temporarily switching outputs - - **************************************************************/ - - final OutputStream output () - { - return buffer.output; - } - - /************************************************************** - - Divert output to an alternate sink - - **************************************************************/ - - final Output output (OutputStream sink) - { - buffer.output = sink; - return this; - } - } - - - /*********************************************************************** - - Conduit for specifically handling the console devices. This - takes care of certain implementation details on the Win32 - platform. - - Note that the console is fixed at Utf8 for both linux and - Win32. The latter is actually Utf16 native, but it's just - too much hassle for a developer to handle the distinction - when it really should be a no-brainer. In particular, the - Win32 console functions don't work with redirection. This - causes additional difficulties that can be ameliorated by - asserting console I/O is always Utf8, in all modes. - - ***********************************************************************/ - - class Conduit : DeviceConduit - { - private bool redirected = false; - - /*********************************************************************** - - Return the name of this conduit - - ***********************************************************************/ - - override char[] toString() - { - return ""; - } - - /*************************************************************** - - Windows-specific code - - ***************************************************************/ - - version (Win32) - { - private wchar[] input; - private wchar[] output; - - /******************************************************* - - Create a FileConduit on the provided - FileDevice. - - This is strictly for adapting existing - devices such as Stdout and friends - - *******************************************************/ - - this (uint handle) - { - input = new wchar [1024 * 1]; - output = new wchar [1024 * 1]; - reopen (cast(Handle) handle); - } - - /******************************************************* - - Gain access to the standard IO handles - - *******************************************************/ - - private override void reopen (Handle handle_) - { - static const DWORD[] id = [ - cast(DWORD) -10, - cast(DWORD) -11, - cast(DWORD) -12 - ]; - static const char[][] f = [ - "CONIN$\0", - "CONOUT$\0", - "CONOUT$\0" - ]; - - assert (handle_ < 3); - handle = GetStdHandle (id[handle_]); - if (handle is null) - handle = CreateFileA (f[handle_].ptr, - GENERIC_READ | GENERIC_WRITE, - FILE_SHARE_READ | FILE_SHARE_WRITE, - null, OPEN_EXISTING, 0, cast(HANDLE) 0); - if (handle is null) - error (); - - // are we redirecting? - DWORD mode; - if (! GetConsoleMode (handle, &mode)) - redirected = true; - } - - /******************************************************* - - Write a chunk of bytes to the console from the - provided array (typically that belonging to - an IBuffer) - - *******************************************************/ - - version (Win32SansUnicode) - {} - else - { - override uint write (void[] src) - { - if (redirected) - return super.write (src); - else - { - DWORD i = src.length; - - // protect conversion from empty strings - if (i is 0) - return 0; - - // expand buffer appropriately - if (output.length < i) - output.length = i; - - // convert into output buffer - i = MultiByteToWideChar (CP_UTF8, 0, cast(char*) src.ptr, i, - output.ptr, output.length); - - // flush produced output - for (wchar* p=output.ptr, end=output.ptr+i; p < end; p+=i) - { - const int MAX = 16 * 1024; - - // avoid console limitation of 64KB - DWORD len = end - p; - if (len > MAX) - { - len = MAX; - // check for trailing surrogate ... - if ((p[len-1] & 0xfc00) is 0xdc00) - --len; - } - if (! WriteConsoleW (handle, p, len, &i, null)) - error(); - } - return src.length; - } - } - } - - /******************************************************* - - Read a chunk of bytes from the console into the - provided array (typically that belonging to - an IBuffer) - - *******************************************************/ - - version (Win32SansUnicode) - {} - else - { - protected override uint read (void[] dst) - { - if (redirected) - return super.read (dst); - else - { - DWORD i = dst.length / 4; - - assert (i); - - if (i > input.length) - i = input.length; - - // read a chunk of wchars from the console - if (! ReadConsoleW (handle, input.ptr, i, &i, null)) - error(); - - // no input ~ go home - if (i is 0) - return Eof; - - // translate to utf8, directly into dst - i = WideCharToMultiByte (CP_UTF8, 0, input.ptr, i, - cast(char*) dst.ptr, dst.length, null, null); - if (i is 0) - error (); - - return i; - } - } - } - - } - else - { - /******************************************************* - - Create a FileConduit on the provided - FileDevice. - - This is strictly for adapting existing - devices such as Stdout and friends - - *******************************************************/ - - private this (Handle handle) - { - reopen (handle); - redirected = (isatty(handle) is 0); - } - } - } -} - - -/****************************************************************************** - - Globals representing Console IO - -******************************************************************************/ - -static Console.Input Cin; /// the standard input stream -static Console.Output Cout, /// the standard output stream - Cerr; /// the standard error stream - - -/****************************************************************************** - - Instantiate Console access - -******************************************************************************/ - -static this () -{ - auto conduit = new Console.Conduit (0); - Cin = new Console.Input (conduit, conduit.redirected); - - conduit = new Console.Conduit (1); - Cout = new Console.Output (conduit, conduit.redirected); - - conduit = new Console.Conduit (2); - Cerr = new Console.Output (conduit, conduit.redirected); -} - - -/****************************************************************************** - - Flush outputs before we exit - - (good idea from Frits Van Bommel) - -******************************************************************************/ - -static ~this() -{ - synchronized (Cout) - Cout.flush; - - synchronized (Cerr) - Cerr.flush; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/DeviceConduit.d --- a/tango/tango/io/DeviceConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2005 - - author: Kris - -*******************************************************************************/ - -module tango.io.DeviceConduit; - -private import tango.sys.Common; - -public import tango.io.Conduit; - -private import tango.core.Exception; - -/******************************************************************************* - - Implements a means of reading and writing a file device. Conduits - are the primary means of accessing external data, and are usually - routed through a Buffer. - -*******************************************************************************/ - -class DeviceConduit : Conduit -{ - /// expose in superclass definition also - public alias Conduit.error error; - - /*********************************************************************** - - Throw an IOException noting the last error - - ***********************************************************************/ - - final void error () - { - super.error (toString() ~ " :: " ~ SysError.lastMsg); - } - - /*********************************************************************** - - Return the name of this device - - ***********************************************************************/ - - override char[] toString() - { - return ""; - } - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O - - ***********************************************************************/ - - override uint bufferSize () - { - return 1024 * 16; - } - - /*********************************************************************** - - Windows-specific code - - ***********************************************************************/ - - version (Win32) - { - protected HANDLE handle; - - /*************************************************************** - - Gain access to the standard IO handles (console etc). - - ***************************************************************/ - - protected void reopen (Handle handle) - { - this.handle = cast(HANDLE) handle; - } - - /*************************************************************** - - Return the underlying OS handle of this Conduit - - ***************************************************************/ - - final override Handle fileHandle () - { - return cast(Handle) handle; - } - - /*************************************************************** - - Release the underlying file - - ***************************************************************/ - - override void detach () - { - if (handle) - if (! CloseHandle (handle)) - error (); - handle = cast(HANDLE) null; - } - - /*************************************************************** - - Read a chunk of bytes from the file into the provided - array (typically that belonging to an IBuffer). - - Returns the number of bytes read, or Eof when there is - no further data - - ***************************************************************/ - - override uint read (void[] dst) - { - DWORD read; - void *p = dst.ptr; - - if (! ReadFile (handle, p, dst.length, &read, null)) - // make Win32 behave like linux - if (SysError.lastCode is ERROR_BROKEN_PIPE) - return Eof; - else - error (); - - if (read is 0 && dst.length > 0) - return Eof; - return read; - } - - /*************************************************************** - - Write a chunk of bytes to the file from the provided - array (typically that belonging to an IBuffer) - - ***************************************************************/ - - override uint write (void[] src) - { - DWORD written; - - if (! WriteFile (handle, src.ptr, src.length, &written, null)) - error (); - - return written; - } - } - - - /*********************************************************************** - - Unix-specific code. - - ***********************************************************************/ - - version (Posix) - { - protected int handle = -1; - - /*************************************************************** - - Gain access to the standard IO handles (console etc). - - ***************************************************************/ - - protected void reopen (Handle handle) - { - this.handle = handle; - } - - /*************************************************************** - - Return the underlying OS handle of this Conduit - - ***************************************************************/ - - final override Handle fileHandle () - { - return cast(Handle) handle; - } - - /*************************************************************** - - Release the underlying file - - ***************************************************************/ - - override void detach () - { - if (handle >= 0) - if (posix.close (handle) is -1) - error (); - handle = -1; - } - - /*************************************************************** - - Read a chunk of bytes from the file into the provided - array (typically that belonging to an IBuffer) - - ***************************************************************/ - - override uint read (void[] dst) - { - int read = posix.read (handle, dst.ptr, dst.length); - if (read == -1) - error (); - else - if (read is 0 && dst.length > 0) - return Eof; - return read; - } - - /*************************************************************** - - Write a chunk of bytes to the file from the provided - array (typically that belonging to an IBuffer) - - ***************************************************************/ - - override uint write (void[] src) - { - int written = posix.write (handle, src.ptr, src.length); - if (written is -1) - error (); - return written; - } - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/File.d --- a/tango/tango/io/File.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2005: Initial release - version: Feb 2007: No longer a proxy subclass - - author: Kris - -*******************************************************************************/ - -module tango.io.File; - -private import tango.io.FilePath, - tango.io.FileConduit; - -private import tango.core.Exception; - -/******************************************************************************* - - A wrapper atop of FileConduit to expose a simpler API. This one - returns the entire file content as a void[], and sets the content - to reflect a given void[]. - - Method read() returns the current content of the file, whilst write() - sets the file content, and file length, to the provided array. Method - append() adds content to the tail of the file. - - Methods to inspect the file system, check the status of a file or - directory and other facilities are made available via the associated - path (exposed via the path() method) - -*******************************************************************************/ - -class File -{ - private PathView path_; - - /*********************************************************************** - - Construct a File from a text string - - ***********************************************************************/ - - this (char[] path) - { - this (new FilePath (path)); - } - - /*********************************************************************** - - Construct a File from the provided FilePath - - ***********************************************************************/ - - this (PathView path) - { - path_ = path; - } - - /*********************************************************************** - - Call-site shortcut to create a File instance. This - enables the same syntax as struct usage, so may expose - a migration path - - ***********************************************************************/ - - static File opCall (char[] path) - { - return new File (path); - } - - /*********************************************************************** - - Return the path for this file instance - - ***********************************************************************/ - - final PathView path () - { - return path_; - } - - /*********************************************************************** - - Return the content of the file. - - ***********************************************************************/ - - final void[] read () - { - scope conduit = new FileConduit (path_); - scope (exit) - conduit.close; - - // allocate enough space for the entire file - auto content = new ubyte [cast(uint) conduit.length]; - - //read the content - if (conduit.input.read (content) != content.length) - conduit.error ("unexpected eof"); - - return content; - } - - /*********************************************************************** - - Set the file content and length to reflect the given array. - - ***********************************************************************/ - - final File write (void[] content) - { - return write (content, FileConduit.ReadWriteCreate); - } - - /*********************************************************************** - - Append content to the file. - - ***********************************************************************/ - - final File append (void[] content) - { - return write (content, FileConduit.WriteAppending); - } - - /*********************************************************************** - - Set the file content and length to reflect the given array. - - ***********************************************************************/ - - private File write (void[] content, FileConduit.Style style) - { - scope conduit = new FileConduit (path_, style); - scope (exit) - conduit.close; - - conduit.output.write (content); - return this; - } -} - -debug (File) -{ - void main() - { - auto content = File("file.d").read; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FileConduit.d --- a/tango/tango/io/FileConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,583 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - Outback release: December 2006 - - author: $(UL Kris) - $(UL John Reimer) - $(UL Anders F Bjorklund (Darwin patches)) - $(UL Chris Sauls (Win95 file support)) - -*******************************************************************************/ - -module tango.io.FileConduit; - -private import tango.sys.Common; - -public import tango.io.FilePath; - -private import tango.io.DeviceConduit; - -private import Utf = tango.text.convert.Utf; - -/******************************************************************************* - - Other O/S functions - -*******************************************************************************/ - -version (Win32) - private extern (Windows) BOOL SetEndOfFile (HANDLE); - else - private extern (C) int ftruncate (int, int); - - -/******************************************************************************* - - Implements a means of reading and writing a generic file. Conduits - are the primary means of accessing external data and FileConduit - extends the basic pattern by providing file-specific methods to - set the file size, seek to a specific file position and so on. - - Serial input and output is straightforward. In this example we - copy a file directly to the console: - --- - // open a file for reading - auto from = new FileConduit ("test.txt"); - - // stream directly to console - Stdout.copy (from); - --- - - And here we copy one file to another: - --- - // open another for writing - auto to = new FileConduit ("copy.txt", FileConduit.WriteCreate); - - // copy file - to.output.copy (new FileConduit("test.txt")); - --- - - To load a file directly into memory one might do this: - --- - // open file for reading - auto fc = new FileConduit ("test.txt"); - - // create an array to house the entire file - auto content = new char[fc.length]; - - // read the file content. Return value is the number of bytes read - auto bytesRead = fc.input.read (content); - --- - - Conversely, one may write directly to a FileConduit, like so: - --- - // open file for writing - auto to = new FileConduit ("text.txt", FileConduit.WriteCreate); - - // write an array of content to it - auto bytesWritten = to.output.write (content); - --- - - FileConduit can just as easily handle random IO. Here we use seek() - to relocate the file pointer and, for variation, apply a protocol to - perform simple input and output: - --- - // open a file for reading - auto fc = new FileConduit ("random.bin", FileConduit.ReadWriteCreate); - - // construct (binary) reader & writer upon this conduit - auto read = new Reader (fc); - auto write = new Writer (fc); - - int x=10, y=20; - - // write some data, and flush output since protocol IO is buffered - write (x) (y) (); - - // rewind to file start - fc.seek (0); - - // read data back again - read (x) (y); - - fc.close(); - --- - - See File, FilePath, FileConst, FileScan, and FileSystem for - additional functionality related to file manipulation. - - Compile with -version=Win32SansUnicode to enable Win95 & Win32s file - support. - -*******************************************************************************/ - -class FileConduit : DeviceConduit, DeviceConduit.Seek -{ - /*********************************************************************** - - Fits into 32 bits ... - - ***********************************************************************/ - - struct Style - { - align (1): - - Access access; /// access rights - Open open; /// how to open - Share share; /// how to share - Cache cache; /// how to cache - } - - /*********************************************************************** - - ***********************************************************************/ - - enum Access : ubyte { - Read = 0x01, /// is readable - Write = 0x02, /// is writable - ReadWrite = 0x03, /// both - } - - /*********************************************************************** - - ***********************************************************************/ - - enum Open : ubyte { - Exists=0, /// must exist - Create, /// create or truncate - Sedate, /// create if necessary - Append, /// create if necessary - }; - - /*********************************************************************** - - ***********************************************************************/ - - enum Share : ubyte { - None=0, /// no sharing - Read, /// shared reading - ReadWrite, /// open for anything - }; - - /*********************************************************************** - - ***********************************************************************/ - - enum Cache : ubyte { - None = 0x00, /// don't optimize - Random = 0x01, /// optimize for random - Stream = 0x02, /// optimize for stream - WriteThru = 0x04, /// backing-cache flag - }; - - /*********************************************************************** - - Read an existing file - - ***********************************************************************/ - - const Style ReadExisting = {Access.Read, Open.Exists}; - - /*********************************************************************** - - Write on an existing file. Do not create - - ***********************************************************************/ - - const Style WriteExisting = {Access.Write, Open.Exists}; - - /*********************************************************************** - - Write on a clean file. Create if necessary - - ***********************************************************************/ - - const Style WriteCreate = {Access.Write, Open.Create}; - - /*********************************************************************** - - Write at the end of the file - - ***********************************************************************/ - - deprecated const Style WriteAppending = {Access.Write, Open.Append}; - - /*********************************************************************** - - Read and write an existing file - - ***********************************************************************/ - - const Style ReadWriteExisting = {Access.ReadWrite, Open.Exists}; - - /*********************************************************************** - - Read & write on a clean file. Create if necessary - - ***********************************************************************/ - - const Style ReadWriteCreate = {Access.ReadWrite, Open.Create}; - - /*********************************************************************** - - Read and Write. Use existing file if present - - ***********************************************************************/ - - const Style ReadWriteOpen = {Access.ReadWrite, Open.Sedate}; - - - - - // the file we're working with - private PathView path_; - - // the style we're opened with - private Style style_; - - /*********************************************************************** - - Create a FileConduit with the provided path and style. - - ***********************************************************************/ - - this (char[] name, Style style = ReadExisting) - { - this (new FilePath(name), style); - } - - /*********************************************************************** - - Create a FileConduit with the provided path and style. - - ***********************************************************************/ - - this (PathView path, Style style = ReadExisting) - { - // remember who we are - path_ = path; - - // open the file - open (this.style_ = style); - } - - /*********************************************************************** - - Return the PathView used by this file. - - ***********************************************************************/ - - PathView path () - { - return path_; - } - - /*********************************************************************** - - Return the Style used for this file. - - ***********************************************************************/ - - Style style () - { - return style_; - } - - /*********************************************************************** - - Return the name of the FilePath used by this file. - - ***********************************************************************/ - - override char[] toString () - { - return path_.toString; - } - - /*********************************************************************** - - Return the current file position. - - ***********************************************************************/ - - long position () - { - return seek (0, Seek.Anchor.Current); - } - - /*********************************************************************** - - Return the total length of this file. - - ***********************************************************************/ - - long length () - { - long pos, - ret; - - pos = position (); - ret = seek (0, Seek.Anchor.End); - seek (pos); - return ret; - } - - - /*********************************************************************** - - Windows-specific code - - ***********************************************************************/ - - version(Win32) - { - private bool appending; - - /*************************************************************** - - Open a file with the provided style. - - ***************************************************************/ - - protected void open (Style style) - { - DWORD attr, - share, - access, - create; - - alias DWORD[] Flags; - - static const Flags Access = - [ - 0, // invalid - GENERIC_READ, - GENERIC_WRITE, - GENERIC_READ | GENERIC_WRITE, - ]; - - static const Flags Create = - [ - OPEN_EXISTING, // must exist - CREATE_ALWAYS, // truncate always - OPEN_ALWAYS, // create if needed - OPEN_ALWAYS, // (for appending) - ]; - - static const Flags Share = - [ - 0, - FILE_SHARE_READ, - FILE_SHARE_READ | FILE_SHARE_WRITE, - ]; - - static const Flags Attr = - [ - 0, - FILE_FLAG_RANDOM_ACCESS, - FILE_FLAG_SEQUENTIAL_SCAN, - 0, - FILE_FLAG_WRITE_THROUGH, - ]; - - attr = Attr[style.cache]; - share = Share[style.share]; - create = Create[style.open]; - access = Access[style.access]; - - version (Win32SansUnicode) - handle = CreateFileA (path.cString.ptr, access, share, - null, create, - attr | FILE_ATTRIBUTE_NORMAL, - cast(HANDLE) null); - else - { - wchar[256] tmp = void; - auto name = Utf.toString16 (path.cString, tmp); - handle = CreateFileW (name.ptr, access, share, - null, create, - attr | FILE_ATTRIBUTE_NORMAL, - cast(HANDLE) null); - } - - if (handle is INVALID_HANDLE_VALUE) - error (); - - // move to end of file? - if (style.open is Open.Append) - appending = true; - } - - /*************************************************************** - - Write a chunk of bytes to the file from the provided - array (typically that belonging to an IBuffer) - - ***************************************************************/ - - override uint write (void[] src) - { - DWORD written; - - // try to emulate the Unix O_APPEND mode - if (appending) - SetFilePointer (handle, 0, null, Seek.Anchor.End); - - return super.write (src); - } - - /*************************************************************** - - Ensures that data is flushed immediately to disk - - ***************************************************************/ -/+ - override void commit () - { - if (style_.access & Access.Write) - if (! FlushFileBuffers (handle)) - error (); - } -+/ - /*************************************************************** - - Set the file size to be that of the current seek - position. The file must be writable for this to - succeed. - - ***************************************************************/ - - void truncate () - { - // must have Generic_Write access - if (! SetEndOfFile (handle)) - error (); - } - - /*************************************************************** - - Set the file seek position to the specified offset - from the given anchor. - - ***************************************************************/ - - long seek (long offset, Seek.Anchor anchor = Seek.Anchor.Begin) - { - LONG high = cast(LONG) (offset >> 32); - long result = SetFilePointer (handle, cast(LONG) offset, - &high, anchor); - - if (result is -1 && - GetLastError() != ERROR_SUCCESS) - error (); - - return result + (cast(long) high << 32); - } - } - - - /*********************************************************************** - - Unix-specific code. Note that some methods are 32bit only - - ***********************************************************************/ - - version (Posix) - { - /*************************************************************** - - Open a file with the provided style. - - Note that files default to no-sharing. That is, - they are locked exclusively to the host process - unless otherwise stipulated. We do this in order - to expose the same default behaviour as Win32 - - NO FILE LOCKING FOR BORKED POSIX - - ***************************************************************/ - - protected void open (Style style) - { - alias int[] Flags; - - const O_LARGEFILE = 0x8000; - - static const Flags Access = - [ - 0, // invalid - O_RDONLY, - O_WRONLY, - O_RDWR, - ]; - - static const Flags Create = - [ - 0, // open existing - O_CREAT | O_TRUNC, // truncate always - O_CREAT, // create if needed - O_APPEND | O_CREAT, // append - ]; - - static const short[] Locks = - [ - F_WRLCK, // no sharing - F_RDLCK, // shared read - ]; - - auto mode = Access[style.access] | Create[style.open]; - - // always open as a large file - handle = posix.open (path.cString.ptr, mode | O_LARGEFILE, 0666); - if (handle is -1) - error (); - } - - /*************************************************************** - - Ensures that data is flushed immediately to disk - - ***************************************************************/ -/+ - override void commit () - { - // no Posix API for this :( - } -+/ - /*************************************************************** - - Set the file size to be that of the current seek - position. The file must be writable for this to - succeed. - - ***************************************************************/ - - void truncate () - { - // set filesize to be current seek-position - if (ftruncate (handle, position) is -1) - error (); - } - - /*************************************************************** - - Set the file seek position to the specified offset - from the given anchor. - - ***************************************************************/ - - long seek (long offset, Seek.Anchor anchor = Seek.Anchor.Begin) - { - long result = posix.lseek (handle, offset, anchor); - if (result is -1) - error (); - return result; - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FileConst.d --- a/tango/tango/io/FileConst.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2005 - - author: Kris - -*******************************************************************************/ - -module tango.io.FileConst; - -/******************************************************************************* - - A set of file-system specific constants for file and path - separators (chars and strings). - - Keep these constants mirrored for each OS - -*******************************************************************************/ - -struct FileConst -{ - version (Win32) - { - enum : char - { - CurrentDirChar = '.', - RootSeparatorChar = ':', - FileSeparatorChar = '.', - PathSeparatorChar = '/', - SystemPathChar = ';', - } - - static const char[] ParentDirString = ".."; - static const char[] CurrentDirString = "."; - static const char[] FileSeparatorString = "."; - static const char[] RootSeparatorString = ":"; - static const char[] PathSeparatorString = "/"; - static const char[] SystemPathString = ";"; - - static const char[] NewlineString = "\r\n"; - } - - version (Posix) - { - enum : char - { - CurrentDirChar = '.', - FileSeparatorChar = '.', - PathSeparatorChar = '/', - SystemPathChar = ':', - } - - static const char[] ParentDirString = ".."; - static const char[] CurrentDirString = "."; - static const char[] FileSeparatorString = "."; - static const char[] PathSeparatorString = "/"; - static const char[] SystemPathString = ":"; - - static const char[] NewlineString = "\n"; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FilePath.d --- a/tango/tango/io/FilePath.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2083 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2004: Initial version - version: Nov 2006: Australian version - version: Feb 2007: Mutating version - version: Mar 2007: Folded FileProxy in - version: Nov 2007: VFS dictates '/' always be used - - author: Kris - -*******************************************************************************/ - -module tango.io.FilePath; - -private import tango.sys.Common; - -private import tango.io.FileConst; - -private import tango.core.Exception; - -private import tango.time.Time; - -/******************************************************************************* - -*******************************************************************************/ - -version (Win32) - { - version (Win32SansUnicode) - { - alias char T; - private extern (C) int strlen (char *s); - private alias WIN32_FIND_DATA FIND_DATA; - } - else - { - alias wchar T; - private extern (C) int wcslen (wchar *s); - private alias WIN32_FIND_DATAW FIND_DATA; - } - } - -version (Posix) - { - private import tango.stdc.stdio; - private import tango.stdc.string; - private import tango.stdc.posix.utime; - private import tango.stdc.posix.dirent; - } - -/******************************************************************************* - -*******************************************************************************/ - -private extern (C) void memmove (void* dst, void* src, uint bytes); - -/******************************************************************************* - - Models a file path. These are expected to be used as the constructor - argument to various file classes. The intention is that they easily - convert to other representations such as absolute, canonical, or Url. - - File paths containing non-ansi characters should be UTF-8 encoded. - Supporting Unicode in this manner was deemed to be more suitable - than providing a wchar version of FilePath, and is both consistent - & compatible with the approach taken with the Uri class. - - FilePath is designed to be transformed, thus each mutating method - modifies the internal content. There is a read-only base-class - called PathView, which can be used to provide a view into the - content as desired. - - Note that patterns of adjacent '.' separators are treated specially - in that they will be assigned to the name instead of the suffix. In - addition, a '.' at the start of a name signifies it does not belong - to the suffix i.e. ".file" is a name rather than a suffix. - - Note also that normalization of path-separators occurs by default. - This means that the use of '\' characters with be converted into - '/' instead while parsing. To mutate the path into an O/S native - version, use the native() method. To obtain a copy instead, use the - path.dup.native sequence - - Compile with -version=Win32SansUnicode to enable Win95 & Win32s file - support. - -*******************************************************************************/ - -class FilePath : PathView -{ - private char[] fp; // filepath with trailing 0 - - private bool dir_; // this represents a dir? - - private int end_, // before the trailing 0 - name_, // file/dir name - folder_, // path before name - suffix_; // after rightmost '.' - - public alias set opAssign; // path = x; - public alias append opCatAssign; // path ~= x; - - /*********************************************************************** - - Filter used for screening paths via toList() - - ***********************************************************************/ - - public alias bool delegate (FilePath, bool) Filter; - - /*********************************************************************** - - Passed around during file-scanning - - ***********************************************************************/ - - struct FileInfo - { - char[] path, - name; - ulong bytes; - bool folder; - } - - /*********************************************************************** - - Call-site shortcut to create a FilePath instance. This - enables the same syntax as struct usage, so may expose - a migration path - - ***********************************************************************/ - - static FilePath opCall (char[] filepath = null) - { - return new FilePath (filepath); - } - - /*********************************************************************** - - Create a FilePath from a copy of the provided string. - - FilePath assumes both path & name are present, and therefore - may split what is otherwise a logically valid path. That is, - the 'name' of a file is typically the path segment following - a rightmost path-separator. The intent is to treat files and - directories in the same manner; as a name with an optional - ancestral structure. It is possible to bias the interpretation - by adding a trailing path-separator to the argument. Doing so - will result in an empty name attribute. - - With regard to the filepath copy, we found the common case to - be an explicit .dup, whereas aliasing appeared to be rare by - comparison. We also noted a large proportion interacting with - C-oriented OS calls, implying the postfix of a null terminator. - Thus, FilePath combines both as a single operation. - - ***********************************************************************/ - - this (char[] filepath = null) - { - set (filepath); - } - - // now converts to '/' always. Use toNative to get Win32 paths - deprecated this (char[] filepath, bool native) - { - set (filepath); - } - - /*********************************************************************** - - Return the complete text of this filepath - - ***********************************************************************/ - - final char[] toString () - { - return fp [0 .. end_]; - } - - /*********************************************************************** - - Duplicate this path - - ***********************************************************************/ - - final FilePath dup () - { - return FilePath (toString); - } - - /*********************************************************************** - - Return the complete text of this filepath as a null - terminated string for use with a C api. Use toString - instead for any D api. - - Note that the nul is always embedded within the string - maintained by FilePath, so there's no heap overhead when - making a C call - - ***********************************************************************/ - - final char[] cString () - { - return fp [0 .. end_+1]; - } - - /*********************************************************************** - - Return the root of this path. Roots are constructs such as - "c:" - - ***********************************************************************/ - - final char[] root () - { - return fp [0 .. folder_]; - } - - /*********************************************************************** - - Return the file path. Paths may start and end with a "/". - The root path is "/" and an unspecified path is returned as - an empty string. Directory paths may be split such that the - directory name is placed into the 'name' member; directory - paths are treated no differently than file paths - - ***********************************************************************/ - - final char[] folder () - { - return fp [folder_ .. name_]; - } - - /*********************************************************************** - - Returns a path representing the parent of this one. This - will typically return the current path component, though - with a special case where the name component is empty. In - such cases, the path is scanned for a prior segment: - --- - normal: /x/y/z => /x/y - special: /x/y/ => /x - --- - - Note that this returns a path suitable for splitting into - path and name components (there's no trailing separator). - - See pop() also, which is generally more useful when working - with FilePath instances - - ***********************************************************************/ - - final char[] parent () - { - auto p = path; - if (name.length is 0) - for (int i=p.length-1; --i > 0;) - if (p[i] is FileConst.PathSeparatorChar) - { - p = p[0 .. i]; - break; - } - return stripped (p); - } - - /*********************************************************************** - - Return the name of this file, or directory. - - ***********************************************************************/ - - final char[] name () - { - return fp [name_ .. suffix_]; - } - - /*********************************************************************** - - Ext is the tail of the filename, rightward of the rightmost - '.' separator e.g. path "foo.bar" has ext "bar". Note that - patterns of adjacent separators are treated specially; for - example, ".." will wind up with no ext at all - - ***********************************************************************/ - - final char[] ext () - { - auto x = suffix; - if (x.length) - x = x [1..$]; - return x; - } - - /*********************************************************************** - - Suffix is like ext, but includes the separator e.g. path - "foo.bar" has suffix ".bar" - - ***********************************************************************/ - - final char[] suffix () - { - return fp [suffix_ .. end_]; - } - - /*********************************************************************** - - return the root + folder combination - - ***********************************************************************/ - - final char[] path () - { - return fp [0 .. name_]; - } - - /*********************************************************************** - - return the name + suffix combination - - ***********************************************************************/ - - final char[] file () - { - return fp [name_ .. end_]; - } - - /*********************************************************************** - - Returns true if all fields are equal. - - ***********************************************************************/ - - final override int opEquals (Object o) - { - return (this is o) || (o && toString == o.toString); - } - - /*********************************************************************** - - Does this FilePath equate to the given text? - - ***********************************************************************/ - - final override int opEquals (char[] s) - { - return toString() == s; - } - - /*********************************************************************** - - Returns true if this FilePath is *not* relative to the - current working directory - - ***********************************************************************/ - - final bool isAbsolute () - { - return (folder_ > 0) || - (folder_ < end_ && fp[folder_] is FileConst.PathSeparatorChar); - } - - /*********************************************************************** - - Returns true if this FilePath is empty - - ***********************************************************************/ - - final bool isEmpty () - { - return end_ is 0; - } - - /*********************************************************************** - - Returns true if this FilePath has a parent. Note that a - parent is defined by the presence of a path-separator in - the path. This means 'foo' within "\foo" is considered a - child of the root - - ***********************************************************************/ - - final bool isChild () - { - return folder.length > 0; - } - - /*********************************************************************** - - Replace all 'from' instances with 'to' - - ***********************************************************************/ - - final FilePath replace (char from, char to) - { - foreach (inout char c; path) - if (c is from) - c = to; - return this; - } - - /*********************************************************************** - - Convert path separators to a standard format, using '/' as - the path separator. This is compatible with URI and all of - the contemporary O/S which Tango supports. Known exceptions - include the Windows command-line processor, which considers - '/' characters to be switches instead. Use the native() - method to support that. - - Note: mutates the current path. - - ***********************************************************************/ - - final FilePath standard () - { - return replace ('\\', '/'); - } - - /*********************************************************************** - - Convert to native O/S path separators where that is required, - such as when dealing with the Windows command-line. - - Note: mutates the current path. Use this pattern to obtain a - copy instead: path.dup.native - - ***********************************************************************/ - - final FilePath native () - { - version (Win32) - return replace ('/', '\\'); - else - return this; - } - - /*********************************************************************** - - Concatenate text to this path; no separators are added. - See join() also - - ***********************************************************************/ - - final FilePath cat (char[][] others...) - { - foreach (other; others) - { - auto len = end_ + other.length; - expand (len); - fp [end_ .. len] = other; - fp [len] = 0; - end_ = len; - } - return parse; - } - - /*********************************************************************** - - Append a folder to this path. A leading separator is added - as required - - ***********************************************************************/ - - final FilePath append (char[] path) - { - if (file.length) - path = prefixed (path); - return cat (path); - } - - /*********************************************************************** - - Prepend a folder to this path. A trailing separator is added - if needed - - ***********************************************************************/ - - final FilePath prepend (char[] path) - { - adjust (0, folder_, folder_, padded (path)); - return parse; - } - - /*********************************************************************** - - Reset the content of this path to that of another and - reparse - - ***********************************************************************/ - - FilePath set (FilePath path) - { - return set (path.toString); - } - - /*********************************************************************** - - Reset the content of this path, and reparse. - - ***********************************************************************/ - - final FilePath set (char[] path) - { - end_ = path.length; - - expand (end_); - if (end_) - fp[0 .. end_] = path; - - fp[end_] = '\0'; - return parse; - } - - /*********************************************************************** - - Sidestep the normal lookup for paths that are known to - be folders. Where folder is true, file-system lookups - will be skipped. - - ***********************************************************************/ - - final FilePath isFolder (bool folder) - { - dir_ = folder; - return this; - } - - /*********************************************************************** - - Replace the root portion of this path - - ***********************************************************************/ - - final FilePath root (char[] other) - { - auto x = adjust (0, folder_, folder_, padded (other, ':')); - folder_ += x; - suffix_ += x; - name_ += x; - return this; - } - - /*********************************************************************** - - Replace the folder portion of this path. The folder will be - padded with a path-separator as required - - ***********************************************************************/ - - final FilePath folder (char[] other) - { - auto x = adjust (folder_, name_, name_ - folder_, padded (other)); - suffix_ += x; - name_ += x; - return this; - } - - /*********************************************************************** - - Replace the name portion of this path - - ***********************************************************************/ - - final FilePath name (char[] other) - { - auto x = adjust (name_, suffix_, suffix_ - name_, other); - suffix_ += x; - return this; - } - - /*********************************************************************** - - Replace the suffix portion of this path. The suffix will be - prefixed with a file-separator as required - - ***********************************************************************/ - - final FilePath suffix (char[] other) - { - adjust (suffix_, end_, end_ - suffix_, prefixed (other, '.')); - return this; - } - - /*********************************************************************** - - Replace the root and folder portions of this path and - reparse. The replacement will be padded with a path - separator as required - - ***********************************************************************/ - - final FilePath path (char[] other) - { - adjust (0, name_, name_, padded (other)); - return parse; - } - - /*********************************************************************** - - Replace the file and suffix portions of this path and - reparse. The replacement will be prefixed with a suffix - separator as required - - ***********************************************************************/ - - final FilePath file (char[] other) - { - adjust (name_, end_, end_ - name_, other); - return parse; - } - - /*********************************************************************** - - Pop to the parent of the current filepath (in place) - - ***********************************************************************/ - - final FilePath pop () - { - auto path = parent(); - end_ = path.length; - fp[end_] = '\0'; - return parse; - } - - /*********************************************************************** - - Join a set of path specs together. A path separator is - potentially inserted between each of the segments. - - ***********************************************************************/ - - static char[] join (char[][] paths...) - { - char[] result; - - foreach (path; paths) - result ~= padded (path); - - return result.length ? result [0 .. $-1] : null; - } - - /*********************************************************************** - - Return an adjusted path such that non-empty instances do not - have a trailing separator - - ***********************************************************************/ - - static char[] stripped (char[] path, char c = FileConst.PathSeparatorChar) - { - if (path.length && path[$-1] is c) - path = path [0 .. $-1]; - return path; - } - - /*********************************************************************** - - Return an adjusted path such that non-empty instances always - have a trailing separator - - ***********************************************************************/ - - static char[] padded (char[] path, char c = FileConst.PathSeparatorChar) - { - if (path.length && path[$-1] != c) - path = path ~ c; - return path; - } - - /*********************************************************************** - - Return an adjusted path such that non-empty instances always - have a prefixed separator - - ***********************************************************************/ - - static char[] prefixed (char[] s, char c = FileConst.PathSeparatorChar) - { - if (s.length && s[0] != c) - s = c ~ s; - return s; - } - - /*********************************************************************** - - Parse the path spec - - ***********************************************************************/ - - private final FilePath parse () - { - folder_ = 0; - name_ = suffix_ = -1; - - for (int i=end_; --i >= 0;) - switch (fp[i]) - { - case FileConst.FileSeparatorChar: - if (name_ < 0) - if (suffix_ < 0 && i && fp[i-1] != '.') - suffix_ = i; - break; - - version (Win32) - { - case '\\': - fp[i] = '/'; - } - case FileConst.PathSeparatorChar: - if (name_ < 0) - name_ = i + 1; - break; - - version (Win32) - { - case FileConst.RootSeparatorChar: - folder_ = i + 1; - break; - } - - default: - break; - } - - if (name_ < 0) - name_ = folder_; - - if (suffix_ < 0 || suffix_ is name_) - suffix_ = end_; - - return this; - } - - /*********************************************************************** - - Potentially make room for more content - - ***********************************************************************/ - - private final void expand (uint size) - { - ++size; - if (fp.length < size) - fp.length = (size + 127) & ~127; - } - - /*********************************************************************** - - Insert/delete internal content - - ***********************************************************************/ - - private final int adjust (int head, int tail, int len, char[] sub) - { - len = sub.length - len; - - // don't destroy self-references! - if (len && sub.ptr >= fp.ptr+head+len && sub.ptr < fp.ptr+fp.length) - { - char[512] tmp = void; - assert (sub.length < tmp.length); - sub = tmp[0..sub.length] = sub; - } - - // make some room if necessary - expand (len + end_); - - // slide tail around to insert or remove space - memmove (fp.ptr+tail+len, fp.ptr+tail, end_ +1 - tail); - - // copy replacement - memmove (fp.ptr + head, sub.ptr, sub.length); - - // adjust length - end_ += len; - return len; - } - - - /**********************************************************************/ - /********************** file-system methods ***************************/ - /**********************************************************************/ - - - /*********************************************************************** - - Does this path currently exist? - - ***********************************************************************/ - - final bool exists () - { - try { - fileSize(); - return true; - } catch (IOException){} - return false; - } - - /*********************************************************************** - - Returns the time of the last modification. Accurate - to whatever the OS supports - - ***********************************************************************/ - - final Time modified () - { - return timeStamps.modified; - } - - /*********************************************************************** - - Returns the time of the last access. Accurate to - whatever the OS supports - - ***********************************************************************/ - - final Time accessed () - { - return timeStamps.accessed; - } - - /*********************************************************************** - - Returns the time of file creation. Accurate to - whatever the OS supports - - ***********************************************************************/ - - final Time created () - { - return timeStamps.created; - } - - /*********************************************************************** - - Create an entire path consisting of this folder along with - all parent folders. The path must not contain '.' or '..' - segments. Related methods include PathUtil.normalize() and - FileSystem.toAbsolute() - - Note that each segment is created as a folder, including the - trailing segment. - - Returns: a chaining reference (this) - - Throws: IOException upon systen errors - - Throws: IllegalArgumentException if the path contains invalid - path segment names (such as '.' or '..') or a segment - exists but as a file instead of a folder - - ***********************************************************************/ - - final FilePath create () - { - auto segment = name; - if (segment.length > 0) - { - if (segment == FileConst.CurrentDirString || - segment == FileConst.ParentDirString) - badArg ("FilePath.create :: invalid path: "); - - if (this.exists) - if (this.isFolder) - return this; - else - badArg ("FilePath.create :: file/folder conflict: "); - - FilePath(this.parent).create; - return createFolder; - } - return this; - } - - /*********************************************************************** - - List the set of filenames within this folder, using - the provided filter to control the list: - --- - bool delegate (FilePath path, bool isFolder) Filter - --- - - Returning true from the filter includes the given path, - whilst returning false excludes it. Parameter 'isFolder' - indicates whether the path is a file or folder. - - Note that paths composed of '.' characters are ignored. - - ***********************************************************************/ - - final FilePath[] toList (Filter filter = null) - { - FilePath[] paths; - - foreach (info; this) - { - auto p = from (info); - - // test this entry for inclusion - if (filter is null || filter (p, info.folder)) - paths ~= p; - else - delete p; - } - - return paths; - } - - /*********************************************************************** - - Construct a FilePath from the given FileInfo - - ***********************************************************************/ - - static FilePath from (ref FileInfo info) - { - char[512] tmp = void; - - auto len = info.path.length + info.name.length; - assert (len < tmp.length); - - // construct full pathname - tmp [0 .. info.path.length] = info.path; - tmp [info.path.length .. len] = info.name; - - return FilePath(tmp[0 .. len]).isFolder(info.folder); - } - - /*********************************************************************** - - change the name or location of a file/directory, and - adopt the provided Path - - ***********************************************************************/ - - final FilePath rename (FilePath dst) - { - return rename (dst.toString); - } - - /*********************************************************************** - - Throw an exception using the last known error - - ***********************************************************************/ - - private void exception () - { - throw new IOException (toString ~ ": " ~ SysError.lastMsg); - } - - /*********************************************************************** - - Throw an exception using the last known error - - ***********************************************************************/ - - private void badArg (char[] msg) - { - throw new IllegalArgumentException (msg ~ toString); - } - - /*********************************************************************** - - ***********************************************************************/ - - version (Win32) - { - /*************************************************************** - - return a wchar[] instance of the path - - ***************************************************************/ - - private wchar[] toString16 (wchar[] tmp, char[] path) - { - auto i = MultiByteToWideChar (CP_UTF8, 0, - path.ptr, path.length, - tmp.ptr, tmp.length); - return tmp [0..i]; - } - - /*************************************************************** - - return a char[] instance of the path - - ***************************************************************/ - - private char[] toString (char[] tmp, wchar[] path) - { - auto i = WideCharToMultiByte (CP_UTF8, 0, path.ptr, path.length, - tmp.ptr, tmp.length, null, null); - return tmp [0..i]; - } - - /*************************************************************** - - return a wchar[] instance of the path - - ***************************************************************/ - - private wchar[] name16 (wchar[] tmp, bool withNull=true) - { - int offset = withNull ? 0 : 1; - return toString16 (tmp, this.cString[0 .. $-offset]); - } - - /*************************************************************** - - Get info about this path - - ***************************************************************/ - - private DWORD getInfo (inout WIN32_FILE_ATTRIBUTE_DATA info) - { - version (Win32SansUnicode) - { - if (! GetFileAttributesExA (this.cString.ptr, GetFileInfoLevelStandard, &info)) - exception; - } - else - { - wchar[MAX_PATH] tmp = void; - if (! GetFileAttributesExW (name16(tmp).ptr, GetFileInfoLevelStandard, &info)) - exception; - } - - return info.dwFileAttributes; - } - - /*************************************************************** - - Get flags for this path - - ***************************************************************/ - - private DWORD getFlags () - { - WIN32_FILE_ATTRIBUTE_DATA info = void; - - return getInfo (info); - } - - /*************************************************************** - - Return the file length (in bytes) - - ***************************************************************/ - - final ulong fileSize () - { - WIN32_FILE_ATTRIBUTE_DATA info = void; - - getInfo (info); - return (cast(ulong) info.nFileSizeHigh << 32) + - info.nFileSizeLow; - } - - /*************************************************************** - - Is this file writable? - - ***************************************************************/ - - final bool isWritable () - { - return (getFlags & FILE_ATTRIBUTE_READONLY) == 0; - } - - /*************************************************************** - - Is this file actually a folder/directory? - - ***************************************************************/ - - final bool isFolder () - { - if (dir_) - return true; - - return (getFlags & FILE_ATTRIBUTE_DIRECTORY) != 0; - } - - /*************************************************************** - - Return timestamp information - - ***************************************************************/ - - final Stamps timeStamps () - { - static Time convert (FILETIME time) - { - return Time (TimeSpan.Epoch1601 + *cast(long*) &time); - } - - WIN32_FILE_ATTRIBUTE_DATA info = void; - Stamps time = void; - - getInfo (info); - time.modified = convert (info.ftLastWriteTime); - time.accessed = convert (info.ftLastAccessTime); - time.created = convert (info.ftCreationTime); - return time; - } - - /*********************************************************************** - - Transfer the content of another file to this one. Returns a - reference to this class on success, or throws an IOException - upon failure. - - ***********************************************************************/ - - final FilePath copy (char[] source) - { - auto src = new FilePath (source); - - version (Win32SansUnicode) - { - if (! CopyFileA (src.cString.ptr, this.cString.ptr, false)) - exception; - } - else - { - wchar[MAX_PATH+1] tmp1 = void; - wchar[MAX_PATH+1] tmp2 = void; - - if (! CopyFileW (toString16(tmp1, src.cString).ptr, name16(tmp2).ptr, false)) - exception; - } - - return this; - } - - /*************************************************************** - - Remove the file/directory from the file-system - - ***************************************************************/ - - final FilePath remove () - { - if (isFolder) - { - version (Win32SansUnicode) - { - if (! RemoveDirectoryA (this.cString.ptr)) - exception; - } - else - { - wchar[MAX_PATH] tmp = void; - if (! RemoveDirectoryW (name16(tmp).ptr)) - exception; - } - } - else - version (Win32SansUnicode) - { - if (! DeleteFileA (this.cString.ptr)) - exception; - } - else - { - wchar[MAX_PATH] tmp = void; - if (! DeleteFileW (name16(tmp).ptr)) - exception; - } - - return this; - } - - /*************************************************************** - - change the name or location of a file/directory, and - adopt the provided Path - - ***************************************************************/ - - final FilePath rename (char[] dst) - { - const int Typical = MOVEFILE_REPLACE_EXISTING + - MOVEFILE_COPY_ALLOWED + - MOVEFILE_WRITE_THROUGH; - - int result; - char[] cstr = dst ~ '\0'; - - version (Win32SansUnicode) - result = MoveFileExA (this.cString.ptr, cstr.ptr, Typical); - else - { - wchar[MAX_PATH] tmp1 = void; - wchar[MAX_PATH] tmp2 = void; - result = MoveFileExW (name16(tmp1).ptr, toString16(tmp2, cstr).ptr, Typical); - } - - if (! result) - exception; - - this.set (dst); - return this; - } - - /*************************************************************** - - Create a new file - - ***************************************************************/ - - final FilePath createFile () - { - HANDLE h; - - version (Win32SansUnicode) - h = CreateFileA (this.cString.ptr, GENERIC_WRITE, - 0, null, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, cast(HANDLE) 0); - else - { - wchar[MAX_PATH] tmp = void; - h = CreateFileW (name16(tmp).ptr, GENERIC_WRITE, - 0, null, CREATE_ALWAYS, - FILE_ATTRIBUTE_NORMAL, cast(HANDLE) 0); - } - - if (h == INVALID_HANDLE_VALUE) - exception; - - if (! CloseHandle (h)) - exception; - - return this; - } - - /*************************************************************** - - Create a new directory - - ***************************************************************/ - - final FilePath createFolder () - { - version (Win32SansUnicode) - { - if (! CreateDirectoryA (this.cString.ptr, null)) - exception; - } - else - { - wchar[MAX_PATH] tmp = void; - if (! CreateDirectoryW (name16(tmp).ptr, null)) - exception; - } - return this; - } - - /*************************************************************** - - List the set of filenames within this folder. - - Each path and filename is passed to the provided - delegate, along with the path prefix and whether - the entry is a folder or not. - - Returns the number of files scanned. - - ***************************************************************/ - - final int opApply (int delegate(ref FileInfo) dg) - { - HANDLE h; - int ret; - char[] prefix; - char[MAX_PATH+1] tmp = void; - FIND_DATA fileinfo = void; - - int next() - { - version (Win32SansUnicode) - return FindNextFileA (h, &fileinfo); - else - return FindNextFileW (h, &fileinfo); - } - - static T[] padded (T[] s, T[] ext) - { - if (s.length is 0 || s[$-1] != '\\') - return s ~ "\\" ~ ext; - return s ~ ext; - } - - version (Win32SansUnicode) - h = FindFirstFileA (padded(this.toString, "*\0").ptr, &fileinfo); - else - { - wchar[MAX_PATH] host = void; - h = FindFirstFileW (padded(name16(host, false), "*\0").ptr, &fileinfo); - } - - if (h is INVALID_HANDLE_VALUE) - exception; - - scope (exit) - FindClose (h); - - prefix = FilePath.padded (this.toString); - do { - version (Win32SansUnicode) - { - auto len = strlen (fileinfo.cFileName.ptr); - auto str = fileinfo.cFileName.ptr [0 .. len]; - } - else - { - auto len = wcslen (fileinfo.cFileName.ptr); - auto str = toString (tmp, fileinfo.cFileName [0 .. len]); - } - - // skip hidden/system files - if ((fileinfo.dwFileAttributes & (FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_HIDDEN)) is 0) - { - FileInfo info = void; - info.name = str; - info.path = prefix; - info.bytes = (cast(ulong) fileinfo.nFileSizeHigh << 32) + fileinfo.nFileSizeLow; - info.folder = (fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0; - - // skip "..." names - if (str.length > 3 || str != "..."[0 .. str.length]) - if ((ret = dg(info)) != 0) - break; - } - } while (next); - - return ret; - } - } - - - /*********************************************************************** - - ***********************************************************************/ - - version (Posix) - { - /*************************************************************** - - Get info about this path - - ***************************************************************/ - - private uint getInfo (inout stat_t stats) - { - if (posix.stat (this.cString.ptr, &stats)) - exception; - - return stats.st_mode; - } - - /*************************************************************** - - Return the file length (in bytes) - - ***************************************************************/ - - final ulong fileSize () - { - stat_t stats = void; - - getInfo (stats); - return cast(ulong) stats.st_size; // 32 bits only - } - - /*************************************************************** - - Is this file writable? - - ***************************************************************/ - - final bool isWritable () - { - stat_t stats = void; - - return (getInfo(stats) & O_RDONLY) == 0; - } - - /*************************************************************** - - Is this file actually a folder/directory? - - ***************************************************************/ - - final bool isFolder () - { - stat_t stats = void; - - return (getInfo(stats) & S_IFDIR) != 0; - } - - /*************************************************************** - - Return timestamp information - - ***************************************************************/ - - final Stamps timeStamps () - { - static Time convert (timeval* tv) - { - return Time.epoch1970 + - TimeSpan.seconds(tv.tv_sec) + - TimeSpan.micros(tv.tv_usec); - } - - stat_t stats = void; - Stamps time = void; - - getInfo (stats); - - time.modified = convert (cast(timeval*) &stats.st_mtime); - time.accessed = convert (cast(timeval*) &stats.st_atime); - time.created = convert (cast(timeval*) &stats.st_ctime); - return time; - } - - /*********************************************************************** - - Transfer the content of another file to this one. Returns a - reference to this class on success, or throws an IOException - upon failure. - - ***********************************************************************/ - - final FilePath copy (char[] source) - { - auto from = new FilePath (source); - - auto src = posix.open (from.cString.ptr, O_RDONLY, 0640); - scope (exit) - if (src != -1) - posix.close (src); - - auto dst = posix.open (this.cString.ptr, O_CREAT | O_RDWR, 0660); - scope (exit) - if (dst != -1) - posix.close (dst); - - if (src is -1 || dst is -1) - exception; - - // copy content - ubyte[] buf = new ubyte [16 * 1024]; - int read = posix.read (src, buf.ptr, buf.length); - while (read > 0) - { - auto p = buf.ptr; - do { - int written = posix.write (dst, p, read); - p += written; - read -= written; - if (written is -1) - exception; - } while (read > 0); - read = posix.read (src, buf.ptr, buf.length); - } - if (read is -1) - exception; - - // copy timestamps - stat_t stats; - if (posix.stat (from.cString.ptr, &stats)) - exception; - - utimbuf utim; - utim.actime = stats.st_atime; - utim.modtime = stats.st_mtime; - if (utime (this.cString.ptr, &utim) is -1) - exception; - - return this; - } - - /*************************************************************** - - Remove the file/directory from the file-system - - ***************************************************************/ - - final FilePath remove () - { - if (isFolder) - { - if (posix.rmdir (this.cString.ptr)) - exception; - } - else - if (tango.stdc.stdio.remove (this.cString.ptr) == -1) - exception; - - return this; - } - - /*************************************************************** - - change the name or location of a file/directory, and - adopt the provided FilePath - - ***************************************************************/ - - final FilePath rename (char[] dst) - { - char[] cstr = dst ~ '\0'; - if (tango.stdc.stdio.rename (this.cString.ptr, cstr.ptr) == -1) - exception; - - this.set (dst); - return this; - } - - /*************************************************************** - - Create a new file - - ***************************************************************/ - - final FilePath createFile () - { - int fd; - - fd = posix.open (this.cString.ptr, O_CREAT | O_WRONLY | O_TRUNC, 0660); - if (fd == -1) - exception; - - if (posix.close(fd) == -1) - exception; - - return this; - } - - /*************************************************************** - - Create a new directory - - ***************************************************************/ - - final FilePath createFolder () - { - if (posix.mkdir (this.cString.ptr, 0777)) - exception; - - return this; - } - - /*************************************************************** - - List the set of filenames within this folder. - - Each path and filename is passed to the provided - delegate, along with the path prefix and whether - the entry is a folder or not. - - Returns the number of files scanned. - - ***************************************************************/ - - final int opApply (int delegate(ref FileInfo) dg) - { - int ret; - DIR* dir; - dirent entry; - dirent* pentry; - stat_t sbuf; - char[] prefix; - char[] sfnbuf; - - dir = tango.stdc.posix.dirent.opendir (this.cString.ptr); - if (! dir) - exception; - - scope (exit) - tango.stdc.posix.dirent.closedir (dir); - - // ensure a trailing '/' is present - prefix = FilePath.padded (this.toString); - - // prepare our filename buffer - sfnbuf = prefix.dup; - - // pentry is null at end of listing, or on an error - while (readdir_r (dir, &entry, &pentry), pentry != null) - { - auto len = tango.stdc.string.strlen (entry.d_name.ptr); - auto str = entry.d_name.ptr [0 .. len]; - ++len; // include the null - - // resize the buffer as necessary ... - if (sfnbuf.length < prefix.length + len) - sfnbuf.length = prefix.length + len; - - sfnbuf [prefix.length .. prefix.length + len] - = entry.d_name.ptr [0 .. len]; - - // skip "..." names - if (str.length > 3 || str != "..."[0 .. str.length]) - { - if (stat (sfnbuf.ptr, &sbuf)) - exception; - - FileInfo info = void; - info.name = str; - info.path = prefix; - info.folder = (sbuf.st_mode & S_IFDIR) != 0; - info.bytes = (sbuf.st_mode & S_IFREG) != 0 ? sbuf.st_size : 0; - - if ((ret = dg(info)) != 0) - break; - } - } - return ret; - } - } -} - - - -/******************************************************************************* - -*******************************************************************************/ - -interface PathView -{ - /*********************************************************************** - - TimeStamp information. Accurate to whatever the OS supports - - ***********************************************************************/ - - struct Stamps - { - Time created, /// time created - accessed, /// last time accessed - modified; /// last time modified - } - - /*********************************************************************** - - Return the complete text of this filepath - - ***********************************************************************/ - - abstract char[] toString (); - - /*********************************************************************** - - Return the complete text of this filepath - - ***********************************************************************/ - - abstract char[] cString (); - - /*********************************************************************** - - Return the root of this path. Roots are constructs such as - "c:" - - ***********************************************************************/ - - abstract char[] root (); - - /*********************************************************************** - - Return the file path. Paths may start and end with a "/". - The root path is "/" and an unspecified path is returned as - an empty string. Directory paths may be split such that the - directory name is placed into the 'name' member; directory - paths are treated no differently than file paths - - ***********************************************************************/ - - abstract char[] folder (); - - /*********************************************************************** - - Return the name of this file, or directory, excluding a - suffix. - - ***********************************************************************/ - - abstract char[] name (); - - /*********************************************************************** - - Ext is the tail of the filename, rightward of the rightmost - '.' separator e.g. path "foo.bar" has ext "bar". Note that - patterns of adjacent separators are treated specially; for - example, ".." will wind up with no ext at all - - ***********************************************************************/ - - abstract char[] ext (); - - /*********************************************************************** - - Suffix is like ext, but includes the separator e.g. path - "foo.bar" has suffix ".bar" - - ***********************************************************************/ - - abstract char[] suffix (); - - /*********************************************************************** - - return the root + folder combination - - ***********************************************************************/ - - abstract char[] path (); - - /*********************************************************************** - - return the name + suffix combination - - ***********************************************************************/ - - abstract char[] file (); - - /*********************************************************************** - - Returns true if this FilePath is *not* relative to the - current working directory. - - ***********************************************************************/ - - abstract bool isAbsolute (); - - /*********************************************************************** - - Returns true if this FilePath is empty - - ***********************************************************************/ - - abstract bool isEmpty (); - - /*********************************************************************** - - Returns true if this FilePath has a parent - - ***********************************************************************/ - - abstract bool isChild (); - - /*********************************************************************** - - Does this path currently exist? - - ***********************************************************************/ - - abstract bool exists (); - - /*********************************************************************** - - Returns the time of the last modification. Accurate - to whatever the OS supports - - ***********************************************************************/ - - abstract Time modified (); - - /*********************************************************************** - - Returns the time of the last access. Accurate to - whatever the OS supports - - ***********************************************************************/ - - abstract Time accessed (); - - /*********************************************************************** - - Returns the time of file creation. Accurate to - whatever the OS supports - - ***********************************************************************/ - - abstract Time created (); - - /*********************************************************************** - - Return the file length (in bytes) - - ***********************************************************************/ - - abstract ulong fileSize (); - - /*********************************************************************** - - Is this file writable? - - ***********************************************************************/ - - abstract bool isWritable (); - - /*********************************************************************** - - Is this file actually a folder/directory? - - ***********************************************************************/ - - abstract bool isFolder (); - - /*********************************************************************** - - Return timestamp information - - ***********************************************************************/ - - abstract Stamps timeStamps (); -} - - - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - unittest - { - version(Win32) - { - auto fp = new FilePath(r"C:/home/foo/bar"); - fp ~= "john"; - assert (fp == r"C:/home/foo/bar/john"); - fp = r"C:/"; - fp ~= "john"; - assert (fp == r"C:/john"); - fp = "foo.bar"; - fp ~= "john"; - assert (fp == r"foo.bar/john"); - fp = ""; - fp ~= "john"; - assert (fp == r"john"); - - fp = r"C:/home/foo/bar/john/foo.d"; - assert (fp.pop == r"C:/home/foo/bar/john"); - assert (fp.pop == r"C:/home/foo/bar"); - assert (fp.pop == r"C:/home/foo"); - assert (fp.pop == r"C:/home"); - assert (fp.pop == r"C:"); - assert (fp.pop == r"C:"); - - // special case for popping empty names - fp = r"C:/home/foo/bar/john/"; - assert (fp.pop == r"C:/home/foo/bar", fp.toString); - - fp = new FilePath; - fp = r"C:/home/foo/bar/john/"; - assert (fp.isAbsolute); - assert (fp.name == ""); - assert (fp.folder == r"/home/foo/bar/john/"); - assert (fp == r"C:/home/foo/bar/john/"); - assert (fp.path == r"C:/home/foo/bar/john/"); - assert (fp.file == r""); - assert (fp.suffix == r""); - assert (fp.root == r"C:"); - assert (fp.ext == ""); - assert (fp.isChild); - - fp = new FilePath(r"C:/home/foo/bar/john"); - assert (fp.isAbsolute); - assert (fp.name == "john"); - assert (fp.folder == r"/home/foo/bar/"); - assert (fp == r"C:/home/foo/bar/john"); - assert (fp.path == r"C:/home/foo/bar/"); - assert (fp.file == r"john"); - assert (fp.suffix == r""); - assert (fp.ext == ""); - assert (fp.isChild); - - fp.pop; - assert (fp.isAbsolute); - assert (fp.name == "bar"); - assert (fp.folder == r"/home/foo/"); - assert (fp == r"C:/home/foo/bar"); - assert (fp.path == r"C:/home/foo/"); - assert (fp.file == r"bar"); - assert (fp.suffix == r""); - assert (fp.ext == ""); - assert (fp.isChild); - - fp.pop; - assert (fp.isAbsolute); - assert (fp.name == "foo"); - assert (fp.folder == r"/home/"); - assert (fp == r"C:/home/foo"); - assert (fp.path == r"C:/home/"); - assert (fp.file == r"foo"); - assert (fp.suffix == r""); - assert (fp.ext == ""); - assert (fp.isChild); - - fp.pop; - assert (fp.isAbsolute); - assert (fp.name == "home"); - assert (fp.folder == r"/"); - assert (fp == r"C:/home"); - assert (fp.path == r"C:/"); - assert (fp.file == r"home"); - assert (fp.suffix == r""); - assert (fp.ext == ""); - assert (fp.isChild); - - fp = new FilePath(r"foo/bar/john.doe"); - assert (!fp.isAbsolute); - assert (fp.name == "john"); - assert (fp.folder == r"foo/bar/"); - assert (fp.suffix == r".doe"); - assert (fp.file == r"john.doe"); - assert (fp == r"foo/bar/john.doe"); - assert (fp.ext == "doe"); - assert (fp.isChild); - - fp = new FilePath(r"c:doe"); - assert (fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r"c:doe"); - assert (fp.folder == r""); - assert (fp.name == "doe"); - assert (fp.file == r"doe"); - assert (fp.ext == ""); - assert (!fp.isChild); - - fp = new FilePath(r"/doe"); - assert (fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r"/doe"); - assert (fp.name == "doe"); - assert (fp.folder == r"/"); - assert (fp.file == r"doe"); - assert (fp.ext == ""); - assert (fp.isChild); - - fp = new FilePath(r"john.doe.foo"); - assert (!fp.isAbsolute); - assert (fp.name == "john.doe"); - assert (fp.folder == r""); - assert (fp.suffix == r".foo"); - assert (fp == r"john.doe.foo"); - assert (fp.file == r"john.doe.foo"); - assert (fp.ext == "foo"); - assert (!fp.isChild); - - fp = new FilePath(r".doe"); - assert (!fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r".doe"); - assert (fp.name == ".doe"); - assert (fp.folder == r""); - assert (fp.file == r".doe"); - assert (fp.ext == ""); - assert (!fp.isChild); - - fp = new FilePath(r"doe"); - assert (!fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r"doe"); - assert (fp.name == "doe"); - assert (fp.folder == r""); - assert (fp.file == r"doe"); - assert (fp.ext == ""); - assert (!fp.isChild); - - fp = new FilePath(r"."); - assert (!fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r"."); - assert (fp.name == "."); - assert (fp.folder == r""); - assert (fp.file == r"."); - assert (fp.ext == ""); - assert (!fp.isChild); - - fp = new FilePath(r".."); - assert (!fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r".."); - assert (fp.name == ".."); - assert (fp.folder == r""); - assert (fp.file == r".."); - assert (fp.ext == ""); - assert (!fp.isChild); - - fp = new FilePath(r"c:/a/b/c/d/e/foo.bar"); - assert (fp.isAbsolute); - fp.folder (r"/a/b/c/"); - assert (fp.suffix == r".bar"); - assert (fp == r"c:/a/b/c/foo.bar"); - assert (fp.name == "foo"); - assert (fp.folder == r"/a/b/c/"); - assert (fp.file == r"foo.bar"); - assert (fp.ext == "bar"); - assert (fp.isChild); - - fp = new FilePath(r"c:/a/b/c/d/e/foo.bar"); - assert (fp.isAbsolute); - fp.folder (r"/a/b/c/d/e/f/g/"); - assert (fp.suffix == r".bar"); - assert (fp == r"c:/a/b/c/d/e/f/g/foo.bar"); - assert (fp.name == "foo"); - assert (fp.folder == r"/a/b/c/d/e/f/g/"); - assert (fp.file == r"foo.bar"); - assert (fp.ext == "bar"); - assert (fp.isChild); - - fp = new FilePath(r"C:\foo\bar\test.bar"); - assert (fp.path == "C:/foo/bar/"); - fp = new FilePath(r"C:/foo/bar/test.bar"); - assert (fp.path == r"C:/foo/bar/"); - - fp = new FilePath(""); - assert (fp.isEmpty); - assert (!fp.isChild); - assert (!fp.isAbsolute); - assert (fp.suffix == r""); - assert (fp == r""); - assert (fp.name == ""); - assert (fp.folder == r""); - assert (fp.file == r""); - assert (fp.ext == ""); -/+ - fp = new FilePath(r"C:/foo/bar/test.bar"); - fp = new FilePath(fp.asPath ("foo")); - assert (fp.name == r"test"); - assert (fp.folder == r"foo/"); - assert (fp.path == r"C:foo/"); - assert (fp.ext == ".bar"); - - fp = new FilePath(fp.asPath ("")); - assert (fp.name == r"test"); - assert (fp.folder == r""); - assert (fp.path == r"C:"); - assert (fp.ext == ".bar"); - - fp = new FilePath(r"c:/joe/bar"); - assert(fp.cat(r"foo/bar/") == r"c:/joe/bar/foo/bar/"); - assert(fp.cat(new FilePath(r"foo/bar")).toString == r"c:/joe/bar/foo/bar"); - - assert (FilePath.join (r"a/b/c/d", r"e/f/" r"g") == r"a/b/c/d/e/f/g"); - - fp = new FilePath(r"C:/foo/bar/test.bar"); - assert (fp.asExt(null) == r"C:/foo/bar/test"); - assert (fp.asExt("foo") == r"C:/foo/bar/test.foo"); -+/ - } - } -} - - -debug (FilePath) -{ - import tango.io.Console; - - void main() - { - Cout (FilePath("c:/temp/").file("foo.bar")).newline; - } - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FileRoots.d --- a/tango/tango/io/FileRoots.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - - author: Kris, FreeEagle - -*******************************************************************************/ - -module tango.io.FileRoots; - -private import tango.sys.Common; - - -version (Win32) - { - private import Text = tango.text.Util; - private extern (Windows) DWORD GetLogicalDriveStringsA (DWORD, LPTSTR); - } - -version (Posix) - { - private import tango.io.FileConduit; - private import Integer = tango.text.convert.Integer; - } - -/******************************************************************************* - - Models an OS-specific file-system. Included here are methods to - list the system roots ("C:", "D:", etc) - -*******************************************************************************/ - -struct FileRoots -{ - version (Win32) - { - /*************************************************************** - - List the set of root devices (C:, D: etc) - - ***************************************************************/ - - static char[][] list () - { - int len; - char[] str; - char[][] roots; - - // acquire drive strings - len = GetLogicalDriveStringsA (0, null); - if (len) - { - str = new char [len]; - GetLogicalDriveStringsA (len, str.ptr); - - // split roots into seperate strings - roots = Text.delimit (str [0 .. $-1], "\0"); - } - return roots; - } - } - - - version (Posix) - { - /*************************************************************** - - List the set of root devices. - - ***************************************************************/ - - static char[][] list () - { - version(darwin) - { - assert(0); - return null; - } - else - { - char[] path = ""; - char[][] list; - int spaces; - - auto fc = new FileConduit("/etc/mtab"); - scope (exit) - fc.close; - - auto content = new char[cast(int) fc.length]; - fc.input.read (content); - - for(int i = 0; i < content.length; i++) - { - if(content[i] == ' ') spaces++; - else if(content[i] == '\n') - { - spaces = 0; - list ~= path; - path = ""; - } - else if(spaces == 1) - { - if(content[i] == '\\') - { - path ~= Integer.parse(content[++i..i+3], 8u); - i += 2; - } - else path ~= content[i]; - } - } - - return list; - } - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FileScan.d --- a/tango/tango/io/FileScan.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jun 2004: Initial release - version: Dec 2006: Pacific release - - author: Kris - -*******************************************************************************/ - -module tango.io.FileScan; - -public import tango.io.FilePath; - -private import tango.core.Exception; - -/******************************************************************************* - - Recursively scan files and directories, adding filtered files to - an output structure as we go. This can be used to produce a list - of subdirectories and the files contained therein. The following - example lists all files with suffix ".d" located via the current - directory, along with the folders containing them: - --- - auto scan = new FileScan; - - scan (".", ".d"); - - Stdout.formatln ("{} Folders", scan.folders.length); - foreach (folder; scan.folders) - Stdout.formatln ("{}", folder); - - Stdout.formatln ("\n{} Files", scan.files.length); - foreach (file; scan.files) - Stdout.formatln ("{}", file); - --- - - This is unlikely the most efficient method to scan a vast number of - files, but operates in a convenient manner - -*******************************************************************************/ - -class FileScan -{ - alias sweep opCall; - - FilePath[] fileSet; - char[][] errorSet; - FilePath[] folderSet; - - /*********************************************************************** - - Alias for Filter delegate. Accepts a FilePath & a bool as - arguments and returns a bool. - - The FilePath argument represents a file found by the scan, - and the bool whether the FilePath represents a folder. - - The filter should return true, if matched by the filter. Note - that returning false where the path is a folder will result - in all files contained being ignored. To always recurse folders, - do something like this: - --- - return (isDir || match (fp.name)); - --- - - ***********************************************************************/ - - alias FilePath.Filter Filter; - - /*********************************************************************** - - Return all the errors found in the last scan - - ***********************************************************************/ - - public char[][] errors () - { - return errorSet; - } - - /*********************************************************************** - - Return all the files found in the last scan - - ***********************************************************************/ - - public FilePath[] files () - { - return fileSet; - } - - /*********************************************************************** - - Return all directories found in the last scan - - ***********************************************************************/ - - public FilePath[] folders () - { - return folderSet; - } - - /*********************************************************************** - - Sweep a set of files and directories from the given parent - path, with no filtering applied - - ***********************************************************************/ - - FileScan sweep (char[] path, bool recurse=true) - { - return sweep (path, cast(Filter) null, recurse); - } - - /*********************************************************************** - - Sweep a set of files and directories from the given parent - path, where the files are filtered by the given suffix - - ***********************************************************************/ - - FileScan sweep (char[] path, char[] match, bool recurse=true) - { - return sweep (path, (FilePath fp, bool isDir) - {return isDir || fp.suffix == match;}, recurse); - } - - /*********************************************************************** - - Sweep a set of files and directories from the given parent - path, where the files are filtered by the provided delegate - - ***********************************************************************/ - - FileScan sweep (char[] path, Filter filter, bool recurse=true) - { - errorSet = null, fileSet = folderSet = null; - return scan (new FilePath(path), filter, recurse); - } - - /*********************************************************************** - - Internal routine to locate files and sub-directories. We - skip entries with names composed only of '.' characters. - - ***********************************************************************/ - - private FileScan scan (FilePath folder, Filter filter, bool recurse) - { - try { - auto paths = folder.toList (filter); - - auto count = fileSet.length; - foreach (path; paths) - if (! path.isFolder) - fileSet ~= path; - else - if (recurse) - scan (path, filter, recurse); - - // add packages only if there's something in them - if (fileSet.length > count) - folderSet ~= folder; - - } catch (IOException e) - errorSet ~= e.toString; - return this; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (FileScan) -{ - import tango.io.Stdout; - - void main() - { - auto scan = new FileScan; - - scan ("."); - - Stdout.formatln ("{} Folders", scan.folders.length); - foreach (folder; scan.folders) - Stdout (folder).newline; - - Stdout.formatln ("\n{} Files", scan.files.length); - foreach (file; scan.files) - Stdout (file).newline; - - Stdout.formatln ("\n{} Errors", scan.errors.length); - foreach (error; scan.errors) - Stdout (error).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/FileSystem.d --- a/tango/tango/io/FileSystem.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,251 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004: Initial release - version: Feb 2007: Now using mutating paths - - author: Kris, Chris Sauls (Win95 file support) - -*******************************************************************************/ - -module tango.io.FileSystem; - -private import tango.sys.Common; - -private import tango.io.FilePath; - -private import tango.core.Exception; - -version (Posix) - { - private import tango.stdc.string; - private import tango.stdc.posix.unistd; - } - -/******************************************************************************* - - Models an OS-specific file-system. Included here are methods to - manipulate the current working directory, and to convert a path - to its absolute form. - -*******************************************************************************/ - -class FileSystem -{ - /*********************************************************************** - - Convert the provided path to an absolute path, using the - current working directory where prefix is not provided. - If the given path is already an absolute path, return it - intact. - - Returns the provided path, adjusted as necessary - - ***********************************************************************/ - - static FilePath toAbsolute (FilePath target, char[] prefix=null) - { - if (! target.isAbsolute) - { - if (prefix is null) - prefix = getDirectory; - - target.prepend (target.padded(prefix)); - } - return target; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void exception (char[] msg) - { - throw new IOException (msg); - } - - /*********************************************************************** - - ***********************************************************************/ - - version (Win32) - { - /*************************************************************** - - Set the current working directory - - ***************************************************************/ - - static void setDirectory (char[] path) - { - version (Win32SansUnicode) - { - char[MAX_PATH+1] tmp = void; - tmp[0..path.length] = path; - tmp[path.length] = 0; - - if (! SetCurrentDirectoryA (tmp.ptr)) - exception ("Failed to set current directory"); - } - else - { - // convert into output buffer - wchar[MAX_PATH+1] tmp = void; - assert (path.length < tmp.length); - auto i = MultiByteToWideChar (CP_UTF8, 0, - path.ptr, path.length, - tmp.ptr, tmp.length); - tmp[i] = 0; - - if (! SetCurrentDirectoryW (tmp.ptr)) - exception ("Failed to set current directory"); - } - } - - /*************************************************************** - - Return the current working directory - - ***************************************************************/ - - static char[] getDirectory () - { - char[] path; - - version (Win32SansUnicode) - { - int len = GetCurrentDirectoryA (0, null); - auto dir = new char [len]; - GetCurrentDirectoryA (len, dir.ptr); - if (len) - { - dir[len-1] = '\\'; - path = dir; - } - else - exception ("Failed to get current directory"); - } - else - { - wchar[MAX_PATH+2] tmp = void; - - auto len = GetCurrentDirectoryW (0, null); - assert (len < tmp.length); - auto dir = new char [len * 3]; - GetCurrentDirectoryW (len, tmp.ptr); - auto i = WideCharToMultiByte (CP_UTF8, 0, tmp.ptr, len, - dir.ptr, dir.length, null, null); - if (len && i) - { - path = dir[0..i]; - path[$-1] = '\\'; - } - else - exception ("Failed to get current directory"); - } - - return path; - } - } - - /*********************************************************************** - - ***********************************************************************/ - - version (Posix) - { - /*************************************************************** - - Set the current working directory - - ***************************************************************/ - - static void setDirectory (char[] path) - { - char[512] tmp = void; - tmp [path.length] = 0; - tmp[0..path.length] = path; - - if (tango.stdc.posix.unistd.chdir (tmp.ptr)) - exception ("Failed to set current directory"); - } - - /*************************************************************** - - Return the current working directory - - ***************************************************************/ - - static char[] getDirectory () - { - char[512] tmp = void; - - char *s = tango.stdc.posix.unistd.getcwd (tmp.ptr, tmp.length); - if (s is null) - exception ("Failed to get current directory"); - - auto path = s[0 .. strlen(s)+1].dup; - path[$-1] = '/'; - return path; - } - } -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (FileSystem) -{ - import tango.io.Stdout; - - static void foo (FilePath path) - { - Stdout("all: ") (path).newline; - Stdout("path: ") (path.path).newline; - Stdout("file: ") (path.file).newline; - Stdout("folder: ") (path.folder).newline; - Stdout("name: ") (path.name).newline; - Stdout("ext: ") (path.ext).newline; - Stdout("suffix: ") (path.suffix).newline.newline; - } - - void main() - { - auto path = new FilePath ("."); - foo (path); - - path.set (".."); - foo (path); - - path.set ("..."); - foo (path); - - path.set (r"\x\y\.file"); - foo (path); - - path.suffix = ".foo"; - foo (path); - - path.set ("file.bar"); - FileSystem.toAbsolute(path); - foo(path); - - path.set (r"arf\test"); - foo(path); - FileSystem.toAbsolute(path); - foo(path); - - path.name = "foo"; - foo(path); - - path.suffix = ".d"; - path.name = path.suffix; - foo(path); - - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/GrowBuffer.d --- a/tango/tango/io/GrowBuffer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - - author: Kris - -*******************************************************************************/ - -module tango.io.GrowBuffer; - -private import tango.io.Buffer; - -public import tango.io.model.IBuffer; - -/******************************************************************************* - - Subclass to provide support for content growth. This is handy when - you want to keep a buffer around as a scratchpad. - -*******************************************************************************/ - -class GrowBuffer : Buffer -{ - private uint increment; - - alias Buffer.slice slice; - alias Buffer.append append; - - /*********************************************************************** - - Create a GrowBuffer with the specified initial size. - - ***********************************************************************/ - - this (uint size = 1024, uint increment = 1024) - { - super (size); - - assert (increment >= 32); - this.increment = increment; - } - - /*********************************************************************** - - Create a GrowBuffer with the specified initial size. - - ***********************************************************************/ - - this (IConduit conduit, uint size = 1024) - { - this (size, size); - setConduit (conduit); - } - - /*********************************************************************** - - Read a chunk of data from the buffer, loading from the - conduit as necessary. The specified number of bytes is - loaded into the buffer, and marked as having been read - when the 'eat' parameter is set true. When 'eat' is set - false, the read position is not adjusted. - - Returns the corresponding buffer slice when successful. - - ***********************************************************************/ - - override void[] slice (uint size, bool eat = true) - { - if (size > readable) - { - if (source is null) - error (underflow); - - if (size + index > dimension) - makeRoom (size); - - // populate tail of buffer with new content - do { - if (fill(source) is IConduit.Eof) - error (eofRead); - } while (size > readable); - } - - uint i = index; - if (eat) - index += size; - return data [i .. i + size]; - } - - /*********************************************************************** - - Append an array of data to this buffer. This is often used - in lieu of a Writer. - - ***********************************************************************/ - - override IBuffer append (void *src, uint length) - { - if (length > writable) - makeRoom (length); - - copy (src, length); - return this; - } - - /*********************************************************************** - - Try to fill the available buffer with content from the - specified conduit. - - Returns the number of bytes read, or IConduit.Eof - - ***********************************************************************/ - - override uint fill (InputStream src) - { - if (writable <= increment/8) - makeRoom (increment); - - return write (&src.read); - } - - /*********************************************************************** - - Expand and consume the conduit content, up to the maximum - size indicated by the argument or until conduit.Eof - - Returns the number of bytes in the buffer - - ***********************************************************************/ - - uint fill (uint size = uint.max) - { - while (readable < size) - if (fill(source) is IConduit.Eof) - break; - return readable; - } - - /*********************************************************************** - - make some room in the buffer - - ***********************************************************************/ - - private uint makeRoom (uint size) - { - if (size < increment) - size = increment; - - dimension += size; - data.length = dimension; - return writable(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/MappedBuffer.d --- a/tango/tango/io/MappedBuffer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,331 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - - author: Kris - -*******************************************************************************/ - -module tango.io.MappedBuffer; - -private import tango.sys.Common; - -private import tango.io.Buffer; - -private import tango.core.Exception; - -public import tango.io.FileConduit; - -/******************************************************************************* - - Win32 declarations - -*******************************************************************************/ - -version (Win32) - private extern (Windows) - { - BOOL UnmapViewOfFile (LPCVOID); - BOOL FlushViewOfFile (LPCVOID, DWORD); - LPVOID MapViewOfFile (HANDLE, DWORD, DWORD, DWORD, DWORD); - HANDLE CreateFileMappingA (HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCTSTR); - } - -version (Posix) - { - private import tango.stdc.posix.sys.mman; - } - - -/******************************************************************************* - - Subclass to treat the buffer as a seekable entity, where all - capacity is available for reading and/or writing. To achieve - this we must effectively disable the 'limit' watermark, and - locate write operations around 'position' instead. - -*******************************************************************************/ - -class MappedBuffer : Buffer, IConduit.Seek -{ - private FileConduit host; // the hosting file - - version (Win32) - { - private void* base; // array pointer - private HANDLE mmFile; // mapped file - - /*************************************************************** - - Construct a MappedBuffer upon the given FileConduit. - One should set the file size using seek() & truncate() - to setup the available working space. - - ***************************************************************/ - - this (FileConduit host) - { - super (0); - - this.host = host; - - // can only do 32bit mapping on 32bit platform - auto size = host.length; - assert (size <= uint.max); - - auto access = host.style.access; - - DWORD flags = PAGE_READONLY; - if (access & host.Access.Write) - flags = PAGE_READWRITE; - - auto handle = cast(HANDLE) host.fileHandle; - mmFile = CreateFileMappingA (handle, null, flags, 0, 0, null); - if (mmFile is null) - host.error (); - - flags = FILE_MAP_READ; - if (access & host.Access.Write) - flags |= FILE_MAP_WRITE; - - base = MapViewOfFile (mmFile, flags, 0, 0, 0); - if (base is null) - host.error; - - void[] mem = base [0 .. cast(int) size]; - setContent (mem); - } - - /*************************************************************** - - Release this mapped buffer without flushing - - ***************************************************************/ - - override void close () - { - if (base) - UnmapViewOfFile (base); - - if (mmFile) - CloseHandle (mmFile); - - mmFile = null; - base = null; - } - - /*************************************************************** - - Flush dirty content out to the drive. This - fails with error 33 if the file content is - virgin. Opening a file for ReadWriteExists - followed by a flush() will cause this. - - ***************************************************************/ - - override OutputStream flush () - { - // flush all dirty pages - if (! FlushViewOfFile (base, 0)) - host.error (); - return this; - } - } - - /*********************************************************************** - - ***********************************************************************/ - - version (Posix) - { - // Linux code: not yet tested on other POSIX systems. - private void* base; // array pointer - private ulong size; // length of file - - this (FileConduit host) - { - super(0); - - this.host = host; - size = host.length; - - // Make sure the mapping attributes are consistant with - // the FileConduit attributes. - - auto access = host.style.access; - - int flags = MAP_SHARED; - int protection = PROT_READ; - - if (access & host.Access.Write) - protection |= PROT_WRITE; - - base = mmap (null, size, protection, flags, host.fileHandle(), 0); - if (base is null) - host.error(); - - void[] mem = base [0 .. cast(int) size]; - setContent (mem); - } - - /*************************************************************** - - Release this mapped buffer without flushing - - ***************************************************************/ - - override void close () - { - // NOTE: When a process ends, all mmaps belonging to that process - // are automatically unmapped by system (Linux). - // On the other hand, this is NOT the case when the related - // file descriptor is closed. This function unmaps explicitly. - - if (base) - if (munmap (base, size)) - host.error(); - base = null; - } - - /*************************************************************** - - Flush dirty content out to the drive. - - ***************************************************************/ - - override OutputStream flush () - { - // MS_ASYNC: delayed flush; equivalent to "add-to-queue" - // MS_SYNC: function flushes file immediately; no return until flush complete - // MS_INVALIDATE: invalidate all mappings of the same file (shared) - - if (msync (base, size, MS_SYNC | MS_INVALIDATE)) - host.error(); - return this; - } - } - - /*********************************************************************** - - Seek to the specified position within the buffer, and return - the byte offset of the new location (relative to zero). - - ***********************************************************************/ - - long seek (long offset, Anchor anchor = Anchor.Begin) - { - uint pos = dimension; - - if (anchor is Anchor.Begin) - pos = cast(uint) offset; - else - if (anchor is Anchor.End) - pos -= cast(uint) offset; - else - pos = index + cast(uint) offset; - - return index = pos; - } - - /*********************************************************************** - - Return count of writable bytes available in buffer. This is - calculated simply as capacity() - limit() - - ***********************************************************************/ - - override uint writable () - { - return dimension - index; - } - - /*********************************************************************** - - Bulk copy of data from 'src'. Position is adjusted by 'size' - bytes. - - ***********************************************************************/ - - override protected void copy (void *src, uint size) - { - // avoid "out of bounds" test on zero size - if (size) - { - // content may overlap ... - memcpy (&data[index], src, size); - index += size; - } - } - - /*********************************************************************** - - Exposes the raw data buffer at the current write position, - The delegate is provided with a void[] representing space - available within the buffer at the current write position. - - The delegate should return the appropriate number of bytes - if it writes valid content, or IConduit.Eof on error. - - Returns whatever the delegate returns. - - ***********************************************************************/ - - override uint write (uint delegate (void[]) dg) - { - int count = dg (data [index .. dimension]); - - if (count != IConduit.Eof) - { - index += count; - assert (index <= dimension); - } - return count; - } - - /*********************************************************************** - - Prohibit compress() from doing anything at all. - - ***********************************************************************/ - - override IBuffer compress () - { - return this; - } - - /*********************************************************************** - - Prohibit clear() from doing anything at all. - - ***********************************************************************/ - - override InputStream clear () - { - return this; - } - - /*********************************************************************** - - Prohibit the setting of another IConduit - - ***********************************************************************/ - - override IBuffer setConduit (IConduit conduit) - { - error ("cannot setConduit on memory-mapped buffer"); - return null; - } -} - - -debug (MappedBuffer) -{ - void main() - { - auto x = new MappedBuffer(null); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/Print.d --- a/tango/tango/io/Print.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Feb 2007: Separated from Stdout - - author: Kris - -*******************************************************************************/ - -module tango.io.Print; - -private import tango.io.model.IBuffer, - tango.io.model.IConduit; - -private import tango.text.convert.Layout; - -/******************************************************************************* - - A bridge between a Layout instance and a Buffer. This is used for - the Stdout & Stderr globals, but can be used for general purpose - buffer-formatting as desired. The Template type 'T' dictates the - text arrangement within the target buffer ~ one of char, wchar or - dchar (utf8, utf16, or utf32). - - Print exposes this style of usage: - --- - auto print = new Print!(char) (...); - - print ("hello"); => hello - print (1); => 1 - print (3.14); => 3.14 - print ('b'); => b - print (1, 2, 3); => 1, 2, 3 - print ("abc", 1, 2, 3); => abc, 1, 2, 3 - print ("abc", 1, 2) ("foo"); => abc, 1, 2foo - print ("abc") ("def") (3.14); => abcdef3.14 - - print.format ("abc {}", 1); => abc 1 - print.format ("abc {}:{}", 1, 2); => abc 1:2 - print.format ("abc {1}:{0}", 1, 2); => abc 2:1 - print.format ("abc ", 1); => abc - --- - - Note that the last example does not throw an exception. There - are several use-cases where dropping an argument is legitimate, - so we're currently not enforcing any particular trap mechanism. - - Flushing the output is achieved through the flush() method, or - via an empty pair of parens: - --- - print ("hello world") (); - print ("hello world").flush; - - print.format ("hello {}", "world") (); - print.format ("hello {}", "world").flush; - --- - - Special character sequences, such as "\n", are written directly to - the output without any translation (though an output-filter could - be inserted to perform translation as required). Platform-specific - newlines are generated instead via the newline() method, which also - flushes the output when configured to do so: - --- - print ("hello ") ("world").newline; - print.format ("hello {}", "world").newline; - print.formatln ("hello {}", "world"); - --- - - The format() method supports the range of formatting options - exposed by tango.text.convert.Layout and extensions thereof; - including the full I18N extensions where configured in that - manner. To create a French instance of Print: - --- - import tango.text.locale.Locale; - - auto locale = new Locale (Culture.getCulture ("fr-FR")); - auto print = new Print!(char) (locale, ...); - --- - - Note that Print is *not* intended to be thread-safe. Use either - tango.util.log.Trace or the standard logging facilities in order - to enable atomic console I/O - -*******************************************************************************/ - -class Print(T) : OutputStream -{ - private T[] eol; - private OutputStream output; - private Layout!(T) convert; - private bool flushLines; - - public alias print opCall; - - version (Win32) - private const T[] Eol = "\r\n"; - else - private const T[] Eol = "\n"; - - /********************************************************************** - - Construct a Print instance, tying the provided stream - to a layout formatter - - **********************************************************************/ - - this (Layout!(T) convert, OutputStream output, T[] eol = Eol) - { - assert (convert); - assert (output); - - this.eol = eol; - this.output = output; - this.convert = convert; - } - - /********************************************************************** - - Layout using the provided formatting specification - - **********************************************************************/ - - final Print format (T[] fmt, ...) - { - convert (&sink, _arguments, _argptr, fmt); - return this; - } - - /********************************************************************** - - Layout using the provided formatting specification - - **********************************************************************/ - - final Print formatln (T[] fmt, ...) - { - convert (&sink, _arguments, _argptr, fmt); - return newline; - } - - /********************************************************************** - - Unformatted layout, with commas inserted between args. - Currently supports a maximum of 24 arguments - - **********************************************************************/ - - final Print print (...) - { - static T[] slice = "{}, {}, {}, {}, {}, {}, {}, {}, " - "{}, {}, {}, {}, {}, {}, {}, {}, " - "{}, {}, {}, {}, {}, {}, {}, {}, "; - - assert (_arguments.length <= slice.length/4, "Print :: too many arguments"); - - if (_arguments.length is 0) - output.flush; - else - convert (&sink, _arguments, _argptr, slice[0 .. _arguments.length * 4 - 2]); - - return this; - } - - /*********************************************************************** - - Output a newline and optionally flush - - ***********************************************************************/ - - final Print newline () - { - output.write (eol); - if (flushLines) - output.flush; - return this; - } - - /********************************************************************** - - Control implicit flushing of newline(), where true enables - flushing. An explicit flush() will always flush the output. - - **********************************************************************/ - - final Print flush (bool yes) - { - flushLines = yes; - return this; - } - - /********************************************************************** - - Return the associated output stream - - **********************************************************************/ - - final OutputStream stream () - { - return output; - } - - /********************************************************************** - - Set the associated output stream - - **********************************************************************/ - - final Print stream (OutputStream output) - { - this.output = output; - return this; - } - - /********************************************************************** - - Return the associated Layout - - **********************************************************************/ - - final Layout!(T) layout () - { - return convert; - } - - /********************************************************************** - - Set the associated Layout - - **********************************************************************/ - - final Print layout (Layout!(T) layout) - { - convert = layout; - return this; - } - - /********************************************************************** - - Sink for passing to the formatter - - **********************************************************************/ - - private final uint sink (T[] s) - { - return output.write (s); - } - - /**********************************************************************/ - /********************* OutputStream Interface *************************/ - /**********************************************************************/ - - - /*********************************************************************** - - Return the host conduit - - ***********************************************************************/ - - IConduit conduit () - { - return output.conduit; - } - - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided - - ***********************************************************************/ - - uint write (void[] src) - { - return output.write (src); - } - - /********************************************************************** - - Flush the output stream - - **********************************************************************/ - - final OutputStream flush () - { - output.flush; - return this; - } - - /*********************************************************************** - - Transfer the content of another conduit to this one. Returns - a reference to this class, and throws IOException on failure. - - ***********************************************************************/ - - OutputStream copy (InputStream src) - { - output.copy (src); - return this; - } - - /*********************************************************************** - - Close the output - - ***********************************************************************/ - - void close () - { - output.close; - } -} - - -debug (Print) -{ - import tango.io.GrowBuffer; - import tango.text.convert.Layout; - - void main() - { - auto print = new Print!(char) (new Layout!(char), new GrowBuffer); - - for (int i=0;i < 1000; i++) - print(i).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/Stdout.d --- a/tango/tango/io/Stdout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Nov 2005: Initial release - - author: Kris - - Standard, global formatters for console output. If you don't need - formatted output or unicode translation, consider using the module - tango.io.Console directly - - Stdout & Stderr expose this style of usage: - --- - Stdout ("hello"); => hello - Stdout (1); => 1 - Stdout (3.14); => 3.14 - Stdout ('b'); => b - Stdout (1, 2, 3); => 1, 2, 3 - Stdout ("abc", 1, 2, 3); => abc, 1, 2, 3 - Stdout ("abc", 1, 2) ("foo"); => abc, 1, 2foo - Stdout ("abc") ("def") (3.14); => abcdef3.14 - - Stdout.format ("abc {}", 1); => abc 1 - Stdout.format ("abc {}:{}", 1, 2); => abc 1:2 - Stdout.format ("abc {1}:{0}", 1, 2); => abc 2:1 - Stdout.format ("abc ", 1); => abc - --- - - Note that the last example does not throw an exception. There - are several use-cases where dropping an argument is legitimate, - so we're currently not enforcing any particular trap mechanism. - - Flushing the output is achieved through the flush() method, or - via an empty pair of parens: - --- - Stdout ("hello world") (); - Stdout ("hello world").flush; - - Stdout.format ("hello {}", "world") (); - Stdout.format ("hello {}", "world").flush; - --- - - Special character sequences, such as "\n", are written directly to - the output without any translation (though an output-filter could - be inserted to perform translation as required). Platform-specific - newlines are generated instead via the newline() method, which also - flushes the output when configured to do so: - --- - Stdout ("hello ") ("world").newline; - Stdout.format ("hello {}", "world").newline; - Stdout.formatln ("hello {}", "world"); - --- - - The format() method of both Stderr and Stdout support the range - of formatting options provided by tango.text.convert.Layout and - extensions thereof; including the full I18N extensions where it - has been configured in that manner. To enable a French Stdout, - do the following: - --- - import tango.text.locale.Locale; - - Stdout.layout = new Locale (Culture.getCulture ("fr-FR")); - --- - - Note that Stdout is a shared entity, so every usage of it will - be affected by the above example. For applications supporting - multiple regions, create multiple Locale instances instead and - cache them in an appropriate manner - - Note also that the output-stream in use is exposed by these - global instances ~ this can be leveraged, for instance, to copy a - file to the standard output: - --- - Stdout.copy (new FileConduit ("myfile")); - --- - - Note that Stdout is *not* intended to be thread-safe. Use either - tango.util.log.Trace or the standard logging facilities in order - to enable atomic console I/O - -*******************************************************************************/ - -module tango.io.Stdout; - -private import tango.io.Print, - tango.io.Console; - -private import tango.text.convert.Layout; - -/******************************************************************************* - - Construct Stdout & Stderr when this module is loaded - -*******************************************************************************/ - -static this() -{ - auto layout = new Layout!(char); - - Stdout = new Print!(char) (layout, Cout.stream); - Stderr = new Print!(char) (layout, Cerr.stream); - - Stdout.flush = !Cout.redirected; - Stderr.flush = !Cerr.redirected; -} - -public static Print!(char) Stdout, /// global standard output - Stderr; /// global error output - - -/****************************************************************************** - -******************************************************************************/ - -debug (Stdout) -{ - void main() - { - Stdout ("hello").newline; - Stdout (1).newline; - Stdout (3.14).newline; - Stdout ('b').newline; - Stdout ("abc") ("def") (3.14).newline; - Stdout ("abc", 1, 2, 3).newline; - Stdout (1, 2, 3).newline; - Stdout (1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1).newline; - - Stdout ("abc {}{}{}", 1, 2, 3).newline; - Stdout.format ("abc {}{}{}", 1, 2, 3).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/TempFile.d --- a/tango/tango/io/TempFile.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,663 +0,0 @@ -/****************************************************************************** - * - * copyright: Copyright © 2007 Daniel Keep. All rights reserved. - * license: BSD style: $(LICENSE) - * version: Initial release: December 2007 - * authors: Daniel Keep - * credits: Thanks to John Reimer for helping test this module under - * Linux. - * - ******************************************************************************/ - -module tango.io.TempFile; - -import tango.math.Random : Random; -import tango.io.DeviceConduit : DeviceConduit; -import tango.io.FileConduit : FileConduit; -import tango.io.FilePath : FilePath/*, PathView*/; -import tango.stdc.stringz : toStringz, toString16z; - -/****************************************************************************** - ******************************************************************************/ - -version( Win32 ) -{ - import tango.sys.Common : DWORD, LONG; - - enum : DWORD { FILE_FLAG_OPEN_REPARSE_POINT = 0x00200000 } - - version( Win32SansUnicode ) - { - import tango.sys.Common : - GetVersionExA, OSVERSIONINFO, - CreateFileA, GENERIC_READ, GENERIC_WRITE, - CREATE_NEW, FILE_ATTRIBUTE_NORMAL, FILE_FLAG_DELETE_ON_CLOSE, - FILE_SHARE_READ, FILE_SHARE_WRITE, - LPSECURITY_ATTRIBUTES, - HANDLE, INVALID_HANDLE_VALUE, - GetTempPathA, SetFilePointer, GetLastError, ERROR_SUCCESS; - - HANDLE CreateFile(FilePath fn, DWORD da, DWORD sm, - LPSECURITY_ATTRIBUTES sa, DWORD cd, DWORD faa, HANDLE tf) - { - return CreateFileA(fn.cString.ptr, da, sm, sa, cd, faa, tf); - } - - char[] GetTempPath() - { - auto len = GetTempPathA(0, null); - if( len == 0 ) - throw new Exception("could not obtain temporary path"); - - auto result = new char[len+1]; - len = GetTempPathA(len+1, result.ptr); - if( len == 0 ) - throw new Exception("could not obtain temporary path"); - return result[0..len]; - } - } - else - { - import tango.sys.Common : - GetVersionExW, OSVERSIONINFO, - CreateFileW, GENERIC_READ, GENERIC_WRITE, - CREATE_NEW, FILE_ATTRIBUTE_NORMAL, FILE_FLAG_DELETE_ON_CLOSE, - FILE_SHARE_READ, FILE_SHARE_WRITE, - LPSECURITY_ATTRIBUTES, - HANDLE, INVALID_HANDLE_VALUE, - GetTempPathW, SetFilePointer, GetLastError, ERROR_SUCCESS; - - import tango.text.convert.Utf : toString, toString16; - - HANDLE CreateFile(FilePath fn, DWORD da, DWORD sm, - LPSECURITY_ATTRIBUTES sa, DWORD cd, DWORD faa, HANDLE tf) - { - return CreateFileW(toString16(fn.cString).ptr, - da, sm, sa, cd, faa, tf); - } - - char[] GetTempPath() - { - auto len = GetTempPathW(0, null); - if( len == 0 ) - throw new Exception("could not obtain temporary path"); - - auto result = new wchar[len+1]; - len = GetTempPathW(len+1, result.ptr); - if( len == 0 ) - throw new Exception("could not obtain temporary path"); - return toString(result[0..len]); - } - } - - // Determines if reparse points (aka: symlinks) are supported. Support - // was introduced in Windows Vista. - bool reparseSupported() - { - OSVERSIONINFO versionInfo; - versionInfo.dwOSVersionInfoSize = versionInfo.sizeof; - - void e(){throw new Exception("could not determine Windows version");}; - - version( Win32SansUnicode ) - if( !GetVersionExA(&versionInfo) ) e(); - else - if( !GetVersionExW(&versionInfo) ) e(); - - return (versionInfo.dwMajorVersion >= 6); - } -} - -else version( Posix ) -{ - import tango.stdc.posix.fcntl : open, O_CREAT, O_EXCL, O_RDWR; - import tango.stdc.posix.pwd : getpwnam; - import tango.stdc.posix.unistd : access, getuid, lseek, unlink, W_OK; - import tango.stdc.posix.sys.stat : stat, stat_t; - - import tango.sys.Environment : Environment; - - enum { O_LARGEFILE = 0x8000 } - - version( linux ) - { - // NOTE: This constant is actually platform-dependant for some - // God-only-knows reason. *sigh* It should be fine for 'generic' - // architectures, but other ones will need to be double-checked. - enum { O_NOFOLLOW = 00400000 } - } - else version( darwin ) - { - enum { O_NOFOLLOW = 0x0100 } - } - else - { - pragma(msg, "Cannot use TempFile: O_NOFOLLOW is not " - "defined for this platform."); - static assert(false); - } -} - -/****************************************************************************** - * - * The TempFile class aims to provide a safe way of creating and destroying - * temporary files. The TempFile class will automatically close temporary - * files when the object is destroyed, so it is recommended that you make - * appropriate use of scoped destruction. - * - * Temporary files can be created with one of several styles, much like normal - * FileConduits. TempFile styles have the following properties: - * - * $(UL - * $(LI $(B Transience): this determines whether the file should be destroyed - * as soon as it is closed (transient,) or continue to persist even after the - * application has terminated (permanent.)) - * ) - * - * Eventually, this will be expanded to give you greater control over the - * temporary file's properties. - * - * For the typical use-case (creating a file to temporarily store data too - * large to fit into memory,) the following is sufficient: - * - * ----- - * { - * scope temp = new TempFile; - * - * // Use temp as a normal conduit; it will be automatically closed when - * // it goes out of scope. - * } - * ----- - * - * $(B Important): - * It is recommended that you $(I do not) use files created by this class to - * store sensitive information. There are several known issues with the - * current implementation that could allow an attacker to access the contents - * of these temporary files. - * - * $(B Todo): Detail security properties and guarantees. - * - ******************************************************************************/ - -class TempFile : DeviceConduit, DeviceConduit.Seek -{ - //alias FileConduit.Cache Cache; - //alias FileConduit.Share Share; - - /+enum Visibility : ubyte - { - /** - * The temporary file will have read and write access to it restricted - * to the current user. - */ - User, - /** - * The temporary file will have read and write access available to any - * user on the system. - */ - World - }+/ - - /************************************************************************** - * - * This enumeration is used to control whether the temporary file should - * persist after the TempFile object has been destroyed. - * - **************************************************************************/ - - enum Transience : ubyte - { - /** - * The temporary file should be destroyed along with the owner object. - */ - Transient, - /** - * The temporary file should persist after the object has been - * destroyed. - */ - Permanent - } - - /+enum Sensitivity : ubyte - { - /** - * Transient files will be truncated to zero length immediately - * before closure to prevent casual filesystem inspection to recover - * their contents. - * - * No additional action is taken on permanent files. - */ - None, - /** - * Transient files will be zeroed-out before truncation, to mask their - * contents from more thorough filesystem inspection. - * - * This option is not compatible with permanent files. - */ - Low - /+ - /** - * Transient files will be overwritten first with zeroes, then with - * ones, and then with a random 32- or 64-bit pattern (dependant on - * which is most efficient.) The file will then be truncated. - * - * This option is not compatible with permanent files. - */ - Medium - +/ - }+/ - - /************************************************************************** - * - * This structure is used to determine how the temporary files should be - * opened and used. - * - **************************************************************************/ - struct Style - { - align(1): - //Visibility visibility; /// - Transience transience; /// - //Sensitivity sensitivity; /// - //Share share; /// - //Cache cache; /// - int attempts = 10; /// - } - - /** - * Style for creating a transient temporary file that only the current - * user can access. - */ - static const Style Transient = {Transience.Transient}; - /** - * Style for creating a permanent temporary file that only the current - * user can access. - */ - static const Style Permanent = {Transience.Permanent}; - - // Path to the temporary file - private /*PathView*/ FilePath _path; - - // Style we've opened with - private Style _style; - - // Have we been detatched? - private bool detached = false; - - /// - this(Style style = Style.init) - { - create(style); - } - - /// - this(char[] prefix, Style style = Style.init) - { - this(FilePath(prefix), style); - } - - /// - this(FilePath prefix, Style style = Style.init) - { - create(prefix.dup, style); - } - - ~this() - { - if( !detached ) this.detach(); - } - - /************************************************************************** - * - * Returns a PathView to the temporary file. Please note that depending - * on your platform, the returned path may or may not actually exist if - * you specified a transient file. - * - **************************************************************************/ - /*PathView*/ FilePath path() - { - return _path; - } - - /************************************************************************** - * - * Indicates the style that this TempFile was created with. - * - **************************************************************************/ - Style style() - { - return _style; - } - - override char[] toString() - { - if( path.toString.length > 0 ) - return path.toString; - else - return ""; - } - - /************************************************************************** - * - * Returns the current cursor position within the file. - * - **************************************************************************/ - long position() - { - return seek(0, Seek.Anchor.Current); - } - - /************************************************************************** - * - * Returns the total length, in bytes, of the temporary file. - * - **************************************************************************/ - long length() - { - long pos, ret; - pos = position; - ret = seek(0, Seek.Anchor.End); - seek(pos); - return ret; - } - - /* - * Creates a new temporary file with the given style. - */ - private void create(Style style) - { - create(FilePath(tempPath).dup, style); - } - - private void create(FilePath prefix, Style style) - { - for( size_t i=0; i> 32); - long result = SetFilePointer (handle, cast(LONG) offset, - &high, anchor); - - if (result is -1 && - GetLastError() != ERROR_SUCCESS) - error(); - - return result + (cast(long) high << 32); - } - } - else version( Posix ) - { - private static const DEFAULT_LENGTH = 6; - private static const DEFAULT_PREFIX = ".tmp"; - - // Use "~" to work around a bug in DMD where it elides empty constants - private static const DEFAULT_SUFFIX = "~"; - - private static const JUNK_CHARS = - "ABCDEFGHIJKLMNOPQRSTUVWXYZ" - "abcdefghijklmnopqrstuvwxyz0123456789"; - - /* - * Returns the path to the temporary directory. - */ - private char[] tempPath() - { - // Check for TMPDIR; failing that, use /tmp - if( auto tmpdir = Environment.get("TMPDIR") ) - return tmpdir; - else - return "/tmp/"; - } - - /* - * Creates a new temporary file at the given path, with the specified - * style. - */ - private bool create_path(FilePath path, Style style) - { - // Check suitability - { - auto parent = path.path; - auto parentz = toStringz(parent); - - // Make sure we have write access - if( access(parentz, W_OK) == -1 ) - error("do not have write access to temporary directory"); - - // Get info on directory - stat_t sb; - if( stat(parentz, &sb) == -1 ) - error("could not stat temporary directory"); - - // Get root's UID - auto pwe = getpwnam("root"); - if( pwe is null ) error("could not get root's uid"); - auto root_uid = pwe.pw_uid; - - // Make sure either we or root are the owner - if( !(sb.st_uid == root_uid || sb.st_uid == getuid) ) - error("temporary directory owned by neither root nor user"); - - // Check to see if anyone other than us can write to the dir. - if( (sb.st_mode & 022) != 0 && (sb.st_mode & 01000) == 0 ) - error("sticky bit not set on world-writable directory"); - } - - // Create file - { - auto flags = O_LARGEFILE | O_CREAT | O_EXCL - | O_NOFOLLOW | O_RDWR; - - auto pathz = path.cString.ptr; - - handle = open(pathz, flags, 0600); - if( handle is -1 ) - return false; - - if( style.transience == Transience.Transient ) - { - // BUG TODO: check to make sure the path still points - // to the file we opened. Pity you can't unlink a file - // descriptor... - - // NOTE: This should be an exception and not simply - // returning false, since this is a violation of our - // guarantees. - if( unlink(pathz) == -1 ) - error("could not remove transient file"); - } - - _path = path; - _style = style; - - return true; - } - } - - // See DDoc version - long seek(long offset, Seek.Anchor anchor = Seek.Anchor.Begin) - { - long result = lseek(handle, offset, anchor); - if (result is -1) - error(); - return result; - } - } - else version( DDoc ) - { - /********************************************************************** - * - * Seeks the temporary file's cursor to the given location. - * - **********************************************************************/ - long seek(long offset, Seek.Anchor anchor = Seek.Anchor.Begin); - } - else - { - static assert(false, "Unsupported platform"); - } - - /* - * Generates a new random file name, sans directory. - */ - private char[] randomName(uint length=DEFAULT_LENGTH, - char[] prefix=DEFAULT_PREFIX, - char[] suffix=DEFAULT_SUFFIX) - { - auto junk = new char[length]; - scope(exit) delete junk; - - foreach( ref c ; junk ) - c = JUNK_CHARS[Random.shared.next($)]; - - return prefix~junk~suffix; - } - - override void detach() - { - static assert( !is(Sensitivity) ); - super.detach(); - detached = true; - } -} - -version( TempFile_SelfTest ): - -import tango.io.Console : Cin; -import tango.io.Stdout : Stdout; - -void main() -{ - Stdout(r" -Please ensure that the transient file no longer exists once the TempFile -object is destroyed, and that the permanent file does. You should also check -the following on both: - - * the file should be owned by you, - * the owner should have read and write permissions, - * no other permissions should be set on the file. - -For POSIX systems: - - * the temp directory should be owned by either root or you, - * if anyone other than root or you can write to it, the sticky bit should be - set, - * if the directory is writable by anyone other than root or the user, and the - sticky bit is *not* set, then creating the temporary file should fail. - -You might want to delete the permanent one afterwards, too. :)") - .newline; - - Stdout.formatln("Creating a transient file:"); - { - scope tempFile = new TempFile(/*TempFile.UserPermanent*/); - scope(exit) tempFile.detach; - - Stdout.formatln(" .. path: {}", tempFile); - - tempFile.output.write("Transient temp file."); - - char[] buffer = new char[1023]; - tempFile.seek(0); - buffer = buffer[0..tempFile.input.read(buffer)]; - - Stdout.formatln(" .. contents: \"{}\"", buffer); - - Stdout(" .. press Enter to destroy TempFile object.").newline; - Cin.copyln(); - } - - Stdout.newline; - - Stdout.formatln("Creating a permanent file:"); - { - scope tempFile = new TempFile(TempFile.UserPermanent); - scope(exit) tempFile.detach; - - Stdout.formatln(" .. path: {}", tempFile); - - tempFile.output.write("Permanent temp file."); - - char[] buffer = new char[1023]; - tempFile.seek(0); - buffer = buffer[0..tempFile.input.read(buffer)]; - - Stdout.formatln(" .. contents: \"{}\"", buffer); - - Stdout(" .. press Enter to destroy TempFile object.").flush; - Cin.copyln(); - } - - Stdout("\nDone.").newline; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/UnicodeFile.d --- a/tango/tango/io/UnicodeFile.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,251 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Kris - -*******************************************************************************/ - -module tango.io.UnicodeFile; - -public import tango.io.FilePath; - -private import tango.io.FileConduit; - -private import tango.core.Exception; - -public import tango.text.convert.UnicodeBom; - -/******************************************************************************* - - Read and write unicode files - - For our purposes, unicode files are an encoding of textual material. - The goal of this module is to interface that external-encoding with - a programmer-defined internal-encoding. This internal encoding is - declared via the template argument T, whilst the external encoding - is either specified or derived. - - Three internal encodings are supported: char, wchar, and dchar. The - methods herein operate upon arrays of this type. For example, read() - returns an array of the type, whilst write() and append() expect an - array of said type. - - Supported external encodings are as follow: - - $(UL Encoding.Unknown) - $(UL Encoding.UTF_8) - $(UL Encoding.UTF_8N) - $(UL Encoding.UTF_16) - $(UL Encoding.UTF_16BE) - $(UL Encoding.UTF_16LE) - $(UL Encoding.UTF_32) - $(UL Encoding.UTF_32BE) - $(UL Encoding.UTF_32LE) - - These can be divided into implicit and explicit encodings. Here are - the implicit subset: - - $(UL Encoding.Unknown) - $(UL Encoding.UTF_8) - $(UL Encoding.UTF_16) - $(UL Encoding.UTF_32) - - Implicit encodings may be used to 'discover' - an unknown encoding, by examining the first few bytes of the file - content for a signature. This signature is optional for all files, - but is often written such that the content is self-describing. When - the encoding is unknown, using one of the non-explicit encodings will - cause the read() method to look for a signature and adjust itself - accordingly. It is possible that a ZWNBSP character might be confused - with the signature; today's files are supposed to use the WORD-JOINER - character instead. - - Explicit encodings are as follows: - - $(UL Encoding.UTF_8N) - $(UL Encoding.UTF_16BE) - $(UL Encoding.UTF_16LE) - $(UL Encoding.UTF_32BE) - $(UL Encoding.UTF_32LE) - - This group of encodings are for use when the file encoding is - known. These *must* be used when writing or appending, since written - content must be in a known format. It should be noted that, during a - read operation, the presence of a signature is in conflict with these - explicit varieties. - - Method read() returns the current content of the file, whilst write() - sets the file content, and file length, to the provided array. Method - append() adds content to the tail of the file. When appending, it is - your responsibility to ensure the existing and current encodings are - correctly matched. - - Methods to inspect the file system, check the status of a file or - directory, and other facilities are made available via the FilePath - superclass. - - See these links for more info: - $(UL $(LINK http://www.utf-8.com/)) - $(UL $(LINK http://www.hackcraft.net/xmlUnicode/)) - $(UL $(LINK http://www.unicode.org/faq/utf_bom.html/)) - $(UL $(LINK http://www.azillionmonkeys.com/qed/unicode.html/)) - $(UL $(LINK http://icu.sourceforge.net/docs/papers/forms_of_unicode/)) - -*******************************************************************************/ - -class UnicodeFile(T) -{ - private UnicodeBom!(T) bom; - private PathView path_; - - /*********************************************************************** - - Construct a UnicodeFile from the provided FilePath. The given - encoding represents the external file encoding, and should - be one of the Encoding.xx types - - ***********************************************************************/ - - this (PathView path, Encoding encoding) - { - bom = new UnicodeBom!(T)(encoding); - path_ = path; - } - - /*********************************************************************** - - Construct a UnicodeFile from a text string. The provided - encoding represents the external file encoding, and should - be one of the Encoding.xx types - - ***********************************************************************/ - - this (char[] path, Encoding encoding) - { - this (new FilePath(path), encoding); - } - - /*********************************************************************** - - Call-site shortcut to create a UnicodeFile instance. This - enables the same syntax as struct usage, so may expose - a migration path - - ***********************************************************************/ - - static UnicodeFile opCall (char[] name, Encoding encoding) - { - return new UnicodeFile (name, encoding); - } - - /*********************************************************************** - - Return the associated FilePath instance - - ***********************************************************************/ - - PathView path () - { - return path_; - } - - /*********************************************************************** - - Return the current encoding. This is either the originally - specified encoding, or a derived one obtained by inspecting - the file content for a BOM. The latter is performed as part - of the read() method. - - ***********************************************************************/ - - Encoding encoding () - { - return bom.encoding(); - } - - /*********************************************************************** - - Return the content of the file. The content is inspected - for a BOM signature, which is stripped. An exception is - thrown if a signature is present when, according to the - encoding type, it should not be. Conversely, An exception - is thrown if there is no known signature where the current - encoding expects one to be present. - - ***********************************************************************/ - - T[] read () - { - scope conduit = new FileConduit (path_); - scope (exit) - conduit.close; - - // allocate enough space for the entire file - auto content = new ubyte [cast(uint) conduit.length]; - - //read the content - if (conduit.read (content) != content.length) - conduit.error ("unexpected eof"); - - return bom.decode (content); - } - - /*********************************************************************** - - Set the file content and length to reflect the given array. - The content will be encoded accordingly. - - ***********************************************************************/ - - UnicodeFile write (T[] content, bool writeBom = false) - { - return write (content, FileConduit.ReadWriteCreate, writeBom); - } - - /*********************************************************************** - - Append content to the file; the content will be encoded - accordingly. - - Note that it is your responsibility to ensure the - existing and current encodings are correctly matched. - - ***********************************************************************/ - - UnicodeFile append (T[] content) - { - return write (content, FileConduit.WriteAppending, false); - } - - /*********************************************************************** - - Internal method to perform writing of content. Note that - the encoding must be of the explicit variety by the time - we get here. - - ***********************************************************************/ - - private final UnicodeFile write (T[] content, FileConduit.Style style, bool writeBom) - { - // convert to external representation (may throw an exeption) - void[] converted = bom.encode (content); - - // open file after conversion ~ in case of exceptions - scope conduit = new FileConduit (path_, style); - scope (exit) - conduit.close; - - if (writeBom) - conduit.write (bom.signature); - - // and write - conduit.write (converted); - return this; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/archive/Zip.d --- a/tango/tango/io/archive/Zip.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2882 +0,0 @@ -/******************************************************************************* - * - * copyright: Copyright © 2007 Daniel Keep. All rights reserved. - * - * license: BSD style: $(LICENSE) - * - * version: Initial release: December 2007 - * - * author: Daniel Keep - * - ******************************************************************************/ - -module tango.io.archive.Zip; - -/* - -TODO -==== - -* Disable UTF encoding until I've worked out what version of Zip that's - related to... (actually; it's entirely possible that's it's merely a - *proposal* at the moment.) (*Done*) - -* Make ZipEntry safe: make them aware that their creating reader has been - destroyed. - -*/ - -import tango.core.ByteSwap : ByteSwap; -import tango.io.Buffer : Buffer; -import tango.io.FileConduit : FileConduit; -import tango.io.FilePath : FilePath, PathView; -import tango.io.MappedBuffer : MappedBuffer; -import tango.io.compress.ZlibStream : ZlibInput, ZlibOutput; -import tango.io.digest.Crc32 : Crc32; -import tango.io.model.IConduit : IConduit, InputStream, OutputStream; -import tango.io.stream.DigestStream : DigestInput; -import tango.time.Time : Time, TimeSpan; -import tango.time.WallClock : WallClock; -import tango.time.chrono.Gregorian : Gregorian; - -import Integer = tango.text.convert.Integer; - -debug(Zip) import tango.io.Stdout : Stderr; - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Implementation crap -// -// Why is this here, you ask? Because of bloody DMD forward reference bugs. -// For pete's sake, Walter, FIX THEM, please! -// -// To skip to the actual user-visible stuff, search for "Shared stuff". - -private -{ - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// LocalFileHeader -// - - align(1) - struct LocalFileHeaderData - { - ushort extract_version = ushort.max; - ushort general_flags = 0; - ushort compression_method = 0; - ushort modification_file_time = 0; - ushort modification_file_date = 0; - uint crc_32 = 0; // offsetof = 10 - uint compressed_size = 0; - uint uncompressed_size = 0; - ushort file_name_length = 0; - ushort extra_field_length = 0; - - debug(Zip) void dump() - { - Stderr - ("LocalFileHeader.Data {")("\n") - (" extract_version = ")(extract_version)("\n") - (" general_flags = ")(general_flags)("\n") - (" compression_method = ")(compression_method)("\n") - (" modification_file_time = ")(modification_file_time)("\n") - (" modification_file_date = ")(modification_file_date)("\n") - (" crc_32 = ")(crc_32)("\n") - (" compressed_size = ")(compressed_size)("\n") - (" uncompressed_size = ")(uncompressed_size)("\n") - (" file_name_length = ")(file_name_length)("\n") - (" extra_field_length = ")(extra_field_length)("\n") - ("}").newline; - } - } - -struct LocalFileHeader -{ - const uint signature = 0x04034b50; - - alias LocalFileHeaderData Data; - Data data; - static assert( Data.sizeof == 26 ); - - char[] file_name; - ubyte[] extra_field; - - void[] data_arr() - { - return (&data)[0..1]; - } - - void put(OutputStream output) - { - // Make sure var-length fields will fit. - if( file_name.length > ushort.max ) - ZipException.fntoolong; - - if( extra_field.length > ushort.max ) - ZipException.eftoolong; - - // Encode filename - auto file_name = utf8_to_cp437(this.file_name); - scope(exit) if( file_name !is cast(ubyte[])this.file_name ) - delete file_name; - - if( file_name is null ) - ZipException.fnencode; - - // Update lengths in data - Data data = this.data; - data.file_name_length = file_name.length; - data.extra_field_length = extra_field.length; - - // Do it - version( BigEndian ) swapAll(data); - writeExact(output, (&data)[0..1]); - writeExact(output, file_name); - writeExact(output, extra_field); - } - - void fill(InputStream src) - { - readExact(src, data_arr); - version( BigEndian ) swapAll(data); - - //debug(Zip) data.dump; - - auto tmp = new ubyte[data.file_name_length]; - readExact(src, tmp); - file_name = cp437_to_utf8(tmp); - if( cast(char*) tmp.ptr !is file_name.ptr ) delete tmp; - - extra_field = new ubyte[data.extra_field_length]; - readExact(src, extra_field); - } - - /* - * This method will check to make sure that the local and central headers - * are the same; if they're not, then that indicates that the archive is - * corrupt. - */ - bool agrees_with(FileHeader h) - { - if( data.extract_version != h.data.extract_version - || data.general_flags != h.data.general_flags - || data.compression_method != h.data.compression_method - || data.modification_file_time != h.data.modification_file_time - || data.modification_file_date != h.data.modification_file_date - || data.crc_32 != h.data.crc_32 - || data.compressed_size != h.data.compressed_size - || data.uncompressed_size != h.data.uncompressed_size - || file_name != h.file_name - || extra_field != h.extra_field ) - return false; - - // We need a separate check for the sizes and crc32, since these will - // be zero if a trailing descriptor was used. - if( !h.usingDataDescriptor && ( - data.crc_32 != h.data.crc_32 - || data.compressed_size != h.data.compressed_size - || data.uncompressed_size != h.data.uncompressed_size ) ) - return false; - - return true; - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// FileHeader -// - - align(1) - struct FileHeaderData - { - ubyte zip_version; - ubyte file_attribute_type; - ushort extract_version; - ushort general_flags; - ushort compression_method; - ushort modification_file_time; - ushort modification_file_date; - uint crc_32; - uint compressed_size; - uint uncompressed_size; - ushort file_name_length; - ushort extra_field_length; - ushort file_comment_length; - ushort disk_number_start; - ushort internal_file_attributes = 0; - uint external_file_attributes = 0; - int relative_offset_of_local_header; - - debug(Zip) void dump() - { - Stderr - ("FileHeader.Data {\n") - (" zip_version = ")(zip_version)("\n") - (" file_attribute_type = ")(file_attribute_type)("\n") - (" extract_version = ")(extract_version)("\n") - (" general_flags = ")(general_flags)("\n") - (" compression_method = ")(compression_method)("\n") - (" modification_file_time = ")(modification_file_time)("\n") - (" modification_file_date = ")(modification_file_date)("\n") - (" crc_32 = ")(crc_32)("\n") - (" compressed_size = ")(compressed_size)("\n") - (" uncompressed_size = ")(uncompressed_size)("\n") - (" file_name_length = ")(file_name_length)("\n") - (" extra_field_length = ")(extra_field_length)("\n") - (" file_comment_length = ")(file_comment_length)("\n") - (" disk_number_start = ")(disk_number_start)("\n") - (" internal_file_attributes = ")(internal_file_attributes)("\n") - (" external_file_attributes = ")(external_file_attributes)("\n") - (" relative_offset_of_local_header = ")(relative_offset_of_local_header) - ("\n") - ("}").newline; - } - - void fromLocal(LocalFileHeader.Data data) - { - extract_version = data.extract_version; - general_flags = data.general_flags; - compression_method = data.compression_method; - modification_file_time = data.modification_file_time; - modification_file_date = data.modification_file_date; - crc_32 = data.crc_32; - compressed_size = data.compressed_size; - uncompressed_size = data.uncompressed_size; - file_name_length = data.file_name_length; - extra_field_length = data.extra_field_length; - } - } - -struct FileHeader -{ - const uint signature = 0x02014b50; - - alias FileHeaderData Data; - Data* data; - static assert( Data.sizeof == 42 ); - - char[] file_name; - ubyte[] extra_field; - char[] file_comment; - - bool usingDataDescriptor() - { - return !!(data.general_flags & 1<<3); - } - - uint compressionOptions() - { - return (data.general_flags >> 1) & 0b11; - } - - bool usingUtf8() - { - //return !!(data.general_flags & 1<<11); - return false; - } - - void[] data_arr() - { - return (cast(void*)data)[0 .. Data.sizeof]; - } - - void put(OutputStream output) - { - // Make sure the var-length fields will fit. - if( file_name.length > ushort.max ) - ZipException.fntoolong; - - if( extra_field.length > ushort.max ) - ZipException.eftoolong; - - if( file_comment.length > ushort.max ) - ZipException.cotoolong; - - // encode the filename and comment - auto file_name = utf8_to_cp437(this.file_name); - scope(exit) if( file_name !is cast(ubyte[])this.file_name ) - delete file_name; - auto file_comment = utf8_to_cp437(this.file_comment); - scope(exit) if( file_comment !is cast(ubyte[])this.file_comment ) - delete file_comment; - - if( file_name is null ) - ZipException.fnencode; - - if( file_comment is null && this.file_comment !is null ) - ZipException.coencode; - - // Update the lengths - Data data = *(this.data); - data.file_name_length = file_name.length; - data.extra_field_length = extra_field.length; - data.file_comment_length = file_comment.length; - - // Ok; let's do this! - version( BigEndian ) swapAll(data); - writeExact(output, (&data)[0..1]); - writeExact(output, file_name); - writeExact(output, extra_field); - writeExact(output, file_comment); - } - - long map(void[] src) - { - //debug(Zip) Stderr.formatln("FileHeader.map([0..{}])",src.length); - - auto old_ptr = src.ptr; - - data = cast(Data*) src.ptr; - src = src[Data.sizeof..$]; - version( BigEndian ) swapAll(*data); - - //debug(Zip) data.dump; - - char[] function(ubyte[]) conv_fn; - if( usingUtf8 ) - conv_fn = &cp437_to_utf8; - else - conv_fn = &utf8_to_utf8; - - file_name = conv_fn( - cast(ubyte[]) src[0..data.file_name_length]); - src = src[data.file_name_length..$]; - - extra_field = cast(ubyte[]) src[0..data.extra_field_length]; - src = src[data.extra_field_length..$]; - - file_comment = conv_fn( - cast(ubyte[]) src[0..data.file_comment_length]); - src = src[data.file_comment_length..$]; - - // Return how many bytes we've eaten - //debug(Zip) Stderr.formatln(" . used {} bytes", cast(long)(src.ptr - old_ptr)); - return cast(long)(src.ptr - old_ptr); - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// EndOfCDRecord -// - - align(1) - struct EndOfCDRecordData - { - ushort disk_number = 0; - ushort disk_with_start_of_central_directory = 0; - ushort central_directory_entries_on_this_disk; - ushort central_directory_entries_total; - uint size_of_central_directory; - uint offset_of_start_of_cd_from_starting_disk; - ushort file_comment_length; - - debug(Zip) void dump() - { - Stderr - .formatln("EndOfCDRecord.Data {}","{") - .formatln(" disk_number = {}", disk_number) - .formatln(" disk_with_start_of_central_directory = {}", - disk_with_start_of_central_directory) - .formatln(" central_directory_entries_on_this_disk = {}", - central_directory_entries_on_this_disk) - .formatln(" central_directory_entries_total = {}", - central_directory_entries_total) - .formatln(" size_of_central_directory = {}", - size_of_central_directory) - .formatln(" offset_of_start_of_cd_from_starting_disk = {}", - offset_of_start_of_cd_from_starting_disk) - .formatln(" file_comment_length = {}", file_comment_length) - .formatln("}"); - } - } - -struct EndOfCDRecord -{ - const uint signature = 0x06054b50; - - alias EndOfCDRecordData Data; - Data data; - static assert( data.sizeof == 18 ); - - char[] file_comment; - - void[] data_arr() - { - return (cast(void*)&data)[0 .. data.sizeof]; - } - - void put(OutputStream output) - { - // Set up the comment; check length, encode - if( file_comment.length > ushort.max ) - ZipException.cotoolong; - - auto file_comment = utf8_to_cp437(this.file_comment); - scope(exit) if( file_comment !is cast(ubyte[])this.file_comment ) - delete file_comment; - - // Set up data block - Data data = this.data; - data.file_comment_length = file_comment.length; - - version( BigEndian ) swapAll(data); - writeExact(output, (&data)[0..1]); - } - - void fill(void[] src) - { - //Stderr.formatln("EndOfCDRecord.fill([0..{}])",src.length); - - auto _data = data_arr; - _data[] = src[0.._data.length]; - src = src[_data.length..$]; - version( BigEndian ) swapAll(data); - - //data.dump; - - file_comment = cast(char[]) src[0..data.file_comment_length].dup; - } -} - -// End of implementation crap -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Shared stuff - -public -{ - /** - * This enumeration denotes the kind of compression used on a file. - */ - enum Method - { - /// No compression should be used. - Store, - /// Deflate compression. - Deflate, - /** - * This is a special value used for unsupported or unrecognised - * compression methods. This value is only used internally. - */ - Unsupported - } -} - -private -{ - const ushort ZIP_VERSION = 20; - const ushort MAX_EXTRACT_VERSION = 20; - - /* compression flags - uses trailing descriptor | - utf-8 encoding | | - ^ ^ /\ */ - const ushort SUPPORTED_FLAGS = 0b00_0_0_0_0000_0_0_0_1_11_0; - const ushort UNSUPPORTED_FLAGS = ~SUPPORTED_FLAGS; - - Method toMethod(ushort method) - { - switch( method ) - { - case 0: return Method.Store; - case 8: return Method.Deflate; - default: return Method.Unsupported; - } - } - - ushort fromMethod(Method method) - { - switch( method ) - { - case Method.Store: return 0; - case Method.Deflate: return 8; - default: - assert(false, "unsupported compression method"); - } - } - - /* NOTE: This doesn't actually appear to work. Using the default magic - * number with Tango's Crc32 digest works, however. - */ - //const CRC_MAGIC = 0xdebb20e3u; -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// ZipReader - -interface ZipReader -{ - bool streamed(); - void close(); - bool more(); - ZipEntry get(); - ZipEntry get(ZipEntry); - int opApply(int delegate(ref ZipEntry)); -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// ZipWriter - -interface ZipWriter -{ - void finish(); - void putFile(ZipEntryInfo info, char[] path); - void putFile(ZipEntryInfo info, PathView path); - void putStream(ZipEntryInfo info, InputStream source); - void putEntry(ZipEntryInfo info, ZipEntry entry); - void putData(ZipEntryInfo info, void[] data); - Method method(); - Method method(Method); -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// ZipBlockReader - -/** - * The ZipBlockReader class is used to parse a Zip archive. It exposes the - * contents of the archive via an iteration interface. For instance, to loop - * over all files in an archive, one can use either - * - * ----- - * foreach( entry ; reader ) - * ... - * ----- - * - * Or - * - * ----- - * while( reader.more ) - * { - * auto entry = reader.get; - * ... - * } - * ----- - * - * See the ZipEntry class for more information on the contents of entries. - * - * Note that this class can only be used with input sources which can be - * freely seeked. Also note that you may open a ZipEntry instance produced by - * this reader at any time until the ZipReader that created it is closed. - */ -class ZipBlockReader : ZipReader -{ - /** - * Creates a ZipBlockReader using the specified file on the local - * filesystem. - */ - this(char[] path) - { - this(FilePath(path)); - } - - /// ditto - this(PathView path) - { - file_source = new FileConduit(path); - this(file_source); - } - -version( none ) -{ - /** - * Creates a ZipBlockReader using the provided FileConduit instance. Where - * possible, the conduit will be wrapped in a memory-mapped buffer for - * optimum performance. If you do not want the FileConduit memory-mapped, - * either cast it to an InputStream first, or pass source.input to the - * constructor. - */ - this(FileConduit source) - { - // BUG: MappedBuffer doesn't implement IConduit.Seek - //mm_source = new MappedBuffer(source); - //this(mm_source); - this(source.input); - } -} - - /** - * Creates a ZipBlockReader using the provided InputStream. Please note - * that this InputStream must also implement the IConduit.Seek interface. - */ - this(InputStream source) - in - { - assert( cast(IConduit.Seek) source, "source stream must be seekable" ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - } - - bool streamed() { return false; } - - /** - * Closes the reader, and releases all resources. After this operation, - * all ZipEntry instances created by this ZipReader are invalid and should - * not be used. - */ - void close() - { - state = State.Done; - source = null; - seeker = null; - delete headers; - delete cd_data; - - if( file_source !is null ) delete file_source; - if( mm_source !is null ) delete mm_source; - } - - /** - * Returns true if and only if there are additional files in the archive - * which have not been read via the get method. This returns true before - * the first call to get (assuming the opened archive is non-empty), and - * false after the last file has been accessed. - */ - bool more() - { - switch( state ) - { - case State.Init: - read_cd; - assert( state == State.Open ); - return more; - - case State.Open: - return (current_index < headers.length); - - case State.Done: - return false; - } - } - - /** - * Retrieves the next file from the archive. Note that although this does - * perform IO operations, it will not read the contents of the file. - * - * The optional reuse argument can be used to instruct the reader to reuse - * an existing ZipEntry instance. If passed a null reference, it will - * create a new ZipEntry instance. - */ - ZipEntry get() - { - if( !more ) - ZipExhaustedException(); - - return new ZipEntry(headers[current_index++], &open_file); - } - - /// ditto - ZipEntry get(ZipEntry reuse) - { - if( !more ) - ZipExhaustedException(); - - if( reuse is null ) - return new ZipEntry(headers[current_index++], &open_file); - else - return reuse.reset(headers[current_index++], &open_file); - } - - /** - * This is used to iterate over the contents of an archive using a foreach - * loop. Please note that the iteration will reuse the ZipEntry instance - * passed to your loop. If you wish to keep the instance and re-use it - * later, you $(B must) use the dup member to create a copy. - */ - int opApply(int delegate(ref ZipEntry) dg) - { - int result = 0; - ZipEntry entry; - - while( more ) - { - entry = get(entry); - - result = dg(entry); - if( result ) - break; - } - - if( entry !is null ) - delete entry; - - return result; - } - -private: - InputStream source; - IConduit.Seek seeker; - - enum State { Init, Open, Done } - State state; - size_t current_index = 0; - FileHeader[] headers; - - // These should be killed when the reader is closed. - ubyte[] cd_data; - FileConduit file_source = null; - MappedBuffer mm_source = null; - - /* - * This function will read the contents of the central directory. Split - * or spanned archives aren't supported. - */ - void read_cd() - in - { - assert( state == State.Init ); - assert( headers is null ); - assert( cd_data is null ); - } - out - { - assert( state == State.Open ); - assert( headers !is null ); - assert( cd_data !is null ); - assert( current_index == 0 ); - } - body - { - //Stderr.formatln("ZipReader.read_cd()"); - - // First, we need to locate the end of cd record, so that we know - // where the cd itself is, and how big it is. - auto eocdr = read_eocd_record; - - // Now, make sure the archive is all in one file. - if( eocdr.data.disk_number != - eocdr.data.disk_with_start_of_central_directory - || eocdr.data.central_directory_entries_on_this_disk != - eocdr.data.central_directory_entries_total ) - ZipNotSupportedException.spanned; - - // Ok, read the whole damn thing in one go. - cd_data = new ubyte[eocdr.data.size_of_central_directory]; - long cd_offset = eocdr.data.offset_of_start_of_cd_from_starting_disk; - seeker.seek(cd_offset, IConduit.Seek.Anchor.Begin); - readExact(source, cd_data); - - // Cake. Now, we need to break it up into records. - headers = new FileHeader[ - eocdr.data.central_directory_entries_total]; - - long cdr_offset = cd_offset; - - // Ok, map the CD data into file headers. - foreach( i,ref header ; headers ) - { - //Stderr.formatln(" . reading header {}...", i); - - // Check signature - { - uint sig = (cast(uint[])(cd_data[0..4]))[0]; - version( BigEndian ) swap(sig); - if( sig != FileHeader.signature ) - ZipException.badsig("file header"); - } - - auto used = header.map(cd_data[4..$]); - cd_data = cd_data[4+used..$]; - - // Update offset for next record - cdr_offset += 4 /* for sig. */ + used; - } - - // Done! - state = State.Open; - } - - /* - * This will locate the end of CD record in the open stream. - * - * This code sucks, but that's because Zip sucks. - * - * Basically, the EOCD record is stuffed somewhere at the end of the file. - * In a brilliant move, the record is *variably sized*, which means we - * have to do a linear backwards search to find it. - * - * The header itself (including the signature) is at minimum 22 bytes - * long, plus anywhere between 0 and 2^16-1 bytes of comment. That means - * we need to read the last 2^16-1 + 22 bytes from the file, and look for - * the signature [0x50,0x4b,0x05,0x06] in [0 .. $-18]. - * - * If we find the EOCD record, we'll return its contents. If we couldn't - * find it, we'll throw an exception. - */ - EndOfCDRecord read_eocd_record() - in - { - assert( state == State.Init ); - } - body - { - //Stderr.formatln("read_eocd_record()"); - - // Signature + record + max. comment length - const max_chunk_len = 4 + EndOfCDRecord.Data.sizeof + ushort.max; - - auto file_len = seeker.seek(0, IConduit.Seek.Anchor.End); - - // We're going to need min(max_chunk_len, file_len) bytes. - long chunk_len = max_chunk_len; - if( file_len < max_chunk_len ) - chunk_len = file_len; - //Stderr.formatln(" . chunk_len = {}", chunk_len); - - // Seek back and read in the chunk. Don't forget to clean up after - // ourselves. - seeker.seek(-chunk_len, IConduit.Seek.Anchor.End); - auto chunk_offset = seeker.seek(0, IConduit.Seek.Anchor.Current); - //Stderr.formatln(" . chunk_offset = {}", chunk_offset); - auto chunk = new ubyte[chunk_len]; - scope(exit) delete chunk; - readExact(source, chunk); - - // Now look for our magic number. Don't forget that on big-endian - // machines, we need to byteswap the value we're looking for. - version( BigEndian ) - uint eocd_magic = swap(EndOfCDRecord.signature); - else - uint eocd_magic = EndOfCDRecord.signature; - - size_t eocd_loc = -1; - - for( size_t i=chunk_len-18; i>=0; --i ) - { - if( *(cast(uint*)(chunk.ptr+i)) == eocd_magic ) - { - // Found the bugger! Make sure we skip the signature (forgot - // to do that originally; talk about weird errors :P) - eocd_loc = i+4; - break; - } - } - - // If we didn't find it, then we'll assume that this is not a valid - // archive. - if( eocd_loc == -1 ) - ZipException.missingdir; - - // Ok, so we found it; now what? Now we need to read the record - // itself in. eocd_loc is the offset within the chunk where the eocd - // record was found, so slice it out. - EndOfCDRecord eocdr; - eocdr.fill(chunk[eocd_loc..$]); - - // Excellent. We're done here. - return eocdr; - } - - /* - * Opens the specified file for reading. If the raw argument passed is - * true, then the file is *not* decompressed. - */ - InputStream open_file(FileHeader header, bool raw) - { - // Check to make sure that we actually *can* open this file. - if( header.data.extract_version > MAX_EXTRACT_VERSION ) - ZipNotSupportedException.zipver(header.data.extract_version); - - if( header.data.general_flags & UNSUPPORTED_FLAGS ) - ZipNotSupportedException.flags; - - if( toMethod(header.data.compression_method) == Method.Unsupported ) - ZipNotSupportedException.method(header.data.compression_method); - - // Open a raw stream - InputStream stream = open_file_raw(header); - - // If that's all they wanted, pass it back. - if( raw ) - return stream; - - // Next up, wrap in an appropriate decompression stream - switch( toMethod(header.data.compression_method) ) - { - case Method.Store: - // Do nothing: \o/ - break; - - case Method.Deflate: - // Wrap in a zlib stream. -15 means to use a 32KB window, and - // not to look for the normal zlib header and trailer. - stream = new ZlibInput(stream, -15); - break; - - default: - assert(false); - } - - // We done, yo! - return stream; - } - - /* - * Opens a file's raw input stream. Basically, this returns a slice of - * the archive's input stream. - */ - InputStream open_file_raw(FileHeader header) - { - // Seek to and parse the local file header - seeker.seek(header.data.relative_offset_of_local_header, - IConduit.Seek.Anchor.Begin); - - { - uint sig; - readExact(source, (&sig)[0..1]); - version( BigEndian ) swap(sig); - if( sig != LocalFileHeader.signature ) - ZipException.badsig("local file header"); - } - - LocalFileHeader lheader; lheader.fill(source); - - if( !lheader.agrees_with(header) ) - ZipException.incons(header.file_name); - - // Ok; get a slice stream for the file - return new SliceSeekInputStream( - source, seeker.seek(0, IConduit.Seek.Anchor.Current), - header.data.compressed_size); - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// ZipBlockWriter - -/** - * The ZipBlockWriter class is used to create a Zip archive. It uses a - * writing iterator interface. - * - * Note that this class can only be used with output streams which can be - * freely seeked. - */ - -class ZipBlockWriter : ZipWriter -{ - /** - * Creates a ZipBlockWriter using the specified file on the local - * filesystem. - */ - this(char[] path) - { - this(FilePath(path)); - } - - /// ditto - this(PathView path) - { - file_output = new FileConduit(path, FileConduit.WriteCreate); - this(file_output); - } - - /** - * Creates a ZipBlockWriter using the provided OutputStream. Please note - * that this OutputStream must also implement the IConduit.Seek interface. - */ - this(OutputStream output) - in - { - assert( output !is null ); - assert( (cast(IConduit.Seek) output) !is null ); - } - body - { - this.output = output; - this.seeker = cast(IConduit.Seek) output; - - // Default to Deflate compression - method = Method.Deflate; - } - - /** - * Finalises the archive, writes out the central directory, and closes the - * output stream. - */ - void finish() - { - put_cd; - output.close(); - output = null; - seeker = null; - - if( file_output !is null ) delete file_output; - } - - /** - * Adds a file from the local filesystem to the archive. - */ - void putFile(ZipEntryInfo info, char[] path) - { - putFile(info, FilePath(path)); - } - - /// ditto - void putFile(ZipEntryInfo info, PathView path) - { - scope file = new FileConduit(path); - scope(exit) file.close(); - putStream(info, file); - } - - /** - * Adds a file using the contents of the given InputStream to the archive. - */ - void putStream(ZipEntryInfo info, InputStream source) - { - put_compressed(info, source); - } - - /** - * Transfers a file from another archive into this archive. Note that - * this method will not perform any compression: whatever compression was - * applied to the file originally will be preserved. - */ - void putEntry(ZipEntryInfo info, ZipEntry entry) - { - put_raw(info, entry); - } - - /** - * Adds a file using the contents of the given array to the archive. - */ - void putData(ZipEntryInfo info, void[] data) - { - //scope mc = new MemoryConduit(data); - scope mc = new Buffer(data); - scope(exit) mc.close; - put_compressed(info, mc); - } - - /** - * This property allows you to control what compression method should be - * used for files being added to the archive. - */ - Method method() { return _method; } - Method method(Method v) { return _method = v; } /// ditto - -private: - OutputStream output; - IConduit.Seek seeker; - FileConduit file_output; - - Method _method; - - struct Entry - { - FileHeaderData data; - long header_position; - char[] filename; - char[] comment; - ubyte[] extra; - } - Entry[] entries; - - void put_cd() - { - // check that there aren't too many CD entries - if( entries.length > ushort.max ) - ZipException.toomanyentries; - - auto cd_pos = seeker.seek(0, IConduit.Seek.Anchor.Current); - if( cd_pos > uint.max ) - ZipException.toolong; - - foreach( entry ; entries ) - { - FileHeader header; - header.data = &entry.data; - header.file_name = entry.filename; - header.extra_field = entry.extra; - header.file_comment = entry.comment; - - write(output, FileHeader.signature); - header.put(output); - } - - auto cd_len = seeker.seek(0, IConduit.Seek.Anchor.Current) - cd_pos; - - if( cd_len > uint.max ) - ZipException.cdtoolong; - - { - EndOfCDRecord eocdr; - eocdr.data.central_directory_entries_on_this_disk = - entries.length; - eocdr.data.central_directory_entries_total = entries.length; - eocdr.data.size_of_central_directory = cd_len; - eocdr.data.offset_of_start_of_cd_from_starting_disk = cd_pos; - - write(output, EndOfCDRecord.signature); - eocdr.put(output); - } - } - - void put_raw(ZipEntryInfo info, ZipEntry entry) - { - // Write out local file header - LocalFileHeader.Data lhdata; - auto chdata = entry.header.data; - lhdata.extract_version = chdata.extract_version; - lhdata.general_flags = chdata.general_flags; - lhdata.compression_method = chdata.compression_method; - lhdata.crc_32 = chdata.crc_32; - lhdata.compressed_size = chdata.compressed_size; - lhdata.uncompressed_size = chdata.uncompressed_size; - - timeToDos(info.modified, lhdata.modification_file_time, - lhdata.modification_file_date); - - put_local_header(lhdata, info.name); - - // Store comment - entries[$-1].comment = info.comment; - - // Output file contents - { - auto input = entry.open_raw; - scope(exit) input.close; - output.copy(input).flush(); - } - } - - void put_compressed(ZipEntryInfo info, InputStream source) - { - debug(Zip) Stderr.formatln("ZipBlockWriter.put_compressed()"); - - // Write out partial local file header - auto header_pos = seeker.seek(0, IConduit.Seek.Anchor.Current); - debug(Zip) Stderr.formatln(" . header for {} at {}", info.name, header_pos); - put_local_header(info, _method); - - // Store comment - entries[$-1].comment = info.comment; - - uint crc; - uint compressed_size; - uint uncompressed_size; - - // Output file contents - { - // Input/output chains - InputStream in_chain = source; - OutputStream out_chain = new WrapSeekOutputStream(output); - - // Count number of bytes coming in from the source file - scope in_counter = new CounterInput(in_chain); - in_chain = in_counter; - scope(success) uncompressed_size = in_counter.count; - - // Count the number of bytes going out to the archive - scope out_counter = new CounterOutput(out_chain); - out_chain = out_counter; - scope(success) compressed_size = out_counter.count; - - // Add crc - scope crc_d = new Crc32(/*CRC_MAGIC*/); - scope crc_s = new DigestInput(in_chain, crc_d); - in_chain = crc_s; - scope(success) - { - debug(Zip) Stderr.formatln(" . Success: storing CRC."); - crc = crc_d.crc32Digest; - } - - // Add compression - ZlibOutput compress; - scope(exit) if( compress !is null ) delete compress; - - switch( _method ) - { - case Method.Store: - break; - - case Method.Deflate: - compress = new ZlibOutput(out_chain, - ZlibOutput.Level.init, -15); - out_chain = compress; - break; - } - - // All done. - scope(exit) in_chain.close(); - scope(success) in_chain.clear(); - scope(exit) out_chain.close(); - - out_chain.copy(in_chain).flush; - - debug(Zip) if( compress !is null ) - { - Stderr.formatln(" . compressed to {} bytes", compress.written); - } - - debug(Zip) Stderr.formatln(" . wrote {} bytes", out_counter.count); - debug(Zip) Stderr.formatln(" . contents written"); - } - - debug(Zip) Stderr.formatln(" . CRC for \"{}\": 0x{:x8}", info.name, crc); - - // Rewind, and patch the header - auto final_pos = seeker.seek(0, IConduit.Seek.Anchor.Current); - seeker.seek(header_pos); - patch_local_header(crc, compressed_size, uncompressed_size); - - // Seek back to the end of the file, and we're done! - seeker.seek(final_pos); - } - - /* - * Patches the local file header starting at the current output location - * with updated crc and size information. Also updates the current last - * Entry. - */ - void patch_local_header(uint crc_32, uint compressed_size, - uint uncompressed_size) - { - /* BUG: For some reason, this code won't compile. No idea why... if - * you instantiate LFHD, it says that there is no "offsetof" property. - */ - /+ - alias LocalFileHeaderData LFHD; - static assert( LFHD.compressed_size.offsetof - == LFHD.crc_32.offsetof + 4 ); - static assert( LFHD.uncompressed_size.offsetof - == LFHD.compressed_size.offsetof + 4 ); - +/ - - // Don't forget we have to seek past the signature, too - // BUG: .offsetof is broken here - /+seeker.seek(LFHD.crc_32.offsetof+4, IConduit.Seek.Anchor.Current);+/ - seeker.seek(10+4, IConduit.Seek.Anchor.Current); - write(output, crc_32); - write(output, compressed_size); - write(output, uncompressed_size); - - with( entries[$-1] ) - { - data.crc_32 = crc_32; - data.compressed_size = compressed_size; - data.uncompressed_size = uncompressed_size; - } - } - - /* - * Generates and outputs a local file header from the given info block and - * compression method. Note that the crc_32, compressed_size and - * uncompressed_size header fields will be set to zero, and must be - * patched. - */ - void put_local_header(ZipEntryInfo info, Method method) - { - LocalFileHeader.Data data; - - data.compression_method = fromMethod(method); - timeToDos(info.modified, data.modification_file_time, - data.modification_file_date); - - put_local_header(data, info.name); - } - - /* - * Writes the given local file header data and filename out to the output - * stream. It also appends a new Entry with the data and filename. - */ - void put_local_header(LocalFileHeaderData data, - char[] file_name) - { - // Compute Zip version - if( data.extract_version == data.extract_version.max ) - { - ushort zipver = 10; - void minver(ushort v) { zipver = v>zipver ? v : zipver; } - - { - // Compression method - switch( data.compression_method ) - { - case 0: minver(10); break; - case 8: minver(20); break; - } - - // File is a folder - if( file_name.length > 0 && file_name[$-1] == '/' - || file_name[$-1] == '\\' ) - // Is a directory, not a real file - minver(20); - } - data.extract_version = zipver; - } - - /+// Encode filename - auto file_name_437 = utf8_to_cp437(file_name); - if( file_name_437 is null ) - ZipException.fnencode;+/ - - /+// Set up file name length - if( file_name_437.length > ushort.max ) - ZipException.fntoolong; - - data.file_name_length = file_name_437.length;+/ - - LocalFileHeader header; - header.data = data; - header.file_name = file_name; - - // Write out the header and the filename - auto header_pos = seeker.seek(0, IConduit.Seek.Anchor.Current); - - write(output, LocalFileHeader.signature); - header.put(output); - - // Save the header - Entry entry; - entry.data.fromLocal(header.data); - entry.filename = file_name; - entry.header_position = header_pos; - entry.data.relative_offset_of_local_header = header_pos; - entries ~= entry; - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// ZipEntry - -/** - * This class is used to represent a single entry in an archive. - * Specifically, it combines meta-data about the file (see the info field) - * along with the two basic operations on an entry: open and verify. - */ -class ZipEntry -{ - /** - * Header information on the file. See the ZipEntryInfo structure for - * more information. - */ - ZipEntryInfo info; - - /** - * Size (in bytes) of the file's uncompressed contents. - */ - uint size() - { - return header.data.uncompressed_size;; - } - - /** - * Opens a stream for reading from the file. The contents of this stream - * represent the decompressed contents of the file stored in the archive. - * - * You should not assume that the returned stream is seekable. - * - * Note that the returned stream may be safely closed without affecting - * the underlying archive stream. - * - * If the file has not yet been verified, then the stream will be checked - * as you read from it. When the stream is either exhausted or closed, - * then the integrity of the file's data will be checked. This means that - * if the file is corrupt, an exception will be thrown only after you have - * finished reading from the stream. If you wish to make sure the data is - * valid before you read from the file, call the verify method. - */ - InputStream open() - { - // If we haven't verified yet, wrap the stream in the appropriate - // decorators. - if( !verified ) - return new ZipEntryVerifier(this, open_dg(header, false)); - - else - return open_dg(header, false); - } - - /** - * Verifies the contents of this file by computing the CRC32 checksum, - * and comparing it against the stored one. Throws an exception if the - * checksums do not match. - * - * Not valid on streamed Zip archives. - */ - void verify() - { - // If we haven't verified the contents yet, just read everything in - // to trigger it. - scope s = open; - auto buffer = new ubyte[s.conduit.bufferSize]; - while( s.read(buffer) != s.Eof ) - {/*Do nothing*/} - s.close; - } - - /** - * Creates a new, independent copy of this instance. - */ - ZipEntry dup() - { - return new ZipEntry(header, open_dg); - } - -private: - /* - * Callback used to open the file. - */ - alias InputStream delegate(FileHeader, bool raw) open_dg_t; - open_dg_t open_dg; - - /* - * Raw ZIP header. - */ - FileHeader header; - - /* - * The flag used to keep track of whether the file's contents have been - * verified. - */ - bool verified = false; - - /* - * Opens a stream that does not perform any decompression or - * transformation of the file contents. This is used internally by - * ZipWriter to perform fast zip to zip transfers without having to - * decompress and then recompress the contents. - * - * Note that because zip stores CRCs for the *uncompressed* data, this - * method currently does not do any verification. - */ - InputStream open_raw() - { - return open_dg(header, true); - } - - /* - * Creates a new ZipEntry from the FileHeader. - */ - this(FileHeader header, open_dg_t open_dg) - { - this.reset(header, open_dg); - } - - /* - * Resets the current instance with new values. - */ - ZipEntry reset(FileHeader header, open_dg_t open_dg) - { - this.header = header; - this.open_dg = open_dg; - with( info ) - { - name = header.file_name.dup; - dosToTime(header.data.modification_file_time, - header.data.modification_file_date, - modified); - comment = header.file_comment.dup; - } - - this.verified = false; - - return this; - } -} - -/** - * This structure contains various pieces of meta-data on a file. The - * contents of this structure may be safely mutated. - * - * This structure is also used to specify meta-data about a file when adding - * it to an archive. - */ -struct ZipEntryInfo -{ - /// Full path and file name of this file. - char[] name; - /// Modification timestamp. If this is left uninitialised when passed to - /// a ZipWriter, it will be reset to the current system time. - Time modified = Time.min; - /// Comment on the file. - char[] comment; -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Exceptions -// - -import tango.core.Exception : TracedException; - -/** - * This is the base class from which all exceptions generated by this module - * derive from. - */ -class ZipException : TracedException -{ - this(char[] msg) { super(msg); } - -private: - alias typeof(this) thisT; - static void opCall(char[] msg) { throw new ZipException(msg); } - - static void badsig() - { - thisT("corrupt signature or unexpected section found"); - } - - static void badsig(char[] type) - { - thisT("corrupt "~type~" signature or unexpected section found"); - } - - static void incons(char[] name) - { - thisT("inconsistent headers for file \""~name~"\"; " - "archive is likely corrupted"); - } - - static void missingdir() - { - thisT("could not locate central archive directory; " - "file is corrupt or possibly not a Zip archive"); - } - - static void toomanyentries() - { - thisT("too many archive entries"); - } - - static void toolong() - { - thisT("archive is too long; limited to 4GB total"); - } - - static void cdtoolong() - { - thisT("central directory is too long; limited to 4GB total"); - } - - static void fntoolong() - { - thisT("file name too long; limited to 65,535 characters"); - } - - static void eftoolong() - { - thisT("extra field too long; limited to 65,535 characters"); - } - - static void cotoolong() - { - thisT("extra field too long; limited to 65,535 characters"); - } - - static void fnencode() - { - thisT("could not encode filename into codepage 437"); - } - - static void coencode() - { - thisT("could not encode comment into codepage 437"); - } - - static void tooold() - { - thisT("cannot represent dates before January 1, 1980"); - } -} - -/** - * This exception is thrown if a ZipReader detects that a file's contents do - * not match the stored checksum. - */ -class ZipChecksumException : ZipException -{ - this(char[] name) - { - super("checksum failed on zip entry \""~name~"\""); - } - -private: - static void opCall(char[] name) { throw new ZipChecksumException(name); } -} - -/** - * This exception is thrown if you call get reader method when there are no - * more files in the archive. - */ -class ZipExhaustedException : ZipException -{ - this() { super("no more entries in archive"); } - -private: - static void opCall() { throw new ZipExhaustedException; } -} - -/** - * This exception is thrown if you attempt to read an archive that uses - * features not supported by the reader. - */ -class ZipNotSupportedException : ZipException -{ - this(char[] msg) { super(msg); } - -private: - alias ZipNotSupportedException thisT; - - static void opCall(char[] msg) - { - throw new thisT(msg ~ " not supported"); - } - - static void spanned() - { - thisT("split and multi-disk archives"); - } - - static void zipver(ushort ver) - { - throw new thisT("zip format version " - ~Integer.toString(ver / 10) - ~"." - ~Integer.toString(ver % 10) - ~" not supported; maximum of version " - ~Integer.toString(MAX_EXTRACT_VERSION / 10) - ~"." - ~Integer.toString(MAX_EXTRACT_VERSION % 10) - ~" supported."); - } - - static void flags() - { - throw new thisT("unknown or unsupported file flags enabled"); - } - - static void method(ushort m) - { - // Cheat here and work out what the method *actually* is - char[] ms; - switch( m ) - { - case 0: - case 8: assert(false); // supported - - case 1: ms = "Shrink"; break; - case 2: ms = "Reduce (factor 1)"; break; - case 3: ms = "Reduce (factor 2)"; break; - case 4: ms = "Reduce (factor 3)"; break; - case 5: ms = "Reduce (factor 4)"; break; - case 6: ms = "Implode"; break; - - case 9: ms = "Deflate64"; break; - case 10: ms = "TERSE (old)"; break; - - case 12: ms = "Bzip2"; break; - case 14: ms = "LZMA"; break; - - case 18: ms = "TERSE (new)"; break; - case 19: ms = "LZ77"; break; - - case 97: ms = "WavPack"; break; - case 98: ms = "PPMd"; break; - - default: ms = "unknown"; - } - - thisT(ms ~ " compression method"); - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Convenience methods - -void createArchive(char[] archive, Method method, char[][] files...) -{ - scope zw = new ZipBlockWriter(archive); - zw.method = method; - - foreach( file ; files ) - zw.putFile(ZipEntryInfo(file), file); - - zw.finish; -} - -void createArchive(PathView archive, Method method, PathView[] files...) -{ - scope zw = new ZipBlockWriter(archive); - zw.method = method; - - foreach( file ; files ) - zw.putFile(ZipEntryInfo(file.toString), file); - - zw.finish; -} - -void extractArchive(char[] archive, char[] folder) -{ - extractArchive(FilePath(archive), FilePath(folder)); -} - -void extractArchive(PathView archive, PathView dest) -{ - scope folder = FilePath(dest.toString); - scope zr = new ZipBlockReader(archive); - - foreach( entry ; zr ) - { - // Skip directories - if( entry.info.name[$-1] == '/' ) continue; - - auto path = folder.dup.append(entry.info.name); - scope fout = new FileConduit(path, FileConduit.WriteCreate); - fout.output.copy(entry.open); - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Private implementation stuff -// - -private: - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Verification stuff - -/* - * This class wraps an input stream, and computes the CRC as it passes - * through. On the event of either a close or EOF, it checks the CRC against - * the one in the provided ZipEntry. If they don't match, it throws an - * exception. - */ - -class ZipEntryVerifier : InputStream -{ - this(ZipEntry entry, InputStream source) - in - { - assert( entry !is null ); - assert( source !is null ); - } - body - { - this.entry = entry; - this.digest = new Crc32; - this.source = new DigestInput(source, digest); - } - - IConduit conduit() - { - return source.conduit; - } - - void close() - { - check; - - this.source.close; - this.entry = null; - this.digest = null; - this.source = null; - } - - uint read(void[] dst) - { - auto bytes = source.read(dst); - if( bytes == IConduit.Eof ) - check; - return bytes; - } - - InputStream clear() - { - this.source.clear; - return this; - } - -private: - Crc32 digest; - InputStream source; - ZipEntry entry; - - void check() - { - if( digest is null ) return; - - auto crc = digest.crc32Digest; - delete digest; - - if( crc != entry.header.data.crc_32 ) - ZipChecksumException(entry.info.name); - - else - entry.verified = true; - } -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// IO functions - -/* - * Really, seriously, read some bytes without having to go through a sodding - * buffer. - */ -void readExact(InputStream s, void[] dst) -{ - //Stderr.formatln("readExact(s, [0..{}])", dst.length); - while( dst.length > 0 ) - { - auto octets = s.read(dst); - //Stderr.formatln(" . octets = {}", octets); - if( octets == -1 ) // Beware the dangers of MAGICAL THINKING - throw new Exception("unexpected end of stream"); - dst = dst[octets..$]; - } -} - -/* - * Really, seriously, write some bytes. - */ -void writeExact(OutputStream s, void[] src) -{ - while( src.length > 0 ) - { - auto octets = s.write(src); - if( octets == -1 ) - throw new Exception("unexpected end of stream"); - src = src[octets..$]; - } -} - -void write(T)(OutputStream s, T value) -{ - version( BigEndian ) swap(value); - writeExact(s, (&value)[0..1]); -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Endian garbage - -void swapAll(T)(inout T data) -{ - static if( is(typeof(T.record_fields)) ) - const fields = T.record_fields; - else - const fields = data.tupleof.length; - - foreach( i,_ ; data.tupleof ) - { - if( i == fields ) break; - swap(data.tupleof[i]); - } -} - -void swap(T)(inout T data) -{ - static if( T.sizeof == 1 ) - {} - else static if( T.sizeof == 2 ) - ByteSwap.swap16(&data, 2); - else static if( T.sizeof == 4 ) - ByteSwap.swap32(&data, 4); - else static if( T.sizeof == 8 ) - ByteSwap.swap64(&data, 8); - else static if( T.sizeof == 10 ) - ByteSwap.swap80(&data, 10); - else - static assert(false, "Can't swap "~T.stringof~"s."); -} - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// IBM Code Page 437 stuff -// - -const char[][] cp437_to_utf8_map_low = [ - "\u0000"[], "\u263a", "\u263b", "\u2665", - "\u2666", "\u2663", "\u2660", "\u2022", - "\u25d8", "\u25cb", "\u25d9", "\u2642", - "\u2640", "\u266a", "\u266b", "\u263c", - - "\u25b6", "\u25c0", "\u2195", "\u203c", - "\u00b6", "\u00a7", "\u25ac", "\u21a8", - "\u2191", "\u2193", "\u2192", "\u2190", - "\u221f", "\u2194", "\u25b2", "\u25bc" -]; - -const char[][] cp437_to_utf8_map_high = [ - "\u00c7"[], "\u00fc", "\u00e9", "\u00e2", - "\u00e4", "\u00e0", "\u00e5", "\u00e7", - "\u00ea", "\u00eb", "\u00e8", "\u00ef", - "\u00ee", "\u00ec", "\u00c4", "\u00c5", - - "\u00c9", "\u00e6", "\u00c6", "\u00f4", - "\u00f6", "\u00f2", "\u00fb", "\u00f9", - "\u00ff", "\u00d6", "\u00dc", "\u00f8", - "\u00a3", "\u00a5", "\u20a7", "\u0192", - - "\u00e1", "\u00ed", "\u00f3", "\u00fa", - "\u00f1", "\u00d1", "\u00aa", "\u00ba", - "\u00bf", "\u2310", "\u00ac", "\u00bd", - "\u00bc", "\u00a1", "\u00ab", "\u00bb", - - "\u2591", "\u2592", "\u2593", "\u2502", - "\u2524", "\u2561", "\u2562", "\u2556", - "\u2555", "\u2563", "\u2551", "\u2557", - "\u255d", "\u255c", "\u255b", "\u2510", - - "\u2514", "\u2534", "\u252c", "\u251c", - "\u2500", "\u253c", "\u255e", "\u255f", - "\u255a", "\u2554", "\u2569", "\u2566", - "\u2560", "\u2550", "\u256c", "\u2567", - - "\u2568", "\u2564", "\u2565", "\u2559", - "\u2558", "\u2552", "\u2553", "\u256b", - "\u256a", "\u2518", "\u250c", "\u2588", - "\u2584", "\u258c", "\u2590", "\u2580", - "\u03b1", "\u00df", "\u0393", "\u03c0", - "\u03a3", "\u03c3", "\u00b5", "\u03c4", - "\u03a6", "\u0398", "\u03a9", "\u03b4", - "\u221e", "\u03c6", "\u03b5", "\u2229", - - "\u2261", "\u00b1", "\u2265", "\u2264", - "\u2320", "\u2321", "\u00f7", "\u2248", - "\u00b0", "\u2219", "\u00b7", "\u221a", - "\u207f", "\u00b2", "\u25a0", "\u00a0" -]; - -char[] cp437_to_utf8(ubyte[] s) -{ - foreach( i,c ; s ) - { - if( (1 <= c && c <= 31) || c >= 127 ) - { - /* Damn; we got a character not in ASCII. Since this is the first - * non-ASCII character we found, copy everything up to this point - * into the output verbatim. We'll allocate twice as much space - * as there are remaining characters to ensure we don't need to do - * any further allocations. - */ - auto r = new char[i+2*(s.length-i)]; - r[0..i] = cast(char[]) s[0..i]; - size_t k=i; // current length - - // We insert new characters at r[i+j+k] - - foreach( d ; s[i..$] ) - { - if( 32 <= d && d <= 126 || d == 0 ) - { - r[k++] = d; - } - else if( 1 <= d && d <= 31 ) - { - char[] repl = cp437_to_utf8_map_low[d]; - r[k..k+repl.length] = repl[]; - k += repl.length; - } - else if( d == 127 ) - { - char[] repl = "\u2302"; - r[k..k+repl.length] = repl[]; - k += repl.length; - } - else if( d > 127 ) - { - char[] repl = cp437_to_utf8_map_high[d-128]; - r[k..k+repl.length] = repl[]; - k += repl.length; - } - else - assert(false); - } - - return r[0..k]; - } - } - - /* If we got here, then all the characters in s are also in ASCII, which - * means it's also valid UTF-8; return the string unmodified. - */ - return cast(char[]) s; -} - -debug( UnitTest ) -{ - unittest - { - char[] c(char[] s) { return cp437_to_utf8(cast(ubyte[]) s); } - - auto s = c("Hi there \x01 old \x0c!"); - assert( s == "Hi there \u263a old \u2640!", "\""~s~"\"" ); - s = c("Marker \x7f and divide \xf6."); - assert( s == "Marker \u2302 and divide \u00f7.", "\""~s~"\"" ); - } -} - -const char[dchar] utf8_to_cp437_map; - -static this() -{ - utf8_to_cp437_map = [ - '\u0000': '\x00', '\u263a': '\x01', '\u263b': '\x02', '\u2665': '\x03', - '\u2666': '\x04', '\u2663': '\x05', '\u2660': '\x06', '\u2022': '\x07', - '\u25d8': '\x08', '\u25cb': '\x09', '\u25d9': '\x0a', '\u2642': '\x0b', - '\u2640': '\x0c', '\u266a': '\x0d', '\u266b': '\x0e', '\u263c': '\x0f', - - '\u25b6': '\x10', '\u25c0': '\x11', '\u2195': '\x12', '\u203c': '\x13', - '\u00b6': '\x14', '\u00a7': '\x15', '\u25ac': '\x16', '\u21a8': '\x17', - '\u2191': '\x18', '\u2193': '\x19', '\u2192': '\x1a', '\u2190': '\x1b', - '\u221f': '\x1c', '\u2194': '\x1d', '\u25b2': '\x1e', '\u25bc': '\x1f', - - /* - * Printable ASCII range (well, most of it) is handled specially. - */ - - '\u00c7': '\x80', '\u00fc': '\x81', '\u00e9': '\x82', '\u00e2': '\x83', - '\u00e4': '\x84', '\u00e0': '\x85', '\u00e5': '\x86', '\u00e7': '\x87', - '\u00ea': '\x88', '\u00eb': '\x89', '\u00e8': '\x8a', '\u00ef': '\x8b', - '\u00ee': '\x8c', '\u00ec': '\x8d', '\u00c4': '\x8e', '\u00c5': '\x8f', - - '\u00c9': '\x90', '\u00e6': '\x91', '\u00c6': '\x92', '\u00f4': '\x93', - '\u00f6': '\x94', '\u00f2': '\x95', '\u00fb': '\x96', '\u00f9': '\x97', - '\u00ff': '\x98', '\u00d6': '\x99', '\u00dc': '\x9a', '\u00f8': '\x9b', - '\u00a3': '\x9c', '\u00a5': '\x9d', '\u20a7': '\x9e', '\u0192': '\x9f', - - '\u00e1': '\xa0', '\u00ed': '\xa1', '\u00f3': '\xa2', '\u00fa': '\xa3', - '\u00f1': '\xa4', '\u00d1': '\xa5', '\u00aa': '\xa6', '\u00ba': '\xa7', - '\u00bf': '\xa8', '\u2310': '\xa9', '\u00ac': '\xaa', '\u00bd': '\xab', - '\u00bc': '\xac', '\u00a1': '\xad', '\u00ab': '\xae', '\u00bb': '\xaf', - - '\u2591': '\xb0', '\u2592': '\xb1', '\u2593': '\xb2', '\u2502': '\xb3', - '\u2524': '\xb4', '\u2561': '\xb5', '\u2562': '\xb6', '\u2556': '\xb7', - '\u2555': '\xb8', '\u2563': '\xb9', '\u2551': '\xba', '\u2557': '\xbb', - '\u255d': '\xbc', '\u255c': '\xbd', '\u255b': '\xbe', '\u2510': '\xbf', - - '\u2514': '\xc0', '\u2534': '\xc1', '\u252c': '\xc2', '\u251c': '\xc3', - '\u2500': '\xc4', '\u253c': '\xc5', '\u255e': '\xc6', '\u255f': '\xc7', - '\u255a': '\xc8', '\u2554': '\xc9', '\u2569': '\xca', '\u2566': '\xcb', - '\u2560': '\xcc', '\u2550': '\xcd', '\u256c': '\xce', '\u2567': '\xcf', - - '\u2568': '\xd0', '\u2564': '\xd1', '\u2565': '\xd2', '\u2559': '\xd3', - '\u2558': '\xd4', '\u2552': '\xd5', '\u2553': '\xd6', '\u256b': '\xd7', - '\u256a': '\xd8', '\u2518': '\xd9', '\u250c': '\xda', '\u2588': '\xdb', - '\u2584': '\xdc', '\u258c': '\xdd', '\u2590': '\xde', '\u2580': '\xdf', - - '\u03b1': '\xe0', '\u00df': '\xe1', '\u0393': '\xe2', '\u03c0': '\xe3', - '\u03a3': '\xe4', '\u03c3': '\xe5', '\u00b5': '\xe6', '\u03c4': '\xe7', - '\u03a6': '\xe8', '\u0398': '\xe9', '\u03a9': '\xea', '\u03b4': '\xeb', - '\u221e': '\xec', '\u03c6': '\xed', '\u03b5': '\xee', '\u2229': '\xef', - - '\u2261': '\xf0', '\u00b1': '\xf1', '\u2265': '\xf2', '\u2264': '\xf3', - '\u2320': '\xf4', '\u2321': '\xf5', '\u00f7': '\xf6', '\u2248': '\xf7', - '\u00b0': '\xf8', '\u2219': '\xf9', '\u00b7': '\xfa', '\u221a': '\xfb', - '\u207f': '\xfc', '\u00b2': '\xfd', '\u25a0': '\xfe', '\u00a0': '\xff' - ]; -} - -ubyte[] utf8_to_cp437(char[] s) -{ - foreach( i,dchar c ; s ) - { - if( !((32 <= c && c <= 126) || c == 0) ) - { - /* We got a character not in CP 437: we need to create a buffer to - * hold the new string. Since UTF-8 is *always* larger than CP - * 437, we need, at most, an array of the same number of elements. - */ - auto r = new ubyte[s.length]; - r[0..i] = cast(ubyte[]) s[0..i]; - size_t k=i; - - foreach( dchar d ; s[i..$] ) - { - if( 32 <= d && d <= 126 || d == 0 ) - r[k++] = d; - - else if( d == '\u2302' ) - r[k++] = '\x7f'; - - else if( auto e_ptr = d in utf8_to_cp437_map ) - r[k++] = *e_ptr; - - else - { - throw new Exception("cannot encode character \"" - ~ Integer.toString(cast(uint)d) - ~ "\" in codepage 437."); - } - } - - return r[0..k]; - } - } - - // If we got here, then the entire string is printable ASCII, which just - // happens to *also* be valid CP 437! Huzzah! - return cast(ubyte[]) s; -} - -debug( UnitTest ) -{ - unittest - { - alias cp437_to_utf8 x; - alias utf8_to_cp437 y; - - ubyte[256] s; - foreach( i,ref c ; s ) - c = i; - - auto a = x(s); - auto b = y(a); - if(!( b == s )) - { - // Display list of characters that failed to convert as expected, - // and what value we got. - auto hex = "0123456789abcdef"; - auto msg = "".dup; - foreach( i,ch ; b ) - { - if( ch != i ) - { - msg ~= hex[i>>4]; - msg ~= hex[i&15]; - msg ~= " ("; - msg ~= hex[ch>>4]; - msg ~= hex[ch&15]; - msg ~= "), "; - } - } - msg ~= "failed."; - - assert( false, msg ); - } - } -} - -/* - * This is here to simplify the code elsewhere. - */ -char[] utf8_to_utf8(ubyte[] s) { return cast(char[]) s; } -ubyte[] utf8_to_utf8(char[] s) { return cast(ubyte[]) s; } - -////////////////////////////////////////////////////////////////////////////// -////////////////////////////////////////////////////////////////////////////// -// -// Date/time stuff - -void dosToTime(ushort dostime, ushort dosdate, out Time time) -{ - uint sec, min, hour, day, mon, year; - sec = (dostime & 0b00000_000000_11111) * 2; - min = (dostime & 0b00000_111111_00000) >> 5; - hour= (dostime & 0b11111_000000_00000) >> 11; - day = (dosdate & 0b0000000_0000_11111); - mon = (dosdate & 0b0000000_1111_00000) >> 5; - year=((dosdate & 0b1111111_0000_00000) >> 9) + 1980; - - // This code sucks. - scope cal = new Gregorian; - time = Time.epoch - + TimeSpan.days(cal.getDaysInYear(year, 0)) - + TimeSpan.days(cal.getDaysInMonth(year, mon, 0)) - + TimeSpan.days(day) - + TimeSpan.hours(hour) - + TimeSpan.minutes(min) - + TimeSpan.seconds(sec); -} - -void timeToDos(Time time, out ushort dostime, out ushort dosdate) -{ - // Treat Time.min specially - if( time == Time.min ) - time = WallClock.now; - - // *muttering angrily* - scope cal = new Gregorian; - - if( cal.getYear(time) < 1980 ) - ZipException.tooold; - - auto span = time.span; - dostime = - (span.seconds / 2) - | (span.minutes << 5) - | (span.hours << 11); - - dosdate = - (cal.getDayOfMonth(time)) - | (cal.getMonth(time) << 5) - |((cal.getYear(time) - 1980) << 9); -} - -// ************************************************************************** // -// ************************************************************************** // -// ************************************************************************** // - -// Dependencies -private: - -import tango.io.Conduit : Conduit; - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.CounterStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * The counter stream classes are used to keep track of how many bytes flow - * through a stream. - * - * To use them, simply wrap it around an existing stream. The number of bytes - * that have flowed through the wrapped stream may be accessed using the - * count member. - */ -class CounterInput : InputStream -{ - /// - this(InputStream input) - in - { - assert( input !is null ); - } - body - { - this.input = input; - } - - override IConduit conduit() - { - return input.conduit; - } - - override void close() - { - input.close(); - input = null; - } - - override uint read(void[] dst) - { - auto read = input.read(dst); - if( read != IConduit.Eof ) - _count += read; - return read; - } - - override InputStream clear() - { - input.clear(); - return this; - } - - /// - long count() { return _count; } - -private: - InputStream input; - long _count; -} - -/// ditto -class CounterOutput : OutputStream -{ - /// - this(OutputStream output) - in - { - assert( output !is null ); - } - body - { - this.output = output; - } - - override IConduit conduit() - { - return output.conduit; - } - - override void close() - { - output.close(); - output = null; - } - - override uint write(void[] dst) - { - auto wrote = output.write(dst); - if( wrote != IConduit.Eof ) - _count += wrote; - return wrote; - } - - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - - override OutputStream flush() - { - output.flush(); - return this; - } - - /// - long count() { return _count; } - -private: - OutputStream output; - long _count; -} - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.SliceStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * This stream can be used to provide stream-based access to a subset of - * another stream. It is akin to slicing an array. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class SliceSeekInputStream : InputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new slice stream from the given source, covering the content - * starting at position begin, for length bytes. - */ - this(InputStream source, long begin, long length) - in - { - assert( source !is null ); - assert( (cast(IConduit.Seek) source) !is null ); - assert( begin >= 0 ); - assert( length >= 0 ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this.begin = begin; - this.length = length; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - override uint read(void[] dst) - { - // If we're at the end of the slice, return eof - if( _position >= length ) - return IConduit.Eof; - - // Otherwise, make sure we don't try to read past the end of the slice - if( _position+dst.length > length ) - dst.length = length-_position; - - // Seek source stream to the appropriate location. - if( seeker.seek(0, Anchor.Current) != begin+_position ) - seeker.seek(begin+_position, Anchor.Begin); - - // Do the read - auto read = source.read(dst); - if( read == IConduit.Eof ) - // If we got an Eof, we'll consider that a bug for the moment. - // TODO: proper exception - throw new Exception("unexpected end-of-stream"); - - _position += read; - return read; - } - - override InputStream clear() - { - source.clear(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - switch( anchor ) - { - case Anchor.Begin: - _position = offset; - break; - - case Anchor.Current: - _position += offset; - if( _position < 0 ) _position = 0; - break; - - case Anchor.End: - _position = length+offset; - if( _position < 0 ) _position = 0; - break; - } - - return _position; - } - -private: - InputStream source; - IConduit.Seek seeker; - - long _position, begin, length; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( begin >= 0 ); - assert( length >= 0 ); - assert( _position >= 0 ); - } -} - -/** - * This stream can be used to provide stream-based access to a subset of - * another stream. It is akin to slicing an array. - */ -class SliceInputStream : InputStream -{ - /** - * Create a new slice stream from the given source, covering the content - * starting at the current seek position for length bytes. - */ - this(InputStream source, long length) - in - { - assert( source !is null ); - assert( length >= 0 ); - } - body - { - this.source = source; - this._length = length; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - } - - override uint read(void[] dst) - { - // If we're at the end of the slice, return eof - if( _length <= 0 ) - return IConduit.Eof; - - // Otherwise, make sure we don't try to read past the end of the slice - if( dst.length > _length ) - dst.length = _length; - - // Do the read - auto read = source.read(dst); - if( read == IConduit.Eof ) - // If we got an Eof, we'll consider that a bug for the moment. - // TODO: proper exception - throw new Exception("unexpected end-of-stream"); - - _length -= read; - return read; - } - - override InputStream clear() - { - source.clear(); - return this; - } - -private: - InputStream source; - long _length; - - invariant - { - if( _length > 0 ) assert( source !is null ); - } -} - -/** - * This stream can be used to provide stream-based access to a subset of - * another stream. It is akin to slicing an array. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class SliceSeekOutputStream : OutputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new slice stream from the given source, covering the content - * starting at position begin, for length bytes. - */ - this(OutputStream source, long begin, long length) - in - { - assert( (cast(IConduit.Seek) source) !is null ); - assert( begin >= 0 ); - assert( length >= 0 ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this.begin = begin; - this.length = length; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - uint write(void[] src) - { - // If we're at the end of the slice, return eof - if( _position >= length ) - return IConduit.Eof; - - // Otherwise, make sure we don't try to write past the end of the - // slice - if( _position+src.length > length ) - src.length = length-_position; - - // Seek source stream to the appropriate location. - if( seeker.seek(0, Anchor.Current) != begin+_position ) - seeker.seek(begin+_position, Anchor.Begin); - - // Do the write - auto wrote = source.write(src); - if( wrote == IConduit.Eof ) - // If we got an Eof, we'll consider that a bug for the moment. - // TODO: proper exception - throw new Exception("unexpected end-of-stream"); - - _position += wrote; - return wrote; - } - - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - - override OutputStream flush() - { - source.flush(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - switch( anchor ) - { - case Anchor.Begin: - _position = offset; - break; - - case Anchor.Current: - _position += offset; - if( _position < 0 ) _position = 0; - break; - - case Anchor.End: - _position = length+offset; - if( _position < 0 ) _position = 0; - break; - } - - return _position; - } - -private: - OutputStream source; - IConduit.Seek seeker; - - long _position, begin, length; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( begin >= 0 ); - assert( length >= 0 ); - assert( _position >= 0 ); - } -} - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.WrapStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * This stream can be used to provide access to another stream. - * Its distinguishing feature is that users cannot close the underlying - * stream. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class WrapSeekInputStream : InputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new wrap stream from the given source. - */ - this(InputStream source) - in - { - assert( source !is null ); - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this._position = seeker.seek(0, Anchor.Current); - } - - /// ditto - this(InputStream source, long position) - in - { - assert( position >= 0 ); - } - body - { - this(source); - this._position = position; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - override uint read(void[] dst) - { - if( seeker.seek(0, Anchor.Current) != _position ) - seeker.seek(_position, Anchor.Begin); - - auto read = source.read(dst); - if( read != IConduit.Eof ) - _position += read; - - return read; - } - - override InputStream clear() - { - source.clear(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - seeker.seek(_position, Anchor.Begin); - return (_position = seeker.seek(offset, anchor)); - } - -private: - InputStream source; - IConduit.Seek seeker; - long _position; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( _position >= 0 ); - } -} - -/** - * This stream can be used to provide access to another stream. - * Its distinguishing feature is that the users cannot close the underlying - * stream. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class WrapSeekOutputStream : OutputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new wrap stream from the given source. - */ - this(OutputStream source) - in - { - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this._position = seeker.seek(0, Anchor.Current); - } - - /// ditto - this(OutputStream source, long position) - in - { - assert( position >= 0 ); - } - body - { - this(source); - this._position = position; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - uint write(void[] src) - { - if( seeker.seek(0, Anchor.Current) != _position ) - seeker.seek(_position, Anchor.Begin); - - auto wrote = source.write(src); - if( wrote != IConduit.Eof ) - _position += wrote; - return wrote; - } - - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - - override OutputStream flush() - { - source.flush(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - seeker.seek(_position, Anchor.Begin); - return (_position = seeker.seek(offset, anchor)); - } - -private: - OutputStream source; - IConduit.Seek seeker; - long _position; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( _position >= 0 ); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/compress/BzipStream.d --- a/tango/tango/io/compress/BzipStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,520 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (C) 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Initial release: July 2007 - - author: Daniel Keep - -*******************************************************************************/ - -module tango.io.compress.BzipStream; - -private import tango.io.compress.c.bzlib; - -private import tango.core.Exception : IOException; - -private import tango.io.Conduit : InputFilter, OutputFilter; - -private import tango.io.model.IConduit : InputStream, OutputStream, IConduit; - -private -{ - /* This constant controls the size of the input/output buffers we use - * internally. There's no particular reason to pick this size. It might - * be an idea to run some benchmarks to work out what a good number is. - */ - const BUFFER_SIZE = 4*1024; - - const DEFAULT_BLOCKSIZE = 9; - const DEFAULT_WORKFACTOR = 0; -} - -/******************************************************************************* - - This output filter can be used to perform compression of data into a bzip2 - stream. - -*******************************************************************************/ - -class BzipOutput : OutputFilter -{ - /*************************************************************************** - - This enumeration represents several pre-defined compression block - sizes, measured in hundreds of kilobytes. See the documentation for - the BzipOutput class' constructor for more details. - - ***************************************************************************/ - - enum BlockSize : int - { - Normal = 9, - Fast = 1, - Best = 9, - } - - private - { - bool bzs_valid = false; - bz_stream bzs; - ubyte[] out_chunk; - size_t _written = 0; - } - - /*************************************************************************** - - Constructs a new bzip2 compression filter. You need to pass in the - stream that the compression filter will write to. If you are using - this filter with a conduit, the idiom to use is: - - --- - auto output = new BzipOutput(myConduit.output); - output.write(myContent); - --- - - blockSize relates to the size of the window bzip2 uses when - compressing data and determines how much memory is required to - decompress a stream. It is measured in hundreds of kilobytes. - - ccording to the bzip2 documentation, there is no dramatic difference - between the various block sizes, so the default should suffice in most - cases. - - BlockSize.Normal (the default) is the same as BlockSize.Best - (or 9). The blockSize may be any integer between 1 and 9 inclusive. - - ***************************************************************************/ - - this(OutputStream stream, int blockSize = BlockSize.Normal) - { - if( blockSize < 1 || blockSize > 9 ) - throw new BzipException("bzip2 block size must be between" - " 1 and 9"); - - super(stream); - out_chunk = new ubyte[BUFFER_SIZE]; - - auto ret = BZ2_bzCompressInit(&bzs, blockSize, 0, DEFAULT_WORKFACTOR); - if( ret != BZ_OK ) - throw new BzipException(ret); - - bzs_valid = true; - } - - ~this() - { - if( bzs_valid ) - kill_bzs(); - } - - /*************************************************************************** - - Compresses the given data to the underlying conduit. - - Returns the number of bytes from src that were compressed, which may - be less than given. - - ***************************************************************************/ - - uint write(void[] src) - { - check_valid(); - scope(failure) kill_bzs(); - - bzs.avail_in = src.length; - bzs.next_in = cast(ubyte*)src.ptr; - - do - { - bzs.avail_out = out_chunk.length; - bzs.next_out = out_chunk.ptr; - - auto ret = BZ2_bzCompress(&bzs, BZ_RUN); - if( ret != BZ_RUN_OK ) - throw new BzipException(ret); - - // Push the compressed bytes out to the stream, until it's either - // written them all, or choked. - auto have = out_chunk.length-bzs.avail_out; - auto out_buffer = out_chunk[0..have]; - do - { - auto w = host.write(out_buffer); - if( w == IConduit.Eof ) - return w; - - out_buffer = out_buffer[w..$]; - _written += w; - } - while( out_buffer.length > 0 ); - } - // Loop while we are still using up the whole output buffer - while( bzs.avail_out == 0 ); - - assert( bzs.avail_in == 0, "failed to compress all provided data" ); - - return src.length; - } - - /*************************************************************************** - - This read-only property returns the number of compressed bytes that - have been written to the underlying stream. Following a call to - either close or commit, this will contain the total compressed size of - the input data stream. - - ***************************************************************************/ - - size_t written() - { - return _written; - } - - /*************************************************************************** - - commit the output - - ***************************************************************************/ - - void close() - { - if( bzs_valid ) commit; - super.close; - } - - /*************************************************************************** - - Purge any buffered content. Calling this will implicitly end the - bzip2 stream, so it should not be called until you are finished - compressing data. Any calls to either write or commit after a - compression filter has been committed will throw an exception. - - ***************************************************************************/ - - void commit() - { - check_valid(); - scope(failure) kill_bzs(); - - bzs.avail_in = 0; - bzs.next_in = null; - - bool finished = false; - - do - { - bzs.avail_out = out_chunk.length; - bzs.next_out = out_chunk.ptr; - - auto ret = BZ2_bzCompress(&bzs, BZ_FINISH); - switch( ret ) - { - case BZ_FINISH_OK: - break; - - case BZ_STREAM_END: - finished = true; - break; - - default: - throw new BzipException(ret); - } - - auto have = out_chunk.length - bzs.avail_out; - auto out_buffer = out_chunk[0..have]; - if( have > 0 ) - { - do - { - auto w = host.write(out_buffer); - if( w == IConduit.Eof ) - return w; - - out_buffer = out_buffer[w..$]; - _written += w; - } - while( out_buffer.length > 0 ); - } - } - while( !finished ); - - kill_bzs(); - } - - // This function kills the stream: it deallocates the internal state, and - // unsets the bzs_valid flag. - private void kill_bzs() - { - check_valid(); - - BZ2_bzCompressEnd(&bzs); - bzs_valid = false; - } - - // Asserts that the stream is still valid and usable (except that this - // check doesn't get elided with -release). - private void check_valid() - { - if( !bzs_valid ) - throw new BzipClosedException; - } -} - -/******************************************************************************* - - This input filter can be used to perform decompression of bzip2 streams. - -*******************************************************************************/ - -class BzipInput : InputFilter -{ - private - { - bool bzs_valid = false; - bz_stream bzs; - ubyte[] in_chunk; - } - - /*************************************************************************** - - Constructs a new bzip2 decompression filter. You need to pass in the - stream that the decompression filter will read from. If you are using - this filter with a conduit, the idiom to use is: - - --- - auto input = new BzipInput(myConduit.input); - input.read(myContent); - --- - - The small argument, if set to true, instructs bzip2 to perform - decompression using half the regular amount of memory, at the cost of - running at half speed. - - ***************************************************************************/ - - this(InputStream stream, bool small=false) - { - super(stream); - in_chunk = new ubyte[BUFFER_SIZE]; - - auto ret = BZ2_bzDecompressInit(&bzs, 0, small?1:0); - if( ret != BZ_OK ) - throw new BzipException(ret); - - bzs_valid = true; - } - - ~this() - { - if( bzs_valid ) - kill_bzs(); - } - - /*************************************************************************** - - Decompresses data from the underlying conduit into a target array. - - Returns the number of bytes stored into dst, which may be less than - requested. - - ***************************************************************************/ - - uint read(void[] dst) - { - check_valid(); - scope(failure) kill_bzs(); - - bool finished = false; - - bzs.avail_out = dst.length; - bzs.next_out = cast(ubyte*)dst.ptr; - - do - { - if( bzs.avail_in == 0 ) - { - auto len = host.read(in_chunk); - if( len == IConduit.Eof ) - return IConduit.Eof; - - bzs.avail_in = len; - bzs.next_in = in_chunk.ptr; - } - - auto ret = BZ2_bzDecompress(&bzs); - if( ret == BZ_STREAM_END ) - { - kill_bzs(); - finished = true; - } - else if( ret != BZ_OK ) - throw new BzipException(ret); - } - while( !finished && bzs.avail_out > 0 ); - - return dst.length - bzs.avail_out; - } - - /*************************************************************************** - - Clear any buffered content. No-op. - - ***************************************************************************/ - - InputStream clear() - { - check_valid(); - - // TODO: What should this method do? We don't do any heap allocation, - // so there's really nothing to clear... For now, just invalidate the - // stream... - kill_bzs(); - super.clear(); - return this; - } - - // This function kills the stream: it deallocates the internal state, and - // unsets the bzs_valid flag. - private void kill_bzs() - { - check_valid(); - - BZ2_bzDecompressEnd(&bzs); - bzs_valid = false; - } - - // Asserts that the stream is still valid and usable (except that this - // check doesn't get elided with -release). - private void check_valid() - { - if( !bzs_valid ) - throw new BzipClosedException; - } -} - -/******************************************************************************* - - This exception is thrown when an error occurs in the underlying bzip2 - library. - -*******************************************************************************/ - -class BzipException : IOException -{ - this(in int code) - { - super(codeName(code)); - } - - this(char[] msg) - { - super(msg); - } - - private char[] codeName(in int code) - { - char[] name; - - switch( code ) - { - case BZ_OK: name = "BZ_OK"; break; - case BZ_RUN_OK: name = "BZ_RUN_OK"; break; - case BZ_FLUSH_OK: name = "BZ_FLUSH_OK"; break; - case BZ_STREAM_END: name = "BZ_STREAM_END"; break; - case BZ_SEQUENCE_ERROR: name = "BZ_SEQUENCE_ERROR"; break; - case BZ_PARAM_ERROR: name = "BZ_PARAM_ERROR"; break; - case BZ_MEM_ERROR: name = "BZ_MEM_ERROR"; break; - case BZ_DATA_ERROR: name = "BZ_DATA_ERROR"; break; - case BZ_DATA_ERROR_MAGIC: name = "BZ_DATA_ERROR_MAGIC"; break; - case BZ_IO_ERROR: name = "BZ_IO_ERROR"; break; - case BZ_UNEXPECTED_EOF: name = "BZ_UNEXPECTED_EOF"; break; - case BZ_OUTBUFF_FULL: name = "BZ_OUTBUFF_FULL"; break; - case BZ_CONFIG_ERROR: name = "BZ_CONFIG_ERROR"; break; - default: name = "BZ_UNKNOWN"; - } - - return name; - } -} - -/******************************************************************************* - - This exception is thrown if you attempt to perform a read, write or flush - operation on a closed bzip2 filter stream. This can occur if the input - stream has finished, or an output stream was flushed. - -*******************************************************************************/ - -class BzipClosedException : IOException -{ - this() - { - super("cannot operate on closed bzip2 stream"); - } -} - -/* ***************************************************************************** - - This section contains a simple unit test for this module. It is hidden - behind a version statement because it introduces additional dependencies. - -***************************************************************************** */ - -debug(UnitTest): - -import tango.io.GrowBuffer : GrowBuffer; - -unittest -{ - const char[] message = - "All dwarfs are by nature dutiful, serious, literate, obedient " - "and thoughtful people whose only minor failing is a tendency, " - "after one drink, to rush at enemies screaming \"Arrrrrrgh!\" and " - "axing their legs off at the knee."; - - const ubyte[] message_z = [ - 0x42, 0x5a, 0x68, 0x39, 0x31, 0x41, 0x59, 0x26, - 0x53, 0x59, 0x40, 0x98, 0xbe, 0xaa, 0x00, 0x00, - 0x16, 0xd5, 0x80, 0x10, 0x00, 0x70, 0x05, 0x20, - 0x00, 0x3f, 0xef, 0xde, 0xe0, 0x30, 0x00, 0xac, - 0xd8, 0x8a, 0x3d, 0x34, 0x6a, 0x6d, 0x4c, 0x4f, - 0x24, 0x31, 0x0d, 0x08, 0x98, 0x9b, 0x48, 0x9a, - 0x7a, 0x80, 0x00, 0x06, 0xa6, 0xd2, 0xa7, 0xe9, - 0xaa, 0x37, 0xa8, 0xd4, 0xf5, 0x3f, 0x54, 0x63, - 0x51, 0xe9, 0x2d, 0x4b, 0x99, 0xe1, 0xcc, 0xca, - 0xda, 0x75, 0x04, 0x42, 0x14, 0xc8, 0x6a, 0x8e, - 0x23, 0xc1, 0x3e, 0xb1, 0x8a, 0x16, 0xd2, 0x55, - 0x9a, 0x3e, 0x56, 0x1a, 0xb1, 0x83, 0x11, 0xa6, - 0x50, 0x4f, 0xd3, 0xed, 0x21, 0x40, 0xaa, 0xd1, - 0x95, 0x2c, 0xda, 0xcb, 0xb7, 0x0e, 0xce, 0x65, - 0xfc, 0x63, 0xf2, 0x88, 0x5b, 0x36, 0xda, 0xf0, - 0xf5, 0xd2, 0x9c, 0xe6, 0xf1, 0x87, 0x12, 0x87, - 0xce, 0x56, 0x0c, 0xf5, 0x65, 0x4d, 0x2e, 0xd6, - 0x27, 0x61, 0x2b, 0x74, 0xcd, 0x5e, 0x3b, 0x02, - 0x42, 0x4e, 0x0b, 0x80, 0xa8, 0x70, 0x04, 0x48, - 0xfb, 0x93, 0x4c, 0x41, 0xa8, 0x2a, 0xdf, 0xf2, - 0x67, 0x37, 0x28, 0xad, 0x38, 0xd4, 0x5c, 0xd6, - 0x34, 0x8b, 0x49, 0x5e, 0x90, 0xb2, 0x06, 0xce, - 0x0a, 0x83, 0x29, 0x84, 0x20, 0xd7, 0x5f, 0xc5, - 0xdc, 0x91, 0x4e, 0x14, 0x24, 0x10, 0x26, 0x2f, - 0xaa, 0x80]; - - scope cond = new GrowBuffer; - scope comp = new BzipOutput(cond); - comp.write(message); - comp.close; - - assert( comp.written == message_z.length ); - - assert( message_z == cast(ubyte[])(cond.slice) ); - - scope decomp = new BzipInput(cond); - auto buffer = new ubyte[256]; - buffer = buffer[0 .. decomp.read(buffer)]; - - assert( cast(ubyte[])message == buffer ); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/compress/ZlibStream.d --- a/tango/tango/io/compress/ZlibStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,594 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (C) 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Initial release: July 2007 - - author: Daniel Keep - - history: Added support for "window bits", needed for Zip support. - -*******************************************************************************/ - -module tango.io.compress.ZlibStream; - -private import tango.io.compress.c.zlib; - -private import tango.stdc.stringz : fromUtf8z; - -private import tango.core.Exception : IOException; - -private import tango.io.Conduit : InputFilter, OutputFilter; - -private import tango.io.model.IConduit : InputStream, OutputStream, IConduit; - - -/* This constant controls the size of the input/output buffers we use - * internally. This should be a fairly sane value (it's suggested by the zlib - * documentation), that should only need changing for memory-constrained - * platforms/use cases. - * - * An alternative would be to make the chunk size a template parameter to the - * filters themselves, but Tango already has more than enough template - * parameters getting in the way :) - */ - -private const CHUNKSIZE = 256 * 1024; - -/******************************************************************************* - - This input filter can be used to perform decompression of zlib streams. - -*******************************************************************************/ - -class ZlibInput : InputFilter -{ - private - { - /* Used to make sure we don't try to perform operations on a dead - * stream. */ - bool zs_valid = false; - - z_stream zs; - ubyte[] in_chunk; - } - - /*************************************************************************** - - Constructs a new zlib decompression filter. You need to pass in the - stream that the decompression filter will read from. If you are using - this filter with a conduit, the idiom to use is: - - --- - auto input = new ZlibInput(myConduit.input)); - input.read(myContent); - --- - - The optional windowBits parameter is the base two logarithm of the - window size, and should be in the range 8-15, defaulting to 15 if not - specified. Additionally, the windowBits parameter may be negative to - indicate that zlib should omit the standard zlib header and trailer, - with the window size being -windowBits. - - ***************************************************************************/ - - this(InputStream stream) - { - super (stream); - in_chunk = new ubyte[CHUNKSIZE]; - - // Allocate inflate state - with( zs ) - { - zalloc = null; - zfree = null; - opaque = null; - avail_in = 0; - next_in = null; - } - - auto ret = inflateInit(&zs); - if( ret != Z_OK ) - throw new ZlibException(ret); - - zs_valid = true; - } - - /// ditto - this(InputStream stream, int windowBits) - { - super (stream); - in_chunk = new ubyte[CHUNKSIZE]; - - // Allocate inflate state - with( zs ) - { - zalloc = null; - zfree = null; - opaque = null; - avail_in = 0; - next_in = null; - } - - auto ret = inflateInit2(&zs, windowBits); - if( ret != Z_OK ) - throw new ZlibException(ret); - - zs_valid = true; - } - - ~this() - { - if( zs_valid ) - kill_zs(); - } - - /*************************************************************************** - - Decompresses data from the underlying conduit into a target array. - - Returns the number of bytes stored into dst, which may be less than - requested. - - ***************************************************************************/ - - override uint read(void[] dst) - { - if( !zs_valid ) - return IConduit.Eof; - - // Check to see if we've run out of input data. If we have, get some - // more. - if( zs.avail_in == 0 ) - { - auto len = host.read(in_chunk); - if( len == IConduit.Eof ) - return IConduit.Eof; - - zs.avail_in = len; - zs.next_in = in_chunk.ptr; - } - - // We'll tell zlib to inflate straight into the target array. - zs.avail_out = dst.length; - zs.next_out = cast(ubyte*)dst.ptr; - auto ret = inflate(&zs, Z_NO_FLUSH); - - switch( ret ) - { - case Z_NEED_DICT: - // Whilst not technically an error, this should never happen - // for general-use code, so treat it as an error. - case Z_DATA_ERROR: - case Z_MEM_ERROR: - kill_zs(); - throw new ZlibException(ret); - - case Z_STREAM_END: - // zlib stream is finished; kill the stream so we don't try to - // read from it again. - kill_zs(); - break; - - default: - } - - return dst.length - zs.avail_out; - } - - /*************************************************************************** - - Clear any buffered content. No-op. - - ***************************************************************************/ - - override InputStream clear() - { - check_valid(); - - // TODO: What should this method do? We don't do any heap allocation, - // so there's really nothing to clear... For now, just invalidate the - // stream... - kill_zs(); - - super.clear(); - return this; - } - - // This function kills the stream: it deallocates the internal state, and - // unsets the zs_valid flag. - private void kill_zs() - { - check_valid(); - - inflateEnd(&zs); - zs_valid = false; - } - - // Asserts that the stream is still valid and usable (except that this - // check doesn't get elided with -release). - private void check_valid() - { - if( !zs_valid ) - throw new ZlibClosedException; - } -} - -/******************************************************************************* - - This output filter can be used to perform compression of data into a zlib - stream. - -*******************************************************************************/ - -class ZlibOutput : OutputFilter -{ - /*************************************************************************** - - This enumeration represents several pre-defined compression levels. - - None instructs zlib to perform no compression whatsoever, and simply - store the data stream. Note that this actually expands the stream - slightly to accommodate the zlib stream metadata. - - Fast instructs zlib to perform a minimal amount of compression, Best - indicates that you want the maximum level of compression and Normal - (the default level) is a compromise between the two. The exact - compression level Normal represents is determined by the underlying - zlib library, but is typically level 6. - - Any integer between -1 and 9 inclusive may be used as a level, - although the symbols in this enumeration should suffice for most - use-cases. - - ***************************************************************************/ - - enum Level : int - { - Normal = -1, - None = 0, - Fast = 1, - Best = 9 - } - - private - { - bool zs_valid = false; - z_stream zs; - ubyte[] out_chunk; - size_t _written = 0; - } - - /*************************************************************************** - - Constructs a new zlib compression filter. You need to pass in the - stream that the compression filter will write to. If you are using - this filter with a conduit, the idiom to use is: - - --- - auto output = new ZlibOutput(myConduit.output); - output.write(myContent); - --- - - The optional windowBits parameter is the base two logarithm of the - window size, and should be in the range 8-15, defaulting to 15 if not - specified. Additionally, the windowBits parameter may be negative to - indicate that zlib should omit the standard zlib header and trailer, - with the window size being -windowBits. - - ***************************************************************************/ - - this(OutputStream stream, Level level = Level.Normal) - { - super(stream); - out_chunk = new ubyte[CHUNKSIZE]; - - // Allocate deflate state - with( zs ) - { - zalloc = null; - zfree = null; - opaque = null; - } - - auto ret = deflateInit(&zs, level); - if( ret != Z_OK ) - throw new ZlibException(ret); - - zs_valid = true; - } - - /// ditto - this(OutputStream stream, Level level, int windowBits) - { - super(stream); - out_chunk = new ubyte[CHUNKSIZE]; - - // Allocate deflate state - with( zs ) - { - zalloc = null; - zfree = null; - opaque = null; - } - - auto ret = deflateInit2(&zs, level, Z_DEFLATED, windowBits, 8, - Z_DEFAULT_STRATEGY); - if( ret != Z_OK ) - throw new ZlibException(ret); - - zs_valid = true; - } - - ~this() - { - if( zs_valid ) - kill_zs(); - } - - /*************************************************************************** - - Compresses the given data to the underlying conduit. - - Returns the number of bytes from src that were compressed; write - should always consume all data provided to it, although it may not be - immediately written to the underlying output stream. - - ***************************************************************************/ - - override uint write(void[] src) - { - check_valid(); - scope(failure) kill_zs(); - - zs.avail_in = src.length; - zs.next_in = cast(ubyte*)src.ptr; - - do - { - zs.avail_out = out_chunk.length; - zs.next_out = out_chunk.ptr; - - auto ret = deflate(&zs, Z_NO_FLUSH); - if( ret == Z_STREAM_ERROR ) - throw new ZlibException(ret); - - // Push the compressed bytes out to the stream, until it's either - // written them all, or choked. - auto have = out_chunk.length-zs.avail_out; - auto out_buffer = out_chunk[0..have]; - do - { - auto w = host.write(out_buffer); - if( w == IConduit.Eof ) - return w; - - out_buffer = out_buffer[w..$]; - _written += w; - } - while( out_buffer.length > 0 ); - } - // Loop while we are still using up the whole output buffer - while( zs.avail_out == 0 ); - - assert( zs.avail_in == 0, "failed to compress all provided data" ); - - return src.length; - } - - /*************************************************************************** - - This read-only property returns the number of compressed bytes that - have been written to the underlying stream. Following a call to - either close or commit, this will contain the total compressed size of - the input data stream. - - ***************************************************************************/ - - size_t written() - { - return _written; - } - - /*************************************************************************** - - commit the output - - ***************************************************************************/ - - override void close() - { - // Only commit if the stream is still open. - if( zs_valid ) commit; - - super.close; - } - - /*************************************************************************** - - Purge any buffered content. Calling this will implicitly end the zlib - stream, so it should not be called until you are finished compressing - data. Any calls to either write or commit after a compression filter - has been committed will throw an exception. - - ***************************************************************************/ - - void commit() - { - check_valid(); - scope(failure) kill_zs(); - - zs.avail_in = 0; - zs.next_in = null; - - bool finished = false; - - do - { - zs.avail_out = out_chunk.length; - zs.next_out = out_chunk.ptr; - - auto ret = deflate(&zs, Z_FINISH); - switch( ret ) - { - case Z_OK: - // Keep going - break; - - case Z_STREAM_END: - // We're done! - finished = true; - break; - - default: - throw new ZlibException(ret); - } - - auto have = out_chunk.length - zs.avail_out; - auto out_buffer = out_chunk[0..have]; - if( have > 0 ) - { - do - { - auto w = host.write(out_buffer); - if( w == IConduit.Eof ) - return w; - - out_buffer = out_buffer[w..$]; - _written += w; - } - while( out_buffer.length > 0 ); - } - } - while( !finished ); - - kill_zs(); - } - - // This function kills the stream: it deallocates the internal state, and - // unsets the zs_valid flag. - private void kill_zs() - { - check_valid(); - - deflateEnd(&zs); - zs_valid = false; - } - - // Asserts that the stream is still valid and usable (except that this - // check doesn't get elided with -release). - private void check_valid() - { - if( !zs_valid ) - throw new ZlibClosedException; - } -} - -/******************************************************************************* - - This exception is thrown if you attempt to perform a read, write or flush - operation on a closed zlib filter stream. This can occur if the input - stream has finished, or an output stream was flushed. - -*******************************************************************************/ - -class ZlibClosedException : IOException -{ - this() - { - super("cannot operate on closed zlib stream"); - } -} - -/******************************************************************************* - - This exception is thrown when an error occurs in the underlying zlib - library. Where possible, it will indicate both the name of the error, and - any textural message zlib has provided. - -*******************************************************************************/ - -class ZlibException : IOException -{ - this(int code) - { - super(codeName(code)); - } - - this(int code, char* msg) - { - super(codeName(code)~": "~fromUtf8z(msg)); - } - - protected char[] codeName(int code) - { - char[] name; - - switch( code ) - { - case Z_OK: name = "Z_OK"; break; - case Z_STREAM_END: name = "Z_STREAM_END"; break; - case Z_NEED_DICT: name = "Z_NEED_DICT"; break; - case Z_ERRNO: name = "Z_ERRNO"; break; - case Z_STREAM_ERROR: name = "Z_STREAM_ERROR"; break; - case Z_DATA_ERROR: name = "Z_DATA_ERROR"; break; - case Z_MEM_ERROR: name = "Z_MEM_ERROR"; break; - case Z_BUF_ERROR: name = "Z_BUF_ERROR"; break; - case Z_VERSION_ERROR: name = "Z_VERSION_ERROR"; break; - default: name = "Z_UNKNOWN"; - } - - return name; - } -} - -/* ***************************************************************************** - - This section contains a simple unit test for this module. It is hidden - behind a version statement because it introduces additional dependencies. - -***************************************************************************** */ - -debug(UnitTest) { - -import tango.io.GrowBuffer : GrowBuffer; - -unittest -{ - // One ring to rule them all, one ring to find them, - // One ring to bring them all and in the darkness bind them. - const char[] message = - "Ash nazg durbatulûk, ash nazg gimbatul, " - "ash nazg thrakatulûk, agh burzum-ishi krimpatul."; - - // This compressed data was created using Python 2.5's built in zlib - // module, with the default compression level. - const ubyte[] message_z = [ - 0x78,0x9c,0x73,0x2c,0xce,0x50,0xc8,0x4b, - 0xac,0x4a,0x57,0x48,0x29,0x2d,0x4a,0x4a, - 0x2c,0x29,0xcd,0x39,0xbc,0x3b,0x5b,0x47, - 0x21,0x11,0x26,0x9a,0x9e,0x99,0x0b,0x16, - 0x45,0x12,0x2a,0xc9,0x28,0x4a,0xcc,0x46, - 0xa8,0x4c,0xcf,0x50,0x48,0x2a,0x2d,0xaa, - 0x2a,0xcd,0xd5,0xcd,0x2c,0xce,0xc8,0x54, - 0xc8,0x2e,0xca,0xcc,0x2d,0x00,0xc9,0xea, - 0x01,0x00,0x1f,0xe3,0x22,0x99]; - - scope cond_z = new GrowBuffer; - scope comp = new ZlibOutput(cond_z); - comp.write (message); - comp.close; - - assert( comp.written == message_z.length ); - - assert( message_z == cast(ubyte[])(cond_z.slice) ); - - scope decomp = new ZlibInput(cond_z); - auto buffer = new ubyte[256]; - buffer = buffer[0 .. decomp.read(buffer)]; - - assert( cast(ubyte[])message == buffer ); -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/compress/c/bzlib.d --- a/tango/tango/io/compress/c/bzlib.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -/* Converted to D from bzlib.h by htod */ - -module tango.io.compress.c.bzlib; - -/*-------------------------------------------------------------*/ -/*--- Public header file for the library. ---*/ -/*--- bzlib.h ---*/ -/*-------------------------------------------------------------*/ - -/* ------------------------------------------------------------------ - This file is part of bzip2/libbzip2, a program and library for - lossless, block-sorting data compression. - - bzip2/libbzip2 version 1.0.4 of 20 December 2006 - Copyright (C) 1996-2006 Julian Seward - - Please read the WARNING, DISCLAIMER and PATENTS sections in the - README file. - - This program is released under the terms of the license contained - in the file LICENSE. - ------------------------------------------------------------------ */ - -extern(C): - -const BZ_RUN = 0; -const BZ_FLUSH = 1; -const BZ_FINISH = 2; - -const BZ_OK = 0; -const BZ_RUN_OK = 1; -const BZ_FLUSH_OK = 2; -const BZ_FINISH_OK = 3; -const BZ_STREAM_END = 4; -const BZ_SEQUENCE_ERROR = -1; -const BZ_PARAM_ERROR = -2; -const BZ_MEM_ERROR = -3; -const BZ_DATA_ERROR = -4; -const BZ_DATA_ERROR_MAGIC = -5; -const BZ_IO_ERROR = -6; -const BZ_UNEXPECTED_EOF = -7; -const BZ_OUTBUFF_FULL = -8; -const BZ_CONFIG_ERROR = -9; - -struct bz_stream -{ - ubyte *next_in; - uint avail_in; - uint total_in_lo32; - uint total_in_hi32; - ubyte *next_out; - uint avail_out; - uint total_out_lo32; - uint total_out_hi32; - void *state; - void * function(void *, int , int )bzalloc; - void function(void *, void *)bzfree; - void *opaque; -} - -import tango.stdc.stdio : FILE; - -/*-- Core (low-level) library functions --*/ - -//C BZ_EXTERN int BZ_API(BZ2_bzCompressInit) ( -//C bz_stream* strm, -//C int blockSize100k, -//C int verbosity, -//C int workFactor -//C ); -extern (Windows): -int BZ2_bzCompressInit(bz_stream *strm, int blockSize100k, int verbosity, int workFactor); - -//C BZ_EXTERN int BZ_API(BZ2_bzCompress) ( -//C bz_stream* strm, -//C int action -//C ); -int BZ2_bzCompress(bz_stream *strm, int action); - -//C BZ_EXTERN int BZ_API(BZ2_bzCompressEnd) ( -//C bz_stream* strm -//C ); -int BZ2_bzCompressEnd(bz_stream *strm); - -//C BZ_EXTERN int BZ_API(BZ2_bzDecompressInit) ( -//C bz_stream *strm, -//C int verbosity, -//C int small -//C ); -int BZ2_bzDecompressInit(bz_stream *strm, int verbosity, int small); - -//C BZ_EXTERN int BZ_API(BZ2_bzDecompress) ( -//C bz_stream* strm -//C ); -int BZ2_bzDecompress(bz_stream *strm); - -//C BZ_EXTERN int BZ_API(BZ2_bzDecompressEnd) ( -//C bz_stream *strm -//C ); -int BZ2_bzDecompressEnd(bz_stream *strm); - - - -/*-- High(er) level library functions --*/ - -version(BZ_NO_STDIO){}else{ - -const BZ_MAX_UNUSED = 5000; -alias void BZFILE; - -//C BZ_EXTERN BZFILE* BZ_API(BZ2_bzReadOpen) ( -//C int* bzerror, -//C FILE* f, -//C int verbosity, -//C int small, -//C void* unused, -//C int nUnused -//C ); -extern (Windows): -BZFILE * BZ2_bzReadOpen(int *bzerror, FILE *f, int verbosity, int small, void *unused, int nUnused); - -//C BZ_EXTERN void BZ_API(BZ2_bzReadClose) ( -//C int* bzerror, -//C BZFILE* b -//C ); -void BZ2_bzReadClose(int *bzerror, BZFILE *b); - -//C BZ_EXTERN void BZ_API(BZ2_bzReadGetUnused) ( -//C int* bzerror, -//C BZFILE* b, -//C void** unused, -//C int* nUnused -//C ); -void BZ2_bzReadGetUnused(int *bzerror, BZFILE *b, void **unused, int *nUnused); - -//C BZ_EXTERN int BZ_API(BZ2_bzRead) ( -//C int* bzerror, -//C BZFILE* b, -//C void* buf, -//C int len -//C ); -int BZ2_bzRead(int *bzerror, BZFILE *b, void *buf, int len); - -//C BZ_EXTERN BZFILE* BZ_API(BZ2_bzWriteOpen) ( -//C int* bzerror, -//C FILE* f, -//C int blockSize100k, -//C int verbosity, -//C int workFactor -//C ); -BZFILE * BZ2_bzWriteOpen(int *bzerror, FILE *f, int blockSize100k, int verbosity, int workFactor); - -//C BZ_EXTERN void BZ_API(BZ2_bzWrite) ( -//C int* bzerror, -//C BZFILE* b, -//C void* buf, -//C int len -//C ); -void BZ2_bzWrite(int *bzerror, BZFILE *b, void *buf, int len); - -//C BZ_EXTERN void BZ_API(BZ2_bzWriteClose) ( -//C int* bzerror, -//C BZFILE* b, -//C int abandon, -//C unsigned int* nbytes_in, -//C unsigned int* nbytes_out -//C ); -void BZ2_bzWriteClose(int *bzerror, BZFILE *b, int abandon, uint *nbytes_in, uint *nbytes_out); - -//C BZ_EXTERN void BZ_API(BZ2_bzWriteClose64) ( -//C int* bzerror, -//C BZFILE* b, -//C int abandon, -//C unsigned int* nbytes_in_lo32, -//C unsigned int* nbytes_in_hi32, -//C unsigned int* nbytes_out_lo32, -//C unsigned int* nbytes_out_hi32 -//C ); -void BZ2_bzWriteClose64(int *bzerror, BZFILE *b, int abandon, uint *nbytes_in_lo32, uint *nbytes_in_hi32, uint *nbytes_out_lo32, uint *nbytes_out_hi32); - -} - -/*-- Utility functions --*/ - -//C BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffCompress) ( -//C char* dest, -//C unsigned int* destLen, -//C char* source, -//C unsigned int sourceLen, -//C int blockSize100k, -//C int verbosity, -//C int workFactor -//C ); -int BZ2_bzBuffToBuffCompress(char *dest, uint *destLen, char *source, uint sourceLen, int blockSize100k, int verbosity, int workFactor); - -//C BZ_EXTERN int BZ_API(BZ2_bzBuffToBuffDecompress) ( -//C char* dest, -//C unsigned int* destLen, -//C char* source, -//C unsigned int sourceLen, -//C int small, -//C int verbosity -//C ); -int BZ2_bzBuffToBuffDecompress(char *dest, uint *destLen, char *source, uint sourceLen, int small, int verbosity); - - -/*-- - Code contributed by Yoshioka Tsuneo (tsuneo@rr.iij4u.or.jp) - to support better zlib compatibility. - This code is not _officially_ part of libbzip2 (yet); - I haven't tested it, documented it, or considered the - threading-safeness of it. - If this code breaks, please contact both Yoshioka and me. ---*/ - -//C BZ_EXTERN const char * BZ_API(BZ2_bzlibVersion) ( -//C void -//C ); -char * BZ2_bzlibVersion(); - -version(BZ_NO_STDIO){}else{ - -//C BZ_EXTERN BZFILE * BZ_API(BZ2_bzopen) ( -//C const char *path, -//C const char *mode -//C ); -BZFILE * BZ2_bzopen(char *path, char *mode); - -//C BZ_EXTERN BZFILE * BZ_API(BZ2_bzdopen) ( -//C int fd, -//C const char *mode -//C ); -BZFILE * BZ2_bzdopen(int fd, char *mode); - -//C BZ_EXTERN int BZ_API(BZ2_bzread) ( -//C BZFILE* b, -//C void* buf, -//C int len -//C ); -int BZ2_bzread(BZFILE *b, void *buf, int len); - -//C BZ_EXTERN int BZ_API(BZ2_bzwrite) ( -//C BZFILE* b, -//C void* buf, -//C int len -//C ); -int BZ2_bzwrite(BZFILE *b, void *buf, int len); - -//C BZ_EXTERN int BZ_API(BZ2_bzflush) ( -//C BZFILE* b -//C ); -int BZ2_bzflush(BZFILE *b); - -//C BZ_EXTERN void BZ_API(BZ2_bzclose) ( -//C BZFILE* b -//C ); -void BZ2_bzclose(BZFILE *b); - -//C BZ_EXTERN const char * BZ_API(BZ2_bzerror) ( -//C BZFILE *b, -//C int *errnum -//C ); -char * BZ2_bzerror(BZFILE *b, int *errnum); - -} - -/*-------------------------------------------------------------*/ -/*--- end bzlib.h ---*/ -/*-------------------------------------------------------------*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/compress/c/zlib.d --- a/tango/tango/io/compress/c/zlib.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1446 +0,0 @@ -/* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.2.3, July 18th, 2005 - - Copyright (C) 1995-2005 Jean-loup Gailly and Mark Adler - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - - Jean-loup Gailly Mark Adler - jloup@gzip.org madler@alumni.caltech.edu - - - The data format used by the zlib library is described by RFCs (Request for - Comments) 1950 to 1952 in the files http://www.ietf.org/rfc/rfc1950.txt - (zlib format), rfc1951.txt (deflate format) and rfc1952.txt (gzip format). -*/ - -module tango.io.compress.c.zlib; - -extern (C): - -const char* ZLIB_VERSION = "1.2.3"; -const uint ZLIB_VERNUM = 0x1230; - -/* - The 'zlib' compression library provides in-memory compression and - decompression functions, including integrity checks of the uncompressed - data. This version of the library supports only one compression method - (deflation) but other algorithms will be added later and will have the same - stream interface. - - Compression can be done in a single step if the buffers are large - enough (for example if an input file is mmap'ed), or can be done by - repeated calls of the compression function. In the latter case, the - application must provide more input and/or consume the output - (providing more output space) before each call. - - The compressed data format used by default by the in-memory functions is - the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped - around a deflate stream, which is itself documented in RFC 1951. - - The library also supports reading and writing files in gzip (.gz) format - with an interface similar to that of stdio using the functions that start - with "gz". The gzip format is different from the zlib format. gzip is a - gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. - - This library can optionally read and write gzip streams in memory as well. - - The zlib format was designed to be compact and fast for use in memory - and on communications channels. The gzip format was designed for single- - file compression on file systems, has a larger header than zlib to maintain - directory information, and uses a different, slower check method than zlib. - - The library does not install any signal handler. The decoder checks - the consistency of the compressed data, so the library should never - crash even in case of corrupted input. -*/ - -private -{ - import tango.stdc.config : c_long, c_ulong; - - version( Posix ) - { - import tango.stdc.posix.sys.types : z_off_t = off_t; - } - else - { - alias c_long z_off_t; - } - - alias ubyte Byte; - alias uint uInt; - alias c_ulong uLong; - - alias Byte Bytef; - alias char charf; - alias int intf; - alias uInt uIntf; - alias uLong uLongf; - - alias void* voidpc; // TODO: normally const - alias void* voidpf; - alias void* voidp; - - alias voidpf function(voidpf opaque, uInt items, uInt size) alloc_func; - alias void function(voidpf opaque, voidpf address) free_func; - - struct internal_state {} -} - -struct z_stream -{ - Bytef* next_in; /* next input byte */ - uInt avail_in; /* number of bytes available at next_in */ - uLong total_in; /* total nb of input bytes read so far */ - - Bytef* next_out; /* next output byte should be put there */ - uInt avail_out; /* remaining free space at next_out */ - uLong total_out; /* total nb of bytes output so far */ - - char* msg; /* last error message, NULL if no error */ - internal_state* state; /* not visible by applications */ - - alloc_func zalloc; /* used to allocate the internal state */ - free_func zfree; /* used to free the internal state */ - voidpf opaque; /* private data object passed to zalloc and zfree */ - - int data_type; /* best guess about the data type: binary or text */ - uLong adler; /* adler32 value of the uncompressed data */ - uLong reserved; /* reserved for future use */ -} - -alias z_stream* z_streamp; - -/* - gzip header information passed to and from zlib routines. See RFC 1952 - for more details on the meanings of these fields. -*/ -struct gz_header -{ - int text; /* true if compressed data believed to be text */ - uLong time; /* modification time */ - int xflags; /* extra flags (not used when writing a gzip file) */ - int os; /* operating system */ - Bytef* extra; /* pointer to extra field or Z_NULL if none */ - uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ - uInt extra_max; /* space at extra (only when reading header) */ - Bytef* name; /* pointer to zero-terminated file name or Z_NULL */ - uInt name_max; /* space at name (only when reading header) */ - Bytef* comment; /* pointer to zero-terminated comment or Z_NULL */ - uInt comm_max; /* space at comment (only when reading header) */ - int hcrc; /* true if there was or will be a header crc */ - int done; /* true when done reading gzip header (not used - when writing a gzip file) */ -} - -alias gz_header* gz_headerp; - -/* - The application must update next_in and avail_in when avail_in has - dropped to zero. It must update next_out and avail_out when avail_out - has dropped to zero. The application must initialize zalloc, zfree and - opaque before calling the init function. All other fields are set by the - compression library and must not be updated by the application. - - The opaque value provided by the application will be passed as the first - parameter for calls of zalloc and zfree. This can be useful for custom - memory management. The compression library attaches no meaning to the - opaque value. - - zalloc must return Z_NULL if there is not enough memory for the object. - If zlib is used in a multi-threaded application, zalloc and zfree must be - thread safe. - - On 16-bit systems, the functions zalloc and zfree must be able to allocate - exactly 65536 bytes, but will not be required to allocate more than this - if the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, - pointers returned by zalloc for objects of exactly 65536 bytes *must* - have their offset normalized to zero. The default allocation function - provided by this library ensures this (see zutil.c). To reduce memory - requirements and avoid any allocation of 64K objects, at the expense of - compression ratio, compile the library with -DMAX_WBITS=14 (see zconf.h). - - The fields total_in and total_out can be used for statistics or - progress reports. After compression, total_in holds the total size of - the uncompressed data and may be saved for use in the decompressor - (particularly if the decompressor wants to decompress everything in - a single step). -*/ - - /* constants */ - -enum -{ - Z_NO_FLUSH = 0, - Z_PARTIAL_FLUSH = 1, /* will be removed, use Z_SYNC_FLUSH instead */ - Z_SYNC_FLUSH = 2, - Z_FULL_FLUSH = 3, - Z_FINISH = 4, - Z_BLOCK = 5, -} -/* Allowed flush values; see deflate() and inflate() below for details */ - -enum -{ - Z_OK = 0, - Z_STREAM_END = 1, - Z_NEED_DICT = 2, - Z_ERRNO = -1, - Z_STREAM_ERROR = -2, - Z_DATA_ERROR = -3, - Z_MEM_ERROR = -4, - Z_BUF_ERROR = -5, - Z_VERSION_ERROR = -6, -} -/* Return codes for the compression/decompression functions. Negative - * values are errors, positive values are used for special but normal events. - */ - -enum -{ - Z_NO_COMPRESSION = 0, - Z_BEST_SPEED = 1, - Z_BEST_COMPRESSION = 9, - Z_DEFAULT_COMPRESSION = -1, -} -/* compression levels */ - -enum -{ - Z_FILTERED = 1, - Z_HUFFMAN_ONLY = 2, - Z_RLE = 3, - Z_FIXED = 4, - Z_DEFAULT_STRATEGY = 0, -} -/* compression strategy; see deflateInit2() below for details */ - -enum -{ - Z_BINARY = 0, - Z_TEXT = 1, - Z_ASCII = Z_TEXT, /* for compatibility with 1.2.2 and earlier */ - Z_UNKNOWN = 2, -} -/* Possible values of the data_type field (though see inflate()) */ - -enum -{ - Z_DEFLATED = 8, -} -/* The deflate compression method (the only one supported in this version) */ - -const Z_NULL = null; /* for initializing zalloc, zfree, opaque */ - -alias zlibVersion zlib_version; -/* for compatibility with versions < 1.0.2 */ - - /* basic functions */ - -char* zlibVersion(); -/* The application can compare zlibVersion and ZLIB_VERSION for consistency. - If the first character differs, the library code actually used is - not compatible with the zlib.h header file used by the application. - This check is automatically made by deflateInit and inflateInit. - */ - -/* -int deflateInit (z_streamp strm, int level); - - Initializes the internal stream state for compression. The fields - zalloc, zfree and opaque must be initialized before by the caller. - If zalloc and zfree are set to Z_NULL, deflateInit updates them to - use default allocation functions. - - The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: - 1 gives best speed, 9 gives best compression, 0 gives no compression at - all (the input data is simply copied a block at a time). - Z_DEFAULT_COMPRESSION requests a default compromise between speed and - compression (currently equivalent to level 6). - - deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if level is not a valid compression level, - Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible - with the version assumed by the caller (ZLIB_VERSION). - msg is set to null if there is no error message. deflateInit does not - perform any compression: this will be done by deflate(). -*/ - - -int deflate(z_streamp strm, int flush); -/* - deflate compresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce some - output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. deflate performs one or both of the - following actions: - - - Compress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in and avail_in are updated and - processing will resume at this point for the next call of deflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. This action is forced if the parameter flush is non zero. - Forcing flush frequently degrades the compression ratio, so this parameter - should be set only when necessary (in interactive applications). - Some output may be provided even if flush is not set. - - Before the call of deflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating avail_in or avail_out accordingly; avail_out - should never be zero before the call. The application can consume the - compressed output when it wants, for example when the output buffer is full - (avail_out == 0), or after each call of deflate(). If deflate returns Z_OK - and with zero avail_out, it must be called again after making room in the - output buffer because there might be more output pending. - - Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to - decide how much data to accumualte before producing output, in order to - maximize compression. - - If the parameter flush is set to Z_SYNC_FLUSH, all pending output is - flushed to the output buffer and the output is aligned on a byte boundary, so - that the decompressor can get all input data available so far. (In particular - avail_in is zero after the call if enough output space has been provided - before the call.) Flushing may degrade compression for some compression - algorithms and so it should be used only when necessary. - - If flush is set to Z_FULL_FLUSH, all output is flushed as with - Z_SYNC_FLUSH, and the compression state is reset so that decompression can - restart from this point if previous compressed data has been damaged or if - random access is desired. Using Z_FULL_FLUSH too often can seriously degrade - compression. - - If deflate returns with avail_out == 0, this function must be called again - with the same value of the flush parameter and more output space (updated - avail_out), until the flush is complete (deflate returns with non-zero - avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that - avail_out is greater than six to avoid repeated flush markers due to - avail_out == 0 on return. - - If the parameter flush is set to Z_FINISH, pending input is processed, - pending output is flushed and deflate returns with Z_STREAM_END if there - was enough output space; if deflate returns with Z_OK, this function must be - called again with Z_FINISH and more output space (updated avail_out) but no - more input data, until it returns with Z_STREAM_END or an error. After - deflate has returned Z_STREAM_END, the only possible operations on the - stream are deflateReset or deflateEnd. - - Z_FINISH can be used immediately after deflateInit if all the compression - is to be done in a single step. In this case, avail_out must be at least - the value returned by deflateBound (see below). If deflate does not return - Z_STREAM_END, then it must be called again as described above. - - deflate() sets strm->adler to the adler32 checksum of all input read - so far (that is, total_in bytes). - - deflate() may update strm->data_type if it can make a good guess about - the input data type (Z_BINARY or Z_TEXT). In doubt, the data is considered - binary. This field is only for information purposes and does not affect - the compression algorithm in any manner. - - deflate() returns Z_OK if some progress has been made (more input - processed or more output produced), Z_STREAM_END if all input has been - consumed and all output has been produced (only when flush is set to - Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example - if next_in or next_out was NULL), Z_BUF_ERROR if no progress is possible - (for example avail_in or avail_out was zero). Note that Z_BUF_ERROR is not - fatal, and deflate() can be called again with more input and more output - space to continue compressing. -*/ - - -int deflateEnd(z_streamp strm); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the - stream state was inconsistent, Z_DATA_ERROR if the stream was freed - prematurely (some input or output was discarded). In the error case, - msg may be set but then points to a static string (which must not be - deallocated). -*/ - - -/* -int inflateInit(z_streamp strm); - - Initializes the internal stream state for decompression. The fields - next_in, avail_in, zalloc, zfree and opaque must be initialized before by - the caller. If next_in is not Z_NULL and avail_in is large enough (the exact - value depends on the compression method), inflateInit determines the - compression method from the zlib header and allocates all data structures - accordingly; otherwise the allocation will be deferred to the first call of - inflate. If zalloc and zfree are set to Z_NULL, inflateInit updates them to - use default allocation functions. - - inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_VERSION_ERROR if the zlib library version is incompatible with the - version assumed by the caller. msg is set to null if there is no error - message. inflateInit does not perform any decompression apart from reading - the zlib header if present: this will be done by inflate(). (So next_in and - avail_in may be modified, but next_out and avail_out are unchanged.) -*/ - - -int inflate(z_streamp strm, int flush); -/* - inflate decompresses as much data as possible, and stops when the input - buffer becomes empty or the output buffer becomes full. It may introduce - some output latency (reading input without producing any output) except when - forced to flush. - - The detailed semantics are as follows. inflate performs one or both of the - following actions: - - - Decompress more input starting at next_in and update next_in and avail_in - accordingly. If not all input can be processed (because there is not - enough room in the output buffer), next_in is updated and processing - will resume at this point for the next call of inflate(). - - - Provide more output starting at next_out and update next_out and avail_out - accordingly. inflate() provides as much output as possible, until there - is no more input data or no more space in the output buffer (see below - about the flush parameter). - - Before the call of inflate(), the application should ensure that at least - one of the actions is possible, by providing more input and/or consuming - more output, and updating the next_* and avail_* values accordingly. - The application can consume the uncompressed output when it wants, for - example when the output buffer is full (avail_out == 0), or after each - call of inflate(). If inflate returns Z_OK and with zero avail_out, it - must be called again after making room in the output buffer because there - might be more output pending. - - The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, - Z_FINISH, or Z_BLOCK. Z_SYNC_FLUSH requests that inflate() flush as much - output as possible to the output buffer. Z_BLOCK requests that inflate() stop - if and when it gets to the next deflate block boundary. When decoding the - zlib or gzip format, this will cause inflate() to return immediately after - the header and before the first block. When doing a raw inflate, inflate() - will go ahead and process the first block, and will return when it gets to - the end of that block, or when it runs out of data. - - The Z_BLOCK option assists in appending to or combining deflate streams. - Also to assist in this, on return inflate() will set strm->data_type to the - number of unused bits in the last byte taken from strm->next_in, plus 64 - if inflate() is currently decoding the last block in the deflate stream, - plus 128 if inflate() returned immediately after decoding an end-of-block - code or decoding the complete header up to just before the first byte of the - deflate stream. The end-of-block will not be indicated until all of the - uncompressed data from that block has been written to strm->next_out. The - number of unused bits may in general be greater than seven, except when - bit 7 of data_type is set, in which case the number of unused bits will be - less than eight. - - inflate() should normally be called until it returns Z_STREAM_END or an - error. However if all decompression is to be performed in a single step - (a single call of inflate), the parameter flush should be set to - Z_FINISH. In this case all pending input is processed and all pending - output is flushed; avail_out must be large enough to hold all the - uncompressed data. (The size of the uncompressed data may have been saved - by the compressor for this purpose.) The next operation on this stream must - be inflateEnd to deallocate the decompression state. The use of Z_FINISH - is never required, but can be used to inform inflate that a faster approach - may be used for the single inflate() call. - - In this implementation, inflate() always flushes as much output as - possible to the output buffer, and always uses the faster approach on the - first call. So the only effect of the flush parameter in this implementation - is on the return value of inflate(), as noted below, or when it returns early - because Z_BLOCK is used. - - If a preset dictionary is needed after this call (see inflateSetDictionary - below), inflate sets strm->adler to the adler32 checksum of the dictionary - chosen by the compressor and returns Z_NEED_DICT; otherwise it sets - strm->adler to the adler32 checksum of all output produced so far (that is, - total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described - below. At the end of the stream, inflate() checks that its computed adler32 - checksum is equal to that saved by the compressor and returns Z_STREAM_END - only if the checksum is correct. - - inflate() will decompress and check either zlib-wrapped or gzip-wrapped - deflate data. The header type is detected automatically. Any information - contained in the gzip header is not retained, so applications that need that - information should instead use raw inflate, see inflateInit2() below, or - inflateBack() and perform their own processing of the gzip header and - trailer. - - inflate() returns Z_OK if some progress has been made (more input processed - or more output produced), Z_STREAM_END if the end of the compressed data has - been reached and all uncompressed output has been produced, Z_NEED_DICT if a - preset dictionary is needed at this point, Z_DATA_ERROR if the input data was - corrupted (input stream not conforming to the zlib format or incorrect check - value), Z_STREAM_ERROR if the stream structure was inconsistent (for example - if next_in or next_out was NULL), Z_MEM_ERROR if there was not enough memory, - Z_BUF_ERROR if no progress is possible or if there was not enough room in the - output buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and - inflate() can be called again with more input and more output space to - continue decompressing. If Z_DATA_ERROR is returned, the application may then - call inflateSync() to look for a good compression block if a partial recovery - of the data is desired. -*/ - - -int inflateEnd(z_streamp strm); -/* - All dynamically allocated data structures for this stream are freed. - This function discards any unprocessed input and does not flush any - pending output. - - inflateEnd returns Z_OK if success, Z_STREAM_ERROR if the stream state - was inconsistent. In the error case, msg may be set but then points to a - static string (which must not be deallocated). -*/ - - /* Advanced functions */ - -/* - The following functions are needed only in some special applications. -*/ - -/* -int deflateInit2 (z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy); - - This is another version of deflateInit with more compression options. The - fields next_in, zalloc, zfree and opaque must be initialized before by - the caller. - - The method parameter is the compression method. It must be Z_DEFLATED in - this version of the library. - - The windowBits parameter is the base two logarithm of the window size - (the size of the history buffer). It should be in the range 8..15 for this - version of the library. Larger values of this parameter result in better - compression at the expense of memory usage. The default value is 15 if - deflateInit is used instead. - - windowBits can also be -8..-15 for raw deflate. In this case, -windowBits - determines the window size. deflate() will then generate raw deflate data - with no zlib header or trailer, and will not compute an adler32 check value. - - windowBits can also be greater than 15 for optional gzip encoding. Add - 16 to windowBits to write a simple gzip header and trailer around the - compressed data instead of a zlib wrapper. The gzip header will have no - file name, no extra data, no comment, no modification time (set to zero), - no header crc, and the operating system will be set to 255 (unknown). If a - gzip stream is being written, strm->adler is a crc32 instead of an adler32. - - The memLevel parameter specifies how much memory should be allocated - for the internal compression state. memLevel=1 uses minimum memory but - is slow and reduces compression ratio; memLevel=9 uses maximum memory - for optimal speed. The default value is 8. See zconf.h for total memory - usage as a function of windowBits and memLevel. - - The strategy parameter is used to tune the compression algorithm. Use the - value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a - filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no - string match), or Z_RLE to limit match distances to one (run-length - encoding). Filtered data consists mostly of small values with a somewhat - random distribution. In this case, the compression algorithm is tuned to - compress them better. The effect of Z_FILTERED is to force more Huffman - coding and less string matching; it is somewhat intermediate between - Z_DEFAULT and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as - Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy - parameter only affects the compression ratio but not the correctness of the - compressed output even if it is not set appropriately. Z_FIXED prevents the - use of dynamic Huffman codes, allowing for a simpler decoder for special - applications. - - deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as an invalid - method). msg is set to null if there is no error message. deflateInit2 does - not perform any compression: this will be done by deflate(). -*/ - -int deflateSetDictionary(z_streamp strm, - Bytef* dictionary, - uInt dictLength); -/* - Initializes the compression dictionary from the given byte sequence - without producing any compressed output. This function must be called - immediately after deflateInit, deflateInit2 or deflateReset, before any - call of deflate. The compressor and decompressor must use exactly the same - dictionary (see inflateSetDictionary). - - The dictionary should consist of strings (byte sequences) that are likely - to be encountered later in the data to be compressed, with the most commonly - used strings preferably put towards the end of the dictionary. Using a - dictionary is most useful when the data to be compressed is short and can be - predicted with good accuracy; the data can then be compressed better than - with the default empty dictionary. - - Depending on the size of the compression data structures selected by - deflateInit or deflateInit2, a part of the dictionary may in effect be - discarded, for example if the dictionary is larger than the window size in - deflate or deflate2. Thus the strings most likely to be useful should be - put at the end of the dictionary, not at the front. In addition, the - current implementation of deflate will use at most the window size minus - 262 bytes of the provided dictionary. - - Upon return of this function, strm->adler is set to the adler32 value - of the dictionary; the decompressor may later use this value to determine - which dictionary has been used by the compressor. (The adler32 value - applies to the whole dictionary even if only a subset of the dictionary is - actually used by the compressor.) If a raw deflate was requested, then the - adler32 value is not computed and strm->adler is not set. - - deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent (for example if deflate has already been called for this stream - or if the compression method is bsort). deflateSetDictionary does not - perform any compression: this will be done by deflate(). -*/ - -int deflateCopy(z_streamp dest, - z_streamp source); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when several compression strategies will be - tried, for example when there are several ways of pre-processing the input - data with a filter. The streams that will be discarded should then be freed - by calling deflateEnd. Note that deflateCopy duplicates the internal - compression state which can be quite large, so this strategy is slow and - can consume lots of memory. - - deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -int deflateReset(z_streamp strm); -/* - This function is equivalent to deflateEnd followed by deflateInit, - but does not free and reallocate all the internal compression state. - The stream will keep the same compression level and any other attributes - that may have been set by deflateInit2. - - deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -int deflateParams(z_streamp strm, - int level, - int strategy); -/* - Dynamically update the compression level and compression strategy. The - interpretation of level and strategy is as in deflateInit2. This can be - used to switch between compression and straight copy of the input data, or - to switch to a different kind of input data requiring a different - strategy. If the compression level is changed, the input available so far - is compressed with the old level (and may be flushed); the new level will - take effect only at the next call of deflate(). - - Before the call of deflateParams, the stream state must be set as for - a call of deflate(), since the currently available input may have to - be compressed and flushed. In particular, strm->avail_out must be non-zero. - - deflateParams returns Z_OK if success, Z_STREAM_ERROR if the source - stream state was inconsistent or if a parameter was invalid, Z_BUF_ERROR - if strm->avail_out was zero. -*/ - -int deflateTune(z_streamp strm, - int good_length, - int max_lazy, - int nice_length, - int max_chain); -/* - Fine tune deflate's internal compression parameters. This should only be - used by someone who understands the algorithm used by zlib's deflate for - searching for the best matching string, and even then only by the most - fanatic optimizer trying to squeeze out the last compressed bit for their - specific input data. Read the deflate.c source code for the meaning of the - max_lazy, good_length, nice_length, and max_chain parameters. - - deflateTune() can be called after deflateInit() or deflateInit2(), and - returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. - */ - -uLong deflateBound(z_streamp strm, - uLong sourceLen); -/* - deflateBound() returns an upper bound on the compressed size after - deflation of sourceLen bytes. It must be called after deflateInit() - or deflateInit2(). This would be used to allocate an output buffer - for deflation in a single pass, and so would be called before deflate(). -*/ - -int deflatePrime(z_streamp strm, - int bits, - int value); -/* - deflatePrime() inserts bits in the deflate output stream. The intent - is that this function is used to start off the deflate output with the - bits leftover from a previous deflate stream when appending to it. As such, - this function can only be used for raw deflate, and must be used before the - first deflate() call after a deflateInit2() or deflateReset(). bits must be - less than or equal to 16, and that many of the least significant bits of - value will be inserted in the output. - - deflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -int deflateSetHeader(z_streamp strm, - gz_headerp head); -/* - deflateSetHeader() provides gzip header information for when a gzip - stream is requested by deflateInit2(). deflateSetHeader() may be called - after deflateInit2() or deflateReset() and before the first call of - deflate(). The text, time, os, extra field, name, and comment information - in the provided gz_header structure are written to the gzip header (xflag is - ignored -- the extra flags are set according to the compression level). The - caller must assure that, if not Z_NULL, name and comment are terminated with - a zero byte, and that if extra is not Z_NULL, that extra_len bytes are - available there. If hcrc is true, a gzip header crc is included. Note that - the current versions of the command-line version of gzip (up through version - 1.3.x) do not support header crc's, and will report that it is a "multi-part - gzip file" and give up. - - If deflateSetHeader is not used, the default gzip header has text false, - the time set to zero, and os set to 255, with no extra, name, or comment - fields. The gzip header is returned to the default state by deflateReset(). - - deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -int inflateInit2(z_streamp strm, - int windowBits); - - This is another version of inflateInit with an extra parameter. The - fields next_in, avail_in, zalloc, zfree and opaque must be initialized - before by the caller. - - The windowBits parameter is the base two logarithm of the maximum window - size (the size of the history buffer). It should be in the range 8..15 for - this version of the library. The default value is 15 if inflateInit is used - instead. windowBits must be greater than or equal to the windowBits value - provided to deflateInit2() while compressing, or it must be equal to 15 if - deflateInit2() was not used. If a compressed stream with a larger window - size is given as input, inflate() will return with the error code - Z_DATA_ERROR instead of trying to allocate a larger window. - - windowBits can also be -8..-15 for raw inflate. In this case, -windowBits - determines the window size. inflate() will then process raw deflate data, - not looking for a zlib or gzip header, not generating a check value, and not - looking for any check values for comparison at the end of the stream. This - is for use with other formats that use the deflate compressed data format - such as zip. Those formats provide their own check values. If a custom - format is developed using the raw deflate format for compressed data, it is - recommended that a check value such as an adler32 or a crc32 be applied to - the uncompressed data as is done in the zlib, gzip, and zip formats. For - most applications, the zlib format should be used as is. Note that comments - above on the use in deflateInit2() applies to the magnitude of windowBits. - - windowBits can also be greater than 15 for optional gzip decoding. Add - 32 to windowBits to enable zlib and gzip decoding with automatic header - detection, or add 16 to decode only the gzip format (the zlib format will - return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is - a crc32 instead of an adler32. - - inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_STREAM_ERROR if a parameter is invalid (such as a null strm). msg - is set to null if there is no error message. inflateInit2 does not perform - any decompression apart from reading the zlib header if present: this will - be done by inflate(). (So next_in and avail_in may be modified, but next_out - and avail_out are unchanged.) -*/ - -int inflateSetDictionary(z_streamp strm, - Bytef* dictionary, - uInt dictLength); -/* - Initializes the decompression dictionary from the given uncompressed byte - sequence. This function must be called immediately after a call of inflate, - if that call returned Z_NEED_DICT. The dictionary chosen by the compressor - can be determined from the adler32 value returned by that call of inflate. - The compressor and decompressor must use exactly the same dictionary (see - deflateSetDictionary). For raw inflate, this function can be called - immediately after inflateInit2() or inflateReset() and before any call of - inflate() to set the dictionary. The application must insure that the - dictionary that was used for compression is provided. - - inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a - parameter is invalid (such as NULL dictionary) or the stream state is - inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the - expected one (incorrect adler32 value). inflateSetDictionary does not - perform any decompression: this will be done by subsequent calls of - inflate(). -*/ - -int inflateSync(z_streamp strm); -/* - Skips invalid compressed data until a full flush point (see above the - description of deflate with Z_FULL_FLUSH) can be found, or until all - available input is skipped. No output is provided. - - inflateSync returns Z_OK if a full flush point has been found, Z_BUF_ERROR - if no more input was provided, Z_DATA_ERROR if no flush point has been found, - or Z_STREAM_ERROR if the stream structure was inconsistent. In the success - case, the application may save the current current value of total_in which - indicates where valid compressed data was found. In the error case, the - application may repeatedly call inflateSync, providing more input each time, - until success or end of the input data. -*/ - -int inflateCopy(z_streamp dest, - z_streamp source); -/* - Sets the destination stream as a complete copy of the source stream. - - This function can be useful when randomly accessing a large stream. The - first pass through the stream can periodically record the inflate state, - allowing restarting inflate at those points when randomly accessing the - stream. - - inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_STREAM_ERROR if the source stream state was inconsistent - (such as zalloc being NULL). msg is left unchanged in both source and - destination. -*/ - -int inflateReset(z_streamp strm); -/* - This function is equivalent to inflateEnd followed by inflateInit, - but does not free and reallocate all the internal decompression state. - The stream will keep attributes that may have been set by inflateInit2. - - inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent (such as zalloc or state being NULL). -*/ - -int inflatePrime(z_streamp strm, - int bits, - int value); -/* - This function inserts bits in the inflate input stream. The intent is - that this function is used to start inflating at a bit position in the - middle of a byte. The provided bits will be used before any bytes are used - from next_in. This function should only be used with raw inflate, and - should be used before the first inflate() call after inflateInit2() or - inflateReset(). bits must be less than or equal to 16, and that many of the - least significant bits of value will be inserted in the input. - - inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -int inflateGetHeader(z_streamp strm, - gz_headerp head); -/* - inflateGetHeader() requests that gzip header information be stored in the - provided gz_header structure. inflateGetHeader() may be called after - inflateInit2() or inflateReset(), and before the first call of inflate(). - As inflate() processes the gzip stream, head->done is zero until the header - is completed, at which time head->done is set to one. If a zlib stream is - being decoded, then head->done is set to -1 to indicate that there will be - no gzip header information forthcoming. Note that Z_BLOCK can be used to - force inflate() to return immediately after header processing is complete - and before any actual data is decompressed. - - The text, time, xflags, and os fields are filled in with the gzip header - contents. hcrc is set to true if there is a header CRC. (The header CRC - was valid if done is set to one.) If extra is not Z_NULL, then extra_max - contains the maximum number of bytes to write to extra. Once done is true, - extra_len contains the actual extra field length, and extra contains the - extra field, or that field truncated if extra_max is less than extra_len. - If name is not Z_NULL, then up to name_max characters are written there, - terminated with a zero unless the length is greater than name_max. If - comment is not Z_NULL, then up to comm_max characters are written there, - terminated with a zero unless the length is greater than comm_max. When - any of extra, name, or comment are not Z_NULL and the respective field is - not present in the header, then that field is set to Z_NULL to signal its - absence. This allows the use of deflateSetHeader() with the returned - structure to duplicate the header. However if those fields are set to - allocated memory, then the application will need to save those pointers - elsewhere so that they can be eventually freed. - - If inflateGetHeader is not used, then the header information is simply - discarded. The header is always checked for validity, including the header - CRC if present. inflateReset() will reset the process to discard the header - information. The application would need to call inflateGetHeader() again to - retrieve the header from the next gzip stream. - - inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source - stream state was inconsistent. -*/ - -/* -int inflateBackInit(z_streamp strm, - int windowBits, - ubyte* window); - - Initialize the internal stream state for decompression using inflateBack() - calls. The fields zalloc, zfree and opaque in strm must be initialized - before the call. If zalloc and zfree are Z_NULL, then the default library- - derived memory allocation routines are used. windowBits is the base two - logarithm of the window size, in the range 8..15. window is a caller - supplied buffer of that size. Except for special applications where it is - assured that deflate was used with small window sizes, windowBits must be 15 - and a 32K byte window must be supplied to be able to decompress general - deflate streams. - - See inflateBack() for the usage of these routines. - - inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of - the paramaters are invalid, Z_MEM_ERROR if the internal state could not - be allocated, or Z_VERSION_ERROR if the version of the library does not - match the version of the header file. -*/ - -alias uint function(void*, ubyte**) in_func; -alias int function(void*, ubyte*, uint) out_func; - -int inflateBack(z_streamp strm, - in_func in_fn, - void* in_desc, - out_func out_fn, - void* out_desc); -/* - inflateBack() does a raw inflate with a single call using a call-back - interface for input and output. This is more efficient than inflate() for - file i/o applications in that it avoids copying between the output and the - sliding window by simply making the window itself the output buffer. This - function trusts the application to not change the output buffer passed by - the output function, at least until inflateBack() returns. - - inflateBackInit() must be called first to allocate the internal state - and to initialize the state with the user-provided window buffer. - inflateBack() may then be used multiple times to inflate a complete, raw - deflate stream with each call. inflateBackEnd() is then called to free - the allocated state. - - A raw deflate stream is one with no zlib or gzip header or trailer. - This routine would normally be used in a utility that reads zip or gzip - files and writes out uncompressed files. The utility would decode the - header and process the trailer on its own, hence this routine expects - only the raw deflate stream to decompress. This is different from the - normal behavior of inflate(), which expects either a zlib or gzip header and - trailer around the deflate stream. - - inflateBack() uses two subroutines supplied by the caller that are then - called by inflateBack() for input and output. inflateBack() calls those - routines until it reads a complete deflate stream and writes out all of the - uncompressed data, or until it encounters an error. The function's - parameters and return types are defined above in the in_func and out_func - typedefs. inflateBack() will call in(in_desc, &buf) which should return the - number of bytes of provided input, and a pointer to that input in buf. If - there is no input available, in() must return zero--buf is ignored in that - case--and inflateBack() will return a buffer error. inflateBack() will call - out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. out() - should return zero on success, or non-zero on failure. If out() returns - non-zero, inflateBack() will return with an error. Neither in() nor out() - are permitted to change the contents of the window provided to - inflateBackInit(), which is also the buffer that out() uses to write from. - The length written by out() will be at most the window size. Any non-zero - amount of input may be provided by in(). - - For convenience, inflateBack() can be provided input on the first call by - setting strm->next_in and strm->avail_in. If that input is exhausted, then - in() will be called. Therefore strm->next_in must be initialized before - calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called - immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in - must also be initialized, and then if strm->avail_in is not zero, input will - initially be taken from strm->next_in[0 .. strm->avail_in - 1]. - - The in_desc and out_desc parameters of inflateBack() is passed as the - first parameter of in() and out() respectively when they are called. These - descriptors can be optionally used to pass any information that the caller- - supplied in() and out() functions need to do their job. - - On return, inflateBack() will set strm->next_in and strm->avail_in to - pass back any unused input that was provided by the last in() call. The - return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR - if in() or out() returned an error, Z_DATA_ERROR if there was a format - error in the deflate stream (in which case strm->msg is set to indicate the - nature of the error), or Z_STREAM_ERROR if the stream was not properly - initialized. In the case of Z_BUF_ERROR, an input or output error can be - distinguished using strm->next_in which will be Z_NULL only if in() returned - an error. If strm->next is not Z_NULL, then the Z_BUF_ERROR was due to - out() returning non-zero. (in() will always be called before out(), so - strm->next_in is assured to be defined if out() returns non-zero.) Note - that inflateBack() cannot return Z_OK. -*/ - -int inflateBackEnd(z_streamp strm); -/* - All memory allocated by inflateBackInit() is freed. - - inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream - state was inconsistent. -*/ - -uLong zlibCompileFlags(); -/* Return flags indicating compile-time options. - - Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: - 1.0: size of uInt - 3.2: size of uLong - 5.4: size of voidpf (pointer) - 7.6: size of z_off_t - - Compiler, assembler, and debug options: - 8: DEBUG - 9: ASMV or ASMINF -- use ASM code - 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention - 11: 0 (reserved) - - One-time table building (smaller code, but not thread-safe if true): - 12: BUILDFIXED -- build static block decoding tables when needed - 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed - 14,15: 0 (reserved) - - Library content (indicates missing functionality): - 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking - deflate code when not needed) - 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect - and decode gzip streams (to avoid linking crc code) - 18-19: 0 (reserved) - - Operation variations (changes in library functionality): - 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate - 21: FASTEST -- deflate algorithm with only one, lowest compression level - 22,23: 0 (reserved) - - The sprintf variant used by gzprintf (zero is best): - 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format - 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! - 26: 0 = returns value, 1 = void -- 1 means inferred string length returned - - Remainder: - 27-31: 0 (reserved) - */ - - - /* utility functions */ - -/* - The following utility functions are implemented on top of the - basic stream-oriented functions. To simplify the interface, some - default options are assumed (compression level and memory usage, - standard memory allocation functions). The source code of these - utility functions can easily be modified if you need special options. -*/ - -int compress(Bytef* dest, - uLongf* destLen, - Bytef* source, - uLong sourceLen); -/* - Compresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be at least the value returned - by compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - This function can be used to compress a whole file at once if the - input file is mmap'ed. - compress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer. -*/ - -int compress2(Bytef* dest, - uLongf* destLen, - Bytef* source, - uLong sourceLen, - int level); -/* - Compresses the source buffer into the destination buffer. The level - parameter has the same meaning as in deflateInit. sourceLen is the byte - length of the source buffer. Upon entry, destLen is the total size of the - destination buffer, which must be at least the value returned by - compressBound(sourceLen). Upon exit, destLen is the actual size of the - compressed buffer. - - compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough - memory, Z_BUF_ERROR if there was not enough room in the output buffer, - Z_STREAM_ERROR if the level parameter is invalid. -*/ - -uLong compressBound(uLong sourceLen); -/* - compressBound() returns an upper bound on the compressed size after - compress() or compress2() on sourceLen bytes. It would be used before - a compress() or compress2() call to allocate the destination buffer. -*/ - -int uncompress(Bytef* dest, - uLongf* destLen, - Bytef* source, - uLong sourceLen); -/* - Decompresses the source buffer into the destination buffer. sourceLen is - the byte length of the source buffer. Upon entry, destLen is the total - size of the destination buffer, which must be large enough to hold the - entire uncompressed data. (The size of the uncompressed data must have - been saved previously by the compressor and transmitted to the decompressor - by some mechanism outside the scope of this compression library.) - Upon exit, destLen is the actual size of the compressed buffer. - This function can be used to decompress a whole file at once if the - input file is mmap'ed. - - uncompress returns Z_OK if success, Z_MEM_ERROR if there was not - enough memory, Z_BUF_ERROR if there was not enough room in the output - buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. -*/ - - -typedef voidp gzFile; - -gzFile gzopen(char* path, char* mode); -/* - Opens a gzip (.gz) file for reading or writing. The mode parameter - is as in fopen ("rb" or "wb") but can also include a compression level - ("wb9") or a strategy: 'f' for filtered data as in "wb6f", 'h' for - Huffman only compression as in "wb1h", or 'R' for run-length encoding - as in "wb1R". (See the description of deflateInit2 for more information - about the strategy parameter.) - - gzopen can be used to read a file which is not in gzip format; in this - case gzread will directly read from the file without decompression. - - gzopen returns NULL if the file could not be opened or if there was - insufficient memory to allocate the (de)compression state; errno - can be checked to distinguish the two cases (if errno is zero, the - zlib error is Z_MEM_ERROR). */ - -gzFile gzdopen(int fd, char* mode); -/* - gzdopen() associates a gzFile with the file descriptor fd. File - descriptors are obtained from calls like open, dup, creat, pipe or - fileno (in the file has been previously opened with fopen). - The mode parameter is as in gzopen. - The next call of gzclose on the returned gzFile will also close the - file descriptor fd, just like fclose(fdopen(fd), mode) closes the file - descriptor fd. If you want to keep fd open, use gzdopen(dup(fd), mode). - gzdopen returns NULL if there was insufficient memory to allocate - the (de)compression state. -*/ - -int gzsetparams(gzFile file, int level, int strategy); -/* - Dynamically update the compression level or strategy. See the description - of deflateInit2 for the meaning of these parameters. - gzsetparams returns Z_OK if success, or Z_STREAM_ERROR if the file was not - opened for writing. -*/ - -int gzread(gzFile file, voidp buf, uint len); -/* - Reads the given number of uncompressed bytes from the compressed file. - If the input file was not in gzip format, gzread copies the given number - of bytes into the buffer. - gzread returns the number of uncompressed bytes actually read (0 for - end of file, -1 for error). */ - -int gzwrite(gzFile file, voidpc buf, uint len); -/* - Writes the given number of uncompressed bytes into the compressed file. - gzwrite returns the number of uncompressed bytes actually written - (0 in case of error). -*/ - -int gzprintf (gzFile file, char* format, ...); -/* - Converts, formats, and writes the args to the compressed file under - control of the format string, as in fprintf. gzprintf returns the number of - uncompressed bytes actually written (0 in case of error). The number of - uncompressed bytes written is limited to 4095. The caller should assure that - this limit is not exceeded. If it is exceeded, then gzprintf() will return - return an error (0) with nothing written. In this case, there may also be a - buffer overflow with unpredictable consequences, which is possible only if - zlib was compiled with the insecure functions sprintf() or vsprintf() - because the secure snprintf() or vsnprintf() functions were not available. -*/ - -int gzputs(gzFile file, char* s); -/* - Writes the given null-terminated string to the compressed file, excluding - the terminating null character. - gzputs returns the number of characters written, or -1 in case of error. -*/ - -char* gzgets(gzFile file, char* buf, int len); -/* - Reads bytes from the compressed file until len-1 characters are read, or - a newline character is read and transferred to buf, or an end-of-file - condition is encountered. The string is then terminated with a null - character. - gzgets returns buf, or Z_NULL in case of error. -*/ - -int gzputc(gzFile file, int c); -/* - Writes c, converted to an unsigned char, into the compressed file. - gzputc returns the value that was written, or -1 in case of error. -*/ - -int gzgetc (gzFile file); -/* - Reads one byte from the compressed file. gzgetc returns this byte - or -1 in case of end of file or error. -*/ - -int gzungetc(int c, gzFile file); -/* - Push one character back onto the stream to be read again later. - Only one character of push-back is allowed. gzungetc() returns the - character pushed, or -1 on failure. gzungetc() will fail if a - character has been pushed but not read yet, or if c is -1. The pushed - character will be discarded if the stream is repositioned with gzseek() - or gzrewind(). -*/ - -int gzflush(gzFile file, int flush); -/* - Flushes all pending output into the compressed file. The parameter - flush is as in the deflate() function. The return value is the zlib - error number (see function gzerror below). gzflush returns Z_OK if - the flush parameter is Z_FINISH and all output could be flushed. - gzflush should be called only when strictly necessary because it can - degrade compression. -*/ - -z_off_t gzseek (gzFile file, z_off_t offset, int whence); -/* - Sets the starting position for the next gzread or gzwrite on the - given compressed file. The offset represents a number of bytes in the - uncompressed data stream. The whence parameter is defined as in lseek(2); - the value SEEK_END is not supported. - If the file is opened for reading, this function is emulated but can be - extremely slow. If the file is opened for writing, only forward seeks are - supported; gzseek then compresses a sequence of zeroes up to the new - starting position. - - gzseek returns the resulting offset location as measured in bytes from - the beginning of the uncompressed stream, or -1 in case of error, in - particular if the file is opened for writing and the new starting position - would be before the current position. -*/ - -int gzrewind(gzFile file); -/* - Rewinds the given file. This function is supported only for reading. - - gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET) -*/ - -z_off_t gztell (gzFile file); -/* - Returns the starting position for the next gzread or gzwrite on the - given compressed file. This position represents a number of bytes in the - uncompressed data stream. - - gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) -*/ - -int gzeof(gzFile file); -/* - Returns 1 when EOF has previously been detected reading the given - input stream, otherwise zero. -*/ - -int gzdirect(gzFile file); -/* - Returns 1 if file is being read directly without decompression, otherwise - zero. -*/ - -int gzclose(gzFile file); -/* - Flushes all pending output if necessary, closes the compressed file - and deallocates all the (de)compression state. The return value is the zlib - error number (see function gzerror below). -*/ - -char* gzerror(gzFile file, int* errnum); -/* - Returns the error message for the last error which occurred on the - given compressed file. errnum is set to zlib error number. If an - error occurred in the file system and not in the compression library, - errnum is set to Z_ERRNO and the application may consult errno - to get the exact error code. -*/ - -void gzclearerr(gzFile file); -/* - Clears the error and end-of-file flags for file. This is analogous to the - clearerr() function in stdio. This is useful for continuing to read a gzip - file that is being written concurrently. -*/ - - /* checksum functions */ - -/* - These functions are not related to compression but are exported - anyway because they might be useful in applications using the - compression library. -*/ - -uLong adler32(uLong adler, Bytef* buf, uInt len); -/* - Update a running Adler-32 checksum with the bytes buf[0..len-1] and - return the updated checksum. If buf is NULL, this function returns - the required initial value for the checksum. - An Adler-32 checksum is almost as reliable as a CRC32 but can be computed - much faster. Usage example: - - uLong adler = adler32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - adler = adler32(adler, buffer, length); - } - if (adler != original_adler) error(); -*/ - -uLong adler32_combine(uLong adler1, uLong adler2, z_off_t len2); -/* - Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 - and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for - each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of - seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. -*/ - -uLong crc32(uLong crc, Bytef* buf, uInt len); -/* - Update a running CRC-32 with the bytes buf[0..len-1] and return the - updated CRC-32. If buf is NULL, this function returns the required initial - value for the for the crc. Pre- and post-conditioning (one's complement) is - performed within this function so it shouldn't be done by the application. - Usage example: - - uLong crc = crc32(0L, Z_NULL, 0); - - while (read_buffer(buffer, length) != EOF) { - crc = crc32(crc, buffer, length); - } - if (crc != original_crc) error(); -*/ - -uLong crc32_combine(uLong crc1, uLong crc2, z_off_t len2); - -/* - Combine two CRC-32 check values into one. For two sequences of bytes, - seq1 and seq2 with lengths len1 and len2, CRC-32 check values were - calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 - check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. -*/ - - - /* various hacks, don't look :) */ - -/* deflateInit and inflateInit are macros to allow checking the zlib version - * and the compiler's view of z_stream: - */ -int deflateInit_(z_streamp strm, - int level, - char* ver, - int stream_size); -int inflateInit_(z_streamp strm, - char* ver, - int stream_size); -int deflateInit2_(z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy, - char* ver, - int stream_size); -int inflateInit2_(z_streamp strm, - int windowBits, - char* ver, - int stream_size); -int inflateBackInit_(z_streamp strm, - int windowBits, - ubyte* window, - char* ver, - int stream_size); - -extern (D) int deflateInit(z_streamp strm, - int level) -{ - return deflateInit_(strm, - level, - ZLIB_VERSION, - z_stream.sizeof); -} - -extern (D) int inflateInit(z_streamp strm) -{ - return inflateInit_(strm, - ZLIB_VERSION, - z_stream.sizeof); -} - -extern (D) int deflateInit2(z_streamp strm, - int level, - int method, - int windowBits, - int memLevel, - int strategy) -{ - return deflateInit2_(strm, - level, - method, - windowBits, - memLevel, - strategy, - ZLIB_VERSION, - z_stream.sizeof); -} - -extern (D) int inflateInit2(z_streamp strm, - int windowBits) -{ - return inflateInit2_(strm, - windowBits, - ZLIB_VERSION, - z_stream.sizeof); -} - -extern (D) int inflateBackInit(z_streamp strm, - int windowBits, - ubyte* window) -{ - return inflateBackInit_(strm, - windowBits, - window, - ZLIB_VERSION, - z_stream.sizeof); -} - -char* zError(int); -int inflateSyncPoint(z_streamp z); -uLongf* get_crc_table(); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Crc32.d --- a/tango/tango/io/digest/Crc32.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 James Pelcis. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: August 2006 - - author: James Pelcis - -*******************************************************************************/ - -module tango.io.digest.Crc32; - -public import tango.io.digest.Digest; - - -/** This class implements the CRC-32 checksum algorithm. - The digest returned is a little-endian 4 byte string. */ -final class Crc32 : Digest -{ - private uint[256] table; - private uint result = 0xffffffff; - - /** - * Create a cloned CRC32 - */ - this (Crc32 crc32) - { - this.table[] = crc32.table[]; - this.result = crc32.result; - } - - /** - * Prepare Crc32 to checksum the data with a given polynomial. - * - * Params: - * polynomial = The magic CRC number to base calculations on. The - * default compatible with ZIP, PNG, ethernet and others. Note: This - * default value has poor error correcting properties. - */ - this (uint polynomial = 0xEDB88320U) - { - for (int i = 0; i < 256; i++) - { - uint value = i; - for (int j = 8; j > 0; j--) - { - if (value & 1) { - value &= 0xFFFFFFFE; - value /= 2; - value &= 0x7FFFFFFF; - value ^= polynomial; - } - else - { - value &= 0xFFFFFFFE; - value /= 2; - value &= 0x7FFFFFFF; - } - } - table[i] = value; - } - } - - /** */ - override void update (void[] input) - { - uint r = result; // DMD optimization - foreach (ubyte value; cast(ubyte[]) input) - { - auto i = cast(ubyte) r;// & 0xff; - i ^= value; - r &= 0xFFFFFF00; - r /= 0x100; - r &= 16777215; - r ^= table[i]; - } - result = r; - } - - /** The Crc32 digestSize is 4 */ - override uint digestSize () - { - return 4; - } - - /** */ - override ubyte[] binaryDigest(ubyte[] buf = null) { - if (buf.length < 4) - buf.length = 4; - uint v = ~result; - buf[3] = cast(ubyte) (v >> 24); - buf[2] = cast(ubyte) (v >> 16); - buf[1] = cast(ubyte) (v >> 8); - buf[0] = cast(ubyte) (v); - result = 0xffffffff; - return buf; - } - - /** Returns the Crc32 digest as a uint */ - uint crc32Digest() { - uint ret = ~result; - result = 0xffffffff; - return ret; - } -} - -version (UnitTest) -{ - unittest - { - scope c = new Crc32(); - static ubyte[] data = [1,2,3,4,5,6,7,8,9,10]; - c.update(data); - assert(c.binaryDigest() == cast(ubyte[]) x"7b572025"); - c.update(data); - assert(c.crc32Digest == 0x2520577b); - c.update(data); - assert(c.hexDigest() == "7b572025"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Digest.d --- a/tango/tango/io/digest/Digest.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -/****************************************************************************** - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module defines the Digest interface. - -******************************************************************************/ - -module tango.io.digest.Digest; - -private import tango.stdc.stdlib : alloca; - -/******************************************************************************* - - The DigestTransform interface defines the interface of message - digest algorithms, such as MD5 and SHA. Message digests are - secure hash functions that take a message of arbitrary length - and produce a fix length digest as output. - - A object implementing the DigestTransform should start out initialized. - The data is processed though calls to the update method. Once all data - has been sent to the algorithm, the digest is finalized and computed - with the digest method. - - The digest method may only be called once. After the digest - method has been called, the algorithm is reset to its initial - state. - - Using the update method, data may be processed piece by piece, - which is useful for cases involving streams of data. - - For example: - --- - // create an MD5 hash algorithm - Md5 hash = new Md5(); - - // process some data - hash.update("The quick brown fox"); - - // process some more data - hash.update(" jumps over the lazy dog"); - - // conclude algorithm and produce digest - ubyte[] digest = hash.binaryDigest(); - --- - -******************************************************************************/ - -abstract class Digest -{ - /********************************************************************* - - Processes data - - Remarks: - Updates the hash algorithm state with new data - - *********************************************************************/ - - abstract void update(void[] data); - - /******************************************************************** - - Computes the digest and resets the state - - Params: - buffer = a buffer can be supplied for the digest to be - written to - - Remarks: - If the buffer is not large enough to hold the - digest, a new buffer is allocated and returned. - The algorithm state is always reset after a call to - binaryDigest. Use the digestSize method to find out how - large the buffer has to be. - - *********************************************************************/ - - abstract ubyte[] binaryDigest(ubyte[] buffer = null); - - /******************************************************************** - - Returns the size in bytes of the digest - - Returns: - the size of the digest in bytes - - Remarks: - Returns the size of the digest. - - *********************************************************************/ - - abstract uint digestSize(); - - /********************************************************************* - - Computes the digest as a hex string and resets the state - - Params: - buffer = a buffer can be supplied in which the digest - will be written. It needs to be able to hold - 2 * digestSize chars - - Remarks: - If the buffer is not large enough to hold the hex digest, - a new buffer is allocated and returned. The algorithm - state is always reset after a call to hexDigest. - - *********************************************************************/ - - char[] hexDigest (char[] buffer = null) - { - uint ds = digestSize(); - - if (buffer.length < ds * 2) - buffer.length = ds * 2; - - ubyte[] buf = (cast(ubyte *) alloca(ds))[0..ds]; - ubyte[] ret = binaryDigest(buf); - assert(ret.ptr == buf.ptr); - - static char[] hexdigits = "0123456789abcdef"; - int i = 0; - - foreach (b; buf) - { - buffer[i++] = hexdigits[b >> 4]; - buffer[i++] = hexdigits[b & 0xf]; - } - - return buffer; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Md2.d --- a/tango/tango/io/digest/Md2.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,272 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the MD2 Message Digest Algorithm as described - by RFC 1319 The MD2 Message-Digest Algorithm. B. Kaliski. April 1992. - -*******************************************************************************/ - -module tango.io.digest.Md2; - -public import tango.io.digest.Digest; - -private import tango.io.digest.MerkleDamgard; - -/******************************************************************************* - -*******************************************************************************/ - -class Md2 : MerkleDamgard -{ - private ubyte[16] C, - state; - - /*********************************************************************** - - Construct an Md2 - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - protected override void reset() - { - super.reset(); - state[] = 0; - C[] = 0; - } - - /*********************************************************************** - - Obtain the digest - - Returns: - the digest - - Remarks: - Returns a digest of the current cipher state, this may - be the final digest, or a digest of the state between - calls to update() - - ***********************************************************************/ - - protected override void createDigest(ubyte[] buf) - { - buf[] = state; - } - - /*********************************************************************** - - The MD 2 digest size is 16 bytes - - ***********************************************************************/ - - uint digestSize() { return 16; } - - /*********************************************************************** - - block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For MD2 the blockSize is 16. - - ***********************************************************************/ - - protected override uint blockSize() - { - return 16; - } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For MD2 the addSize is - 0 - - ***********************************************************************/ - - protected override uint addSize() - { - return 0; - } - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding - for the final call to transform(). This padding will fill - the cipher buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - protected override void padMessage (ubyte[] data) - { - /* Padding is performed as follows: "i" bytes of value "i" - * are appended to the message so that the length in bytes - * of the padded message becomes congruent to 0, modulo 16. - * At least one byte and at most 16 bytes are appended. - */ - data[0..$] = cast(ubyte) data.length; - } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the - remaining data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform (ubyte[] input) - { - ubyte[48] X; - uint t,i,j; - - X[0..16] = state[]; - X[16..32] = input[]; - - for (i = 0; i < 16; i++) - X[i+32] = cast(ubyte) (state[i] ^ input[i]); - - t = 0; - for (i = 0; i < 18; i++) - { - for (j = 0; j < 48; j++) - t = X[j] ^= PI[t]; - t = (t + i) & 0xff; - } - - state[] = X[0..16]; - - t = C[15]; - - for (i = 0; i < 16; i++) - t = C[i] ^= PI[input[i] ^ t]; - } - - /*********************************************************************** - - Final processing of cipher. - - Remarks: - This method is called after the final transform just prior to - the creation of the final digest. The MD2 algorithm requires - an additional step at this stage. Future ciphers may or may not - require this method. - - ***********************************************************************/ - - protected override void extend() - { - transform(C); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private const ubyte[256] PI = -[ - 41, 46, 67, 201, 162, 216, 124, 1, 61, 54, 84, 161, 236, 240, 6, - 19, 98, 167, 5, 243, 192, 199, 115, 140, 152, 147, 43, 217, 188, - 76, 130, 202, 30, 155, 87, 60, 253, 212, 224, 22, 103, 66, 111, 24, - 138, 23, 229, 18, 190, 78, 196, 214, 218, 158, 222, 73, 160, 251, - 245, 142, 187, 47, 238, 122, 169, 104, 121, 145, 21, 178, 7, 63, - 148, 194, 16, 137, 11, 34, 95, 33, 128, 127, 93, 154, 90, 144, 50, - 39, 53, 62, 204, 231, 191, 247, 151, 3, 255, 25, 48, 179, 72, 165, - 181, 209, 215, 94, 146, 42, 172, 86, 170, 198, 79, 184, 56, 210, - 150, 164, 125, 182, 118, 252, 107, 226, 156, 116, 4, 241, 69, 157, - 112, 89, 100, 113, 135, 32, 134, 91, 207, 101, 230, 45, 168, 2, 27, - 96, 37, 173, 174, 176, 185, 246, 28, 70, 97, 105, 52, 64, 126, 15, - 85, 71, 163, 35, 221, 81, 175, 58, 195, 92, 249, 206, 186, 197, - 234, 38, 44, 83, 13, 110, 133, 40, 132, 9, 211, 223, 205, 244, 65, - 129, 77, 82, 106, 220, 55, 200, 108, 193, 171, 250, 36, 225, 123, - 8, 12, 189, 177, 74, 120, 136, 149, 139, 227, 99, 232, 109, 233, - 203, 213, 254, 59, 0, 29, 57, 242, 239, 183, 14, 102, 88, 208, 228, - 166, 119, 114, 248, 235, 117, 75, 10, 49, 68, 80, 180, 143, 237, - 31, 26, 219, 153, 141, 51, 159, 17, 131, 20 -]; - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "", - "a", - "abc", - "message digest", - "abcdefghijklmnopqrstuvwxyz", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890" - ]; - - static char[][] results = - [ - "8350e5a3e24c153df2275c9f80692773", - "32ec01ec4a6dac72c0ab96fb34c0b5d1", - "da853b0d3f88d99b30283a69e6ded6bb", - "ab4f496bfb2a530b219ff33031fe06b0", - "4e8ddff3650292ab5a4108c3aa47940b", - "da33def2a42df13975352846c30338cd", - "d5976f79d83d3a0dc9806c3c66f3efd8" - ]; - - Md2 h = new Md2(); - - foreach (int i, char[] s; strings) - { - h.update(s); - char[] d = h.hexDigest(); - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Md4.d --- a/tango/tango/io/digest/Md4.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,375 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the MD4 Message Digest Algorithm as described - by RFC 1320 The MD4 Message-Digest Algorithm. R. Rivest. April 1992. - -*******************************************************************************/ - -module tango.io.digest.Md4; - -public import tango.io.digest.Digest; - -private import tango.io.digest.MerkleDamgard; - -/******************************************************************************* - -*******************************************************************************/ - -class Md4 : MerkleDamgard -{ - protected uint[4] context; - private const ubyte padChar = 0x80; - - /*********************************************************************** - - Construct an Md4 - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - The MD 4 digest size is 16 bytes - - ***********************************************************************/ - - uint digestSize() { return 16; } - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - override void reset() - { - super.reset(); - context[] = initial[]; - } - - /*********************************************************************** - - Obtain the digest - - Returns: - the digest - - Remarks: - Returns a digest of the current cipher state, this may be the - final digest, or a digest of the state between calls to update() - - ***********************************************************************/ - - override void createDigest(ubyte[] buf) - { - version (BigEndian) - ByteSwap.swap32 (context.ptr, context.length * uint.sizeof); - - buf[] = cast(ubyte[]) context; - } - - /*********************************************************************** - - block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For MD4 the blockSize is 64. - - ***********************************************************************/ - - protected override uint blockSize() { return 64; } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For MD4 the addSize is 8. - - ***********************************************************************/ - - protected override uint addSize() { return 8; } - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding for - the final call to transform(). This padding will fill the cipher - buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - protected override void padMessage(ubyte[] data) - { - data[0] = padChar; - data[1..$] = 0; - } - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the cipher buffer to fill with padding - length = the length of the data which has been ciphered - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - ciphered. - - ***********************************************************************/ - - protected override void padLength(ubyte[] data, ulong length) - { - length <<= 3; - littleEndian64((cast(ubyte*)&length)[0..8],cast(ulong[]) data); - } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform(ubyte[] input) - { - uint a,b,c,d; - uint[16] x; - - littleEndian32(input,x); - - a = context[0]; - b = context[1]; - c = context[2]; - d = context[3]; - - /* Round 1 */ - ff(a, b, c, d, x[ 0], S11, 0); /* 1 */ - ff(d, a, b, c, x[ 1], S12, 0); /* 2 */ - ff(c, d, a, b, x[ 2], S13, 0); /* 3 */ - ff(b, c, d, a, x[ 3], S14, 0); /* 4 */ - ff(a, b, c, d, x[ 4], S11, 0); /* 5 */ - ff(d, a, b, c, x[ 5], S12, 0); /* 6 */ - ff(c, d, a, b, x[ 6], S13, 0); /* 7 */ - ff(b, c, d, a, x[ 7], S14, 0); /* 8 */ - ff(a, b, c, d, x[ 8], S11, 0); /* 9 */ - ff(d, a, b, c, x[ 9], S12, 0); /* 10 */ - ff(c, d, a, b, x[10], S13, 0); /* 11 */ - ff(b, c, d, a, x[11], S14, 0); /* 12 */ - ff(a, b, c, d, x[12], S11, 0); /* 13 */ - ff(d, a, b, c, x[13], S12, 0); /* 14 */ - ff(c, d, a, b, x[14], S13, 0); /* 15 */ - ff(b, c, d, a, x[15], S14, 0); /* 16 */ - - /* Round 2 */ - gg(a, b, c, d, x[ 0], S21, 0x5a827999); /* 17 */ - gg(d, a, b, c, x[ 4], S22, 0x5a827999); /* 18 */ - gg(c, d, a, b, x[ 8], S23, 0x5a827999); /* 19 */ - gg(b, c, d, a, x[12], S24, 0x5a827999); /* 20 */ - gg(a, b, c, d, x[ 1], S21, 0x5a827999); /* 21 */ - gg(d, a, b, c, x[ 5], S22, 0x5a827999); /* 22 */ - gg(c, d, a, b, x[ 9], S23, 0x5a827999); /* 23 */ - gg(b, c, d, a, x[13], S24, 0x5a827999); /* 24 */ - gg(a, b, c, d, x[ 2], S21, 0x5a827999); /* 25 */ - gg(d, a, b, c, x[ 6], S22, 0x5a827999); /* 26 */ - gg(c, d, a, b, x[10], S23, 0x5a827999); /* 27 */ - gg(b, c, d, a, x[14], S24, 0x5a827999); /* 28 */ - gg(a, b, c, d, x[ 3], S21, 0x5a827999); /* 29 */ - gg(d, a, b, c, x[ 7], S22, 0x5a827999); /* 30 */ - gg(c, d, a, b, x[11], S23, 0x5a827999); /* 31 */ - gg(b, c, d, a, x[15], S24, 0x5a827999); /* 32 */ - - /* Round 3 */ - hh(a, b, c, d, x[ 0], S31, 0x6ed9eba1); /* 33 */ - hh(d, a, b, c, x[ 8], S32, 0x6ed9eba1); /* 34 */ - hh(c, d, a, b, x[ 4], S33, 0x6ed9eba1); /* 35 */ - hh(b, c, d, a, x[12], S34, 0x6ed9eba1); /* 36 */ - hh(a, b, c, d, x[ 2], S31, 0x6ed9eba1); /* 37 */ - hh(d, a, b, c, x[10], S32, 0x6ed9eba1); /* 38 */ - hh(c, d, a, b, x[ 6], S33, 0x6ed9eba1); /* 39 */ - hh(b, c, d, a, x[14], S34, 0x6ed9eba1); /* 40 */ - hh(a, b, c, d, x[ 1], S31, 0x6ed9eba1); /* 41 */ - hh(d, a, b, c, x[ 9], S32, 0x6ed9eba1); /* 42 */ - hh(c, d, a, b, x[ 5], S33, 0x6ed9eba1); /* 43 */ - hh(b, c, d, a, x[13], S34, 0x6ed9eba1); /* 44 */ - hh(a, b, c, d, x[ 3], S31, 0x6ed9eba1); /* 45 */ - hh(d, a, b, c, x[11], S32, 0x6ed9eba1); /* 46 */ - hh(c, d, a, b, x[ 7], S33, 0x6ed9eba1); /* 47 */ - hh(b, c, d, a, x[15], S34, 0x6ed9eba1); /* 48 */ - - context[0] += a; - context[1] += b; - context[2] += c; - context[3] += d; - - x[] = 0; - } - - /*********************************************************************** - - ***********************************************************************/ - - protected static uint f(uint x, uint y, uint z) - { - return (x&y)|(~x&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - protected static uint h(uint x, uint y, uint z) - { - return x^y^z; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint g(uint x, uint y, uint z) - { - return (x&y)|(x&z)|(y&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void ff(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += f(b, c, d) + x + ac; - a = rotateLeft(a, s); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void gg(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += g(b, c, d) + x + ac; - a = rotateLeft(a, s); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void hh(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += h(b, c, d) + x + ac; - a = rotateLeft(a, s); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static const uint[4] initial = - [ - 0x67452301, - 0xefcdab89, - 0x98badcfe, - 0x10325476 - ]; - - /*********************************************************************** - - ***********************************************************************/ - - private static enum - { - S11 = 3, - S12 = 7, - S13 = 11, - S14 = 19, - S21 = 3, - S22 = 5, - S23 = 9, - S24 = 13, - S31 = 3, - S32 = 9, - S33 = 11, - S34 = 15, - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "", - "a", - "abc", - "message digest", - "abcdefghijklmnopqrstuvwxyz", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890" - ]; - - static char[][] results = - [ - "31d6cfe0d16ae931b73c59d7e0c089c0", - "bde52cb31de33e46245e05fbdbd6fb24", - "a448017aaf21d8525fc10ae87aa6729d", - "d9130a8164549fe818874806e1c7014b", - "d79e1c308aa5bbcdeea8ed63df412da9", - "043f8582f241db351ce627e153e7f0e4", - "e33b4ddc9c38f2199c3e7b164fcc0536" - ]; - - Md4 h = new Md4(); - - foreach (int i, char[] s; strings) - { - h.update(s); - char[] d = h.hexDigest; - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Md5.d --- a/tango/tango/io/digest/Md5.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,272 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the MD5 Message Digest Algorithm as described - by RFC 1321 The MD5 Message-Digest Algorithm. R. Rivest. April 1992. - -*******************************************************************************/ - -module tango.io.digest.Md5; - -public import tango.io.digest.Md4; - -private import tango.io.digest.MerkleDamgard; - -/******************************************************************************* - -*******************************************************************************/ - -final class Md5 : Md4 -{ - /*********************************************************************** - - ***********************************************************************/ - - private enum - { - S11 = 7, - S12 = 12, - S13 = 17, - S14 = 22, - S21 = 5, - S22 = 9, - S23 = 14, - S24 = 20, - S31 = 4, - S32 = 11, - S33 = 16, - S34 = 23, - S41 = 6, - S42 = 10, - S43 = 15, - S44 = 21 - }; - - /*********************************************************************** - - Construct an Md5 - - ***********************************************************************/ - - this() { } - - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform(ubyte[] input) - { - uint a,b,c,d; - uint[16] x; - - littleEndian32(input,x); - - a = context[0]; - b = context[1]; - c = context[2]; - d = context[3]; - - /* Round 1 */ - ff(a, b, c, d, x[ 0], S11, 0xd76aa478); /* 1 */ - ff(d, a, b, c, x[ 1], S12, 0xe8c7b756); /* 2 */ - ff(c, d, a, b, x[ 2], S13, 0x242070db); /* 3 */ - ff(b, c, d, a, x[ 3], S14, 0xc1bdceee); /* 4 */ - ff(a, b, c, d, x[ 4], S11, 0xf57c0faf); /* 5 */ - ff(d, a, b, c, x[ 5], S12, 0x4787c62a); /* 6 */ - ff(c, d, a, b, x[ 6], S13, 0xa8304613); /* 7 */ - ff(b, c, d, a, x[ 7], S14, 0xfd469501); /* 8 */ - ff(a, b, c, d, x[ 8], S11, 0x698098d8); /* 9 */ - ff(d, a, b, c, x[ 9], S12, 0x8b44f7af); /* 10 */ - ff(c, d, a, b, x[10], S13, 0xffff5bb1); /* 11 */ - ff(b, c, d, a, x[11], S14, 0x895cd7be); /* 12 */ - ff(a, b, c, d, x[12], S11, 0x6b901122); /* 13 */ - ff(d, a, b, c, x[13], S12, 0xfd987193); /* 14 */ - ff(c, d, a, b, x[14], S13, 0xa679438e); /* 15 */ - ff(b, c, d, a, x[15], S14, 0x49b40821); /* 16 */ - - /* Round 2 */ - gg(a, b, c, d, x[ 1], S21, 0xf61e2562); /* 17 */ - gg(d, a, b, c, x[ 6], S22, 0xc040b340); /* 18 */ - gg(c, d, a, b, x[11], S23, 0x265e5a51); /* 19 */ - gg(b, c, d, a, x[ 0], S24, 0xe9b6c7aa); /* 20 */ - gg(a, b, c, d, x[ 5], S21, 0xd62f105d); /* 21 */ - gg(d, a, b, c, x[10], S22, 0x2441453); /* 22 */ - gg(c, d, a, b, x[15], S23, 0xd8a1e681); /* 23 */ - gg(b, c, d, a, x[ 4], S24, 0xe7d3fbc8); /* 24 */ - gg(a, b, c, d, x[ 9], S21, 0x21e1cde6); /* 25 */ - gg(d, a, b, c, x[14], S22, 0xc33707d6); /* 26 */ - gg(c, d, a, b, x[ 3], S23, 0xf4d50d87); /* 27 */ - gg(b, c, d, a, x[ 8], S24, 0x455a14ed); /* 28 */ - gg(a, b, c, d, x[13], S21, 0xa9e3e905); /* 29 */ - gg(d, a, b, c, x[ 2], S22, 0xfcefa3f8); /* 30 */ - gg(c, d, a, b, x[ 7], S23, 0x676f02d9); /* 31 */ - gg(b, c, d, a, x[12], S24, 0x8d2a4c8a); /* 32 */ - - /* Round 3 */ - hh(a, b, c, d, x[ 5], S31, 0xfffa3942); /* 33 */ - hh(d, a, b, c, x[ 8], S32, 0x8771f681); /* 34 */ - hh(c, d, a, b, x[11], S33, 0x6d9d6122); /* 35 */ - hh(b, c, d, a, x[14], S34, 0xfde5380c); /* 36 */ - hh(a, b, c, d, x[ 1], S31, 0xa4beea44); /* 37 */ - hh(d, a, b, c, x[ 4], S32, 0x4bdecfa9); /* 38 */ - hh(c, d, a, b, x[ 7], S33, 0xf6bb4b60); /* 39 */ - hh(b, c, d, a, x[10], S34, 0xbebfbc70); /* 40 */ - hh(a, b, c, d, x[13], S31, 0x289b7ec6); /* 41 */ - hh(d, a, b, c, x[ 0], S32, 0xeaa127fa); /* 42 */ - hh(c, d, a, b, x[ 3], S33, 0xd4ef3085); /* 43 */ - hh(b, c, d, a, x[ 6], S34, 0x4881d05); /* 44 */ - hh(a, b, c, d, x[ 9], S31, 0xd9d4d039); /* 45 */ - hh(d, a, b, c, x[12], S32, 0xe6db99e5); /* 46 */ - hh(c, d, a, b, x[15], S33, 0x1fa27cf8); /* 47 */ - hh(b, c, d, a, x[ 2], S34, 0xc4ac5665); /* 48 */ - - /* Round 4 */ /* Md5 not md4 */ - ii(a, b, c, d, x[ 0], S41, 0xf4292244); /* 49 */ - ii(d, a, b, c, x[ 7], S42, 0x432aff97); /* 50 */ - ii(c, d, a, b, x[14], S43, 0xab9423a7); /* 51 */ - ii(b, c, d, a, x[ 5], S44, 0xfc93a039); /* 52 */ - ii(a, b, c, d, x[12], S41, 0x655b59c3); /* 53 */ - ii(d, a, b, c, x[ 3], S42, 0x8f0ccc92); /* 54 */ - ii(c, d, a, b, x[10], S43, 0xffeff47d); /* 55 */ - ii(b, c, d, a, x[ 1], S44, 0x85845dd1); /* 56 */ - ii(a, b, c, d, x[ 8], S41, 0x6fa87e4f); /* 57 */ - ii(d, a, b, c, x[15], S42, 0xfe2ce6e0); /* 58 */ - ii(c, d, a, b, x[ 6], S43, 0xa3014314); /* 59 */ - ii(b, c, d, a, x[13], S44, 0x4e0811a1); /* 60 */ - ii(a, b, c, d, x[ 4], S41, 0xf7537e82); /* 61 */ - ii(d, a, b, c, x[11], S42, 0xbd3af235); /* 62 */ - ii(c, d, a, b, x[ 2], S43, 0x2ad7d2bb); /* 63 */ - ii(b, c, d, a, x[ 9], S44, 0xeb86d391); /* 64 */ - - context[0] += a; - context[1] += b; - context[2] += c; - context[3] += d; - - x[] = 0; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint g(uint x, uint y, uint z) - { - return (x&z)|(y&~z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint i(uint x, uint y, uint z) - { - return y^(x|~z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void ff(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += f(b, c, d) + x + ac; - a = rotateLeft(a, s); - a += b; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void gg(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += g(b, c, d) + x + ac; - a = rotateLeft(a, s); - a += b; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void hh(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += h(b, c, d) + x + ac; - a = rotateLeft(a, s); - a += b; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void ii(inout uint a, uint b, uint c, uint d, uint x, uint s, uint ac) - { - a += i(b, c, d) + x + ac; - a = rotateLeft(a, s); - a += b; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "", - "a", - "abc", - "message digest", - "abcdefghijklmnopqrstuvwxyz", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890" - ]; - - static char[][] results = - [ - "d41d8cd98f00b204e9800998ecf8427e", - "0cc175b9c0f1b6a831c399e269772661", - "900150983cd24fb0d6963f7d28e17f72", - "f96b697d7cb7938d525a2f31aaf161d0", - "c3fcd3d76192e4007dfb496cca67e13b", - "d174ab98d277d9f5a5611c2c9f419d9f", - "57edf4a22be3c955ac49da2e2107b67a" - ]; - - Md5 h = new Md5(); - - foreach (int i, char[] s; strings) - { - h.update(cast(ubyte[]) s); - char[] d = h.hexDigest; - - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/MerkleDamgard.d --- a/tango/tango/io/digest/MerkleDamgard.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,399 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements a generic Merkle-Damgard hash function - -*******************************************************************************/ - -module tango.io.digest.MerkleDamgard; - -public import tango.core.ByteSwap; - -public import tango.io.digest.Digest; - -/******************************************************************************* - - Extending MerkleDamgard to create a custom hash function requires - the implementation of a number of abstract methods. These include: - --- - public uint digestSize(); - protected void reset(); - protected void createDigest(ubyte[] buf); - protected uint blockSize(); - protected uint addSize(); - protected void padMessage(ubyte[] data); - protected void transform(ubyte[] data); - --- - - In addition there exist two further abstract methods; these methods - have empty default implementations since in some cases they are not - required: - --- - protected abstract void padLength(ubyte[] data, ulong length); - protected abstract void extend(); - --- - - The method padLength() is required to implement the SHA series of - Hash functions and also the Tiger algorithm. Method extend() is - required only to implement the MD2 digest. - - The basic sequence of internal events is as follows: - $(UL - $(LI transform(), 0 or more times) - $(LI padMessage()) - $(LI padLength()) - $(LI transform()) - $(LI extend()) - $(LI createDigest()) - $(LI reset()) - ) - -*******************************************************************************/ - -package class MerkleDamgard : Digest -{ - private uint bytes; - private ubyte[] buffer; - - /*********************************************************************** - - Constructs the digest - - Params: - buf = a buffer with enough space to hold the digest - - Remarks: - Constructs the digest. - - ***********************************************************************/ - - protected abstract void createDigest(ubyte[] buf); - - /*********************************************************************** - - Digest block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). - - ***********************************************************************/ - - protected abstract uint blockSize(); - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which - uses the length of the data which has been fed to the - algorithm, this padding is carried out by the - padLength method. - - ***********************************************************************/ - - protected abstract uint addSize(); - - /*********************************************************************** - - Pads the digest data - - Params: - data = a slice of the digest buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate - padding for the final call to transform(). This - padding will fill the message data buffer up to - blockSize()-addSize(). - - ***********************************************************************/ - - protected abstract void padMessage(ubyte[] data); - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the digest buffer to fill with padding - length = the length of the data which has been processed - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - processed. - - ***********************************************************************/ - - protected void padLength(ubyte[] data, ulong length) {} - - /*********************************************************************** - - Performs the digest on a block of data - - Params: - data = the block of data to digest - - Remarks: - The actual digest algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected abstract void transform(ubyte[] data); - - /*********************************************************************** - - Final processing of digest. - - Remarks: - This method is called after the final transform just prior to - the creation of the final digest. The MD2 algorithm requires - an additional step at this stage. Future digests may or may not - require this method. - - ***********************************************************************/ - - protected void extend() {} - - /*********************************************************************** - - Construct a digest - - Remarks: - Constructs the internal buffer for use by the digest, the buffer - size (in bytes) is defined by the abstract method blockSize(). - - ***********************************************************************/ - - this() - { - buffer = new ubyte[blockSize()]; - reset(); - } - - /*********************************************************************** - - Initialize the digest - - Remarks: - Returns the digest state to its initial value - - ***********************************************************************/ - - protected void reset() - { - bytes = 0; - } - - /*********************************************************************** - - Digest additional data - - Params: - input = the data to digest - - Remarks: - Continues the digest operation on the additional data. - - ***********************************************************************/ - - void update (void[] input) - { - auto block = blockSize(); - uint i = bytes & (block-1); - ubyte[] data = cast(ubyte[]) input; - - bytes += data.length; - - if (data.length+i < block) - buffer[i..i+data.length] = data[]; - else - { - buffer[i..block] = data[0..block-i]; - transform (buffer); - - for (i=block-i; i+block-1 < data.length; i += block) - transform(data[i..i+block]); - - buffer[0..data.length-i] = data[i..data.length]; - } - } - - /*********************************************************************** - - Complete the digest - - Returns: - the completed digest - - Remarks: - Concludes the algorithm producing the final digest. - - ***********************************************************************/ - - ubyte[] binaryDigest (ubyte[] buf = null) - { - auto block = blockSize(); - uint i = bytes & (block-1); - - if (i < block-addSize) - padMessage (buffer[i..block-addSize]); - else - { - padMessage (buffer[i..block]); - transform (buffer); - buffer[] = 0; - } - - padLength (buffer[block-addSize..block], bytes); - transform (buffer); - - extend (); - - if (buf.length < digestSize()) - buf.length = digestSize(); - - createDigest (buf); - - reset (); - return buf; - } - - /*********************************************************************** - - Converts 8 bit to 32 bit Little Endian - - Params: - input = the source array - output = the destination array - - Remarks: - Converts an array of ubyte[] into uint[] in Little Endian byte order. - - ***********************************************************************/ - - static protected final void littleEndian32(ubyte[] input, uint[] output) - { - assert(output.length == input.length/4); - output[] = cast(uint[]) input; - - version (BigEndian) - ByteSwap.swap32 (output.ptr, output.length * uint.sizeof); - } - - /*********************************************************************** - - Converts 8 bit to 32 bit Big Endian - - Params: - input = the source array - output = the destination array - - Remarks: - Converts an array of ubyte[] into uint[] in Big Endian byte order. - - ***********************************************************************/ - - static protected final void bigEndian32(ubyte[] input, uint[] output) - { - assert(output.length == input.length/4); - output[] = cast(uint[]) input; - - version(LittleEndian) - ByteSwap.swap32 (output.ptr, output.length * uint.sizeof); - } - - /*********************************************************************** - - Converts 8 bit to 64 bit Little Endian - - Params: - input = the source array - output = the destination array - - Remarks: - Converts an array of ubyte[] into ulong[] in Little Endian byte order. - - ***********************************************************************/ - - static protected final void littleEndian64(ubyte[] input, ulong[] output) - { - assert(output.length == input.length/8); - output[] = cast(ulong[]) input; - - version (BigEndian) - ByteSwap.swap64 (output.ptr, output.length * ulong.sizeof); - } - - /*********************************************************************** - - Converts 8 bit to 64 bit Big Endian - - Params: input = the source array - output = the destination array - - Remarks: - Converts an array of ubyte[] into ulong[] in Big Endian byte order. - - ***********************************************************************/ - - static protected final void bigEndian64(ubyte[] input, ulong[] output) - { - assert(output.length == input.length/8); - output[] = cast(ulong[]) input; - - version (LittleEndian) - ByteSwap.swap64 (output.ptr, output.length * ulong.sizeof); - } - - /*********************************************************************** - - Rotate left by n - - Params: - x = the value to rotate - n = the amount to rotate by - - Remarks: - Rotates a 32 bit value by the specified amount. - - ***********************************************************************/ - - static protected final uint rotateLeft(uint x, uint n) - { - /+version (D_InlineAsm_X86) - version (DigitalMars) - { - asm { - naked; - mov ECX,EAX; - mov EAX,4[ESP]; - rol EAX,CL; - ret 4; - } - } - else - return (x << n) | (x >> (32-n)); - else +/ - return (x << n) | (x >> (32-n)); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Sha0.d --- a/tango/tango/io/digest/Sha0.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the SHA-0 Algorithm described by Secure - Hash Standard, FIPS PUB 180 - -*******************************************************************************/ - -module tango.io.digest.Sha0; - -private import tango.io.digest.Sha01; - -public import tango.io.digest.Digest; - -/******************************************************************************* - -*******************************************************************************/ - -final class Sha0 : Sha01 -{ - /*********************************************************************** - - Construct an Sha0 - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - ***********************************************************************/ - - final protected override void transform(ubyte[] input) - { - uint A,B,C,D,E,TEMP; - uint[16] W; - uint s; - - bigEndian32(input,W); - - A = context[0]; - B = context[1]; - C = context[2]; - D = context[3]; - E = context[4]; - - for(uint t = 0; t < 80; t++) { - s = t & mask; - if (t >= 16) expand(W,s); - TEMP = rotateLeft(A,5) + f(t,B,C,D) + E + W[s] + K[t/20]; - E = D; D = C; C = rotateLeft(B,30); B = A; A = TEMP; - } - - context[0] += A; - context[1] += B; - context[2] += C; - context[3] += D; - context[4] += E; - } - - /*********************************************************************** - - ***********************************************************************/ - - final static protected void expand(uint W[], uint s) - { - W[s] = W[(s+13)&mask] ^ W[(s+8)&mask] ^ W[(s+2)&mask] ^ W[s]; - } - - -} - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "", - "abc", - "message digest", - "abcdefghijklmnopqrstuvwxyz", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", - "12345678901234567890123456789012345678901234567890123456789012345678901234567890" - ]; - - static char[][] results = - [ - "f96cea198ad1dd5617ac084a3d92c6107708c0ef", - "0164b8a914cd2a5e74c4f7ff082c4d97f1edf880", - "c1b0f222d150ebb9aa36a40cafdc8bcbed830b14", - "b40ce07a430cfd3c033039b9fe9afec95dc1bdcd", - "79e966f7a3a990df33e40e3d7f8f18d2caebadfa", - "4aa29d14d171522ece47bee8957e35a41f3e9cff", - ]; - - Sha0 h = new Sha0(); - - foreach (int i, char[] s; strings) - { - h.update(s); - char[] d = h.hexDigest(); - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Sha01.d --- a/tango/tango/io/digest/Sha01.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements common parts of the SHA-0 and SHA-1 algoritms - -*******************************************************************************/ - -module tango.io.digest.Sha01; - -private import tango.core.ByteSwap; - -private import tango.io.digest.MerkleDamgard; - -/******************************************************************************* - -*******************************************************************************/ - -package abstract class Sha01 : MerkleDamgard -{ - protected uint[5] context; - private static const ubyte padChar = 0x80; - package static const uint mask = 0x0000000F; - - /*********************************************************************** - - The digest size of Sha-0 and Sha-1 is 20 bytes - - ***********************************************************************/ - - final uint digestSize() { return 20; } - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - final protected override void reset() - { - super.reset(); - context[] = initial[]; - } - - /*********************************************************************** - - Obtain the digest - - Returns: - the digest - - Remarks: - Returns a digest of the current cipher state, this may be the - final digest, or a digest of the state between calls to update() - - ***********************************************************************/ - - final protected override void createDigest(ubyte[] buf) - { - version (LittleEndian) - ByteSwap.swap32 (context.ptr, context.length * uint.sizeof); - - buf[] = cast(ubyte[]) context; - } - - /*********************************************************************** - - block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For SHA0 the blockSize is 64. - - ***********************************************************************/ - - final protected override uint blockSize() { return 64; } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For SHA0 the addSize is 0. - - ***********************************************************************/ - - final protected override uint addSize() {return 8;} - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding for - the final call to transform(). This padding will fill the cipher - buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - final protected override void padMessage(ubyte[] data) - { - data[0] = padChar; - data[1..$] = 0; - } - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the cipher buffer to fill with padding - length = the length of the data which has been ciphered - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - ciphered. - - ***********************************************************************/ - - final protected override void padLength(ubyte[] data, ulong length) - { - length <<= 3; - for(int j = data.length-1; j >= 0; j--) - data[$-j-1] = cast(ubyte) (length >> j*data.length); - } - - - /*********************************************************************** - - ***********************************************************************/ - - protected static uint f(uint t, uint B, uint C, uint D) - { - if (t < 20) return (B & C) | ((~B) & D); - else if (t < 40) return B ^ C ^ D; - else if (t < 60) return (B & C) | (B & D) | (C & D); - else return B ^ C ^ D; - } - - /*********************************************************************** - - ***********************************************************************/ - - protected static const uint[] K = - [ - 0x5A827999, - 0x6ED9EBA1, - 0x8F1BBCDC, - 0xCA62C1D6 - ]; - - /*********************************************************************** - - ***********************************************************************/ - - protected static const uint[5] initial = - [ - 0x67452301, - 0xEFCDAB89, - 0x98BADCFE, - 0x10325476, - 0xC3D2E1F0 - ]; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Sha1.d --- a/tango/tango/io/digest/Sha1.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the SHA-1 Algorithm described by Secure Hash - Standard, FIPS PUB 180-1, and RFC 3174 US Secure Hash Algorithm 1 - (SHA1). D. Eastlake 3rd, P. Jones. September 2001. - -*******************************************************************************/ - -module tango.io.digest.Sha1; - -private import tango.io.digest.Sha01; - -public import tango.io.digest.Digest; - -/******************************************************************************* - -*******************************************************************************/ - -final class Sha1 : Sha01 -{ - /*********************************************************************** - - Construct a Sha1 hash algorithm context - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - final protected override void transform(ubyte[] input) - { - uint A,B,C,D,E,TEMP; - uint[16] W; - uint s; - - bigEndian32(input,W); - A = context[0]; - B = context[1]; - C = context[2]; - D = context[3]; - E = context[4]; - - for(uint t = 0; t < 80; t++) { - s = t & mask; - if (t >= 16) - expand(W,s); - TEMP = rotateLeft(A,5) + f(t,B,C,D) + E + W[s] + K[t/20]; - E = D; D = C; C = rotateLeft(B,30); B = A; A = TEMP; - } - - context[0] += A; - context[1] += B; - context[2] += C; - context[3] += D; - context[4] += E; - } - - /*********************************************************************** - - ***********************************************************************/ - - final static void expand (uint[] W, uint s) - { - W[s] = rotateLeft(W[(s+13)&mask] ^ W[(s+8)&mask] ^ W[(s+2)&mask] ^ W[s],1); - } - -} - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "abc", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", - "a", - "0123456701234567012345670123456701234567012345670123456701234567" - ]; - - static char[][] results = - [ - "a9993e364706816aba3e25717850c26c9cd0d89d", - "84983e441c3bd26ebaae4aa1f95129e5e54670f1", - "34aa973cd4c4daa4f61eeb2bdbad27316534016f", - "dea356a2cddd90c7a7ecedc5ebb563934f460452" - ]; - - static int[] repeat = - [ - 1, - 1, - 1000000, - 10 - ]; - - Sha1 h = new Sha1(); - - foreach (int i, char[] s; strings) - { - for(int r = 0; r < repeat[i]; r++) - h.update(s); - - char[] d = h.hexDigest(); - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Sha256.d --- a/tango/tango/io/digest/Sha256.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,349 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the SHA-256 Algorithm described by Secure - Hash Standard, FIPS PUB 180-2 - -*******************************************************************************/ - -module tango.io.digest.Sha256; - -private import tango.core.ByteSwap; - -public import tango.io.digest.Digest; - -private import tango.io.digest.MerkleDamgard; - -/******************************************************************************* - -*******************************************************************************/ - -final class Sha256 : MerkleDamgard -{ - private uint[8] context; - private const uint padChar = 0x80; - - /*********************************************************************** - - Construct an Sha256 - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - protected override void reset() - { - super.reset(); - context[] = initial[]; - } - - /*********************************************************************** - - Obtain the digest - - Remarks: - Returns a digest of the current cipher state, this may be the - final digest, or a digest of the state between calls to update() - - ***********************************************************************/ - - protected override void createDigest (ubyte[] buf) - { - version (LittleEndian) - ByteSwap.swap32 (context.ptr, context.length * uint.sizeof); - - buf[] = cast(ubyte[]) context; - } - - /*********************************************************************** - - The digest size of Sha-256 is 32 bytes - - ***********************************************************************/ - - uint digestSize() { return 32; } - - /*********************************************************************** - - Cipher block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For SHA256 the blockSize is 64. - - ***********************************************************************/ - - protected override uint blockSize() { return 64; } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For SHA256 the addSize is 8. - - ***********************************************************************/ - - protected override uint addSize() { return 8; } - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding for - the final call to transform(). This padding will fill the cipher - buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - protected override void padMessage(ubyte[] data) - { - data[0] = padChar; - data[1..$] = 0; - } - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the cipher buffer to fill with padding - length = the length of the data which has been ciphered - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - ciphered. - - ***********************************************************************/ - - protected override void padLength(ubyte[] data, ulong length) - { - length <<= 3; - for(int j = data.length-1; j >= 0; j--) - data[$-j-1] = cast(ubyte) (length >> j*8); - } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform(ubyte[] input) - { - uint[64] W; - uint a,b,c,d,e,f,g,h; - uint j,t1,t2; - - a = context[0]; - b = context[1]; - c = context[2]; - d = context[3]; - e = context[4]; - f = context[5]; - g = context[6]; - h = context[7]; - - bigEndian32(input,W[0..16]); - for(j = 16; j < 64; j++) { - W[j] = mix1(W[j-2]) + W[j-7] + mix0(W[j-15]) + W[j-16]; - } - - for(j = 0; j < 64; j++) { - t1 = h + sum1(e) + Ch(e,f,g) + K[j] + W[j]; - t2 = sum0(a) + Maj(a,b,c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - context[0] += a; - context[1] += b; - context[2] += c; - context[3] += d; - context[4] += e; - context[5] += f; - context[6] += g; - context[7] += h; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint Ch(uint x, uint y, uint z) - { - return (x&y)^(~x&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint Maj(uint x, uint y, uint z) - { - return (x&y)^(x&z)^(y&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint sum0(uint x) - { - return rotateRight(x,2)^rotateRight(x,13)^rotateRight(x,22); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint sum1(uint x) - { - return rotateRight(x,6)^rotateRight(x,11)^rotateRight(x,25); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint mix0(uint x) - { - return rotateRight(x,7)^rotateRight(x,18)^shiftRight(x,3); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint mix1(uint x) - { - return rotateRight(x,17)^rotateRight(x,19)^shiftRight(x,10); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint rotateRight(uint x, uint n) - { - return (x >> n) | (x << (32-n)); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static uint shiftRight(uint x, uint n) - { - return x >> n; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private static uint[] K = -[ - 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, - 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, - 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, - 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, - 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, - 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, - 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, - 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -]; - -/******************************************************************************* - -*******************************************************************************/ - -private static const uint[8] initial = -[ - 0x6a09e667, - 0xbb67ae85, - 0x3c6ef372, - 0xa54ff53a, - 0x510e527f, - 0x9b05688c, - 0x1f83d9ab, - 0x5be0cd19 -]; - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "abc", - "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq" - ]; - - static char[][] results = - [ - "ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad", - "248d6a61d20638b8e5c026930c3e6039a33ce45964ff2167f6ecedd419db06c1" - ]; - - Sha256 h = new Sha256(); - - foreach (int i, char[] s; strings) - { - h.update(s); - char[] d = h.hexDigest(); - assert(d == results[i],"Cipher:("~s~")("~d~")!=("~results[i]~")"); - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Sha512.d --- a/tango/tango/io/digest/Sha512.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the SHA-512 Algorithm described by Secure - Hash Standard, FIPS PUB 180-2 - -*******************************************************************************/ - -module tango.io.digest.Sha512; - -private import tango.core.ByteSwap; - -private import tango.io.digest.MerkleDamgard; - -public import tango.io.digest.Digest; - -/******************************************************************************* - -*******************************************************************************/ - -final class Sha512 : MerkleDamgard -{ - private ulong[8] context; - private const uint padChar = 0x80; - - /*********************************************************************** - - Construct a Sha512 hash algorithm context - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - ***********************************************************************/ - - protected override void createDigest(ubyte[] buf) - { - version (LittleEndian) - ByteSwap.swap64(context.ptr, context.length * ulong.sizeof); - - buf[] = cast(ubyte[]) context[]; - } - - /*********************************************************************** - - The digest size of Sha-512 is 64 bytes - - ***********************************************************************/ - - override uint digestSize() {return 64;} - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - protected override void reset() - { - super.reset(); - context[] = initial[]; - } - - /*********************************************************************** - - Cipher block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For SHA512 the blockSize is 128. - - ***********************************************************************/ - - protected override uint blockSize() { return 128; } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For SHA512 the addSize is 16. - - ***********************************************************************/ - - protected override uint addSize() { return 16; } - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding for - the final call to transform(). This padding will fill the cipher - buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - protected override void padMessage(ubyte[] data) - { - data[0] = padChar; - data[1..$] = 0; - } - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the cipher buffer to fill with padding - length = the length of the data which has been ciphered - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - ciphered. - - ***********************************************************************/ - - protected override void padLength(ubyte[] data, ulong length) - { - length <<= 3; - for(int j = data.length-1; j >= 0; j--) { - data[data.length-j-1] = cast(ubyte) (length >> j*8); - } - data[0..8] = 0; - } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform(ubyte[] input) - { - ulong[80] W; - ulong a,b,c,d,e,f,g,h; - ulong t1,t2; - uint j; - - a = context[0]; - b = context[1]; - c = context[2]; - d = context[3]; - e = context[4]; - f = context[5]; - g = context[6]; - h = context[7]; - - bigEndian64(input,W[0..16]); - for(j = 16; j < 80; j++) { - W[j] = mix1(W[j-2]) + W[j-7] + mix0(W[j-15]) + W[j-16]; - } - - for(j = 0; j < 80; j++) { - t1 = h + sum1(e) + Ch(e,f,g) + K[j] + W[j]; - t2 = sum0(a) + Maj(a,b,c); - h = g; - g = f; - f = e; - e = d + t1; - d = c; - c = b; - b = a; - a = t1 + t2; - } - - context[0] += a; - context[1] += b; - context[2] += c; - context[3] += d; - context[4] += e; - context[5] += f; - context[6] += g; - context[7] += h; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong Ch(ulong x, ulong y, ulong z) - { - return (x&y)^(~x&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong Maj(ulong x, ulong y, ulong z) - { - return (x&y)^(x&z)^(y&z); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong sum0(ulong x) - { - return rotateRight(x,28)^rotateRight(x,34)^rotateRight(x,39); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong sum1(ulong x) - { - return rotateRight(x,14)^rotateRight(x,18)^rotateRight(x,41); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong mix0(ulong x) - { - return rotateRight(x,1)^rotateRight(x,8)^shiftRight(x,7); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong mix1(ulong x) - { - return rotateRight(x,19)^rotateRight(x,61)^shiftRight(x,6); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong rotateRight(ulong x, uint n) - { - return (x >> n) | (x << (64-n)); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong shiftRight(ulong x, uint n) - { - return x >> n; - } - -} - -/******************************************************************************* - -*******************************************************************************/ - -private static const ulong[] K = -[ - 0x428a2f98d728ae22, 0x7137449123ef65cd, 0xb5c0fbcfec4d3b2f, 0xe9b5dba58189dbbc, - 0x3956c25bf348b538, 0x59f111f1b605d019, 0x923f82a4af194f9b, 0xab1c5ed5da6d8118, - 0xd807aa98a3030242, 0x12835b0145706fbe, 0x243185be4ee4b28c, 0x550c7dc3d5ffb4e2, - 0x72be5d74f27b896f, 0x80deb1fe3b1696b1, 0x9bdc06a725c71235, 0xc19bf174cf692694, - 0xe49b69c19ef14ad2, 0xefbe4786384f25e3, 0x0fc19dc68b8cd5b5, 0x240ca1cc77ac9c65, - 0x2de92c6f592b0275, 0x4a7484aa6ea6e483, 0x5cb0a9dcbd41fbd4, 0x76f988da831153b5, - 0x983e5152ee66dfab, 0xa831c66d2db43210, 0xb00327c898fb213f, 0xbf597fc7beef0ee4, - 0xc6e00bf33da88fc2, 0xd5a79147930aa725, 0x06ca6351e003826f, 0x142929670a0e6e70, - 0x27b70a8546d22ffc, 0x2e1b21385c26c926, 0x4d2c6dfc5ac42aed, 0x53380d139d95b3df, - 0x650a73548baf63de, 0x766a0abb3c77b2a8, 0x81c2c92e47edaee6, 0x92722c851482353b, - 0xa2bfe8a14cf10364, 0xa81a664bbc423001, 0xc24b8b70d0f89791, 0xc76c51a30654be30, - 0xd192e819d6ef5218, 0xd69906245565a910, 0xf40e35855771202a, 0x106aa07032bbd1b8, - 0x19a4c116b8d2d0c8, 0x1e376c085141ab53, 0x2748774cdf8eeb99, 0x34b0bcb5e19b48a8, - 0x391c0cb3c5c95a63, 0x4ed8aa4ae3418acb, 0x5b9cca4f7763e373, 0x682e6ff3d6b2b8a3, - 0x748f82ee5defb2fc, 0x78a5636f43172f60, 0x84c87814a1f0ab72, 0x8cc702081a6439ec, - 0x90befffa23631e28, 0xa4506cebde82bde9, 0xbef9a3f7b2c67915, 0xc67178f2e372532b, - 0xca273eceea26619c, 0xd186b8c721c0c207, 0xeada7dd6cde0eb1e, 0xf57d4f7fee6ed178, - 0x06f067aa72176fba, 0x0a637dc5a2c898a6, 0x113f9804bef90dae, 0x1b710b35131c471b, - 0x28db77f523047d84, 0x32caab7b40c72493, 0x3c9ebe0a15c9bebc, 0x431d67c49c100d4c, - 0x4cc5d4becb3e42b6, 0x597f299cfc657e2a, 0x5fcb6fab3ad6faec, 0x6c44198c4a475817 -]; - -/******************************************************************************* - -*******************************************************************************/ - -private static const ulong[8] initial = -[ - 0x6a09e667f3bcc908, - 0xbb67ae8584caa73b, - 0x3c6ef372fe94f82b, - 0xa54ff53a5f1d36f1, - 0x510e527fade682d1, - 0x9b05688c2b3e6c1f, - 0x1f83d9abfb41bd6b, - 0x5be0cd19137e2179 -]; - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = - [ - "", - "abc", - "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmnhijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu" - ]; - - static char[][] results = - [ - "cf83e1357eefb8bdf1542850d66d8007d620e4050b5715dc83f4a921d36ce9ce47d0d13c5d85f2b0ff8318d2877eec2f63b931bd47417a81a538327af927da3e", - "ddaf35a193617abacc417349ae20413112e6fa4e89a97ea20a9eeee64b55d39a2192992a274fc1a836ba3c23a3feebbd454d4423643ce80e2a9ac94fa54ca49f", - "8e959b75dae313da8cf4f72814fc143f8f7779c6eb9f7fa17299aeadb6889018501d289e4900f7e4331b99dec4b5433ac7d329eeb6dd26545e96e55b874be909" - ]; - - Sha512 h = new Sha512; - - foreach (int i, char[] s; strings) - { - h.update(cast(ubyte[])s); - char[] d = h.hexDigest(); - assert(d == results[i],"DigestTransform:("~s~")("~d~")!=("~results[i]~")"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/digest/Tiger.d --- a/tango/tango/io/digest/Tiger.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,896 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Tango. All rights reserved - - license: BSD style: see doc/license.txt for details - - version: Initial release: Feb 2006 - - author: Regan Heath, Oskar Linde - - This module implements the Tiger algorithm by Ross Anderson and Eli - Biham. - -*******************************************************************************/ - -module tango.io.digest.Tiger; - -private import tango.core.ByteSwap; - -private import tango.io.digest.MerkleDamgard; - -public import tango.io.digest.Digest; - -/******************************************************************************* - -*******************************************************************************/ - -final class Tiger : MerkleDamgard -{ - private ulong[3] context; - private uint npass = 3; - private const uint padChar = 0x01; - - /*********************************************************************** - - ***********************************************************************/ - - private static const ulong[3] initial = - [ - 0x0123456789ABCDEF, - 0xFEDCBA9876543210, - 0xF096A5B4C3B2E187 - ]; - - /*********************************************************************** - - Construct an Tiger - - ***********************************************************************/ - - this() { } - - /*********************************************************************** - - The size of a tiger digest is 24 bytes - - ***********************************************************************/ - - override uint digestSize() {return 24;} - - - /*********************************************************************** - - Initialize the cipher - - Remarks: - Returns the cipher state to it's initial value - - ***********************************************************************/ - - override void reset() - { - super.reset(); - context[] = initial[]; - } - - /*********************************************************************** - - Obtain the digest - - Returns: - the digest - - Remarks: - Returns a digest of the current cipher state, this may be the - final digest, or a digest of the state between calls to update() - - ***********************************************************************/ - - override void createDigest(ubyte[] buf) - { - version (LittleEndian) - ByteSwap.swap64 (context.ptr, context.length * ulong.sizeof); - buf[] = cast(ubyte[]) context; - } - - /*********************************************************************** - - Get the number of passes being performed - - Returns: - the number of passes - - Remarks: - The Tiger algorithm may perform an arbitrary number of passes - the minimum recommended number is 3 and this number should be - quite secure however the "ultra-cautious" may wish to increase - this number. - - ***********************************************************************/ - - uint passes() - { - return npass; - } - - /*********************************************************************** - - Set the number of passes to be performed - - Params: - n = the number of passes to perform - - Remarks: - The Tiger algorithm may perform an arbitrary number of passes - the minimum recommended number is 3 and this number should be - quite secure however the "ultra-cautious" may wish to increase - this number. - - ***********************************************************************/ - - void passes(uint n) - { - if (n < 3) return ; - npass = n; - } - - /*********************************************************************** - - block size - - Returns: - the block size - - Remarks: - Specifies the size (in bytes) of the block of data to pass to - each call to transform(). For Tiger the blockSize is 64. - - ***********************************************************************/ - - protected override uint blockSize() { return 64; } - - /*********************************************************************** - - Length padding size - - Returns: - the length padding size - - Remarks: - Specifies the size (in bytes) of the padding which uses the - length of the data which has been ciphered, this padding is - carried out by the padLength method. For Tiger the addSize is 8. - - ***********************************************************************/ - - protected uint addSize() { return 8; } - - /*********************************************************************** - - Pads the cipher data - - Params: - data = a slice of the cipher buffer to fill with padding - - Remarks: - Fills the passed buffer slice with the appropriate padding for - the final call to transform(). This padding will fill the cipher - buffer up to blockSize()-addSize(). - - ***********************************************************************/ - - protected override void padMessage(ubyte[] at) - { - at[0] = padChar; - at[1..at.length] = 0; - } - - /*********************************************************************** - - Performs the length padding - - Params: - data = the slice of the cipher buffer to fill with padding - length = the length of the data which has been ciphered - - Remarks: - Fills the passed buffer slice with addSize() bytes of padding - based on the length in bytes of the input data which has been - ciphered. - - ***********************************************************************/ - - protected override void padLength(ubyte[] at, ulong length) - { - length <<= 3; - littleEndian64((cast(ubyte*)&length)[0..8],cast(ulong[]) at); - } - - /*********************************************************************** - - Performs the cipher on a block of data - - Params: - data = the block of data to cipher - - Remarks: - The actual cipher algorithm is carried out by this method on - the passed block of data. This method is called for every - blockSize() bytes of input data and once more with the remaining - data padded to blockSize(). - - ***********************************************************************/ - - protected override void transform(ubyte[] input) - { - ulong tmpa,a,b,c; - ulong[8] x; - uint i; - - littleEndian64(input,x); - - a = context[0]; - b = context[1]; - c = context[2]; - - for(i = 0; i < npass; i++) { - if (i > 0) keySchedule(x); - pass(a,b,c,x,(i==0)?5:(i==1)?7:9); - tmpa = a; a = c; c = b; b = tmpa; - } - - context[0] = a ^ context[0]; - context[1] = b - context[1]; - context[2] = c + context[2]; - - x[] = 0; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ubyte getByte(ulong c, uint b1, uint b2 = 0) - { - return cast(ubyte) (c >> (b1*8) >> (b2*8)); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void round(inout ulong a, inout ulong b, inout ulong c, ulong x, ulong mul) - { - c ^= x; - a -= t1[getByte(c,0)] ^ t2[getByte(c,2)] ^ t3[getByte(c,4)] ^ t4[getByte(c,4,2)]; - b += t4[getByte(c,1)] ^ t3[getByte(c,3)] ^ t2[getByte(c,4,1)] ^ t1[getByte(c,4,3)]; - b *= mul; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void pass(inout ulong a, inout ulong b, inout ulong c, ulong[8] x, ulong mul) - { - round(a,b,c,x[0],mul); - round(b,c,a,x[1],mul); - round(c,a,b,x[2],mul); - round(a,b,c,x[3],mul); - round(b,c,a,x[4],mul); - round(c,a,b,x[5],mul); - round(a,b,c,x[6],mul); - round(b,c,a,x[7],mul); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void keySchedule(ulong[8] x) - { - x[0] -= x[7] ^ 0xA5A5A5A5A5A5A5A5; - x[1] ^= x[0]; - x[2] += x[1]; - x[3] -= x[2] ^ ((~x[1])<<19); - x[4] ^= x[3]; - x[5] += x[4]; - x[6] -= x[5] ^ ((~x[4])>>23); - x[7] ^= x[6]; - x[0] += x[7]; - x[1] -= x[0] ^ ((~x[7])<<19); - x[2] ^= x[1]; - x[3] += x[2]; - x[4] -= x[3] ^ ((~x[2])>>23); - x[5] ^= x[4]; - x[6] += x[5]; - x[7] -= x[6] ^ 0x0123456789ABCDEF; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static ulong[] t1() { return table[0..256]; } - private static ulong[] t2() { return table[256..512]; } - private static ulong[] t3() { return table[512..768]; } - private static ulong[] t4() { return table[768..1024]; } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private static ulong[1024] table = -[ - 0x02aab17cf7e90c5e /* 0 */, 0xac424b03e243a8ec /* 1 */, - 0x72cd5be30dd5fcd3 /* 2 */, 0x6d019b93f6f97f3a /* 3 */, - 0xcd9978ffd21f9193 /* 4 */, 0x7573a1c9708029e2 /* 5 */, - 0xb164326b922a83c3 /* 6 */, 0x46883eee04915870 /* 7 */, - 0xeaace3057103ece6 /* 8 */, 0xc54169b808a3535c /* 9 */, - 0x4ce754918ddec47c /* 10 */, 0x0aa2f4dfdc0df40c /* 11 */, - 0x10b76f18a74dbefa /* 12 */, 0xc6ccb6235ad1ab6a /* 13 */, - 0x13726121572fe2ff /* 14 */, 0x1a488c6f199d921e /* 15 */, - 0x4bc9f9f4da0007ca /* 16 */, 0x26f5e6f6e85241c7 /* 17 */, - 0x859079dbea5947b6 /* 18 */, 0x4f1885c5c99e8c92 /* 19 */, - 0xd78e761ea96f864b /* 20 */, 0x8e36428c52b5c17d /* 21 */, - 0x69cf6827373063c1 /* 22 */, 0xb607c93d9bb4c56e /* 23 */, - 0x7d820e760e76b5ea /* 24 */, 0x645c9cc6f07fdc42 /* 25 */, - 0xbf38a078243342e0 /* 26 */, 0x5f6b343c9d2e7d04 /* 27 */, - 0xf2c28aeb600b0ec6 /* 28 */, 0x6c0ed85f7254bcac /* 29 */, - 0x71592281a4db4fe5 /* 30 */, 0x1967fa69ce0fed9f /* 31 */, - 0xfd5293f8b96545db /* 32 */, 0xc879e9d7f2a7600b /* 33 */, - 0x860248920193194e /* 34 */, 0xa4f9533b2d9cc0b3 /* 35 */, - 0x9053836c15957613 /* 36 */, 0xdb6dcf8afc357bf1 /* 37 */, - 0x18beea7a7a370f57 /* 38 */, 0x037117ca50b99066 /* 39 */, - 0x6ab30a9774424a35 /* 40 */, 0xf4e92f02e325249b /* 41 */, - 0x7739db07061ccae1 /* 42 */, 0xd8f3b49ceca42a05 /* 43 */, - 0xbd56be3f51382f73 /* 44 */, 0x45faed5843b0bb28 /* 45 */, - 0x1c813d5c11bf1f83 /* 46 */, 0x8af0e4b6d75fa169 /* 47 */, - 0x33ee18a487ad9999 /* 48 */, 0x3c26e8eab1c94410 /* 49 */, - 0xb510102bc0a822f9 /* 50 */, 0x141eef310ce6123b /* 51 */, - 0xfc65b90059ddb154 /* 52 */, 0xe0158640c5e0e607 /* 53 */, - 0x884e079826c3a3cf /* 54 */, 0x930d0d9523c535fd /* 55 */, - 0x35638d754e9a2b00 /* 56 */, 0x4085fccf40469dd5 /* 57 */, - 0xc4b17ad28be23a4c /* 58 */, 0xcab2f0fc6a3e6a2e /* 59 */, - 0x2860971a6b943fcd /* 60 */, 0x3dde6ee212e30446 /* 61 */, - 0x6222f32ae01765ae /* 62 */, 0x5d550bb5478308fe /* 63 */, - 0xa9efa98da0eda22a /* 64 */, 0xc351a71686c40da7 /* 65 */, - 0x1105586d9c867c84 /* 66 */, 0xdcffee85fda22853 /* 67 */, - 0xccfbd0262c5eef76 /* 68 */, 0xbaf294cb8990d201 /* 69 */, - 0xe69464f52afad975 /* 70 */, 0x94b013afdf133e14 /* 71 */, - 0x06a7d1a32823c958 /* 72 */, 0x6f95fe5130f61119 /* 73 */, - 0xd92ab34e462c06c0 /* 74 */, 0xed7bde33887c71d2 /* 75 */, - 0x79746d6e6518393e /* 76 */, 0x5ba419385d713329 /* 77 */, - 0x7c1ba6b948a97564 /* 78 */, 0x31987c197bfdac67 /* 79 */, - 0xde6c23c44b053d02 /* 80 */, 0x581c49fed002d64d /* 81 */, - 0xdd474d6338261571 /* 82 */, 0xaa4546c3e473d062 /* 83 */, - 0x928fce349455f860 /* 84 */, 0x48161bbacaab94d9 /* 85 */, - 0x63912430770e6f68 /* 86 */, 0x6ec8a5e602c6641c /* 87 */, - 0x87282515337ddd2b /* 88 */, 0x2cda6b42034b701b /* 89 */, - 0xb03d37c181cb096d /* 90 */, 0xe108438266c71c6f /* 91 */, - 0x2b3180c7eb51b255 /* 92 */, 0xdf92b82f96c08bbc /* 93 */, - 0x5c68c8c0a632f3ba /* 94 */, 0x5504cc861c3d0556 /* 95 */, - 0xabbfa4e55fb26b8f /* 96 */, 0x41848b0ab3baceb4 /* 97 */, - 0xb334a273aa445d32 /* 98 */, 0xbca696f0a85ad881 /* 99 */, - 0x24f6ec65b528d56c /* 100 */, 0x0ce1512e90f4524a /* 101 */, - 0x4e9dd79d5506d35a /* 102 */, 0x258905fac6ce9779 /* 103 */, - 0x2019295b3e109b33 /* 104 */, 0xf8a9478b73a054cc /* 105 */, - 0x2924f2f934417eb0 /* 106 */, 0x3993357d536d1bc4 /* 107 */, - 0x38a81ac21db6ff8b /* 108 */, 0x47c4fbf17d6016bf /* 109 */, - 0x1e0faadd7667e3f5 /* 110 */, 0x7abcff62938beb96 /* 111 */, - 0xa78dad948fc179c9 /* 112 */, 0x8f1f98b72911e50d /* 113 */, - 0x61e48eae27121a91 /* 114 */, 0x4d62f7ad31859808 /* 115 */, - 0xeceba345ef5ceaeb /* 116 */, 0xf5ceb25ebc9684ce /* 117 */, - 0xf633e20cb7f76221 /* 118 */, 0xa32cdf06ab8293e4 /* 119 */, - 0x985a202ca5ee2ca4 /* 120 */, 0xcf0b8447cc8a8fb1 /* 121 */, - 0x9f765244979859a3 /* 122 */, 0xa8d516b1a1240017 /* 123 */, - 0x0bd7ba3ebb5dc726 /* 124 */, 0xe54bca55b86adb39 /* 125 */, - 0x1d7a3afd6c478063 /* 126 */, 0x519ec608e7669edd /* 127 */, - 0x0e5715a2d149aa23 /* 128 */, 0x177d4571848ff194 /* 129 */, - 0xeeb55f3241014c22 /* 130 */, 0x0f5e5ca13a6e2ec2 /* 131 */, - 0x8029927b75f5c361 /* 132 */, 0xad139fabc3d6e436 /* 133 */, - 0x0d5df1a94ccf402f /* 134 */, 0x3e8bd948bea5dfc8 /* 135 */, - 0xa5a0d357bd3ff77e /* 136 */, 0xa2d12e251f74f645 /* 137 */, - 0x66fd9e525e81a082 /* 138 */, 0x2e0c90ce7f687a49 /* 139 */, - 0xc2e8bcbeba973bc5 /* 140 */, 0x000001bce509745f /* 141 */, - 0x423777bbe6dab3d6 /* 142 */, 0xd1661c7eaef06eb5 /* 143 */, - 0xa1781f354daacfd8 /* 144 */, 0x2d11284a2b16affc /* 145 */, - 0xf1fc4f67fa891d1f /* 146 */, 0x73ecc25dcb920ada /* 147 */, - 0xae610c22c2a12651 /* 148 */, 0x96e0a810d356b78a /* 149 */, - 0x5a9a381f2fe7870f /* 150 */, 0xd5ad62ede94e5530 /* 151 */, - 0xd225e5e8368d1427 /* 152 */, 0x65977b70c7af4631 /* 153 */, - 0x99f889b2de39d74f /* 154 */, 0x233f30bf54e1d143 /* 155 */, - 0x9a9675d3d9a63c97 /* 156 */, 0x5470554ff334f9a8 /* 157 */, - 0x166acb744a4f5688 /* 158 */, 0x70c74caab2e4aead /* 159 */, - 0xf0d091646f294d12 /* 160 */, 0x57b82a89684031d1 /* 161 */, - 0xefd95a5a61be0b6b /* 162 */, 0x2fbd12e969f2f29a /* 163 */, - 0x9bd37013feff9fe8 /* 164 */, 0x3f9b0404d6085a06 /* 165 */, - 0x4940c1f3166cfe15 /* 166 */, 0x09542c4dcdf3defb /* 167 */, - 0xb4c5218385cd5ce3 /* 168 */, 0xc935b7dc4462a641 /* 169 */, - 0x3417f8a68ed3b63f /* 170 */, 0xb80959295b215b40 /* 171 */, - 0xf99cdaef3b8c8572 /* 172 */, 0x018c0614f8fcb95d /* 173 */, - 0x1b14accd1a3acdf3 /* 174 */, 0x84d471f200bb732d /* 175 */, - 0xc1a3110e95e8da16 /* 176 */, 0x430a7220bf1a82b8 /* 177 */, - 0xb77e090d39df210e /* 178 */, 0x5ef4bd9f3cd05e9d /* 179 */, - 0x9d4ff6da7e57a444 /* 180 */, 0xda1d60e183d4a5f8 /* 181 */, - 0xb287c38417998e47 /* 182 */, 0xfe3edc121bb31886 /* 183 */, - 0xc7fe3ccc980ccbef /* 184 */, 0xe46fb590189bfd03 /* 185 */, - 0x3732fd469a4c57dc /* 186 */, 0x7ef700a07cf1ad65 /* 187 */, - 0x59c64468a31d8859 /* 188 */, 0x762fb0b4d45b61f6 /* 189 */, - 0x155baed099047718 /* 190 */, 0x68755e4c3d50baa6 /* 191 */, - 0xe9214e7f22d8b4df /* 192 */, 0x2addbf532eac95f4 /* 193 */, - 0x32ae3909b4bd0109 /* 194 */, 0x834df537b08e3450 /* 195 */, - 0xfa209da84220728d /* 196 */, 0x9e691d9b9efe23f7 /* 197 */, - 0x0446d288c4ae8d7f /* 198 */, 0x7b4cc524e169785b /* 199 */, - 0x21d87f0135ca1385 /* 200 */, 0xcebb400f137b8aa5 /* 201 */, - 0x272e2b66580796be /* 202 */, 0x3612264125c2b0de /* 203 */, - 0x057702bdad1efbb2 /* 204 */, 0xd4babb8eacf84be9 /* 205 */, - 0x91583139641bc67b /* 206 */, 0x8bdc2de08036e024 /* 207 */, - 0x603c8156f49f68ed /* 208 */, 0xf7d236f7dbef5111 /* 209 */, - 0x9727c4598ad21e80 /* 210 */, 0xa08a0896670a5fd7 /* 211 */, - 0xcb4a8f4309eba9cb /* 212 */, 0x81af564b0f7036a1 /* 213 */, - 0xc0b99aa778199abd /* 214 */, 0x959f1ec83fc8e952 /* 215 */, - 0x8c505077794a81b9 /* 216 */, 0x3acaaf8f056338f0 /* 217 */, - 0x07b43f50627a6778 /* 218 */, 0x4a44ab49f5eccc77 /* 219 */, - 0x3bc3d6e4b679ee98 /* 220 */, 0x9cc0d4d1cf14108c /* 221 */, - 0x4406c00b206bc8a0 /* 222 */, 0x82a18854c8d72d89 /* 223 */, - 0x67e366b35c3c432c /* 224 */, 0xb923dd61102b37f2 /* 225 */, - 0x56ab2779d884271d /* 226 */, 0xbe83e1b0ff1525af /* 227 */, - 0xfb7c65d4217e49a9 /* 228 */, 0x6bdbe0e76d48e7d4 /* 229 */, - 0x08df828745d9179e /* 230 */, 0x22ea6a9add53bd34 /* 231 */, - 0xe36e141c5622200a /* 232 */, 0x7f805d1b8cb750ee /* 233 */, - 0xafe5c7a59f58e837 /* 234 */, 0xe27f996a4fb1c23c /* 235 */, - 0xd3867dfb0775f0d0 /* 236 */, 0xd0e673de6e88891a /* 237 */, - 0x123aeb9eafb86c25 /* 238 */, 0x30f1d5d5c145b895 /* 239 */, - 0xbb434a2dee7269e7 /* 240 */, 0x78cb67ecf931fa38 /* 241 */, - 0xf33b0372323bbf9c /* 242 */, 0x52d66336fb279c74 /* 243 */, - 0x505f33ac0afb4eaa /* 244 */, 0xe8a5cd99a2cce187 /* 245 */, - 0x534974801e2d30bb /* 246 */, 0x8d2d5711d5876d90 /* 247 */, - 0x1f1a412891bc038e /* 248 */, 0xd6e2e71d82e56648 /* 249 */, - 0x74036c3a497732b7 /* 250 */, 0x89b67ed96361f5ab /* 251 */, - 0xffed95d8f1ea02a2 /* 252 */, 0xe72b3bd61464d43d /* 253 */, - 0xa6300f170bdc4820 /* 254 */, 0xebc18760ed78a77a /* 255 */, - 0xe6a6be5a05a12138 /* 256 */, 0xb5a122a5b4f87c98 /* 257 */, - 0x563c6089140b6990 /* 258 */, 0x4c46cb2e391f5dd5 /* 259 */, - 0xd932addbc9b79434 /* 260 */, 0x08ea70e42015aff5 /* 261 */, - 0xd765a6673e478cf1 /* 262 */, 0xc4fb757eab278d99 /* 263 */, - 0xdf11c6862d6e0692 /* 264 */, 0xddeb84f10d7f3b16 /* 265 */, - 0x6f2ef604a665ea04 /* 266 */, 0x4a8e0f0ff0e0dfb3 /* 267 */, - 0xa5edeef83dbcba51 /* 268 */, 0xfc4f0a2a0ea4371e /* 269 */, - 0xe83e1da85cb38429 /* 270 */, 0xdc8ff882ba1b1ce2 /* 271 */, - 0xcd45505e8353e80d /* 272 */, 0x18d19a00d4db0717 /* 273 */, - 0x34a0cfeda5f38101 /* 274 */, 0x0be77e518887caf2 /* 275 */, - 0x1e341438b3c45136 /* 276 */, 0xe05797f49089ccf9 /* 277 */, - 0xffd23f9df2591d14 /* 278 */, 0x543dda228595c5cd /* 279 */, - 0x661f81fd99052a33 /* 280 */, 0x8736e641db0f7b76 /* 281 */, - 0x15227725418e5307 /* 282 */, 0xe25f7f46162eb2fa /* 283 */, - 0x48a8b2126c13d9fe /* 284 */, 0xafdc541792e76eea /* 285 */, - 0x03d912bfc6d1898f /* 286 */, 0x31b1aafa1b83f51b /* 287 */, - 0xf1ac2796e42ab7d9 /* 288 */, 0x40a3a7d7fcd2ebac /* 289 */, - 0x1056136d0afbbcc5 /* 290 */, 0x7889e1dd9a6d0c85 /* 291 */, - 0xd33525782a7974aa /* 292 */, 0xa7e25d09078ac09b /* 293 */, - 0xbd4138b3eac6edd0 /* 294 */, 0x920abfbe71eb9e70 /* 295 */, - 0xa2a5d0f54fc2625c /* 296 */, 0xc054e36b0b1290a3 /* 297 */, - 0xf6dd59ff62fe932b /* 298 */, 0x3537354511a8ac7d /* 299 */, - 0xca845e9172fadcd4 /* 300 */, 0x84f82b60329d20dc /* 301 */, - 0x79c62ce1cd672f18 /* 302 */, 0x8b09a2add124642c /* 303 */, - 0xd0c1e96a19d9e726 /* 304 */, 0x5a786a9b4ba9500c /* 305 */, - 0x0e020336634c43f3 /* 306 */, 0xc17b474aeb66d822 /* 307 */, - 0x6a731ae3ec9baac2 /* 308 */, 0x8226667ae0840258 /* 309 */, - 0x67d4567691caeca5 /* 310 */, 0x1d94155c4875adb5 /* 311 */, - 0x6d00fd985b813fdf /* 312 */, 0x51286efcb774cd06 /* 313 */, - 0x5e8834471fa744af /* 314 */, 0xf72ca0aee761ae2e /* 315 */, - 0xbe40e4cdaee8e09a /* 316 */, 0xe9970bbb5118f665 /* 317 */, - 0x726e4beb33df1964 /* 318 */, 0x703b000729199762 /* 319 */, - 0x4631d816f5ef30a7 /* 320 */, 0xb880b5b51504a6be /* 321 */, - 0x641793c37ed84b6c /* 322 */, 0x7b21ed77f6e97d96 /* 323 */, - 0x776306312ef96b73 /* 324 */, 0xae528948e86ff3f4 /* 325 */, - 0x53dbd7f286a3f8f8 /* 326 */, 0x16cadce74cfc1063 /* 327 */, - 0x005c19bdfa52c6dd /* 328 */, 0x68868f5d64d46ad3 /* 329 */, - 0x3a9d512ccf1e186a /* 330 */, 0x367e62c2385660ae /* 331 */, - 0xe359e7ea77dcb1d7 /* 332 */, 0x526c0773749abe6e /* 333 */, - 0x735ae5f9d09f734b /* 334 */, 0x493fc7cc8a558ba8 /* 335 */, - 0xb0b9c1533041ab45 /* 336 */, 0x321958ba470a59bd /* 337 */, - 0x852db00b5f46c393 /* 338 */, 0x91209b2bd336b0e5 /* 339 */, - 0x6e604f7d659ef19f /* 340 */, 0xb99a8ae2782ccb24 /* 341 */, - 0xccf52ab6c814c4c7 /* 342 */, 0x4727d9afbe11727b /* 343 */, - 0x7e950d0c0121b34d /* 344 */, 0x756f435670ad471f /* 345 */, - 0xf5add442615a6849 /* 346 */, 0x4e87e09980b9957a /* 347 */, - 0x2acfa1df50aee355 /* 348 */, 0xd898263afd2fd556 /* 349 */, - 0xc8f4924dd80c8fd6 /* 350 */, 0xcf99ca3d754a173a /* 351 */, - 0xfe477bacaf91bf3c /* 352 */, 0xed5371f6d690c12d /* 353 */, - 0x831a5c285e687094 /* 354 */, 0xc5d3c90a3708a0a4 /* 355 */, - 0x0f7f903717d06580 /* 356 */, 0x19f9bb13b8fdf27f /* 357 */, - 0xb1bd6f1b4d502843 /* 358 */, 0x1c761ba38fff4012 /* 359 */, - 0x0d1530c4e2e21f3b /* 360 */, 0x8943ce69a7372c8a /* 361 */, - 0xe5184e11feb5ce66 /* 362 */, 0x618bdb80bd736621 /* 363 */, - 0x7d29bad68b574d0b /* 364 */, 0x81bb613e25e6fe5b /* 365 */, - 0x071c9c10bc07913f /* 366 */, 0xc7beeb7909ac2d97 /* 367 */, - 0xc3e58d353bc5d757 /* 368 */, 0xeb017892f38f61e8 /* 369 */, - 0xd4effb9c9b1cc21a /* 370 */, 0x99727d26f494f7ab /* 371 */, - 0xa3e063a2956b3e03 /* 372 */, 0x9d4a8b9a4aa09c30 /* 373 */, - 0x3f6ab7d500090fb4 /* 374 */, 0x9cc0f2a057268ac0 /* 375 */, - 0x3dee9d2dedbf42d1 /* 376 */, 0x330f49c87960a972 /* 377 */, - 0xc6b2720287421b41 /* 378 */, 0x0ac59ec07c00369c /* 379 */, - 0xef4eac49cb353425 /* 380 */, 0xf450244eef0129d8 /* 381 */, - 0x8acc46e5caf4deb6 /* 382 */, 0x2ffeab63989263f7 /* 383 */, - 0x8f7cb9fe5d7a4578 /* 384 */, 0x5bd8f7644e634635 /* 385 */, - 0x427a7315bf2dc900 /* 386 */, 0x17d0c4aa2125261c /* 387 */, - 0x3992486c93518e50 /* 388 */, 0xb4cbfee0a2d7d4c3 /* 389 */, - 0x7c75d6202c5ddd8d /* 390 */, 0xdbc295d8e35b6c61 /* 391 */, - 0x60b369d302032b19 /* 392 */, 0xce42685fdce44132 /* 393 */, - 0x06f3ddb9ddf65610 /* 394 */, 0x8ea4d21db5e148f0 /* 395 */, - 0x20b0fce62fcd496f /* 396 */, 0x2c1b912358b0ee31 /* 397 */, - 0xb28317b818f5a308 /* 398 */, 0xa89c1e189ca6d2cf /* 399 */, - 0x0c6b18576aaadbc8 /* 400 */, 0xb65deaa91299fae3 /* 401 */, - 0xfb2b794b7f1027e7 /* 402 */, 0x04e4317f443b5beb /* 403 */, - 0x4b852d325939d0a6 /* 404 */, 0xd5ae6beefb207ffc /* 405 */, - 0x309682b281c7d374 /* 406 */, 0xbae309a194c3b475 /* 407 */, - 0x8cc3f97b13b49f05 /* 408 */, 0x98a9422ff8293967 /* 409 */, - 0x244b16b01076ff7c /* 410 */, 0xf8bf571c663d67ee /* 411 */, - 0x1f0d6758eee30da1 /* 412 */, 0xc9b611d97adeb9b7 /* 413 */, - 0xb7afd5887b6c57a2 /* 414 */, 0x6290ae846b984fe1 /* 415 */, - 0x94df4cdeacc1a5fd /* 416 */, 0x058a5bd1c5483aff /* 417 */, - 0x63166cc142ba3c37 /* 418 */, 0x8db8526eb2f76f40 /* 419 */, - 0xe10880036f0d6d4e /* 420 */, 0x9e0523c9971d311d /* 421 */, - 0x45ec2824cc7cd691 /* 422 */, 0x575b8359e62382c9 /* 423 */, - 0xfa9e400dc4889995 /* 424 */, 0xd1823ecb45721568 /* 425 */, - 0xdafd983b8206082f /* 426 */, 0xaa7d29082386a8cb /* 427 */, - 0x269fcd4403b87588 /* 428 */, 0x1b91f5f728bdd1e0 /* 429 */, - 0xe4669f39040201f6 /* 430 */, 0x7a1d7c218cf04ade /* 431 */, - 0x65623c29d79ce5ce /* 432 */, 0x2368449096c00bb1 /* 433 */, - 0xab9bf1879da503ba /* 434 */, 0xbc23ecb1a458058e /* 435 */, - 0x9a58df01bb401ecc /* 436 */, 0xa070e868a85f143d /* 437 */, - 0x4ff188307df2239e /* 438 */, 0x14d565b41a641183 /* 439 */, - 0xee13337452701602 /* 440 */, 0x950e3dcf3f285e09 /* 441 */, - 0x59930254b9c80953 /* 442 */, 0x3bf299408930da6d /* 443 */, - 0xa955943f53691387 /* 444 */, 0xa15edecaa9cb8784 /* 445 */, - 0x29142127352be9a0 /* 446 */, 0x76f0371fff4e7afb /* 447 */, - 0x0239f450274f2228 /* 448 */, 0xbb073af01d5e868b /* 449 */, - 0xbfc80571c10e96c1 /* 450 */, 0xd267088568222e23 /* 451 */, - 0x9671a3d48e80b5b0 /* 452 */, 0x55b5d38ae193bb81 /* 453 */, - 0x693ae2d0a18b04b8 /* 454 */, 0x5c48b4ecadd5335f /* 455 */, - 0xfd743b194916a1ca /* 456 */, 0x2577018134be98c4 /* 457 */, - 0xe77987e83c54a4ad /* 458 */, 0x28e11014da33e1b9 /* 459 */, - 0x270cc59e226aa213 /* 460 */, 0x71495f756d1a5f60 /* 461 */, - 0x9be853fb60afef77 /* 462 */, 0xadc786a7f7443dbf /* 463 */, - 0x0904456173b29a82 /* 464 */, 0x58bc7a66c232bd5e /* 465 */, - 0xf306558c673ac8b2 /* 466 */, 0x41f639c6b6c9772a /* 467 */, - 0x216defe99fda35da /* 468 */, 0x11640cc71c7be615 /* 469 */, - 0x93c43694565c5527 /* 470 */, 0xea038e6246777839 /* 471 */, - 0xf9abf3ce5a3e2469 /* 472 */, 0x741e768d0fd312d2 /* 473 */, - 0x0144b883ced652c6 /* 474 */, 0xc20b5a5ba33f8552 /* 475 */, - 0x1ae69633c3435a9d /* 476 */, 0x97a28ca4088cfdec /* 477 */, - 0x8824a43c1e96f420 /* 478 */, 0x37612fa66eeea746 /* 479 */, - 0x6b4cb165f9cf0e5a /* 480 */, 0x43aa1c06a0abfb4a /* 481 */, - 0x7f4dc26ff162796b /* 482 */, 0x6cbacc8e54ed9b0f /* 483 */, - 0xa6b7ffefd2bb253e /* 484 */, 0x2e25bc95b0a29d4f /* 485 */, - 0x86d6a58bdef1388c /* 486 */, 0xded74ac576b6f054 /* 487 */, - 0x8030bdbc2b45805d /* 488 */, 0x3c81af70e94d9289 /* 489 */, - 0x3eff6dda9e3100db /* 490 */, 0xb38dc39fdfcc8847 /* 491 */, - 0x123885528d17b87e /* 492 */, 0xf2da0ed240b1b642 /* 493 */, - 0x44cefadcd54bf9a9 /* 494 */, 0x1312200e433c7ee6 /* 495 */, - 0x9ffcc84f3a78c748 /* 496 */, 0xf0cd1f72248576bb /* 497 */, - 0xec6974053638cfe4 /* 498 */, 0x2ba7b67c0cec4e4c /* 499 */, - 0xac2f4df3e5ce32ed /* 500 */, 0xcb33d14326ea4c11 /* 501 */, - 0xa4e9044cc77e58bc /* 502 */, 0x5f513293d934fcef /* 503 */, - 0x5dc9645506e55444 /* 504 */, 0x50de418f317de40a /* 505 */, - 0x388cb31a69dde259 /* 506 */, 0x2db4a83455820a86 /* 507 */, - 0x9010a91e84711ae9 /* 508 */, 0x4df7f0b7b1498371 /* 509 */, - 0xd62a2eabc0977179 /* 510 */, 0x22fac097aa8d5c0e /* 511 */, - 0xf49fcc2ff1daf39b /* 512 */, 0x487fd5c66ff29281 /* 513 */, - 0xe8a30667fcdca83f /* 514 */, 0x2c9b4be3d2fcce63 /* 515 */, - 0xda3ff74b93fbbbc2 /* 516 */, 0x2fa165d2fe70ba66 /* 517 */, - 0xa103e279970e93d4 /* 518 */, 0xbecdec77b0e45e71 /* 519 */, - 0xcfb41e723985e497 /* 520 */, 0xb70aaa025ef75017 /* 521 */, - 0xd42309f03840b8e0 /* 522 */, 0x8efc1ad035898579 /* 523 */, - 0x96c6920be2b2abc5 /* 524 */, 0x66af4163375a9172 /* 525 */, - 0x2174abdcca7127fb /* 526 */, 0xb33ccea64a72ff41 /* 527 */, - 0xf04a4933083066a5 /* 528 */, 0x8d970acdd7289af5 /* 529 */, - 0x8f96e8e031c8c25e /* 530 */, 0xf3fec02276875d47 /* 531 */, - 0xec7bf310056190dd /* 532 */, 0xf5adb0aebb0f1491 /* 533 */, - 0x9b50f8850fd58892 /* 534 */, 0x4975488358b74de8 /* 535 */, - 0xa3354ff691531c61 /* 536 */, 0x0702bbe481d2c6ee /* 537 */, - 0x89fb24057deded98 /* 538 */, 0xac3075138596e902 /* 539 */, - 0x1d2d3580172772ed /* 540 */, 0xeb738fc28e6bc30d /* 541 */, - 0x5854ef8f63044326 /* 542 */, 0x9e5c52325add3bbe /* 543 */, - 0x90aa53cf325c4623 /* 544 */, 0xc1d24d51349dd067 /* 545 */, - 0x2051cfeea69ea624 /* 546 */, 0x13220f0a862e7e4f /* 547 */, - 0xce39399404e04864 /* 548 */, 0xd9c42ca47086fcb7 /* 549 */, - 0x685ad2238a03e7cc /* 550 */, 0x066484b2ab2ff1db /* 551 */, - 0xfe9d5d70efbf79ec /* 552 */, 0x5b13b9dd9c481854 /* 553 */, - 0x15f0d475ed1509ad /* 554 */, 0x0bebcd060ec79851 /* 555 */, - 0xd58c6791183ab7f8 /* 556 */, 0xd1187c5052f3eee4 /* 557 */, - 0xc95d1192e54e82ff /* 558 */, 0x86eea14cb9ac6ca2 /* 559 */, - 0x3485beb153677d5d /* 560 */, 0xdd191d781f8c492a /* 561 */, - 0xf60866baa784ebf9 /* 562 */, 0x518f643ba2d08c74 /* 563 */, - 0x8852e956e1087c22 /* 564 */, 0xa768cb8dc410ae8d /* 565 */, - 0x38047726bfec8e1a /* 566 */, 0xa67738b4cd3b45aa /* 567 */, - 0xad16691cec0dde19 /* 568 */, 0xc6d4319380462e07 /* 569 */, - 0xc5a5876d0ba61938 /* 570 */, 0x16b9fa1fa58fd840 /* 571 */, - 0x188ab1173ca74f18 /* 572 */, 0xabda2f98c99c021f /* 573 */, - 0x3e0580ab134ae816 /* 574 */, 0x5f3b05b773645abb /* 575 */, - 0x2501a2be5575f2f6 /* 576 */, 0x1b2f74004e7e8ba9 /* 577 */, - 0x1cd7580371e8d953 /* 578 */, 0x7f6ed89562764e30 /* 579 */, - 0xb15926ff596f003d /* 580 */, 0x9f65293da8c5d6b9 /* 581 */, - 0x6ecef04dd690f84c /* 582 */, 0x4782275fff33af88 /* 583 */, - 0xe41433083f820801 /* 584 */, 0xfd0dfe409a1af9b5 /* 585 */, - 0x4325a3342cdb396b /* 586 */, 0x8ae77e62b301b252 /* 587 */, - 0xc36f9e9f6655615a /* 588 */, 0x85455a2d92d32c09 /* 589 */, - 0xf2c7dea949477485 /* 590 */, 0x63cfb4c133a39eba /* 591 */, - 0x83b040cc6ebc5462 /* 592 */, 0x3b9454c8fdb326b0 /* 593 */, - 0x56f56a9e87ffd78c /* 594 */, 0x2dc2940d99f42bc6 /* 595 */, - 0x98f7df096b096e2d /* 596 */, 0x19a6e01e3ad852bf /* 597 */, - 0x42a99ccbdbd4b40b /* 598 */, 0xa59998af45e9c559 /* 599 */, - 0x366295e807d93186 /* 600 */, 0x6b48181bfaa1f773 /* 601 */, - 0x1fec57e2157a0a1d /* 602 */, 0x4667446af6201ad5 /* 603 */, - 0xe615ebcacfb0f075 /* 604 */, 0xb8f31f4f68290778 /* 605 */, - 0x22713ed6ce22d11e /* 606 */, 0x3057c1a72ec3c93b /* 607 */, - 0xcb46acc37c3f1f2f /* 608 */, 0xdbb893fd02aaf50e /* 609 */, - 0x331fd92e600b9fcf /* 610 */, 0xa498f96148ea3ad6 /* 611 */, - 0xa8d8426e8b6a83ea /* 612 */, 0xa089b274b7735cdc /* 613 */, - 0x87f6b3731e524a11 /* 614 */, 0x118808e5cbc96749 /* 615 */, - 0x9906e4c7b19bd394 /* 616 */, 0xafed7f7e9b24a20c /* 617 */, - 0x6509eadeeb3644a7 /* 618 */, 0x6c1ef1d3e8ef0ede /* 619 */, - 0xb9c97d43e9798fb4 /* 620 */, 0xa2f2d784740c28a3 /* 621 */, - 0x7b8496476197566f /* 622 */, 0x7a5be3e6b65f069d /* 623 */, - 0xf96330ed78be6f10 /* 624 */, 0xeee60de77a076a15 /* 625 */, - 0x2b4bee4aa08b9bd0 /* 626 */, 0x6a56a63ec7b8894e /* 627 */, - 0x02121359ba34fef4 /* 628 */, 0x4cbf99f8283703fc /* 629 */, - 0x398071350caf30c8 /* 630 */, 0xd0a77a89f017687a /* 631 */, - 0xf1c1a9eb9e423569 /* 632 */, 0x8c7976282dee8199 /* 633 */, - 0x5d1737a5dd1f7abd /* 634 */, 0x4f53433c09a9fa80 /* 635 */, - 0xfa8b0c53df7ca1d9 /* 636 */, 0x3fd9dcbc886ccb77 /* 637 */, - 0xc040917ca91b4720 /* 638 */, 0x7dd00142f9d1dcdf /* 639 */, - 0x8476fc1d4f387b58 /* 640 */, 0x23f8e7c5f3316503 /* 641 */, - 0x032a2244e7e37339 /* 642 */, 0x5c87a5d750f5a74b /* 643 */, - 0x082b4cc43698992e /* 644 */, 0xdf917becb858f63c /* 645 */, - 0x3270b8fc5bf86dda /* 646 */, 0x10ae72bb29b5dd76 /* 647 */, - 0x576ac94e7700362b /* 648 */, 0x1ad112dac61efb8f /* 649 */, - 0x691bc30ec5faa427 /* 650 */, 0xff246311cc327143 /* 651 */, - 0x3142368e30e53206 /* 652 */, 0x71380e31e02ca396 /* 653 */, - 0x958d5c960aad76f1 /* 654 */, 0xf8d6f430c16da536 /* 655 */, - 0xc8ffd13f1be7e1d2 /* 656 */, 0x7578ae66004ddbe1 /* 657 */, - 0x05833f01067be646 /* 658 */, 0xbb34b5ad3bfe586d /* 659 */, - 0x095f34c9a12b97f0 /* 660 */, 0x247ab64525d60ca8 /* 661 */, - 0xdcdbc6f3017477d1 /* 662 */, 0x4a2e14d4decad24d /* 663 */, - 0xbdb5e6d9be0a1eeb /* 664 */, 0x2a7e70f7794301ab /* 665 */, - 0xdef42d8a270540fd /* 666 */, 0x01078ec0a34c22c1 /* 667 */, - 0xe5de511af4c16387 /* 668 */, 0x7ebb3a52bd9a330a /* 669 */, - 0x77697857aa7d6435 /* 670 */, 0x004e831603ae4c32 /* 671 */, - 0xe7a21020ad78e312 /* 672 */, 0x9d41a70c6ab420f2 /* 673 */, - 0x28e06c18ea1141e6 /* 674 */, 0xd2b28cbd984f6b28 /* 675 */, - 0x26b75f6c446e9d83 /* 676 */, 0xba47568c4d418d7f /* 677 */, - 0xd80badbfe6183d8e /* 678 */, 0x0e206d7f5f166044 /* 679 */, - 0xe258a43911cbca3e /* 680 */, 0x723a1746b21dc0bc /* 681 */, - 0xc7caa854f5d7cdd3 /* 682 */, 0x7cac32883d261d9c /* 683 */, - 0x7690c26423ba942c /* 684 */, 0x17e55524478042b8 /* 685 */, - 0xe0be477656a2389f /* 686 */, 0x4d289b5e67ab2da0 /* 687 */, - 0x44862b9c8fbbfd31 /* 688 */, 0xb47cc8049d141365 /* 689 */, - 0x822c1b362b91c793 /* 690 */, 0x4eb14655fb13dfd8 /* 691 */, - 0x1ecbba0714e2a97b /* 692 */, 0x6143459d5cde5f14 /* 693 */, - 0x53a8fbf1d5f0ac89 /* 694 */, 0x97ea04d81c5e5b00 /* 695 */, - 0x622181a8d4fdb3f3 /* 696 */, 0xe9bcd341572a1208 /* 697 */, - 0x1411258643cce58a /* 698 */, 0x9144c5fea4c6e0a4 /* 699 */, - 0x0d33d06565cf620f /* 700 */, 0x54a48d489f219ca1 /* 701 */, - 0xc43e5eac6d63c821 /* 702 */, 0xa9728b3a72770daf /* 703 */, - 0xd7934e7b20df87ef /* 704 */, 0xe35503b61a3e86e5 /* 705 */, - 0xcae321fbc819d504 /* 706 */, 0x129a50b3ac60bfa6 /* 707 */, - 0xcd5e68ea7e9fb6c3 /* 708 */, 0xb01c90199483b1c7 /* 709 */, - 0x3de93cd5c295376c /* 710 */, 0xaed52edf2ab9ad13 /* 711 */, - 0x2e60f512c0a07884 /* 712 */, 0xbc3d86a3e36210c9 /* 713 */, - 0x35269d9b163951ce /* 714 */, 0x0c7d6e2ad0cdb5fa /* 715 */, - 0x59e86297d87f5733 /* 716 */, 0x298ef221898db0e7 /* 717 */, - 0x55000029d1a5aa7e /* 718 */, 0x8bc08ae1b5061b45 /* 719 */, - 0xc2c31c2b6c92703a /* 720 */, 0x94cc596baf25ef42 /* 721 */, - 0x0a1d73db22540456 /* 722 */, 0x04b6a0f9d9c4179a /* 723 */, - 0xeffdafa2ae3d3c60 /* 724 */, 0xf7c8075bb49496c4 /* 725 */, - 0x9cc5c7141d1cd4e3 /* 726 */, 0x78bd1638218e5534 /* 727 */, - 0xb2f11568f850246a /* 728 */, 0xedfabcfa9502bc29 /* 729 */, - 0x796ce5f2da23051b /* 730 */, 0xaae128b0dc93537c /* 731 */, - 0x3a493da0ee4b29ae /* 732 */, 0xb5df6b2c416895d7 /* 733 */, - 0xfcabbd25122d7f37 /* 734 */, 0x70810b58105dc4b1 /* 735 */, - 0xe10fdd37f7882a90 /* 736 */, 0x524dcab5518a3f5c /* 737 */, - 0x3c9e85878451255b /* 738 */, 0x4029828119bd34e2 /* 739 */, - 0x74a05b6f5d3ceccb /* 740 */, 0xb610021542e13eca /* 741 */, - 0x0ff979d12f59e2ac /* 742 */, 0x6037da27e4f9cc50 /* 743 */, - 0x5e92975a0df1847d /* 744 */, 0xd66de190d3e623fe /* 745 */, - 0x5032d6b87b568048 /* 746 */, 0x9a36b7ce8235216e /* 747 */, - 0x80272a7a24f64b4a /* 748 */, 0x93efed8b8c6916f7 /* 749 */, - 0x37ddbff44cce1555 /* 750 */, 0x4b95db5d4b99bd25 /* 751 */, - 0x92d3fda169812fc0 /* 752 */, 0xfb1a4a9a90660bb6 /* 753 */, - 0x730c196946a4b9b2 /* 754 */, 0x81e289aa7f49da68 /* 755 */, - 0x64669a0f83b1a05f /* 756 */, 0x27b3ff7d9644f48b /* 757 */, - 0xcc6b615c8db675b3 /* 758 */, 0x674f20b9bcebbe95 /* 759 */, - 0x6f31238275655982 /* 760 */, 0x5ae488713e45cf05 /* 761 */, - 0xbf619f9954c21157 /* 762 */, 0xeabac46040a8eae9 /* 763 */, - 0x454c6fe9f2c0c1cd /* 764 */, 0x419cf6496412691c /* 765 */, - 0xd3dc3bef265b0f70 /* 766 */, 0x6d0e60f5c3578a9e /* 767 */, - 0x5b0e608526323c55 /* 768 */, 0x1a46c1a9fa1b59f5 /* 769 */, - 0xa9e245a17c4c8ffa /* 770 */, 0x65ca5159db2955d7 /* 771 */, - 0x05db0a76ce35afc2 /* 772 */, 0x81eac77ea9113d45 /* 773 */, - 0x528ef88ab6ac0a0d /* 774 */, 0xa09ea253597be3ff /* 775 */, - 0x430ddfb3ac48cd56 /* 776 */, 0xc4b3a67af45ce46f /* 777 */, - 0x4ececfd8fbe2d05e /* 778 */, 0x3ef56f10b39935f0 /* 779 */, - 0x0b22d6829cd619c6 /* 780 */, 0x17fd460a74df2069 /* 781 */, - 0x6cf8cc8e8510ed40 /* 782 */, 0xd6c824bf3a6ecaa7 /* 783 */, - 0x61243d581a817049 /* 784 */, 0x048bacb6bbc163a2 /* 785 */, - 0xd9a38ac27d44cc32 /* 786 */, 0x7fddff5baaf410ab /* 787 */, - 0xad6d495aa804824b /* 788 */, 0xe1a6a74f2d8c9f94 /* 789 */, - 0xd4f7851235dee8e3 /* 790 */, 0xfd4b7f886540d893 /* 791 */, - 0x247c20042aa4bfda /* 792 */, 0x096ea1c517d1327c /* 793 */, - 0xd56966b4361a6685 /* 794 */, 0x277da5c31221057d /* 795 */, - 0x94d59893a43acff7 /* 796 */, 0x64f0c51ccdc02281 /* 797 */, - 0x3d33bcc4ff6189db /* 798 */, 0xe005cb184ce66af1 /* 799 */, - 0xff5ccd1d1db99bea /* 800 */, 0xb0b854a7fe42980f /* 801 */, - 0x7bd46a6a718d4b9f /* 802 */, 0xd10fa8cc22a5fd8c /* 803 */, - 0xd31484952be4bd31 /* 804 */, 0xc7fa975fcb243847 /* 805 */, - 0x4886ed1e5846c407 /* 806 */, 0x28cddb791eb70b04 /* 807 */, - 0xc2b00be2f573417f /* 808 */, 0x5c9590452180f877 /* 809 */, - 0x7a6bddfff370eb00 /* 810 */, 0xce509e38d6d9d6a4 /* 811 */, - 0xebeb0f00647fa702 /* 812 */, 0x1dcc06cf76606f06 /* 813 */, - 0xe4d9f28ba286ff0a /* 814 */, 0xd85a305dc918c262 /* 815 */, - 0x475b1d8732225f54 /* 816 */, 0x2d4fb51668ccb5fe /* 817 */, - 0xa679b9d9d72bba20 /* 818 */, 0x53841c0d912d43a5 /* 819 */, - 0x3b7eaa48bf12a4e8 /* 820 */, 0x781e0e47f22f1ddf /* 821 */, - 0xeff20ce60ab50973 /* 822 */, 0x20d261d19dffb742 /* 823 */, - 0x16a12b03062a2e39 /* 824 */, 0x1960eb2239650495 /* 825 */, - 0x251c16fed50eb8b8 /* 826 */, 0x9ac0c330f826016e /* 827 */, - 0xed152665953e7671 /* 828 */, 0x02d63194a6369570 /* 829 */, - 0x5074f08394b1c987 /* 830 */, 0x70ba598c90b25ce1 /* 831 */, - 0x794a15810b9742f6 /* 832 */, 0x0d5925e9fcaf8c6c /* 833 */, - 0x3067716cd868744e /* 834 */, 0x910ab077e8d7731b /* 835 */, - 0x6a61bbdb5ac42f61 /* 836 */, 0x93513efbf0851567 /* 837 */, - 0xf494724b9e83e9d5 /* 838 */, 0xe887e1985c09648d /* 839 */, - 0x34b1d3c675370cfd /* 840 */, 0xdc35e433bc0d255d /* 841 */, - 0xd0aab84234131be0 /* 842 */, 0x08042a50b48b7eaf /* 843 */, - 0x9997c4ee44a3ab35 /* 844 */, 0x829a7b49201799d0 /* 845 */, - 0x263b8307b7c54441 /* 846 */, 0x752f95f4fd6a6ca6 /* 847 */, - 0x927217402c08c6e5 /* 848 */, 0x2a8ab754a795d9ee /* 849 */, - 0xa442f7552f72943d /* 850 */, 0x2c31334e19781208 /* 851 */, - 0x4fa98d7ceaee6291 /* 852 */, 0x55c3862f665db309 /* 853 */, - 0xbd0610175d53b1f3 /* 854 */, 0x46fe6cb840413f27 /* 855 */, - 0x3fe03792df0cfa59 /* 856 */, 0xcfe700372eb85e8f /* 857 */, - 0xa7be29e7adbce118 /* 858 */, 0xe544ee5cde8431dd /* 859 */, - 0x8a781b1b41f1873e /* 860 */, 0xa5c94c78a0d2f0e7 /* 861 */, - 0x39412e2877b60728 /* 862 */, 0xa1265ef3afc9a62c /* 863 */, - 0xbcc2770c6a2506c5 /* 864 */, 0x3ab66dd5dce1ce12 /* 865 */, - 0xe65499d04a675b37 /* 866 */, 0x7d8f523481bfd216 /* 867 */, - 0x0f6f64fcec15f389 /* 868 */, 0x74efbe618b5b13c8 /* 869 */, - 0xacdc82b714273e1d /* 870 */, 0xdd40bfe003199d17 /* 871 */, - 0x37e99257e7e061f8 /* 872 */, 0xfa52626904775aaa /* 873 */, - 0x8bbbf63a463d56f9 /* 874 */, 0xf0013f1543a26e64 /* 875 */, - 0xa8307e9f879ec898 /* 876 */, 0xcc4c27a4150177cc /* 877 */, - 0x1b432f2cca1d3348 /* 878 */, 0xde1d1f8f9f6fa013 /* 879 */, - 0x606602a047a7ddd6 /* 880 */, 0xd237ab64cc1cb2c7 /* 881 */, - 0x9b938e7225fcd1d3 /* 882 */, 0xec4e03708e0ff476 /* 883 */, - 0xfeb2fbda3d03c12d /* 884 */, 0xae0bced2ee43889a /* 885 */, - 0x22cb8923ebfb4f43 /* 886 */, 0x69360d013cf7396d /* 887 */, - 0x855e3602d2d4e022 /* 888 */, 0x073805bad01f784c /* 889 */, - 0x33e17a133852f546 /* 890 */, 0xdf4874058ac7b638 /* 891 */, - 0xba92b29c678aa14a /* 892 */, 0x0ce89fc76cfaadcd /* 893 */, - 0x5f9d4e0908339e34 /* 894 */, 0xf1afe9291f5923b9 /* 895 */, - 0x6e3480f60f4a265f /* 896 */, 0xeebf3a2ab29b841c /* 897 */, - 0xe21938a88f91b4ad /* 898 */, 0x57dfeff845c6d3c3 /* 899 */, - 0x2f006b0bf62caaf2 /* 900 */, 0x62f479ef6f75ee78 /* 901 */, - 0x11a55ad41c8916a9 /* 902 */, 0xf229d29084fed453 /* 903 */, - 0x42f1c27b16b000e6 /* 904 */, 0x2b1f76749823c074 /* 905 */, - 0x4b76eca3c2745360 /* 906 */, 0x8c98f463b91691bd /* 907 */, - 0x14bcc93cf1ade66a /* 908 */, 0x8885213e6d458397 /* 909 */, - 0x8e177df0274d4711 /* 910 */, 0xb49b73b5503f2951 /* 911 */, - 0x10168168c3f96b6b /* 912 */, 0x0e3d963b63cab0ae /* 913 */, - 0x8dfc4b5655a1db14 /* 914 */, 0xf789f1356e14de5c /* 915 */, - 0x683e68af4e51dac1 /* 916 */, 0xc9a84f9d8d4b0fd9 /* 917 */, - 0x3691e03f52a0f9d1 /* 918 */, 0x5ed86e46e1878e80 /* 919 */, - 0x3c711a0e99d07150 /* 920 */, 0x5a0865b20c4e9310 /* 921 */, - 0x56fbfc1fe4f0682e /* 922 */, 0xea8d5de3105edf9b /* 923 */, - 0x71abfdb12379187a /* 924 */, 0x2eb99de1bee77b9c /* 925 */, - 0x21ecc0ea33cf4523 /* 926 */, 0x59a4d7521805c7a1 /* 927 */, - 0x3896f5eb56ae7c72 /* 928 */, 0xaa638f3db18f75dc /* 929 */, - 0x9f39358dabe9808e /* 930 */, 0xb7defa91c00b72ac /* 931 */, - 0x6b5541fd62492d92 /* 932 */, 0x6dc6dee8f92e4d5b /* 933 */, - 0x353f57abc4beea7e /* 934 */, 0x735769d6da5690ce /* 935 */, - 0x0a234aa642391484 /* 936 */, 0xf6f9508028f80d9d /* 937 */, - 0xb8e319a27ab3f215 /* 938 */, 0x31ad9c1151341a4d /* 939 */, - 0x773c22a57bef5805 /* 940 */, 0x45c7561a07968633 /* 941 */, - 0xf913da9e249dbe36 /* 942 */, 0xda652d9b78a64c68 /* 943 */, - 0x4c27a97f3bc334ef /* 944 */, 0x76621220e66b17f4 /* 945 */, - 0x967743899acd7d0b /* 946 */, 0xf3ee5bcae0ed6782 /* 947 */, - 0x409f753600c879fc /* 948 */, 0x06d09a39b5926db6 /* 949 */, - 0x6f83aeb0317ac588 /* 950 */, 0x01e6ca4a86381f21 /* 951 */, - 0x66ff3462d19f3025 /* 952 */, 0x72207c24ddfd3bfb /* 953 */, - 0x4af6b6d3e2ece2eb /* 954 */, 0x9c994dbec7ea08de /* 955 */, - 0x49ace597b09a8bc4 /* 956 */, 0xb38c4766cf0797ba /* 957 */, - 0x131b9373c57c2a75 /* 958 */, 0xb1822cce61931e58 /* 959 */, - 0x9d7555b909ba1c0c /* 960 */, 0x127fafdd937d11d2 /* 961 */, - 0x29da3badc66d92e4 /* 962 */, 0xa2c1d57154c2ecbc /* 963 */, - 0x58c5134d82f6fe24 /* 964 */, 0x1c3ae3515b62274f /* 965 */, - 0xe907c82e01cb8126 /* 966 */, 0xf8ed091913e37fcb /* 967 */, - 0x3249d8f9c80046c9 /* 968 */, 0x80cf9bede388fb63 /* 969 */, - 0x1881539a116cf19e /* 970 */, 0x5103f3f76bd52457 /* 971 */, - 0x15b7e6f5ae47f7a8 /* 972 */, 0xdbd7c6ded47e9ccf /* 973 */, - 0x44e55c410228bb1a /* 974 */, 0xb647d4255edb4e99 /* 975 */, - 0x5d11882bb8aafc30 /* 976 */, 0xf5098bbb29d3212a /* 977 */, - 0x8fb5ea14e90296b3 /* 978 */, 0x677b942157dd025a /* 979 */, - 0xfb58e7c0a390acb5 /* 980 */, 0x89d3674c83bd4a01 /* 981 */, - 0x9e2da4df4bf3b93b /* 982 */, 0xfcc41e328cab4829 /* 983 */, - 0x03f38c96ba582c52 /* 984 */, 0xcad1bdbd7fd85db2 /* 985 */, - 0xbbb442c16082ae83 /* 986 */, 0xb95fe86ba5da9ab0 /* 987 */, - 0xb22e04673771a93f /* 988 */, 0x845358c9493152d8 /* 989 */, - 0xbe2a488697b4541e /* 990 */, 0x95a2dc2dd38e6966 /* 991 */, - 0xc02c11ac923c852b /* 992 */, 0x2388b1990df2a87b /* 993 */, - 0x7c8008fa1b4f37be /* 994 */, 0x1f70d0c84d54e503 /* 995 */, - 0x5490adec7ece57d4 /* 996 */, 0x002b3c27d9063a3a /* 997 */, - 0x7eaea3848030a2bf /* 998 */, 0xc602326ded2003c0 /* 999 */, - 0x83a7287d69a94086 /* 1000 */, 0xc57a5fcb30f57a8a /* 1001 */, - 0xb56844e479ebe779 /* 1002 */, 0xa373b40f05dcbce9 /* 1003 */, - 0xd71a786e88570ee2 /* 1004 */, 0x879cbacdbde8f6a0 /* 1005 */, - 0x976ad1bcc164a32f /* 1006 */, 0xab21e25e9666d78b /* 1007 */, - 0x901063aae5e5c33c /* 1008 */, 0x9818b34448698d90 /* 1009 */, - 0xe36487ae3e1e8abb /* 1010 */, 0xafbdf931893bdcb4 /* 1011 */, - 0x6345a0dc5fbbd519 /* 1012 */, 0x8628fe269b9465ca /* 1013 */, - 0x1e5d01603f9c51ec /* 1014 */, 0x4de44006a15049b7 /* 1015 */, - 0xbf6c70e5f776cbb1 /* 1016 */, 0x411218f2ef552bed /* 1017 */, - 0xcb0c0708705a36a3 /* 1018 */, 0xe74d14754f986044 /* 1019 */, - 0xcd56d9430ea8280e /* 1020 */, 0xc12591d7535f5065 /* 1021 */, - 0xc83223f1720aef96 /* 1022 */, 0xc3a0396f7363a51f /* 1023 */ -]; - - -/******************************************************************************* - -*******************************************************************************/ - -version (UnitTest) -{ - unittest - { - static char[][] strings = [ - "", - "abc", - "Tiger", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-", - "ABCDEFGHIJKLMNOPQRSTUVWXYZ=abcdefghijklmnopqrstuvwxyz+0123456789", - "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham", - "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge.", - "Tiger - A Fast New Hash Function, by Ross Anderson and Eli Biham, proceedings of Fast Software Encryption 3, Cambridge, 1996.", - "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+-" - ]; - static char[][] results = [ - "24f0130c63ac933216166e76b1bb925ff373de2d49584e7a", - "f258c1e88414ab2a527ab541ffc5b8bf935f7b951c132951", - "9f00f599072300dd276abb38c8eb6dec37790c116f9d2bdf", - "87fb2a9083851cf7470d2cf810e6df9eb586445034a5a386", - "467db80863ebce488df1cd1261655de957896565975f9197", - "0c410a042968868a1671da5a3fd29a725ec1e457d3cdb303", - "ebf591d5afa655ce7f22894ff87f54ac89c811b6b0da3193", - "3d9aeb03d1bd1a6357b2774dfd6d5b24dd68151d503974fc", - "00b83eb4e53440c576ac6aaee0a7485825fd15e70a59ffe4" - ]; - - Tiger h = new Tiger(); - - foreach(int i, char[] s; strings) { - h.update(cast(ubyte[]) s); - - char[] d = h.hexDigest(); - - assert(d == results[i],":("~s~")("~d~")!=("~results[i]~")"); - - } - - ubyte[65536] buffer; - - for (uint i = 0; i < 65536; i++) - buffer[i] = cast(ubyte) i; - - h.update(buffer); - char[] e = h.hexDigest(); - - assert(e == "8ef43951b3f5f4fd1d41afe51b420e710462f233c3aaa8e1", - ":(65k)("~e~")!=(8ef43951b3f5f4fd1d41afe51b420e710462f233c3aaa8e1)"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/model/IBuffer.d --- a/tango/tango/io/model/IBuffer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,622 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004: Initial release - Dec 2006: Outback release - - author: Kris - -*******************************************************************************/ - -module tango.io.model.IBuffer; - -private import tango.io.model.IConduit; - -/******************************************************************************* - - Buffer is central concept in Tango I/O. Each buffer acts - as a queue (line) where items are removed from the front - and new items are added to the back. Buffers are modeled - by this interface and implemented in various ways. - - Buffer can be read from and written to directly, though - various data-converters and filters are often leveraged - to apply structure to what might otherwise be simple raw - data. - - Buffers may also be tokenized by applying an Iterator. - This can be handy when one is dealing with text input, - and/or the content suits a more fluid format than most - typical converters support. Iterator tokens are mapped - directly onto buffer content (sliced), making them quite - efficient in practice. Like other types of buffer client, - multiple iterators can be mapped onto one common buffer - and access will be serialized. - - Buffers are sometimes memory-only, in which case there - is nothing left to do when a client has consumed all the - content. Other buffers are themselves bound to an external - device called a conduit. When this is the case, a consumer - will eventually cause a buffer to reload via its associated - conduit and previous buffer content will be lost. - - A similar approach is applied to clients which populate a - buffer, whereby the content of a full buffer will be flushed - to a bound conduit before continuing. Another variation is - that of a memory-mapped buffer, whereby the buffer content - is mapped directly to virtual memory exposed via the OS. This - can be used to address large files as an array of content. - - See tango.io.Buffer for more info. - -*******************************************************************************/ - -abstract class IBuffer : IConduit, Buffered -{ - alias append opCall; - alias flush opCall; - - /*********************************************************************** - - implements Buffered interface - - ***********************************************************************/ - - abstract IBuffer buffer (); - - /*********************************************************************** - - Return the backing array - - ***********************************************************************/ - - abstract void[] getContent (); - - /*********************************************************************** - - Return a void[] slice of the buffer up to the limit of - valid content. - - ***********************************************************************/ - - abstract void[] slice (); - - /*********************************************************************** - - Set the backing array with all content readable. Writing - to this will either flush it to an associated conduit, or - raise an Eof condition. Use IBuffer.clear() to reset the - content (make it all writable). - - ***********************************************************************/ - - abstract IBuffer setContent (void[] data); - - /*********************************************************************** - - Set the backing array with some content readable. Writing - to this will either flush it to an associated conduit, or - raise an Eof condition. Use IBuffer.clear() to reset the - content (make it all writable). - - ***********************************************************************/ - - abstract IBuffer setContent (void[] data, uint readable); - - /*********************************************************************** - - Append an array of data into this buffer, and flush to the - conduit as necessary. Returns a chaining reference if all - data was written; throws an IOException indicating eof or - eob if not. - - This is often used in lieu of a Writer. - - ***********************************************************************/ - - abstract IBuffer append (void* content, uint length); - - /*********************************************************************** - - Append an array of data into this buffer, and flush to the - conduit as necessary. Returns a chaining reference if all - data was written; throws an IOException indicating eof or - eob if not. - - This is often used in lieu of a Writer. - - ***********************************************************************/ - - abstract IBuffer append (void[] content); - - /*********************************************************************** - - Append another buffer to this one, and flush to the - conduit as necessary. Returns a chaining reference if all - data was written; throws an IOException indicating eof or - eob if not. - - This is often used in lieu of a Writer. - - ***********************************************************************/ - - abstract IBuffer append (IBuffer other); - - /*********************************************************************** - - Consume content from a producer - - Params: - The content to consume. This is consumed verbatim, and in - raw binary format ~ no implicit conversions are performed. - - Remarks: - This is often used in lieu of a Writer, and enables simple - classes, such as FilePath and Uri, to emit content directly - into a buffer (thus avoiding potential heap activity) - - Examples: - --- - auto path = new FilePath (somepath); - - path.produce (&buffer.consume); - --- - - ***********************************************************************/ - - abstract void consume (void[] src); - - /*********************************************************************** - - Read a chunk of data from the buffer, loading from the - conduit as necessary. The requested number of bytes are - loaded into the buffer, and marked as having been read - when the 'eat' parameter is set true. When 'eat' is set - false, the read position is not adjusted. - - Returns the corresponding buffer slice when successful, - or null if there's not enough data available (Eof; Eob). - - ***********************************************************************/ - - abstract void[] slice (uint size, bool eat = true); - - /*********************************************************************** - - Access buffer content - - Params: - dst = destination of the content - bytes = size of dst - - Returns: - A reference to the populated content - - Remarks: - Fill the provided array with content. We try to satisfy - the request from the buffer content, and read directly - from an attached conduit where more is required. - - ***********************************************************************/ - - abstract void[] readExact (void* dst, uint bytes); - - /********************************************************************** - - Fill the provided buffer. Returns the number of bytes - actually read, which will be less than dst.length when - Eof has been reached and IConduit.Eof thereafter. - - **********************************************************************/ - - abstract uint fill (void[] dst); - - /*********************************************************************** - - Exposes the raw data buffer at the current write position, - The delegate is provided with a void[] representing space - available within the buffer at the current write position. - - The delegate should return the approriate number of bytes - if it writes valid content, or IConduit.Eof on error. - - Returns whatever the delegate returns. - - ***********************************************************************/ - - abstract uint write (uint delegate (void[]) writer); - - /*********************************************************************** - - Exposes the raw data buffer at the current read position. The - delegate is provided with a void[] representing the available - data, and should return zero to leave the current read position - intact. - - If the delegate consumes data, it should return the number of - bytes consumed; or IConduit.Eof to indicate an error. - - Returns whatever the delegate returns. - - ***********************************************************************/ - - abstract uint read (uint delegate (void[]) reader); - - /*********************************************************************** - - If we have some data left after an export, move it to - front-of-buffer and set position to be just after the - remains. This is for supporting certain conduits which - choose to write just the initial portion of a request. - - Limit is set to the amount of data remaining. Position - is always reset to zero. - - ***********************************************************************/ - - abstract IBuffer compress (); - - /*********************************************************************** - - Skip ahead by the specified number of bytes, streaming from - the associated conduit as necessary. - - Can also reverse the read position by 'size' bytes. This may - be used to support lookahead-type operations. - - Returns true if successful, false otherwise. - - ***********************************************************************/ - - abstract bool skip (int size); - - /*********************************************************************** - - Support for tokenizing iterators. - - Upon success, the delegate should return the byte-based - index of the consumed pattern (tail end of it). Failure - to match a pattern should be indicated by returning an - IConduit.Eof. - - Each pattern is expected to be stripped of the delimiter. - An end-of-file condition causes trailing content to be - placed into the token. Requests made beyond Eof result - in empty matches (length == zero). - - Note that additional iterator and/or reader instances - will stay in lockstep when bound to a common buffer. - - Returns true if a token was isolated, false otherwise. - - ***********************************************************************/ - - abstract bool next (uint delegate (void[])); - - /*********************************************************************** - - Try to _fill the available buffer with content from the - specified conduit. We try to read as much as possible - by clearing the buffer when all current content has been - eaten. If there is no space available, nothing will be - read. - - Returns the number of bytes read, or Conduit.Eof. - - ***********************************************************************/ - - abstract uint fill (InputStream src); - - /*********************************************************************** - - Write as much of the buffer that the associated conduit - can consume. - - Returns the number of bytes written, or Conduit.Eof. - - ***********************************************************************/ - - abstract uint drain (OutputStream dst); - - /*********************************************************************** - - Truncate the buffer within its extent. Returns true if - the new 'extent' is valid, false otherwise. - - ***********************************************************************/ - - abstract bool truncate (uint extent); - - /*********************************************************************** - - Return count of readable bytes remaining in buffer. This is - calculated simply as limit() - position(). - - ***********************************************************************/ - - abstract uint readable (); - - /*********************************************************************** - - Return count of writable bytes available in buffer. This is - calculated simply as capacity() - limit(). - - ***********************************************************************/ - - abstract uint writable (); - - /*********************************************************************** - - Returns the limit of readable content within this buffer. - - ***********************************************************************/ - - abstract uint limit (); - - /*********************************************************************** - - Returns the total capacity of this buffer. - - ***********************************************************************/ - - abstract uint capacity (); - - /*********************************************************************** - - Returns the current position within this buffer. - - ***********************************************************************/ - - abstract uint position (); - - /*********************************************************************** - - Sets the external conduit associated with this buffer. - - Buffers do not require an external conduit to operate, but - it can be convenient to associate one. For example, methods - read and write use it to import/export content as necessary. - - ***********************************************************************/ - - abstract IBuffer setConduit (IConduit conduit); - - /*********************************************************************** - - Set output stream - - Params: - sink = the stream to attach to - - Remarks: - Sets the external output stream associated with this buffer. - - Buffers do not require an external stream to operate, but - it can be convenient to associate one. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - abstract IBuffer output (OutputStream sink); - - /*********************************************************************** - - Set input stream - - Params: - source = the stream to attach to - - Remarks: - Sets the external input stream associated with this buffer. - - Buffers do not require an external stream to operate, but - it can be convenient to associate one. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - abstract IBuffer input (InputStream source); - - /*********************************************************************** - - Transfer content into the provided dst. - - Params: - dst = destination of the content - - Returns: - Return the number of bytes read, which may be less than - dst.length. Eof is returned when no further content is - available. - - Remarks: - Populates the provided array with content. We try to - satisfy the request from the buffer content, and read - directly from an attached conduit when the buffer is - empty. - - ***********************************************************************/ - - abstract uint read (void[] dst); - - /*********************************************************************** - - Emulate OutputStream.write() - - Params: - src = the content to write - - Returns: - Return the number of bytes written, which will be Eof when - the content cannot be written. - - Remarks: - Appends all of dst to the buffer, flushing to an attached - conduit as necessary. - - ***********************************************************************/ - - abstract uint write (void[] src); - - /*********************************************************************** - - Exposes configured output stream - - Returns: - Returns the OutputStream associated with this buffer. Returns - null if the buffer is not attached to an output; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external stream to operate, but - it can be convenient to associate them. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - abstract OutputStream output (); - - /*********************************************************************** - - Exposes configured input stream - - Returns: - Returns the InputStream associated with this buffer. Returns - null if the buffer is not attached to an input; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external stream to operate, but - it can be convenient to associate them. For example, methods - fill & drain use them to import/export content as necessary. - - ***********************************************************************/ - - abstract InputStream input (); - - /*********************************************************************** - - Throw an exception with the provided message - - ***********************************************************************/ - - abstract void error (char[] msg); - - /*********************************************************************** - - Access configured conduit - - Returns: - Returns the conduit associated with this buffer. Returns - null if the buffer is purely memory based; that is, it's - not backed by some external medium. - - Remarks: - Buffers do not require an external conduit to operate, but - it can be convenient to associate one. For example, methods - fill() & drain() use it to import/export content as necessary. - - ***********************************************************************/ - - abstract IConduit conduit (); - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O. - - ***********************************************************************/ - - abstract uint bufferSize (); - - /*********************************************************************** - - Return the name of this conduit. - - ***********************************************************************/ - - abstract char[] toString (); - - /*********************************************************************** - - Is the conduit alive? - - ***********************************************************************/ - - abstract bool isAlive (); - - /*********************************************************************** - - Flush the contents of this buffer to the related conduit. - Throws an IOException on premature eof. - - ***********************************************************************/ - - abstract OutputStream flush (); - - /*********************************************************************** - - Reset position and limit to zero. - - ***********************************************************************/ - - abstract InputStream clear (); - - /*********************************************************************** - - Copy content via this buffer from the provided src - conduit. - - Remarks: - The src conduit has its content transferred through - this buffer via a series of fill & drain operations, - until there is no more content available. The buffer - content should be explicitly flushed by the caller. - - Throws an IOException on premature Eof. - - ***********************************************************************/ - - abstract OutputStream copy (InputStream src); - - /*********************************************************************** - - Release external resources - - ***********************************************************************/ - - abstract void detach (); - - /*********************************************************************** - - Close the stream - - Remarks: - Propagate request to an attached OutputStream (this is a - requirement for the OutputStream interface) - - ***********************************************************************/ - - abstract void close (); -} - - -/******************************************************************************* - - Supported by streams which are prepared to share an internal buffer - instance. This is intended to avoid a situation whereby content is - shunted unnecessarily from one buffer to another when "decorator" - streams are connected together in arbitrary ways. - - Do not implement this if the internal buffer should not be accessed - directly by another stream e.g. if wrapper methods manipulate content - on the way in or out of the buffer. - -*******************************************************************************/ - -interface Buffered -{ - IBuffer buffer(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/model/IConduit.d --- a/tango/tango/io/model/IConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,248 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - Outback release: December 2006 - - author: Kris - -*******************************************************************************/ - -module tango.io.model.IConduit; - -public import tango.io.model.IBuffer; - -/******************************************************************************* - - Conduits provide virtualized access to external content, and - represent things like files or Internet connections. Conduits - expose a pair of streams, are modelled by tango.io.model.IConduit, - and are implemented via classes such as FileConduit & SocketConduit. - - Additional kinds of conduit are easy to construct: one either - subclasses tango.io.Conduit, or implements tango.io.model.IConduit. - A conduit typically reads and writes from/to an IBuffer in large - chunks, typically the entire buffer. Alternatively, one can invoke - input.read(dst[]) and/or output.write(src[]) directly. - -*******************************************************************************/ - -interface IConduit : InputStream, OutputStream -{ - /*********************************************************************** - - Return the input stream - - ***********************************************************************/ - - abstract InputStream input (); - - /*********************************************************************** - - Return the output stream - - ***********************************************************************/ - - abstract OutputStream output (); - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O - - ***********************************************************************/ - - abstract uint bufferSize (); - - /*********************************************************************** - - Return the name of this conduit - - ***********************************************************************/ - - abstract char[] toString (); - - /*********************************************************************** - - Is the conduit alive? - - ***********************************************************************/ - - abstract bool isAlive (); - - /*********************************************************************** - - Release external resources - - ***********************************************************************/ - - abstract void detach (); - - /*********************************************************************** - - Throw a generic IO exception with the provided msg - - ***********************************************************************/ - - abstract void error (char[] msg); - - /*********************************************************************** - - Models the ability to seek within a conduit - - ***********************************************************************/ - - interface Seek - { - /*************************************************************** - - The anchor positions supported by seek() - - ***************************************************************/ - - enum Anchor { - Begin = 0, - Current = 1, - End = 2, - }; - - /*************************************************************** - - Move the file position to the given offset from the - provided anchor point, and return adjusted position. - - ***************************************************************/ - - long seek (long offset, Anchor anchor = Anchor.Begin); - } -} - - -/******************************************************************************* - - Describes how to make an IO entity usable with selectors - -*******************************************************************************/ - -interface ISelectable -{ - typedef int Handle = -1; /// opaque OS file-handle - - /*********************************************************************** - - Models a handle-oriented device. - - TODO: figure out how to avoid exposing this in the general - case - - ***********************************************************************/ - - Handle fileHandle (); -} - - -/******************************************************************************* - - The common attributes of streams - -*******************************************************************************/ - -interface IOStream -{ - enum : uint - { - Eof = uint.max /// the End-of-Flow identifer - } - - /*********************************************************************** - - Return the host conduit - - ***********************************************************************/ - - IConduit conduit (); - - - /*********************************************************************** - - Close the input - - ***********************************************************************/ - - void close (); -} - - -/******************************************************************************* - - The Tango input stream - -*******************************************************************************/ - -interface InputStream : IOStream -{ - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst. Eof is returned whenever an end-of-flow - condition arises. - - ***********************************************************************/ - - uint read (void[] dst); - - /*********************************************************************** - - Clear any buffered content - - ***********************************************************************/ - - InputStream clear (); -} - - -/******************************************************************************* - - The Tango output stream - -*******************************************************************************/ - -interface OutputStream : IOStream -{ - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided. Eof is returned when - an end-of-flow condition arises. - - ***********************************************************************/ - - uint write (void[] src); - - /*********************************************************************** - - Transfer the content of another conduit to this one. Returns - a reference to this class, and throws IOException on failure. - - ***********************************************************************/ - - OutputStream copy (InputStream src); - - /*********************************************************************** - - Purge buffered content - - ***********************************************************************/ - - OutputStream flush (); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/model/IListener.d --- a/tango/tango/io/model/IListener.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.io.model.IListener; - - -/****************************************************************************** - -******************************************************************************/ - -interface IListener -{ - /*********************************************************************** - - Stop listening; this may be delayed until after the next - valid read operation. - - ***********************************************************************/ - - void cancel (); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/Allocator.d --- a/tango/tango/io/protocol/Allocator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: October 2004 - Outback release: December 2006 - - author: Kris - - Allocators to use in conjunction with the Reader class. These are - intended to manage array allocation for a variety of Reader.get() - methods - -*******************************************************************************/ - -module tango.io.protocol.Allocator; - -private import tango.io.protocol.model.IProtocol; - - -/******************************************************************************* - - Simple allocator, copying into the heap for each array requested: - this is the default behaviour for Reader instances - -*******************************************************************************/ - -class HeapCopy : IAllocator -{ - private IProtocol protocol_; - - /*********************************************************************** - - ***********************************************************************/ - - this (IProtocol protocol) - { - protocol_ = protocol; - } - - /*********************************************************************** - - ***********************************************************************/ - - final IProtocol protocol () - { - return protocol_; - } - - /*********************************************************************** - - ***********************************************************************/ - - final void reset () - { - } - - /*********************************************************************** - - ***********************************************************************/ - - final void[] allocate (IProtocol.Reader reader, uint bytes, IProtocol.Type type) - { - return reader ((new void[bytes]).ptr, bytes, type); - } -} - - -/******************************************************************************* - - Allocate from within a private heap space. This supports reading - data as 'records', reusing the same chunk of memory for each record - loaded. The ctor takes an argument defining the initial allocation - made, and this will be increased as necessary to accomodate larger - records. Use the reset() method to indicate end of record (reuse - memory for subsequent requests), or set the autoreset flag to reuse - upon each array request. - -*******************************************************************************/ - -class HeapSlice : IAllocator -{ - private uint used; - private void[] buffer; - private IProtocol protocol_; - private bool autoreset; - - /*********************************************************************** - - ***********************************************************************/ - - this (IProtocol protocol, uint width=4096, bool autoreset=false) - { - protocol_ = protocol; - buffer = new void[width]; - this.autoreset = autoreset; - } - - /*********************************************************************** - - ***********************************************************************/ - - final IProtocol protocol () - { - return protocol_; - } - - /*********************************************************************** - - Reset content length to zero - - ***********************************************************************/ - - final void reset () - { - used = 0; - } - - /*********************************************************************** - - No allocation: copy into a reserved arena. - - With HeapSlice, it is normal to allocate space large - enough to contain, say, a record of data. The reserved - space will grow to accomodate larger records. A reset() - call should be made between each record read, to ensure - the space is being reused. - - ***********************************************************************/ - - final void[] allocate (IProtocol.Reader reader, uint bytes, IProtocol.Type type) - { - if (autoreset) - used = 0; - - if ((used + bytes) > buffer.length) - buffer.length = (used + bytes) * 2; - - auto ptr = &buffer[used]; - used += bytes; - - return reader (ptr, bytes, type); - } -} - - -/******************************************************************************* - - Alias directly from the buffer instead of allocating from the heap. - This avoids both heap activity and copying, but requires some care - in terms of usage. See methods allocate() for details - -*******************************************************************************/ - -class BufferSlice : IAllocator -{ - private IProtocol protocol_; - - /*********************************************************************** - - ***********************************************************************/ - - this (IProtocol protocol) - { - protocol_ = protocol; - } - - /*********************************************************************** - - ***********************************************************************/ - - final IProtocol protocol () - { - return protocol_; - } - - /*********************************************************************** - - Move all unconsumed data to the front of the buffer, freeing - up space for more - - ***********************************************************************/ - - final void reset () - { - protocol.buffer.compress; - } - - /*********************************************************************** - - No alloc or copy: alias directly from buffer. While this is - very efficient (no heap activity) it should be used only in - scenarios where content is known to fit within a buffer, and - there is no conversion of said content e.g. take care when - using with EndianProtocol since it will convert within the - buffer, potentially confusing additional buffer clients. - - With BufferSlice, it is considered normal to create a Buffer - large enough to contain, say, a file and subsequently slice - all strings/arrays directly from this buffer. Smaller Buffers - can be used in a record-oriented manner similar to HeapSlice: - invoke reset() before each record is processed to ensure here - is sufficient space available in the buffer to house a complete - record. GrowBuffer could be used in the latter case, to ensure - the largest record width is always accomodated. - - A good use of this is in handling of network traffic, where - incoming data is often transient and of a known extent. For - another potential use, consider the quantity of distinct text - arrays generated by an XML parser -- would be convenient to - slice all of them from a single allocation instead - - ***********************************************************************/ - - final void[] allocate (IProtocol.Reader reader, uint bytes, IProtocol.Type type) - { - return protocol_.buffer.slice (bytes); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/EndianProtocol.d --- a/tango/tango/io/protocol/EndianProtocol.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,169 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jan 2007 : initial release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.EndianProtocol; - -private import tango.core.ByteSwap; - -private import tango.io.model.IBuffer, - tango.io.model.IConduit; - -private import tango.io.protocol.NativeProtocol; - -/******************************************************************************* - -*******************************************************************************/ - -class EndianProtocol : NativeProtocol -{ - /*********************************************************************** - - ***********************************************************************/ - - this (IConduit conduit, bool prefix=true) - { - super (conduit, prefix); - } - - /*********************************************************************** - - ***********************************************************************/ - - override void[] read (void* dst, uint bytes, Type type) - { - auto ret = super.read (dst, bytes, type); - - switch (type) - { - case Type.Short: - case Type.UShort: - case Type.Utf16: - ByteSwap.swap16 (dst, bytes); - break; - - case Type.Int: - case Type.UInt: - case Type.Float: - case Type.Utf32: - ByteSwap.swap32 (dst, bytes); - break; - - case Type.Long: - case Type.ULong: - case Type.Double: - ByteSwap.swap64 (dst, bytes); - break; - - case Type.Real: - ByteSwap.swap80 (dst, bytes); - break; - - default: - break; - } - - return ret; - } - - /*********************************************************************** - - ***********************************************************************/ - - override void write (void* src, uint bytes, Type type) - { - alias void function (void* dst, uint bytes) Swapper; - - void write (int mask, Swapper mutate) - { - uint writer (void[] dst) - { - // cap bytes written - uint len = dst.length & mask; - if (len > bytes) - len = bytes; - - dst [0..len] = src [0..len]; - mutate (dst.ptr, len); - return len; - } - - while (bytes) - if (bytes -= buffer_.write (&writer)) - // flush if we used all buffer space - buffer_.drain (buffer.output); - } - - - switch (type) - { - case Type.Short: - case Type.UShort: - case Type.Utf16: - write (~1, &ByteSwap.swap16); - break; - - case Type.Int: - case Type.UInt: - case Type.Float: - case Type.Utf32: - write (~3, &ByteSwap.swap32); - break; - - case Type.Long: - case Type.ULong: - case Type.Double: - write (~7, &ByteSwap.swap64); - break; - - case Type.Real: - write (~15, &ByteSwap.swap80); - break; - - default: - super.write (src, bytes, type); - break; - } - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Buffer; - - unittest - { - void[] alloc (EndianProtocol.Reader reader, uint bytes, EndianProtocol.Type type) - { - return reader ((new void[bytes]).ptr, bytes, type); - } - - char[] mule; - char[] test = "testing testing 123"; - - auto protocol = new EndianProtocol (new Buffer(32)); - protocol.writeArray (test.ptr, test.length, protocol.Type.Utf8); - - mule = cast(char[]) protocol.readArray (mule.ptr, mule.length, protocol.Type.Utf8, &alloc); - assert (mule == test); - - } -} - - - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/NativeProtocol.d --- a/tango/tango/io/protocol/NativeProtocol.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jan 2007 : initial release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.NativeProtocol; - -private import tango.io.Buffer; - -private import tango.io.protocol.model.IProtocol; - -/******************************************************************************* - -*******************************************************************************/ - -class NativeProtocol : IProtocol -{ - protected bool prefix_; - protected IBuffer buffer_; - - /*********************************************************************** - - ***********************************************************************/ - - this (IConduit conduit, bool prefix=true) - { - this.prefix_ = prefix; - - auto b = cast(Buffered) conduit; - buffer_ = b ? b.buffer : new Buffer(conduit); - } - - /*********************************************************************** - - ***********************************************************************/ - - IBuffer buffer () - { - return buffer_; - } - - /*********************************************************************** - - ***********************************************************************/ - - void[] read (void* dst, uint bytes, Type type) - { - return buffer_.readExact (dst, bytes); - } - - /*********************************************************************** - - ***********************************************************************/ - - void write (void* src, uint bytes, Type type) - { - buffer_.append (src, bytes); - } - - /*********************************************************************** - - ***********************************************************************/ - - void[] readArray (void* dst, uint bytes, Type type, Allocator alloc) - { - if (prefix_) - { - read (&bytes, bytes.sizeof, Type.UInt); - return alloc (&read, bytes, type); - } - - return read (dst, bytes, type); - } - - /*********************************************************************** - - ***********************************************************************/ - - void writeArray (void* src, uint bytes, Type type) - { - if (prefix_) - write (&bytes, bytes.sizeof, Type.UInt); - - write (src, bytes, type); - } -} - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Buffer; - import tango.io.protocol.Writer; - import tango.io.protocol.Reader; - import tango.io.protocol.NativeProtocol; - - unittest - { - auto protocol = new NativeProtocol (new Buffer(32)); - auto input = new Reader (protocol); - auto output = new Writer (protocol); - - char[] foo; - output ("testing testing 123"c); - input (foo); - assert (foo == "testing testing 123"); - } -} - - \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/PickleProtocol.d --- a/tango/tango/io/protocol/PickleProtocol.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,59 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jan 2007 : initial release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.PickleProtocol; - -/******************************************************************************* - -*******************************************************************************/ - -version (BigEndian) - { - private import tango.io.protocol.NativeProtocol; - public alias NativeProtocol PickleProtocol; - } - else - { - private import tango.io.protocol.EndianProtocol; - public alias EndianProtocol PickleProtocol; - } - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Buffer; - - unittest - { - int test = 0xcc55ff00; - - auto protocol = new PickleProtocol (new Buffer(32)); - protocol.write (&test, test.sizeof, protocol.Type.Int); - - auto ptr = protocol.buffer.slice (test.sizeof, false).ptr; - protocol.read (&test, test.sizeof, protocol.Type.Int); - - assert (test == 0xcc55ff00); - - version (LittleEndian) - assert (*cast(int*) ptr == 0x00ff55cc); - } -} - - - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/Reader.d --- a/tango/tango/io/protocol/Reader.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,619 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2004: Initial release - Dec 2006: Outback release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.Reader; - -private import tango.io.Buffer; - -public import tango.io.model.IBuffer, - tango.io.model.IConduit; - -public import tango.io.protocol.model.IReader; - -private import tango.io.protocol.model.IProtocol; - -/******************************************************************************* - - Reader base-class. Each reader operates upon an IBuffer, which is - provided at construction time. Readers are simple converters of data, - and have reasonably rigid rules regarding data format. For example, - each request for data expects the content to be available; an exception - is thrown where this is not the case. If the data is arranged in a more - relaxed fashion, consider using IBuffer directly instead. - - All readers support the full set of native data types, plus a full - selection of array types. The latter can be configured to produce - either a copy (.dup) of the buffer content, or a slice. See classes - HeapCopy, BufferSlice and HeapSlice for more on this topic. Applications - can disable memory management by configuring a Reader with one of the - binary oriented protocols, and ensuring the optional protocol 'prefix' - is disabled. - - Readers support Java-esque get() notation. However, the Tango - style is to place IO elements within their own parenthesis, like - so: - - --- - int count; - char[] verse; - - read (verse) (count); - --- - - Note that each element read is distict; this style is affectionately - known as "whisper". The code below illustrates basic operation upon a - memory buffer: - - --- - auto buf = new Buffer (256); - - // map same buffer into both reader and writer - auto read = new Reader (buf); - auto write = new Writer (buf); - - int i = 10; - long j = 20; - double d = 3.14159; - char[] c = "fred"; - - // write data using whisper syntax - write (c) (i) (j) (d); - - // read them back again - read (c) (i) (j) (d); - - - // same thing again, but using put() syntax instead - write.put(c).put(i).put(j).put(d); - read.get(c).get(i).get(j).get(d); - --- - - Note that certain protocols, such as the basic binary implementation, - expect to retrieve the number of array elements from the source. For - example: when reading an array from a file, the number of elements - is read from the file also, and the configurable memory-manager is - invoked to provide the array space. If content is not arranged in - such a manner you may read array content directly either by creating - a Reader with a protocol configured to sidestep array-prefixing, or - by accessing buffer content directly (via the methods exposed there) - e.g. - - --- - void[10] data; - - reader.buffer.fill (data); - --- - - Readers may also be used with any class implementing the IReadable - interface, along with any struct implementing an equivalent method - -*******************************************************************************/ - -class Reader : IReader -{ - // the buffer associated with this reader. Note that this - // should not change over the lifetime of the reader, since - // it is assumed to be immutable elsewhere - private IBuffer buffer_; - - // memory-manager for array requests - private IAllocator memory; - private IProtocol.Allocator allocator_; - - // the assigned serialization protocol - private IProtocol.ArrayReader arrays; - private IProtocol.Reader elements; - - /*********************************************************************** - - Construct a Reader upon the provided stream. We do our own - protocol handling, equivalent to the NativeProtocol. Array - allocation is supported via the heap - - ***********************************************************************/ - - this (InputStream stream) - { - auto b = cast(Buffered) stream; - buffer_ = (b ? b.buffer : new Buffer (stream.conduit)); - - allocator_ = &allocate; - elements = &readElement; - arrays = &readArray; - } - - /*********************************************************************** - - Construct Reader on the provided protocol. This configures - the IO conversion to be that of the protocol, but allocation - of arrays is still handled by the heap - - ***********************************************************************/ - - this (IProtocol protocol) - { - allocator_ = &allocate; - elements = &protocol.read; - arrays = &protocol.readArray; - buffer_ = protocol.buffer; - } - - /*********************************************************************** - - Set the array allocator, and protocol, for this Reader. See - method allocator() for more info - - ***********************************************************************/ - - this (IAllocator allocator) - { - this (allocator.protocol); - allocator_ = &allocator.allocate; - } - - /*********************************************************************** - - Return the buffer associated with this reader - - ***********************************************************************/ - - final IBuffer buffer () - { - return buffer_; - } - - /*********************************************************************** - - Get the allocator to use for array management. Arrays are - generally allocated by the IReader, via configured managers. - A number of Allocator classes are available to manage memory - when reading array content. Alternatively, the application - may obtain responsibility for allocation by selecting one of - the NativeProtocol deriviatives and setting 'prefix' to be - false. The latter disables internal array management. - - Gaining access to the allocator can expose some additional - controls. For example, some allocators benefit from a reset - operation after each data 'record' has been processed. - - By default, an IReader will allocate each array from the - heap. You can change that by constructing the Reader - with an Allocator of choice. For instance, there is a - BufferSlice which will slice an array directly from - the buffer where possible. Also available is the record- - oriented HeaoSlice, which slices memory from within - a pre-allocated heap area, and should be reset by the client - code after each record has been read (to avoid unnecessary - growth). - - See module tango.io.protocol.Allocator for more information - - ***********************************************************************/ - - final IAllocator allocator () - { - return memory; - } - - /*********************************************************************** - - Extract a readable class from the current read-position - - ***********************************************************************/ - - final IReader get (IReader.Closure dg) - { - dg (this); - return this; - } - - /*********************************************************************** - - Extract a readable class from the current read-position - - ***********************************************************************/ - - final IReader get (IReadable x) - { - if (x is null) - buffer_.error ("Reader.get :: attempt to read a null IReadable object"); - - return get (&x.read); - } - - /*********************************************************************** - - Extract a boolean value from the current read-position - - ***********************************************************************/ - - final IReader get (inout bool x) - { - elements (&x, x.sizeof, IProtocol.Type.Bool); - return this; - } - - /*********************************************************************** - - Extract an unsigned byte value from the current read-position - - ***********************************************************************/ - - final IReader get (inout ubyte x) - { - elements (&x, x.sizeof, IProtocol.Type.UByte); - return this; - } - - /*********************************************************************** - - Extract a byte value from the current read-position - - ***********************************************************************/ - - final IReader get (inout byte x) - { - elements (&x, x.sizeof, IProtocol.Type.Byte); - return this; - } - - /*********************************************************************** - - Extract an unsigned short value from the current read-position - - ***********************************************************************/ - - final IReader get (inout ushort x) - { - elements (&x, x.sizeof, IProtocol.Type.UShort); - return this; - } - - /*********************************************************************** - - Extract a short value from the current read-position - - ***********************************************************************/ - - final IReader get (inout short x) - { - elements (&x, x.sizeof, IProtocol.Type.Short); - return this; - } - - /*********************************************************************** - - Extract a unsigned int value from the current read-position - - ***********************************************************************/ - - final IReader get (inout uint x) - { - elements (&x, x.sizeof, IProtocol.Type.UInt); - return this; - } - - /*********************************************************************** - - Extract an int value from the current read-position - - ***********************************************************************/ - - final IReader get (inout int x) - { - elements (&x, x.sizeof, IProtocol.Type.Int); - return this; - } - - /*********************************************************************** - - Extract an unsigned long value from the current read-position - - ***********************************************************************/ - - final IReader get (inout ulong x) - { - elements (&x, x.sizeof, IProtocol.Type.ULong); - return this; - } - - /*********************************************************************** - - Extract a long value from the current read-position - - ***********************************************************************/ - - final IReader get (inout long x) - { - elements (&x, x.sizeof, IProtocol.Type.Long); - return this; - } - - /*********************************************************************** - - Extract a float value from the current read-position - - ***********************************************************************/ - - final IReader get (inout float x) - { - elements (&x, x.sizeof, IProtocol.Type.Float); - return this; - } - - /*********************************************************************** - - Extract a double value from the current read-position - - ***********************************************************************/ - - final IReader get (inout double x) - { - elements (&x, x.sizeof, IProtocol.Type.Double); - return this; - } - - /*********************************************************************** - - Extract a real value from the current read-position - - ***********************************************************************/ - - final IReader get (inout real x) - { - elements (&x, x.sizeof, IProtocol.Type.Real); - return this; - } - - /*********************************************************************** - - Extract a char value from the current read-position - - ***********************************************************************/ - - final IReader get (inout char x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf8); - return this; - } - - /*********************************************************************** - - Extract a wide char value from the current read-position - - ***********************************************************************/ - - final IReader get (inout wchar x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf16); - return this; - } - - /*********************************************************************** - - Extract a double char value from the current read-position - - ***********************************************************************/ - - final IReader get (inout dchar x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf32); - return this; - } - - /*********************************************************************** - - Extract an boolean array from the current read-position - - ***********************************************************************/ - - final IReader get (inout bool[] x) - { - return loadArray (cast(void[]*) &x, bool.sizeof, IProtocol.Type.Bool); - } - - /*********************************************************************** - - Extract an unsigned byte array from the current read-position - - ***********************************************************************/ - - final IReader get (inout ubyte[] x) - { - return loadArray (cast(void[]*) &x, ubyte.sizeof, IProtocol.Type.UByte); - } - - /*********************************************************************** - - Extract a byte array from the current read-position - - ***********************************************************************/ - - final IReader get (inout byte[] x) - { - return loadArray (cast(void[]*) &x, byte.sizeof, IProtocol.Type.Byte); - } - - /*********************************************************************** - - Extract an unsigned short array from the current read-position - - ***********************************************************************/ - - final IReader get (inout ushort[] x) - { - return loadArray (cast(void[]*) &x, ushort.sizeof, IProtocol.Type.UShort); - } - - /*********************************************************************** - - Extract a short array from the current read-position - - ***********************************************************************/ - - final IReader get (inout short[] x) - { - return loadArray (cast(void[]*) &x, short.sizeof, IProtocol.Type.Short); - } - - /*********************************************************************** - - Extract a unsigned int array from the current read-position - - ***********************************************************************/ - - final IReader get (inout uint[] x) - { - return loadArray (cast(void[]*) &x, uint.sizeof, IProtocol.Type.UInt); - } - - /*********************************************************************** - - Extract an int array from the current read-position - - ***********************************************************************/ - - final IReader get (inout int[] x) - { - return loadArray (cast(void[]*) &x, int.sizeof, IProtocol.Type.Int); - } - - /*********************************************************************** - - Extract an unsigned long array from the current read-position - - ***********************************************************************/ - - final IReader get (inout ulong[] x) - { - return loadArray (cast(void[]*) &x, ulong.sizeof, IProtocol.Type.ULong); - } - - /*********************************************************************** - - Extract a long array from the current read-position - - ***********************************************************************/ - - final IReader get (inout long[] x) - { - return loadArray (cast(void[]*) &x,long.sizeof, IProtocol.Type.Long); - } - - /*********************************************************************** - - Extract a float array from the current read-position - - ***********************************************************************/ - - final IReader get (inout float[] x) - { - return loadArray (cast(void[]*) &x, float.sizeof, IProtocol.Type.Float); - } - - /*********************************************************************** - - Extract a double array from the current read-position - - ***********************************************************************/ - - final IReader get (inout double[] x) - { - return loadArray (cast(void[]*) &x, double.sizeof, IProtocol.Type.Double); - } - - /*********************************************************************** - - Extract a real array from the current read-position - - ***********************************************************************/ - - final IReader get (inout real[] x) - { - return loadArray (cast(void[]*) &x, real.sizeof, IProtocol.Type.Real); - } - - /*********************************************************************** - - Extract a char array from the current read-position - - ***********************************************************************/ - - final IReader get (inout char[] x) - { - return loadArray (cast(void[]*) &x, char.sizeof, IProtocol.Type.Utf8); - } - - /*********************************************************************** - - Extract a wchar array from the current read-position - - ***********************************************************************/ - - final IReader get (inout wchar[] x) - { - return loadArray (cast(void[]*) &x, wchar.sizeof, IProtocol.Type.Utf16); - } - - /*********************************************************************** - - Extract a dchar array from the current read-position - - ***********************************************************************/ - - final IReader get (inout dchar[] x) - { - return loadArray (cast(void[]*) &x, dchar.sizeof, IProtocol.Type.Utf32); - } - - - - /*********************************************************************** - - ***********************************************************************/ - - private IReader loadArray (void[]* x, uint width, IProtocol.Type type) - { - *x = arrays (x.ptr, x.length * width, type, allocator_) [0 .. $/width]; - return this; - } - - /*********************************************************************** - - ***********************************************************************/ - - private void[] allocate (IProtocol.Reader reader, uint bytes, IProtocol.Type type) - { - return reader ((new void[bytes]).ptr, bytes, type); - } - - /*********************************************************************** - - ***********************************************************************/ - - private void[] readElement (void* dst, uint bytes, IProtocol.Type type) - { - return buffer_.readExact (dst, bytes); - } - - /*********************************************************************** - - ***********************************************************************/ - - private void[] readArray (void* dst, uint bytes, IProtocol.Type type, IProtocol.Allocator alloc) - { - readElement (&bytes, bytes.sizeof, IProtocol.Type.UInt); - return alloc (&readElement, bytes, type); - } -} - \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/Writer.d --- a/tango/tango/io/protocol/Writer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,586 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2004: Initial release - Dec 2006: Outback release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.Writer; - -private import tango.io.Buffer, - tango.io.FileConst; - -public import tango.io.model.IBuffer, - tango.io.model.IConduit; - -public import tango.io.protocol.model.IWriter; - -private import tango.io.protocol.model.IProtocol; - -/******************************************************************************* - - Writer base-class. Writers provide the means to append formatted - data to an IBuffer, and expose a convenient method of handling a - variety of data types. In addition to writing native types such - as integer and char[], writers also process any class which has - implemented the IWritable interface (one method). - - All writers support the full set of native data types, plus their - fundamental array variants. Operations may be chained back-to-back. - - Writers support a Java-esque put() notation. However, the Tango style - is to place IO elements within their own parenthesis, like so: - - --- - write (count) (" green bottles"); - --- - - Note that each written element is distict; this style is affectionately - known as "whisper". The code below illustrates basic operation upon a - memory buffer: - - --- - auto buf = new Buffer (256); - - // map same buffer into both reader and writer - auto read = new Reader (buf); - auto write = new Writer (buf); - - int i = 10; - long j = 20; - double d = 3.14159; - char[] c = "fred"; - - // write data types out - write (c) (i) (j) (d); - - // read them back again - read (c) (i) (j) (d); - - - // same thing again, but using put() syntax instead - write.put(c).put(i).put(j).put(d); - read.get(c).get(i).get(j).get(d); - --- - - Writers may also be used with any class implementing the IWritable - interface, along with any struct implementing an equivalent function. - -*******************************************************************************/ - -class Writer : IWriter -{ - // the buffer associated with this writer. Note that this - // should not change over the lifetime of the reader, since - // it is assumed to be immutable elsewhere - package IBuffer buffer_; - - package IProtocol.ArrayWriter arrays; - package IProtocol.Writer elements; - - // end of line sequence - package char[] eol = FileConst.NewlineString; - - /*********************************************************************** - - Construct a Writer on the provided Protocol - - ***********************************************************************/ - - this (IProtocol protocol) - { - buffer_ = protocol.buffer; - elements = &protocol.write; - arrays = &protocol.writeArray; - } - - /*********************************************************************** - - Construct a Writer on the given OutputStream. We do our own - protocol handling, equivalent to the NativeProtocol. - - ***********************************************************************/ - - this (OutputStream stream) - { - auto b = cast(Buffered) stream; - buffer_ = (b ? b.buffer : new Buffer (stream.conduit)); - - arrays = &writeArray; - elements = &writeElement; - } - - /*********************************************************************** - - Return the associated buffer - - ***********************************************************************/ - - final IBuffer buffer () - { - return buffer_; - } - - /*********************************************************************** - - Emit a newline - - ***********************************************************************/ - - IWriter newline () - { - return put (eol); - } - - /*********************************************************************** - - set the newline sequence - - ***********************************************************************/ - - IWriter newline (char[] eol) - { - this.eol = eol; - return this; - } - - /*********************************************************************** - - Flush the output of this writer and return a chaining ref - - ***********************************************************************/ - - final IWriter flush () - { - buffer_.flush; - return this; - } - - /*********************************************************************** - - Flush this writer. This is a convenience method used by - the "whisper" syntax. - - ***********************************************************************/ - - final IWriter put () - { - return flush; - } - - /*********************************************************************** - - Write via a delegate to the current buffer-position - - ***********************************************************************/ - - final IWriter put (IWriter.Closure dg) - { - dg (this); - return this; - } - - /*********************************************************************** - - Write a class to the current buffer-position - - ***********************************************************************/ - - final IWriter put (IWritable x) - { - if (x is null) - buffer_.error ("Writer.put :: attempt to write a null IWritable object"); - - return put (&x.write); - } - - /*********************************************************************** - - Write a boolean value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (bool x) - { - elements (&x, x.sizeof, IProtocol.Type.Bool); - return this; - } - - /*********************************************************************** - - Write an unsigned byte value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ubyte x) - { - elements (&x, x.sizeof, IProtocol.Type.UByte); - return this; - } - - /*********************************************************************** - - Write a byte value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (byte x) - { - elements (&x, x.sizeof, IProtocol.Type.Byte); - return this; - } - - /*********************************************************************** - - Write an unsigned short value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ushort x) - { - elements (&x, x.sizeof, IProtocol.Type.UShort); - return this; - } - - /*********************************************************************** - - Write a short value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (short x) - { - elements (&x, x.sizeof, IProtocol.Type.Short); - return this; - } - - /*********************************************************************** - - Write a unsigned int value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (uint x) - { - elements (&x, x.sizeof, IProtocol.Type.UInt); - return this; - } - - /*********************************************************************** - - Write an int value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (int x) - { - elements (&x, x.sizeof, IProtocol.Type.Int); - return this; - } - - /*********************************************************************** - - Write an unsigned long value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ulong x) - { - elements (&x, x.sizeof, IProtocol.Type.ULong); - return this; - } - - /*********************************************************************** - - Write a long value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (long x) - { - elements (&x, x.sizeof, IProtocol.Type.Long); - return this; - } - - /*********************************************************************** - - Write a float value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (float x) - { - elements (&x, x.sizeof, IProtocol.Type.Float); - return this; - } - - /*********************************************************************** - - Write a double value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (double x) - { - elements (&x, x.sizeof, IProtocol.Type.Double); - return this; - } - - /*********************************************************************** - - Write a real value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (real x) - { - elements (&x, x.sizeof, IProtocol.Type.Real); - return this; - } - - /*********************************************************************** - - Write a char value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (char x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf8); - return this; - } - - /*********************************************************************** - - Write a wchar value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (wchar x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf16); - return this; - } - - /*********************************************************************** - - Write a dchar value to the current buffer-position - - ***********************************************************************/ - - final IWriter put (dchar x) - { - elements (&x, x.sizeof, IProtocol.Type.Utf32); - return this; - } - - /*********************************************************************** - - Write a boolean array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (bool[] x) - { - arrays (x.ptr, x.length * bool.sizeof, IProtocol.Type.Bool); - return this; - } - - /*********************************************************************** - - Write a byte array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (byte[] x) - { - arrays (x.ptr, x.length * byte.sizeof, IProtocol.Type.Byte); - return this; - } - - /*********************************************************************** - - Write an unsigned byte array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ubyte[] x) - { - arrays (x.ptr, x.length * ubyte.sizeof, IProtocol.Type.UByte); - return this; - } - - /*********************************************************************** - - Write a short array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (short[] x) - { - arrays (x.ptr, x.length * short.sizeof, IProtocol.Type.Short); - return this; - } - - /*********************************************************************** - - Write an unsigned short array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ushort[] x) - { - arrays (x.ptr, x.length * ushort.sizeof, IProtocol.Type.UShort); - return this; - } - - /*********************************************************************** - - Write an int array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (int[] x) - { - arrays (x.ptr, x.length * int.sizeof, IProtocol.Type.Int); - return this; - } - - /*********************************************************************** - - Write an unsigned int array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (uint[] x) - { - arrays (x.ptr, x.length * uint.sizeof, IProtocol.Type.UInt); - return this; - } - - /*********************************************************************** - - Write a long array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (long[] x) - { - arrays (x.ptr, x.length * long.sizeof, IProtocol.Type.Long); - return this; - } - - /*********************************************************************** - - Write an unsigned long array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (ulong[] x) - { - arrays (x.ptr, x.length * ulong.sizeof, IProtocol.Type.ULong); - return this; - } - - /*********************************************************************** - - Write a float array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (float[] x) - { - arrays (x.ptr, x.length * float.sizeof, IProtocol.Type.Float); - return this; - } - - /*********************************************************************** - - Write a double array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (double[] x) - { - arrays (x.ptr, x.length * double.sizeof, IProtocol.Type.Double); - return this; - } - - /*********************************************************************** - - Write a real array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (real[] x) - { - arrays (x.ptr, x.length * real.sizeof, IProtocol.Type.Real); - return this; - } - - /*********************************************************************** - - Write a char array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (char[] x) - { - arrays (x.ptr, x.length * char.sizeof, IProtocol.Type.Utf8); - return this; - } - - /*********************************************************************** - - Write a wchar array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (wchar[] x) - { - arrays (x.ptr, x.length * wchar.sizeof, IProtocol.Type.Utf16); - return this; - } - - /*********************************************************************** - - Write a dchar array to the current buffer-position - - ***********************************************************************/ - - final IWriter put (dchar[] x) - { - arrays (x.ptr, x.length * dchar.sizeof, IProtocol.Type.Utf32); - return this; - } - - /*********************************************************************** - - Dump array content into the buffer. Note that the default - behaviour is to prefix with the array byte count - - ***********************************************************************/ - - private void writeArray (void* src, uint bytes, IProtocol.Type type) - { - put (bytes); - writeElement (src, bytes, type); - } - - /*********************************************************************** - - Dump content into the buffer - - ***********************************************************************/ - - private void writeElement (void* src, uint bytes, IProtocol.Type type) - { - buffer_.append (src [0 .. bytes]); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/model/IProtocol.d --- a/tango/tango/io/protocol/model/IProtocol.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jan 2007: initial release - - author: Kris - -*******************************************************************************/ - -module tango.io.protocol.model.IProtocol; - -private import tango.io.model.IBuffer; - -/******************************************************************************* - -*******************************************************************************/ - -abstract class IProtocol -{ - enum Type - { - Void = 0, - Utf8, - Bool, - Byte, - UByte, - Utf16, - Short, - UShort, - Utf32, - Int, - UInt, - Float, - Long, - ULong, - Double, - Real, - Obj, - Pointer, - } - - /*********************************************************************** - - ***********************************************************************/ - - alias void delegate (void* src, uint bytes, Type type) Writer; - alias void delegate (void* src, uint bytes, Type type) ArrayWriter; - - alias void[] delegate (void* dst, uint bytes, Type type) Reader; - alias void[] delegate (Reader reader, uint bytes, Type type) Allocator; - - alias void[] delegate (void* dst, uint bytes, Type type, Allocator) ArrayReader; - - /*********************************************************************** - - ***********************************************************************/ - - abstract IBuffer buffer (); - - /*********************************************************************** - - ***********************************************************************/ - - abstract void[] read (void* dst, uint bytes, Type type); - - /*********************************************************************** - - ***********************************************************************/ - - abstract void write (void* src, uint bytes, Type type); - - /*********************************************************************** - - ***********************************************************************/ - - abstract void[] readArray (void* dst, uint bytes, Type type, Allocator alloc); - - /*********************************************************************** - - ***********************************************************************/ - - abstract void writeArray (void* src, uint bytes, Type type); -} - - -/******************************************************************************* - -*******************************************************************************/ - -abstract class IAllocator -{ - /*********************************************************************** - - ***********************************************************************/ - - abstract void reset (); - - /*********************************************************************** - - ***********************************************************************/ - - abstract IProtocol protocol (); - - /*********************************************************************** - - ***********************************************************************/ - - abstract void[] allocate (IProtocol.Reader, uint bytes, IProtocol.Type); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/model/IReader.d --- a/tango/tango/io/protocol/model/IReader.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,205 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2004: Initial release - Dec 2006: Outback release - - author: Kris - Ivan Senji (the "alias get" idea) - -*******************************************************************************/ - -module tango.io.protocol.model.IReader; - -public import tango.io.model.IBuffer; - -private import tango.io.protocol.model.IProtocol; - -/******************************************************************************* - - IReader interface. Each reader operates upon an IBuffer, which is - provided at construction time. Readers are simple converters of data, - and have reasonably rigid rules regarding data format. For example, - each request for data expects the content to be available; an exception - is thrown where this is not the case. If the data is arranged in a more - relaxed fashion, consider using IBuffer directly instead. - - All readers support the full set of native data types, plus a full - selection of array types. The latter can be configured to produce - either a copy (.dup) of the buffer content, or a slice. See classes - HeapCopy, BufferSlice and HeapSlice for more on this topic. Applications - can disable memory management by configuring a Reader with one of the - binary oriented protocols, and ensuring the optional protocol 'prefix' - is disabled. - - Readers support Java-esque get() notation. However, the Tango - style is to place IO elements within their own parenthesis, like - so: - - --- - int count; - char[] verse; - - read (verse) (count); - --- - - Note that each element read is distict; this style is affectionately - known as "whisper". The code below illustrates basic operation upon a - memory buffer: - - --- - auto buf = new Buffer (256); - - // map same buffer into both reader and writer - auto read = new Reader (buf); - auto write = new Writer (buf); - - int i = 10; - long j = 20; - double d = 3.14159; - char[] c = "fred"; - - // write data using whisper syntax - write (c) (i) (j) (d); - - // read them back again - read (c) (i) (j) (d); - - - // same thing again, but using put() syntax instead - write.put(c).put(i).put(j).put(d); - read.get(c).get(i).get(j).get(d); - --- - - Note that certain protocols, such as the basic binary implementation, - expect to retrieve the number of array elements from the source. For - example: when reading an array from a file, the number of elements - is read from the file also, and the configurable memory-manager is - invoked to provide the array space. If content is not arranged in - such a manner you may read array content directly either by creating - a Reader with a protocol configured to sidestep array-prefixing, or - by accessing buffer content directly (via the methods exposed there) - e.g. - - --- - void[10] data; - - reader.buffer.fill (data); - --- - - Readers may also be used with any class implementing the IReadable - interface, along with any struct implementing an equivalent method - -*******************************************************************************/ - -abstract class IReader // could be an interface, but that causes poor codegen -{ - alias get opCall; - - /*********************************************************************** - - These are the basic reader methods - - ***********************************************************************/ - - abstract IReader get (inout bool x); - abstract IReader get (inout byte x); /// ditto - abstract IReader get (inout ubyte x); /// ditto - abstract IReader get (inout short x); /// ditto - abstract IReader get (inout ushort x); /// ditto - abstract IReader get (inout int x); /// ditto - abstract IReader get (inout uint x); /// ditto - abstract IReader get (inout long x); /// ditto - abstract IReader get (inout ulong x); /// ditto - abstract IReader get (inout float x); /// ditto - abstract IReader get (inout double x); /// ditto - abstract IReader get (inout real x); /// ditto - abstract IReader get (inout char x); /// ditto - abstract IReader get (inout wchar x); /// ditto - abstract IReader get (inout dchar x); /// ditto - - abstract IReader get (inout bool[] x); /// ditto - abstract IReader get (inout byte[] x); /// ditto - abstract IReader get (inout short[] x); /// ditto - abstract IReader get (inout int[] x); /// ditto - abstract IReader get (inout long[] x); /// ditto - abstract IReader get (inout ubyte[] x); /// ditto - abstract IReader get (inout ushort[] x); /// ditto - abstract IReader get (inout uint[] x); /// ditto - abstract IReader get (inout ulong[] x); /// ditto - abstract IReader get (inout float[] x); /// ditto - abstract IReader get (inout double[] x); /// ditto - abstract IReader get (inout real[] x); /// ditto - abstract IReader get (inout char[] x); /// ditto - abstract IReader get (inout wchar[] x); /// ditto - abstract IReader get (inout dchar[] x); /// ditto - - /*********************************************************************** - - This is the mechanism used for binding arbitrary classes - to the IO system. If a class implements IReadable, it can - be used as a target for IReader get() operations. That is, - implementing IReadable is intended to transform any class - into an IReader adaptor for the content held therein. - - ***********************************************************************/ - - abstract IReader get (IReadable); - - alias void delegate (IReader) Closure; - - abstract IReader get (Closure); - - /*********************************************************************** - - Return the buffer associated with this reader - - ***********************************************************************/ - - abstract IBuffer buffer (); - - /*********************************************************************** - - Get the allocator to use for array management. Arrays are - generally allocated by the IReader, via configured managers. - A number of Allocator classes are available to manage memory - when reading array content. Alternatively, the application - may obtain responsibility for allocation by selecting one of - the NativeProtocol deriviatives and setting 'prefix' to be - false. The latter disables internal array management. - - Gaining access to the allocator can expose some additional - controls. For example, some allocators benefit from a reset - operation after each data 'record' has been processed. - - By default, an IReader will allocate each array from the - heap. You can change that by constructing the Reader - with an Allocator of choice. For instance, there is a - BufferSlice which will slice an array directly from - the buffer where possible. Also available is the record- - oriented HeaoSlice, which slices memory from within - a pre-allocated heap area, and should be reset by the client - code after each record has been read (to avoid unnecessary - growth). - - See module tango.io.protocol.Allocator for more information - - ***********************************************************************/ - - abstract IAllocator allocator (); -} - -/******************************************************************************* - - Any class implementing IReadable becomes part of the Reader framework - -*******************************************************************************/ - -interface IReadable -{ - void read (IReader input); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/protocol/model/IWriter.d --- a/tango/tango/io/protocol/model/IWriter.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,167 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004: Initial release - Dec 2006: Outback release - - author: Kris - Ivan Senji (the "alias put" idea) - -*******************************************************************************/ - -module tango.io.protocol.model.IWriter; - -public import tango.io.model.IBuffer; - -/******************************************************************************* - - IWriter interface. Writers provide the means to append formatted - data to an IBuffer, and expose a convenient method of handling a - variety of data types. In addition to writing native types such - as integer and char[], writers also process any class which has - implemented the IWritable interface (one method). - - All writers support the full set of native data types, plus their - fundamental array variants. Operations may be chained back-to-back. - - Writers support a Java-esque put() notation. However, the Tango style - is to place IO elements within their own parenthesis, like so: - - --- - write (count) (" green bottles"); - --- - - Note that each written element is distict; this style is affectionately - known as "whisper". The code below illustrates basic operation upon a - memory buffer: - - --- - auto buf = new Buffer (256); - - // map same buffer into both reader and writer - auto read = new Reader (buf); - auto write = new Writer (buf); - - int i = 10; - long j = 20; - double d = 3.14159; - char[] c = "fred"; - - // write data types out - write (c) (i) (j) (d); - - // read them back again - read (c) (i) (j) (d); - - - // same thing again, but using put() syntax instead - write.put(c).put(i).put(j).put(d); - read.get(c).get(i).get(j).get(d); - - --- - - Writers may also be used with any class implementing the IWritable - interface, along with any struct implementing an equivalent function. - -*******************************************************************************/ - -abstract class IWriter // could be an interface, but that causes poor codegen -{ - alias put opCall; - - /*********************************************************************** - - These are the basic writer methods - - ***********************************************************************/ - - abstract IWriter put (bool x); - abstract IWriter put (ubyte x); ///ditto - abstract IWriter put (byte x); ///ditto - abstract IWriter put (ushort x); ///ditto - abstract IWriter put (short x); ///ditto - abstract IWriter put (uint x); ///ditto - abstract IWriter put (int x); ///ditto - abstract IWriter put (ulong x); ///ditto - abstract IWriter put (long x); ///ditto - abstract IWriter put (float x); ///ditto - abstract IWriter put (double x); ///ditto - abstract IWriter put (real x); ///ditto - abstract IWriter put (char x); ///ditto - abstract IWriter put (wchar x); ///ditto - abstract IWriter put (dchar x); ///ditto - - abstract IWriter put (bool[] x); - abstract IWriter put (byte[] x); ///ditto - abstract IWriter put (short[] x); ///ditto - abstract IWriter put (int[] x); ///ditto - abstract IWriter put (long[] x); ///ditto - abstract IWriter put (ubyte[] x); ///ditto - abstract IWriter put (ushort[] x); ///ditto - abstract IWriter put (uint[] x); ///ditto - abstract IWriter put (ulong[] x); ///ditto - abstract IWriter put (float[] x); ///ditto - abstract IWriter put (double[] x); ///ditto - abstract IWriter put (real[] x); ///ditto - abstract IWriter put (char[] x); ///ditto - abstract IWriter put (wchar[] x); ///ditto - abstract IWriter put (dchar[] x); ///ditto - - /*********************************************************************** - - This is the mechanism used for binding arbitrary classes - to the IO system. If a class implements IWritable, it can - be used as a target for IWriter put() operations. That is, - implementing IWritable is intended to transform any class - into an IWriter adaptor for the content held therein - - ***********************************************************************/ - - abstract IWriter put (IWritable); - - alias void delegate (IWriter) Closure; - - abstract IWriter put (Closure); - - /*********************************************************************** - - Emit a newline - - ***********************************************************************/ - - abstract IWriter newline (); - - /*********************************************************************** - - Flush the output of this writer. Throws an IOException - if the operation fails. These are aliases for each other - - ***********************************************************************/ - - abstract IWriter flush (); - abstract IWriter put (); ///ditto - - /*********************************************************************** - - Return the associated buffer - - ***********************************************************************/ - - abstract IBuffer buffer (); -} - - -/******************************************************************************* - - Interface to make any class compatible with any IWriter - -*******************************************************************************/ - -interface IWritable -{ - abstract void write (IWriter input); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/AbstractSelector.d --- a/tango/tango/io/selector/AbstractSelector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,394 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.AbstractSelector; - -public import tango.io.model.IConduit; -public import tango.io.selector.SelectorException; - -private import tango.io.selector.model.ISelector; -private import tango.sys.Common; -private import tango.stdc.errno; - -version (Windows) -{ - public struct timeval - { - int tv_sec; // seconds - int tv_usec; // microseconds - } -} - -/** - * Base class for all selectors. - * - * A selector is a multiplexor for I/O events associated to a Conduit. - * All selectors must implement this interface. - * - * A selector needs to be initialized by calling the open() method to pass - * it the initial amount of conduits that it will handle and the maximum - * amount of events that will be returned per call to select(). In both cases, - * these values are only hints and may not even be used by the specific - * ISelector implementation you choose to use, so you cannot make any - * assumptions regarding what results from the call to select() (i.e. you - * may receive more or less events per call to select() than what was passed - * in the 'maxEvents' argument. The amount of conduits that the selector can - * manage will be incremented dynamically if necessary. - * - * To add, modify or remove conduit registrations to the selector you use - * the register(), reregister() and unregister() methods respectively. - * - * To wait for events from the conduits you need to call any of the select() - * methods. The selector cannot be modified from another thread while - * blocking on a call to these methods. - * - * Once the selector is no longer used you must call the close() method so - * that the selector can free any resources it may have allocated in the call - * to open(). - * - * See_Also: ISelector - * - * Examples: - * --- - * import tango.io.selector.model.ISelector; - * import tango.io.Stdout; - * import tango.net.SocketConduit; - * - * AbstractSelector selector; - * SocketConduit conduit1; - * SocketConduit conduit2; - * MyClass object1; - * MyClass object2; - * uint eventCount; - * - * // Initialize the selector assuming that it will deal with 2 conduits and - * // will receive 2 events per invocation to the select() method. - * selector.open(2, 2); - * - * selector.register(conduit, Event.Read, object1); - * selector.register(conduit, Event.Write, object2); - * - * eventCount = selector.select(); - * - * if (eventCount > 0) - * { - * char[16] buffer; - * int count; - * - * foreach (SelectionKey key, selector.selectedSet()) - * { - * if (key.isReadable()) - * { - * count = (cast(SocketConduit) key.conduit).read(buffer); - * if (count != IConduit.Eof) - * { - * Stdout.format("Received '{0}' from peer\n", buffer[0..count]); - * selector.reregister(key.conduit, Event.Write, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isWritable()) - * { - * count = (cast(SocketConduit) key.conduit).write("MESSAGE"); - * if (count != IConduit.Eof) - * { - * Stdout("Sent 'MESSAGE' to peer\n"); - * selector.reregister(key.conduit, Event.Read, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isError() || key.isHangup() || key.isInvalidHandle()) - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * } - * - * selector.close(); - * --- - */ -abstract class AbstractSelector: ISelector -{ - /** - * Restart interrupted system calls when blocking inside a call to select. - */ - protected bool _restartInterruptedSystemCall = true; - - /** - * Indicates whether interrupted system calls will be restarted when - * blocking inside a call to select. - */ - public bool restartInterruptedSystemCall() - { - return _restartInterruptedSystemCall; - } - - /** - * Sets whether interrupted system calls will be restarted when - * blocking inside a call to select. - */ - public void restartInterruptedSystemCall(bool value) - { - _restartInterruptedSystemCall = value; - } - - /** - * Initialize the selector. - * - * Params: - * size = value that provides a hint for the maximum amount of - * conduits that will be registered - * maxEvents = value that provides a hint for the maximum amount of - * conduit events that will be returned in the selection - * set per call to select. - */ - public abstract void open(uint size, uint maxEvents); - - /** - * Free any operating system resources that may have been allocated in the - * call to open(). - * - * Remarks: - * Not all of the selectors need to free resources other than allocated - * memory, but those that do will normally also add a call to close() in - * their destructors. - */ - public abstract void close(); - - /** - * Associate a conduit to the selector and track specific I/O events. - * - * Params: - * conduit = conduit that will be associated to the selector - * events = bit mask of Event values that represent the events that - * will be tracked for the conduit. - * attachment = optional object with application-specific data that will - * be available when an event is triggered for the conduit - * - * Examples: - * --- - * AbstractSelector selector; - * SocketConduit conduit; - * MyClass object; - * - * selector.register(conduit, Event.Read | Event.Write, object); - * --- - */ - public abstract void register(ISelectable conduit, Event events, - Object attachment); - - /** - * Modify the events that are being tracked or the 'attachment' field - * for an already registered conduit. - * - * Params: - * conduit = conduit that will be associated to the selector - * events = bit mask of Event values that represent the events that - * will be tracked for the conduit. - * attachment = optional object with application-specific data that will - * be available when an event is triggered for the conduit - * - * Remarks: - * The 'attachment' member of the SelectionKey will always be overwritten, - * even if it's null. - * - * Examples: - * --- - * AbstractSelector selector; - * SocketConduit conduit; - * MyClass object; - * - * selector.reregister(conduit, Event.Write, object); - * --- - */ - public abstract void reregister(ISelectable conduit, Event events, - Object attachment); - - /** - * Remove a conduit from the selector. - * - * Params: - * conduit = conduit that had been previously associated to the - * selector; it can be null. - * - * Remarks: - * Unregistering a null conduit is allowed and no exception is thrown - * if this happens. - */ - public abstract void unregister(ISelectable conduit); - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout; and -1 if the - * wakeup() method has been called from another thread. - * - * Remarks: - * This method is the same as calling select(TimeSpan.max). - */ - public int select() - { - return select(TimeSpan.max); - } - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Note: This representation of timeout is not always accurate, so it is - * possible that the function will return with a timeout before the - * specified period. For more accuracy, use the TimeSpan version. - * - * Params: - * timeout = the maximum amount of time in seconds that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout. - */ - public int select(double timeout) - { - return select(TimeSpan.interval(timeout)); - } - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Params: - * timeout = TimeSpan with the maximum amount of time that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout; and -1 if the - * wakeup() method has been called from another thread. - */ - public abstract int select(TimeSpan timeout); - - /** - * Causes the first call to select() that has not yet returned to return - * immediately. - * - * If another thread is currently blocked in an call to any of the - * select() methods then that call will return immediately. If no - * selection operation is currently in progress then the next invocation - * of one of these methods will return immediately. In any case the value - * returned by that invocation may be non-zero. Subsequent invocations of - * the select() methods will block as usual unless this method is invoked - * again in the meantime. - */ - // public abstract void wakeup(); - - /** - * Return the selection set resulting from the call to any of the select() - * methods. - * - * Remarks: - * If the call to select() was unsuccessful or it did not return any - * events, the returned value will be null. - */ - public abstract ISelectionSet selectedSet(); - - /** - * Return the selection key resulting from the registration of a conduit - * to the selector. - * - * Remarks: - * If the conduit is not registered to the selector the returned - * value will be null. No exception will be thrown by this method. - */ - public abstract SelectionKey key(ISelectable conduit); - - /** - * Cast the time duration to a C timeval struct. - */ - public timeval* toTimeval(timeval* tv, TimeSpan interval) - in - { - assert(tv !is null); - } - body - { - tv.tv_sec = cast(typeof(tv.tv_sec)) interval.seconds; - tv.tv_usec = cast(typeof(tv.tv_usec)) (interval.micros % 1_000_000); - return tv; - } - - /** - * Check the 'errno' global variable from the C standard library and - * throw an exception with the description of the error. - * - * Params: - * file = name of the source file where the check is being made; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where this method was called; - * you would normally use __LINE__ for this parameter. - * - * Throws: - * RegisteredConduitException when the conduit should not be registered - * but it is (EEXIST); UnregisteredConduitException when the conduit - * should be registered but it isn't (ENOENT); - * InterruptedSystemCallException when a system call has been interrupted - * (EINTR); OutOfMemoryException if a memory allocation fails (ENOMEM); - * SelectorException for any of the other cases in which errno is not 0. - */ - protected void checkErrno(char[] file, size_t line) - { - int errorCode = errno; - switch (errorCode) - { - case EBADF: - throw new SelectorException("Bad file descriptor", file, line); - // break; - case EEXIST: - throw new RegisteredConduitException(file, line); - // break; - case EINTR: - throw new InterruptedSystemCallException(file, line); - // break; - case EINVAL: - throw new SelectorException("An invalid parameter was sent to a system call", file, line); - // break; - case ENFILE: - throw new SelectorException("Maximum number of open files reached", file, line); - // break; - case ENOENT: - throw new UnregisteredConduitException(file, line); - // break; - case ENOMEM: - throw new OutOfMemoryException(file, line); - // break; - case EPERM: - throw new SelectorException("The conduit cannot be used with this Selector", file, line); - // break; - default: - throw new SelectorException("Unknown Selector error: " ~ SysError.lookup(errorCode), file, line); - // break; - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/EpollSelector.d --- a/tango/tango/io/selector/EpollSelector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,465 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.EpollSelector; - - -version (linux) -{ - public import tango.io.model.IConduit; - - private import tango.io.selector.model.ISelector; - private import tango.io.selector.AbstractSelector; - private import tango.sys.Common; - private import tango.sys.linux.linux; - private import tango.stdc.errno; - - debug (selector) - private import tango.io.Stdout; - - - /** - * Selector that uses the Linux epoll* family of system calls. - * - * This selector is the best option when dealing with large amounts of - * conduits under Linux. It will scale much better than any of the other - * options (PollSelector, SelectSelector). For small amounts of conduits - * (n < 20) the PollSelector will probably be more performant. - * - * See_Also: ISelector, AbstractSelector - * - * Examples: - * --- - * import tango.io.selector.EpollSelector; - * import tango.io.Stdout; - * import tango.net.SocketConduit; - * - * SocketConduit conduit1; - * SocketConduit conduit2; - * EpollSelector selector = new EpollSelector(); - * MyClass object1 = new MyClass(); - * MyClass object2 = new MyClass(); - * uint eventCount; - * - * // Initialize the selector assuming that it will deal with 10 conduits and - * // will receive 3 events per invocation to the select() method. - * selector.open(10, 3); - * - * selector.register(conduit1, Event.Read, object1); - * selector.register(conduit2, Event.Write, object2); - * - * eventCount = selector.select(); - * - * if (eventCount > 0) - * { - * char[16] buffer; - * int count; - * - * foreach (SelectionKey key, selector.selectedSet()) - * { - * if (key.isReadable()) - * { - * count = (cast(SocketConduit) key.conduit).read(buffer); - * if (count != IConduit.Eof) - * { - * Stdout.format("Received '{0}' from peer\n", buffer[0..count]); - * selector.reregister(key.conduit, Event.Write, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isWritable()) - * { - * count = (cast(SocketConduit) key.conduit).write("MESSAGE"); - * if (count != IConduit.Eof) - * { - * Stdout("Sent 'MESSAGE' to peer"); - * selector.reregister(key.conduit, Event.Read, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isError() || key.isHangup() || key.isInvalidHandle()) - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * } - * - * selector.close(); - * --- - */ - public class EpollSelector: AbstractSelector - { - /** - * Alias for the select() method as we're not reimplementing it in - * this class. - */ - alias AbstractSelector.select select; - - /** - * Default number of SelectionKey's that will be handled by the - * EpollSelector. - */ - public const uint DefaultSize = 64; - /** - * Default maximum number of events that will be received per - * invocation to select(). - */ - public const uint DefaultMaxEvents = 16; - - - /** Map to associate the conduit handles with their selection keys */ - private SelectionKey[ISelectable.Handle] _keys; - /** File descriptor returned by the epoll_create() system call. */ - private int _epfd = -1; - /** - * Array of events that is filled by epoll_wait() inside the call - * to select(). - */ - private epoll_event[] _events; - /** Number of events resulting from the call to select() */ - private int _eventCount = 0; - - - /** - * Destructor - */ - ~this() - { - // Make sure that we release the epoll file descriptor once this - // object is garbage collected. - close(); - } - - /** - * Open the epoll selector, makes a call to epoll_create() - * - * Params: - * size = maximum amount of conduits that will be registered; - * it will grow dynamically if needed. - * maxEvents = maximum amount of conduit events that will be - * returned in the selection set per call to select(); - * this limit is enforced by this selector. - * - * Throws: - * SelectorException if there are not enough resources to open the - * selector (e.g. not enough file handles or memory available). - */ - public void open(uint size = DefaultSize, uint maxEvents = DefaultMaxEvents) - in - { - assert(size > 0); - assert(maxEvents > 0); - } - body - { - _events = new epoll_event[maxEvents]; - - _epfd = epoll_create(cast(int) size); - if (_epfd < 0) - { - checkErrno(__FILE__, __LINE__); - } - } - - /** - * Close the selector, releasing the file descriptor that had been - * created in the previous call to open(). - * - * Remarks: - * It can be called multiple times without harmful side-effects. - */ - public void close() - { - if (_epfd >= 0) - { - .close(_epfd); - _epfd = -1; - } - _events = null; - _eventCount = 0; - } - - /** - * Associate a conduit to the selector and track specific I/O events. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Throws: - * RegisteredConduitException if the conduit had already been - * registered to the selector; SelectorException if there are not - * enough resources to add the conduit to the selector. - * - * Examples: - * --- - * selector.register(conduit, Event.Read | Event.Write, object); - * --- - */ - public void register(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - epoll_event event; - SelectionKey key = new SelectionKey(conduit, events, attachment); - - event.events = events; - // We associate the selection key to the epoll_event to be able to - // retrieve it efficiently when we get events for this handle. - event.data.ptr = cast(void*) key; - - if (epoll_ctl(_epfd, EPOLL_CTL_ADD, conduit.fileHandle(), &event) == 0) - { - // We keep the keys in a map to make sure that the key is not - // garbage collected while there is still a reference to it in - // an epoll_event. This also allows to to efficiently find the - // key corresponding to a handle in methods where this - // association is not provided automatically. - _keys[conduit.fileHandle()] = key; - } - else - { - checkErrno(__FILE__, __LINE__); - } - } - - /** - * Modify the events that are being tracked or the 'attachment' field - * for an already registered conduit. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Remarks: - * The 'attachment' member of the SelectionKey will always be - * overwritten, even if it's null. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector; SelectorException if there are not - * enough resources to modify the conduit registration. - * - * Examples: - * --- - * selector.reregister(conduit, Event.Write, object); - * --- - */ - public void reregister(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - SelectionKey* key = (conduit.fileHandle() in _keys); - - if (key !is null) - { - epoll_event event; - - (*key).events = events; - (*key).attachment = attachment; - - event.events = events; - event.data.ptr = cast(void*) *key; - - if (epoll_ctl(_epfd, EPOLL_CTL_MOD, conduit.fileHandle(), &event) != 0) - { - checkErrno(__FILE__, __LINE__); - } - } - else - { - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - - /** - * Remove a conduit from the selector. - * - * Params: - * conduit = conduit that had been previously associated to the - * selector; it can be null. - * - * Remarks: - * Unregistering a null conduit is allowed and no exception is thrown - * if this happens. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector; SelectorException if there are not - * enough resources to remove the conduit registration. - */ - public void unregister(ISelectable conduit) - { - if (conduit !is null) - { - if (epoll_ctl(_epfd, EPOLL_CTL_DEL, conduit.fileHandle(), null) == 0) - { - _keys.remove(conduit.fileHandle()); - } - else - { - checkErrno(__FILE__, __LINE__); - } - } - } - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Params: - * timeout = TimeSpan with the maximum amount of time that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout; and -1 if the - * wakeup() method has been called from another thread. - * - * Throws: - * InterruptedSystemCallException if the underlying system call was - * interrupted by a signal and the 'restartInterruptedSystemCall' - * property was set to false; SelectorException if there were no - * resources available to wait for events from the conduits. - */ - public int select(TimeSpan timeout) - { - int to = (timeout != TimeSpan.max ? cast(int) timeout.millis : -1); - - while (true) - { - // FIXME: add support for the wakeup() call. - _eventCount = epoll_wait(_epfd, _events.ptr, _events.length, to); - if (_eventCount >= 0) - { - break; - } - else - { - if (errno != EINTR || !_restartInterruptedSystemCall) - { - checkErrno(__FILE__, __LINE__); - } - debug (selector) - Stdout("--- Restarting epoll_wait() after being interrupted by a signal\n"); - } - } - return _eventCount; - } - - /** - * Return the selection set resulting from the call to any of the - * select() methods. - * - * Remarks: - * If the call to select() was unsuccessful or it did not return any - * events, the returned value will be null. - */ - public ISelectionSet selectedSet() - { - return (_eventCount > 0 ? new EpollSelectionSet(_events[0.._eventCount]) : null); - } - - /** - * Return the selection key resulting from the registration of a - * conduit to the selector. - * - * Remarks: - * If the conduit is not registered to the selector the returned - * value will be null. No exception will be thrown by this method. - */ - public SelectionKey key(ISelectable conduit) - { - return (conduit !is null ? _keys[conduit.fileHandle()] : null); - } - - unittest - { - } - } - - /** - * Class used to hold the list of Conduits that have received events. - */ - private class EpollSelectionSet: ISelectionSet - { - private epoll_event[] _events; - - protected this(epoll_event[] events) - { - _events = events; - } - - public uint length() - { - return _events.length; - } - - /** - * Iterate over all the Conduits that have received events. - */ - public int opApply(int delegate(inout SelectionKey) dg) - { - int rc = 0; - SelectionKey key; - - debug (selector) - Stdout.format("--- EpollSelectionSet.opApply() ({0} events)\n", _events.length); - - foreach (epoll_event event; _events) - { - // Only invoke the delegate if there is an event for the conduit. - if (event.events != 0) - { - key = cast(SelectionKey) event.data.ptr; - key.events = cast(Event) event.events; - - debug (selector) - Stdout.format("--- Event 0x{0:x} for handle {1}\n", - cast(uint) event.events, cast(int) key.conduit.fileHandle()); - - rc = dg(key); - if (rc != 0) - { - break; - } - } - } - return rc; - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/PollSelector.d --- a/tango/tango/io/selector/PollSelector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,495 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.PollSelector; - -version (Posix) -{ - public import tango.io.model.IConduit; - - private import tango.io.selector.model.ISelector; - private import tango.io.selector.AbstractSelector; - private import tango.io.selector.SelectorException; - private import tango.sys.Common; - private import tango.stdc.errno; - - version (linux) - private import tango.sys.linux.linux; - - debug (selector) - private import tango.io.Stdout; - - - /** - * Selector that uses the poll() system call to receive I/O events for - * the registered conduits. To use this class you would normally do - * something like this: - * - * Examples: - * --- - * import tango.io.selector.PollSelector; - * - * Socket socket; - * ISelector selector = new PollSelector(); - * - * selector.open(100, 10); - * - * // Register to read from socket - * selector.register(socket, Event.Read); - * - * int eventCount = selector.select(0.1); // 0.1 seconds - * if (eventCount > 0) - * { - * // We can now read from the socket - * socket.read(); - * } - * else if (eventCount == 0) - * { - * // Timeout - * } - * else if (eventCount == -1) - * { - * // Another thread called the wakeup() method. - * } - * else - * { - * // Error: should never happen. - * } - * - * selector.close(); - * --- - */ - public class PollSelector: AbstractSelector - { - /** - * Alias for the select() method as we're not reimplementing it in - * this class. - */ - alias AbstractSelector.select select; - - /** - * Default number of SelectionKey's that will be handled by the - * PollSelector. - */ - public const uint DefaultSize = 64; - - /** Map to associate the conduit handles with their selection keys */ - private PollSelectionKey[ISelectable.Handle] _keys; - private SelectionKey[] _selectedKeys; - private pollfd[] _pfds; - private uint _count = 0; - private int _eventCount = 0; - - /** - * Open the poll()-based selector. - * - * Params: - * size = maximum amount of conduits that will be registered; - * it will grow dynamically if needed. - * maxEvents = maximum amount of conduit events that will be - * returned in the selection set per call to select(); - * this value is currently not used by this selector. - */ - public void open(uint size = DefaultSize, uint maxEvents = DefaultSize) - in - { - assert(size > 0); - } - body - { - _pfds = new pollfd[size]; - } - - /** - * Close the selector. - * - * Remarks: - * It can be called multiple times without harmful side-effects. - */ - public void close() - { - _keys = null; - _selectedKeys = null; - _pfds = null; - _count = 0; - _eventCount = 0; - } - - /** - * Associate a conduit to the selector and track specific I/O events. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Throws: - * RegisteredConduitException if the conduit had already been - * registered to the selector. - * - * Examples: - * --- - * selector.register(conduit, Event.Read | Event.Write, object); - * --- - */ - public void register(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - debug (selector) - Stdout.format("--- PollSelector.register(handle={0}, events=0x{1:x})\n", - cast(int) conduit.fileHandle(), cast(uint) events); - - // We make sure that the conduit is not already registered to - // the Selector - if ((conduit.fileHandle() in _keys) is null) - { - if (_count == _pfds.length) - _pfds.length = _pfds.length + 1; - - _pfds[_count].fd = conduit.fileHandle(); - _pfds[_count].events = cast(short) events; - _pfds[_count].revents = 0; - - _keys[conduit.fileHandle()] = new PollSelectionKey(conduit, events, _count, attachment); - _count++; - } - else - { - throw new RegisteredConduitException(__FILE__, __LINE__); - } - } - - /** - * Modify the events that are being tracked or the 'attachment' field - * for an already registered conduit. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Remarks: - * The 'attachment' member of the SelectionKey will always be - * overwritten, even if it's null. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector. - * - * Examples: - * --- - * selector.reregister(conduit, Event.Write, object); - * --- - */ - public void reregister(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - debug (selector) - Stdout.format("--- PollSelector.reregister(handle={0}, events=0x{1:x})", - cast(int) conduit.fileHandle(), cast(uint) events); - - PollSelectionKey* current = (conduit.fileHandle() in _keys); - - if (current !is null) - { - debug (selector) - Stdout.format("--- Adding pollfd in index {0} (of {1})\n", - current.index, _count); - - (*current).events = events; - (*current).attachment = attachment; - - _pfds[current.index].events = cast(short) events; - } - else - { - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - - /** - * Remove a conduit from the selector. - * - * Params: - * conduit = conduit that had been previously associated to the - * selector; it can be null. - * - * Remarks: - * Unregistering a null conduit is allowed and no exception is thrown - * if this happens. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector. - */ - public void unregister(ISelectable conduit) - { - if (conduit !is null) - { - try - { - debug (selector) - Stdout.format("--- PollSelector.unregister(handle={0})\n", - cast(int) conduit.fileHandle()); - - PollSelectionKey* removed = (conduit.fileHandle() in _keys); - - if (removed !is null) - { - debug (selector) - Stdout.format("--- Removing pollfd in index {0} (of {1})\n", - removed.index, _count); - - for (uint i = removed.index + 1; i > 0 && i < _count; i++) - { - _pfds[i - 1] = _pfds[i]; - } - _count--; - - _keys.remove(conduit.fileHandle()); - } - else - { - debug (selector) - Stdout.format("--- PollSelector.unregister(handle={0}): conduit was not found\n", - cast(int) conduit.fileHandle()); - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - catch (Exception e) - { - debug (selector) - Stdout.format("--- Exception inside PollSelector.unregister(handle={0}): {1}", - cast(int) conduit.fileHandle(), e.toString()); - - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - } - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Params: - * timeout = Timespan with the maximum amount of time that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout; and -1 if the - * wakeup() method has been called from another thread. - * - * Throws: - * InterruptedSystemCallException if the underlying system call was - * interrupted by a signal and the 'restartInterruptedSystemCall' - * property was set to false; SelectorException if there were no - * resources available to wait for events from the conduits. - */ - public int select(TimeSpan timeout) - { - int to = (timeout != TimeSpan.max ? cast(int) timeout.millis : -1); - - debug (selector) - Stdout.format("--- PollSelector.select({0} ms): waiting on {1} handles\n", - to, _count); - - // We run the call to poll() inside a loop in case the system call - // was interrupted by a signal and we need to restart it. - while (true) - { - _eventCount = poll(_pfds.ptr, _count, to); - if (_eventCount > 0) - { - int i = 0; - PollSelectionKey* key; - - if (_selectedKeys is null) - { - _selectedKeys = new SelectionKey[16]; - } - - // FIXME: add support for the wakeup() call. - foreach (pollfd pfd; _pfds[0 .. _count]) - { - if (i < _eventCount) - { - if (pfd.revents != 0) - { - debug (selector) - Stdout.format("--- Found events 0x{0:x} for handle {1} (index {2})\n", - cast(uint) pfd.revents, cast(int) pfd.fd, i); - - // Find the key whose handle received an event - key = ((cast(ISelectable.Handle) pfd.fd) in _keys); - if (key !is null) - { - // Enlarge the array of necessary - if (i >= _selectedKeys.length) - { - // The underlying array worries about - // incrementing the allocated block - // efficiently. - _selectedKeys.length = i + 1; - } - - (*key).events = cast(Event) pfd.revents; - - _selectedKeys[i] = *key; - i++; - } - else - { - debug (selector) - Stdout.format("--- Handle {0} was not found in the Selector\n", - cast(int) pfd.fd); - } - } - } - else - { - break; - } - } - _selectedKeys.length = i; - break; - } - else if (_eventCount == 0) - { - // Timeout - break; - } - else // if (eventCount < 0) - { - if (errno != EINTR || !_restartInterruptedSystemCall) - { - // The call to checkErrno() ends up throwing an exception - checkErrno(__FILE__, __LINE__); - } - debug (selector) - Stdout.print("--- Restarting poll() after being interrupted\n"); - } - } - return _eventCount; - } - - /** - * Return the selection set resulting from the call to any of the - * select() methods. - * - * Remarks: - * If the call to select() was unsuccessful or it did not return any - * events, the returned value will be null. - */ - public ISelectionSet selectedSet() - { - return (_eventCount > 0 ? new PollSelectionSet(_selectedKeys) : null); - } - - /** - * Return the selection key resulting from the registration of a - * conduit to the selector. - * - * Remarks: - * If the conduit is not registered to the selector the returned - * value will be null. No exception will be thrown by this method. - */ - public SelectionKey key(ISelectable conduit) - { - return (conduit !is null ? _keys[conduit.fileHandle()] : null); - } - - unittest - { - } - } - - /** - * Class used to hold the list of Conduits that have received events. - */ - private class PollSelectionSet: ISelectionSet - { - private SelectionKey[] _keys; - - protected this(SelectionKey[] keys) - { - _keys = keys; - } - - public uint length() - { - return _keys.length; - } - - /** - * Iterate over all the Conduits that have received events. - */ - public int opApply(int delegate(inout SelectionKey) dg) - { - int rc = 0; - - foreach (SelectionKey current; _keys) - { - if (dg(current) != 0) - { - rc = -1; - break; - } - } - return rc; - } - } - - /** - * Class that holds the information that the PollSelector needs to deal - * with each registered Conduit. - */ - private class PollSelectionKey: SelectionKey - { - private uint _index; - - public this() - { - } - - public this(ISelectable conduit, Event events, uint index, Object attachment) - { - super(conduit, events, attachment); - - _index = index; - } - - public uint index() - { - return _index; - } - - public void index(uint index) - { - _index = index; - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/SelectSelector.d --- a/tango/tango/io/selector/SelectSelector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,959 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.SelectSelector; - -public import tango.io.model.IConduit; - -private import tango.io.selector.model.ISelector; -private import tango.io.selector.AbstractSelector; -private import tango.io.selector.SelectorException; -private import tango.sys.Common; - -private import tango.stdc.errno; - -debug (selector) -{ - private import tango.io.Stdout; - private import tango.text.convert.Integer; -} - - -version (Windows) -{ - import tango.core.Thread; - - private - { - // Opaque struct - struct fd_set - { - } - - extern (Windows) int select(int nfds, fd_set* readfds, fd_set* writefds, - fd_set* errorfds, timeval* timeout); - } -} - - -/** - * Selector that uses the select() system call to receive I/O events for - * the registered conduits. To use this class you would normally do - * something like this: - * - * Examples: - * --- - * import tango.io.selector.SelectSelector; - * - * Socket socket; - * ISelector selector = new SelectSelector(); - * - * selector.open(100, 10); - * - * // Register to read from socket - * selector.register(socket, Event.Read); - * - * int eventCount = selector.select(0.1); // 0.1 seconds - * if (eventCount > 0) - * { - * // We can now read from the socket - * socket.read(); - * } - * else if (eventCount == 0) - * { - * // Timeout - * } - * else if (eventCount == -1) - * { - * // Another thread called the wakeup() method. - * } - * else - * { - * // Error: should never happen. - * } - * - * selector.close(); - * --- - */ -public class SelectSelector: AbstractSelector -{ - /** - * Alias for the select() method as we're not reimplementing it in - * this class. - */ - alias AbstractSelector.select select; - - uint _size; - private SelectionKey[ISelectable.Handle] _keys; - private HandleSet _readSet; - private HandleSet _writeSet; - private HandleSet _exceptionSet; - private HandleSet _selectedReadSet; - private HandleSet _selectedWriteSet; - private HandleSet _selectedExceptionSet; - int _eventCount; - version (Posix) - { - private ISelectable.Handle _maxfd = cast(ISelectable.Handle) -1; - - /** - * Default number of SelectionKey's that will be handled by the - * SelectSelector. - */ - public const uint DefaultSize = 1024; - } - else - { - /** - * Default number of SelectionKey's that will be handled by the - * SelectSelector. - */ - public const uint DefaultSize = 63; - } - - /** - * Open the select()-based selector. - * - * Params: - * size = maximum amount of conduits that will be registered; - * it will grow dynamically if needed. - * maxEvents = maximum amount of conduit events that will be - * returned in the selection set per call to select(); - * this value is currently not used by this selector. - */ - public void open(uint size = DefaultSize, uint maxEvents = DefaultSize) - in - { - assert(size > 0); - } - body - { - _size = size; - } - - /** - * Close the selector. - * - * Remarks: - * It can be called multiple times without harmful side-effects. - */ - public void close() - { - _size = 0; - _keys = null; - _readSet = null; - _writeSet = null; - _exceptionSet = null; - _selectedReadSet = null; - _selectedWriteSet = null; - _selectedExceptionSet = null; - } - - /** - * Associate a conduit to the selector and track specific I/O events. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Throws: - * RegisteredConduitException if the conduit had already been - * registered to the selector. - * - * Examples: - * --- - * selector.register(conduit, Event.Read | Event.Write, object); - * --- - */ - public void register(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - ISelectable.Handle handle = conduit.fileHandle(); - - debug (selector) - Stdout.format("--- SelectSelector.register(handle={0}, events=0x{1:x})\n", - cast(int) handle, cast(uint) events); - - // We make sure that the conduit is not already registered to - // the Selector - SelectionKey* key = (conduit.fileHandle() in _keys); - - if (key is null) - { - // Keep record of the Conduits for whom we're tracking events. - _keys[handle] = new SelectionKey(conduit, events, attachment); - - if ((events & Event.Read) || (events & Event.Hangup)) - { - if (_readSet is null) - { - _readSet = new HandleSet(_size); - _selectedReadSet = new HandleSet(_size); - } - _readSet.set(handle); - } - - if (events & Event.Write) - { - if (_writeSet is null) - { - _writeSet = new HandleSet(_size); - _selectedWriteSet = new HandleSet(_size); - } - _writeSet.set(handle); - } - - if (events & Event.Error) - { - if (_exceptionSet is null) - { - _exceptionSet = new HandleSet(_size); - _selectedExceptionSet = new HandleSet(_size); - } - _exceptionSet.set(handle); - } - - version (Posix) - { - if (handle > _maxfd) - _maxfd = handle; - } - } - else - { - throw new RegisteredConduitException(__FILE__, __LINE__); - } - } - - /** - * Modify the events that are being tracked or the 'attachment' field - * for an already registered conduit. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events - * that will be tracked for the conduit. - * attachment = optional object with application-specific data that - * will be available when an event is triggered for the - * conduit - * - * Remarks: - * The 'attachment' member of the SelectionKey will always be - * overwritten, even if it's null. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector. - * - * Examples: - * --- - * selector.reregister(conduit, Event.Write, object); - * --- - */ - public void reregister(ISelectable conduit, Event events, Object attachment = null) - in - { - assert(conduit !is null && conduit.fileHandle() >= 0); - } - body - { - ISelectable.Handle handle = conduit.fileHandle(); - - debug (selector) - Stdout.format("--- SelectSelector.reregister(handle={0}, events=0x{1:x})\n", - cast(int) handle, cast(uint) events); - - SelectionKey *key = (handle in _keys); - if (key !is null) - { - if ((events & Event.Read) || (events & Event.Hangup)) - { - if (_readSet is null) - { - _readSet = new HandleSet(_size); - _selectedReadSet = new HandleSet(_size); - } - _readSet.set(handle); - } - else if (_readSet !is null) - { - _readSet.clear(handle); - } - - if ((events & Event.Write)) - { - if (_writeSet is null) - { - _writeSet = new HandleSet(_size); - _selectedWriteSet = new HandleSet(_size); - } - _writeSet.set(handle); - } - else if (_writeSet !is null) - { - _writeSet.clear(handle); - } - - if (events & Event.Error) - { - if (_exceptionSet is null) - { - _exceptionSet = new HandleSet(_size); - _selectedExceptionSet = new HandleSet(_size); - } - _exceptionSet.set(handle); - } - else if (_exceptionSet !is null) - { - _exceptionSet.clear(handle); - } - - version (Posix) - { - if (handle > _maxfd) - _maxfd = handle; - } - - (*key).events = events; - (*key).attachment = attachment; - } - else - { - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - - /** - * Remove a conduit from the selector. - * - * Params: - * conduit = conduit that had been previously associated to the - * selector; it can be null. - * - * Remarks: - * Unregistering a null conduit is allowed and no exception is thrown - * if this happens. - * - * Throws: - * UnregisteredConduitException if the conduit had not been previously - * registered to the selector. - */ - public void unregister(ISelectable conduit) - { - if (conduit !is null) - { - ISelectable.Handle handle = conduit.fileHandle(); - - debug (selector) - Stdout.format("--- SelectSelector.unregister(handle={0})\n", - cast(int) handle); - - SelectionKey* removed = (handle in _keys); - - if (removed !is null) - { - if (_exceptionSet !is null) - { - _exceptionSet.clear(handle); - } - if (_writeSet !is null) - { - _writeSet.clear(handle); - } - if (_readSet !is null) - { - _readSet.clear(handle); - } - _keys.remove(handle); - - version (Posix) - { - // If we're removing the biggest handle we've entered so far - // we need to recalculate this value for the set. - if (handle == _maxfd) - { - while (--_maxfd >= 0) - { - if ((_readSet !is null && _readSet.isSet(_maxfd)) || - (_writeSet !is null && _writeSet.isSet(_maxfd)) || - (_exceptionSet !is null && _exceptionSet.isSet(_maxfd))) - { - break; - } - } - } - } - } - else - { - debug (selector) - Stdout.format("--- SelectSelector.unregister(handle={0}): conduit was not found\n", - cast(int) conduit.fileHandle()); - throw new UnregisteredConduitException(__FILE__, __LINE__); - } - } - } - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Params: - * timeout = TimeSpan with the maximum amount of time that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout; and -1 if the - * wakeup() method has been called from another thread. - * - * Throws: - * InterruptedSystemCallException if the underlying system call was - * interrupted by a signal and the 'restartInterruptedSystemCall' - * property was set to false; SelectorException if there were no - * resources available to wait for events from the conduits. - */ - public int select(TimeSpan timeout) - { - fd_set *readfds; - fd_set *writefds; - fd_set *exceptfds; - timeval tv; - version (Windows) - bool handlesAvailable = false; - - debug (selector) - Stdout.format("--- SelectSelector.select(timeout={0} msec)\n", timeout.millis); - - if (_readSet !is null) - { - debug (selector) - _readSet.dump("_readSet"); - - version (Windows) - handlesAvailable = handlesAvailable || (_readSet.length > 0); - - readfds = cast(fd_set*) _selectedReadSet.copy(_readSet); - } - if (_writeSet !is null) - { - debug (selector) - _writeSet.dump("_writeSet"); - - version (Windows) - handlesAvailable = handlesAvailable || (_writeSet.length > 0); - - writefds = cast(fd_set*) _selectedWriteSet.copy(_writeSet); - } - if (_exceptionSet !is null) - { - debug (selector) - _exceptionSet.dump("_exceptionSet"); - - version (Windows) - handlesAvailable = handlesAvailable || (_exceptionSet.length > 0); - - exceptfds = cast(fd_set*) _selectedExceptionSet.copy(_exceptionSet); - } - - version (Posix) - { - while (true) - { - toTimeval(&tv, timeout); - - // FIXME: add support for the wakeup() call. - _eventCount = .select(_maxfd + 1, readfds, writefds, exceptfds, timeout is TimeSpan.max ? null : &tv); - - debug (selector) - Stdout.format("--- .select() returned {0} (maxfd={1})\n", - _eventCount, cast(int) _maxfd); - if (_eventCount >= 0) - { - break; - } - else - { - if (errno != EINTR || !_restartInterruptedSystemCall) - { - // checkErrno() always throws an exception - checkErrno(__FILE__, __LINE__); - } - debug (selector) - Stdout.print("--- Restarting select() after being interrupted\n"); - } - } - } - else - { - // Windows returns an error when select() is called with all three - // handle sets empty, so we emulate the POSIX behavior by calling - // Thread.sleep(). - if (handlesAvailable) - { - toTimeval(&tv, timeout); - - // FIXME: Can a system call be interrupted on Windows? - _eventCount = .select(ISelectable.Handle.max, readfds, writefds, exceptfds, timeout is TimeSpan.max ? null : &tv); - - debug (selector) - Stdout.format("--- .select() returned {0}\n", _eventCount); - } - else - { - Thread.sleep(timeout.interval()); - _eventCount = 0; - } - } - return _eventCount; - } - - /** - * Return the selection set resulting from the call to any of the - * select() methods. - * - * Remarks: - * If the call to select() was unsuccessful or it did not return any - * events, the returned value will be null. - */ - public ISelectionSet selectedSet() - { - return (_eventCount > 0 ? new SelectSelectionSet(_keys, cast(uint) _eventCount, _selectedReadSet, - _selectedWriteSet, _selectedExceptionSet) : null); - } - - /** - * Return the selection key resulting from the registration of a - * conduit to the selector. - * - * Remarks: - * If the conduit is not registered to the selector the returned - * value will be null. No exception will be thrown by this method. - */ - public SelectionKey key(ISelectable conduit) - { - return (conduit !is null ? _keys[conduit.fileHandle()] : null); - } -} - -/** - * SelectionSet for the select()-based Selector. - */ -private class SelectSelectionSet: ISelectionSet -{ - private SelectionKey[ISelectable.Handle] _keys; - private uint _eventCount; - private HandleSet _readSet; - private HandleSet _writeSet; - private HandleSet _exceptionSet; - - protected this(SelectionKey[ISelectable.Handle] keys, uint eventCount, - HandleSet readSet, HandleSet writeSet, HandleSet exceptionSet) - { - _keys = keys; - _eventCount = eventCount; - _readSet = readSet; - _writeSet = writeSet; - _exceptionSet = exceptionSet; - } - - public uint length() - { - return _eventCount; - } - - public int opApply(int delegate(inout SelectionKey) dg) - { - int rc = 0; - ISelectable.Handle handle; - Event events; - - debug (selector) - Stdout.format("--- SelectSelectionSet.opApply() ({0} elements)\n", _eventCount); - - foreach (SelectionKey current; _keys) - { - handle = current.conduit.fileHandle(); - - if (_readSet !is null && _readSet.isSet(handle)) - events = Event.Read; - else - events = Event.None; - - if (_writeSet !is null && _writeSet.isSet(handle)) - events |= Event.Write; - - if (_exceptionSet !is null && _exceptionSet.isSet(handle)) - events |= Event.Error; - - // Only invoke the delegate if there is an event for the conduit. - if (events != Event.None) - { - current.events = events; - - debug (selector) - Stdout.format("--- Calling foreach delegate with selection key ({0}, 0x{1:x})\n", - cast(int) handle, cast(uint) events); - - if (dg(current) != 0) - { - rc = -1; - break; - } - } - else - { - debug (selector) - Stdout.format("--- Handle {0} doesn't have pending events\n", - cast(int) handle); - } - } - return rc; - } -} - - -version (Windows) -{ - /** - * Helper class used by the select()-based Selector to store handles. - * On Windows the handles are kept in an array of uints and the first - * element of the array stores the array "length" (i.e. number of handles - * in the array). Everything is stored so that the native select() API - * can use the HandleSet without additional conversions by just casting it - * to a fd_set*. - */ - private class HandleSet - { - /** Default number of handles that will be held in the HandleSet. */ - public const uint DefaultSize = 63; - - private uint[] _buffer; - - /** - * Constructor. Sets the initial number of handles that will be held - * in the HandleSet. - */ - public this(uint size = DefaultSize) - { - _buffer = new uint[1 + size]; - _buffer[0] = 0; - } - - /** - * Return the number of handles present in the HandleSet. - */ - public uint length() - { - return _buffer[0]; - } - - /** - * Remove all the handles from the set. - */ - private void reset() - { - _buffer[0] = 0; - } - - /** - * Add the handle to the set. - */ - public void set(ISelectable.Handle handle) - in - { - assert(handle >= 0); - } - body - { - if (!isSet(handle)) - { - // If we added too many sockets we increment the size of the buffer - if (++_buffer[0] >= _buffer.length) - { - _buffer.length = _buffer[0] + 1; - } - _buffer[_buffer[0]] = cast(uint) handle; - } - } - - /** - * Remove the handle from the set. - */ - public void clear(ISelectable.Handle handle) - { - for (uint i = 1; i <= _buffer[0]; ++i) - { - if (_buffer[i] == cast(uint) handle) - { - // We don't need to keep the handles in the order in which - // they were inserted, so we optimize the removal by - // copying the last element to the position of the removed - // element. - if (i != _buffer[0]) - { - _buffer[i] = _buffer[_buffer[0]]; - } - _buffer[0]--; - return; - } - } - } - - /** - * Copy the contents of the HandleSet into this instance. - */ - private HandleSet copy(HandleSet handleSet) - { - if (handleSet !is null) - { - _buffer[] = handleSet._buffer[]; - } - else - { - _buffer = null; - } - return this; - } - - /** - * Check whether the handle has been set. - */ - public bool isSet(ISelectable.Handle handle) - { - uint* start; - uint* stop; - - for (start = _buffer.ptr + 1, stop = start + _buffer[0]; start != stop; start++) - { - if (*start == cast(uint) handle) - return true; - } - return false; - } - - /** - * Cast the current object to a pointer to an fd_set, to be used with the - * select() system call. - */ - public fd_set* opCast() - { - return cast(fd_set*) _buffer.ptr; - } - - - debug (selector) - { - /** - * Dump the contents of a HandleSet into stdout. - */ - void dump(char[] name = null) - { - if (_buffer !is null && _buffer.length > 0 && _buffer[0] > 0) - { - char[] handleStr = new char[16]; - char[] handleListStr; - bool isFirst = true; - - if (name is null) - { - name = "HandleSet"; - } - - for (uint i = 1; i < _buffer[0]; ++i) - { - if (!isFirst) - { - handleListStr ~= ", "; - } - else - { - isFirst = false; - } - - handleListStr ~= itoa(handleStr, _buffer[i]); - } - - Stdout.formatln("--- {0}[{1}]: {2}", name, _buffer[0], handleListStr); - } - } - } - } -} -else version (Posix) -{ - private import tango.core.BitManip; - - /** - * Helper class used by the select()-based Selector to store handles. - * On POSIX-compatible platforms the handles are kept in an array of bits. - * Everything is stored so that the native select() API can use the - * HandleSet without additional conversions by casting it to a fd_set*. - */ - private class HandleSet - { - /** Default number of handles that will be held in the HandleSet. */ - const uint DefaultSize = 1024; - /** Number of bits per element held in the _buffer */ - const uint BitsPerElement = uint.sizeof * 8; - - private uint[] _buffer; - - /** - * Constructor. Sets the initial number of handles that will be held - * in the HandleSet. - */ - protected this(uint size = DefaultSize) - { - uint count; - - if (size < 1024) - size = 1024; - - count = size / BitsPerElement; - if (size % BitsPerElement != 0) - count++; - _buffer = new uint[count]; - } - - /** - * Return the number of handles present in the HandleSet. - */ - public uint length() - { - return _buffer.length; - } - - /** - * Remove all the handles from the set. - */ - public void reset() - { - _buffer[] = 0; - } - - /** - * Add a handle to the set. - */ - public void set(ISelectable.Handle handle) - { - // If we added too many sockets we increment the size of the buffer - if (cast(uint) handle >= BitsPerElement * _buffer.length) - { - _buffer.length = cast(uint) handle + 1; - } - bts(&_buffer[elementOffset(handle)], bitOffset(handle)); - } - - /** - * Remove a handle from the set. - */ - public void clear(ISelectable.Handle handle) - { - btr(&_buffer[elementOffset(handle)], bitOffset(handle)); - } - - /** - * Copy the contents of the HandleSet into this instance. - */ - private HandleSet copy(HandleSet handleSet) - { - if (handleSet !is null) - { - _buffer[] = handleSet._buffer[]; - } - else - { - _buffer = null; - } - return this; - } - - /** - * Check whether the handle has been set. - */ - public bool isSet(ISelectable.Handle handle) - { - return (bt(&_buffer[elementOffset(handle)], bitOffset(handle)) != 0); - } - - /** - * Cast the current object to a pointer to an fd_set, to be used with the - * select() system call. - */ - public fd_set* opCast() - { - return cast(fd_set*) _buffer; - } - - /** - * Calculate the offset (in uints) of a handle in the set. - */ - private static uint elementOffset(ISelectable.Handle handle) - { - return cast(uint) handle / BitsPerElement; - } - - /** - * Calculate the offset of the bit corresponding to a handle in the set. - */ - private static uint bitOffset(ISelectable.Handle handle) - { - return cast(uint) handle % BitsPerElement; - } - - debug (selector) - { - /** - * Dump the contents of a HandleSet into stdout. - */ - void dump(char[] name = null) - { - if (_buffer !is null && _buffer.length > 0) - { - char[] handleStr = new char[16]; - char[] handleListStr; - bool isFirst = true; - - if (name is null) - { - name = "HandleSet"; - } - - for (uint i = 0; i < _buffer.length * _buffer[0].sizeof; ++i) - { - if (isSet(cast(ISelectable.Handle) i)) - { - if (!isFirst) - { - handleListStr ~= ", "; - } - else - { - isFirst = false; - } - handleListStr ~= itoa(handleStr, i); - } - } - Stdout.formatln("--- {0}: {1}", name, handleListStr); - } - } - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/Selector.d --- a/tango/tango/io/selector/Selector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.Selector; - -/** - * A multiplexor of conduit I/O events. - * - * A Selector can wait for I/O events (Read, Write, etc.) for multiple - * conduits efficiently (i.e. without consuming CPU cycles). - * - * The Selector is an alias for your system's most efficient I/O multiplexor, - * which will be determined during compilation. - * - * To create a Selector you need to use the open() method and when you decide - * you no longer need it you should call its close() method to free any system - * resources it may be consuming. All selectors that need to free resources - * when close() is called also implement a destructor that automatically calls - * this method. This means that if you declare your selector instance with the - * 'auto' keyword you won't have to worry about doing it manually. - * - * Once you have open()'ed your selector you need to associate the conduits to - * it by using the register() method. This method receives the conduit and the - * events you want to track for it. For example, if you wanted to read from - * the conduit you would do: - * - * --- - * selector.register(conduit, Event.Read, myObject); - * --- - * - * This method also accepts an optional third parameter to associate a - * user-defined object to the conduit. These three parameters together define - * a SelectionKey, which is what you'll receive when the conduit is "selected" - * (i.e. receives an event). - * - * If you need to modify your conduit's registration you need to use the - * reregister() method, which works like register(), but expects to be passed - * a conduit that has already been associated to the selector: - * - * --- - * selector.reregister(conduit, Event.Write, myObject); - * --- - * - * If you need to remove a conduit from the selector you do it by calling - * unregister(): - * - * --- - * selector.unregister(conduit); - * --- - * - * Once you are done setting up the conduits you will want to wait for I/O - * events for them. To do that you need to use the select() method. This - * method blocks until either one of the conduits is selected or the - * specified timeout is reached. Even though it has two different versions: - * a) select(); b) select(Interval); the first one is just the same as doing - * select(Interval.max). In that case we don't have a timeout and - * select() blocks until a conduit receives an event. - * - * When select() returns you will receive an integer; if this integer is - * bigger than 0, it indicates the number of conduits that have been selected. - * If this number is 0, the it means that the selector reached a timeout, and - * if it's -1, then it means that there was an error. A normal block that deals - * with the selection process would look like this: - * - * --- - * try - * { - * int eventCount = selector.select(10.0); - * if (eventCount > 0) - * { - * // Process the I/O events in the selected set - * } - * else if (eventCount == 0) - * { - * // Timeout - * } - * else if (eventCount == -1) - * { - * // Error - * } - * else - * { - * // Error: should never happen. - * } - * } - * catch (SelectorException e) - * { - * Stdout.format("Exception caught: {0}", e.toString()).newline(); - * } - * --- - * - * Finally, to gather the events you need to iterate over the selector's - * selection set, which can be accessed via the selectedSet() method. - * - * --- - * foreach (SelectionKey key; selector.selectedSet()) - * { - * if (key.isReadable()) - * { - * // Read from conduit - * // [...] - * // Then register it for writing - * selector.reregister(key.conduit, Event.Write, key.attachment); - * } - * - * if (key.isWriteable()) - * { - * // Write to conduit - * // [...] - * // Then register it for reading - * selector.reregister(key.conduit, Event.Read, key.attachment); - * } - * - * if (key.isError()) - * { - * // Problem with conduit; remove it from selector - * selector.remove(conduit); - * } - * } - * --- - */ -version (linux) -{ - public import tango.io.selector.EpollSelector; - - /** - * Default Selector for Linux. - */ - alias EpollSelector Selector; -} -else version(Posix) -{ - public import tango.io.selector.PollSelector; - - /** - * Default Selector for POSIX-compatible platforms. - */ - alias PollSelector Selector; -} -else -{ - public import tango.io.selector.SelectSelector; - - /** - * Default Selector for Windows. - */ - alias SelectSelector Selector; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/SelectorException.d --- a/tango/tango/io/selector/SelectorException.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.SelectorException; - -//private import tango.core.Exception; - - -/** - * SelectorException is thrown when the Selector cannot be created because - * of insufficient resources (file descriptors, memory, etc.) - */ -public class SelectorException: Exception -{ - /** - * Construct a selector exception with the provided text string - * - * Params: - * file = name of the source file where the exception was thrown; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where the exception was - * thrown; you would normally use __LINE__ for this parameter. - */ - public this(char[] msg, char[] file, uint line) - { - super(msg, file, line); - } -} - - -/** - * UnregisteredConduitException is thrown when the selector looks for a - * registered conduit and it cannot find it. - */ -public class UnregisteredConduitException: SelectorException -{ - /** - * Construct a selector exception with the provided text string - * - * Params: - * file = name of the source file where the exception was thrown; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where the exception was - * thrown; you would normally use __LINE__ for this parameter. - */ - public this(char[] file, uint line) - { - super("The conduit is not registered to the selector", file, line); - } -} - -/** - * RegisteredConduitException is thrown when a selector detects that a conduit - * registration was attempted more than once. - */ -public class RegisteredConduitException: SelectorException -{ - /** - * Construct a selector exception with the provided text string - * - * Params: - * file = name of the source file where the exception was thrown; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where the exception was - * thrown; you would normally use __LINE__ for this parameter. - */ - public this(char[] file, uint line) - { - super("The conduit is already registered to the selector", file, line); - } -} - -/** - * InterruptedSystemCallException is thrown when a system call is interrupted - * by a signal and the selector was not set to restart it automatically. - */ -public class InterruptedSystemCallException: SelectorException -{ - /** - * Construct a selector exception with the provided text string - * - * Params: - * file = name of the source file where the exception was thrown; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where the exception was - * thrown; you would normally use __LINE__ for this parameter. - */ - public this(char[] file, uint line) - { - super("A system call was interrupted by a signal", file, line); - } -} - -/** - * OutOfMemoryException is thrown when there is not enough memory. - */ -public class OutOfMemoryException: SelectorException -{ - /** - * Construct a selector exception with the provided text string - * - * Params: - * file = name of the source file where the exception was thrown; you - * would normally use __FILE__ for this parameter. - * line = line number of the source file where the exception was - * thrown; you would normally use __LINE__ for this parameter. - */ - public this(char[] file, uint line) - { - super("Out of memory", file, line); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/selector/model/ISelector.d --- a/tango/tango/io/selector/model/ISelector.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,460 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.io.selector.model.ISelector; - -public import tango.time.Time; - -public import tango.io.model.IConduit; - -/** - * Events that are used to register a Conduit to a selector and are returned - * in a SelectionKey after calling ISelector.select(). - */ -enum Event: uint -{ - None = 0, // No event - // IMPORTANT: Do not change the values of the following symbols. They were - // set in this way to map the values returned by the POSIX poll() - // system call. - Read = (1 << 0), // POLLIN - UrgentRead = (1 << 1), // POLLPRI - Write = (1 << 2), // POLLOUT - // The following events should not be used when registering a conduit to a - // selector. They are only used when returning events to the user. - Error = (1 << 3), // POLLERR - Hangup = (1 << 4), // POLLHUP - InvalidHandle = (1 << 5) // POLLNVAL -} - - -/** - * The SelectionKey class holds the information concerning the conduits and - * their association to a selector. Each key keeps a reference to a registered - * conduit and the events that are to be tracked for it. The 'events' member - * of the key can take two meanings, depending on where it's used. If used - * with the registration methods of the selector (register(), reregister()) it - * represents the events we want to track; if used within a foreach cycle - * on an ISelectionSet it represents the events that have been detected for a - * conduit. - * - * The SelectionKey can also hold an optional object via the 'attachment' - * member. This member is very convenient to keep application-specific data - * that will be needed when the tracked events are triggered. - * - * See $(LINK $(CODEURL)tango.io.selector.ISelector), - * $(LINK $(CODEURL)tango.io.selector.ISelectionSet) - */ -class SelectionKey -{ - private ISelectable _conduit; - private Event _events; - private Object _attachment; - - /** - * Constructor - */ - public this() - { - } - - /** - * Constructor - * - * Params: - * conduit = conduit that will be associated to this SelectionKey - * events = events that will be tracked for the conduit - * attachment = optional object with application-specific data that will - * be available when an event is triggered for the conduit - * - * Examples: - * --- - * SocketConduit cond; - * - * auto key = new SelectionKey(cond, Event.Read | Event.Write); - * --- - */ - public this(ISelectable conduit, Event events, Object attachment = null) - { - _conduit = conduit; - _events = events; - _attachment = attachment; - } - - /** - * Return the conduit held by the instance. - */ - public ISelectable conduit() - { - return _conduit; - } - - /** - * Set the conduit held by the instance - */ - public void conduit(ISelectable conduit) - { - _conduit = conduit; - } - - /** - * Return the registered events as a bit mask of different Event values. - */ - public Event events() - { - return _events; - } - - /** - * Set the registered events as a bit mask of different Event values. - */ - public void events(Event events) - { - _events = events; - } - - /** - * Return the attached Object held by the instance. - */ - public Object attachment() - { - return _attachment; - } - - /** - * Set the attached Object held by the instance - */ - public void attachment(Object attachment) - { - _attachment = attachment; - } - - /** - * Check if a Read event has been associated to this SelectionKey. - */ - public bool isReadable() - { - return ((_events & Event.Read) != 0); - } - - /** - * Check if an UrgentRead event has been associated to this SelectionKey. - */ - public bool isUrgentRead() - { - return ((_events & Event.UrgentRead) != 0); - } - - /** - * Check if a Write event has been associated to this SelectionKey. - */ - public bool isWritable() - { - return ((_events & Event.Write) != 0); - } - - /** - * Check if an Error event has been associated to this SelectionKey. - */ - public bool isError() - { - return ((_events & Event.Error) != 0); - } - - /** - * Check if a Hangup event has been associated to this SelectionKey. - */ - public bool isHangup() - { - return ((_events & Event.Hangup) != 0); - } - - /** - * Check if an InvalidHandle event has been associated to this SelectionKey. - */ - public bool isInvalidHandle() - { - return ((_events & Event.InvalidHandle) != 0); - } -} - - -/** - * Container that holds the SelectionKey's for all the conduits that have - * triggered events during a previous invocation to ISelector.select(). - * Instances of this container are normally returned from calls to - * ISelector.selectedSet(). - */ -interface ISelectionSet -{ - /** - * Returns the number of SelectionKey's in the set. - */ - public abstract uint length(); - - /** - * Operator to iterate over a set via a foreach block. - */ - public abstract int opApply(int delegate(inout SelectionKey) dg); -} - - -/** - * A selector is a multiplexor for I/O events associated to a Conduit. - * All selectors must implement this interface. - * - * A selector needs to be initialized by calling the open() method to pass - * it the initial amount of conduits that it will handle and the maximum - * amount of events that will be returned per call to select(). In both cases, - * these values are only hints and may not even be used by the specific - * ISelector implementation you choose to use, so you cannot make any - * assumptions regarding what results from the call to select() (i.e. you - * may receive more or less events per call to select() than what was passed - * in the 'maxEvents' argument. The amount of conduits that the selector can - * manage will be incremented dynamically if necessary. - * - * To add, modify or remove conduit registrations to the selector you use - * the register(), reregister() and unregister() methods respectively. - * - * To wait for events from the conduits you need to call any of the select() - * methods. The selector cannot be modified from another thread while - * blocking on a call to these methods. - * - * Once the selector is no longer used you must call the close() method so - * that the selector can free any resources it may have allocated in the call - * to open(). - * - * Examples: - * --- - * import tango.io.selector.model.ISelector; - * import tango.io.SocketConduit; - * import tango.io.Stdout; - * - * ISelector selector; - * SocketConduit conduit1; - * SocketConduit conduit2; - * MyClass object1; - * MyClass object2; - * int eventCount; - * - * // Initialize the selector assuming that it will deal with 2 conduits and - * // will receive 2 events per invocation to the select() method. - * selector.open(2, 2); - * - * selector.register(conduit, Event.Read, object1); - * selector.register(conduit, Event.Write, object2); - * - * eventCount = selector.select(); - * - * if (eventCount > 0) - * { - * char[16] buffer; - * int count; - * - * foreach (SelectionKey key, selector.selectedSet()) - * { - * if (key.isReadable()) - * { - * count = (cast(SocketConduit) key.conduit).read(buffer); - * if (count != IConduit.Eof) - * { - * Stdout.format("Received '{0}' from peer\n", buffer[0..count]); - * selector.reregister(key.conduit, Event.Write, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isWritable()) - * { - * count = (cast(SocketConduit) key.conduit).write("MESSAGE"); - * if (count != IConduit.Eof) - * { - * Stdout.print("Sent 'MESSAGE' to peer\n"); - * selector.reregister(key.conduit, Event.Read, key.attachment); - * } - * else - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * - * if (key.isError() || key.isHangup() || key.isInvalidHandle()) - * { - * selector.unregister(key.conduit); - * key.conduit.close(); - * } - * } - * } - * - * selector.close(); - * --- - */ -interface ISelector -{ - /** - * Initialize the selector. - * - * Params: - * size = value that provides a hint for the maximum amount of - * conduits that will be registered - * maxEvents = value that provides a hint for the maximum amount of - * conduit events that will be returned in the selection - * set per call to select. - */ - public abstract void open(uint size, uint maxEvents); - - /** - * Free any operating system resources that may have been allocated in the - * call to open(). - * - * Remarks: - * Not all of the selectors need to free resources other than allocated - * memory, but those that do will normally also add a call to close() in - * their destructors. - */ - public abstract void close(); - - /** - * Associate a conduit to the selector and track specific I/O events. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events that - * will be tracked for the conduit. - * attachment = optional object with application-specific data that will - * be available when an event is triggered for the conduit - * - * Examples: - * --- - * ISelector selector; - * SocketConduit conduit; - * MyClass object; - * - * selector.register(conduit, Event.Read | Event.Write, object); - * --- - */ - public abstract void register(ISelectable conduit, Event events, - Object attachment = null); - - /** - * Modify the events that are being tracked or the 'attachment' field - * for an already registered conduit. - * - * Params: - * conduit = conduit that will be associated to the selector; - * must be a valid conduit (i.e. not null and open). - * events = bit mask of Event values that represent the events that - * will be tracked for the conduit. - * attachment = optional object with application-specific data that will - * be available when an event is triggered for the conduit - * - * Remarks: - * The 'attachment' member of the SelectionKey will always be overwritten, - * even if it's null. - * - * Examples: - * --- - * ISelector selector; - * SocketConduit conduit; - * MyClass object; - * - * selector.reregister(conduit, Event.Write, object); - * --- - */ - public abstract void reregister(ISelectable conduit, Event events, - Object attachment = null); - /** - * Remove a conduit from the selector. - * - * Params: - * conduit = conduit that had been previously associated to the - * selector; it can be null. - * - * Remarks: - * Unregistering a null conduit is allowed and no exception is thrown - * if this happens. - */ - public abstract void unregister(ISelectable conduit); - - /** - * Wait indefinitely for I/O events from the registered conduits. - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout and -1 if there - * was an error. - */ - public abstract int select(); - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Params: - * timeout = TimeSpan with the maximum amount of time that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout. - */ - public abstract int select(TimeSpan timeout); - - /** - * Wait for I/O events from the registered conduits for a specified - * amount of time. - * - * Note: This representation of timeout is not always accurate, so it is - * possible that the function will return with a timeout before the - * specified period. For more accuracy, use the TimeSpan version. - * - * Note: Implementers should define this method as: - * ------- - * select(TimeSpan.interval(timeout)); - * ------- - * - * Params: - * timeout = the maximum amount of time in seconds that the - * selector will wait for events from the conduits; the - * amount of time is relative to the current system time - * (i.e. just the number of milliseconds that the selector - * has to wait for the events). - * - * Returns: - * The amount of conduits that have received events; 0 if no conduits - * have received events within the specified timeout. - */ - public abstract int select(double timeout); - - /** - * Return the selection set resulting from the call to any of the select() - * methods. - * - * Remarks: - * If the call to select() was unsuccessful or it did not return any - * events, the returned value will be null. - */ - public abstract ISelectionSet selectedSet(); - - /** - * Return the selection key resulting from the registration of a conduit - * to the selector. - * - * Remarks: - * If the conduit is not registered to the selector the returned - * value will be null. No exception will be thrown by this method. - */ - public abstract SelectionKey key(ISelectable conduit); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/BufferStream.d --- a/tango/tango/io/stream/BufferStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.BufferStream; - -private import tango.io.Buffer; - -/******************************************************************************* - - Buffers the flow of data from a upstream input. A downstream - neighbour can locate and use this buffer instead of creating - another instance of their own. - - (note that upstream is closer to the source, and downstream is - further away) - -*******************************************************************************/ - -class BufferInput : Buffer -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (InputStream stream, uint size = 16 * 1024) - { - super (size); - super.input = stream; - } -} - - -/******************************************************************************* - - Buffers the flow of data from a upstream output. A downstream - neighbour can locate and use this buffer instead of creating - another instance of their own. - - (note that upstream is closer to the source, and downstream is - further away) - - Don't forget to flush() buffered content before closing. - -*******************************************************************************/ - -class BufferOutput : Buffer -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (OutputStream stream, uint size = 16 * 1024) - { - super (size); - super.output = stream; - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/DataFileStream.d --- a/tango/tango/io/stream/DataFileStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.DataFileStream; - -private import tango.io.FileConduit; - -private import tango.io.stream.DataStream; - -/******************************************************************************* - - Composes a seekable file with buffered binary input. A seek causes - the input buffer to be cleared - -*******************************************************************************/ - -class DataFileInput : DataInput -{ - private FileConduit conduit; - - /*********************************************************************** - - Wrap a FileConduit instance - - ***********************************************************************/ - - this (FileConduit file, uint buffer=uint.max) - { - super (conduit = file, buffer); - } - - /*********************************************************************** - - Set the file seek position to the specified offset, and - clear the input buffer - - ***********************************************************************/ - - final long seek (long offset) - { - host.clear; - return conduit.seek (offset); - } - - /*********************************************************************** - - Return the underlying conduit - - ***********************************************************************/ - - final FileConduit file () - { - return conduit; - } -} - - -/******************************************************************************* - - Composes a seekable file with buffered binary output. A seek causes - the output buffer to be flushed first - -*******************************************************************************/ - -class DataFileOutput : DataOutput -{ - private FileConduit conduit; - - /*********************************************************************** - - Wrap a FileConduit instance - - ***********************************************************************/ - - this (FileConduit file, uint buffer=uint.max) - { - super (conduit = file, buffer); - } - - /*********************************************************************** - - Set the file seek position to the specified offset, after - flushing the output buffer - - ***********************************************************************/ - - final long seek (long offset) - { - host.flush; - return conduit.seek (offset); - } - - /*********************************************************************** - - Return the underlying conduit - - ***********************************************************************/ - - final FileConduit file () - { - return conduit; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/DataStream.d --- a/tango/tango/io/stream/DataStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,338 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.DataStream; - -private import tango.io.Buffer; - -private import tango.io.Conduit; - -private import tango.core.ByteSwap; - -/******************************************************************************* - - A simple way to read binary data from an arbitrary InputStream, - such as a file: - --- - auto input = new DataInput (new FileInput("path")); - auto x = input.readInt; - auto y = input.readDouble; - input.read (new char[10]); - input.close; - --- - -*******************************************************************************/ - -class DataInput : InputFilter, Buffered -{ - private bool flip; - private IBuffer input; - - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (InputStream stream, uint buffer=uint.max, bool flip=false) - { - this.flip = flip; - super (input = Buffer.share (stream, buffer)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return input; - } - - /*********************************************************************** - - Override this to give back a useful chaining reference - - ***********************************************************************/ - - final override DataInput clear () - { - host.clear; - return this; - } - - /*********************************************************************** - - Read an array back into a user-provided workspace. The - space must be sufficiently large enough to house all of - the array, and the actual number of bytes is returned. - - Note that the size of the array is written as an integer - prefixing the array content itself. Use read(void[]) to - eschew this prefix. - - ***********************************************************************/ - - final override uint get (void[] dst) - { - auto len = getInt; - if (len > dst.length) - conduit.error ("DataInput.readArray :: dst array is too small"); - input.readExact (dst.ptr, len); - return len; - } - - /*********************************************************************** - - ***********************************************************************/ - - final bool getBool () - { - bool x; - input.readExact (&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final byte getByte () - { - byte x; - input.readExact (&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final short getShort () - { - short x; - input.readExact (&x, x.sizeof); - if (flip) - ByteSwap.swap16(&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final int getInt () - { - int x; - input.readExact (&x, x.sizeof); - if (flip) - ByteSwap.swap32(&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final long getLong () - { - long x; - input.readExact (&x, x.sizeof); - if (flip) - ByteSwap.swap64(&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final float getFloat () - { - float x; - input.readExact (&x, x.sizeof); - if (flip) - ByteSwap.swap32(&x, x.sizeof); - return x; - } - - /*********************************************************************** - - ***********************************************************************/ - - final double getDouble () - { - double x; - input.readExact (&x, x.sizeof); - if (flip) - ByteSwap.swap64(&x, x.sizeof); - return x; - } - -} - - -/******************************************************************************* - - A simple way to write binary data to an arbitrary OutputStream, - such as a file: - --- - auto output = new DataOutput (new FileOutput("path")); - output.writeInt (1024); - output.writeDouble (3.14159); - output.write ("hello world"); - output.flush.close; - --- - -*******************************************************************************/ - -class DataOutput : OutputFilter, Buffered -{ - private bool flip; - private IBuffer output; - - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (OutputStream stream, uint buffer=uint.max, bool flip = false) - { - this.flip = flip; - super (output = Buffer.share (stream, buffer)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return output; - } - - /*********************************************************************** - - Write an array to the target stream. Note that the size - of the array is written as an integer prefixing the array - content itself. Use write(void[]) to eschew this prefix. - - ***********************************************************************/ - - final uint put (void[] src) - { - auto len = src.length; - putInt (len); - output.append (src.ptr, len); - return len; - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putBool (bool x) - { - output.append (&x, x.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putByte (byte x) - { - output.append (&x, x.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putShort (short x) - { - if (flip) - ByteSwap.swap16 (&x, x.sizeof); - output.append (&x, x.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putInt (int x) - { - if (flip) - ByteSwap.swap32 (&x, x.sizeof); - output.append (&x, uint.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putLong (long x) - { - if (flip) - ByteSwap.swap64 (&x, x.sizeof); - output.append (&x, x.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putFloat (float x) - { - if (flip) - ByteSwap.swap32 (&x, x.sizeof); - output.append (&x, x.sizeof); - } - - /*********************************************************************** - - ***********************************************************************/ - - final void putDouble (double x) - { - if (flip) - ByteSwap.swap64 (&x, x.sizeof); - output.append (&x, x.sizeof); - } -} - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Buffer; - - unittest - { - auto buf = new Buffer(32); - - auto output = new DataOutput (buf); - output.put ("blah blah"); - output.putInt (1024); - - auto input = new DataInput (buf); - assert (input.get(new char[9]) is 9); - assert (input.getInt is 1024); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/DigestStream.d --- a/tango/tango/io/stream/DigestStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.DigestStream; - -private import tango.io.Conduit; - -private import tango.io.digest.Digest; - -/******************************************************************************* - - Inject a digest filter into an input stream, updating the digest - as information flows through it - -*******************************************************************************/ - -class DigestInput : InputFilter -{ - private Digest filter; - - /*********************************************************************** - - Accepts any input stream, and any digest derivation - - ***********************************************************************/ - - this (InputStream stream, Digest digest) - { - super (stream); - filter = digest; - } - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst (or IOStream.Eof for end-of-flow) - - ***********************************************************************/ - - final override uint read (void[] dst) - { - auto len = host.read (dst); - if (len != Eof) - filter.update (dst [0 .. len]); - return len; - } - - /******************************************************************** - - Return the Digest instance we were created with. Use this - to access the resultant binary or hex digest value - - *********************************************************************/ - - final Digest digest() - { - return filter; - } -} - - -/******************************************************************************* - - Inject a digest filter into an output stream, updating the digest - as information flows through it. Here's an example where we calculate - an MD5 digest as a side-effect of copying a file: - --- - auto output = new DigestOutput(new FileOutput("output"), new Md5); - output.copy (new FileInput("input")); - - Stdout.formatln ("hex digest: {}", output.digest.hexDigest); - --- - -*******************************************************************************/ - -class DigestOutput : OutputFilter -{ - private Digest filter; - - /*********************************************************************** - - Accepts any output stream, and any digest derivation - - ***********************************************************************/ - - this (OutputStream stream, Digest digest) - { - super (stream); - filter = digest; - } - - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided - - ***********************************************************************/ - - final override uint write (void[] src) - { - auto len = host.write (src); - if (len != Eof) - filter.update (src[0 .. len]); - return len; - } - - /******************************************************************** - - Return the Digest instance we were created with. Use this - to access the resultant binary or hex digest value - - *********************************************************************/ - - final Digest digest() - { - return filter; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (DigestStream) -{ - import tango.io.Stdout; - import tango.io.GrowBuffer; - import tango.io.digest.Md5; - import tango.io.stream.FileStream; - - void main() - { - auto output = new DigestOutput(new GrowBuffer, new Md5); - output.copy (new FileInput("digeststream.d")); - - Stdout.formatln ("hex digest:{}", output.digest.hexDigest); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/EndianStream.d --- a/tango/tango/io/stream/EndianStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2007 - - author: Kris - - Streams for swapping endian-order. The stream is treated as a set - of same-sized elements. Note that partial elements are not mutated - -*******************************************************************************/ - -module tango.io.stream.EndianStream; - -private import tango.io.Buffer, - tango.io.Conduit; - -private import tango.core.ByteSwap; - -/******************************************************************************* - - Type T is the element type - -*******************************************************************************/ - -class EndianInput(T) : InputFilter -{ - static if ((T.sizeof != 2) && (T.sizeof != 4) && (T.sizeof != 8)) - pragma (msg, "EndianInput :: type should be of length 2, 4, or 8 bytes"); - - - private IBuffer input; - - /*********************************************************************** - - ***********************************************************************/ - - this (InputStream stream) - { - super (input = Buffer.share (stream)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return input; - } - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst (or IOStream.Eof for end-of-flow). Note - that a trailing partial element will be placed into dst, - but the returned length will effectively ignore it - - ***********************************************************************/ - - final override uint read (void[] dst) - { - uint len = input.fill (dst[0 .. dst.length & ~(T.sizeof-1)]); - if (len != Eof) - { - // the final read may be misaligned ... - len &= ~(T.sizeof - 1); - - static if (T.sizeof == 2) - ByteSwap.swap16 (dst.ptr, len); - - static if (T.sizeof == 4) - ByteSwap.swap32 (dst.ptr, len); - - static if (T.sizeof == 8) - ByteSwap.swap64 (dst.ptr, len); - } - return len; - } -} - - - -/******************************************************************************* - - Type T is the element type - -*******************************************************************************/ - -class EndianOutput (T) : OutputFilter -{ - static if ((T.sizeof != 2) && (T.sizeof != 4) && (T.sizeof != 8)) - pragma (msg, "EndianOutput :: type should be of length 2, 4, or 8 bytes"); - - private IBuffer output; - - /*********************************************************************** - - ***********************************************************************/ - - this (OutputStream stream) - { - super (output = Buffer.share (stream)); - } - - /*********************************************************************** - - Write to output stream from a source array. The provided - src content will be consumed and left intact. - - Returns the number of bytes written from src, which may - be less than the quantity provided. Note that any partial - elements will not be consumed - - ***********************************************************************/ - - final override uint write (void[] src) - { - uint writer (void[] dst) - { - auto len = dst.length; - if (len > src.length) - len = src.length; - - len &= ~(T.sizeof - 1); - dst [0..len] = src [0..len]; - - static if (T.sizeof == 2) - ByteSwap.swap16 (dst.ptr, len); - - static if (T.sizeof == 4) - ByteSwap.swap32 (dst.ptr, len); - - static if (T.sizeof == 8) - ByteSwap.swap64 (dst.ptr, len); - - return len; - } - - uint bytes = src.length; - - // flush if we used all buffer space - if ((bytes -= output.write (&writer)) >= T.sizeof) - if (output.output) - output.drain (output.output); - else - return Eof; - return src.length - bytes; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Stdout; - - unittest - { - auto inp = new EndianInput!(dchar)(new Buffer("hello world"d)); - auto oot = new EndianOutput!(dchar)(new Buffer(64)); - oot.copy (inp); - assert (oot.output.slice == "hello world"d); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/FileStream.d --- a/tango/tango/io/stream/FileStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.FileStream; - -public import tango.io.FileConduit; - -/******************************************************************************* - - Trivial wrapper around a FileConduit - -*******************************************************************************/ - -class FileInput : FileConduit -{ - /*********************************************************************** - - Open a file for reading. Don't forget to use close() - - ***********************************************************************/ - - this (char[] path, FileConduit.Style style = FileConduit.ReadExisting) - { - super (path, style); - } -} - - -/******************************************************************************* - - Trivial wrapper around a FileConduit - -*******************************************************************************/ - -class FileOutput : FileConduit -{ - /*********************************************************************** - - Open a file for writing. Don't forget to use close() - - ***********************************************************************/ - - this (char[] path, FileConduit.Style style = FileConduit.WriteCreate) - { - super (path, style); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/FormatStream.d --- a/tango/tango/io/stream/FormatStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,58 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.FormatStream; - -private import tango.io.Print; - -private import tango.io.model.IConduit; - -private import tango.text.convert.Format; - -/******************************************************************************* - - Simple way to hook up a utf8 formatter to an arbitrary OutputStream, - such as a file: - --- - auto output = new FormatOutput (new FileOutput("path")); - output.formatln ("{} green bottles", 10); - output.close; - --- - - This is a trivial wrapper around the Print class, and is limited - to emitting utf8 output. Use the Print class directly in order to - generate utf16/32 output instead. - - Note that this class is a true instance of OutputStream, by way of - inheritance via the Print superclass. - -*******************************************************************************/ - -class FormatOutput : Print!(char) -{ - /*********************************************************************** - - Create a Layout instance and bind it to the given stream. - The optional second argument controls implicit flushing of - newline(), where true enables flushing. An explicit flush() - will always flush the output. - - ***********************************************************************/ - - this (OutputStream stream, bool flush=false) - { - super (Format, stream); - super.flush = flush; - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/GreedyStream.d --- a/tango/tango/io/stream/GreedyStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: June 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.GreedyStream; - -private import tango.io.Conduit; - - -/******************************************************************************* - - A conduit filter that ensures its input is read in full. There's - also an optional readExact() for more explicit requests - -*******************************************************************************/ - -class GreedyInput : InputFilter -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (InputStream stream) - { - super (stream); - } - - /*********************************************************************** - - Fill the provided array. Returns the number of bytes - actually read, which will be less that dst.length when - Eof has been reached, and then Eof thereafter - - ***********************************************************************/ - - final override uint read (void[] dst) - { - uint len = 0; - - while (len < dst.length) - { - auto i = host.read (dst [len .. $]); - if (i is Eof) - return (len ? len : i); - len += i; - } - return len; - } - - /*********************************************************************** - - Read from a stream into a target array. The provided dst - will be fully populated with content from the input. - - This differs from read in that it will throw an exception - where an Eof condition is reached before input has completed - - ***********************************************************************/ - - final GreedyInput readExact (void[] dst) - { - while (dst.length) - { - auto i = read (dst); - if (i is Eof) - conduit.error ("unexpected Eof while reading: "~conduit.toString); - dst = dst [i .. $]; - } - return this; - } -} - - - -/******************************************************************************* - - A conduit filter that ensures its output is written in full. There's - also an optional writeExact() for more explicit requests - -*******************************************************************************/ - -class GreedyOutput : OutputFilter -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (OutputStream stream) - { - super (stream); - } - - /*********************************************************************** - - Consume everything we were given. Returns the number of - bytes written which will be less than src.length only - when an Eof condition is reached, and Eof from that point - forward - - ***********************************************************************/ - - final override uint write (void[] src) - { - uint len = 0; - - while (len < src.length) - { - auto i = host.write (src [len .. $]); - if (i is Eof) - return (len ? len : i); - len += i; - } - return len; - } - - /*********************************************************************** - - Write to stream from a source array. The provided src content - will be written in full to the output. - - This differs from write in that it will throw an exception - where an Eof condition is reached before output has completed - - ***********************************************************************/ - - final GreedyOutput writeExact (void[] src) - { - while (src.length) - { - auto i = write (src); - if (i is Eof) - conduit.error ("unexpected Eof while writing: "~conduit.toString); - src = src [i .. $]; - } - return this; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (GreedyStream) -{ - void main() - { - auto s = new GreedyInput (null); - } -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/LineStream.d --- a/tango/tango/io/stream/LineStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,72 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.LineStream; - -private import tango.io.model.IConduit; - -private import tango.text.stream.LineIterator; - -/******************************************************************************* - - Simple way to hook up a line-tokenizer to an arbitrary InputStream, - such as a file conduit: - --- - auto input = new LineInput (new FileInput("path")); - foreach (line; input) - ... - input.close; - --- - - Note that this is just a simple wrapper around LineIterator, and - supports utf8 lines only. Use LineIterator directly for utf16/32 - support, or use the other tango.text.stream classes directly for - other tokenizing needs. - - Note that this class is a true instance of InputStream, by way of - inheritance via the Iterator superclass. - -*******************************************************************************/ - -class LineInput : LineIterator!(char) -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (InputStream stream) - { - super (stream); - } -} - - -/******************************************************************************* - - -*******************************************************************************/ - -debug (LineStream) -{ - import tango.io.Stdout; - import tango.io.stream.FileStream; - - void main() - { - auto input = new LineInput (new FileInput("LineStream.d")); - foreach (line; input) - Stdout(line).newline; - input.close; - } -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/MapStream.d --- a/tango/tango/io/stream/MapStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - - Simple serialization for text-based name/value pairs - -*******************************************************************************/ - -module tango.io.stream.MapStream; - -private import tango.io.Buffer, - tango.io.Conduit; - -private import Text = tango.text.Util; - -private import tango.text.stream.LineIterator; - -/******************************************************************************* - - Provides load facilities for a properties stream. That is, a file - or other medium containing lines of text with a name=value layout - -*******************************************************************************/ - -class MapInput(T) : LineIterator!(T) -{ - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (InputStream stream) - { - super (stream); - } - - /*********************************************************************** - - Load properties from the provided stream, via a foreach. - - We use an iterator to sweep text lines, and extract lValue - and rValue pairs from each one, The expected file format is - as follows: - - --- - x = y - abc = 123 - x.y.z = this is a single property - - # this is a comment line - --- - - Note that the provided name and value are actually slices - and should be copied if you intend to retain them (using - name.dup and value.dup where appropriate) - - ***********************************************************************/ - - final int opApply (int delegate(ref T[] name, ref T[] value) dg) - { - int ret; - - foreach (line; super) - { - auto text = Text.trim (line); - - // comments require '#' as the first non-whitespace char - if (text.length && (text[0] != '#')) - { - // find the '=' char - auto i = Text.locate (text, '='); - - // ignore if not found ... - if (i < text.length) - { - auto name = Text.trim (text[0 .. i]); - auto value = Text.trim (text[i+1 .. $]); - if ((ret = dg (name, value)) != 0) - break; - } - } - } - return ret; - } - - /*********************************************************************** - - Load the input stream into an AA - - ***********************************************************************/ - - final MapInput load (ref T[][T[]] properties) - { - foreach (name, value; this) - properties[name.dup] = value.dup; - return this; - } -} - - -/******************************************************************************* - - Provides write facilities on a properties stream. That is, a file - or other medium which will contain lines of text with a name=value - layout - -*******************************************************************************/ - -class MapOutput(T) : OutputFilter, Buffered -{ - private IBuffer output; - - private const T[] equals = " = "; - version (Win32) - private const T[] NL = "\r\n"; - version (Posix) - private const T[] NL = "\n"; - - /*********************************************************************** - - Propagate ctor to superclass - - ***********************************************************************/ - - this (OutputStream stream, T[] newline = NL) - { - super (output = Buffer.share (stream)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return output; - } - - /*********************************************************************** - - Write name & value to the provided stream - - ***********************************************************************/ - - final MapOutput append (T[] name, T[] value) - { - output (name) (equals) (value) (NL); - return this; - } - - /*********************************************************************** - - Write AA properties to the provided stream - - ***********************************************************************/ - - final MapOutput append (T[][T[]] properties) - { - foreach (key, value; properties) - append (key, value); - return this; - } -} - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Stdout; - import tango.io.GrowBuffer; - - unittest - { - auto buf = new GrowBuffer; - auto input = new MapInput!(char)(buf); - auto output = new MapOutput!(char)(buf); - - char[][char[]] map; - map["foo"] = "bar"; - map["foo2"] = "bar2"; - output.append (map); - - map = map.init; - input.load (map); - assert (map["foo"] == "bar"); - assert (map["foo2"] == "bar2"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/SnoopStream.d --- a/tango/tango/io/stream/SnoopStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,240 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.SnoopStream; - -private import tango.io.Console, - tango.io.Conduit; - -private import tango.text.convert.Format; - -private alias void delegate(char[]) Snoop; - -/******************************************************************************* - - Stream to expose call behaviour. By default, activity trace is - sent to Cerr - -*******************************************************************************/ - -class SnoopInput : InputStream -{ - private InputStream host; - private Snoop snoop; - - /*********************************************************************** - - Attach to the provided stream - - ***********************************************************************/ - - this (InputStream host, Snoop snoop = null) - { - assert (host); - this.host = host; - this.snoop = snoop ? snoop : &snooper; - } - - /*********************************************************************** - - Return the hosting conduit - - ***********************************************************************/ - - final IConduit conduit () - { - return host.conduit; - } - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst - - ***********************************************************************/ - - final uint read (void[] dst) - { - auto x = host.read (dst); - trace ("{}: read {} bytes", host.conduit, x is -1 ? 0 : x); - return x; - } - - /*********************************************************************** - - Clear any buffered content - - ***********************************************************************/ - - final InputStream clear () - { - host.clear; - trace ("{}: cleared", host.conduit); - return this; - } - - /*********************************************************************** - - Close the input - - ***********************************************************************/ - - final void close () - { - host.close; - trace ("{}: closed", host.conduit); - } - - /*********************************************************************** - - Internal trace handler - - ***********************************************************************/ - - private void snooper (char[] x) - { - Cerr(x).newline; - } - - /*********************************************************************** - - Internal trace handler - - ***********************************************************************/ - - private void trace (char[] format, ...) - { - char[256] tmp = void; - snoop (Format.vprint (tmp, format, _arguments, _argptr)); - } -} - - -/******************************************************************************* - - Stream to expose call behaviour. By default, activity trace is - sent to Cerr - -*******************************************************************************/ - -class SnoopOutput : OutputStream -{ - private OutputStream host; - private Snoop snoop; - - /*********************************************************************** - - Attach to the provided stream - - ***********************************************************************/ - - this (OutputStream host, Snoop snoop = null) - { - assert (host); - this.host = host; - this.snoop = snoop ? snoop : &snooper; - } - - /*********************************************************************** - - Write to conduit from a source array. The provided src - content will be written to the conduit. - - Returns the number of bytes written from src, which may - be less than the quantity provided - - ***********************************************************************/ - - final uint write (void[] src) - { - auto x = host.write (src); - trace ("{}: wrote {} bytes", host.conduit, x is -1 ? 0 : x); - return x; - } - - /*********************************************************************** - - Return the hosting conduit - - ***********************************************************************/ - - final IConduit conduit () - { - return host.conduit; - } - - /*********************************************************************** - - Emit/purge buffered content - - ***********************************************************************/ - - final OutputStream flush () - { - host.flush; - trace ("{}: flushed", host.conduit); - return this; - } - - /*********************************************************************** - - Close the output - - ***********************************************************************/ - - final void close () - { - host.close; - trace ("{}: closed", host.conduit); - } - - /*********************************************************************** - - Transfer the content of another conduit to this one. Returns - a reference to this class, or throws IOException on failure. - - ***********************************************************************/ - - final OutputStream copy (InputStream src) - { - host.copy (src); - trace("{}: copied from {}", host.conduit, src.conduit); - return this; - } - - /*********************************************************************** - - Internal trace handler - - ***********************************************************************/ - - private void snooper (char[] x) - { - Cerr(x).newline; - } - - /*********************************************************************** - - Internal trace handler - - ***********************************************************************/ - - private void trace (char[] format, ...) - { - char[256] tmp = void; - snoop (Format.vprint (tmp, format, _arguments, _argptr)); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/TextFileStream.d --- a/tango/tango/io/stream/TextFileStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,69 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2007 - - author: Kris - -*******************************************************************************/ - -module tango.io.stream.TextFileStream; - -public import tango.io.FileConduit; - -private import tango.io.stream.FileStream, - tango.io.stream.LineStream, - tango.io.stream.FormatStream; - -/******************************************************************************* - - Composes a file with line-oriented input - -*******************************************************************************/ - -class TextFileInput : LineInput -{ - /*********************************************************************** - - compose a FileStream - - ***********************************************************************/ - - this (char[] path, FileConduit.Style style = FileConduit.ReadExisting) - { - super (new FileInput (path, style)); - } -} - - -/******************************************************************************* - - Composes a file with formatted text output - -*******************************************************************************/ - -class TextFileOutput : FormatOutput -{ - /*********************************************************************** - - compose a FileStream - - ***********************************************************************/ - - this (char[] path, FileConduit.Style style = FileConduit.WriteCreate) - { - super (new FileOutput (path, style)); - } - } - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/TypedStream.d --- a/tango/tango/io/stream/TypedStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2007 - - author: Kris - - Streams to expose simple native types as discrete elements. I/O - is buffered and should yield fair performance. - -*******************************************************************************/ - -module tango.io.stream.TypedStream; - -private import tango.io.Buffer, - tango.io.Conduit; - -/******************************************************************************* - - Type T is the target or destination type - -*******************************************************************************/ - -class TypedInput(T) : InputFilter, Buffered -{ - private IBuffer input; - - /*********************************************************************** - - ***********************************************************************/ - - this (InputStream stream) - { - super (input = Buffer.share (stream)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return input; - } - - /*********************************************************************** - - Override this to give back a useful chaining reference - - ***********************************************************************/ - - final override TypedInput clear () - { - host.clear; - return this; - } - - /*********************************************************************** - - Read a value from the stream. Returns false when all - content has been consumed - - ***********************************************************************/ - - final bool read (inout T x) - { - return input.read((&x)[0..1]) is T.sizeof; - } - - /*********************************************************************** - - Iterate over all content - - ***********************************************************************/ - - final int opApply (int delegate(ref T x) dg) - { - T x; - int ret; - - while ((input.read((&x)[0..1]) is T.sizeof)) - if ((ret = dg (x)) != 0) - break; - return ret; - } -} - - - -/******************************************************************************* - - Type T is the target or destination type. - -*******************************************************************************/ - -class TypedOutput (T) : OutputFilter, Buffered -{ - private IBuffer output; - - /*********************************************************************** - - ***********************************************************************/ - - this (OutputStream stream) - { - super (output = Buffer.share (stream)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - final IBuffer buffer () - { - return output; - } - - /*********************************************************************** - - Append a value to the output stream - - ***********************************************************************/ - - final void write (T x) - { - output.append (&x, T.sizeof); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - import tango.io.Stdout; - import tango.io.stream.UtfStream; - - unittest - { - auto inp = new TypedInput!(char)(new Buffer("hello world")); - auto oot = new TypedOutput!(char)(new Buffer(20)); - - foreach (x; inp) - oot.write (x); - assert (oot.buffer.slice == "hello world"); - - auto xx = new TypedInput!(char)(new UtfInput!(char, dchar)(new Buffer("hello world"d))); - char[] yy; - foreach (x; xx) - yy ~= x; - assert (yy == "hello world"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/stream/UtfStream.d --- a/tango/tango/io/stream/UtfStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2007 - - author: Kris - - UTF conversion streams, supporting cross-translation of char, wchar - and dchar variants. For supporting endian variations, configure the - appropriate EndianStream upstream of this one (closer to the source) - -*******************************************************************************/ - -module tango.io.stream.UtfStream; - -private import tango.io.Buffer, - tango.io.Conduit; - -private import Utf = tango.text.convert.Utf; - -/******************************************************************************* - - Streaming UTF converter. Type T is the target or destination type, - while S is the source type. Both types are either char/wchar/dchar. - -*******************************************************************************/ - -class UtfInput(T, S) : InputFilter -{ - static if (!is (S == char) && !is (S == wchar) && !is (S == dchar)) - pragma (msg, "Source type must be char, wchar, or dchar"); - - static if (!is (T == char) && !is (T == wchar) && !is (T == dchar)) - pragma (msg, "Target type must be char, wchar, or dchar"); - - private IBuffer buffer; - - /*********************************************************************** - - ***********************************************************************/ - - this (InputStream stream) - { - super (buffer = Buffer.share (stream)); - } - - /*********************************************************************** - - ***********************************************************************/ - - final override uint read (void[] dst) - { - static if (is (S == T)) - return super.read (dst); - else - { - // must have some space available for converting - if (dst.length < T.sizeof) - conduit.error ("UtfStream.read :: target array is too small"); - - uint produced, - consumed; - auto output = Buffer.convert!(T)(dst); - auto input = Buffer.convert!(S)(buffer.slice); - - static if (is (T == char)) - produced = Utf.toString(input, output, &consumed).length; - - static if (is (T == wchar)) - produced = Utf.toString16(input, output, &consumed).length; - - static if (is (T == dchar)) - produced = Utf.toString32(input, output, &consumed).length; - - // consume buffer content - buffer.skip (consumed * S.sizeof); - - // fill buffer when nothing produced ... - if (produced is 0) - if (buffer.compress.fill(buffer.input) is Eof) - return Eof; - - return produced * T.sizeof; - } - } -} - - -/******************************************************************************* - - Streaming UTF converter. Type T is the target or destination type, - while S is the source type. Both types are either char/wchar/dchar. - - Note that the arguments are reversed from those of UtfInput - -*******************************************************************************/ - -class UtfOutput (S, T) : OutputFilter -{ - static if (!is (S == char) && !is (S == wchar) && !is (S == dchar)) - pragma (msg, "Source type must be char, wchar, or dchar"); - - static if (!is (T == char) && !is (T == wchar) && !is (T == dchar)) - pragma (msg, "Target type must be char, wchar, or dchar"); - - - private IBuffer buffer; - - /*********************************************************************** - - ***********************************************************************/ - - this (OutputStream stream) - { - super (buffer = Buffer.share (stream)); - assert (buffer.capacity > 3, "UtfOutput :: output buffer is too small"); - } - - /*********************************************************************** - - Write to the output stream from a source array. The provided - src content is converted as necessary. Note that an attached - output buffer must be at least four bytes wide to accommodate - a conversion. - - Returns the number of bytes consumed from src, which may be - less than the quantity provided - - ***********************************************************************/ - - final override uint write (void[] src) - { - static if (is (S == T)) - return super.write (src); - else - { - uint consumed, - produced; - - uint writer (void[] dst) - { - auto input = Buffer.convert!(S)(src); - auto output = Buffer.convert!(T)(dst); - - static if (is (T == char)) - produced = Utf.toString(input, output, &consumed).length; - - static if (is (T == wchar)) - produced = Utf.toString16(input, output, &consumed).length; - - static if (is (T == dchar)) - produced = Utf.toString32(input, output, &consumed).length; - - return produced * T.sizeof; - } - - // write directly into the buffered content. A tad - // tricky to flush the output in an optimal manner. - // We could do this trivially via an internal work - // space conversion, but that would incur an extra - // memory copy - if (buffer.write(&writer) is 0) - // empty a connected buffer - if (buffer.output) - buffer.drain (buffer.output); - else - // buffer must be at least 4 bytes wide - // to contain a generic conversion - if (buffer.writable < 4) - return Eof; - - return consumed * S.sizeof; - } - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UtfStream) -{ - void main() - { - auto inp = new UtfInput!(dchar, char)(new Buffer("hello world")); - auto oot = new UtfOutput!(dchar, char)(new Buffer(20)); - oot.copy(inp); - assert (oot.buffer.slice == "hello world"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/vfs/FileFolder.d --- a/tango/tango/io/vfs/FileFolder.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,808 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2007: Initial version - - author: Kris - -*******************************************************************************/ - -module tango.io.vfs.FileFolder; - -private import tango.io.FilePath, - tango.io.FileConduit; - -private import tango.util.PathUtil; - -private import tango.core.Exception; - -private import tango.io.vfs.model.Vfs; - -private import tango.io.model.IConduit; - -/******************************************************************************* - - Represents a physical folder in a file system. Use one of these - to address specific paths (sub-trees) within the file system. - -*******************************************************************************/ - -class FileFolder : VfsFolder -{ - private FilePath path; - private VfsStats stats; - - /*********************************************************************** - - Create a file folder with the given name and path. The - name itself should not include '.' or '/' characters, - though the path can point at whatever it pleases. - - Option 'create' will create the folder when set true, - and open an existing folder otherwise - - ***********************************************************************/ - - this (char[] path, bool create=false) - { - this.path = open (FilePath(path), create); - } - - /*********************************************************************** - - create a FileFolder as a Group member - - ***********************************************************************/ - - private this (FilePath path) - { - this.path = path; - } - - /*********************************************************************** - - explicitly create() or open() a named folder - - ***********************************************************************/ - - private this (FileFolder parent, char[] name, bool create=false) - { - assert (parent); - this.path = open (parent.path.dup.append(name), create); - } - - /*********************************************************************** - - Return a short name - - ***********************************************************************/ - - final char[] name () - { - return path.name; - } - - /*********************************************************************** - - Return a long name - - ***********************************************************************/ - - final char[] toString () - { - return path.toString; - } - - /*********************************************************************** - - A folder is being added or removed from the hierarchy. Use - this to test for validity (or whatever) and throw exceptions - as necessary - - Here we test for folder overlap, and bail-out when found. - - ***********************************************************************/ - - final void verify (VfsFolder folder, bool mounting) - { - if (mounting && cast(FileFolder) folder) - { - auto src = FilePath.padded(this.toString); - auto dst = FilePath.padded(folder.toString); - - auto len = src.length; - if (len > dst.length) - len = dst.length; - - if (src[0..len] == dst[0..len]) - error ("folders '"~dst~"' and '"~src~"' overlap"); - } - } - - /*********************************************************************** - - Return a contained file representation - - ***********************************************************************/ - - final VfsFile file (char[] name) - { - return (new FileHost).set (path.toString, name); - } - - /*********************************************************************** - - Return a contained folder representation - - ***********************************************************************/ - - final VfsFolderEntry folder (char[] path) - { - return new FolderHost (this, path); - } - - /*********************************************************************** - - Remove the folder subtree - - ***********************************************************************/ - - final VfsFolder clear () - { - path.remove; - return this; - } - - /*********************************************************************** - - Is folder writable? - - ***********************************************************************/ - - final bool writable () - { - return path.isWritable; - } - - /*********************************************************************** - - Returns content information about this folder - - ***********************************************************************/ - - final VfsFolders self () - { - return new FolderGroup (this, false); - } - - /*********************************************************************** - - Returns a subtree of folders matching the given name - - ***********************************************************************/ - - final VfsFolders tree () - { - return new FolderGroup (this, true); - } - - /*********************************************************************** - - Iterate over the set of immediate child folders. This is - useful for reflecting the hierarchy - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFolder) dg) - { - int result; - - foreach (folder; folders(true)) - { - VfsFolder x = folder; - if ((result = dg(x)) != 0) - break; - } - return result; - } - - /*********************************************************************** - - Close and/or synchronize changes made to this folder. Each - driver should take advantage of this as appropriate, perhaps - combining multiple files together, or possibly copying to a - remote location - - ***********************************************************************/ - - VfsFolder close (bool commit = true) - { - return this; - } - - /*********************************************************************** - - Sweep owned folders - - ***********************************************************************/ - - private final FileFolder[] folders (bool collect) - { - FileFolder[] folders; - - stats = stats.init; - foreach (info; path) - if (info.folder) - { - if (collect) - folders ~= new FileFolder (FilePath.from (info)); - ++stats.folders; - } - else - { - stats.bytes += info.bytes; - ++stats.files; - } - - return folders; - } - - - /*********************************************************************** - - Sweep owned files - - ***********************************************************************/ - - private final FilePath[] files (ref VfsStats stats, VfsFilter filter = null) - { - FilePath[] files; - - foreach (info; path) - if (info.folder is false) - if (filter is null || filter(cast(VfsInfo) &info)) - { - files ~= FilePath.from (info); - stats.bytes += info.bytes; - ++stats.files; - } - - return files; - } - - /*********************************************************************** - - Throw an exception - - ***********************************************************************/ - - private final char[] error (char[] msg) - { - throw new VfsException (msg); - } - - /*********************************************************************** - - Create or open the given path, and detect path errors - - ***********************************************************************/ - - private final FilePath open (FilePath path, bool create) - { - if (path.exists) - { - if (path.isFolder is false) - error ("FileFolder.open :: path exists but not as a folder: "~path.toString); - } - else - if (create) - path.create; - else - error ("FileFolder.open :: path does not exist: "~path.toString); - return path; - } -} - - -/******************************************************************************* - - Represents a group of files (need this declared here to avoid - a bunch of bizarre compiler warnings) - -*******************************************************************************/ - -class FileGroup : VfsFiles -{ - private FilePath[] group; - private VfsStats stats; - - /*********************************************************************** - - ***********************************************************************/ - - this (FolderGroup host, VfsFilter filter) - { - foreach (folder; host.members) - group ~= folder.files (stats, filter); - } - - /*********************************************************************** - - Iterate over the set of contained VfsFile instances - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFile) dg) - { - int result; - auto host = new FileHost; - - foreach (file; group) - { - host.path = file; - VfsFile x = host; - if ((result = dg(x)) != 0) - break; - } - return result; - } - - /*********************************************************************** - - Return the total number of entries - - ***********************************************************************/ - - final uint files () - { - return group.length; - } - - /*********************************************************************** - - Return the total size of all files - - ***********************************************************************/ - - final ulong bytes () - { - return stats.bytes; - } -} - - -/******************************************************************************* - - A set of folders representing a selection. This is where file - selection is made, and pattern-matched folder subsets can be - extracted. You need one of these to expose statistics (such as - file or folder count) of a selected folder group - -*******************************************************************************/ - -private class FolderGroup : VfsFolders -{ - private FileFolder[] members; // folders in group - - /*********************************************************************** - - Create a subset group - - ***********************************************************************/ - - private this () {} - - /*********************************************************************** - - Create a folder group including the provided folder and - (optionally) all child folders - - ***********************************************************************/ - - private this (FileFolder root, bool recurse) - { - members = root ~ scan (root, recurse); - } - - /*********************************************************************** - - Iterate over the set of contained VfsFolder instances - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFolder) dg) - { - int result; - - foreach (folder; members) - { - VfsFolder x = folder; - if ((result = dg(x)) != 0) - break; - } - return result; - } - - /*********************************************************************** - - Return the number of files in this group - - ***********************************************************************/ - - final uint files () - { - uint files; - foreach (folder; members) - files += folder.stats.files; - return files; - } - - /*********************************************************************** - - Return the total size of all files in this group - - ***********************************************************************/ - - final ulong bytes () - { - ulong bytes; - - foreach (folder; members) - bytes += folder.stats.bytes; - return bytes; - } - - /*********************************************************************** - - Return the number of folders in this group - - ***********************************************************************/ - - final uint folders () - { - return members.length; - } - - /*********************************************************************** - - Return the total number of entries in this group - - ***********************************************************************/ - - final uint entries () - { - return files + folders; - } - - /*********************************************************************** - - Return a subset of folders matching the given pattern - - ***********************************************************************/ - - final VfsFolders subset (char[] pattern) - { - auto set = new FolderGroup; - - foreach (folder; members) - if (patternMatch (folder.path.name, pattern)) - set.members ~= folder; - return set; - } - - /*********************************************************************** - - Return a set of files matching the given pattern - - ***********************************************************************/ - - final FileGroup catalog (char[] pattern) - { - bool foo (VfsInfo info) - { - return patternMatch (info.name, pattern); - } - - return catalog (&foo); - } - - /*********************************************************************** - - Returns a set of files conforming to the given filter - - ***********************************************************************/ - - final FileGroup catalog (VfsFilter filter = null) - { - return new FileGroup (this, filter); - } - - /*********************************************************************** - - Internal routine to traverse the folder tree - - ***********************************************************************/ - - private final FileFolder[] scan (FileFolder root, bool recurse) - { - auto folders = root.folders (recurse); - if (recurse) - foreach (child; folders) - folders ~= scan (child, recurse); - return folders; - } -} - - -/******************************************************************************* - - A host for folders, currently used to harbor create() and open() - methods only - -*******************************************************************************/ - -private class FolderHost : VfsFolderEntry -{ - private char[] path; - private FileFolder parent; - - /*********************************************************************** - - ***********************************************************************/ - - private this (FileFolder parent, char[] path) - { - this.path = path; - this.parent = parent; - } - - /*********************************************************************** - - ***********************************************************************/ - - final VfsFolder create () - { - return new FileFolder (parent, path, true); - } - - /*********************************************************************** - - ***********************************************************************/ - - final VfsFolder open () - { - return new FileFolder (parent, path, false); - } - - /*********************************************************************** - - Test to see if a folder exists - - ***********************************************************************/ - - bool exists () - { - try { - open(); - return true; - } catch (IOException x) {} - return false; - } -} - - -/******************************************************************************* - - Represents things you can do with a file - -*******************************************************************************/ - -private class FileHost : VfsFile -{ - private FilePath path; - - /*********************************************************************** - - ***********************************************************************/ - - private this (char[] path = null) - { - this.path = FilePath (path); - } - - /*********************************************************************** - - Return a short name - - ***********************************************************************/ - - final char[] name() - { - return path.file; - } - - /*********************************************************************** - - Return a long name - - ***********************************************************************/ - - final char[] toString () - { - return path.toString; - } - - /*********************************************************************** - - Does this file exist? - - ***********************************************************************/ - - final bool exists() - { - return path.exists; - } - - /*********************************************************************** - - Return the file size - - ***********************************************************************/ - - final ulong size() - { - return path.fileSize; - } - - /*********************************************************************** - - Create a new file instance - - ***********************************************************************/ - - final VfsFile create () - { - path.createFile (); - return this; - } - - /*********************************************************************** - - Create a new file instance and populate with stream - - ***********************************************************************/ - - final VfsFile create (InputStream input) - { - create.output.copy(input).close; - return this; - } - - /*********************************************************************** - - Create and copy the given source - - ***********************************************************************/ - - VfsFile copy (VfsFile source) - { - auto input = source.input; - scope (exit) input.close; - return create (input); - } - - /*********************************************************************** - - Create and copy the given source, and remove the source - - ***********************************************************************/ - - final VfsFile move (VfsFile source) - { - copy (source); - source.remove; - return this; - } - - /*********************************************************************** - - Return the input stream. Don't forget to close it - - ***********************************************************************/ - - final InputStream input () - { - return new FileConduit (path.dup); - } - - /*********************************************************************** - - Return the output stream. Don't forget to close it - - ***********************************************************************/ - - final OutputStream output () - { - return new FileConduit (path.dup, FileConduit.WriteExisting); - } - - /*********************************************************************** - - Remove this file - - ***********************************************************************/ - - final VfsFile remove () - { - path.remove; - return this; - } - - /*********************************************************************** - - Duplicate this entry - - ***********************************************************************/ - - final VfsFile dup() - { - return new FileHost (path.toString); - } - - /*********************************************************************** - - ***********************************************************************/ - - private VfsFile set (char[] folder, char[] name) - { - path.set(folder).append(name); - return this; - } -} - - -debug (FileFolder) -{ - -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Stdout; -import tango.io.Buffer; - -void main() -{ - auto root = new FileFolder ("d:/d/import/temp", true); - root.folder("test").create; - root.file("test.txt").create(new Buffer("hello")); - Stdout.formatln ("test.txt.length = {}", root.file("test.txt").size); - - root = new FileFolder ("c:/"); - - auto set = root.self; - - Stdout.formatln ("self.files = {}", set.files); - Stdout.formatln ("self.bytes = {}", set.bytes); - Stdout.formatln ("self.folders = {}", set.folders); - Stdout.formatln ("self.entries = {}", set.entries); - - set = root.tree; - Stdout.formatln ("tree.files = {}", set.files); - Stdout.formatln ("tree.bytes = {}", set.bytes); - Stdout.formatln ("tree.folders = {}", set.folders); - Stdout.formatln ("tree.entries = {}", set.entries); - - //foreach (folder; set) - // Stdout.formatln ("tree.folder '{}' has {} files", folder.name, folder.self.files); - - auto cat = set.catalog ("s*"); - Stdout.formatln ("cat.files = {}", cat.files); - Stdout.formatln ("cat.bytes = {}", cat.bytes); - //foreach (file; cat) - // Stdout.formatln ("cat.name '{}' '{}'", file.name, file.toString); -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/vfs/LinkedFolder.d --- a/tango/tango/io/vfs/LinkedFolder.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2007: Initial version - - author: Kris - -*******************************************************************************/ - -module tango.io.vfs.LinkedFolder; - -private import tango.io.vfs.model.Vfs; - -private import tango.core.Exception; - -private import tango.io.vfs.VirtualFolder; - -/******************************************************************************* - - LinkedFolder is derived from VirtualFolder, and behaves exactly the - same in all but one aspect: it treats mounted folders as an ordered - list of alternatives to look for a file. This supports the notion of - file 'overrides', whereby "customized" files can be inserted into a - chain of alternatives. - - (overridden folders are not currently supported) - -*******************************************************************************/ - - -class LinkedFolder : VirtualFolder -{ - private Link* head; - - /*********************************************************************** - - Linked-list of folders - - ***********************************************************************/ - - private struct Link - { - Link* next; - VfsFolder folder; - - static Link* opCall(VfsFolder folder) - { - auto p = new Link; - p.folder = folder; - return p; - } - } - - /*********************************************************************** - - All folder must have a name. No '.' or '/' chars are - permitted - - ***********************************************************************/ - - this (char[] name) - { - super (name); - } - - /*********************************************************************** - - Add a child folder. The child cannot 'overlap' with others - in the tree of the same type. Circular references across a - tree of virtual folders are detected and trapped. - - We add the new child at the end of an ordered list, which - we subsequently traverse when looking up a file - - The second argument represents an optional name that the - mount should be known as, instead of the name exposed by - the provided folder (it is not an alias). - - ***********************************************************************/ - - final VfsHost mount (VfsFolder folder, char[] name=null) - { - // traverse to the end of the list - auto link = &head; - while (*link) - link = &(*link).next; - - // hook up the new folder - *link = Link (folder); - - // and let superclass deal with it - return super.mount (folder, name); - } - - /*********************************************************************** - - TODO: unhook a child folder. - - ***********************************************************************/ - - final VfsHost dismount (VfsFolder folder) - { - assert (0, "LinkedFolder.dismount not implemented"); - } - - /*********************************************************************** - - Return a file representation of the given path. If the - path-head does not refer to an immediate child folder, - and does not match a symbolic link, it is considered to - be unknown. - - We scan the set of mounted folders, in the order mounted, - looking for a match. Where one is found, we test to see - that it really exists before returning the reference - - ***********************************************************************/ - - final override VfsFile file (char[] path) - { - auto link = head; - while (link) - { - //Stdout.formatln ("looking in {}", link.folder.toString); - try { - auto file = link.folder.file (path); - if (file.exists) - return file; - } catch (VfsException x) {} - link = link.next; - } - super.error ("file '"~path~"' not found"); - return null; - } -} - - -debug (LinkedFolder) -{ -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Stdout; -import tango.io.Buffer; -import tango.io.vfs.FileFolder; - -void main() -{ - auto root = new LinkedFolder ("root"); - auto sub = new VirtualFolder ("sub"); - sub.mount (new FileFolder (r"d:/d/import/temp")); - sub.map (sub.file(r"temp/subtree/test.txt"), "wumpus"); - - root.mount (new FileFolder (r"d:/d/import/tango")) - .mount (new FileFolder (r"c:/"), "windows"); - root.mount (sub); - - auto file = root.file (r"wumpus"); - Stdout.formatln ("file = {}", file); -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/vfs/VirtualFolder.d --- a/tango/tango/io/vfs/VirtualFolder.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,633 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2007: Initial version - - author: Kris - -*******************************************************************************/ - -module tango.io.vfs.VirtualFolder; - -private import tango.io.FileConst; - -private import tango.util.PathUtil; - -private import tango.core.Exception; - -private import tango.io.vfs.model.Vfs; - -private import tango.text.Util : head, locatePrior; - -/******************************************************************************* - - Virtual folders play host to other folder types, including both - concrete folder instances and subordinate virtual folders. You - can build a (singly rooted) tree from a set of virtual and non- - virtual folders, and treat them as though they were a combined - or single entity. For example, listing the contents of such a - tree is no different than listing the contents of a non-virtual - tree - there's just potentially more nodes to traverse. - -*******************************************************************************/ - -class VirtualFolder : VfsHost -{ - private char[] name_; - private VfsFile[char[]] files; - private VfsFolder[char[]] mounts; - private VfsFolderEntry[char[]] folders; - private VirtualFolder parent; - - /*********************************************************************** - - All folder must have a name. No '.' or '/' chars are - permitted - - ***********************************************************************/ - - this (char[] name) - { - validate (this.name_ = name); - } - - /*********************************************************************** - - Return the (short) name of this folder - - ***********************************************************************/ - - final char[] name() - { - return name_; - } - - /*********************************************************************** - - Return the (long) name of this folder. Virtual folders - do not have long names, since they don't relate directly - to a concrete folder instance - - ***********************************************************************/ - - final char[] toString() - { - return name; - } - - /*********************************************************************** - - Add a child folder. The child cannot 'overlap' with others - in the tree of the same type. Circular references across a - tree of virtual folders are detected and trapped. - - The second argument represents an optional name that the - mount should be known as, instead of the name exposed by - the provided folder (it is not an alias). - - ***********************************************************************/ - - VfsHost mount (VfsFolder folder, char[] name = null) - { - assert (folder); - if (name.length is 0) - name = folder.name; - - // link virtual children to us - auto child = cast(VirtualFolder) folder; - if (child) - if (child.parent) - error ("folder '"~name~"' belongs to another host"); - else - child.parent = this; - - // reach up to the root, and initiate tree sweep - auto root = this; - while (root.parent) - if (root is this) - error ("circular reference detected at '"~this.name~"' while mounting '"~name~"'"); - else - root = root.parent; - root.verify (folder, true); - - // all clear, so add the new folder - mounts [name] = folder; - return this; - } - - /*********************************************************************** - - Add a set of child folders. The children cannot 'overlap' - with others in the tree of the same type. Circular references - are detected and trapped. - - ***********************************************************************/ - - VfsHost mount (VfsFolders group) - { - foreach (folder; group) - mount (folder); - return this; - } - - /*********************************************************************** - - Unhook a child folder - - ***********************************************************************/ - - VfsHost dismount (VfsFolder folder) - { - char[] name = null; - - // check this is a child, and locate the mapped name - foreach (key, value; mounts) - if (folder is value) - name = key; - assert (name.ptr); - - // reach up to the root, and initiate tree sweep - auto root = this; - while (root.parent) - root = root.parent; - root.verify (folder, false); - - // all clear, so remove it - mounts.remove (name); - return this; - } - - /*********************************************************************** - - Add a symbolic link to another file. These are referenced - by file() alone, and do not show up in tree traversals - - ***********************************************************************/ - - final VfsHost map (VfsFile file, char[] name) - { - assert (name); - files[name] = file; - return this; - } - - /*********************************************************************** - - Add a symbolic link to another folder. These are referenced - by folder() alone, and do not show up in tree traversals - - ***********************************************************************/ - - final VfsHost map (VfsFolderEntry folder, char[] name) - { - assert (name); - folders[name] = folder; - return this; - } - - /*********************************************************************** - - Iterate over the set of immediate child folders. This is - useful for reflecting the hierarchy - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFolder) dg) - { - int result; - - foreach (folder; mounts) - { - VfsFolder x = folder; - if ((result = dg(x)) != 0) - break; - } - return result; - } - - /*********************************************************************** - - Return a folder representation of the given path. If the - path-head does not refer to an immediate child, and does - not match a symbolic link, it is considered unknown. - - ***********************************************************************/ - - final VfsFolderEntry folder (char[] path) - { - char[] tail; - auto text = head (path, FileConst.PathSeparatorString, tail); - - auto child = text in mounts; - if (child) - return child.folder (tail); - - auto sym = text in folders; - if (sym is null) - error ("'"~text~"' is not a recognized member of '"~name~"'"); - return *sym; - } - - /*********************************************************************** - - Return a file representation of the given path. If the - path-head does not refer to an immediate child folder, - and does not match a symbolic link, it is considered unknown. - - ***********************************************************************/ - - VfsFile file (char[] path) - { - auto tail = locatePrior (path, FileConst.PathSeparatorChar); - if (tail < path.length) - return folder(path[0..tail]).open.file(path[tail..$]); - - auto sym = path in files; - if (sym is null) - error ("'"~path~"' is not a recognized member of '"~name~"'"); - return *sym; - } - - /*********************************************************************** - - Clear the entire subtree. Use with caution - - ***********************************************************************/ - - final VfsFolder clear () - { - foreach (name, child; mounts) - child.clear; - return this; - } - - /*********************************************************************** - - Returns true if all of the children are writable - - ***********************************************************************/ - - final bool writable () - { - foreach (name, child; mounts) - if (! child.writable) - return false; - return true; - } - - /*********************************************************************** - - Returns a folder set containing only this one. Statistics - are inclusive of entries within this folder only, which - should be zero since symbolic links are not included - - ***********************************************************************/ - - final VfsFolders self () - { - return new VirtualFolders (this, false); - } - - /*********************************************************************** - - Returns a subtree of folders. Statistics are inclusive of - all files and folders throughout the sub-tree - - ***********************************************************************/ - - final VfsFolders tree () - { - return new VirtualFolders (this, true); - } - - /*********************************************************************** - - Sweep the subtree of mountpoints, testing a new folder - against all others. This propogates a folder test down - throughout the tree, where each folder implementation - should take appropriate action - - ***********************************************************************/ - - final void verify (VfsFolder folder, bool mounting) - { - foreach (name, child; mounts) - child.verify (folder, mounting); - } - - /*********************************************************************** - - Close and/or synchronize changes made to this folder. Each - driver should take advantage of this as appropriate, perhaps - combining multiple files together, or possibly copying to a - remote location - - ***********************************************************************/ - - VfsFolder close (bool commit = true) - { - foreach (name, child; mounts) - child.close (commit); - return this; - } - - /*********************************************************************** - - Throw an exception - - ***********************************************************************/ - - package final char[] error (char[] msg) - { - throw new VfsException (msg); - } - - /*********************************************************************** - - Validate path names - - ***********************************************************************/ - - private final void validate (char[] name) - { - assert (name); - if (locatePrior(name, '.') != name.length || - locatePrior(name, FileConst.PathSeparatorChar) != name.length) - error ("'"~name~"' contains invalid characters"); - } -} - - -/******************************************************************************* - - A set of virtual folders. For a sub-tree, we compose the results - of all our subordinates and delegate subsequent request to that - group. - -*******************************************************************************/ - -private class VirtualFolders : VfsFolders -{ - private VfsFolders[] members; // folders in group - - /*********************************************************************** - - Create a subset group - - ***********************************************************************/ - - private this () {} - - /*********************************************************************** - - Create a folder group including the provided folder and - (optionally) all child folders - - ***********************************************************************/ - - private this (VirtualFolder root, bool recurse) - { - if (recurse) - foreach (name, folder; root.mounts) - members ~= folder.tree; - } - - /*********************************************************************** - - Iterate over the set of contained VfsFolder instances - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFolder) dg) - { - int ret; - - foreach (group; members) - foreach (folder; group) - { - auto x = cast(VfsFolder) folder; - if ((ret = dg(x)) != 0) - break; - } - return ret; - } - - /*********************************************************************** - - Return the number of files in this group - - ***********************************************************************/ - - final uint files () - { - uint files; - foreach (group; members) - files += group.files; - return files; - } - - /*********************************************************************** - - Return the total size of all files in this group - - ***********************************************************************/ - - final ulong bytes () - { - ulong bytes; - foreach (group; members) - bytes += group.bytes; - return bytes; - } - - /*********************************************************************** - - Return the number of folders in this group - - ***********************************************************************/ - - final uint folders () - { - uint count; - foreach (group; members) - count += group.folders; - return count; - } - - /*********************************************************************** - - Return the total number of entries in this group - - ***********************************************************************/ - - final uint entries () - { - uint count; - foreach (group; members) - count += group.entries; - return count; - } - - /*********************************************************************** - - Return a subset of folders matching the given pattern - - ***********************************************************************/ - - final VfsFolders subset (char[] pattern) - { - auto set = new VirtualFolders; - - foreach (group; members) - set.members ~= group.subset (pattern); - return set; - } - - /*********************************************************************** - - Return a set of files matching the given pattern - - ***********************************************************************/ - - final VfsFiles catalog (char[] pattern) - { - return catalog ((VfsInfo info){return patternMatch (info.name, pattern);}); - } - - /*********************************************************************** - - Returns a set of files conforming to the given filter - - ***********************************************************************/ - - final VfsFiles catalog (VfsFilter filter = null) - { - return new VirtualFiles (this, filter); - } -} - - -/******************************************************************************* - - A set of virtual files, represented by composing the results of - the given set of folders. Subsequent calls are delegated to the - results from those folders - -*******************************************************************************/ - -private class VirtualFiles : VfsFiles -{ - private VfsFiles[] members; - - /*********************************************************************** - - ***********************************************************************/ - - private this (VirtualFolders host, VfsFilter filter) - { - foreach (group; host.members) - members ~= group.catalog (filter); - } - - /*********************************************************************** - - Iterate over the set of contained VfsFile instances - - ***********************************************************************/ - - final int opApply (int delegate(inout VfsFile) dg) - { - int ret; - - foreach (group; members) - foreach (file; group) - if ((ret = dg(file)) != 0) - break; - return ret; - } - - /*********************************************************************** - - Return the total number of entries - - ***********************************************************************/ - - final uint files () - { - uint count; - foreach (group; members) - count += group.files; - return count; - } - - /*********************************************************************** - - Return the total size of all files - - ***********************************************************************/ - - final ulong bytes () - { - ulong count; - foreach (group; members) - count += group.bytes; - return count; - } -} - - -debug (VirtualFolder) -{ -/******************************************************************************* - -*******************************************************************************/ - -import tango.io.Stdout; -import tango.io.Buffer; -import tango.io.vfs.FileFolder; - -void main() -{ - auto root = new VirtualFolder ("root"); - auto sub = new VirtualFolder ("sub"); - sub.mount (new FileFolder (r"d:/d/import/tango")); - - root.mount (sub) - .mount (new FileFolder (r"c:/"), "windows") - .mount (new FileFolder (r"d:/d/import/temp")); - - auto folder = root.folder (r"temp/bar"); - Stdout.formatln ("folder = {}", folder); - - root.map (root.folder(r"temp/subtree"), "fsym") - .map (root.file(r"temp/subtree/test.txt"), "wumpus"); - auto file = root.file (r"wumpus"); - Stdout.formatln ("file = {}", file); - Stdout.formatln ("fsym = {}", root.folder(r"fsym").open.file("test.txt")); - - foreach (folder; root.folder(r"temp/subtree").open) - Stdout.formatln ("folder.child '{}'", folder.name); - - auto set = root.self; - Stdout.formatln ("self.files = {}", set.files); - Stdout.formatln ("self.bytes = {}", set.bytes); - Stdout.formatln ("self.folders = {}", set.folders); - - set = root.folder("temp").open.tree; - Stdout.formatln ("tree.files = {}", set.files); - Stdout.formatln ("tree.bytes = {}", set.bytes); - Stdout.formatln ("tree.folders = {}", set.folders); - - foreach (folder; set) - Stdout.formatln ("tree.folder '{}' has {} files", folder.name, folder.self.files); - - auto cat = set.catalog ("*.txt"); - Stdout.formatln ("cat.files = {}", cat.files); - Stdout.formatln ("cat.bytes = {}", cat.bytes); - foreach (file; cat) - Stdout.formatln ("cat.name '{}' '{}'", file.name, file.toString); -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/vfs/ZipArchive.d --- a/tango/tango/io/vfs/ZipArchive.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2099 +0,0 @@ -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Initial release: December 2007 - - author: Daniel Keep - -*******************************************************************************/ - -module tango.io.vfs.ZipArchive; - -import tango.io.FileConduit : FileConduit; -import tango.io.FilePath : FilePath; -import tango.io.TempFile : TempFile; -import tango.io.archive.Zip : ZipReader, ZipBlockReader, - ZipWriter, ZipBlockWriter, ZipEntry, ZipEntryInfo, Method; -import tango.io.model.IConduit : IConduit, InputStream, OutputStream; -import tango.io.vfs.model.Vfs : VfsFolder, VfsFolderEntry, VfsFile, - VfsFolders, VfsFiles, VfsFilter, VfsStats, VfsFilterInfo, - VfsInfo, VfsSync; -import tango.util.PathUtil : patternMatch; - -debug( ZipArchive ) -{ - import tango.io.Stdout : Stderr; -} - -// This disables code that is causing heap corruption in Tango 0.99.3 -version = Bug_HeapCorruption; - -// ************************************************************************ // -// ************************************************************************ // - -private -{ - enum EntryType { Dir, File } - - /* - * Entries are what make up the internal tree that describes the - * filesystem of the archive. Each Entry is either a directory or a file. - */ - struct Entry - { - EntryType type; - - union - { - DirEntry dir; - FileEntry file; - } - - char[] fullname; - char[] name; - - /+ - invariant - { - assert( (type == EntryType.Dir) - || (type == EntryType.File) ); - - assert( fullname.nz() ); - assert( name.nz() ); - } - +/ - - VfsFilterInfo vfsFilterInfo; - - VfsInfo vfsInfo() - { - return &vfsFilterInfo; - } - - /* - * Updates the VfsInfo structure for this entry. - */ - void makeVfsInfo() - { - with( vfsFilterInfo ) - { - // Cheat horribly here - name = this.name; - path = this.fullname[0..($-name.length+"/".length)]; - - folder = isDir; - bytes = folder ? 0 : fileSize; - } - } - - bool isDir() - { - return (type == EntryType.Dir); - } - - bool isFile() - { - return (type == EntryType.File); - } - - ulong fileSize() - in - { - assert( type == EntryType.File ); - } - body - { - if( file.zipEntry !is null ) - return file.zipEntry.size; - - else if( file.tempFile !is null ) - return file.tempFile.length; - - else - return 0; - } - - /* - * Opens a File Entry for reading. - * - * BUG: Currently, if a user opens a new or unmodified file for input, - * and then opens it for output, the two streams will be working with - * different underlying conduits. This means that the result of - * openInput should probably be wrapped in some kind of switching - * stream that can update when the backing store for the file changes. - */ - InputStream openInput() - in - { - assert( type == EntryType.File ); - } - body - { - if( file.zipEntry !is null ) - { - file.zipEntry.verify; - return file.zipEntry.open; - } - else if( file.tempFile !is null ) - return new WrapSeekInputStream(file.tempFile.input, 0); - - else - return new DummyInputStream; - } - - /* - * Opens a file entry for output. - */ - OutputStream openOutput() - in - { - assert( type == EntryType.File ); - } - body - { - if( file.tempFile !is null ) - return new WrapSeekOutputStream(file.tempFile.output); - - else - { - // Ok; we need to make a temporary file to store output in. - // If we already have a zip entry, we need to dump that into - // the temp. file and remove the zipEntry. - if( file.zipEntry !is null ) - { - { - scope zi = file.zipEntry.open; - scope(exit) zi.close; - - file.tempFile = new TempFile; - file.tempFile.output.copy(zi).close; - - debug( ZipArchive ) - Stderr.formatln("Entry.openOutput: duplicated" - " temp file {} for {}", - file.tempFile, this.fullname); - } - - // TODO: Copy file info if available - - file.zipEntry = null; - } - else - { - // Otherwise, just make a new, blank temp file - file.tempFile = new TempFile; - - debug( ZipArchive ) - Stderr.formatln("Entry.openOutput: created" - " temp file {} for {}", - file.tempFile, this.fullname); - } - - assert( file.tempFile !is null ); - return openOutput; - } - } - - void dispose() - { - fullname = name = null; - - with( vfsFilterInfo ) - { - name = path = null; - } - - dispose_children; - } - - void dispose_children() - { - switch( type ) - { - case EntryType.Dir: - auto keys = dir.children.keys; - scope(exit) delete keys; - foreach( k ; keys ) - { - auto child = dir.children[k]; - child.dispose(); - dir.children.remove(k); - delete child; - } - dir.children = dir.children.init; - break; - - case EntryType.File: - if( file.zipEntry !is null ) - { - // Don't really need to do anything here - file.zipEntry = null; - } - else if( file.tempFile !is null ) - { - // Detatch to destroy the physical file itself - file.tempFile.detach(); - file.tempFile = null; - } - break; - - debug( ZipArchive ) - { - default: - Stderr.formatln( - "Entry.dispose_children: unknown type {}", - type); - assert(false); - } - } - } - } - - struct DirEntry - { - Entry*[char[]] children; - } - - struct FileEntry - { - ZipEntry zipEntry; - TempFile tempFile; - - invariant - { - auto zn = zipEntry is null; - auto tn = tempFile is null; - assert( (zn && tn) - /* zn xor tn */ || (!(zn&&tn)&&(zn||tn)) ); - } - } -} - -// ************************************************************************ // -// ************************************************************************ // - -/** - * ZipArchive serves as the root object for all Zip archives in the VFS. - * Presently, it can only open archives on the local filesystem. - */ -class ZipArchive : ZipFolder -{ - /** - * Opens an archive from the local filesystem. If the readonly argument - * is specified as true, then modification of the archive will be - * explicitly disallowed. - */ - this(char[] path, bool readonly=false) - out { assert( valid ); } - body - { - debug( ZipArchive ) - Stderr.formatln(`ZipArchive("{}", {})`, path, readonly); - this(FilePath(path), readonly); - } - - /// ditto - this(FilePath path, bool readonly=false) - out { assert( valid ); } - body - { - debug( ZipArchive ) - Stderr.formatln(`ZipArchive("{}", {})`, path, readonly); - this.resetArchive(path, readonly); - super(this, root); - } - - /** - * Closes the archive, and releases all internal resources. If the commit - * argument is true (the default), then changes to the archive will be - * flushed out to disk. If false, changes will simply be discarded. - */ - final override VfsFolder close(bool commit = true) - in { assert( valid ); } - body - { - debug( ZipArchive ) - Stderr.formatln("ZipArchive.close({})",commit); - - // MUTATE - if( commit ) sync; - - // Close ZipReader - if( zr !is null ) - { - zr.close(); - delete zr; - } - - // Destroy entries - root.dispose(); - version( Bug_HeapCorruption ) - root = null; - else - delete root; - - return this; - } - - /** - * Flushes all changes to the archive out to disk. - */ - final override VfsFolder sync() - in { assert( valid ); } - out - { - assert( valid ); - assert( !modified ); - } - body - { - debug( ZipArchive ) - Stderr("ZipArchive.sync()").newline; - - if( !modified ) - return this; - -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipArchive.sync"); - assert(false); -} -else -{ - enforce_mutable; - - // First, we need to determine if we have any zip entries. If we - // don't, then we can write directly to the path. If there *are* - // zip entries, then we'll need to write to a temporary path instead. - OutputStream os; - TempFile tempFile; - scope(exit) if( tempFile !is null ) delete tempFile; - - foreach( file ; this.tree.catalog ) - { - if( auto zf = cast(ZipFile) file ) - if( zf.entry.file.zipEntry !is null ) - { - tempFile = new TempFile(path.path, TempFile.Permanent); - os = tempFile.output; - debug( ZipArchive ) - Stderr.formatln(" sync: created temp file {}", - tempFile.path); - break; - } - } - - if( tempFile is null ) - { - // Kill the current zip reader so we can re-open the file it's - // using. - if( zr !is null ) - { - zr.close; - delete zr; - } - - os = new FileConduit(path, FileConduit.WriteCreate); - } - - // Now, we can create the archive. - { - scope zw = new ZipBlockWriter(os); - foreach( file ; this.tree.catalog ) - { - auto zei = ZipEntryInfo(file.toString[1..$]); - // BUG: Passthru doesn't maintain compression for some - // reason... - if( auto zf = cast(ZipFile) file ) - { - if( zf.entry.file.zipEntry !is null ) - zw.putEntry(zei, zf.entry.file.zipEntry); - else - zw.putStream(zei, file.input); - } - else - zw.putStream(zei, file.input); - } - zw.finish; - } - - // With that done, we can free all our handles, etc. - debug( ZipArchive ) - Stderr(" sync: close").newline; - this.close(/*commit*/ false); - os.close; - - // If we wrote the archive into a temporary file, move that over the - // top of the old archive. - if( tempFile !is null ) - { - debug( ZipArchive ) - Stderr(" sync: destroying temp file").newline; - auto tempFilePath = tempFile.path.dup; - delete tempFile; - debug( ZipArchive ) - Stderr.formatln(" sync: renaming {} to {}", - tempFilePath, path); - tempFilePath.rename(path); - } - - // Finally, re-open the archive so that we have all the nicely - // compressed files. - debug( ZipArchive ) - Stderr(" sync: reset archive").newline; - this.resetArchive(path, readonly); - - debug( ZipArchive ) - Stderr(" sync: reset folder").newline; - this.reset(this, root); - - debug( ZipArchive ) - Stderr(" sync: done").newline; - - return this; -} - } - - /** - * Indicates whether the archive was opened for read-only access. Note - * that in addition to the readonly constructor flag, this is also - * influenced by whether the file itself is read-only or not. - */ - final bool readonly() { return _readonly; } - - /** - * Allows you to read and specify the path to the archive. The effect of - * setting this is to change where the archive will be written to when - * flushed to disk. - */ - final FilePath path() { return _path; } - final FilePath path(FilePath v) { return _path = v; } /// ditto - -private: - ZipReader zr; - Entry* root; - FilePath _path; - bool _readonly; - bool modified = false; - - final bool readonly(bool v) { return _readonly = v; } - - final bool closed() - { - debug( ZipArchive ) - Stderr("ZipArchive.closed()").newline; - return (root is null); - } - - final bool valid() - { - debug( ZipArchive ) - Stderr("ZipArchive.valid()").newline; - return !closed; - } - - final OutputStream mutateStream(OutputStream source) - { - return new EventSeekOutputStream(source, - EventSeekOutputStream.Callbacks( - null, - null, - &mutate_write, - null)); - } - - void mutate_write(uint bytes, void[] src) - { - if( !(bytes == 0 || bytes == IConduit.Eof) ) - this.modified = true; - } - - void resetArchive(FilePath path, bool readonly=false) - out { assert( valid ); } - body - { - debug( ZipArchive ) - Stderr.formatln(`ZipArchive.resetArchive("{}", {})`, path, readonly); - - debug( ZipArchive ) - Stderr.formatln(" .. size of Entry: {0}, {0:x} bytes", Entry.sizeof); - - this.path = path; - this.readonly = readonly & !path.isWritable; - - zr = new ZipBlockReader(path.toString); - - // First, create a root entry - root = new Entry; - root.type = EntryType.Dir; - root.fullname = root.name = "/"; - - // Parse the contents of the archive - foreach( zipEntry ; zr ) - { - // Normalise name - auto name = FilePath(zipEntry.info.name).standard.toString; - - // If the last character is '/', treat as a directory and skip - // TODO: is there a better way of detecting this? - if( name[$-1] == '/' ) - continue; - - // Now, we need to locate the right spot to insert this entry. - { - // That's CURrent ENTity, not current OR currant... - Entry* curent = root; - char[] h,t; - headTail(name,h,t); - while( t.nz() ) - { - assert( curent.isDir ); - if( auto nextent = (h in curent.dir.children) ) - curent = *nextent; - - else - { - // Create new directory entry - Entry* dirent = new Entry; - dirent.type = EntryType.Dir; - if( curent.fullname != "/" ) - dirent.fullname = curent.fullname ~ "/" ~ h; - else - dirent.fullname = "/" ~ h; - dirent.name = dirent.fullname[$-h.length..$]; - - // Insert into current entry - curent.dir.children[dirent.name] = dirent; - - // Make it the new current entry - curent = dirent; - } - - headTail(t,h,t); - } - - // Getting here means that t is empty, which means the final - // component of the path--the file name--is in h. The entry - // of the containing directory is in curent. - - // Make sure the file isn't already there (you never know!) - assert( !(h in curent.dir.children) ); - - // Create a new file entry for it. - { - // BUG: Bug_HeapCorruption - // with ZipTest, on the resetArchive operation, on - // the second time through this next line, it erroneously - // allocates filent 16 bytes lower than curent. Entry - // is *way* larger than 16 bytes, and this causes it to - // zero-out the existing root element, which leads to - // segfaults later on at line +12: - // - // // Insert - // curent.dir.children[filent.name] = filent; - - Entry* filent = new Entry; - filent.type = EntryType.File; - if( curent.fullname != "/" ) - filent.fullname = curent.fullname ~ "/" ~ h; - else - filent.fullname = "/" ~ h; - filent.name = filent.fullname[$-h.length..$]; - filent.file.zipEntry = zipEntry.dup; - - filent.makeVfsInfo; - - // Insert - curent.dir.children[filent.name] = filent; - } - } - } - - // Make sure the modified flag is set appropriately - modified = false; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -/** - * This class represents a folder in an archive. In addition to supporting - * the sync operation, you can also use the archive member to get a reference - * to the underlying ZipArchive instance. - */ -class ZipFolder : VfsFolder, VfsSync -{ - /// - final override char[] name() - in { assert( valid ); } - body - { - return entry.name; - } - - /// - final override char[] toString() - in { assert( valid ); } - body - { - return entry.fullname; - } - - /// - final override VfsFile file(char[] path) - in - { - assert( valid ); - assert( !FilePath(path).isAbsolute ); - } - body - { - auto fp = FilePath(path); - auto dir = fp.path; - auto name = fp.file; - - // If the file is in another directory, then we need to look up that - // up first. - if( dir.nz() ) - { - scope dir_ent = this.folder(dir); - scope dir_obj = dir_ent.open; - return dir_obj.file(name); - } - else - { - // Otherwise, we need to check and see whether the file is in our - // entry list. - if( auto file_entry = (name in this.entry.dir.children) ) - { - // It is; create a new object for it. - return new ZipFile(archive, this.entry, *file_entry); - } - else - { - // Oh dear... return a holding object. - return new ZipFile(archive, this.entry, name); - } - } - } - - /// - final override VfsFolderEntry folder(char[] path) - in - { - assert( valid ); - assert( !FilePath(path).isAbsolute ); - } - body - { - // Locate the folder in question. We do this by "walking" the - // path components. If we find a component that doesn't exist, - // then we create a ZipFolderEntry for the remainder. - Entry* curent = this.entry; - - // h is the "head" of the path, t is the remainder. ht is both - // joined together. - char[] h,t,ht; - ht = path; - - do - { - // Split ht at the first path separator. - assert( ht.nz() ); - headTail(ht,h,t); - - // Look for a pre-existing subentry - auto subent = (h in curent.dir.children); - if( t.nz() && !!subent ) - { - // Move to the subentry, and split the tail on the next - // iteration. - curent = *subent; - ht = t; - } - else - // If the next component doesn't exist, return a folder entry. - // If the tail is empty, return a folder entry as well (let - // the ZipFolderEntry do the last lookup.) - return new ZipFolderEntry(archive, curent, ht); - } - while( true ); - } - - /// - final override VfsFolders self() - in { assert( valid ); } - body - { - return new ZipFolderGroup(archive, this, false); - } - - /// - final override VfsFolders tree() - in { assert( valid ); } - body - { - return new ZipFolderGroup(archive, this, true); - } - - /// - final override int opApply(int delegate(ref VfsFolder) dg) - in { assert( valid ); } - body - { - int result = 0; - - foreach( _,childEntry ; this.entry.dir.children ) - { - if( childEntry.isDir ) - { - VfsFolder childFolder = new ZipFolder(archive, childEntry); - if( (result = dg(childFolder)) != 0 ) - break; - } - } - - return result; - } - - /// - final override VfsFolder clear() - in { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("VfsFolder.clear"); - assert(false); -} -else -{ - // MUTATE - enforce_mutable; - - // Disposing of the underlying entry subtree should do our job for us. - entry.dispose_children; - mutate; - return this; -} - } - - /// - final override bool writable() - in { assert( valid ); } - body - { - return !archive.readonly; - } - - /** - * Closes this folder object. If commit is true, then the folder is - * sync'ed before being closed. - */ - override VfsFolder close(bool commit = true) - in { assert( valid ); } - body - { - // MUTATE - if( commit ) sync; - - // Just clean up our pointers - archive = null; - entry = null; - return this; - } - - /** - * This will flush any changes to the archive to disk. Note that this - * applies to the entire archive, not just this folder and its contents. - */ - override VfsFolder sync() - in { assert( valid ); } - body - { - // MUTATE - archive.sync; - return this; - } - - /// - final override void verify(VfsFolder folder, bool mounting) - in { assert( valid ); } - body - { - auto zipfolder = cast(ZipFolder) folder; - - if( mounting - && zipfolder !is null - && zipfolder.archive is archive ) - { - auto src = this.toString; - auto dst = zipfolder.toString; - - auto len = src.length > dst.length ? dst.length : src.length; - - if( src[0..len] == dst[0..len] ) - error(`folders "`~dst~`" and "`~src~`" in archive "` - ~archive.path.toString~`" overlap`); - } - } - - /** - * Returns a reference to the underlying ZipArchive instance. - */ - final ZipArchive archive() { return _archive; } - -private: - ZipArchive _archive; - Entry* entry; - VfsStats stats; - - final ZipArchive archive(ZipArchive v) { return _archive = v; } - - this(ZipArchive archive, Entry* entry) - { - this.reset(archive, entry); - } - - final void reset(ZipArchive archive, Entry* entry) - in - { - assert( archive !is null ); - assert( entry.isDir ); - } - out { assert( valid ); } - body - { - this.archive = archive; - this.entry = entry; - } - - final bool valid() - { - return( (archive !is null) && !archive.closed ); - } - - final void enforce_mutable() - in { assert( valid ); } - body - { - if( archive.readonly ) - // TODO: exception - throw new Exception("cannot mutate a read-only Zip archive"); - } - - final void mutate() - in { assert( valid ); } - body - { - enforce_mutable; - archive.modified = true; - } - - final ZipFolder[] folders(bool collect) - in { assert( valid ); } - body - { - ZipFolder[] folders; - stats = stats.init; - - foreach( _,childEntry ; entry.dir.children ) - { - if( childEntry.isDir ) - { - if( collect ) folders ~= new ZipFolder(archive, childEntry); - ++ stats.folders; - } - else - { - assert( childEntry.isFile ); - stats.bytes += childEntry.fileSize; - ++ stats.files; - } - } - - return folders; - } - - final Entry*[] files(ref VfsStats stats, VfsFilter filter = null) - in { assert( valid ); } - body - { - Entry*[] files; - - foreach( _,childEntry ; entry.dir.children ) - { - if( childEntry.isFile ) - if( filter is null || filter(childEntry.vfsInfo) ) - { - files ~= childEntry; - stats.bytes += childEntry.fileSize; - ++stats.files; - } - } - - return files; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -/** - * This class represents a file within an archive. - */ -class ZipFile : VfsFile -{ - /// - final override char[] name() - in { assert( valid ); } - body - { - if( entry ) return entry.name; - else return name_; - } - - /// - final override char[] toString() - in { assert( valid ); } - body - { - if( entry ) return entry.fullname; - else return parent.fullname ~ "/" ~ name_; - } - - /// - final override bool exists() - in { assert( valid ); } - body - { - // If we've only got a parent and a name, this means we don't actually - // exist; EXISTENTIAL CRISIS TEIM!!! - return !!entry; - } - - /// - final override ulong size() - in { assert( valid ); } - body - { - if( exists ) - return entry.fileSize; - else - error("ZipFile.size: cannot reliably determine size of a " - "non-existent file"); - } - - /// - final override VfsFile copy(VfsFile source) - in { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipFile.copy"); - assert(false); -} -else -{ - // MUTATE - enforce_mutable; - - if( !exists ) this.create; - this.output.copy(source.input); - - return this; -} - } - - /// - final override VfsFile move(VfsFile source) - in { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipFile.move"); - assert(false); -} -else -{ - // MUTATE - enforce_mutable; - - this.copy(source); - source.remove; - - return this; -} - } - - /// - final override VfsFile create() - in { assert( valid ); } - out { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipFile.create"); - assert(false); -} -else -{ - if( exists ) - error("ZipFile.create: cannot create already existing file: " - "this folder ain't big enough for the both of 'em"); - - // MUTATE - enforce_mutable; - - auto entry = new Entry; - entry.type = EntryType.File; - entry.fullname = parent.fullname.dir_app(name); - entry.name = entry.fullname[$-name.length..$]; - entry.makeVfsInfo; - - assert( !(entry.name in parent.dir.children) ); - parent.dir.children[entry.name] = entry; - this.reset(archive, parent, entry); - mutate; - - // Done - return this; -} - } - - /// - final override VfsFile create(InputStream stream) - in { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipFile.create"); - assert(false); -} -else -{ - create; - output.copy(stream).close; - return this; -} - } - - /// - final override VfsFile remove() - in{ assert( valid ); } - out { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - mutate_error("ZipFile.remove"); - assert(false); -} -else -{ - if( !exists ) - error("ZipFile.remove: cannot remove non-existent file; " - "rather redundant, really"); - - // MUTATE - enforce_mutable; - - // Save the old name - auto old_name = name; - - // Do the removal - assert( !!(name in parent.dir.children) ); - parent.dir.children.remove(name); - entry.dispose; - entry = null; - mutate; - - // Swap out our now empty entry for the name, so the file can be - // directly recreated. - this.reset(archive, parent, old_name); - - return this; -} - } - - /// - final override InputStream input() - in { assert( valid ); } - body - { - if( exists ) - return entry.openInput; - - else - error("ZipFile.input: cannot open non-existent file for input; " - "results would not be very useful"); - } - - /// - final override OutputStream output() - in { assert( valid ); } - body - { -version( ZipArchive_NonMutable ) -{ - mutate_error("ZipFile.output"); - assert(false); -} -else -{ - // MUTATE - enforce_mutable; - - // Don't call mutate; defer that until the user actually writes to or - // modifies the underlying stream. - return archive.mutateStream(entry.openOutput); -} - } - - /// - final override VfsFile dup() - in { assert( valid ); } - body - { - if( entry ) - return new ZipFile(archive, parent, entry); - else - return new ZipFile(archive, parent, name); - } - -private: - ZipArchive archive; - Entry* entry; - - Entry* parent; - char[] name_; - - this() - out { assert( !valid ); } - body - { - } - - this(ZipArchive archive, Entry* parent, Entry* entry) - in - { - assert( archive !is null ); - assert( parent ); - assert( parent.isDir ); - assert( entry ); - assert( entry.isFile ); - assert( parent.dir.children[entry.name] is entry ); - } - out { assert( valid ); } - body - { - this.reset(archive, parent, entry); - } - - this(ZipArchive archive, Entry* parent, char[] name) - in - { - assert( archive !is null ); - assert( parent ); - assert( parent.isDir ); - assert( name.nz() ); - assert( !(name in parent.dir.children) ); - } - out { assert( valid ); } - body - { - this.reset(archive, parent, name); - } - - final bool valid() - { - return( (archive !is null) && !archive.closed ); - } - - final void enforce_mutable() - in { assert( valid ); } - body - { - if( archive.readonly ) - // TODO: exception - throw new Exception("cannot mutate a read-only Zip archive"); - } - - final void mutate() - in { assert( valid ); } - body - { - enforce_mutable; - archive.modified = true; - } - - final void reset(ZipArchive archive, Entry* parent, Entry* entry) - in - { - assert( archive !is null ); - assert( parent ); - assert( parent.isDir ); - assert( entry ); - assert( entry.isFile ); - assert( parent.dir.children[entry.name] is entry ); - } - out { assert( valid ); } - body - { - this.parent = parent; - this.archive = archive; - this.entry = entry; - this.name_ = null; - } - - final void reset(ZipArchive archive, Entry* parent, char[] name) - in - { - assert( archive !is null ); - assert( parent ); - assert( parent.isDir ); - assert( name.nz() ); - assert( !(name in parent.dir.children) ); - } - out { assert( valid ); } - body - { - this.archive = archive; - this.parent = parent; - this.entry = null; - this.name_ = name; - } - - final void close() - in { assert( valid ); } - out { assert( !valid ); } - body - { - archive = null; - parent = null; - entry = null; - name_ = null; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -class ZipFolderEntry : VfsFolderEntry -{ - final override VfsFolder open() - in { assert( valid ); } - body - { - auto entry = (name in parent.dir.children); - if( entry ) - return new ZipFolder(archive, *entry); - - else - { - // NOTE: this can be called with a multi-part path. - error("ZipFolderEntry.open: \"" - ~ parent.fullname ~ "/" ~ name - ~ "\" does not exist"); - } - } - - final override VfsFolder create() - in { assert( valid ); } - body - { -version( ZipArchive_NonMutating ) -{ - // TODO: different exception if folder exists (this operation is - // currently invalid either way...) - mutate_error("ZipFolderEntry.create"); - assert(false); -} -else -{ - // MUTATE - enforce_mutable; - - // If the folder exists, we can't really create it, now can we? - if( this.exists ) - error("ZipFolderEntry.create: cannot create folder that already " - "exists, and believe me, I *tried*"); - - // Ok, I suppose I can do this for ya... - auto entry = new Entry; - entry.type = EntryType.Dir; - entry.fullname = parent.fullname.dir_app(name); - entry.name = entry.fullname[$-name.length..$]; - entry.makeVfsInfo; - - assert( !(entry.name in parent.dir.children) ); - parent.dir.children[entry.name] = entry; - mutate; - - // Done - return new ZipFolder(archive, entry); -} - } - - final override bool exists() - in { assert( valid ); } - body - { - return !!(name in parent.dir.children); - } - -private: - ZipArchive archive; - Entry* parent; - char[] name; - - this(ZipArchive archive, Entry* parent, char[] name) - in - { - assert( archive !is null ); - assert( parent.isDir ); - assert( name.nz() ); - assert( name.single_path_part() ); - } - out { assert( valid ); } - body - { - this.archive = archive; - this.parent = parent; - this.name = name; - } - - final bool valid() - { - return (archive !is null) && !archive.closed; - } - - final void enforce_mutable() - in { assert( valid ); } - body - { - if( archive.readonly ) - // TODO: exception - throw new Exception("cannot mutate a read-only Zip archive"); - } - - final void mutate() - in { assert( valid ); } - body - { - enforce_mutable; - archive.modified = true; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -class ZipFolderGroup : VfsFolders -{ - final override int opApply(int delegate(ref VfsFolder) dg) - in { assert( valid ); } - body - { - int result = 0; - - foreach( folder ; members ) - { - VfsFolder x = folder; - if( (result = dg(x)) != 0 ) - break; - } - - return result; - } - - final override uint files() - in { assert( valid ); } - body - { - uint files = 0; - - foreach( folder ; members ) - files += folder.stats.files; - - return files; - } - - final override uint folders() - in { assert( valid ); } - body - { - return members.length; - } - - final override uint entries() - in { assert( valid ); } - body - { - return files + folders; - } - - final override ulong bytes() - in { assert( valid ); } - body - { - ulong bytes = 0; - - foreach( folder ; members ) - bytes += folder.stats.bytes; - - return bytes; - } - - final override VfsFolders subset(char[] pattern) - in { assert( valid ); } - body - { - ZipFolder[] set; - - foreach( folder ; members ) - if( patternMatch(folder.name, pattern) ) - set ~= folder; - - return new ZipFolderGroup(archive, set); - } - - final override VfsFiles catalog(char[] pattern) - in { assert( valid ); } - body - { - return catalog( - (VfsInfo info) - { - return patternMatch(info.name, pattern); - } - ); - } - - final override VfsFiles catalog(VfsFilter filter = null) - in { assert( valid ); } - body - { - return new ZipFileGroup(archive, this, filter); - } - -private: - ZipArchive archive; - ZipFolder[] members; - - this(ZipArchive archive, ZipFolder root, bool recurse) - out { assert( valid ); } - body - { - this.archive = archive; - members = root ~ scan(root, recurse); - } - - this(ZipArchive archive, ZipFolder[] members) - out { assert( valid ); } - body - { - this.archive = archive; - this.members = members; - } - - final bool valid() - { - return (archive !is null) && !archive.closed; - } - - final ZipFolder[] scan(ZipFolder root, bool recurse) - in { assert( valid ); } - body - { - auto folders = root.folders(recurse); - - if( recurse ) - foreach( child ; folders ) - folders ~= scan(child, recurse); - - return folders; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -class ZipFileGroup : VfsFiles -{ - final override int opApply(int delegate(ref VfsFile) dg) - in { assert( valid ); } - body - { - int result = 0; - auto file = new ZipFile; - - foreach( entry ; group ) - { - file.reset(archive,entry.parent,entry.entry); - VfsFile x = file; - if( (result = dg(x)) != 0 ) - break; - } - - return result; - } - - final override uint files() - in { assert( valid ); } - body - { - return group.length; - } - - final override ulong bytes() - in { assert( valid ); } - body - { - return stats.bytes; - } - -private: - ZipArchive archive; - FileEntry[] group; - VfsStats stats; - - struct FileEntry - { - Entry* parent; - Entry* entry; - } - - this(ZipArchive archive, ZipFolderGroup host, VfsFilter filter) - out { assert( valid ); } - body - { - this.archive = archive; - foreach( folder ; host.members ) - foreach( file ; folder.files(stats, filter) ) - group ~= FileEntry(folder.entry, file); - } - - final bool valid() - { - return (archive !is null) && !archive.closed; - } -} - -// ************************************************************************ // -// ************************************************************************ // - -private: - -void error(char[] msg) -{ - throw new Exception(msg); -} - -void mutate_error(char[] method) -{ - error(method ~ ": mutating the contents of a ZipArchive " - "is not supported yet; terribly sorry"); -} - -bool nz(char[] s) -{ - return s.length > 0; -} - -bool zero(char[] s) -{ - return s.length == 0; -} - -bool single_path_part(char[] s) -{ - foreach( c ; s ) - if( c == '/' ) return false; - return true; -} - -char[] dir_app(char[] dir, char[] name) -{ - return dir ~ (dir[$-1]!='/' ? "/" : "") ~ name; -} - -void headTail(ref FilePath fp, out char[] head, out char[] tail) -{ - return headTail(fp.toString, head, tail); -} - -void headTail(char[] path, out char[] head, out char[] tail) -{ - foreach( i,dchar c ; path[1..$] ) - if( c == '/' ) - { - head = path[0..i+1]; - tail = path[i+2..$]; - return; - } - - head = path; - tail = null; -} - -unittest -{ - char[] h,t; - - headTail("/a/b/c", h, t); - assert( h == "/a" ); - assert( t == "b/c" ); - - headTail("a/b/c", h, t); - assert( h == "a" ); - assert( t == "b/c" ); - - headTail("a/", h, t); - assert( h == "a" ); - assert( t == "" ); - - headTail("a", h, t); - assert( h == "a" ); - assert( t == "" ); -} - -// ************************************************************************** // -// ************************************************************************** // -// ************************************************************************** // - -// Dependencies -private: -import tango.io.Conduit : Conduit; - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.DummyStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * The dummy stream classes are used to provide simple, empty stream objects - * where one is required, but none is available. - * - * Note that, currently, these classes return 'null' for the underlying - * conduit, which will likely break code which expects streams to have an - * underlying conduit. - */ -class DummyInputStream : InputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /// - this(){} - override IConduit conduit() { return null; } - override void close() {} - override uint read(void[] dst) { return IConduit.Eof; } - override InputStream clear() { return this; } - override long seek(long offset, Anchor anchor = cast(Anchor)0) { return 0; } -} - -/// ditto -class DummyOutputStream : OutputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /// - this(){} - override IConduit conduit() { return null; } - override void close() {} - override uint write(void[] src) { return IConduit.Eof; } - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - override OutputStream flush() { return this; } - override long seek(long offset, Anchor anchor = cast(Anchor)0) { return 0; } -} - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.EventStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * The event stream classes are designed to allow you to receive feedback on - * how a stream chain is being used. This is done through the use of - * delegate callbacks which are invoked just before the associated method is - * complete. - */ -class EventSeekInputStream : InputStream, IConduit.Seek -{ - /// - struct Callbacks - { - void delegate() close; /// - void delegate() clear; /// - void delegate(uint, void[]) read; /// - void delegate(long, long, Anchor) seek; /// - } - - alias IConduit.Seek.Anchor Anchor; - - /// - this(InputStream source, Callbacks callbacks) - in - { - assert( source !is null ); - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this.callbacks = callbacks; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source.close; - source = null; - seeker = null; - if( callbacks.close ) callbacks.close(); - } - - override uint read(void[] dst) - { - auto result = source.read(dst); - if( callbacks.read ) callbacks.read(result, dst); - return result; - } - - override InputStream clear() - { - source.clear(); - if( callbacks.clear ) callbacks.clear(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - auto result = seeker.seek(offset, anchor); - if( callbacks.seek ) callbacks.seek(result, offset, anchor); - return result; - } - -private: - InputStream source; - IConduit.Seek seeker; - Callbacks callbacks; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - } -} - -/// ditto -class EventSeekOutputStream : OutputStream, IConduit.Seek -{ - /// - struct Callbacks - { - void delegate() close; /// - void delegate() flush; /// - void delegate(uint, void[]) write; /// - void delegate(long, long, Anchor) seek; /// - } - - alias IConduit.Seek.Anchor Anchor; - - /// - this(OutputStream source, Callbacks callbacks) - in - { - assert( source !is null ); - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this.callbacks = callbacks; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source.close; - source = null; - seeker = null; - if( callbacks.close ) callbacks.close(); - } - - override uint write(void[] dst) - { - auto result = source.write(dst); - if( callbacks.write ) callbacks.write(result, dst); - return result; - } - - override OutputStream flush() - { - source.flush(); - if( callbacks.flush ) callbacks.flush(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - auto result = seeker.seek(offset, anchor); - if( callbacks.seek ) callbacks.seek(result, offset, anchor); - return result; - } - - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - -private: - OutputStream source; - IConduit.Seek seeker; - Callbacks callbacks; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - } -} - -/******************************************************************************* - - copyright: Copyright © 2007 Daniel Keep. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Prerelease - - author: Daniel Keep - -*******************************************************************************/ - -//module tangox.io.stream.WrapStream; - -//import tango.io.Conduit : Conduit; -//import tango.io.model.IConduit : IConduit, InputStream, OutputStream; - -/** - * This stream can be used to provide access to another stream. - * Its distinguishing feature is that users cannot close the underlying - * stream. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class WrapSeekInputStream : InputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new wrap stream from the given source. - */ - this(InputStream source) - in - { - assert( source !is null ); - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this._position = seeker.seek(0, Anchor.Current); - } - - /// ditto - this(InputStream source, long position) - in - { - assert( position >= 0 ); - } - body - { - this(source); - this._position = position; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - override uint read(void[] dst) - { - if( seeker.seek(0, Anchor.Current) != _position ) - seeker.seek(_position, Anchor.Begin); - - auto read = source.read(dst); - if( read != IConduit.Eof ) - _position += read; - - return read; - } - - override InputStream clear() - { - source.clear(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - seeker.seek(_position, Anchor.Begin); - return (_position = seeker.seek(offset, anchor)); - } - -private: - InputStream source; - IConduit.Seek seeker; - long _position; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( _position >= 0 ); - } -} - -/** - * This stream can be used to provide access to another stream. - * Its distinguishing feature is that the users cannot close the underlying - * stream. - * - * This stream fully supports seeking, and as such requires that the - * underlying stream also support seeking. - */ -class WrapSeekOutputStream : OutputStream, IConduit.Seek -{ - alias IConduit.Seek.Anchor Anchor; - - /** - * Create a new wrap stream from the given source. - */ - this(OutputStream source) - in - { - assert( (cast(IConduit.Seek) source) !is null ); - } - body - { - this.source = source; - this.seeker = cast(IConduit.Seek) source; - this._position = seeker.seek(0, Anchor.Current); - } - - /// ditto - this(OutputStream source, long position) - in - { - assert( position >= 0 ); - } - body - { - this(source); - this._position = position; - } - - override IConduit conduit() - { - return source.conduit; - } - - override void close() - { - source = null; - seeker = null; - } - - uint write(void[] src) - { - if( seeker.seek(0, Anchor.Current) != _position ) - seeker.seek(_position, Anchor.Begin); - - auto wrote = source.write(src); - if( wrote != IConduit.Eof ) - _position += wrote; - return wrote; - } - - override OutputStream copy(InputStream src) - { - return Conduit.transfer(src, this); - } - - override OutputStream flush() - { - source.flush(); - return this; - } - - override long seek(long offset, Anchor anchor = cast(Anchor)0) - { - seeker.seek(_position, Anchor.Begin); - return (_position = seeker.seek(offset, anchor)); - } - -private: - OutputStream source; - IConduit.Seek seeker; - long _position; - - invariant - { - assert( cast(Object) source is cast(Object) seeker ); - assert( _position >= 0 ); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/io/vfs/model/Vfs.d --- a/tango/tango/io/vfs/model/Vfs.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,570 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Tango. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jul 2007: Initial version - - author: Lars Ivar, Kris - -*******************************************************************************/ - -module tango.io.vfs.model.Vfs; - -private import tango.io.FilePath; - -private import tango.io.model.IConduit; - -/******************************************************************************* - - Passed around during filtering - -*******************************************************************************/ - -struct VfsFilterInfo -{ - char[] path, // full path (sans virtual-path) - name; // name + ext - ulong bytes; // file size, as applicable - bool folder; // is this a folder? -} - -alias VfsFilterInfo* VfsInfo; - -// return false to exclude something -public alias bool delegate(VfsInfo) VfsFilter; - - -/******************************************************************************* - -*******************************************************************************/ - -private struct VfsStats -{ - ulong bytes; // byte count of files - uint files, // number of files - folders; // number of folders -} - -/******************************************************************************* - -******************************************************************************/ - -interface VfsHost : VfsFolder -{ - /********************************************************************** - - Add a child folder. The child cannot 'overlap' with others - in the tree of the same type. Circular references across a - tree of virtual folders are detected and trapped. - - The second argument represents an optional name that the - mount should be known as, instead of the name exposed by - the provided folder (it is not an alias). - - **********************************************************************/ - - VfsHost mount (VfsFolder folder, char[] name=null); - - /*********************************************************************** - - Add a set of child folders. The children cannot 'overlap' - with others in the tree of the same type. Circular references - are detected and trapped. - - ***********************************************************************/ - - VfsHost mount (VfsFolders group); - - /********************************************************************** - - Unhook a child folder - - **********************************************************************/ - - VfsHost dismount (VfsFolder folder); - - /********************************************************************** - - Add a symbolic link to another file. These are referenced - by file() alone, and do not show up in tree traversals - - **********************************************************************/ - - VfsHost map (VfsFile target, char[] name); - - /*********************************************************************** - - Add a symbolic link to another folder. These are referenced - by folder() alone, and do not show up in tree traversals - - ***********************************************************************/ - - VfsHost map (VfsFolderEntry target, char[] name); -} - - -/******************************************************************************* - - Supports a model a bit like CSS selectors, where a selection - of operands is made before applying some operation. For example: - --- - // count of files in this folder - auto count = folder.self.files; - - // accumulated file byte-count - auto bytes = folder.self.bytes; - - // a group of one folder (itself) - auto folders = folder.self; - --- - - The same approach is used to select the subtree descending from - a folder: - --- - // count of files in this tree - auto count = folder.tree.files; - - // accumulated file byte-count - auto bytes = folder.tree.bytes; - - // the group of child folders - auto folders = folder.tree; - --- - - Filtering can be applied to the tree resulting in a sub-group. - Group operations remain applicable. Note that various wildcard - characters may be used in the filtering: - --- - // select a subset of the resultant tree - auto folders = folder.tree.subset("install"); - - // get total file bytes for a tree subset, using wildcards - auto bytes = folder.tree.subset("foo*").bytes; - --- - - Files are selected from a set of folders in a similar manner: - --- - // files called "readme.txt" in this folder - auto count = folder.self.catalog("readme.txt").files; - - // files called "read*.*" in this tree - auto count = folder.tree.catalog("read*.*").files; - - // all txt files belonging to folders starting with "ins" - auto count = folder.tree.subset("ins*").catalog("*.txt").files; - - // custom-filtered files within a subtree - auto count = folder.tree.catalog(&filter).files; - --- - - Sets of folders and files support iteration via foreach: - --- - foreach (folder; root.tree) - Stdout.formatln ("folder name:{}", folder.name); - - foreach (folder; root.tree.subset("ins*")) - Stdout.formatln ("folder name:{}", folder.name); - - foreach (file; root.tree.catalog("*.d")) - Stdout.formatln ("file name:{}", file.name); - --- - - Creating and opening a sub-folder is supported in a similar - manner, where the single instance is 'selected' before the - operation is applied. Open differs from create in that the - folder must exist for the former: - --- - root.folder("myNewFolder").create; - - root.folder("myExistingFolder").open; - --- - - File manipulation is handled in much the same way: - --- - root.file("myNewFile").create; - - auto source = root.file("myExistingFile"); - root.file("myCopiedFile").copy(source); - --- - - The principal benefits of these approaches are twofold: 1) it - turns out to be notably more efficient in terms of traversal, and - 2) there's no casting required, since there is a clean separation - between files and folders. - - See VfsFile for more information on file handling - -*******************************************************************************/ - -interface VfsFolder -{ - /*********************************************************************** - - Return a short name - - ***********************************************************************/ - - char[] name(); - - /*********************************************************************** - - Return a long name - - ***********************************************************************/ - - char[] toString(); - - /*********************************************************************** - - Return a contained file representation - - ***********************************************************************/ - - VfsFile file (char[] path); - - /*********************************************************************** - - Return a contained folder representation - - ***********************************************************************/ - - VfsFolderEntry folder (char[] path); - - /*********************************************************************** - - Returns a folder set containing only this one. Statistics - are inclusive of entries within this folder only - - ***********************************************************************/ - - VfsFolders self (); - - /*********************************************************************** - - Returns a subtree of folders. Statistics are inclusive of - files within this folder and all others within the tree - - ***********************************************************************/ - - VfsFolders tree (); - - /*********************************************************************** - - Iterate over the set of immediate child folders. This is - useful for reflecting the hierarchy - - ***********************************************************************/ - - int opApply (int delegate(inout VfsFolder) dg); - - /*********************************************************************** - - Clear all content from this folder and subordinates - - ***********************************************************************/ - - VfsFolder clear(); - - /*********************************************************************** - - Is folder writable? - - ***********************************************************************/ - - bool writable(); - - /*********************************************************************** - - Close and/or synchronize changes made to this folder. Each - driver should take advantage of this as appropriate, perhaps - combining multiple files together, or possibly copying to a - remote location - - ***********************************************************************/ - - VfsFolder close (bool commit = true); - - /*********************************************************************** - - A folder is being added or removed from the hierarchy. Use - this to test for validity (or whatever) and throw exceptions - as necessary - - ***********************************************************************/ - - void verify (VfsFolder folder, bool mounting); - - //VfsFolder copy(VfsFolder from, char[] to); - //VfsFolder move(Entry from, VfsFolder toFolder, char[] toName); - //char[] absolutePath(char[] path); -} - - -/******************************************************************************* - - Operations upon a set of folders - -*******************************************************************************/ - -interface VfsFolders -{ - /*********************************************************************** - - Iterate over the set of contained VfsFolder instances - - ***********************************************************************/ - - int opApply (int delegate(inout VfsFolder) dg); - - /*********************************************************************** - - Return the number of files - - ***********************************************************************/ - - uint files(); - - /*********************************************************************** - - Return the number of folders - - ***********************************************************************/ - - uint folders(); - - /*********************************************************************** - - Return the total number of entries (files + folders) - - ***********************************************************************/ - - uint entries(); - - /*********************************************************************** - - Return the total size of contained files - - ***********************************************************************/ - - ulong bytes(); - - /*********************************************************************** - - Return a subset of folders matching the given pattern - - ***********************************************************************/ - - VfsFolders subset (char[] pattern); - - /*********************************************************************** - - Return a set of files matching the given pattern - - ***********************************************************************/ - - VfsFiles catalog (char[] pattern); - - /*********************************************************************** - - Return a set of files matching the given filter - - ***********************************************************************/ - - VfsFiles catalog (VfsFilter filter = null); -} - - -/******************************************************************************* - - Operations upon a set of files - -*******************************************************************************/ - -interface VfsFiles -{ - /*********************************************************************** - - Iterate over the set of contained VfsFile instances - - ***********************************************************************/ - - int opApply (int delegate(inout VfsFile) dg); - - /*********************************************************************** - - Return the total number of entries - - ***********************************************************************/ - - uint files(); - - /*********************************************************************** - - Return the total size of all files - - ***********************************************************************/ - - ulong bytes(); -} - - -/******************************************************************************* - - A specific file representation - -*******************************************************************************/ - -interface VfsFile -{ - /*********************************************************************** - - Return a short name - - ***********************************************************************/ - - char[] name(); - - /*********************************************************************** - - Return a long name - - ***********************************************************************/ - - char[] toString(); - - /*********************************************************************** - - Does this file exist? - - ***********************************************************************/ - - bool exists(); - - /*********************************************************************** - - Return the file size - - ***********************************************************************/ - - ulong size (); - - /*********************************************************************** - - Create and copy the given source - - ***********************************************************************/ - - VfsFile copy (VfsFile source); - - /*********************************************************************** - - Create and copy the given source, and remove the source - - ***********************************************************************/ - - VfsFile move (VfsFile source); - - /*********************************************************************** - - Create a new file instance - - ***********************************************************************/ - - VfsFile create (); - - /*********************************************************************** - - Create a new file instance and populate with stream - - ***********************************************************************/ - - VfsFile create (InputStream stream); - - /*********************************************************************** - - Remove this file - - ***********************************************************************/ - - VfsFile remove (); - - /*********************************************************************** - - Return the input stream. Don't forget to close it - - ***********************************************************************/ - - InputStream input (); - - /*********************************************************************** - - Return the output stream. Don't forget to close it - - ***********************************************************************/ - - OutputStream output (); - - /*********************************************************************** - - Duplicate this entry - - ***********************************************************************/ - - VfsFile dup (); -} - - -/******************************************************************************* - - Handler for folder operations. Needs some work ... - -*******************************************************************************/ - -interface VfsFolderEntry -{ - /*********************************************************************** - - Open a folder - - ***********************************************************************/ - - VfsFolder open (); - - /*********************************************************************** - - Create a new folder - - ***********************************************************************/ - - VfsFolder create (); - - /*********************************************************************** - - Test to see if a folder exists - - ***********************************************************************/ - - bool exists (); -} - - -/******************************************************************************* - - Would be used for things like zip files, where the - implementation mantains the contents in memory or on disk, and where - the actual zip file isn't/shouldn't be written until one is finished - filling it up (for zip due to inefficient file format). - -*******************************************************************************/ - -interface VfsSync -{ - /*********************************************************************** - - ***********************************************************************/ - - VfsFolder sync(); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/Bessel.d --- a/tango/tango/math/Bessel.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,723 +0,0 @@ -/** - * Cylindrical Bessel functions of integral order. - * - * Copyright: Based on the CEPHES math library, which is - * Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com). - * License: BSD style: $(LICENSE) - * Authors: Stephen L. Moshier (original C code). Conversion to D by Don Clugston - */ - -module tango.math.Bessel; - -import tango.math.Math; -private import tango.math.IEEE; - - -private { // Rational polynomial approximations to j0, y0, j1, y1. - -// sqrt(j0^2(1/x^2) + y0^2(1/x^2)) = z P(z**2)/Q(z**2), z(x) = 1/sqrt(x) -// Peak error = 1.80e-20 -const real j0modulusn[] = [ 0x1.154700ea96e79656p-7, 0x1.72244b6e998cd6fp-4, - 0x1.6ebccf42e9c19fd2p-1, 0x1.6bd844e89cbd639ap+1, 0x1.e812b377c75ebc96p+2, - 0x1.46d69ca24ce76686p+3, 0x1.b756f7234cc67146p+2, 0x1.943a7471eaa50ab2p-2 -]; - -const real j0modulusd[] = [ 0x1.5b84007c37011506p-7, 0x1.cfe76758639bdab4p-4, - 0x1.cbfa09bf71bafc7ep-1, 0x1.c8eafb3836f2eeb4p+1, 0x1.339db78060eb706ep+3, - 0x1.a06530916be8bc7ap+3, 0x1.23bfe7f67a54893p+3, 1.0 -]; - - -// atan(y0(x)/j0(x)) = x - pi/4 + x P(x**2)/Q(x**2) -// Peak error = 2.80e-21. Relative error spread = 5.5e-1 -const real j0phasen[] = [ -0x1.ccbaf3865bb0985ep-22, -0x1.3a6b175e64bdb82ep-14, - -0x1.06124b5310cdca28p-8, -0x1.3cebb7ab09cf1b14p-4, -0x1.00156ed209b43c6p-1, - -0x1.78aa9ba4254ca20cp-1 -]; - -const real j0phased[] = [ 0x1.ccbaf3865bb09918p-19, 0x1.3b5b0e12900d58b8p-11, - 0x1.0897373ff9906f7ep-5, 0x1.450a5b8c552ade4ap-1, 0x1.123e263e7f0e96d2p+2, - 0x1.d82ecca5654be7d2p+2, 1.0 -]; - - -// j1(x) = (x^2-r0^2)(x^2-r1^2)(x^2-r2^2) x P(x**2)/Q(x**2), 0 <= x <= 9 -// Peak error = 2e-21 -const real j1n[] = [ -0x1.2f494fa4e623b1bp+58, 0x1.8289f0a5f1e1a784p+52, - -0x1.9d773ee29a52c6d8p+45, 0x1.e9394ff57a46071cp+37, -0x1.616c7939904a359p+29, - 0x1.424414b9ee5671eap+20, -0x1.6db34a9892d653e6p+10, 0x1.dcd7412d90a0db86p-1, - -0x1.1444a1643199ee5ep-12 -]; - -const real j1d[] = [ 0x1.5a1e0a45eb67bacep+75, 0x1.35ee485d62f0ccbap+68, - 0x1.11ee7aad4e4bcd8p+60, 0x1.3adde5dead800244p+51, 0x1.041c413dfbab693p+42, - 0x1.4066d12193fcc082p+32, 0x1.24309d0dc2c4d42ep+22, 0x1.7115bea028dd75f2p+11, - 1.0 -]; - -// sqrt(j1^2(1/x^2) + y1^2(1/x^2)) = z P(z**2)/Q(z**2), z(x) = 1/sqrt(x) -// Peak error = 1.35e=20, Relative error spread = 9.9e0 -const real [] j1modulusn = [ 0x1.059262020bf7520ap-6, 0x1.012ffc4d1f5cdbc8p-3, - 0x1.03c17ce18cae596p+0, 0x1.6e0414a7114ae3ccp+1, 0x1.cb047410d229cbc4p+2, - 0x1.4385d04bb718faaap+1, 0x1.914074c30c746222p-2, -0x1.42abe77f6b307aa6p+2 -]; - -const real [] j1modulusd = [ 0x1.47d4e6ad98d8246ep-6, 0x1.42562f48058ff904p-3, - 0x1.44985e2af35c6f9cp+0, 0x1.c6f4a03469c4ef6cp+1, 0x1.1829a060e8d604cp+3, - 0x1.44111c892f9cc84p+1, -0x1.d7c36d7f1e5aef6ap-1, -0x1.8eeafb1ac81c4c06p+2, - 1.0 -]; - -// atan(y1(x)/j1(x)) = x - 3pi/4 + z P(z**2)/Q(z**2), z(x) = 1/x -// Peak error = 4.83e-21. Relative error spread = 1.9e0 -const real [] j1phasen = [ 0x1.ca9f612d83aaa818p-20, 0x1.2e82fcfb7d0fee9ep-12, - 0x1.e28858c1e947506p-7, 0x1.12b8f96e5173d20ep-2, 0x1.965e6a013154c0ap+0, - 0x1.0156a25eaa0dd78p+1 -]; - -const real [] j1phased = [ 0x1.31bf961e57c71ae4p-18, 0x1.9464d8f2abf750a6p-11, - 0x1.446a786bac2131fp-5, 0x1.76caa8513919873cp-1, 0x1.2130b56bc1a563e4p+2, - 0x1.b3cc1a865259dfc6p+2, 0x1p+0 -]; - -} - -/*** - * Bessel function of order zero - * - * Returns Bessel function of first kind, order zero of the argument. - */ - - /* The domain is divided into the intervals [0, 9] and - * (9, infinity). In the first interval the rational approximation - * is (x^2 - r^2) (x^2 - s^2) (x^2 - t^2) P7(x^2) / Q8(x^2), - * where r, s, t are the first three zeros of the function. - * In the second interval the expansion is in terms of the - * modulus M0(x) = sqrt(J0(x)^2 + Y0(x)^2) and phase P0(x) - * = atan(Y0(x)/J0(x)). M0 is approximated by sqrt(1/x)P7(1/x)/Q7(1/x). - * The approximation to J0 is M0 * cos(x - pi/4 + 1/x P5(1/x^2)/Q6(1/x^2)). - */ -real cylBessel_j0(real x) -{ - -// j0(x) = (x^2-JZ1)(x^2-JZ2)(x^2-JZ3)P(x**2)/Q(x**2), 0 <= x <= 9 -// Peak error = 8.49e-22. Relative error spread = 2.2e-3 -const real j0n[] = [ -0x1.3e8ff72b890d72d8p+59, 0x1.cc86e3755a4c803p+53, - -0x1.0ea6f5bac6623616p+47, 0x1.532c6d94d36f2874p+39, -0x1.ef25a232f6c00118p+30, - 0x1.aa0690536c11fc2p+21, -0x1.94e67651cc57535p+11, 0x1.4bfe47ac8411eeb2p+0 -]; - -const real j0d[] = [ 0x1.0096dec5f6560158p+73, 0x1.11705db14995fb9cp+66, - 0x1.220a41c3daaa7a58p+58, 0x1.93c6b48d196c1082p+49, 0x1.9814684a10dbfda2p+40, - 0x1.36f20ec527fccda4p+31, 0x1.634596b9247fc34p+21, 0x1.1d3eb73f90657bfcp+11, - 1.0 -]; - real xx, y, z, modulus, phase; - - xx = x * x; - if ( xx < 81.0L ) { - const real [] JZ = [5.783185962946784521176L, - 30.47126234366208639908L, 7.488700679069518344489e1L]; - y = (xx - JZ[0]) * (xx - JZ[1]) * (xx - JZ[2]); - y *= rationalPoly( xx, j0n, j0d); - return y; - } - - y = fabs(x); - xx = 1.0/xx; - phase = rationalPoly( xx, j0phasen, j0phased); - - z = 1.0/y; - modulus = rationalPoly( z, j0modulusn, j0modulusd); - - y = modulus * cos( y - PI_4 + z*phase) / sqrt(y); - return y; -} - -/** - * Bessel function of the second kind, order zero - * Also known as the cylindrical Neumann function, order zero. - * - * Returns Bessel function of the second kind, of order - * zero, of the argument. - */ -real cylBessel_y0(real x) -{ -/* The domain is divided into the intervals [0, 5>, [5,9> and - * [9, infinity). In the first interval a rational approximation - * R(x) is employed to compute y0(x) = R(x) + 2/pi * log(x) * j0(x). - * - * In the second interval, the approximation is - * (x - p)(x - q)(x - r)(x - s)P7(x)/Q7(x) - * where p, q, r, s are zeros of y0(x). - * - * The third interval uses the same approximations to modulus - * and phase as j0(x), whence y0(x) = modulus * sin(phase). - */ - -// y0(x) = 2/pi * log(x) * j0(x) + P(z**2)/Q(z**2), 0 <= x <= 5 -// Peak error = 8.55e-22. Relative error spread = 2.7e-1 -const real y0n[] = [ -0x1.068026b402e2bf7ap+54, 0x1.3a2f7be8c4c8a03ep+55, - -0x1.89928488d6524792p+51, 0x1.3e3ea2846f756432p+46, -0x1.c8be8d9366867c78p+39, - 0x1.43879530964e5fbap+32, -0x1.bee052fef72a5d8p+23, 0x1.e688c8fe417c24d8p+13 -]; - -const real y0d[] = [ 0x1.bc96c5351e564834p+57, 0x1.6821ac3b4c5209a6p+51, - 0x1.27098b571836ce64p+44, 0x1.41870d2a9b90aa76p+36, 0x1.00394fd321f52f48p+28, - 0x1.317ce3b16d65b27p+19, 0x1.0432b36efe4b20aep+10, 1.0 -]; - -// y0(x) = (x-Y0Z1)(x-Y0Z2)(x-Y0Z3)(x-Y0Z4)P(x)/Q(x), 4.5 <= x <= 9 -// Peak error = 2.35e-20. Relative error spread = 7.8e-13 -const real y059n[] = [ -0x1.0fce17d26a21f218p+19, -0x1.c6fc144765fdfaa8p+16, - 0x1.3e20237c53c7180ep+19, 0x1.7d14055ff6a493c4p+17, 0x1.b8b694729689d1f4p+12, - -0x1.1e24596784b6c5cp+12, 0x1.35189cb3ece7ab46p+6, 0x1.9428b3f406b4aa08p+4, - -0x1.791187b68dd4240ep+0, 0x1.8417216d568b325ep-6 -]; - -const real y059d[] = [ 0x1.17af71a3d4167676p+30, 0x1.a36abbb668c79d6cp+31, - -0x1.4ff64a14ed73c4d6p+29, 0x1.9d427af195244ffep+26, -0x1.4e85bbbc8d2fd914p+23, - 0x1.ac59b523ae0bd16cp+19, -0x1.8ebda33eaac74518p+15, 0x1.16194a051cd55a12p+11, - -0x1.f2d714ab48d1bd7ep+5, 1.0 -]; - - - real xx, y, z, modulus, phase; - - if ( x < 0.0 ) return -real.max; - xx = x * x; - if ( xx < 81.0L ) { - if ( xx < 20.25L ) { - y = M_2_PI * log(x) * cylBessel_j0(x); - y += rationalPoly( xx, y0n, y0d); - } else { - const real [] Y0Z = [3.957678419314857868376e0L, 7.086051060301772697624e0L, - 1.022234504349641701900e1L, 1.336109747387276347827e1L]; - y = (x - Y0Z[0])*(x - Y0Z[1])*(x - Y0Z[2])*(x - Y0Z[3]); - y *= rationalPoly( x, y059n, y059d); - } - return y; - } - - y = fabs(x); - xx = 1.0/xx; - phase = rationalPoly( xx, j0phasen, j0phased); - - z = 1.0/y; - modulus = rationalPoly( z, j0modulusn, j0modulusd); - - y = modulus * sin( y - PI_4 + z*phase) / sqrt(y); - return y; -} - -/** - * Bessel function of order one - * - * Returns Bessel function of order one of the argument. - */ -real cylBessel_j1(real x) -{ -/* The domain is divided into the intervals [0, 9] and - * (9, infinity). In the first interval the rational approximation - * is (x^2 - r^2) (x^2 - s^2) (x^2 - t^2) x P8(x^2) / Q8(x^2), - * where r, s, t are the first three zeros of the function. - * In the second interval the expansion is in terms of the - * modulus M1(x) = sqrt(J1(x)^2 + Y1(x)^2) and phase P1(x) - * = atan(Y1(x)/J1(x)). M1 is approximated by sqrt(1/x)P7(1/x)/Q8(1/x). - * The approximation to j1 is M1 * cos(x - 3 pi/4 + 1/x P5(1/x^2)/Q6(1/x^2)). - */ - - real xx, y, z, modulus, phase; - - xx = x * x; - if ( xx < 81.0L ) { - const real [] JZ = [1.46819706421238932572e1L, - 4.92184563216946036703e1L, 1.03499453895136580332e2L]; - y = (xx - JZ[0]) * (xx - JZ[1]) * (xx - JZ[2]); - y *= x * poly( xx, j1n) / poly( xx, j1d); - return y; - } - y = fabs(x); - xx = 1.0/xx; - phase = rationalPoly( xx, j1phasen, j1phased); - z = 1.0/y; - modulus = rationalPoly( z, j1modulusn, j1modulusd); - - const real M_3PI_4 = 3 * PI_4; - - y = modulus * cos( y - M_3PI_4 + z*phase) / sqrt(y); - if( x < 0 ) - y = -y; - return y; -} - -/** - * Bessel function of the second kind, order zero - * - * Returns Bessel function of the second kind, of order - * zero, of the argument. - */ -real cylBessel_y1(real x) -in { - assert(x>=0.0); - // TODO: should it return -infinity for x<0 ? -} -body { -/* The domain is divided into the intervals [0, 4.5>, [4.5,9> and - * [9, infinity). In the first interval a rational approximation - * R(x) is employed to compute y0(x) = R(x) + 2/pi * log(x) * j0(x). - * - * In the second interval, the approximation is - * (x - p)(x - q)(x - r)(x - s)P9(x)/Q10(x) - * where p, q, r, s are zeros of y1(x). - * - * The third interval uses the same approximations to modulus - * and phase as j1(x), whence y1(x) = modulus * sin(phase). - * - * ACCURACY: - * - * Absolute error, when y0(x) < 1; else relative error: - * - * arithmetic domain # trials peak rms - * IEEE 0, 30 36000 2.7e-19 5.3e-20 - * - */ - -// y1(x) = 2/pi * (log(x) * j1(x) - 1/x) + R(x^2) z P(z**2)/Q(z**2) -// 0 <= x <= 4.5, z(x) = x -// Peak error = 7.25e-22. Relative error spread = 4.5e-2 -const real [] y1n = [ -0x1.32cab2601090742p+54, 0x1.432ceb7a8eaeff16p+52, - -0x1.bcebec5a2484d3fap+47, 0x1.cc58f3cb54d6ac66p+41, -0x1.b1255e154d0eec0ep+34, - 0x1.7a337df43298a7c8p+26, -0x1.f77a1afdeff0b62cp+16 -]; - -const real [] y1d = [ 0x1.8733bcfd7236e604p+56, 0x1.5af412c672fd18d4p+50, - 0x1.394ba130685755ep+43, 0x1.7b3321523b24afcp+35, 0x1.52946dac22f61d0cp+27, - 0x1.c9040c6053de5318p+18, 0x1.be5156e6771dba34p+9, 1.0 -]; - - -// y1(x) = (x-YZ1)(x-YZ2)(x-YZ3)(x-YZ4)R(x) P(z)/Q(z) -// z(x) = x, 4.5 <= x <= 9 -// Peak error = 3.27e-22. Relative error spread = 4.5e-2 -const real y159n[] = [ 0x1.2fed87b1e60aa736p+18, -0x1.1a2b18cdb2d1ec5ep+20, - -0x1.b848827f47b47022p+20, -0x1.b2e422305ea19a86p+20, - -0x1.e3f82ac304534676p+16, 0x1.47a2cb5e852d657ep+14, 0x1.81b2fc6e44d7be8p+12, - -0x1.cd861d7b090dd22ep+9, 0x1.588897d683cbfbe2p+5, -0x1.5c7feccf76856bcap-1 -]; - -const real y159d[] = [ 0x1.9b64f2a4d5614462p+26, -0x1.17501e0e38db675ap+30, - 0x1.fe88b567c2911c1cp+31, -0x1.86b1781e04e748d4p+29, 0x1.ccd7d4396f2edbcap+26, - -0x1.694110c682e5cbcap+23, 0x1.c20f7005b88c789ep+19, -0x1.983a5b4275ab7da8p+15, - 0x1.17c60380490fa1fcp+11, -0x1.ee84c254392634d8p+5, 1.0 -]; - - real xx, y, z, modulus, phase; - - z = 1.0/x; - xx = x * x; - if ( xx < 81.0L ) { - if ( xx < 20.25L ) { - y = M_2_PI * (log(x) * cylBessel_j1(x) - z); - y += x * poly( xx, y1n) / poly( xx, y1d); - } else { - const real [] Y1Z = - [ 2.19714132603101703515e0L, 5.42968104079413513277e0L, - 8.59600586833116892643e0L, 1.17491548308398812434e1L]; - y = (x - Y1Z[0])*(x - Y1Z[1])*(x - Y1Z[2])*(x - Y1Z[3]); - y *= rationalPoly( x, y159n, y159d); - } - return y; - } - xx = 1.0/xx; - phase = rationalPoly( xx, j1phasen, j1phased); - modulus = rationalPoly( z, j1modulusn, j1modulusd); - - const real M_3PI_4 = 3 * PI_4; - - z = modulus * sin( x - M_3PI_4 + z*phase) / sqrt(x); - return z; -} - -/** - * Bessel function of integer order - * - * Returns Bessel function of order n, where n is a - * (possibly negative) integer. - * - * The ratio of jn(x) to j0(x) is computed by backward - * recurrence. First the ratio jn/jn-1 is found by a - * continued fraction expansion. Then the recurrence - * relating successive orders is applied until j0 or j1 is - * reached. - * - * If n = 0 or 1 the routine for j0 or j1 is called - * directly. - * - * BUGS: Not suitable for large n or x. - * - */ -real cylBessel_jn(int n, real x ) -{ - real pkm2, pkm1, pk, xk, r, ans; - int k, sign; - - if ( n < 0 ) { - n = -n; - if ( (n & 1) == 0 ) /* -1**n */ - sign = 1; - else - sign = -1; - } else - sign = 1; - - if ( x < 0.0L ) { - if ( n & 1 ) - sign = -sign; - x = -x; - } - - if ( n == 0 ) - return sign * cylBessel_j0(x); - if ( n == 1 ) - return sign * cylBessel_j1(x); - // BUG: This code from Cephes is fast, but it makes the Wronksian test fail. - // (accuracy is 8 bits lower). - // But, the problem might lie in the n = 2 case in cylBessel_yn(). -// if ( n == 2 ) -// return sign * (2.0L * cylBessel_j1(x) / x - cylBessel_j0(x)); - - if ( x < real.epsilon ) - return 0; - - /* continued fraction */ - k = 53; - pk = 2 * (n + k); - ans = pk; - xk = x * x; - - do { - pk -= 2.0L; - ans = pk - (xk/ans); - } while( --k > 0 ); - ans = x/ans; - - /* backward recurrence */ - - pk = 1.0L; - pkm1 = 1.0L/ans; - k = n-1; - r = 2 * k; - - do { - pkm2 = (pkm1 * r - pk * x) / x; - pk = pkm1; - pkm1 = pkm2; - r -= 2.0L; - } while( --k > 0 ); - - if ( fabs(pk) > fabs(pkm1) ) - ans = cylBessel_j1(x)/pk; - else - ans = cylBessel_j0(x)/pkm1; - return sign * ans; -} - -/** - * Bessel function of second kind of integer order - * - * Returns Bessel function of order n, where n is a - * (possibly negative) integer. - * - * The function is evaluated by forward recurrence on - * n, starting with values computed by the routines - * cylBessel_y0() and cylBessel_y1(). - * - * If n = 0 or 1 the routine for cylBessel_y0 or cylBessel_y1 is called - * directly. - */ -real cylBessel_yn(int n, real x) -in { - assert(x>0); // TODO: should it return -infinity for x<=0 ? -} -body { - real an, r; - int k, sign; - - if ( n < 0 ) { - n = -n; - if ( (n & 1) == 0 ) /* -1**n */ - sign = 1; - else - sign = -1; - } else - sign = 1; - - if ( n == 0 ) - return sign * cylBessel_y0(x); - if ( n == 1 ) - return sign * cylBessel_y1(x); - - /* forward recurrence on n */ - real anm2 = cylBessel_y0(x); - real anm1 = cylBessel_y1(x); - k = 1; - r = 2 * k; - do { - an = r * anm1 / x - anm2; - anm2 = anm1; - anm1 = an; - r += 2.0L; - ++k; - } while( k < n ); - return sign * an; -} - -private { -// Evaluate Chebyshev series -double evalCheby(double x, double [] poly) -{ - double b0, b1, b2; - - b0 = poly[$-1]; - b1 = 0.0; - for (int i=poly.length-1; i>=0; --i) { - b2 = b1; - b1 = b0; - b0 = x * b1 - b2 + poly[i]; - } - return 0.5*(b0-b2); -} -} - -/** - * Modified Bessel function of order zero - * - * Returns modified Bessel function of order zero of the - * argument. - * - * The function is defined as i0(x) = j0( ix ). - * - * The range is partitioned into the two intervals [0,8] and - * (8, infinity). Chebyshev polynomial expansions are employed - * in each interval. - */ -double cylBessel_i0(double x) -{ - // Chebyshev coefficients for exp(-x) I0(x) in the interval [0,8]. - // lim(x->0){ exp(-x) I0(x) } = 1. - const double [] A = [ 0x1.5a84e9035a22ap-1, -0x1.37febc057cd8dp-2, - 0x1.5f7ac77ac88c0p-3, -0x1.84b70342d06eap-4, 0x1.93e8acea8a32dp-5, - -0x1.84e9ef121b6f0p-6, 0x1.59961f3dde3ddp-7, -0x1.1b65e201aa849p-8, - 0x1.adc758a12100ep-10, -0x1.2e2fd1f15eb52p-11, 0x1.8b51b74107cabp-13, - -0x1.e2b2659c41d5ap-15, 0x1.13f58be9a2859p-16, -0x1.2866fcba56427p-18, - 0x1.2bf24978cf4acp-20, -0x1.1ec638f227f8dp-22, 0x1.03b769d4d6435p-24, - -0x1.beaf68c0b30abp-27, 0x1.6d903a454cb34p-29, -0x1.1d4fe13ae9556p-31, - 0x1.a98becc743c10p-34, -0x1.2fc957a946abcp-36, 0x1.9fe2fe19bd324p-39, - -0x1.1164c62ee1af0p-41, 0x1.59b464b262627p-44, -0x1.a5022c297fbebp-47, - 0x1.ee6d893f65ebap-50, -0x1.184eb721ebbb4p-52, 0x1.33362977da589p-55, - -0x1.45cb72134d0efp-58 ]; - - // Chebyshev coefficients for exp(-x) sqrt(x) I0(x) - // in the inverted interval [8,infinity]. - // lim(x->inf){ exp(-x) sqrt(x) I0(x) } = 1/sqrt(2pi). - const double [] B = [ 0x1.9be62aca809cbp-1, 0x1.b998ca2e59049p-9, - 0x1.20fa378999e52p-14, 0x1.8412bc101c586p-19, 0x1.b8007d9cd616ep-23, - 0x1.8569280d6d56dp-26, 0x1.d2c64a9225b87p-29, 0x1.0f9ccc0f46f75p-31, - 0x1.a24feabe8004fp-37, -0x1.1511d08397425p-35, -0x1.d0fd7357e7bf2p-37, - -0x1.f904303178d66p-40, 0x1.94347fa268cecp-41, 0x1.b1c8c6b83c073p-42, - 0x1.156ff0d5fc545p-46, -0x1.75d99cf68bb32p-45, -0x1.583fe7e65629ap-47, - 0x1.12a919094e6d7p-48, 0x1.fee7da3eafb1fp-50, -0x1.8aee7d908de38p-52, - -0x1.4600babd21fe4p-52, 0x1.3f3dd076041cdp-55, 0x1.9be1812d98421p-55, - -0x1.646da66119130p-58, -0x1.0adb754ca8b19p-57 ]; - - double y; - - if (x < 0) - x = -x; - if (x <= 8.0) { - y = (x/2.0) - 2.0; - return exp(x) * evalCheby( y, A); - } - return exp(x) * evalCheby( 32.0/x - 2.0, B) / sqrt(x); -} - -/** - * Modified Bessel function of order one - * - * Returns modified Bessel function of order one of the - * argument. - * - * The function is defined as i1(x) = -i j1( ix ). - * - * The range is partitioned into the two intervals [0,8] and - * (8, infinity). Chebyshev polynomial expansions are employed - * in each interval. -*/ -double cylBessel_i1(double x) -{ - const double [] A = [ 0x1.02a63724a7ffap-2, -0x1.694d10469192ep-3, - 0x1.a46dad536f53cp-4, -0x1.b1bbc537c9ebcp-5, 0x1.951e3e7bb2349p-6, - -0x1.5a29f7913a26ap-7, 0x1.1065349d3a1b4p-8, -0x1.8cc620b3cd4a4p-10, - 0x1.0c95db6c6df7dp-11, -0x1.533cad3d694fep-13, 0x1.911b542c70d0bp-15, - -0x1.bd5f9b8debbcfp-17, 0x1.d1c4ed511afc5p-19, -0x1.cc0798363992ap-21, - 0x1.ae344b347d108p-23, -0x1.7dd3e24b8c3e8p-25, 0x1.4258e02395010p-27, - -0x1.0361b28ea67e6p-29, 0x1.8ea34b43fdf6cp-32, -0x1.2510397eb07dep-34, - 0x1.9cee2b21d3154p-37, -0x1.173835fb70366p-39, 0x1.6af784779d955p-42, - -0x1.c628e1c8f0b3bp-45, 0x1.11d7f0615290cp-47, -0x1.3eaaa7e0d1573p-50, - 0x1.663e3e593bfacp-53, -0x1.857d0c38a0576p-56, 0x1.99f2a0c3c4014p-59 - ]; - - // Chebyshev coefficients for exp(-x) sqrt(x) I1(x) - // in the inverted interval [8,infinity]. - // lim(x->inf){ exp(-x) sqrt(x) I1(x) } = 1/sqrt(2pi). - const double [] B = [ 0x1.8ea18b55b1514p-1, -0x1.3fda053fcdb4cp-7, - -0x1.cfd7f804aa9a6p-14, -0x1.048df49ca0373p-18, -0x1.0dbfd2e9e5443p-22, - -0x1.c415394bb46c1p-26, -0x1.0790b9ad53528p-28, -0x1.334ca5423dd80p-31, - -0x1.4dcf9d4504c0cp-36, 0x1.1e1a1f1587865p-35, 0x1.f101f653c457bp-37, - 0x1.1e7d3f6439fa3p-39, -0x1.953e1076ab493p-41, -0x1.cbc458e73e255p-42, - -0x1.7a9482e6d22a0p-46, 0x1.80d3c26b3281ep-45, 0x1.776e1762d31e8p-47, - -0x1.12db5138afbc7p-48, -0x1.0efcd8bc4d22ap-49, 0x1.7d68e5f04a2d1p-52, - 0x1.55915fceb588ap-52, -0x1.2806c9c773320p-55, -0x1.acea3b2532277p-55, - 0x1.45b8aea87b950p-58, 0x1.1556db352e8e6p-57 ]; - - double y, z; - - z = fabs(x); - if( z <= 8.0 ) { - y = (z/2.0) - 2.0; - z = evalCheby( y, A ) * z * exp(z); - } else { - z = exp(z) * evalCheby( 32.0/z - 2.0, B ) / sqrt(z); - } - if (x < 0.0 ) - z = -z; - return z; -} - -debug(UnitTest) { - -unittest { - // argument, result1, result2, derivative. Correct result is result1+result2. -const real [4][] j0_test_points = [ - [8.0L, 1.71646118164062500000E-1L, 4.68897349140609086941E-6L, -2.34636346853914624381E-1L], - [4.54541015625L, -3.09783935546875000000E-1L, 7.07472668157686463367E-6L, 2.42993657373627558460E-1L], - [2.85711669921875L, -2.07901000976562500000E-1L, 1.15237285263902751582E-5L, -3.90402225324501311651E-1L], - [2.0L, 2.23876953125000000000E-1L, 1.38260162356680518275E-5L, -5.76724807756873387202E-1L], - [1.16415321826934814453125e-10L, 9.99984741210937500000E-1L, 1.52587890624999966119E-5L, - 9.99999999999999999997E-1L], - [-2.0L, 2.23876953125000000000E-1L, - 1.38260162356680518275E-5L, 5.76724807756873387202E-1L] -]; - -const real [4][] y0_test_points = [ - [ 8.0L, 2.23510742187500000000E-1L, 1.07472000662205273234E-5L, 1.58060461731247494256E-1L], - [4.54541015625L, -2.08114624023437500000E-1L, 1.45018823856668874574E-5L, -2.88887645307401250876E-1L], - [2.85711669921875L, 4.20303344726562500000E-1L, 1.32781607563122276008E-5L, -2.82488638474982469213E-1], - [2.0L, 5.10360717773437500000E-1L, 1.49548763076195966066E-5L, 1.07032431540937546888E-1L], - [1.16415321826934814453125e-10L, -1.46357574462890625000E1L, 3.54110537011061127637E-6L, - 5.46852220461145271913E9L] -]; - -const real [4][] j1_test_points = [ - [ 8.0L, 2.34634399414062500000E-1L, 1.94743985212438127665E-6L,1.42321263780814578043E-1], - [4.54541015625L, -2.42996215820312500000E-1L, 2.55844668494153980076E-6L, -2.56317734136211337012E-1], - [2.85711669921875L, 3.90396118164062500000E-1L, 6.10716043881165077013E-6L, -3.44531507106757980441E-1L], - [2.0L, 5.76721191406250000000E-1L, 3.61635062338720244824E-6L, -6.44716247372010255494E-2L], - [1.16415321826934814453125e-10L, 5.820677273504770710133016109466552734375e-11L, - 8.881784197001251337312921818461805735896e-16L, 4.99999999999999999997E-1L], - [-2.0L, -5.76721191406250000000E-1L, -3.61635062338720244824E-6L, -6.44716247372010255494E-2L] -]; - -const real [4][] y1_test_points = [ - [8.0L, -1.58065795898437500000E-1L, - 5.33416719000574444473E-6L, 2.43279047103972157309E-1L], - [4.54541015625L, 2.88879394531250000000E-1L, - 8.25077615125087585195E-6L, -2.71656024771791736625E-1L], - [2.85711669921875L, 2.82485961914062500000E-1, - 2.67656091996921314433E-6L, 3.21444694221532719737E-1], - [2.0L, -1.07040405273437500000E-1L, - 7.97373249995311162923E-6L, 5.63891888420213893041E-1], - [1.16415321826934814453125e-10L, -5.46852220500000000000E9L, - 3.88547280871200700671E-1L, 4.69742480525120196168E19L] -]; - - foreach(real [4] t; j0_test_points) { - assert(feqrel(cylBessel_j0(t[0]), t[1]+t[2]) >=real.mant_dig-3); - } - - foreach(real [4] t; y0_test_points) { - assert(feqrel(cylBessel_y0(t[0]), t[1]+t[2]) >=real.mant_dig-4); - } - foreach(real [4] t; j1_test_points) { - assert(feqrel(cylBessel_j1(t[0]), t[1]+t[2]) >=real.mant_dig-3); - } - - foreach(real [4] t; y1_test_points) { - assert(feqrel(cylBessel_y1(t[0]), t[1]+t[2]) >=real.mant_dig-4); - } - - // Values from MS Excel, of doubtful accuracy. - assert(fabs(-0.060_409_940_421_649 - cylBessel_j0(173.5)) < 0.000_000_000_1); - assert(fabs(-0.044_733_447_576_5866 - cylBessel_y0(313.25)) < 0.000_000_000_1); - assert(fabs(0.00391280088318945 - cylBessel_j1(123.25)) < 0.000_000_000_1); - assert(fabs(-0.0648628570878951 - cylBessel_j1(-91)) < 0.000_000_000_1); - assert(fabs(-0.0759578537652805 - cylBessel_y1(107.75)) < 0.000_000_000_1); - - assert(fabs(13.442_456_516_6771-cylBessel_i0(4.2)) < 0.000_001); - assert(fabs(1.6500020842093e+28-cylBessel_i0(-68)) < 0.000_001e+28); - assert(fabs(4.02746515903173e+10-cylBessel_i1(27)) < 0.000_001e+10); - assert(fabs(-2.83613942886386e-02-cylBessel_i1(-0.0567)) < 0.000_000_001e-2); -} -} - -debug(UnitTest) { - -unittest { - - // Wronksian test for Bessel functions - void testWronksian(int n, real x) - { - real Jnp1 = cylBessel_jn(n + 1, x); - real Jmn = cylBessel_jn(-n, x); - real Jn = cylBessel_jn(n, x); - real Jmnp1 = cylBessel_jn(-(n + 1), x); - /* This should be trivially zero. */ - assert( fabs(Jnp1 * Jmn + Jn * Jmnp1) == 0); - if (x < 0.0) { - x = -x; - Jn = cylBessel_jn(n, x); - Jnp1 = cylBessel_jn(n + 1, x); - } - real Yn = cylBessel_yn(n, x); - real Ynp1 = cylBessel_yn(n + 1, x); - /* The Wronksian. */ - real w1 = Jnp1 * Yn - Jn * Ynp1; - /* What the Wronksian should be. */ - real w2 = 2.0 / (PI * x); - - real reldif = feqrel(w1, w2); - assert(reldif >= real.mant_dig-6); - } - - real delta; - int n, i, j; - - delta = 0.6 / PI; - for (n = -30; n <= 30; n++) { - real x = -30.0; - while (x < 30.0) { - testWronksian (n, x); - x += delta; - } - delta += .00123456; - } - assert(cylBessel_jn(20, 1e-80)==0); - - // NaN propagation - assert(isIdentical(cylBessel_i1(NaN(0xDEF)), NaN(0xDEF))); - assert(isIdentical(cylBessel_i0(NaN(0x846)), NaN(0x846))); - -} - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/Elliptic.d --- a/tango/tango/math/Elliptic.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -/** - * Elliptic integrals. - * The functions are named similarly to the names used in Mathematica. - * - * License: BSD style: $(LICENSE) - * Copyright: Based on the CEPHES math library, which is - * Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com). - * Authors: Stephen L. Moshier (original C code). Conversion to D by Don Clugston - * - * References: - * $(LINK http://en.wikipedia.org/wiki/Elliptic_integral) - * - * Eric W. Weisstein. "Elliptic Integral of the First Kind." From MathWorld--A Wolfram Web Resource. $(LINK http://mathworld.wolfram.com/EllipticIntegraloftheFirstKind.html) - * - * $(LINK http://www.netlib.org/cephes/ldoubdoc.html) - * - * Macros: - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - * GAMMA = Γ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * NAN = $(RED NAN) - */ -/** - * Macros: - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - * - * NAN = $(RED NAN) - * SUP = $0 - * GAMMA = Γ - * INTEGRAL = ∫ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * BIGSUM = $(BIG Σ $2$(SMALL $1)) - * CHOOSE = $(BIG () $(SMALL $1)$(SMALL $2) $(BIG )) - */ - -module tango.math.Elliptic; - -import tango.math.Math; -import tango.math.IEEE; - -/* These functions are based on code from: -Cephes Math Library, Release 2.3: October, 1995 -Copyright 1984, 1987, 1995 by Stephen L. Moshier -*/ - - -/** - * Incomplete elliptic integral of the first kind - * - * Approximates the integral - * F(phi | m) = $(INTEGRATE 0, phi) dt/ (sqrt( 1- m $(POWER sin, 2) t)) - * - * of amplitude phi and modulus m, using the arithmetic - - * geometric mean algorithm. - */ - -real ellipticF(real phi, real m ) -{ - real a, b, c, e, temp, t, K; - int d, mod, sign, npio2; - - if( m == 0.0L ) - return phi; - a = 1.0L - m; - if( a == 0.0L ) { - if ( fabs(phi) >= PI_2 ) return real.infinity; - return log( tan( 0.5L*(PI_2 + phi) ) ); - } - npio2 = cast(int)floor( phi/PI_2 ); - if ( npio2 & 1 ) - npio2 += 1; - if ( npio2 ) { - K = ellipticKComplete( a ); - phi = phi - npio2 * PI_2; - } else - K = 0.0L; - if( phi < 0.0L ){ - phi = -phi; - sign = -1; - } else - sign = 0; - b = sqrt(a); - t = tan( phi ); - if( fabs(t) > 10.0L ) { - /* Transform the amplitude */ - e = 1.0L/(b*t); - /* ... but avoid multiple recursions. */ - if( fabs(e) < 10.0L ){ - e = atan(e); - if( npio2 == 0 ) - K = ellipticKComplete( a ); - temp = K - ellipticF( e, m ); - goto done; - } - } - a = 1.0L; - c = sqrt(m); - d = 1; - mod = 0; - - while( fabs(c/a) > real.epsilon ) { - temp = b/a; - phi = phi + atan(t*temp) + mod * PI; - mod = cast(int)((phi + PI_2)/PI); - t = t * ( 1.0L + temp )/( 1.0L - temp * t * t ); - c = 0.5L * ( a - b ); - temp = sqrt( a * b ); - a = 0.5L * ( a + b ); - b = temp; - d += d; - } - temp = (atan(t) + mod * PI)/(d * a); - -done: - if ( sign < 0 ) - temp = -temp; - temp += npio2 * K; - return temp; -} - - -/** - * Incomplete elliptic integral of the second kind - * - * Approximates the integral - * - * E(phi | m) = $(INTEGRATE 0, phi) sqrt( 1- m $(POWER sin, 2) t) dt - * - * of amplitude phi and modulus m, using the arithmetic - - * geometric mean algorithm. - */ - -real ellipticE(real phi, real m ) -{ - real a, b, c, e, temp, t, E; - int d, mod, npio2, sign; - - if ( m == 0.0L ) return phi; - real lphi = phi; - npio2 = cast(int)floor( lphi/PI_2 ); - if( npio2 & 1 ) - npio2 += 1; - lphi = lphi - npio2 * PI_2; - if( lphi < 0.0L ){ - lphi = -lphi; - sign = -1; - } else { - sign = 1; - } - a = 1.0L - m; - E = ellipticEComplete( a ); - if( a == 0.0L ) { - temp = sin( lphi ); - goto done; - } - t = tan( lphi ); - b = sqrt(a); - if ( fabs(t) > 10.0L ) { - /* Transform the amplitude */ - e = 1.0L/(b*t); - /* ... but avoid multiple recursions. */ - if( fabs(e) < 10.0L ){ - e = atan(e); - temp = E + m * sin( lphi ) * sin( e ) - ellipticE( e, m ); - goto done; - } - } - c = sqrt(m); - a = 1.0L; - d = 1; - e = 0.0L; - mod = 0; - - while( fabs(c/a) > real.epsilon ) { - temp = b/a; - lphi = lphi + atan(t*temp) + mod * PI; - mod = cast(int)((lphi + PI_2)/PI); - t = t * ( 1.0L + temp )/( 1.0L - temp * t * t ); - c = 0.5L*( a - b ); - temp = sqrt( a * b ); - a = 0.5L*( a + b ); - b = temp; - d += d; - e += c * sin(lphi); - } - - temp = E / ellipticKComplete( 1.0L - m ); - temp *= (atan(t) + mod * PI)/(d * a); - temp += e; - -done: - if( sign < 0 ) - temp = -temp; - temp += npio2 * E; - return temp; -} - - -/** - * Complete elliptic integral of the first kind - * - * Approximates the integral - * - * K(m) = $(INTEGRATE 0, &pi/2) dt/ (sqrt( 1- m $(POWER sin, 2) t)) - * - * where m = 1 - x, using the approximation - * - * P(x) - log x Q(x). - * - * The argument x is used rather than m so that the logarithmic - * singularity at x = 1 will be shifted to the origin; this - * preserves maximum accuracy. - * - * x must be in the range - * 0 <= x <= 1 - * - * This is equivalent to ellipticF(PI_2, 1-x). - * - * K(0) = &pi/2. - */ - -real ellipticKComplete(real x) -in { -// assert(x>=0.0L && x<=1.0L); -} -body{ - -const real [] P = [ - 0x1.62e42fefa39ef35ap+0, // 1.3862943611198906189 - 0x1.8b90bfbe8ed811fcp-4, // 0.096573590279993142323 - 0x1.fa05af797624c586p-6, // 0.030885144578720423267 - 0x1.e979cdfac7249746p-7, // 0.01493761594388688915 - 0x1.1f4cc8890cff803cp-7, // 0.0087676982094322259125 - 0x1.7befb3bb1fa978acp-8, // 0.0057973684116620276454 - 0x1.2c2566aa1d5fe6b8p-8, // 0.0045798659940508010431 - 0x1.7333514e7fe57c98p-8, // 0.0056640695097481470287 - 0x1.09292d1c8621348cp-7, // 0.0080920667906392630755 - 0x1.b89ab5fe793a6062p-8, // 0.0067230886765842542487 - 0x1.28e9c44dc5e26e66p-9, // 0.002265267575136470585 - 0x1.c2c43245d445addap-13, // 0.00021494216542320112406 - 0x1.4ee247035a03e13p-20 // 1.2475397291548388385e-06 -]; - -const real [] Q = [ - 0x1p-1, // 0.5 - 0x1.fffffffffff635eap-4, // 0.12499999999999782631 - 0x1.1fffffff8a2bea1p-4, // 0.070312499993302227507 - 0x1.8ffffe6f40ec2078p-5, // 0.04882812208418620146 - 0x1.323f4dbf7f4d0c2ap-5, // 0.037383701182969303058 - 0x1.efe8a028541b50bp-6, // 0.030267864612427881354 - 0x1.9d58c49718d6617cp-6, // 0.025228683455123323041 - 0x1.4d1a8d2292ff6e2ep-6, // 0.020331037356569904872 - 0x1.b637687027d664aap-7, // 0.013373304362459048444 - 0x1.687a640ae5c71332p-8, // 0.0055004591221382442135 - 0x1.0f9c30a94a1dcb4ep-10, // 0.001036110372590318803 - 0x1.d321746708e92d48p-15 // 5.568631677757315399e-05 -]; - - const real LOG4 = 0x1.62e42fefa39ef358p+0; // log(4) - - if( x > real.epsilon ) - return poly(x,P) - log(x) * poly(x,Q); - if ( x == 0.0L ) - return real.infinity; - return LOG4 - 0.5L * log(x); -} - -/** - * Complete elliptic integral of the second kind - * - * Approximates the integral - * - * E(m) = $(INTEGRATE 0, &pi/2) sqrt( 1- m $(POWER sin, 2) t) dt - * - * Where m = 1 - m1, using the approximation - * - * P(x) - x log x Q(x). - * - * Though there are no singularities, the argument m1 is used - * rather than m for compatibility with ellipticKComplete(). - * - * E(1) = 1; E(0) = &pi/2. - * m must be in the range 0 <= m <= 1. - */ - -real ellipticEComplete(real x) -in { - assert(x>=0 && x<=1.0); -} -body { -const real [] P = [ - 0x1.c5c85fdf473f78f2p-2, // 0.44314718055994670505 - 0x1.d1591f9e9a66477p-5, // 0.056805192715569305834 - 0x1.65af6a7a61f587cp-6, // 0.021831373198011179718 - 0x1.7a4d48ed00d5745ap-7, // 0.011544857605264509506 - 0x1.d4f5fe4f93b60688p-8, // 0.0071557756305783152481 - 0x1.4cb71c73bac8656ap-8, // 0.0050768322432573952962 - 0x1.4a9167859a1d0312p-8, // 0.0050440671671840438539 - 0x1.dd296daa7b1f5b7ap-8, // 0.0072809117068399675418 - 0x1.04f2c29224ba99b6p-7, // 0.0079635095646944542686 - 0x1.0f5820e2d80194d8p-8, // 0.0041403847015715420009 - 0x1.95ee634752ca69b6p-11, // 0.00077425232385887751162 - 0x1.0c58aa9ab404f4fp-15 // 3.1989378120323412946e-05 -]; - -const real [] Q = [ - 0x1.ffffffffffffb1cep-3, // 0.24999999999999986434 - 0x1.7ffffffff29eaa0cp-4, // 0.093749999999239422678 - 0x1.dfffffbd51eb098p-5, // 0.058593749514839092674 - 0x1.5dffd791cb834c92p-5, // 0.04272453406734691973 - 0x1.1397b63c2f09a8ep-5, // 0.033641677787700181541 - 0x1.c567cde5931e75bcp-6, // 0.02767367465121309044 - 0x1.75e0cae852be9ddcp-6, // 0.022819708015315777007 - 0x1.12bb968236d4e434p-6, // 0.016768357258894633433 - 0x1.1f6572c1c402d07cp-7, // 0.0087706384979640787504 - 0x1.452c6909f88b8306p-9, // 0.0024808767529843311337 - 0x1.1f7504e72d664054p-12, // 0.00027414045912208516032 - 0x1.ad17054dc46913e2p-18 // 6.3939381343012054851e-06 -]; - if (x==0) - return 1.0L; - return 1.0L + x * poly(x,P) - log(x) * (x * poly(x,Q) ); -} - -unittest { - assert( ellipticF(1, 0)==1); - assert(ellipticEComplete(0)==1); - assert(ellipticEComplete(1)==PI_2); - assert(feqrel(ellipticKComplete(1),PI_2)>= real.mant_dig-1); - assert(ellipticKComplete(0)==real.infinity); -// assert(ellipticKComplete(1)==0); //-real.infinity); - - real x=0.5653L; - assert(ellipticKComplete(1-x) == ellipticF(PI_2, x) ); - assert(ellipticEComplete(1-x) == ellipticE(PI_2, x) ); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/ErrorFunction.d --- a/tango/tango/math/ErrorFunction.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,466 +0,0 @@ -/** - * Error Functions and Normal Distribution. - * - * Copyright: Copyright (C) 1984, 1995, 2000 Stephen L. Moshier - * Code taken from the Cephes Math Library Release 2.3: January, 1995 - * License: BSD style: $(LICENSE) - * Authors: Stephen L. Moshier, ported to D by Don Clugston - */ -/** - * Macros: - * NAN = $(RED NAN) - * SUP = $0 - * GAMMA = Γ - * INTEGRAL = ∫ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * BIGSUM = $(BIG Σ $2$(SMALL $1)) - * CHOOSE = $(BIG () $(SMALL $1)$(SMALL $2) $(BIG )) - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - */ -module tango.math.ErrorFunction; - -import tango.math.Math; -import tango.math.IEEE; // only required for unit tests - -version(Windows) { // Some tests only pass on DMD Windows - version(DigitalMars) { - version = FailsOnLinux; -} -} - -const real SQRT2PI = 0x1.40d931ff62705966p+1L; // 2.5066282746310005024 -const real EXP_2 = 0.13533528323661269189L; /* exp(-2) */ - -private { - -/* erfc(x) = exp(-x^2) P(1/x)/Q(1/x) - 1/8 <= 1/x <= 1 - Peak relative error 5.8e-21 */ -const real [] P = [ -0x1.30dfa809b3cc6676p-17, 0x1.38637cd0913c0288p+18, - 0x1.2f015e047b4476bp+22, 0x1.24726f46aa9ab08p+25, 0x1.64b13c6395dc9c26p+27, - 0x1.294c93046ad55b5p+29, 0x1.5962a82f92576dap+30, 0x1.11a709299faba04ap+31, - 0x1.11028065b087be46p+31, 0x1.0d8ef40735b097ep+30 -]; - -const real [] Q = [ 0x1.14d8e2a72dec49f4p+19, 0x1.0c880ff467626e1p+23, - 0x1.04417ef060b58996p+26, 0x1.404e61ba86df4ebap+28, 0x1.0f81887bc82b873ap+30, - 0x1.4552a5e39fb49322p+31, 0x1.11779a0ceb2a01cep+32, 0x1.3544dd691b5b1d5cp+32, - 0x1.a91781f12251f02ep+31, 0x1.0d8ef3da605a1c86p+30, 1.0 -]; - - -/* erfc(x) = exp(-x^2) 1/x R(1/x^2) / S(1/x^2) - 1/128 <= 1/x < 1/8 - Peak relative error 1.9e-21 */ -const real [] R = [ 0x1.b9f6d8b78e22459ep-6, 0x1.1b84686b0a4ea43ap-1, - 0x1.b8f6aebe96000c2ap+1, 0x1.cb1dbedac27c8ec2p+2, 0x1.cf885f8f572a4c14p+1 -]; - -const real [] S = [ - 0x1.87ae3cae5f65eb5ep-5, 0x1.01616f266f306d08p+0, 0x1.a4abe0411eed6c22p+2, - 0x1.eac9ce3da600abaap+3, 0x1.5752a9ac2faebbccp+3, 1.0 -]; - -/* erf(x) = x P(x^2)/Q(x^2) - 0 <= x <= 1 - Peak relative error 7.6e-23 */ -const real [] T = [ 0x1.0da01654d757888cp+20, 0x1.2eb7497bc8b4f4acp+17, - 0x1.79078c19530f72a8p+15, 0x1.4eaf2126c0b2c23p+11, 0x1.1f2ea81c9d272a2ep+8, - 0x1.59ca6e2d866e625p+2, 0x1.c188e0b67435faf4p-4 -]; - -const real [] U = [ 0x1.dde6025c395ae34ep+19, 0x1.c4bc8b6235df35aap+18, - 0x1.8465900e88b6903ap+16, 0x1.855877093959ffdp+13, 0x1.e5c44395625ee358p+9, - 0x1.6a0fed103f1c68a6p+5, 1.0 -]; - -} - -/** - * Complementary error function - * - * erfc(x) = 1 - erf(x), and has high relative accuracy for - * values of x far from zero. (For values near zero, use erf(x)). - * - * 1 - erf(x) = 2/ $(SQRT)(π) - * $(INTEGRAL x, $(INFINITY)) exp( - $(POWER t, 2)) dt - * - * - * For small x, erfc(x) = 1 - erf(x); otherwise rational - * approximations are computed. - * - * A special function expx2(x) is used to suppress error amplification - * in computing exp(-x^2). - */ -real erfc(real a) -{ - if (a == real.infinity) - return 0.0; - if (a == -real.infinity) - return 2.0; - - real x; - - if (a < 0.0L ) - x = -a; - else - x = a; - if (x < 1.0) - return 1.0 - erf(a); - - real z = -a * a; - - if (z < -MAXLOG){ -// mtherr( "erfcl", UNDERFLOW ); - if (a < 0) return 2.0; - else return 0.0; - } - - /* Compute z = exp(z). */ - z = expx2(a, -1); - real y = 1.0/x; - - real p, q; - - if( x < 8.0 ) y = z * rationalPoly(y, P, Q); - else y = z * y * rationalPoly(y * y, R, S); - - if (a < 0.0L) - y = 2.0L - y; - - if (y == 0.0) { -// mtherr( "erfcl", UNDERFLOW ); - if (a < 0) return 2.0; - else return 0.0; - } - - return y; -} - - -private { -/* Exponentially scaled erfc function - exp(x^2) erfc(x) - valid for x > 1. - Use with normalDistribution and expx2. */ - -real erfce(real x) -{ - real p, q; - - real y = 1.0/x; - - if (x < 8.0) { - return rationalPoly( y, P, Q); - } else { - return y * rationalPoly(y*y, R, S); - } -} - -} - -/** - * Error function - * - * The integral is - * - * erf(x) = 2/ $(SQRT)(π) - * $(INTEGRAL 0, x) exp( - $(POWER t, 2)) dt - * - * The magnitude of x is limited to about 106.56 for IEEE 80-bit - * arithmetic; 1 or -1 is returned outside this range. - * - * For 0 <= |x| < 1, a rational polynomials are used; otherwise - * erf(x) = 1 - erfc(x). - * - * ACCURACY: - * Relative error: - * arithmetic domain # trials peak rms - * IEEE 0,1 50000 2.0e-19 5.7e-20 - */ -real erf(real x) -{ - if (x == 0.0) - return x; // deal with negative zero - if (x == -real.infinity) - return -1.0; - if (x == real.infinity) - return 1.0; - if (abs(x) > 1.0L) - return 1.0L - erfc(x); - - real z = x * x; - return x * rationalPoly(z, T, U); -} - -debug(UnitTest) { -unittest { - // High resolution test points. - const real erfc0_250 = 0.723663330078125 + 1.0279753638067014931732235184287934646022E-5; - const real erfc0_375 = 0.5958709716796875 + 1.2118885490201676174914080878232469565953E-5; - const real erfc0_500 = 0.4794921875 + 7.9346869534623172533461080354712635484242E-6; - const real erfc0_625 = 0.3767547607421875 + 4.3570693945275513594941232097252997287766E-6; - const real erfc0_750 = 0.2888336181640625 + 1.0748182422368401062165408589222625794046E-5; - const real erfc0_875 = 0.215911865234375 + 1.3073705765341685464282101150637224028267E-5; - const real erfc1_000 = 0.15728759765625 + 1.1609394035130658779364917390740703933002E-5; - const real erfc1_125 = 0.111602783203125 + 8.9850951672359304215530728365232161564636E-6; - - const real erf0_875 = (1-0.215911865234375) - 1.3073705765341685464282101150637224028267E-5; - - - assert(feqrel(erfc(0.250L), erfc0_250 )>=real.mant_dig-1); - assert(feqrel(erfc(0.375L), erfc0_375 )>=real.mant_dig-0); - assert(feqrel(erfc(0.500L), erfc0_500 )>=real.mant_dig-1); - assert(feqrel(erfc(0.625L), erfc0_625 )>=real.mant_dig-1); - assert(feqrel(erfc(0.750L), erfc0_750 )>=real.mant_dig-1); - assert(feqrel(erfc(0.875L), erfc0_875 )>=real.mant_dig-4); - version(FailsOnLinux) assert(feqrel(erfc(1.000L), erfc1_000 )>=real.mant_dig-0); - assert(feqrel(erfc(1.125L), erfc1_125 )>=real.mant_dig-2); - assert(feqrel(erf(0.875L), erf0_875 )>=real.mant_dig-1); - // The DMC implementation of erfc() fails this next test (just) - assert(feqrel(erfc(4.1L),0.67000276540848983727e-8L)>=real.mant_dig-4); - - assert(isIdentical(erf(0.0),0.0)); - assert(isIdentical(erf(-0.0),-0.0)); - assert(erf(real.infinity) == 1.0); - assert(erf(-real.infinity) == -1.0); - assert(isIdentical(erf(NaN(0xDEF)),NaN(0xDEF))); - assert(isIdentical(erfc(NaN(0xDEF)),NaN(0xDEF))); - assert(isIdentical(erfc(real.infinity),0.0)); - assert(erfc(-real.infinity) == 2.0); - assert(erfc(0) == 1.0); -} -} - -/* - * Exponential of squared argument - * - * Computes y = exp(x*x) while suppressing error amplification - * that would ordinarily arise from the inexactness of the - * exponential argument x*x. - * - * If sign < 0, the result is inverted; i.e., y = exp(-x*x) . - * - * ACCURACY: - * Relative error: - * arithmetic domain # trials peak rms - * IEEE -106.566, 106.566 10^5 1.6e-19 4.4e-20 - */ - -real expx2(real x, int sign) -{ - /* - Cephes Math Library Release 2.9: June, 2000 - Copyright 2000 by Stephen L. Moshier - */ - const real M = 32768.0; - const real MINV = 3.0517578125e-5L; - - x = abs(x); - if (sign < 0) - x = -x; - - /* Represent x as an exact multiple of M plus a residual. - M is a power of 2 chosen so that exp(m * m) does not overflow - or underflow and so that |x - m| is small. */ - real m = MINV * floor(M * x + 0.5L); - real f = x - m; - - /* x^2 = m^2 + 2mf + f^2 */ - real u = m * m; - real u1 = 2 * m * f + f * f; - - if (sign < 0) { - u = -u; - u1 = -u1; - } - - if ((u+u1) > MAXLOG) - return real.infinity; - - /* u is exact, u1 is small. */ - return exp(u) * exp(u1); -} - - -package { -/* -Computes the normal distribution function. - -The normal (or Gaussian, or bell-shaped) distribution is -defined as: - -normalDist(x) = 1/$(SQRT) π $(INTEGRAL -$(INFINITY), x) exp( - $(POWER t, 2)/2) dt - = 0.5 + 0.5 * erf(x/sqrt(2)) - = 0.5 * erfc(- x/sqrt(2)) - -To maintain accuracy at high values of x, use -normalDistribution(x) = 1 - normalDistribution(-x). - -Accuracy: -Within a few bits of machine resolution over the entire -range. - -References: -$(LINK http://www.netlib.org/cephes/ldoubdoc.html), -G. Marsaglia, "Evaluating the Normal Distribution", -Journal of Statistical Software 11, (July 2004). -*/ -real normalDistributionImpl(real a) -{ - real x = a * SQRT1_2; - real z = abs(x); - - if( z < 1.0 ) - return 0.5L + 0.5L * erf(x); - else { - /* See below for erfce. */ - real y = 0.5L * erfce(z); - /* Multiply by exp(-x^2 / 2) */ - z = expx2(a, -1); - y = y * sqrt(z); - if( x > 0.0L ) - y = 1.0L - y; - return y; - } -} - -} - -debug(UnitTest) { -unittest { -assert(fabs(normalDistributionImpl(1L) - (0.841344746068543))< 0.0000000000000005); -assert(isIdentical(normalDistributionImpl(NaN(0x325)), NaN(0x325))); -} -} - -package { -/* - * Inverse of Normal distribution function - * - * Returns the argument, x, for which the area under the - * Normal probability density function (integrated from - * minus infinity to x) is equal to p. - * - * For small arguments 0 < p < exp(-2), the program computes - * z = sqrt( -2 log(p) ); then the approximation is - * x = z - log(z)/z - (1/z) P(1/z) / Q(1/z) . - * For larger arguments, x/sqrt(2 pi) = w + w^3 R(w^2)/S(w^2)) , - * where w = p - 0.5 . - */ -real normalDistributionInvImpl(real p) -in { - assert(p>=0.0L && p<=1.0L, "Domain error"); -} -body -{ -const real P0[] = [ -0x1.758f4d969484bfdcp-7, 0x1.53cee17a59259dd2p-3, - -0x1.ea01e4400a9427a2p-1, 0x1.61f7504a0105341ap+1, -0x1.09475a594d0399f6p+2, - 0x1.7c59e7a0df99e3e2p+1, -0x1.87a81da52edcdf14p-1, 0x1.1fb149fd3f83600cp-7 -]; - -const real Q0[] = [ -0x1.64b92ae791e64bb2p-7, 0x1.7585c7d597298286p-3, - -0x1.40011be4f7591ce6p+0, 0x1.1fc067d8430a425ep+2, -0x1.21008ffb1e7ccdf2p+3, - 0x1.3d1581cf9bc12fccp+3, -0x1.53723a89fd8f083cp+2, 1.0 -]; - -const real P1[] = [ 0x1.20ceea49ea142f12p-13, 0x1.cbe8a7267aea80bp-7, - 0x1.79fea765aa787c48p-2, 0x1.d1f59faa1f4c4864p+1, 0x1.1c22e426a013bb96p+4, - 0x1.a8675a0c51ef3202p+5, 0x1.75782c4f83614164p+6, 0x1.7a2f3d90948f1666p+6, - 0x1.5cd116ee4c088c3ap+5, 0x1.1361e3eb6e3cc20ap+2 -]; - -const real Q1[] = [ 0x1.3a4ce1406cea98fap-13, 0x1.f45332623335cda2p-7, - 0x1.98f28bbd4b98db1p-2, 0x1.ec3b24f9c698091cp+1, 0x1.1cc56ecda7cf58e4p+4, - 0x1.92c6f7376bf8c058p+5, 0x1.4154c25aa47519b4p+6, 0x1.1b321d3b927849eap+6, - 0x1.403a5f5a4ce7b202p+4, 1.0 -]; - -const real P2[] = [ 0x1.8c124a850116a6d8p-21, 0x1.534abda3c2fb90bap-13, - 0x1.29a055ec93a4718cp-7, 0x1.6468e98aad6dd474p-3, 0x1.3dab2ef4c67a601cp+0, - 0x1.e1fb3a1e70c67464p+1, 0x1.b6cce8035ff57b02p+2, 0x1.9f4c9e749ff35f62p+1 -]; - -const real Q2[] = [ 0x1.af03f4fc0655e006p-21, 0x1.713192048d11fb2p-13, - 0x1.4357e5bbf5fef536p-7, 0x1.7fdac8749985d43cp-3, 0x1.4a080c813a2d8e84p+0, - 0x1.c3a4b423cdb41bdap+1, 0x1.8160694e24b5557ap+2, 1.0 -]; - -const real P3[] = [ -0x1.55da447ae3806168p-34, -0x1.145635641f8778a6p-24, - -0x1.abf46d6b48040128p-17, -0x1.7da550945da790fcp-11, -0x1.aa0b2a31157775fap-8, - 0x1.b11d97522eed26bcp-3, 0x1.1106d22f9ae89238p+1, 0x1.029a358e1e630f64p+1 -]; - -const real Q3[] = [ -0x1.74022dd5523e6f84p-34, -0x1.2cb60d61e29ee836p-24, - -0x1.d19e6ec03a85e556p-17, -0x1.9ea2a7b4422f6502p-11, -0x1.c54b1e852f107162p-8, - 0x1.e05268dd3c07989ep-3, 0x1.239c6aff14afbf82p+1, 1.0 -]; - - if(p<=0.0L || p>=1.0L) { - if (p == 0.0L) { - return -real.infinity; - } - if( p == 1.0L ) { - return real.infinity; - } - return NaN(TANGO_NAN.NORMALDISTRIBUTION_INV_DOMAIN); - } - int code = 1; - real y = p; - if( y > (1.0L - EXP_2) ) { - y = 1.0L - y; - code = 0; - } - - real x, z, y2, x0, x1; - - if ( y > EXP_2 ) { - y = y - 0.5L; - y2 = y * y; - x = y + y * (y2 * rationalPoly( y2, P0, Q0)); - return x * SQRT2PI; - } - - x = sqrt( -2.0L * log(y) ); - x0 = x - log(x)/x; - z = 1.0L/x; - if ( x < 8.0L ) { - x1 = z * rationalPoly( z, P1, Q1); - } else if( x < 32.0L ) { - x1 = z * rationalPoly( z, P2, Q2); - } else { - x1 = z * rationalPoly( z, P3, Q3); - } - x = x0 - x1; - if ( code != 0 ) { - x = -x; - } - return x; -} - -} - - -debug(UnitTest) { -unittest { - // TODO: Use verified test points. - // The values below are from Excel 2003. -assert(fabs(normalDistributionInvImpl(0.001) - (-3.09023230616779))< 0.00000000000005); -assert(fabs(normalDistributionInvImpl(1e-50) - (-14.9333375347885))< 0.00000000000005); -assert(feqrel(normalDistributionInvImpl(0.999), -normalDistributionInvImpl(0.001))>real.mant_dig-6); - -// Excel 2003 gets all the following values wrong! -assert(normalDistributionInvImpl(0.0)==-real.infinity); -assert(normalDistributionInvImpl(1.0)==real.infinity); -assert(normalDistributionInvImpl(0.5)==0); -// (Excel 2003 returns norminv(p) = -30 for all p < 1e-200). -// The value tested here is the one the function returned in Jan 2006. -real unknown1 = normalDistributionInvImpl(1e-250L); -assert( fabs(unknown1 -(-33.79958617269L) ) < 0.00000005); -} -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/GammaFunction.d --- a/tango/tango/math/GammaFunction.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1463 +0,0 @@ -/** - * Implementation of the gamma and beta functions, and their integrals. - * - * License: BSD style: $(LICENSE) - * Copyright: Based on the CEPHES math library, which is - * Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com). - * Authors: Stephen L. Moshier (original C code). Conversion to D by Don Clugston - * - * -Macros: - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - * GAMMA = Γ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * NAN = $(RED NAN) - */ -module tango.math.GammaFunction; -private import tango.math.Math; -private import tango.math.IEEE; -private import tango.math.ErrorFunction; - -version(Windows) { // Some tests only pass on DMD Windows - version(DigitalMars) { - version = FailsOnLinux; -} -} - -//------------------------------------------------------------------ - -/// The maximum value of x for which gamma(x) < real.infinity. -const real MAXGAMMA = 1755.5483429L; - -private { - -const real SQRT2PI = 2.50662827463100050242E0L; // sqrt(2pi) - -// Polynomial approximations for gamma and loggamma. - -const real GammaNumeratorCoeffs[] = [ 1.0, - 0x1.acf42d903366539ep-1, 0x1.73a991c8475f1aeap-2, 0x1.c7e918751d6b2a92p-4, - 0x1.86d162cca32cfe86p-6, 0x1.0c378e2e6eaf7cd8p-8, 0x1.dc5c66b7d05feb54p-12, - 0x1.616457b47e448694p-15 -]; - -const real GammaDenominatorCoeffs[] = [ 1.0, - 0x1.a8f9faae5d8fc8bp-2, -0x1.cb7895a6756eebdep-3, -0x1.7b9bab006d30652ap-5, - 0x1.c671af78f312082ep-6, -0x1.a11ebbfaf96252dcp-11, -0x1.447b4d2230a77ddap-10, - 0x1.ec1d45bb85e06696p-13,-0x1.d4ce24d05bd0a8e6p-17 -]; - -const real GammaSmallCoeffs[] = [ 1.0, - 0x1.2788cfc6fb618f52p-1, -0x1.4fcf4026afa2f7ecp-1, -0x1.5815e8fa24d7e306p-5, - 0x1.5512320aea2ad71ap-3, -0x1.59af0fb9d82e216p-5, -0x1.3b4b61d3bfdf244ap-7, - 0x1.d9358e9d9d69fd34p-8, -0x1.38fc4bcbada775d6p-10 -]; - -const real GammaSmallNegCoeffs[] = [ -1.0, - 0x1.2788cfc6fb618f54p-1, 0x1.4fcf4026afa2bc4cp-1, -0x1.5815e8fa2468fec8p-5, - -0x1.5512320baedaf4b6p-3, -0x1.59af0fa283baf07ep-5, 0x1.3b4a70de31e05942p-7, - 0x1.d9398be3bad13136p-8, 0x1.291b73ee05bcbba2p-10 -]; - -const real logGammaStirlingCoeffs[] = [ - 0x1.5555555555553f98p-4, -0x1.6c16c16c07509b1p-9, 0x1.a01a012461cbf1e4p-11, - -0x1.3813089d3f9d164p-11, 0x1.b911a92555a277b8p-11, -0x1.ed0a7b4206087b22p-10, - 0x1.402523859811b308p-8 -]; - -const real logGammaNumerator[] = [ - -0x1.0edd25913aaa40a2p+23, -0x1.31c6ce2e58842d1ep+24, -0x1.f015814039477c3p+23, - -0x1.74ffe40c4b184b34p+22, -0x1.0d9c6d08f9eab55p+20, -0x1.54c6b71935f1fc88p+16, - -0x1.0e761b42932b2aaep+11 -]; - -const real logGammaDenominator[] = [ - -0x1.4055572d75d08c56p+24, -0x1.deeb6013998e4d76p+24, -0x1.106f7cded5dcc79ep+24, - -0x1.25e17184848c66d2p+22, -0x1.301303b99a614a0ap+19, -0x1.09e76ab41ae965p+15, - -0x1.00f95ced9e5f54eep+9, 1.0 -]; - -/* - * Helper function: Gamma function computed by Stirling's formula. - * - * Stirling's formula for the gamma function is: - * - * $(GAMMA)(x) = sqrt(2 π) xx-0.5 exp(-x) (1 + 1/x P(1/x)) - * - */ -real gammaStirling(real x) -{ - // CEPHES code Copyright 1994 by Stephen L. Moshier - - const real SmallStirlingCoeffs[] = [ - 0x1.55555555555543aap-4, 0x1.c71c71c720dd8792p-9, -0x1.5f7268f0b5907438p-9, - -0x1.e13cd410e0477de6p-13, 0x1.9b0f31643442616ep-11, 0x1.2527623a3472ae08p-14, - -0x1.37f6bc8ef8b374dep-11,-0x1.8c968886052b872ap-16, 0x1.76baa9c6d3eeddbcp-11 - ]; - - const real LargeStirlingCoeffs[] = [ 1.0L, - 8.33333333333333333333E-2L, 3.47222222222222222222E-3L, - -2.68132716049382716049E-3L, -2.29472093621399176955E-4L, - 7.84039221720066627474E-4L, 6.97281375836585777429E-5L - ]; - - real w = 1.0L/x; - real y = exp(x); - if ( x > 1024.0L ) { - // For large x, use rational coefficients from the analytical expansion. - w = poly(w, LargeStirlingCoeffs); - // Avoid overflow in pow() - real v = pow( x, 0.5L * x - 0.25L ); - y = v * (v / y); - } - else { - w = 1.0L + w * poly( w, SmallStirlingCoeffs); - y = pow( x, x - 0.5L ) / y; - } - y = SQRT2PI * y * w; - return y; -} - -} // private - -/**************** - * The sign of $(GAMMA)(x). - * - * Returns -1 if $(GAMMA)(x) < 0, +1 if $(GAMMA)(x) > 0, - * $(NAN) if sign is indeterminate. - */ -real sgnGamma(real x) -{ - /* Author: Don Clugston. */ - if (isNaN(x)) return x; - if (x > 0) return 1.0; - if (x < -1/real.epsilon) { - // Large negatives lose all precision - return NaN(TANGO_NAN.SGNGAMMA); - } -// if (remquo(x, -1.0, n) == 0) { - long n = rndlong(x); - if (x == n) { - return x == 0 ? copysign(1, x) : NaN(TANGO_NAN.SGNGAMMA); - } - return n & 1 ? 1.0 : -1.0; -} - -debug(UnitTest) { -unittest { - assert(sgnGamma(5.0) == 1.0); - assert(isNaN(sgnGamma(-3.0))); - assert(sgnGamma(-0.1) == -1.0); - assert(sgnGamma(-55.1) == 1.0); - assert(isNaN(sgnGamma(-real.infinity))); - assert(isIdentical(sgnGamma(NaN(0xABC)), NaN(0xABC))); -} -} - -/***************************************************** - * The Gamma function, $(GAMMA)(x) - * - * $(GAMMA)(x) is a generalisation of the factorial function - * to real and complex numbers. - * Like x!, $(GAMMA)(x+1) = x*$(GAMMA)(x). - * - * Mathematically, if z.re > 0 then - * $(GAMMA)(z) = $(INTEGRATE 0, ∞) $(POWER t, z-1)$(POWER e, -t) dt - * - * $(TABLE_SV - * $(SVH x, $(GAMMA)(x) ) - * $(SV $(NAN), $(NAN) ) - * $(SV ±0.0, ±∞) - * $(SV integer > 0, (x-1)! ) - * $(SV integer < 0, $(NAN) ) - * $(SV +∞, +∞ ) - * $(SV -∞, $(NAN) ) - * ) - */ -real gamma(real x) -{ -/* Based on code from the CEPHES library. - * CEPHES code Copyright 1994 by Stephen L. Moshier - * - * Arguments |x| <= 13 are reduced by recurrence and the function - * approximated by a rational function of degree 7/8 in the - * interval (2,3). Large arguments are handled by Stirling's - * formula. Large negative arguments are made positive using - * a reflection formula. - */ - - real q, z; - if (isNaN(x)) return x; - if (x == -x.infinity) return NaN(TANGO_NAN.GAMMA_DOMAIN); - if ( fabs(x) > MAXGAMMA ) return real.infinity; - if (x==0) return 1.0/x; // +- infinity depending on sign of x, create an exception. - - q = fabs(x); - - if ( q > 13.0L ) { - // Large arguments are handled by Stirling's - // formula. Large negative arguments are made positive using - // the reflection formula. - - if ( x < 0.0L ) { - int sgngam = 1; // sign of gamma. - real p = floor(q); - if (p == q) - return NaN(TANGO_NAN.GAMMA_DOMAIN); // poles for all integers <0. - int intpart = cast(int)(p); - if ( (intpart & 1) == 0 ) - sgngam = -1; - z = q - p; - if ( z > 0.5L ) { - p += 1.0L; - z = q - p; - } - z = q * sin( PI * z ); - z = fabs(z) * gammaStirling(q); - if ( z <= PI/real.max ) return sgngam * real.infinity; - return sgngam * PI/z; - } else { - return gammaStirling(x); - } - } - - // Arguments |x| <= 13 are reduced by recurrence and the function - // approximated by a rational function of degree 7/8 in the - // interval (2,3). - - z = 1.0L; - while ( x >= 3.0L ) { - x -= 1.0L; - z *= x; - } - - while ( x < -0.03125L ) { - z /= x; - x += 1.0L; - } - - if ( x <= 0.03125L ) { - if ( x == 0.0L ) - return NaN(TANGO_NAN.GAMMA_POLE); - else { - if ( x < 0.0L ) { - x = -x; - return z / (x * poly( x, GammaSmallNegCoeffs )); - } else { - return z / (x * poly( x, GammaSmallCoeffs )); - } - } - } - - while ( x < 2.0L ) { - z /= x; - x += 1.0L; - } - if ( x == 2.0L ) return z; - - x -= 2.0L; - return z * poly( x, GammaNumeratorCoeffs ) / poly( x, GammaDenominatorCoeffs ); -} - -debug(UnitTest) { -unittest { - // gamma(n) = factorial(n-1) if n is an integer. - real fact = 1.0L; - for (int i=1; fact real.mant_dig-15); - fact *= (i*1.0L); - } - assert(gamma(0.0) == real.infinity); - assert(gamma(-0.0) == -real.infinity); - assert(isNaN(gamma(-1.0))); - assert(isNaN(gamma(-15.0))); - assert(isIdentical(gamma(NaN(0xABC)), NaN(0xABC))); - assert(gamma(real.infinity) == real.infinity); - assert(gamma(real.max) == real.infinity); - assert(isNaN(gamma(-real.infinity))); - assert(gamma(real.min*real.epsilon) == real.infinity); - assert(gamma(MAXGAMMA)< real.infinity); - assert(gamma(MAXGAMMA*2) == real.infinity); - - // Test some high-precision values (50 decimal digits) - const real SQRT_PI = 1.77245385090551602729816748334114518279754945612238L; - - version(FailsOnLinux) assert(feqrel(gamma(0.5L), SQRT_PI) == real.mant_dig); - - assert(feqrel(gamma(1.0/3.L), 2.67893853470774763365569294097467764412868937795730L) >= real.mant_dig-2); - assert(feqrel(gamma(0.25L), - 3.62560990822190831193068515586767200299516768288006) >= real.mant_dig-1); - assert(feqrel(gamma(1.0/5.0L), - 4.59084371199880305320475827592915200343410999829340L) >= real.mant_dig-1); -} -} - -/***************************************************** - * Natural logarithm of gamma function. - * - * Returns the base e (2.718...) logarithm of the absolute - * value of the gamma function of the argument. - * - * For reals, logGamma is equivalent to log(fabs(gamma(x))). - * - * $(TABLE_SV - * $(SVH x, logGamma(x) ) - * $(SV $(NAN), $(NAN) ) - * $(SV integer <= 0, +∞ ) - * $(SV ±∞, +∞ ) - * ) - */ -real logGamma(real x) -{ - /* Author: Don Clugston. Based on code from the CEPHES library. - * CEPHES code Copyright 1994 by Stephen L. Moshier - * - * For arguments greater than 33, the logarithm of the gamma - * function is approximated by the logarithmic version of - * Stirling's formula using a polynomial approximation of - * degree 4. Arguments between -33 and +33 are reduced by - * recurrence to the interval [2,3] of a rational approximation. - * The cosecant reflection formula is employed for arguments - * less than -33. - */ - real q, w, z, f, nx; - - if (isNaN(x)) return x; - if (fabs(x) == x.infinity) return x.infinity; - - if( x < -34.0L ) { - q = -x; - w = logGamma(q); - real p = floor(q); - if ( p == q ) return real.infinity; - int intpart = cast(int)(p); - real sgngam = 1; - if ( (intpart & 1) == 0 ) - sgngam = -1; - z = q - p; - if ( z > 0.5L ) { - p += 1.0L; - z = p - q; - } - z = q * sin( PI * z ); - if ( z == 0.0L ) return sgngam * real.infinity; - /* z = LOGPI - logl( z ) - w; */ - z = log( PI/z ) - w; - return z; - } - - if( x < 13.0L ) { - z = 1.0L; - nx = floor( x + 0.5L ); - f = x - nx; - while ( x >= 3.0L ) { - nx -= 1.0L; - x = nx + f; - z *= x; - } - while ( x < 2.0L ) { - if( fabs(x) <= 0.03125 ) { - if ( x == 0.0L ) return real.infinity; - if ( x < 0.0L ) { - x = -x; - q = z / (x * poly( x, GammaSmallNegCoeffs)); - } else - q = z / (x * poly( x, GammaSmallCoeffs)); - return log( fabs(q) ); - } - z /= nx + f; - nx += 1.0L; - x = nx + f; - } - z = fabs(z); - if ( x == 2.0L ) - return log(z); - x = (nx - 2.0L) + f; - real p = x * rationalPoly( x, logGammaNumerator, logGammaDenominator); - return log(z) + p; - } - - // const real MAXLGM = 1.04848146839019521116e+4928L; - // if( x > MAXLGM ) return sgngaml * real.infinity; - - const real LOGSQRT2PI = 0.91893853320467274178L; // log( sqrt( 2*pi ) ) - - q = ( x - 0.5L ) * log(x) - x + LOGSQRT2PI; - if (x > 1.0e10L) return q; - real p = 1.0L / (x*x); - q += poly( p, logGammaStirlingCoeffs ) / x; - return q ; -} - -debug(UnitTest) { -unittest { - assert(isIdentical(logGamma(NaN(0xDEF)), NaN(0xDEF))); - assert(logGamma(real.infinity) == real.infinity); - assert(logGamma(-1.0) == real.infinity); - assert(logGamma(0.0) == real.infinity); - assert(logGamma(-50.0) == real.infinity); - assert(isIdentical(0.0L, logGamma(1.0L))); - assert(isIdentical(0.0L, logGamma(2.0L))); - assert(logGamma(real.min*real.epsilon) == real.infinity); - assert(logGamma(-real.min*real.epsilon) == real.infinity); - - // x, correct loggamma(x), correct d/dx loggamma(x). - static real[] testpoints = [ - 8.0L, 8.525146484375L + 1.48766904143001655310E-5, 2.01564147795560999654E0L, - 8.99993896484375e-1L, 6.6375732421875e-2L + 5.11505711292524166220E-6L, -7.54938684259372234258E-1, - 7.31597900390625e-1L, 2.2369384765625e-1 + 5.21506341809849792422E-6L, -1.13355566660398608343E0L, - 2.31639862060546875e-1L, 1.3686676025390625L + 1.12609441752996145670E-5L, -4.56670961813812679012E0, - 1.73162841796875L, -8.88214111328125e-2L + 3.36207740803753034508E-6L, 2.33339034686200586920E-1L, - 1.23162841796875L, -9.3902587890625e-2L + 1.28765089229009648104E-5L, -2.49677345775751390414E-1L, - 7.3786976294838206464e19L, 3.301798506038663053312e21L - 1.656137564136932662487046269677E5L, - 4.57477139169563904215E1L, - 1.08420217248550443401E-19L, 4.36682586669921875e1L + 1.37082843669932230418E-5L, - -9.22337203685477580858E18L, - 1.0L, 0.0L, -5.77215664901532860607E-1L, - 2.0L, 0.0L, 4.22784335098467139393E-1L, - -0.5L, 1.2655029296875L + 9.19379714539648894580E-6L, 3.64899739785765205590E-2L, - -1.5L, 8.6004638671875e-1L + 6.28657731014510932682E-7L, 7.03156640645243187226E-1L, - -2.5L, -5.6243896484375E-2L + 1.79986700949327405470E-7, 1.10315664064524318723E0L, - -3.5L, -1.30902099609375L + 1.43111007079536392848E-5L, 1.38887092635952890151E0L - ]; - // TODO: test derivatives as well. - for (int i=0; i real.mant_dig-5); - if (testpoints[i] real.mant_dig-5); - } - } - assert(logGamma(-50.2) == log(fabs(gamma(-50.2)))); - assert(logGamma(-0.008) == log(fabs(gamma(-0.008)))); - assert(feqrel(logGamma(-38.8),log(fabs(gamma(-38.8)))) > real.mant_dig-4); - assert(feqrel(logGamma(1500.0L),log(gamma(1500.0L))) > real.mant_dig-2); -} -} - -private { -const real MAXLOG = 0x1.62e42fefa39ef358p+13L; // log(real.max) -const real MINLOG = -0x1.6436716d5406e6d8p+13L; // log(real.min*real.epsilon) = log(smallest denormal) -const real BETA_BIG = 9.223372036854775808e18L; -const real BETA_BIGINV = 1.084202172485504434007e-19L; -} - -/** Beta function - * - * The beta function is defined as - * - * beta(x, y) = (Γ(x) Γ(y))/Γ(x + y) - */ -real beta(real x, real y) -{ - if ((x+y)> MAXGAMMA) { - return exp(logGamma(x) + logGamma(y) - logGamma(x+y)); - } else return gamma(x)*gamma(y)/gamma(x+y); -} - -debug(UnitTest) { -unittest { - assert(isIdentical(beta(NaN(0xABC), 4), NaN(0xABC))); - assert(isIdentical(beta(2, NaN(0xABC)), NaN(0xABC))); -} -} - -/** Incomplete beta integral - * - * Returns incomplete beta integral of the arguments, evaluated - * from zero to x. The regularized incomplete beta function is defined as - * - * betaIncomplete(a, b, x) = Γ(a+b)/(Γ(a) Γ(b)) * - * $(INTEGRATE 0, x) $(POWER t, a-1)$(POWER (1-t),b-1) dt - * - * and is the same as the the cumulative distribution function. - * - * The domain of definition is 0 <= x <= 1. In this - * implementation a and b are restricted to positive values. - * The integral from x to 1 may be obtained by the symmetry - * relation - * - * betaIncompleteCompl(a, b, x ) = betaIncomplete( b, a, 1-x ) - * - * The integral is evaluated by a continued fraction expansion - * or, when b*x is small, by a power series. - */ -real betaIncomplete(real aa, real bb, real xx ) -{ - if (!(aa>0 && bb>0)) { - if (isNaN(aa)) return aa; - if (isNaN(bb)) return bb; - return NaN(TANGO_NAN.BETA_DOMAIN); // domain error - } - if (!(xx>0 && xx<1.0)) { - if (isNaN(xx)) return xx; - if ( xx == 0.0L ) return 0.0; - if ( xx == 1.0L ) return 1.0; - return NaN(TANGO_NAN.BETA_DOMAIN); // domain error - } - if ( (bb * xx) <= 1.0L && xx <= 0.95L) { - return betaDistPowerSeries(aa, bb, xx); - } - real x; - real xc; // = 1 - x - - real a, b; - int flag = 0; - - /* Reverse a and b if x is greater than the mean. */ - if( xx > (aa/(aa+bb)) ) { - // here x > aa/(aa+bb) and (bb*x>1 or x>0.95) - flag = 1; - a = bb; - b = aa; - xc = xx; - x = 1.0L - xx; - } else { - a = aa; - b = bb; - xc = 1.0L - xx; - x = xx; - } - - if( flag == 1 && (b * x) <= 1.0L && x <= 0.95L) { - // here xx > aa/(aa+bb) and ((bb*xx>1) or xx>0.95) and (aa*(1-xx)<=1) and xx > 0.05 - return 1.0 - betaDistPowerSeries(a, b, x); // note loss of precision - } - - real w; - // Choose expansion for optimal convergence - // One is for x * (a+b+2) < (a+1), - // the other is for x * (a+b+2) > (a+1). - real y = x * (a+b-2.0L) - (a-1.0L); - if( y < 0.0L ) { - w = betaDistExpansion1( a, b, x ); - } else { - w = betaDistExpansion2( a, b, x ) / xc; - } - - /* Multiply w by the factor - a b - x (1-x) Gamma(a+b) / ( a Gamma(a) Gamma(b) ) . */ - - y = a * log(x); - real t = b * log(xc); - if ( (a+b) < MAXGAMMA && fabs(y) < MAXLOG && fabs(t) < MAXLOG ) { - t = pow(xc,b); - t *= pow(x,a); - t /= a; - t *= w; - t *= gamma(a+b) / (gamma(a) * gamma(b)); - } else { - /* Resort to logarithms. */ - y += t + logGamma(a+b) - logGamma(a) - logGamma(b); - y += log(w/a); - - t = exp(y); -/+ - // There seems to be a bug in Cephes at this point. - // Problems occur for y > MAXLOG, not y < MINLOG. - if( y < MINLOG ) { - t = 0.0L; - } else { - t = exp(y); - } -+/ - } - if( flag == 1 ) { -/+ // CEPHES includes this code, but I think it is erroneous. - if( t <= real.epsilon ) { - t = 1.0L - real.epsilon; - } else -+/ - t = 1.0L - t; - } - return t; -} - -/** Inverse of incomplete beta integral - * - * Given y, the function finds x such that - * - * betaIncomplete(a, b, x) == y - * - * Newton iterations or interval halving is used. - */ -real betaIncompleteInv(real aa, real bb, real yy0 ) -{ - real a, b, y0, d, y, x, x0, x1, lgm, yp, di, dithresh, yl, yh, xt; - int i, rflg, dir, nflg; - - if (isNaN(yy0)) return yy0; - if (isNaN(aa)) return aa; - if (isNaN(bb)) return bb; - if( yy0 <= 0.0L ) - return 0.0L; - if( yy0 >= 1.0L ) - return 1.0L; - x0 = 0.0L; - yl = 0.0L; - x1 = 1.0L; - yh = 1.0L; - if( aa <= 1.0L || bb <= 1.0L ) { - dithresh = 1.0e-7L; - rflg = 0; - a = aa; - b = bb; - y0 = yy0; - x = a/(a+b); - y = betaIncomplete( a, b, x ); - nflg = 0; - goto ihalve; - } else { - nflg = 0; - dithresh = 1.0e-4L; - } - - /* approximation to inverse function */ - - yp = -normalDistributionInvImpl( yy0 ); - - if( yy0 > 0.5L ) { - rflg = 1; - a = bb; - b = aa; - y0 = 1.0L - yy0; - yp = -yp; - } else { - rflg = 0; - a = aa; - b = bb; - y0 = yy0; - } - - lgm = (yp * yp - 3.0L)/6.0L; - x = 2.0L/( 1.0L/(2.0L * a-1.0L) + 1.0L/(2.0L * b - 1.0L) ); - d = yp * sqrt( x + lgm ) / x - - ( 1.0L/(2.0L * b - 1.0L) - 1.0L/(2.0L * a - 1.0L) ) - * (lgm + (5.0L/6.0L) - 2.0L/(3.0L * x)); - d = 2.0L * d; - if( d < MINLOG ) { - x = 1.0L; - goto under; - } - x = a/( a + b * exp(d) ); - y = betaIncomplete( a, b, x ); - yp = (y - y0)/y0; - if( fabs(yp) < 0.2 ) - goto newt; - - /* Resort to interval halving if not close enough. */ -ihalve: - - dir = 0; - di = 0.5L; - for( i=0; i<400; i++ ) { - if( i != 0 ) { - x = x0 + di * (x1 - x0); - if( x == 1.0L ) { - x = 1.0L - real.epsilon; - } - if( x == 0.0L ) { - di = 0.5; - x = x0 + di * (x1 - x0); - if( x == 0.0 ) - goto under; - } - y = betaIncomplete( a, b, x ); - yp = (x1 - x0)/(x1 + x0); - if( fabs(yp) < dithresh ) - goto newt; - yp = (y-y0)/y0; - if( fabs(yp) < dithresh ) - goto newt; - } - if( y < y0 ) { - x0 = x; - yl = y; - if( dir < 0 ) { - dir = 0; - di = 0.5L; - } else if( dir > 3 ) - di = 1.0L - (1.0L - di) * (1.0L - di); - else if( dir > 1 ) - di = 0.5L * di + 0.5L; - else - di = (y0 - y)/(yh - yl); - dir += 1; - if( x0 > 0.95L ) { - if( rflg == 1 ) { - rflg = 0; - a = aa; - b = bb; - y0 = yy0; - } else { - rflg = 1; - a = bb; - b = aa; - y0 = 1.0 - yy0; - } - x = 1.0L - x; - y = betaIncomplete( a, b, x ); - x0 = 0.0; - yl = 0.0; - x1 = 1.0; - yh = 1.0; - goto ihalve; - } - } else { - x1 = x; - if( rflg == 1 && x1 < real.epsilon ) { - x = 0.0L; - goto done; - } - yh = y; - if( dir > 0 ) { - dir = 0; - di = 0.5L; - } - else if( dir < -3 ) - di = di * di; - else if( dir < -1 ) - di = 0.5L * di; - else - di = (y - y0)/(yh - yl); - dir -= 1; - } - } - // loss of precision has occurred - - //mtherr( "incbil", PLOSS ); - if( x0 >= 1.0L ) { - x = 1.0L - real.epsilon; - goto done; - } - if( x <= 0.0L ) { -under: - // underflow has occurred - //mtherr( "incbil", UNDERFLOW ); - x = 0.0L; - goto done; - } - -newt: - - if ( nflg ) { - goto done; - } - nflg = 1; - lgm = logGamma(a+b) - logGamma(a) - logGamma(b); - - for( i=0; i<15; i++ ) { - /* Compute the function at this point. */ - if ( i != 0 ) - y = betaIncomplete(a,b,x); - if ( y < yl ) { - x = x0; - y = yl; - } else if( y > yh ) { - x = x1; - y = yh; - } else if( y < y0 ) { - x0 = x; - yl = y; - } else { - x1 = x; - yh = y; - } - if( x == 1.0L || x == 0.0L ) - break; - /* Compute the derivative of the function at this point. */ - d = (a - 1.0L) * log(x) + (b - 1.0L) * log(1.0L - x) + lgm; - if ( d < MINLOG ) { - goto done; - } - if ( d > MAXLOG ) { - break; - } - d = exp(d); - /* Compute the step to the next approximation of x. */ - d = (y - y0)/d; - xt = x - d; - if ( xt <= x0 ) { - y = (x - x0) / (x1 - x0); - xt = x0 + 0.5L * y * (x - x0); - if( xt <= 0.0L ) - break; - } - if ( xt >= x1 ) { - y = (x1 - x) / (x1 - x0); - xt = x1 - 0.5L * y * (x1 - x); - if ( xt >= 1.0L ) - break; - } - x = xt; - if ( fabs(d/x) < (128.0L * real.epsilon) ) - goto done; - } - /* Did not converge. */ - dithresh = 256.0L * real.epsilon; - goto ihalve; - -done: - if ( rflg ) { - if( x <= real.epsilon ) - x = 1.0L - real.epsilon; - else - x = 1.0L - x; - } - return x; -} - -debug(UnitTest) { -unittest { // also tested by the normal distribution - // check NaN propagation - assert(isIdentical(betaIncomplete(NaN(0xABC),2,3), NaN(0xABC))); - assert(isIdentical(betaIncomplete(7,NaN(0xABC),3), NaN(0xABC))); - assert(isIdentical(betaIncomplete(7,15,NaN(0xABC)), NaN(0xABC))); - assert(isIdentical(betaIncompleteInv(NaN(0xABC),1,17), NaN(0xABC))); - assert(isIdentical(betaIncompleteInv(2,NaN(0xABC),8), NaN(0xABC))); - assert(isIdentical(betaIncompleteInv(2,3, NaN(0xABC)), NaN(0xABC))); - - assert(isNaN(betaIncomplete(-1, 2, 3))); - - assert(betaIncomplete(1, 2, 0)==0); - assert(betaIncomplete(1, 2, 1)==1); - assert(isNaN(betaIncomplete(1, 2, 3))); - assert(betaIncompleteInv(1, 1, 0)==0); - assert(betaIncompleteInv(1, 1, 1)==1); - - // Test some values against Microsoft Excel 2003. - - assert(fabs(betaIncomplete(8, 10, 0.2) - 0.010_934_315_236_957_2L) < 0.000_000_000_5); - assert(fabs(betaIncomplete(2, 2.5, 0.9) - 0.989_722_597_604_107L) < 0.000_000_000_000_5); - assert(fabs(betaIncomplete(1000, 800, 0.5) - 1.17914088832798E-06L) < 0.000_000_05e-6); - - assert(fabs(betaIncomplete(0.0001, 10000, 0.0001) - 0.999978059369989L) < 0.000_000_000_05); - - assert(fabs(betaIncompleteInv(5, 10, 0.2) - 0.229121208190918L) < 0.000_000_5L); - assert(fabs(betaIncompleteInv(4, 7, 0.8) - 0.483657360076904L) < 0.000_000_5L); - - // Coverage tests. I don't have correct values for these tests, but - // these values cover most of the code, so they are useful for - // regression testing. - // Extensive testing failed to increase the coverage. It seems likely that about - // half the code in this function is unnecessary; there is potential for - // significant improvement over the original CEPHES code. - -// Excel 2003 gives clearly erroneous results (betadist>1) when a and x are tiny and b is huge. -// The correct results are for these next tests are unknown. - -// real testpoint1 = betaIncomplete(1e-10, 5e20, 8e-21); -// assert(testpoint1 == 0x1.ffff_ffff_c906_404cp-1L); - - assert(betaIncomplete(0.01, 327726.7, 0.545113) == 1.0); - assert(betaIncompleteInv(0.01, 8e-48, 5.45464e-20)==1-real.epsilon); - assert(betaIncompleteInv(0.01, 8e-48, 9e-26)==1-real.epsilon); - - assert(betaIncomplete(0.01, 498.437, 0.0121433) == 0x1.ffff_8f72_19197402p-1); - assert(1- betaIncomplete(0.01, 328222, 4.0375e-5) == 0x1.5f62926b4p-30); - version(FailsOnLinux) assert(betaIncompleteInv(0x1.b3d151fbba0eb18p+1, 1.2265e-19, 2.44859e-18)==0x1.c0110c8531d0952cp-1); - version(FailsOnLinux) assert(betaIncompleteInv(0x1.ff1275ae5b939bcap-41, 4.6713e18, 0.0813601)==0x1.f97749d90c7adba8p-63); - real a1; - a1 = 3.40483; - version(FailsOnLinux) assert(betaIncompleteInv(a1, 4.0640301659679627772e19L, 0.545113)== 0x1.ba8c08108aaf5d14p-109); - real b1; - b1= 2.82847e-25; - version(FailsOnLinux) assert(betaIncompleteInv(0.01, b1, 9e-26) == 0x1.549696104490aa9p-830); - - // --- Problematic cases --- - // This is a situation where the series expansion fails to converge - assert( isNaN(betaIncompleteInv(0.12167, 4.0640301659679627772e19L, 0.0813601))); - // This next result is almost certainly erroneous. - assert(betaIncomplete(1.16251e20, 2.18e39, 5.45e-20)==-real.infinity); -} -} - -private { -// Implementation functions - -// Continued fraction expansion #1 for incomplete beta integral -// Use when x < (a+1)/(a+b+2) -real betaDistExpansion1(real a, real b, real x ) -{ - real xk, pk, pkm1, pkm2, qk, qkm1, qkm2; - real k1, k2, k3, k4, k5, k6, k7, k8; - real r, t, ans; - int n; - - k1 = a; - k2 = a + b; - k3 = a; - k4 = a + 1.0L; - k5 = 1.0L; - k6 = b - 1.0L; - k7 = k4; - k8 = a + 2.0L; - - pkm2 = 0.0L; - qkm2 = 1.0L; - pkm1 = 1.0L; - qkm1 = 1.0L; - ans = 1.0L; - r = 1.0L; - n = 0; - const real thresh = 3.0L * real.epsilon; - do { - xk = -( x * k1 * k2 )/( k3 * k4 ); - pk = pkm1 + pkm2 * xk; - qk = qkm1 + qkm2 * xk; - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - - xk = ( x * k5 * k6 )/( k7 * k8 ); - pk = pkm1 + pkm2 * xk; - qk = qkm1 + qkm2 * xk; - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - - if( qk != 0.0L ) - r = pk/qk; - if( r != 0.0L ) { - t = fabs( (ans - r)/r ); - ans = r; - } else { - t = 1.0L; - } - - if( t < thresh ) - return ans; - - k1 += 1.0L; - k2 += 1.0L; - k3 += 2.0L; - k4 += 2.0L; - k5 += 1.0L; - k6 -= 1.0L; - k7 += 2.0L; - k8 += 2.0L; - - if( (fabs(qk) + fabs(pk)) > BETA_BIG ) { - pkm2 *= BETA_BIGINV; - pkm1 *= BETA_BIGINV; - qkm2 *= BETA_BIGINV; - qkm1 *= BETA_BIGINV; - } - if( (fabs(qk) < BETA_BIGINV) || (fabs(pk) < BETA_BIGINV) ) { - pkm2 *= BETA_BIG; - pkm1 *= BETA_BIG; - qkm2 *= BETA_BIG; - qkm1 *= BETA_BIG; - } - } - while( ++n < 400 ); -// loss of precision has occurred -// mtherr( "incbetl", PLOSS ); - return ans; -} - -// Continued fraction expansion #2 for incomplete beta integral -// Use when x > (a+1)/(a+b+2) -real betaDistExpansion2(real a, real b, real x ) -{ - real xk, pk, pkm1, pkm2, qk, qkm1, qkm2; - real k1, k2, k3, k4, k5, k6, k7, k8; - real r, t, ans, z; - - k1 = a; - k2 = b - 1.0L; - k3 = a; - k4 = a + 1.0L; - k5 = 1.0L; - k6 = a + b; - k7 = a + 1.0L; - k8 = a + 2.0L; - - pkm2 = 0.0L; - qkm2 = 1.0L; - pkm1 = 1.0L; - qkm1 = 1.0L; - z = x / (1.0L-x); - ans = 1.0L; - r = 1.0L; - int n = 0; - const real thresh = 3.0L * real.epsilon; - do { - - xk = -( z * k1 * k2 )/( k3 * k4 ); - pk = pkm1 + pkm2 * xk; - qk = qkm1 + qkm2 * xk; - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - - xk = ( z * k5 * k6 )/( k7 * k8 ); - pk = pkm1 + pkm2 * xk; - qk = qkm1 + qkm2 * xk; - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - - if( qk != 0.0L ) - r = pk/qk; - if( r != 0.0L ) { - t = fabs( (ans - r)/r ); - ans = r; - } else - t = 1.0L; - - if( t < thresh ) - return ans; - k1 += 1.0L; - k2 -= 1.0L; - k3 += 2.0L; - k4 += 2.0L; - k5 += 1.0L; - k6 += 1.0L; - k7 += 2.0L; - k8 += 2.0L; - - if( (fabs(qk) + fabs(pk)) > BETA_BIG ) { - pkm2 *= BETA_BIGINV; - pkm1 *= BETA_BIGINV; - qkm2 *= BETA_BIGINV; - qkm1 *= BETA_BIGINV; - } - if( (fabs(qk) < BETA_BIGINV) || (fabs(pk) < BETA_BIGINV) ) { - pkm2 *= BETA_BIG; - pkm1 *= BETA_BIG; - qkm2 *= BETA_BIG; - qkm1 *= BETA_BIG; - } - } while( ++n < 400 ); -// loss of precision has occurred -//mtherr( "incbetl", PLOSS ); - return ans; -} - -/* Power series for incomplete gamma integral. - Use when b*x is small. */ -real betaDistPowerSeries(real a, real b, real x ) -{ - real ai = 1.0L / a; - real u = (1.0L - b) * x; - real v = u / (a + 1.0L); - real t1 = v; - real t = u; - real n = 2.0L; - real s = 0.0L; - real z = real.epsilon * ai; - while( fabs(v) > z ) { - u = (n - b) * x / n; - t *= u; - v = t / (a + n); - s += v; - n += 1.0L; - } - s += t1; - s += ai; - - u = a * log(x); - if ( (a+b) < MAXGAMMA && fabs(u) < MAXLOG ) { - t = gamma(a+b)/(gamma(a)*gamma(b)); - s = s * t * pow(x,a); - } else { - t = logGamma(a+b) - logGamma(a) - logGamma(b) + u + log(s); - - if( t < MINLOG ) { - s = 0.0L; - } else - s = exp(t); - } - return s; -} - -} - -/*************************************** - * Incomplete gamma integral and its complement - * - * These functions are defined by - * - * gammaIncomplete = ( $(INTEGRATE 0, x) $(POWER e, -t) $(POWER t, a-1) dt )/ $(GAMMA)(a) - * - * gammaIncompleteCompl(a,x) = 1 - gammaIncomplete(a,x) - * = ($(INTEGRATE x, ∞) $(POWER e, -t) $(POWER t, a-1) dt )/ $(GAMMA)(a) - * - * In this implementation both arguments must be positive. - * The integral is evaluated by either a power series or - * continued fraction expansion, depending on the relative - * values of a and x. - */ -real gammaIncomplete(real a, real x ) -in { - assert(x >= 0); - assert(a > 0); -} -body { - /* left tail of incomplete gamma function: - * - * inf. k - * a -x - x - * x e > ---------- - * - - - * k=0 | (a+k+1) - * - */ - if (x==0) - return 0.0L; - - if ( (x > 1.0L) && (x > a ) ) - return 1.0L - gammaIncompleteCompl(a,x); - - real ax = a * log(x) - x - logGamma(a); -/+ - if( ax < MINLOGL ) return 0; // underflow - // { mtherr( "igaml", UNDERFLOW ); return( 0.0L ); } -+/ - ax = exp(ax); - - /* power series */ - real r = a; - real c = 1.0L; - real ans = 1.0L; - - do { - r += 1.0L; - c *= x/r; - ans += c; - } while( c/ans > real.epsilon ); - - return ans * ax/a; -} - -/** ditto */ -real gammaIncompleteCompl(real a, real x ) -in { - assert(x >= 0); - assert(a > 0); -} -body { - if (x==0) - return 1.0L; - if ( (x < 1.0L) || (x < a) ) - return 1.0L - gammaIncomplete(a,x); - - // DAC (Cephes bug fix): This is necessary to avoid - // spurious nans, eg - // log(x)-x = NaN when x = real.infinity - const real MAXLOGL = 1.1356523406294143949492E4L; - if (x > MAXLOGL) return 0; // underflow - - real ax = a * log(x) - x - logGamma(a); -//const real MINLOGL = -1.1355137111933024058873E4L; -// if ( ax < MINLOGL ) return 0; // underflow; - ax = exp(ax); - - - /* continued fraction */ - real y = 1.0L - a; - real z = x + y + 1.0L; - real c = 0.0L; - - real pk, qk, t; - - real pkm2 = 1.0L; - real qkm2 = x; - real pkm1 = x + 1.0L; - real qkm1 = z * x; - real ans = pkm1/qkm1; - - do { - c += 1.0L; - y += 1.0L; - z += 2.0L; - real yc = y * c; - pk = pkm1 * z - pkm2 * yc; - qk = qkm1 * z - qkm2 * yc; - if( qk != 0.0L ) { - real r = pk/qk; - t = fabs( (ans - r)/r ); - ans = r; - } else { - t = 1.0L; - } - pkm2 = pkm1; - pkm1 = pk; - qkm2 = qkm1; - qkm1 = qk; - - const real BIG = 9.223372036854775808e18L; - - if ( fabs(pk) > BIG ) { - pkm2 /= BIG; - pkm1 /= BIG; - qkm2 /= BIG; - qkm1 /= BIG; - } - } while ( t > real.epsilon ); - - return ans * ax; -} - -/** Inverse of complemented incomplete gamma integral - * - * Given a and y, the function finds x such that - * - * gammaIncompleteCompl( a, x ) = p. - * - * Starting with the approximate value x = a $(POWER t, 3), where - * t = 1 - d - normalDistributionInv(p) sqrt(d), - * and d = 1/9a, - * the routine performs up to 10 Newton iterations to find the - * root of incompleteGammaCompl(a,x) - p = 0. - */ -real gammaIncompleteComplInv(real a, real p) -in { - assert(p>=0 && p<= 1); - assert(a>0); -} -body { - if (p==0) return real.infinity; - - real y0 = p; - const real MAXLOGL = 1.1356523406294143949492E4L; - real x0, x1, x, yl, yh, y, d, lgm, dithresh; - int i, dir; - - /* bound the solution */ - x0 = real.max; - yl = 0.0L; - x1 = 0.0L; - yh = 1.0L; - dithresh = 4.0 * real.epsilon; - - /* approximation to inverse function */ - d = 1.0L/(9.0L*a); - y = 1.0L - d - normalDistributionInvImpl(y0) * sqrt(d); - x = a * y * y * y; - - lgm = logGamma(a); - - for( i=0; i<10; i++ ) { - if( x > x0 || x < x1 ) - goto ihalve; - y = gammaIncompleteCompl(a,x); - if ( y < yl || y > yh ) - goto ihalve; - if ( y < y0 ) { - x0 = x; - yl = y; - } else { - x1 = x; - yh = y; - } - /* compute the derivative of the function at this point */ - d = (a - 1.0L) * log(x0) - x0 - lgm; - if ( d < -MAXLOGL ) - goto ihalve; - d = -exp(d); - /* compute the step to the next approximation of x */ - d = (y - y0)/d; - x = x - d; - if ( i < 3 ) continue; - if ( fabs(d/x) < dithresh ) return x; - } - - /* Resort to interval halving if Newton iteration did not converge. */ -ihalve: - d = 0.0625L; - if ( x0 == real.max ) { - if( x <= 0.0L ) - x = 1.0L; - while( x0 == real.max ) { - x = (1.0L + d) * x; - y = gammaIncompleteCompl( a, x ); - if ( y < y0 ) { - x0 = x; - yl = y; - break; - } - d = d + d; - } - } - d = 0.5L; - dir = 0; - - for( i=0; i<400; i++ ) { - x = x1 + d * (x0 - x1); - y = gammaIncompleteCompl( a, x ); - lgm = (x0 - x1)/(x1 + x0); - if ( fabs(lgm) < dithresh ) - break; - lgm = (y - y0)/y0; - if ( fabs(lgm) < dithresh ) - break; - if ( x <= 0.0L ) - break; - if ( y > y0 ) { - x1 = x; - yh = y; - if ( dir < 0 ) { - dir = 0; - d = 0.5L; - } else if ( dir > 1 ) - d = 0.5L * d + 0.5L; - else - d = (y0 - yl)/(yh - yl); - dir += 1; - } else { - x0 = x; - yl = y; - if ( dir > 0 ) { - dir = 0; - d = 0.5L; - } else if ( dir < -1 ) - d = 0.5L * d; - else - d = (y0 - yl)/(yh - yl); - dir -= 1; - } - } - /+ - if( x == 0.0L ) - mtherr( "igamil", UNDERFLOW ); - +/ - return x; -} - -debug(UnitTest) { -unittest { -//Values from Excel's GammaInv(1-p, x, 1) -assert(fabs(gammaIncompleteComplInv(1, 0.5) - 0.693147188044814) < 0.00000005); -assert(fabs(gammaIncompleteComplInv(12, 0.99) - 5.42818075054289) < 0.00000005); -assert(fabs(gammaIncompleteComplInv(100, 0.8) - 91.5013985848288L) < 0.000005); - -assert(gammaIncomplete(1, 0)==0); -assert(gammaIncompleteCompl(1, 0)==1); -assert(gammaIncomplete(4545, real.infinity)==1); - -// Values from Excel's (1-GammaDist(x, alpha, 1, TRUE)) - -assert(fabs(1.0L-gammaIncompleteCompl(0.5, 2) - 0.954499729507309L) < 0.00000005); -assert(fabs(gammaIncomplete(0.5, 2) - 0.954499729507309L) < 0.00000005); -// Fixed Cephes bug: -assert(gammaIncompleteCompl(384, real.infinity)==0); -assert(gammaIncompleteComplInv(3, 0)==real.infinity); -} -} - -/** Digamma function -* -* The digamma function is the logarithmic derivative of the gamma function. -* -* digamma(x) = d/dx logGamma(x) -* -*/ -real digamma(real x) -{ - // Based on CEPHES, Stephen L. Moshier. - - // DAC: These values are Bn / n for n=2,4,6,8,10,12,14. - const real [] Bn_n = [ - 1.0L/(6*2), -1.0L/(30*4), 1.0L/(42*6), -1.0L/(30*8), - 5.0L/(66*10), -691.0L/(2730*12), 7.0L/(6*14) ]; - - real p, q, nz, s, w, y, z; - int i, n, negative; - - negative = 0; - nz = 0.0; - - if ( x <= 0.0 ) { - negative = 1; - q = x; - p = floor(q); - if( p == q ) { - return NaN(TANGO_NAN.GAMMA_POLE); // singularity. - } - /* Remove the zeros of tan(PI x) - * by subtracting the nearest integer from x - */ - nz = q - p; - if ( nz != 0.5 ) { - if ( nz > 0.5 ) { - p += 1.0; - nz = q - p; - } - nz = PI/tan(PI*nz); - } else { - nz = 0.0; - } - x = 1.0 - x; - } - - // check for small positive integer - if ((x <= 13.0) && (x == floor(x)) ) { - y = 0.0; - n = rndint(x); - // DAC: CEPHES bugfix. Cephes did this in reverse order, which - // created a larger roundoff error. - for (i=n-1; i>0; --i) { - y+=1.0L/i; - } - y -= EULERGAMMA; - goto done; - } - - s = x; - w = 0.0; - while ( s < 10.0 ) { - w += 1.0/s; - s += 1.0; - } - - if ( s < 1.0e17 ) { - z = 1.0/(s * s); - y = z * poly(z, Bn_n); - } else - y = 0.0; - - y = log(s) - 0.5L/s - y - w; - -done: - if ( negative ) { - y -= nz; - } - return y; -} - -import tango.stdc.stdio; -debug(UnitTest) { -unittest { - // Exact values - assert(digamma(1)== -EULERGAMMA); - assert(feqrel(digamma(0.25), -PI/2 - 3* LN2 - EULERGAMMA)>=real.mant_dig-6); - assert(feqrel(digamma(1.0L/6), -PI/2 *sqrt(3.0L) - 2* LN2 -1.5*log(3.0L) - EULERGAMMA)>=real.mant_dig-7); - assert(digamma(-5)!<>0); - assert(feqrel(digamma(2.5), -EULERGAMMA - 2*LN2 + 2.0 + 2.0L/3)>=real.mant_dig-9); - assert(isIdentical(digamma(NaN(0xABC)), NaN(0xABC))); - - for (int k=1; k<40; ++k) { - real y=0; - for (int u=k; u>=1; --u) { - y+= 1.0L/u; - } - assert(feqrel(digamma(k+1),-EULERGAMMA + y) >=real.mant_dig-2); - } - -// printf("%d %La %La %d %d\n", k+1, digamma(k+1), -EULERGAMMA + x, feqrel(digamma(k+1),-EULERGAMMA + y), feqrel(digamma(k+1), -EULERGAMMA + x)); -} -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/IEEE.d --- a/tango/tango/math/IEEE.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1704 +0,0 @@ -/** - * Low-level Mathematical Functions which take advantage of the IEEE754 ABI. - * - * Copyright: Portions Copyright (C) 2001-2005 Digital Mars. - * License: BSD style: $(LICENSE), Digital Mars. - * Authors: Don Clugston, Walter Bright, Sean Kelly - */ -/* Portions of this code were taken from Phobos std.math, which has the following - * copyright notice: - * - * Author: - * Walter Bright - * Copyright: - * Copyright (c) 2001-2005 by Digital Mars, - * All Rights Reserved, - * www.digitalmars.com - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - *
    - *
  • The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - *
  • - *
  • Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - *
  • - *
  • This notice may not be removed or altered from any source - * distribution. - *
  • - *
- */ -/** - * Macros: - * - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - * SVH3 = $(TR $(TH $1) $(TH $2) $(TH $3)) - * SV3 = $(TR $(TD $1) $(TD $2) $(TD $3)) - * NAN = $(RED NAN) - */ -module tango.math.IEEE; - -version(DigitalMars) -{ - version(D_InlineAsm_X86) - { - version = DigitalMars_D_InlineAsm_X86; - } -} - -version (X86){ - version = X86_Any; -} - -version (X86_64){ - version = X86_Any; -} - -version (DigitalMars_D_InlineAsm_X86) { - // Don't include this extra dependency unless we need to. - debug(UnitTest) { - static import tango.stdc.math; - } -} else { - // Needed for cos(), sin(), tan() on GNU. - static import tango.stdc.math; -} - -// Standard Tango NaN payloads. -// NOTE: These values may change in future Tango releases -// The lowest three bits indicate the cause of the NaN: -// 0 = error other than those listed below: -// 1 = domain error -// 2 = singularity -// 3 = range -// 4-7 = reserved. -enum TANGO_NAN { - // General errors - DOMAIN_ERROR = 0x0101, - SINGULARITY = 0x0102, - RANGE_ERROR = 0x0103, - // NaNs created by functions in the basic library - TAN_DOMAIN = 0x1001, - POW_DOMAIN = 0x1021, - GAMMA_DOMAIN = 0x1101, - GAMMA_POLE = 0x1102, - SGNGAMMA = 0x1112, - BETA_DOMAIN = 0x1131, - // NaNs from statistical functions - NORMALDISTRIBUTION_INV_DOMAIN = 0x2001, - STUDENTSDDISTRIBUTION_DOMAIN = 0x2011 -} - -/* Most of the functions depend on the format of the largest IEEE floating-point type. - * These code will differ depending on whether 'real' is 64, 80, or 128 bits, - * and whether it is a big-endian or little-endian architecture. - * Only three 'real' ABIs are currently supported: - * 64 bit Big-endian (eg PowerPC) - * 64 bit Little-endian - * 80 bit Little-endian, with implied bit (eg x87, Itanium). - * There is also an unsupported ABI which does not follow IEEE; several of its functions - * will generate run-time errors if used. - * 128 bit Big-endian (double-double, as used by GDC <= 0.23) - */ - -version(LittleEndian) { - static assert(real.mant_dig == 53 || real.mant_dig==64, - "Only 64-bit and 80-bit reals are supported for LittleEndian CPUs"); -} else { - static assert(real.mant_dig == 53 || real.mant_dig==106, - "Only 64-bit reals are supported for BigEndian CPUs. 106-bit reals have partial support"); -} - -/** IEEE exception status flags - - These flags indicate that an exceptional floating-point condition has occured. - They indicate that a NaN or an infinity has been generated, that a result - is inexact, or that a signalling NaN has been encountered. - The return values of the properties should be treated as booleans, although - each is returned as an int, for speed. - - Example: - ---- - real a=3.5; - // Set all the flags to zero - resetIeeeFlags(); - assert(!ieeeFlags.divByZero); - // Perform a division by zero. - a/=0.0L; - assert(a==real.infinity); - assert(ieeeFlags.divByZero); - // Create a NaN - a*=0.0L; - assert(ieeeFlags.invalid); - assert(isNaN(a)); - - // Check that calling func() has no effect on the - // status flags. - IeeeFlags f = ieeeFlags; - func(); - assert(ieeeFlags == f); - - ---- - */ -struct IeeeFlags -{ -private: - // The x87 FPU status register is 16 bits. - // The Pentium SSE2 status register is 32 bits. - int m_flags; - version (X86_Any) { - // Applies to both x87 status word (16 bits) and SSE2 status word(32 bits). - enum : int { - INEXACT_MASK = 0x20, - UNDERFLOW_MASK = 0x10, - OVERFLOW_MASK = 0x08, - DIVBYZERO_MASK = 0x04, - INVALID_MASK = 0x01 - } - // Don't bother about denormals, they are not supported on all CPUs. - //const int DENORMAL_MASK = 0x02; - } else version (PPC) { - // PowerPC FPSCR is a 32-bit register. - enum : int { - INEXACT_MASK = 0x600, - UNDERFLOW_MASK = 0x010, - OVERFLOW_MASK = 0x008, - DIVBYZERO_MASK = 0x020, - INVALID_MASK = 0xF80 - } - } -private: - static IeeeFlags getIeeeFlags() - { - // This is a highly time-critical operation, and - // should really be an intrinsic. In this case, we - // take advantage of the fact that for DMD - // a struct containing only a int is returned in EAX. - version(D_InlineAsm_X86) { - asm { - fstsw AX; - // NOTE: If compiler supports SSE2, need to OR the result with - // the SSE2 status register. - // Clear all irrelevant bits - and EAX, 0x03D; - } - } else { - assert(0, "Not yet supported"); - } - } - static void resetIeeeFlags() - { - version(D_InlineAsm_X86) { - asm { - fnclex; - } - } else { - assert(0, "Not yet supported"); - } - } -public: - /// The result cannot be represented exactly, so rounding occured. - /// (example: x = sin(0.1); } - int inexact() { return m_flags & INEXACT_MASK; } - /// A zero was generated by underflow (example: x = real.min*real.epsilon/2;) - int underflow() { return m_flags & UNDERFLOW_MASK; } - /// An infinity was generated by overflow (example: x = real.max*2;) - int overflow() { return m_flags & OVERFLOW_MASK; } - /// An infinity was generated by division by zero (example: x = 3/0.0; ) - int divByZero() { return m_flags & DIVBYZERO_MASK; } - /// A machine NaN was generated. (example: x = real.infinity * 0.0; ) - int invalid() { return m_flags & INVALID_MASK; } -} - -/// Return a snapshot of the current state of the floating-point status flags. -IeeeFlags ieeeFlags() { return IeeeFlags.getIeeeFlags(); } - -/// Set all of the floating-point status flags to false. -void resetIeeeFlags() { IeeeFlags.resetIeeeFlags; } - -/** IEEE rounding modes. - * The default mode is ROUNDTONEAREST. - */ -enum RoundingMode : short { - ROUNDTONEAREST = 0x0000, - ROUNDDOWN = 0x0400, - ROUNDUP = 0x0800, - ROUNDTOZERO = 0x0C00 -}; - -/** Change the rounding mode used for all floating-point operations. - * - * Returns the old rounding mode. - * - * When changing the rounding mode, it is almost always necessary to restore it - * at the end of the function. Typical usage: ---- - auto oldrounding = setIeeeRounding(RoundingMode.ROUNDDOWN); - scope (exit) setIeeeRounding(oldrounding); ---- - */ -RoundingMode setIeeeRounding(RoundingMode roundingmode) { - version(D_InlineAsm_X86) { - // TODO: For SSE/SSE2, do we also need to set the SSE rounding mode? - short cont; - asm { - fstcw cont; - mov CX, cont; - mov AX, cont; - and EAX, 0x0C00; // Form the return value - and CX, 0xF3FF; - or CX, roundingmode; - mov cont, CX; - fldcw cont; - } - } else { - assert(0, "Not yet supported"); - } -} - -/** Get the IEEE rounding mode which is in use. - * - */ -RoundingMode getIeeeRounding() { - version(D_InlineAsm_X86) { - // TODO: For SSE/SSE2, do we also need to check the SSE rounding mode? - short cont; - asm { - mov EAX, 0x0C00; - fstcw cont; - and AX, cont; - } - } else { - assert(0, "Not yet supported"); - } -} - -debug(UnitTest) { - version(D_InlineAsm_X86) { // Won't work for anything else yet -unittest { - real a = 3.5; - resetIeeeFlags(); - assert(!ieeeFlags.divByZero); - a /= 0.0L; - assert(ieeeFlags.divByZero); - assert(a == real.infinity); - a *= 0.0L; - assert(ieeeFlags.invalid); - assert(isNaN(a)); - a = real.max; - a *= 2; - assert(ieeeFlags.overflow); - a = real.min * real.epsilon; - a /= 99; - assert(ieeeFlags.underflow); - assert(ieeeFlags.inexact); - - int r = getIeeeRounding; - assert(r == RoundingMode.ROUNDTONEAREST); -} -} -} - -// Note: Itanium supports more precision options than this. SSE/SSE2 does not support any. -enum PrecisionControl : short { - PRECISION80 = 0x300, - PRECISION64 = 0x200, - PRECISION32 = 0x000 -}; - -/** Set the number of bits of precision used by 'real'. - * - * Returns: the old precision. - * This is not supported on all platforms. - */ -PrecisionControl reduceRealPrecision(PrecisionControl prec) { - version(D_InlineAsm_X86) { - short cont; - asm { - fstcw cont; - mov CX, cont; - mov AX, cont; - and EAX, 0x0300; // Form the return value - and CX, 0xFCFF; - or CX, prec; - mov cont, CX; - fldcw cont; - } - } else { - assert(0, "Not yet supported"); - } -} - -/** - * Separate floating point value into significand and exponent. - * - * Returns: - * Calculate and return x and exp such that - * value =x*2$(SUP exp) and - * .5 <= |x| < 1.0
- * x has same sign as value. - * - * $(TABLE_SV - * value returns exp - * ±0.0 ±0.0 0 - * +∞ +∞ int.max - * -∞ -∞ int.min - * ±$(NAN) ±$(NAN) int.min - * ) - */ -real frexp(real value, out int exp) -{ - ushort* vu = cast(ushort*)&value; - long* vl = cast(long*)&value; - uint ex; - - static if (real.mant_dig==64) const ushort EXPMASK = 0x7FFF; - else const ushort EXPMASK = 0x7FF0; - - version(LittleEndian) { - static if (real.mant_dig==64) const int EXPONENTPOS = 4; - else const int EXPONENTPOS = 3; - } else { // BigEndian - const int EXPONENTPOS = 0; - } - - ex = vu[EXPONENTPOS] & EXPMASK; - static if (real.mant_dig == 64) { - // 80-bit reals - if (ex) { // If exponent is non-zero - if (ex == EXPMASK) { // infinity or NaN - // 80-bit reals - if (*vl & 0x7FFFFFFFFFFFFFFF) { // NaN - *vl |= 0xC000000000000000; // convert $(NAN)S to $(NAN)Q - exp = int.min; - } else if (vu[EXPONENTPOS] & 0x8000) { // negative infinity - exp = int.min; - } else { // positive infinity - exp = int.max; - } - } else { - exp = ex - 0x3FFE; - vu[EXPONENTPOS] = cast(ushort)((0x8000 & vu[EXPONENTPOS]) | 0x3FFE); - } - } else if (!*vl) { - // value is +-0.0 - exp = 0; - } else { - // denormal - int i = -0x3FFD; - do { - i--; - *vl <<= 1; - } while (*vl > 0); - exp = i; - vu[EXPONENTPOS] = cast(ushort)((0x8000 & vu[EXPONENTPOS]) | 0x3FFE); - } - } else static if(real.mant_dig==106) { - // 128-bit reals - assert(0, "Unsupported"); - } else { - // 64-bit reals - if (ex) { // If exponent is non-zero - if (ex == EXPMASK) { // infinity or NaN - if (*vl==0x7FF0_0000_0000_0000) { // positive infinity - exp = int.max; - } else if (*vl==0xFFF0_0000_0000_0000) { // negative infinity - exp = int.min; - } else { // NaN - *vl |= 0x0008_0000_0000_0000; // convert $(NAN)S to $(NAN)Q - exp = int.min; - } - } else { - exp = (ex - 0x3FE0) >>> 4; - ve[EXPONENTPOS] = (0x8000 & ve[EXPONENTPOS]) | 0x3FE0; - } - } else if (!(*vl & 0x7FFF_FFFF_FFFF_FFFF)) { - // value is +-0.0 - exp = 0; - } else { - // denormal - ushort sgn; - sgn = (0x8000 & ve[EXPONENTPOS])| 0x3FE0; - *vl &= 0x7FFF_FFFF_FFFF_FFFF; - - int i = -0x3FD+11; - do { - i--; - *vl <<= 1; - } while (*vl > 0); - exp = i; - ve[EXPONENTPOS] = sgn; - } - } - return value; -} - -debug(UnitTest) { - -unittest -{ - static real vals[][3] = // x,frexp,exp - [ - [0.0, 0.0, 0], - [-0.0, -0.0, 0], - [1.0, .5, 1], - [-1.0, -.5, 1], - [2.0, .5, 2], - [double.min/2.0, .5, -1022], - [real.infinity,real.infinity,int.max], - [-real.infinity,-real.infinity,int.min], - [real.nan,real.nan,int.min], - [-real.nan,-real.nan,int.min], - ]; - - int i; - - for (i = 0; i < vals.length; i++) { - real x = vals[i][0]; - real e = vals[i][1]; - int exp = cast(int)vals[i][2]; - int eptr; - real v = frexp(x, eptr); -// printf("frexp(%La) = %La, should be %La, eptr = %d, should be %d\n", x, v, e, eptr, exp); - assert(isIdentical(e, v)); - assert(exp == eptr); - - } - static if (real.mant_dig == 64) { - static real extendedvals[][3] = [ // x,frexp,exp - [0x1.a5f1c2eb3fe4efp+73, 0x1.A5F1C2EB3FE4EFp-1, 74], // normal - [0x1.fa01712e8f0471ap-1064, 0x1.fa01712e8f0471ap-1, -1063], - [real.min, .5, -16381], - [real.min/2.0L, .5, -16382] // denormal - ]; - - for (i = 0; i < extendedvals.length; i++) { - real x = extendedvals[i][0]; - real e = extendedvals[i][1]; - int exp = cast(int)extendedvals[i][2]; - int eptr; - real v = frexp(x, eptr); - assert(isIdentical(e, v)); - assert(exp == eptr); - - } - } -} -} - -/** - * Compute n * 2$(SUP exp) - * References: frexp - */ -real ldexp(real n, int exp) /* intrinsic */ -{ - version(DigitalMars_D_InlineAsm_X86) - { - asm - { - fild exp; - fld n; - fscale; - fstp st(1), st(0); - } - } - else - { - return tango.stdc.math.ldexpl(n, exp); - } -} - -/** - * Extracts the exponent of x as a signed integral value. - * - * If x is not a special value, the result is the same as - * cast(int)logb(x). - * - * Remarks: This function is consistent with IEEE754R, but it - * differs from the C function of the same name - * in the return value of infinity. (in C, ilogb(real.infinity)== int.max). - * Note that the special return values may all be equal. - * - * $(TABLE_SV - * x ilogb(x) invalid? - * 0 FP_ILOGB0 yes - * ±∞ FP_ILOGBINFINITY yes - * $(NAN) FP_ILOGBNAN yes - * ) - */ -int ilogb(real x) -{ - version(DigitalMars_D_InlineAsm_X86) - { - int y; - asm { - fld x; - fxtract; - fstp ST(0), ST; // drop significand - fistp y, ST(0); // and return the exponent - } - return y; - } else static if (real.mant_dig==64) { // 80-bit reals - short e = (cast(short *)&x)[4] & 0x7FFF; - if (e == 0x7FFF) { - // BUG: should also set the invalid exception - ulong s = *cast(ulong *)&x; - if (s == 0x8000_0000_0000_0000) { - return FP_ILOGBINFINITY; - } - else return FP_ILOGBNAN; - } - if (e==0) { - ulong s = *cast(ulong *)&x; - if (s == 0x0000_0000_0000_0000) { - // BUG: should also set the invalid exception - return FP_ILOGB0; - } - // Denormals - x *= 0x1p+63; - short f = (cast(short *)&x)[4]; - return -0x3FFF - (63-f); - - } - return e - 0x3FFF; - } else { - return tango.stdc.math.ilogbl(x); - } -} - -version (X86) -{ - const int FP_ILOGB0 = -int.max-1; - const int FP_ILOGBNAN = -int.max-1; - const int FP_ILOGBINFINITY = -int.max-1; -} else { - alias tango.stdc.math.FP_ILOGB0 FP_ILOGB0; - alias tango.stdc.math.FP_ILOGBNAN FP_ILOGBNAN; - const int FP_ILOGBINFINITY = int.max; -} - -debug(UnitTest) { -unittest { - assert(ilogb(1.0) == 0); - assert(ilogb(65536) == 16); - assert(ilogb(-65536) == 16); - assert(ilogb(1.0 / 65536) == -16); - assert(ilogb(real.nan) == FP_ILOGBNAN); - assert(ilogb(0.0) == FP_ILOGB0); - assert(ilogb(-0.0) == FP_ILOGB0); - // denormal - assert(ilogb(0.125 * real.min) == real.min_exp - 4); - assert(ilogb(real.infinity) == FP_ILOGBINFINITY); -} -} - -/** - * Extracts the exponent of x as a signed integral value. - * - * If x is subnormal, it is treated as if it were normalized. - * For a positive, finite x: - * - * ----- - * 1 <= $(I x) * FLT_RADIX$(SUP -logb(x)) < FLT_RADIX - * ----- - * - * $(TABLE_SV - * x logb(x) Divide by 0? - * ±∞ +∞ no - * ±0.0 -∞ yes - * ) - */ -real logb(real x) -{ - version(DigitalMars_D_InlineAsm_X86) - { - asm { - fld x; - fxtract; - fstp ST(0), ST; // drop significand - } - } else { - return tango.stdc.math.logbl(x); - } -} - -debug(UnitTest) { -unittest { - assert(logb(real.infinity)== real.infinity); - assert(isIdentical(logb(NaN(0xFCD)), NaN(0xFCD))); - assert(logb(1.0)== 0.0); - assert(logb(-65536) == 16); - assert(logb(0.0)== -real.infinity); - assert(ilogb(0.125*real.min) == real.min_exp-4); -} -} - -/** - * Efficiently calculates x * 2$(SUP n). - * - * scalbn handles underflow and overflow in - * the same fashion as the basic arithmetic operators. - * - * $(TABLE_SV - * x scalb(x) - * ±∞ ±∞ - * ±0.0 ±0.0 - * ) - */ -real scalbn(real x, int n) -{ - version(DigitalMars_D_InlineAsm_X86) - { - asm { - fild n; - fld x; - fscale; - fstp st(1), st; - } - } else { - // BUG: Not implemented in DMD - return tango.stdc.math.scalbnl(x, n); - } -} - -debug(UnitTest) { -unittest { - assert(scalbn(-real.infinity, 5) == -real.infinity); - assert(isIdentical(scalbn(NaN(0xABC),7), NaN(0xABC))); -} -} - -/** - * Returns the positive difference between x and y. - * - * If either of x or y is $(NAN), it will be returned. - * Returns: - * $(TABLE_SV - * $(SVH Arguments, fdim(x, y)) - * $(SV x > y, x - y) - * $(SV x <= y, +0.0) - * ) - */ -real fdim(real x, real y) -{ - return (x !<= y) ? x - y : +0.0; -} - -debug(UnitTest) { -unittest { - assert(isIdentical(fdim(NaN(0xABC), 58.2), NaN(0xABC))); -} -} - -/** - * Returns |x| - * - * $(TABLE_SV - * x fabs(x) - * ±0.0 +0.0 - * ±∞ +∞ - * ) - */ -real fabs(real x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fabs; - } - } - else - { - return tango.stdc.math.fabsl(x); - } -} - -unittest { - assert(isIdentical(fabs(NaN(0xABC)), NaN(0xABC))); -} - -/** - * Returns (x * y) + z, rounding only once according to the - * current rounding mode. - * - * BUGS: Not currently implemented - rounds twice. - */ -real fma(float x, float y, float z) -{ - return (x * y) + z; -} - -/** - * Calculate cos(y) + i sin(y). - * - * On x86 CPUs, this is a very efficient operation; - * almost twice as fast as calculating sin(y) and cos(y) - * seperately, and is the preferred method when both are required. - */ -creal expi(real y) -{ - version(DigitalMars_D_InlineAsm_X86) - { - asm - { - fld y; - fsincos; - fxch st(1), st(0); - } - } - else - { - return tango.stdc.math.cosl(y) + tango.stdc.math.sinl(y)*1i; - } -} - -debug(UnitTest) { -unittest -{ - assert(expi(1.3e5L) == tango.stdc.math.cosl(1.3e5L) + tango.stdc.math.sinl(1.3e5L) * 1i); - assert(expi(0.0L) == 1L + 0.0Li); -} -} - -/********************************* - * Returns !=0 if e is a NaN. - */ - -int isNaN(real x) -{ - static if (real.mant_dig==double.mant_dig) { - // 64-bit real - ulong* p = cast(ulong *)&x; - return (*p & 0x7FF0_0000 == 0x7FF0_0000) && *p & 0x000F_FFFF; - } else { - // 80-bit real - ushort* pe = cast(ushort *)&x; - ulong* ps = cast(ulong *)&x; - - return (pe[4] & 0x7FFF) == 0x7FFF && - *ps & 0x7FFFFFFFFFFFFFFF; - } -} - - -debug(UnitTest) { -unittest -{ - assert(isNaN(float.nan)); - assert(isNaN(-double.nan)); - assert(isNaN(real.nan)); - - assert(!isNaN(53.6)); - assert(!isNaN(float.infinity)); -} -} - -/** - * Returns !=0 if x is normalized. - * - * (Need one for each format because subnormal - * floats might be converted to normal reals) - */ -int isNormal(float x) -{ - uint *p = cast(uint *)&x; - uint e; - - e = *p & 0x7F800000; - return e && e != 0x7F800000; -} - -/** ditto */ -int isNormal(double d) -{ - uint *p = cast(uint *)&d; - uint e; - - e = p[1] & 0x7FF00000; - return e && e != 0x7FF00000; -} - -/** ditto */ -int isNormal(real x) -{ - static if (real.mant_dig == double.mant_dig) { - return isNormal(cast(double)x); - } else { - ushort* pe = cast(ushort *)&x; - long* ps = cast(long *)&x; - - return (pe[4] & 0x7FFF) != 0x7FFF && *ps < 0; - } -} - -debug(UnitTest) { -unittest -{ - float f = 3; - double d = 500; - real e = 10e+48; - - assert(isNormal(f)); - assert(isNormal(d)); - assert(isNormal(e)); -} -} - -/********************************* - * Is the binary representation of x identical to y? - * - * Same as ==, except that positive and negative zero are not identical, - * and two $(NAN)s are identical if they have the same 'payload'. - */ - -bool isIdentical(real x, real y) -{ - long* pxs = cast(long *)&x; - long* pys = cast(long *)&y; - static if (real.mant_dig == double.mant_dig){ - return pxs[0] == pys[0]; - } else { - ushort* pxe = cast(ushort *)&x; - ushort* pye = cast(ushort *)&y; - return pxe[4] == pye[4] && pxs[0] == pys[0]; - } -} - -/** ditto */ -bool isIdentical(ireal x, ireal y) { - return isIdentical(x.im, y.im); -} - -/** ditto */ -bool isIdentical(creal x, creal y) { - return isIdentical(x.re, y.re) && isIdentical(x.im, y.im); -} - - -debug(UnitTest) { -unittest { - assert(isIdentical(0.0, 0.0)); - assert(!isIdentical(0.0, -0.0)); - assert(isIdentical(NaN(0xABC), NaN(0xABC))); - assert(!isIdentical(NaN(0xABC), NaN(218))); - assert(isIdentical(1.234e56, 1.234e56)); - assert(isNaN(NaN(0x12345))); - assert(isIdentical(3.1 + NaN(0xDEF) * 1i, 3.1 + NaN(0xDEF)*1i)); - assert(!isIdentical(3.1+0.0i, 3.1-0i)); - assert(!isIdentical(0.0i, 2.5e58i)); -} -} - -/********************************* - * Is number subnormal? (Also called "denormal".) - * Subnormals have a 0 exponent and a 0 most significant significand bit. - */ - -/* Need one for each format because subnormal floats might - * be converted to normal reals. - */ - -int isSubnormal(float f) -{ - uint *p = cast(uint *)&f; - - return (*p & 0x7F800000) == 0 && *p & 0x007FFFFF; -} - -debug(UnitTest) { -unittest -{ - float f = 3.0; - - for (f = 1.0; !isSubnormal(f); f /= 2) - assert(f != 0); -} -} - -/// ditto - -int isSubnormal(double d) -{ - uint *p = cast(uint *)&d; - - return (p[1] & 0x7FF00000) == 0 && (p[0] || p[1] & 0x000FFFFF); -} - -debug(UnitTest) { -unittest -{ - double f; - - for (f = 1; !isSubnormal(f); f /= 2) - assert(f != 0); -} -} - -/// ditto - -int isSubnormal(real e) -{ - static if (real.mant_dig == double.mant_dig) { - return isSubnormal(cast(double)e); - } else { - ushort* pe = cast(ushort *)&e; - long* ps = cast(long *)&e; - - return (pe[4] & 0x7FFF) == 0 && *ps > 0; - } -} - -debug(UnitTest) { -unittest -{ - real f; - - for (f = 1; !isSubnormal(f); f /= 2) - assert(f != 0); -} -} - -/********************************* - * Return !=0 if x is ±0. - */ -int isZero(real x) -{ - static if (real.mant_dig == double.mant_dig) { - return ((*cast(ulong *)&x) & 0x7FFF_FFFF_FFFF_FFFF) == 0; - } else { - ushort* pe = cast(ushort *)&x; - ulong* ps = cast(ulong *)&x; - return (pe[4] & 0x7FFF) == 0 && *ps == 0; - } -} - -debug(UnitTest) { -unittest -{ - assert(isZero(0.0)); - assert(isZero(-0.0)); - assert(!isZero(2.5)); - assert(!isZero(real.min / 1000)); -} -} - -/********************************* - * Return !=0 if e is ±∞. - */ - -int isInfinity(real e) -{ - static if (real.mant_dig == double.mant_dig) { - return ((*cast(ulong *)&x)&0x7FFF_FFFF_FFFF_FFFF) == 0x7FF8_0000_0000_0000; - } else { - ushort* pe = cast(ushort *)&e; - ulong* ps = cast(ulong *)&e; - - return (pe[4] & 0x7FFF) == 0x7FFF && - *ps == 0x8000_0000_0000_0000; - } -} - -debug(UnitTest) { -unittest -{ - assert(isInfinity(float.infinity)); - assert(!isInfinity(float.nan)); - assert(isInfinity(double.infinity)); - assert(isInfinity(-real.infinity)); - - assert(isInfinity(-1.0 / 0.0)); -} -} - -/** - * Calculate the next largest floating point value after x. - * - * Return the least number greater than x that is representable as a real; - * thus, it gives the next point on the IEEE number line. - * This function is included in the forthcoming IEEE 754R standard. - * - * $(TABLE_SV - * $(SVH x, nextup(x) ) - * $(SV -∞, -real.max ) - * $(SV ±0.0, real.min*real.epsilon ) - * $(SV real.max, real.infinity ) - * $(SV real.infinity, real.infinity ) - * $(SV $(NAN), $(NAN) ) - * ) - * - * nextDoubleUp and nextFloatUp are the corresponding functions for - * the IEEE double and IEEE float number lines. - */ -real nextUp(real x) -{ - static if (real.mant_dig == double.mant_dig) { - return nextDoubleUp(x); - } else { - // For 80-bit reals, the "implied bit" is a nuisance... - ushort *pe = cast(ushort *)&x; - ulong *ps = cast(ulong *)&x; - - if ((pe[4] & 0x7FFF) == 0x7FFF) { - // First, deal with NANs and infinity - if (x == -real.infinity) return -real.max; - return x; // +INF and NAN are unchanged. - } - if (pe[4] & 0x8000) { // Negative number -- need to decrease the significand - --*ps; - // Need to mask with 0x7FFF... so denormals are treated correctly. - if ((*ps & 0x7FFFFFFFFFFFFFFF) == 0x7FFFFFFFFFFFFFFF) { - if (pe[4] == 0x8000) { // it was negative zero - *ps = 1; pe[4] = 0; // smallest subnormal. - return x; - } - --pe[4]; - if (pe[4] == 0x8000) { - return x; // it's become a denormal, implied bit stays low. - } - *ps = 0xFFFFFFFFFFFFFFFF; // set the implied bit - return x; - } - return x; - } else { - // Positive number -- need to increase the significand. - // Works automatically for positive zero. - ++*ps; - if ((*ps & 0x7FFFFFFFFFFFFFFF) == 0) { - // change in exponent - ++pe[4]; - *ps = 0x8000000000000000; // set the high bit - } - } - return x; - } -} - -/** ditto */ -double nextDoubleUp(double x) -{ - ulong *ps = cast(ulong *)&x; - - if ((*ps & 0x7FF0_0000_0000_0000) == 0x7FF0_0000_0000_0000) { - // First, deal with NANs and infinity - if (x == -x.infinity) return -x.max; - return x; // +INF and NAN are unchanged. - } - if (*ps & 0x8000_0000_0000_0000) { // Negative number - if (*ps == 0x8000_0000_0000_0000) { // it was negative zero - *ps = 0x0000_0000_0000_0001; // change to smallest subnormal - return x; - } - --*ps; - } else { // Positive number - ++*ps; - } - return x; -} - -/** ditto */ -float nextFloatUp(float x) -{ - uint *ps = cast(uint *)&x; - - if ((*ps & 0x7F80_0000) == 0x7F80_0000) { - // First, deal with NANs and infinity - if (x == -x.infinity) return -x.max; - return x; // +INF and NAN are unchanged. - } - if (*ps & 0x8000_0000) { // Negative number - if (*ps == 0x8000_0000) { // it was negative zero - *ps = 0x0000_0001; // change to smallest subnormal - return x; - } - --*ps; - } else { // Positive number - ++*ps; - } - return x; -} - -debug(UnitTest) { -unittest { - static if (real.mant_dig == 64) { - - // Tests for 80-bit reals - - assert(isIdentical(nextUp(NaN(0xABC)), NaN(0xABC))); - // negative numbers - assert( nextUp(-real.infinity) == -real.max ); - assert( nextUp(-1-real.epsilon) == -1.0 ); - assert( nextUp(-2) == -2.0 + real.epsilon); - // denormals and zero - assert( nextUp(-real.min) == -real.min*(1-real.epsilon) ); - assert( nextUp(-real.min*(1-real.epsilon) == -real.min*(1-2*real.epsilon)) ); - assert( isIdentical(-0.0L, nextUp(-real.min*real.epsilon)) ); - assert( nextUp(-0.0) == real.min*real.epsilon ); - assert( nextUp(0.0) == real.min*real.epsilon ); - assert( nextUp(real.min*(1-real.epsilon)) == real.min ); - assert( nextUp(real.min) == real.min*(1+real.epsilon) ); - // positive numbers - assert( nextUp(1) == 1.0 + real.epsilon ); - assert( nextUp(2.0-real.epsilon) == 2.0 ); - assert( nextUp(real.max) == real.infinity ); - assert( nextUp(real.infinity)==real.infinity ); - } - - assert(isIdentical(nextDoubleUp(NaN(0xABC)), NaN(0xABC))); - // negative numbers - assert( nextDoubleUp(-double.infinity) == -double.max ); - assert( nextDoubleUp(-1-double.epsilon) == -1.0 ); - assert( nextDoubleUp(-2) == -2.0 + double.epsilon); - // denormals and zero - - assert( nextDoubleUp(-double.min) == -double.min*(1-double.epsilon) ); - assert( nextDoubleUp(-double.min*(1-double.epsilon) == -double.min*(1-2*double.epsilon)) ); - assert( isIdentical(-0.0, nextDoubleUp(-double.min*double.epsilon)) ); - assert( nextDoubleUp(0.0) == double.min*double.epsilon ); - assert( nextDoubleUp(-0.0) == double.min*double.epsilon ); - assert( nextDoubleUp(double.min*(1-double.epsilon)) == double.min ); - assert( nextDoubleUp(double.min) == double.min*(1+double.epsilon) ); - // positive numbers - assert( nextDoubleUp(1) == 1.0 + double.epsilon ); - assert( nextDoubleUp(2.0-double.epsilon) == 2.0 ); - assert( nextDoubleUp(double.max) == double.infinity ); - - assert(isIdentical(nextFloatUp(NaN(0xABC)), NaN(0xABC))); - assert( nextFloatUp(-float.min) == -float.min*(1-float.epsilon) ); - assert( nextFloatUp(1.0) == 1.0+float.epsilon ); - assert( nextFloatUp(-0.0) == float.min*float.epsilon); - assert( nextFloatUp(float.infinity)==float.infinity ); - - assert(nextDown(1.0+real.epsilon)==1.0); - assert(nextDoubleDown(1.0+double.epsilon)==1.0); - assert(nextFloatDown(1.0+float.epsilon)==1.0); - assert(nextafter(1.0+real.epsilon, -real.infinity)==1.0); -} -} - -package { -/** Reduces the magnitude of x, so the bits in the lower half of its significand - * are all zero. Returns the amount which needs to be added to x to restore its - * initial value; this amount will also have zeros in all bits in the lower half - * of its significand. - */ -X splitSignificand(X)(inout X x) -{ - if (fabs(x) !< X.infinity) return 0; // don't change NaN or infinity - X y = x; // copy the original value - static if (X.mant_dig == float.mant_dig) { - uint *ps = cast(uint *)&x; - (*ps) &= 0xFFFF_FC00; - } else static if (X.mant_dig == double.mant_dig) { - ulong *ps = cast(ulong *)&x; - (*ps) &= 0xFFFF_FFFF_FC00_0000; - } else static if (X.mant_dig == 64){ // 80-bit real - // An x87 real80 has 63 bits, because the 'implied' bit is stored explicitly. - // This is annoying, because it means the significand cannot be - // precisely halved. Instead, we split it into 31+32 bits. - ulong *ps = cast(ulong *)&x; - (*ps) &= 0xFFFF_FFFF_0000_0000; - } //else static assert(0, "Unsupported size"); - - return y - x; -} - - -//import tango.stdc.stdio; -unittest { - double x = -0x1.234_567A_AAAA_AAp+250; - double y = splitSignificand(x); - assert(x == -0x1.234_5678p+250); - assert(y == -0x0.000_000A_AAAA_A8p+248); - assert(x + y == -0x1.234_567A_AAAA_AAp+250); -} -} - -/** - * Calculate the next smallest floating point value after x. - * - * Return the greatest number less than x that is representable as a real; - * thus, it gives the previous point on the IEEE number line. - * Note: This function is included in the forthcoming IEEE 754R standard. - * - * Special values: - * real.infinity real.max - * real.min*real.epsilon 0.0 - * 0.0 -real.min*real.epsilon - * -0.0 -real.min*real.epsilon - * -real.max -real.infinity - * -real.infinity -real.infinity - * NAN NAN - * - * nextDoubleDown and nextFloatDown are the corresponding functions for - * the IEEE double and IEEE float number lines. - */ -real nextDown(real x) -{ - return -nextUp(-x); -} - -/** ditto */ -double nextDoubleDown(double x) -{ - return -nextDoubleUp(-x); -} - -/** ditto */ -float nextFloatDown(float x) -{ - return -nextFloatUp(-x); -} - -debug(UnitTest) { -unittest { - assert( nextDown(1.0 + real.epsilon) == 1.0); -} -} - - -/** - * Calculates the next representable value after x in the direction of y. - * - * If y > x, the result will be the next largest floating-point value; - * if y < x, the result will be the next smallest value. - * If x == y, the result is y. - * - * Remarks: - * This function is not generally very useful; it's almost always better to use - * the faster functions nextup() or nextdown() instead. - * - * IEEE 754 requirements not implemented: - * The FE_INEXACT and FE_OVERFLOW exceptions will be raised if x is finite and - * the function result is infinite. The FE_INEXACT and FE_UNDERFLOW - * exceptions will be raised if the function value is subnormal, and x is - * not equal to y. - */ -real nextafter(real x, real y) -{ - if (x==y) return y; - return (y>x) ? nextUp(x) : nextDown(x); -} - -/************************************** - * To what precision is x equal to y? - * - * Returns: the number of significand bits which are equal in x and y. - * eg, 0x1.F8p+60 and 0x1.F1p+60 are equal to 5 bits of precision. - * - * $(TABLE_SV - * $(SVH3 x, y, feqrel(x, y) ) - * $(SV3 x, x, real.mant_dig ) - * $(SV3 x, >= 2*x, 0 ) - * $(SV3 x, <= x/2, 0 ) - * $(SV3 $(NAN), any, 0 ) - * $(SV3 any, $(NAN), 0 ) - * ) - * - * Remarks: - * This is a very fast operation, suitable for use in speed-critical code. - * - */ - -int feqrel(real x, real y) -{ - /* Public Domain. Author: Don Clugston, 18 Aug 2005. - */ - - if (x == y) return real.mant_dig; // ensure diff!=0, cope with INF. - - real diff = fabs(x - y); - - ushort *pa = cast(ushort *)(&x); - ushort *pb = cast(ushort *)(&y); - ushort *pd = cast(ushort *)(&diff); - - // The difference in abs(exponent) between x or y and abs(x-y) - // is equal to the number of significand bits of x which are - // equal to y. If negative, x and y have different exponents. - // If positive, x and y are equal to 'bitsdiff' bits. - // AND with 0x7FFF to form the absolute value. - // To avoid out-by-1 errors, we subtract 1 so it rounds down - // if the exponents were different. This means 'bitsdiff' is - // always 1 lower than we want, except that if bitsdiff==0, - // they could have 0 or 1 bits in common. - - static if (real.mant_dig==64) - { - - int bitsdiff = ( ((pa[4]&0x7FFF) + (pb[4]&0x7FFF)-1)>>1) - pd[4]; - - if (pd[4] == 0) - { // Difference is denormal - // For denormals, we need to add the number of zeros that - // lie at the start of diff's significand. - // We do this by multiplying by 2^real.mant_dig - diff *= 0x1p+63; - return bitsdiff + real.mant_dig - pd[4]; - } - - if (bitsdiff > 0) - return bitsdiff + 1; // add the 1 we subtracted before - - // Avoid out-by-1 errors when factor is almost 2. - return (bitsdiff == 0) ? (pa[4] == pb[4]) : 0; - } else { - // 64-bit reals - version(LittleEndian) - const int EXPONENTPOS = 3; - else const int EXPONENTPOS = 0; - - int bitsdiff = ( ((pa[EXPONENTPOS]&0x7FF0) + (pb[EXPONENTPOS]&0x7FF0)-0x10)>>5) - (pd[EXPONENTPOS]&0x7FF0>>4); - - if (pd[EXPONENTPOS] == 0) - { // Difference is denormal - // For denormals, we need to add the number of zeros that - // lie at the start of diff's significand. - // We do this by multiplying by 2^real.mant_dig - diff *= 0x1p+53; - return bitsdiff + real.mant_dig - pd[EXPONENTPOS]; - } - - if (bitsdiff > 0) - return bitsdiff + 1; // add the 1 we subtracted before - - // Avoid out-by-1 errors when factor is almost 2. - if (bitsdiff == 0 && (pa[EXPONENTPOS] ^ pb[EXPONENTPOS])&0x7FF0) return 1; - else return 0; - - } - -} - -debug(UnitTest) { -unittest -{ - // Exact equality - assert(feqrel(real.max,real.max)==real.mant_dig); - assert(feqrel(0,0)==real.mant_dig); - assert(feqrel(7.1824,7.1824)==real.mant_dig); - assert(feqrel(real.infinity,real.infinity)==real.mant_dig); - - // a few bits away from exact equality - real w=1; - for (int i=1; i 0), the return value - * is the arithmetic mean (x + y) / 2. - * If x and y are even powers of 2, the return value is the geometric mean, - * ieeeMean(x, y) = sqrt(x * y). - * - */ -T ieeeMean(T)(T x, T y) -in { - // both x and y must have the same sign, and must not be NaN. - assert(signbit(x) == signbit(y) && x<>=0 && y<>=0); -} -body { - // Runtime behaviour for contract violation: - // If signs are opposite, or one is a NaN, return 0. - if (!((x>=0 && y>=0) || (x<=0 && y<=0))) return 0.0; - - // The implementation is simple: cast x and y to integers, - // average them (avoiding overflow), and cast the result back to a floating-point number. - - T u; - static if (T.mant_dig==64) { // x87, 80-bit reals - // There's slight additional complexity because they are actually - // 79-bit reals... - ushort *ue = cast(ushort *)&u; - ulong *ul = cast(ulong *)&u; - ushort *xe = cast(ushort *)&x; - ulong *xl = cast(ulong *)&x; - ushort *ye = cast(ushort *)&y; - ulong *yl = cast(ulong *)&y; - // Ignore the useless implicit bit. - ulong m = ((*xl) & 0x7FFF_FFFF_FFFF_FFFF) + ((*yl) & 0x7FFF_FFFF_FFFF_FFFF); - - ushort e = cast(ushort)((xe[4] & 0x7FFF) + (ye[4] & 0x7FFF)); - if (m & 0x8000_0000_0000_0000) { - ++e; - m &= 0x7FFF_FFFF_FFFF_FFFF; - } - // Now do a multi-byte right shift - uint c = e & 1; // carry - e >>= 1; - m >>>= 1; - if (c) m |= 0x4000_0000_0000_0000; // shift carry into significand - if (e) *ul = m | 0x8000_0000_0000_0000; // set implicit bit... - else *ul = m; // ... unless exponent is 0 (denormal or zero). - // Prevent a ridiculous warning (why does (ushort | ushort) get promoted to int???) - ue[4]= cast(ushort)( e | (xe[4]& 0x8000)); // restore sign bit - } else static if (T.mant_dig == double.mant_dig) { - ulong *ul = cast(ulong *)&u; - ulong *xl = cast(ulong *)&x; - ulong *yl = cast(ulong *)&y; - ulong m = (((*xl) & 0x7FFF_FFFF_FFFF_FFFF) + ((*yl) & 0x7FFF_FFFF_FFFF_FFFF)) >>> 1; - m |= ((*xl) & 0x8000_0000_0000_0000); - *ul = m; - }else static if (T.mant_dig == float.mant_dig) { - uint *ul = cast(uint *)&u; - uint *xl = cast(uint *)&x; - uint *yl = cast(uint *)&y; - uint m = (((*xl) & 0x7FFF_FFFF) + ((*yl) & 0x7FFF_FFFF)) >>> 1; - m |= ((*xl) & 0x8000_0000); - *ul = m; - } - return u; -} - -debug(UnitTest) { -unittest { - assert(ieeeMean(-0.0,-1e-20)<0); - assert(ieeeMean(0.0,1e-20)>0); - - assert(ieeeMean(1.0L,4.0L)==2L); - assert(ieeeMean(2.0*1.013,8.0*1.013)==4*1.013); - assert(ieeeMean(-1.0L,-4.0L)==-2L); - assert(ieeeMean(-1.0,-4.0)==-2); - assert(ieeeMean(-1.0f,-4.0f)==-2f); - assert(ieeeMean(-1.0,-2.0)==-1.5); - assert(ieeeMean(-1*(1+8*real.epsilon),-2*(1+8*real.epsilon))==-1.5*(1+5*real.epsilon)); - assert(ieeeMean(0x1p60,0x1p-10)==0x1p25); - static if (real.mant_dig==64) { // x87, 80-bit reals - assert(ieeeMean(1.0L,real.infinity)==0x1p8192L); - assert(ieeeMean(0.0L,real.infinity)==1.5); - } - assert(ieeeMean(0.5*real.min*(1-4*real.epsilon),0.5*real.min)==0.5*real.min*(1-2*real.epsilon)); -} -} - -// Functions for NaN payloads -/* - * A 'payload' can be stored in the significand of a $(NAN). One bit is required - * to distinguish between a quiet and a signalling $(NAN). This leaves 22 bits - * of payload for a float; 51 bits for a double; 62 bits for an 80-bit real; - * and 111 bits for a 128-bit quad. -*/ -/** - * Create a $(NAN), storing an integer inside the payload. - * - * For 80-bit or 128-bit reals, the largest possible payload is 0x3FFF_FFFF_FFFF_FFFF. - * For doubles, it is 0x3_FFFF_FFFF_FFFF. - * For floats, it is 0x3F_FFFF. - */ -real NaN(ulong payload) -{ - static if (real.mant_dig == double.mant_dig) { - ulong v = 2; // no implied bit. quiet bit = 1 - } else { - ulong v = 3; // implied bit = 1, quiet bit = 1 - } - - ulong a = payload; - - // 22 Float bits - ulong w = a & 0x3F_FFFF; - a -= w; - - v <<=22; - v |= w; - a >>=22; - - // 29 Double bits - v <<=29; - w = a & 0xFFF_FFFF; - v |= w; - a -= w; - a >>=29; - - static if (real.mant_dig == double.mant_dig) { - v |=0x7FF0_0000_0000_0000; - real x; - * cast(ulong *)(&x) = v; - return x; - } else { - // Extended real bits - v <<=11; - a &= 0x7FF; - v |= a; - - real x = real.nan; - * cast(ulong *)(&x) = v; - return x; - } -} - -/** - * Extract an integral payload from a $(NAN). - * - * Returns: - * the integer payload as a ulong. - * - * For 80-bit or 128-bit reals, the largest possible payload is 0x3FFF_FFFF_FFFF_FFFF. - * For doubles, it is 0x3_FFFF_FFFF_FFFF. - * For floats, it is 0x3F_FFFF. - */ -ulong getNaNPayload(real x) -{ - assert(isNaN(x)); - ulong m = *cast(ulong *)(&x); - static if (real.mant_dig == double.mant_dig) { - // Make it look like an 80-bit significand. - // Skip exponent, and quiet bit - m &= 0x0007_FFFF_FFFF_FFFF; - m <<= 10; - } - // ignore implicit bit and quiet bit - ulong f = m & 0x3FFF_FF00_0000_0000L; - ulong w = f >>> 40; - w |= (m & 0x00FF_FFFF_F800L) << (22 - 11); - w |= (m & 0x7FF) << 51; - return w; -} - -debug(UnitTest) { -unittest { - real nan4 = NaN(0x789_ABCD_EF12_3456); - static if (real.mant_dig == 64) { - assert (getNaNPayload(nan4) == 0x789_ABCD_EF12_3456); - } else { - assert (getNaNPayload(nan4) == 0x1_ABCD_EF12_3456); - } - double nan5 = nan4; - assert (getNaNPayload(nan5) == 0x1_ABCD_EF12_3456); - float nan6 = nan4; - assert (getNaNPayload(nan6) == 0x12_3456); - nan4 = NaN(0xFABCD); - assert (getNaNPayload(nan4) == 0xFABCD); - nan6 = nan4; - assert (getNaNPayload(nan6) == 0xFABCD); - nan5 = NaN(0x100_0000_0000_3456); - assert(getNaNPayload(nan5) == 0x0000_0000_3456); -} -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/Math.d --- a/tango/tango/math/Math.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1870 +0,0 @@ -/** - * Elementary Mathematical Functions - * - * Copyright: Portions Copyright (C) 2001-2005 Digital Mars. - * License: BSD style: $(LICENSE), Digital Mars. - * Authors: Walter Bright, Don Clugston, Sean Kelly - */ -/* Portions of this code were taken from Phobos std.math, which has the following - * copyright notice: - * - * Author: - * Walter Bright - * Copyright: - * Copyright (c) 2001-2005 by Digital Mars, - * All Rights Reserved, - * www.digitalmars.com - * License: - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - *
    - *
  • The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - *
  • - *
  • Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - *
  • - *
  • This notice may not be removed or altered from any source - * distribution. - *
  • - *
- */ - -/** - * Macros: - * NAN = $(RED NAN) - * TEXTNAN = $(RED NAN:$1 ) - * SUP = $0 - * GAMMA = Γ - * INTEGRAL = ∫ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * BIGSUM = $(BIG Σ $2$(SMALL $1)) - * CHOOSE = $(BIG () $(SMALL $1)$(SMALL $2) $(BIG )) - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - * TABLE_DOMRG = $0
- * DOMAIN = $(TR $(TD Domain) $(TD $0)) - * RANGE = $(TR $(TD Range) $(TD $0)) - */ - -module tango.math.Math; - -static import tango.stdc.math; -private import tango.math.IEEE; - -version(DigitalMars) -{ - version(D_InlineAsm_X86) - { - version = DigitalMars_D_InlineAsm_X86; - } -} - -/* - * Constants - */ - -const real E = 2.7182818284590452354L; /** e */ -const real LOG2T = 0x1.a934f0979a3715fcp+1; /** log210 */ // 3.32193 fldl2t -const real LOG2E = 0x1.71547652b82fe178p+0; /** log2e */ // 1.4427 fldl2e -const real LOG2 = 0x1.34413509f79fef32p-2; /** log102 */ // 0.30103 fldlg2 -const real LOG10E = 0.43429448190325182765L; /** log10e */ -const real LN2 = 0x1.62e42fefa39ef358p-1; /** ln 2 */ // 0.693147 fldln2 -const real LN10 = 2.30258509299404568402L; /** ln 10 */ -const real PI = 0x1.921fb54442d1846ap+1; /** π */ // 3.14159 fldpi -const real PI_2 = 1.57079632679489661923L; /** π / 2 */ -const real PI_4 = 0.78539816339744830962L; /** π / 4 */ -const real M_1_PI = 0.31830988618379067154L; /** 1 / π */ -const real M_2_PI = 0.63661977236758134308L; /** 2 / π */ -const real M_2_SQRTPI = 1.12837916709551257390L; /** 2 / √π */ -const real SQRT2 = 1.41421356237309504880L; /** √2 */ -const real SQRT1_2 = 0.70710678118654752440L; /** √½ */ - -//const real SQRTPI = 1.77245385090551602729816748334114518279754945612238L; /** √π */ -//const real SQRT2PI = 2.50662827463100050242E0L; /** √(2 π) */ - -const real MAXLOG = 0x1.62e42fefa39ef358p+13; /** log(real.max) */ -const real MINLOG = -0x1.6436716d5406e6d8p+13; /** log(real.min*real.epsilon) */ -const real EULERGAMMA = 0.57721_56649_01532_86060_65120_90082_40243_10421_59335_93992; /** Euler-Mascheroni constant 0.57721566.. */ - -/* - * Primitives - */ - -/** - * Calculates the absolute value - * - * For complex numbers, abs(z) = sqrt( $(POWER z.re, 2) + $(POWER z.im, 2) ) - * = hypot(z.re, z.im). - */ -real abs(real x) -{ - return tango.math.IEEE.fabs(x); -} - -/** ditto */ -long abs(long x) -{ - return x>=0 ? x : -x; -} - -/** ditto */ -int abs(int x) -{ - return x>=0 ? x : -x; -} - -/** ditto */ -real abs(creal z) -{ - return hypot(z.re, z.im); -} - -/** ditto */ -real abs(ireal y) -{ - return tango.math.IEEE.fabs(y.im); -} - -debug(UnitTest) { -unittest -{ - assert(isIdentical(0.0L,abs(-0.0L))); - assert(isNaN(abs(real.nan))); - assert(abs(-real.infinity) == real.infinity); - assert(abs(-3.2Li) == 3.2L); - assert(abs(71.6Li) == 71.6L); - assert(abs(-56) == 56); - assert(abs(2321312L) == 2321312L); - assert(abs(-1.0L+1.0Li) == sqrt(2.0L)); -} -} - -/** - * Complex conjugate - * - * conj(x + iy) = x - iy - * - * Note that z * conj(z) = $(POWER z.re, 2) + $(POWER z.im, 2) - * is always a real number - */ -creal conj(creal z) -{ - return z.re - z.im*1i; -} - -/** ditto */ -ireal conj(ireal y) -{ - return -y; -} - -debug(UnitTest) { -unittest -{ - assert(conj(7 + 3i) == 7-3i); - ireal z = -3.2Li; - assert(conj(z) == -z); -} -} - -private { - // Return the type which would be returned by a max or min operation -template minmaxtype(T...){ - static if(T.length == 1) alias typeof(T[0]) minmaxtype; - else static if(T.length > 2) - alias minmaxtype!(minmaxtype!(T[0..2]), T[2..$]) minmaxtype; - else alias typeof (T[1] > T[0] ? T[1] : T[0]) minmaxtype; -} -} - -/** Return the minimum of the supplied arguments. - * - * Note: If the arguments are floating-point numbers, and at least one is a NaN, - * the result is undefined. - */ -minmaxtype!(T) min(T...)(T arg){ - static if(arg.length == 1) return arg[0]; - else static if(arg.length == 2) return arg[1] < arg[0] ? arg[1] : arg[0]; - static if(arg.length > 2) return min(arg[1] < arg[0] ? arg[1] : arg[0], arg[2..$]); -} - -/** Return the maximum of the supplied arguments. - * - * Note: If the arguments are floating-point numbers, and at least one is a NaN, - * the result is undefined. - */ -minmaxtype!(T) max(T...)(T arg){ - static if(arg.length == 1) return arg[0]; - else static if(arg.length == 2) return arg[1] > arg[0] ? arg[1] : arg[0]; - static if(arg.length > 2) return max(arg[1] > arg[0] ? arg[1] : arg[0], arg[2..$]); -} -debug(UnitTest) { -unittest -{ - assert(max('e', 'f')=='f'); - assert(min(3.5, 3.8)==3.5); - // check implicit conversion to integer. - assert(min(3.5, 18)==3.5); - -} -} - -/** Returns the minimum number of x and y, favouring numbers over NaNs. - * - * If both x and y are numbers, the minimum is returned. - * If both parameters are NaN, either will be returned. - * If one parameter is a NaN and the other is a number, the number is - * returned (this behaviour is mandated by IEEE 754R, and is useful - * for determining the range of a function). - */ -real minNum(real x, real y) { - if (x<=y || isNaN(y)) return x; else return y; -} - -/** Returns the maximum number of x and y, favouring numbers over NaNs. - * - * If both x and y are numbers, the maximum is returned. - * If both parameters are NaN, either will be returned. - * If one parameter is a NaN and the other is a number, the number is - * returned (this behaviour is mandated by IEEE 754R, and is useful - * for determining the range of a function). - */ -real maxNum(real x, real y) { - if (x>=y || isNaN(y)) return x; else return y; -} - -/** Returns the minimum of x and y, favouring NaNs over numbers - * - * If both x and y are numbers, the minimum is returned. - * If both parameters are NaN, either will be returned. - * If one parameter is a NaN and the other is a number, the NaN is returned. - */ -real minNaN(real x, real y) { - return (x<=y || isNaN(x))? x : y; -} - -/** Returns the maximum of x and y, favouring NaNs over numbers - * - * If both x and y are numbers, the maximum is returned. - * If both parameters are NaN, either will be returned. - * If one parameter is a NaN and the other is a number, the NaN is returned. - */ -real maxNaN(real x, real y) { - return (x>=y || isNaN(x))? x : y; -} - -debug(UnitTest) { -unittest -{ - assert(maxNum(NaN(0xABC), 56.1L)== 56.1L); - assert(isIdentical(maxNaN(NaN(1389), 56.1L), NaN(1389))); - assert(maxNum(28.0, NaN(0xABC))== 28.0); - assert(minNum(1e12, NaN(0xABC))== 1e12); - assert(isIdentical(minNaN(1e12, NaN(23454)), NaN(23454))); - assert(isIdentical(minNum(NaN(489), NaN(23)), NaN(489))); -} -} - -/* - * Trig Functions - */ - -/** - * Returns cosine of x. x is in radians. - * - * $(TABLE_SV - * $(TR $(TH x) $(TH cos(x)) $(TH invalid?) ) - * $(TR $(TD $(NAN)) $(TD $(NAN)) $(TD yes) ) - * $(TR $(TD ±∞) $(TD $(NAN)) $(TD yes) ) - * ) - * Bugs: - * Results are undefined if |x| >= $(POWER 2,64). - */ -real cos(real x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fcos; - } - } - else - { - return tango.stdc.math.cosl(x); - } -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(cos(NaN(314)), NaN(314))); -} -} - -/** - * Returns sine of x. x is in radians. - * - * $(TABLE_SV - * x sin(x) invalid? - * $(NAN) $(NAN) yes - * ±0.0 ±0.0 no - * ±∞ $(NAN) yes - * ) - * Bugs: - * Results are undefined if |x| >= $(POWER 2,64). - */ -real sin(real x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fsin; - } - } - else - { - return tango.stdc.math.sinl(x); - } -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(sin(NaN(314)), NaN(314))); -} -} - -version (GNU) { - extern (C) real tanl(real); -} - -/** - * Returns tangent of x. x is in radians. - * - * $(TABLE_SV - * x tan(x) invalid? - * $(NAN) $(NAN) yes - * ±0.0 ±0.0 no - * ±∞ $(NAN) yes - * ) - */ -real tan(real x) -{ - version (GNU) { - return tanl(x); - } else version (LLVMDC) { - return tango.stdc.math.tanl(x); - } else { - asm - { - fld x[EBP] ; // load theta - fxam ; // test for oddball values - fstsw AX ; - sahf ; - jc trigerr ; // x is NAN, infinity, or empty - // 387's can handle denormals -SC18: fptan ; - fstp ST(0) ; // dump X, which is always 1 - fstsw AX ; - sahf ; - jnp Lret ; // C2 = 1 (x is out of range) - - // Do argument reduction to bring x into range - fldpi ; - fxch ; -SC17: fprem1 ; - fstsw AX ; - sahf ; - jp SC17 ; - fstp ST(1) ; // remove pi from stack - jmp SC18 ; - -trigerr: - jnp Lret ; // if x is NaN, return x. - fstp ST(0) ; // dump x, which will be infinity - } - return NaN(TANGO_NAN.TAN_DOMAIN); -Lret: - ; - } -} - -debug(UnitTest) { -unittest -{ -// Returns true if equal to precision, false if not -// (Used only in unit test for tan()) -bool mfeq(real x, real y, real precision) -{ - if (x == y) - return true; - if (isNaN(x) || isNaN(y)) - return false; - return fabs(x - y) <= precision; -} - - - static real vals[][2] = // angle,tan - [ - [ 0, 0], - [ .5, .5463024898], - [ 1, 1.557407725], - [ 1.5, 14.10141995], - [ 2, -2.185039863], - [ 2.5,-.7470222972], - [ 3, -.1425465431], - [ 3.5, .3745856402], - [ 4, 1.157821282], - [ 4.5, 4.637332055], - [ 5, -3.380515006], - [ 5.5,-.9955840522], - [ 6, -.2910061914], - [ 6.5, .2202772003], - [ 10, .6483608275], - - // special angles - [ PI_4, 1], - //[ PI_2, real.infinity], - [ 3*PI_4, -1], - [ PI, 0], - [ 5*PI_4, 1], - //[ 3*PI_2, -real.infinity], - [ 7*PI_4, -1], - [ 2*PI, 0], - - // overflow - [ real.infinity, real.nan], - [ real.nan, real.nan], - ]; - int i; - - for (i = 0; i < vals.length; i++) - { - real x = vals[i][0]; - real r = vals[i][1]; - real t = tan(x); - - //printf("tan(%Lg) = %Lg, should be %Lg\n", x, t, r); - if (isNaN(r)) assert(isNaN(t)); - else assert(mfeq(r, t, .0000001)); - - x = -x; - r = -r; - t = tan(x); - //printf("tan(%Lg) = %Lg, should be %Lg\n", x, t, r); - if (isNaN(r)) assert(isNaN(t)); - else assert(mfeq(r, t, .0000001)); - } - assert(isIdentical(tan(NaN(735)), NaN(735))); - assert(isNaN(tan(real.infinity))); -} -} - -/***************************************** - * Sine, cosine, and arctangent of multiple of π - * - * Accuracy is preserved for large values of x. - */ -real cosPi(real x) -{ - return cos((x%2.0)*PI); -} - -/** ditto */ -real sinPi(real x) -{ - return sin((x%2.0)*PI); -} - -/** ditto */ -real atanPi(real x) -{ - return PI * atan(x); // BUG: Fix this. -} - -debug(UnitTest) { -unittest { - assert(isIdentical(sinPi(0.0), 0.0)); - assert(isIdentical(sinPi(-0.0), -0.0)); - assert(isIdentical(atanPi(0.0), 0.0)); - assert(isIdentical(atanPi(-0.0), -0.0)); -} -} - -/*********************************** - * sine, complex and imaginary - * - * sin(z) = sin(z.re)*cosh(z.im) + cos(z.re)*sinh(z.im)i - * - * If both sin(θ) and cos(θ) are required, - * it is most efficient to use expi(&theta). - */ -creal sin(creal z) -{ - creal cs = expi(z.re); - return cs.im * cosh(z.im) + cs.re * sinh(z.im) * 1i; -} - -/** ditto */ -ireal sin(ireal y) -{ - return cosh(y.im)*1i; -} - -debug(UnitTest) { -unittest { - assert(sin(0.0+0.0i) == 0.0); - assert(sin(2.0+0.0i) == sin(2.0L) ); -} -} - -/*********************************** - * cosine, complex and imaginary - * - * cos(z) = cos(z.re)*cosh(z.im) + sin(z.re)*sinh(z.im)i - */ -creal cos(creal z) -{ - creal cs = expi(z.re); - return cs.re * cosh(z.im) + cs.im * sinh(z.im) * 1i; -} - -/** ditto */ -real cos(ireal y) -{ - return cosh(y.im); -} - -debug(UnitTest) { -unittest{ - assert(cos(0.0+0.0i)==1.0); - assert(cos(1.3L+0.0i)==cos(1.3L)); - assert(cos(5.2Li)== cosh(5.2L)); -} -} - -/** - * Calculates the arc cosine of x, - * returning a value ranging from -π/2 to π/2. - * - * $(TABLE_SV - * x acos(x) invalid? - * >1.0 $(NAN) yes - * <-1.0 $(NAN) yes - * $(NAN) $(NAN) yes - * ) - */ -real acos(real x) -{ - return tango.stdc.math.acosl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(acos(NaN(254)), NaN(254))); -} -} - -/** - * Calculates the arc sine of x, - * returning a value ranging from -π/2 to π/2. - * - * $(TABLE_SV - * x asin(x) invalid? - * ±0.0 ±0.0 no - * >1.0 $(NAN) yes - * <-1.0 $(NAN) yes - * ) - */ -real asin(real x) -{ - return tango.stdc.math.asinl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(asin(NaN(7249)), NaN(7249))); -} -} - -/** - * Calculates the arc tangent of x, - * returning a value ranging from -π/2 to π/2. - * - * $(TABLE_SV - * x atan(x) invalid? - * ±0.0 ±0.0 no - * ±∞ $(NAN) yes - * ) - */ -real atan(real x) -{ - return tango.stdc.math.atanl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(atan(NaN(9876)), NaN(9876))); -} -} - -/** - * Calculates the arc tangent of y / x, - * returning a value ranging from -π/2 to π/2. - * - * Remarks: - * The Complex Argument of a complex number z is given by - * Arg(z) = atan2(z.re, z.im) - * - * $(TABLE_SV - * y x atan(y, x) - * $(NAN) anything $(NAN) - * anything $(NAN) $(NAN) - * ±0.0 > 0.0 ±0.0 - * ±0.0 ±0.0 ±0.0 - * ±0.0 < 0.0 ±π - * ±0.0 -0.0 ±π - * > 0.0 ±0.0 π/2 - * < 0.0 ±0.0 π/2 - * > 0.0 ∞ ±0.0 - * ±∞ anything ±π/2 - * > 0.0 -∞ ±π - * ±∞ ∞ ±π/4 - * ±∞ -∞ ±3π/4 - * ) - */ -real atan2(real y, real x) -{ - return tango.stdc.math.atan2l(y,x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(atan2(5.3, NaN(9876)), NaN(9876))); - assert(isIdentical(atan2(NaN(9876), 2.18), NaN(9876))); -} -} - -/*********************************** - * Complex inverse sine - * - * asin(z) = -i log( sqrt(1-$(POWER z, 2)) + iz) - * where both log and sqrt are complex. - */ -creal asin(creal z) -{ - return -log(sqrt(1-z*z) + z*1i)*1i; -} - -debug(UnitTest) { -unittest { - assert(asin(sin(0+0i)) == 0 + 0i); -} -} - -/*********************************** - * Complex inverse cosine - * - * acos(z) = &pi/2 - asin(z) - */ -creal acos(creal z) -{ - return PI_2 - asin(z); -} - - -/** - * Calculates the hyperbolic cosine of x. - * - * $(TABLE_SV - * x cosh(x) invalid? - * ±∞ ±0.0 no - * ) - */ -real cosh(real x) -{ - return tango.stdc.math.coshl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(cosh(NaN(432)), NaN(432))); -} -} - -/** - * Calculates the hyperbolic sine of x. - * - * $(TABLE_SV - * x sinh(x) invalid? - * ±0.0 ±0.0 no - * ±∞ ±∞ no - * ) - */ -real sinh(real x) -{ - return tango.stdc.math.sinhl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(sinh(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the hyperbolic tangent of x. - * - * $(TABLE_SV - * x tanh(x) invalid? - * ±0.0 ±0.0 no - * ±∞ ±1.0 no - * ) - */ -real tanh(real x) -{ - return tango.stdc.math.tanhl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(tanh(NaN(0xABC)), NaN(0xABC))); -} -} - -/*********************************** - * hyperbolic sine, complex and imaginary - * - * sinh(z) = cos(z.im)*sinh(z.re) + sin(z.im)*cosh(z.re)i - */ -creal sinh(creal z) -{ - creal cs = expi(z.im); - return cs.re * sinh(z.re) + cs.im * cosh(z.re) * 1i; -} - -/** ditto */ -ireal sinh(ireal y) -{ - return sin(y.im)*1i; -} - -debug(UnitTest) { -unittest { - assert(sinh(4.2L + 0i)==sinh(4.2L)); -} -} - -/*********************************** - * hyperbolic cosine, complex and imaginary - * - * cosh(z) = cos(z.im)*cosh(z.re) + sin(z.im)*sinh(z.re)i - */ -creal cosh(creal z) -{ - creal cs = expi(z.im); - return cs.re * cosh(z.re) + cs.im * sinh(z.re) * 1i; -} - -/** ditto */ -real cosh(ireal y) -{ - return cos(y.im); -} - -debug(UnitTest) { -unittest { - assert(cosh(8.3L + 0i)==cosh(8.3L)); -} -} - - -/** - * Calculates the inverse hyperbolic cosine of x. - * - * Mathematically, acosh(x) = log(x + sqrt( x*x - 1)) - * - * $(TABLE_DOMRG - * $(DOMAIN 1..∞) - * $(RANGE 1..log(real.max), ∞ ) - * ) - * $(TABLE_SV - * $(SVH x, acosh(x) ) - * $(SV $(NAN), $(NAN) ) - * $(SV <1, $(NAN) ) - * $(SV 1, 0 ) - * $(SV +∞,+∞) - * ) - */ -real acosh(real x) -{ - if (x > 1/real.epsilon) - return LN2 + log(x); - else - return log(x + sqrt(x*x - 1)); -} - -debug(UnitTest) { -unittest -{ - assert(isNaN(acosh(0.9))); - assert(isNaN(acosh(real.nan))); - assert(acosh(1)==0.0); - assert(acosh(real.infinity) == real.infinity); - // NaN payloads - assert(isIdentical(acosh(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the inverse hyperbolic sine of x. - * - * Mathematically, - * --------------- - * asinh(x) = log( x + sqrt( x*x + 1 )) // if x >= +0 - * asinh(x) = -log(-x + sqrt( x*x + 1 )) // if x <= -0 - * ------------- - * - * $(TABLE_SV - * $(SVH x, asinh(x) ) - * $(SV $(NAN), $(NAN) ) - * $(SV ±0, ±0 ) - * $(SV ±∞,±∞) - * ) - */ -real asinh(real x) -{ - if (tango.math.IEEE.fabs(x) > 1 / real.epsilon) // beyond this point, x*x + 1 == x*x - return tango.math.IEEE.copysign(LN2 + log(tango.math.IEEE.fabs(x)), x); - else - { - // sqrt(x*x + 1) == 1 + x * x / ( 1 + sqrt(x*x + 1) ) - return tango.math.IEEE.copysign(log1p(tango.math.IEEE.fabs(x) + x*x / (1 + sqrt(x*x + 1)) ), x); - } -} - -debug(UnitTest) { -unittest -{ - assert(isIdentical(0.0L,asinh(0.0))); - assert(isIdentical(-0.0L,asinh(-0.0))); - assert(asinh(real.infinity) == real.infinity); - assert(asinh(-real.infinity) == -real.infinity); - assert(isNaN(asinh(real.nan))); - // NaN payloads - assert(isIdentical(asinh(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the inverse hyperbolic tangent of x, - * returning a value from ranging from -1 to 1. - * - * Mathematically, atanh(x) = log( (1+x)/(1-x) ) / 2 - * - * - * $(TABLE_DOMRG - * $(DOMAIN -∞..∞) - * $(RANGE -1..1) ) - * $(TABLE_SV - * $(SVH x, atanh(x) ) - * $(SV $(NAN), $(NAN) ) - * $(SV ±0, ±0) - * $(SV ±1, ±∞) - * ) - */ -real atanh(real x) -{ - // log( (1+x)/(1-x) ) == log ( 1 + (2*x)/(1-x) ) - return 0.5 * log1p( 2 * x / (1 - x) ); -} - -debug(UnitTest) { -unittest -{ - assert(isIdentical(0.0L, atanh(0.0))); - assert(isIdentical(-0.0L,atanh(-0.0))); - assert(isIdentical(atanh(-1),-real.infinity)); - assert(isIdentical(atanh(1),real.infinity)); - assert(isNaN(atanh(-real.infinity))); - // NaN payloads - assert(isIdentical(atanh(NaN(0xABC)), NaN(0xABC))); -} -} - -/** ditto */ -creal atanh(ireal y) -{ - // Not optimised for accuracy or speed - return 0.5*(log(1+y) - log(1-y)); -} - -/** ditto */ -creal atanh(creal z) -{ - // Not optimised for accuracy or speed - return 0.5 * (log(1 + z) - log(1-z)); -} - -/* - * Powers and Roots - */ - -/** - * Compute square root of x. - * - * $(TABLE_SV - * x sqrt(x) invalid? - * -0.0 -0.0 no - * <0.0 $(NAN) yes - * +∞ +∞ no - * ) - */ -float sqrt(float x) /* intrinsic */ -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fsqrt; - } - } - else - { - return tango.stdc.math.sqrtf(x); - } -} - -double sqrt(double x) /* intrinsic */ /// ditto -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fsqrt; - } - } - else - { - return tango.stdc.math.sqrt(x); - } -} - -real sqrt(real x) /* intrinsic */ /// ditto -{ - version(D_InlineAsm_X86) - { - asm - { - fld x; - fsqrt; - } - } - else - { - return tango.stdc.math.sqrtl(x); - } -} - -/** ditto */ -creal sqrt(creal z) -{ - - if (z == 0.0) return z; - real x,y,w,r; - creal c; - - x = tango.math.IEEE.fabs(z.re); - y = tango.math.IEEE.fabs(z.im); - if (x >= y) { - r = y / x; - w = sqrt(x) * sqrt(0.5 * (1 + sqrt(1 + r * r))); - } else { - r = x / y; - w = sqrt(y) * sqrt(0.5 * (r + sqrt(1 + r * r))); - } - - if (z.re >= 0) { - c = w + (z.im / (w + w)) * 1.0i; - } else { - if (z.im < 0) w = -w; - c = z.im / (w + w) + w * 1.0i; - } - return c; -} - -import tango.stdc.stdio; -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(sqrt(NaN(0xABC)), NaN(0xABC))); - assert(sqrt(-1+0i) == 1i); - assert(isIdentical(sqrt(0-0i), 0-0i)); - assert(cfeqrel(sqrt(4+16i)*sqrt(4+16i), 4+16i)>=real.mant_dig-2); -} -} - -/** - * Calculates the cube root of x. - * - * $(TABLE_SV - * x cbrt(x) invalid? - * ±0.0 ±0.0 no - * $(NAN) $(NAN) yes - * ±∞ ±∞ no - * ) - */ -real cbrt(real x) -{ - return tango.stdc.math.cbrtl(x); -} - - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(cbrt(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates e$(SUP x). - * - * $(TABLE_SV - * x exp(x) - * +∞ +∞ - * -∞ +0.0 - * ) - */ -real exp(real x) -{ - return tango.stdc.math.expl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(exp(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the value of the natural logarithm base (e) - * raised to the power of x, minus 1. - * - * For very small x, expm1(x) is more accurate - * than exp(x)-1. - * - * $(TABLE_SV - * x e$(SUP x)-1 - * ±0.0 ±0.0 - * +∞ +∞ - * -∞ -1.0 - * ) - */ -real expm1(real x) -{ - return tango.stdc.math.expm1l(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(expm1(NaN(0xABC)), NaN(0xABC))); -} -} - - -/** - * Calculates 2$(SUP x). - * - * $(TABLE_SV - * x exp2(x) - * +∞ +∞ - * -∞ +0.0 - * ) - */ -real exp2(real x) -{ - return tango.stdc.math.exp2l(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(exp2(NaN(0xABC)), NaN(0xABC))); -} -} - -/* - * Powers and Roots - */ - -/** - * Calculate the natural logarithm of x. - * - * $(TABLE_SV - * x log(x) divide by 0? invalid? - * ±0.0 -∞ yes no - * < 0.0 $(NAN) no yes - * +∞ +∞ no no - * ) - */ -real log(real x) -{ - return tango.stdc.math.logl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(log(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the natural logarithm of 1 + x. - * - * For very small x, log1p(x) will be more accurate than - * log(1 + x). - * - * $(TABLE_SV - * x log1p(x) divide by 0? invalid? - * ±0.0 ±0.0 no no - * -1.0 -∞ yes no - * <-1.0 $(NAN) no yes - * +∞ -∞ no no - * ) - */ -real log1p(real x) -{ - return tango.stdc.math.log1pl(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(log1p(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculates the base-2 logarithm of x: - * log2x - * - * $(TABLE_SV - * x log2(x) divide by 0? invalid? - * ±0.0 -∞ yes no - * < 0.0 $(NAN) no yes - * +∞ +∞ no no - * ) - */ -real log2(real x) -{ - return tango.stdc.math.log2l(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(log2(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Calculate the base-10 logarithm of x. - * - * $(TABLE_SV - * x log10(x) divide by 0? invalid? - * ±0.0 -∞ yes no - * < 0.0 $(NAN) no yes - * +∞ +∞ no no - * ) - */ -real log10(real x) -{ - return tango.stdc.math.log10l(x); -} - -debug(UnitTest) { -unittest { - // NaN payloads - assert(isIdentical(log10(NaN(0xABC)), NaN(0xABC))); -} -} - -/*********************************** - * Exponential, complex and imaginary - * - * For complex numbers, the exponential function is defined as - * - * exp(z) = exp(z.re)cos(z.im) + exp(z.re)sin(z.im)i. - * - * For a pure imaginary argument, - * exp(θi) = cos(θ) + sin(θ)i. - * - */ -creal exp(ireal y) -{ - return expi(y.im); -} - -/** ditto */ -creal exp(creal z) -{ - return expi(z.im) * exp(z.re); -} - -debug(UnitTest) { -unittest { - assert(exp(1.3e5Li)==cos(1.3e5L)+sin(1.3e5L)*1i); - assert(exp(0.0Li)==1L+0.0Li); - assert(exp(7.2 + 0.0i) == exp(7.2L)); - creal c = exp(ireal.nan); - assert(isNaN(c.re) && isNaN(c.im)); - c = exp(ireal.infinity); - assert(isNaN(c.re) && isNaN(c.im)); -} -} - -/*********************************** - * Natural logarithm, complex - * - * Returns complex logarithm to the base e (2.718...) of - * the complex argument x. - * - * If z = x + iy, then - * log(z) = log(abs(z)) + i arctan(y/x). - * - * The arctangent ranges from -PI to +PI. - * There are branch cuts along both the negative real and negative - * imaginary axes. For pure imaginary arguments, use one of the - * following forms, depending on which branch is required. - * ------------ - * log( 0.0 + yi) = log(-y) + PI_2i // y<=-0.0 - * log(-0.0 + yi) = log(-y) - PI_2i // y<=-0.0 - * ------------ - */ -creal log(creal z) -{ - return log(abs(z)) + atan2(z.im, z.re)*1i; -} - -debug(UnitTest) { -private { -/* - * feqrel for complex numbers. Returns the worst relative - * equality of the two components. - */ -int cfeqrel(creal a, creal b) -{ - int intmin(int a, int b) { return a= real.mant_dig-10); - assert(cfeqrel(log(0.0L+2i),( log(2.0L)+PI_2*1i)) >= real.mant_dig-10); -} -} - -/** - * Fast integral powers. - */ -real pow(real x, uint n) -{ - real p; - - switch (n) - { - case 0: - p = 1.0; - break; - - case 1: - p = x; - break; - - case 2: - p = x * x; - break; - - default: - p = 1.0; - while (1){ - if (n & 1) - p *= x; - n >>= 1; - if (!n) - break; - x *= x; - } - break; - } - return p; -} - -/** ditto */ -real pow(real x, int n) -{ - if (n < 0) return pow(x, cast(real)n); - else return pow(x, cast(uint)n); -} - -/** - * Calculates x$(SUP y). - * - * $(TABLE_SV - * - * x y pow(x, y) div 0 invalid? - * - * anything ±0.0 1.0 no no - * - * |x| > 1 +∞ +∞ no no - * - * |x| < 1 +∞ +0.0 no no - * - * |x| > 1 -∞ +0.0 no no - * - * |x| < 1 -∞ +∞ no no - * - * +∞ > 0.0 +∞ no no - * - * +∞ < 0.0 +0.0 no no - * - * -∞ odd integer > 0.0 -∞ no no - * - * -∞ > 0.0, not odd integer +∞ no no - * - * -∞ odd integer < 0.0 -0.0 no no - * - * -∞ < 0.0, not odd integer +0.0 no no - * - * ±1.0 ±∞ $(NAN) no yes - * - * < 0.0 finite, nonintegral $(NAN) no yes - * - * ±0.0 odd integer < 0.0 ±∞ yes no - * - * ±0.0 < 0.0, not odd integer +∞ yes no - * - * ±0.0 odd integer > 0.0 ±0.0 no no - * - * ±0.0 > 0.0, not odd integer +0.0 no no - * ) - */ -real pow(real x, real y) -{ - version (linux) // C pow() often does not handle special values correctly - { - if (isNaN(y)) - return y; - - if (y == 0) - return 1; // even if x is $(NAN) - if (isNaN(x) && y != 0) - return x; - if (isInfinity(y)) - { - if (tango.math.IEEE.fabs(x) > 1) - { - if (signbit(y)) - return +0.0; - else - return real.infinity; - } - else if (tango.math.IEEE.fabs(x) == 1) - { - return NaN(TANGO_NAN.POW_DOMAIN); - } - else // < 1 - { - if (signbit(y)) - return real.infinity; - else - return +0.0; - } - } - if (isInfinity(x)) - { - if (signbit(x)) - { - long i; - i = cast(long)y; - if (y > 0) - { - if (i == y && i & 1) - return -real.infinity; - else - return real.infinity; - } - else if (y < 0) - { - if (i == y && i & 1) - return -0.0; - else - return +0.0; - } - } - else - { - if (y > 0) - return real.infinity; - else if (y < 0) - return +0.0; - } - } - - if (x == 0.0) - { - if (signbit(x)) - { - long i; - - i = cast(long)y; - if (y > 0) - { - if (i == y && i & 1) - return -0.0; - else - return +0.0; - } - else if (y < 0) - { - if (i == y && i & 1) - return -real.infinity; - else - return real.infinity; - } - } - else - { - if (y > 0) - return +0.0; - else if (y < 0) - return real.infinity; - } - } - } - return tango.stdc.math.powl(x, y); -} - -debug(UnitTest) { -unittest -{ - real x = 46; - - assert(pow(x,0) == 1.0); - assert(pow(x,1) == x); - assert(pow(x,2) == x * x); - assert(pow(x,3) == x * x * x); - assert(pow(x,8) == (x * x) * (x * x) * (x * x) * (x * x)); - // NaN payloads - assert(isIdentical(pow(NaN(0xABC), 19), NaN(0xABC))); -} -} - -/** - * Calculates the length of the - * hypotenuse of a right-angled triangle with sides of length x and y. - * The hypotenuse is the value of the square root of - * the sums of the squares of x and y: - * - * sqrt(x² + y²) - * - * Note that hypot(x, y), hypot(y, x) and - * hypot(x, -y) are equivalent. - * - * $(TABLE_SV - * x y hypot(x, y) invalid? - * x ±0.0 |x| no - * ±∞ y +∞ no - * ±∞ $(NAN) +∞ no - * ) - */ -real hypot(real x, real y) -{ - /* - * This is based on code from: - * Cephes Math Library Release 2.1: January, 1989 - * Copyright 1984, 1987, 1989 by Stephen L. Moshier - * Direct inquiries to 30 Frost Street, Cambridge, MA 02140 - */ - - const int PRECL = real.mant_dig/2; // = 32 - - real xx, yy, b, re, im; - int ex, ey, e; - - // Note, hypot(INFINITY, NAN) = INFINITY. - if (tango.math.IEEE.isInfinity(x) || tango.math.IEEE.isInfinity(y)) - return real.infinity; - - if (tango.math.IEEE.isNaN(x)) - return x; - if (tango.math.IEEE.isNaN(y)) - return y; - - re = tango.math.IEEE.fabs(x); - im = tango.math.IEEE.fabs(y); - - if (re == 0.0) - return im; - if (im == 0.0) - return re; - - // Get the exponents of the numbers - xx = tango.math.IEEE.frexp(re, ex); - yy = tango.math.IEEE.frexp(im, ey); - - // Check if one number is tiny compared to the other - e = ex - ey; - if (e > PRECL) - return re; - if (e < -PRECL) - return im; - - // Find approximate exponent e of the geometric mean. - e = (ex + ey) >> 1; - - // Rescale so mean is about 1 - xx = tango.math.IEEE.ldexp(re, -e); - yy = tango.math.IEEE.ldexp(im, -e); - - // Hypotenuse of the right triangle - b = sqrt(xx * xx + yy * yy); - - // Compute the exponent of the answer. - yy = tango.math.IEEE.frexp(b, ey); - ey = e + ey; - - // Check it for overflow and underflow. - if (ey > real.max_exp + 2) { - return real.infinity; - } - if (ey < real.min_exp - 2) - return 0.0; - - // Undo the scaling - b = tango.math.IEEE.ldexp(b, e); - return b; -} - -debug(UnitTest) { -unittest -{ - static real vals[][3] = // x,y,hypot - [ - [ 0, 0, 0], - [ 0, -0, 0], - [ 3, 4, 5], - [ -300, -400, 500], - [ real.min, real.min, 0x1.6a09e667f3bcc908p-16382L], - [ real.max/2, real.max/2, 0x1.6a09e667f3bcc908p+16383L /*8.41267e+4931L*/], - [ real.max, 1, real.max], - [ real.infinity, real.nan, real.infinity], - [ real.nan, real.nan, real.nan], - ]; - - for (int i = 0; i < vals.length; i++) - { - real x = vals[i][0]; - real y = vals[i][1]; - real z = vals[i][2]; - real h = hypot(x, y); - -// printf("hypot(%La, %La) = %La, should be %La\n", x, y, h, z); - assert(isIdentical(z, h)); - } - // NaN payloads - assert(isIdentical(hypot(NaN(0xABC), 3.14), NaN(0xABC))); - assert(isIdentical(hypot(7.6e39, NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Evaluate polynomial A(x) = a0 + a1x + a2x² + a3x³ ... - * - * Uses Horner's rule A(x) = a0 + x(a1 + x(a2 + x(a3 + ...))) - * Params: - * A = array of coefficients a0, a1, etc. - */ -T poly(T)(T x, T[] A) -in -{ - assert(A.length > 0); -} -body -{ - version (DigitalMars_D_InlineAsm_X86) { - const bool Use_D_InlineAsm_X86 = true; - } else const bool Use_D_InlineAsm_X86 = false; - - // BUG (Inherited from Phobos): This code assumes a frame pointer in EBP. - // This is not in the spec. - static if (Use_D_InlineAsm_X86 && is(T==real) && T.sizeof == 10) { - asm // assembler by W. Bright - { - // EDX = (A.length - 1) * real.sizeof - mov ECX,A[EBP] ; // ECX = A.length - dec ECX ; - lea EDX,[ECX][ECX*8] ; - add EDX,ECX ; - add EDX,A+4[EBP] ; - fld real ptr [EDX] ; // ST0 = coeff[ECX] - jecxz return_ST ; - fld x[EBP] ; // ST0 = x - fxch ST(1) ; // ST1 = x, ST0 = r - align 4 ; - L2: fmul ST,ST(1) ; // r *= x - fld real ptr -10[EDX] ; - sub EDX,10 ; // deg-- - faddp ST(1),ST ; - dec ECX ; - jne L2 ; - fxch ST(1) ; // ST1 = r, ST0 = x - fstp ST(0) ; // dump x - align 4 ; - return_ST: ; - ; - } - } else static if ( Use_D_InlineAsm_X86 && is(T==real) && T.sizeof==12){ - asm // assembler by W. Bright - { - // EDX = (A.length - 1) * real.sizeof - mov ECX,A[EBP] ; // ECX = A.length - dec ECX ; - lea EDX,[ECX*8] ; - lea EDX,[EDX][ECX*4] ; - add EDX,A+4[EBP] ; - fld real ptr [EDX] ; // ST0 = coeff[ECX] - jecxz return_ST ; - fld x ; // ST0 = x - fxch ST(1) ; // ST1 = x, ST0 = r - align 4 ; - L2: fmul ST,ST(1) ; // r *= x - fld real ptr -12[EDX] ; - sub EDX,12 ; // deg-- - faddp ST(1),ST ; - dec ECX ; - jne L2 ; - fxch ST(1) ; // ST1 = r, ST0 = x - fstp ST(0) ; // dump x - align 4 ; - return_ST: ; - ; - } - } else { - ptrdiff_t i = A.length - 1; - real r = A[i]; - while (--i >= 0) - { - r *= x; - r += A[i]; - } - return r; - } -} - -debug(UnitTest) { -unittest -{ - debug (math) printf("math.poly.unittest\n"); - real x = 3.1; - const real pp[] = [56.1L, 32.7L, 6L]; - - assert( poly(x, pp) == (56.1L + (32.7L + 6L * x) * x) ); - - assert(isIdentical(poly(NaN(0xABC), pp), NaN(0xABC))); -} -} - -package { -T rationalPoly(T)(T x, T [] numerator, T [] denominator) -{ - return poly(x, numerator)/poly(x, denominator); -} -} - -private enum : int { MANTDIG_2 = real.mant_dig/2 } // Compiler workaround - -/** Floating point "approximate equality". - * - * Return true if x is equal to y, to within the specified precision - * If roundoffbits is not specified, a reasonable default is used. - */ -bool feq(int precision = MANTDIG_2, XReal=real, YReal=real)(XReal x, YReal y) -{ - static assert(is( XReal: real) && is(YReal : real)); - return tango.math.IEEE.feqrel(x, y) >= precision; -} - -unittest{ - assert(!feq(1.0,2.0)); - real y = 58.0000000001; - assert(feq!(20)(58, y)); -} - -/* - * Rounding (returning real) - */ - -/** - * Returns the value of x rounded downward to the next integer - * (toward negative infinity). - */ -real floor(real x) -{ - return tango.stdc.math.floorl(x); -} - -debug(UnitTest) { -unittest { - assert(isIdentical(floor(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Returns the value of x rounded upward to the next integer - * (toward positive infinity). - */ -real ceil(real x) -{ - return tango.stdc.math.ceill(x); -} - -unittest { - assert(isIdentical(ceil(NaN(0xABC)), NaN(0xABC))); -} - -/** - * Return the value of x rounded to the nearest integer. - * If the fractional part of x is exactly 0.5, the return value is rounded to - * the even integer. - */ -real round(real x) -{ - return tango.stdc.math.roundl(x); -} - -debug(UnitTest) { -unittest { - assert(isIdentical(round(NaN(0xABC)), NaN(0xABC))); -} -} - -/** - * Returns the integer portion of x, dropping the fractional portion. - * - * This is also known as "chop" rounding. - */ -real trunc(real x) -{ - return tango.stdc.math.truncl(x); -} - -debug(UnitTest) { -unittest { - assert(isIdentical(trunc(NaN(0xABC)), NaN(0xABC))); -} -} - -/** -* Rounds x to the nearest int or long. -* -* This is generally the fastest method to convert a floating-point number -* to an integer. Note that the results from this function -* depend on the rounding mode, if the fractional part of x is exactly 0.5. -* If using the default rounding mode (ties round to even integers) -* rndint(4.5) == 4, rndint(5.5)==6. -*/ -int rndint(real x) -{ - version(DigitalMars_D_InlineAsm_X86) - { - int n; - asm - { - fld x; - fistp n; - } - return n; - } - else - { - return tango.stdc.math.lrintl(x); - } -} - -/** ditto */ -long rndlong(real x) -{ - version(DigitalMars_D_InlineAsm_X86) - { - long n; - asm - { - fld x; - fistp n; - } - return n; - } - else - { - return tango.stdc.math.llrintl(x); - } -} - -debug(UnitTest) { -version(D_InlineAsm_X86) { // Won't work for anything else yet - -unittest { - - int r = getIeeeRounding; - assert(r==RoundingMode.ROUNDTONEAREST); - real b = 5.5; - int cnear = tango.math.Math.rndint(b); - assert(cnear == 6); - auto oldrounding = setIeeeRounding(RoundingMode.ROUNDDOWN); - scope (exit) setIeeeRounding(oldrounding); - - assert(getIeeeRounding==RoundingMode.ROUNDDOWN); - - int cdown = tango.math.Math.rndint(b); - assert(cdown==5); -} - -unittest { - // Check that the previous test correctly restored the rounding mode - assert(getIeeeRounding==RoundingMode.ROUNDTONEAREST); -} -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/Probability.d --- a/tango/tango/math/Probability.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,769 +0,0 @@ -/** - * Cumulative Probability Distribution Functions - * - * Copyright: Based on the CEPHES math library, which is - * Copyright (C) 1994 Stephen L. Moshier (moshier@world.std.com). - * License: BSD style: $(LICENSE) - * Authors: Stephen L. Moshier (original C code), Don Clugston - */ - -/** - * Macros: - * NAN = $(RED NAN) - * SUP = $0 - * GAMMA = Γ - * INTEGRAL = ∫ - * INTEGRATE = $(BIG ∫$(SMALL $1)$2) - * POWER = $1$2 - * BIGSUM = $(BIG Σ $2$(SMALL $1)) - * CHOOSE = $(BIG () $(SMALL $1)$(SMALL $2) $(BIG )) - * TABLE_SV = - * - * $0
Special Values
- * SVH = $(TR $(TH $1) $(TH $2)) - * SV = $(TR $(TD $1) $(TD $2)) - */ - -module tango.math.Probability; -static import tango.math.ErrorFunction; -private import tango.math.GammaFunction; -private import tango.math.Math; -private import tango.math.IEEE; - - -/*** -Cumulative distribution function for the Normal distribution, and its complement. - -The normal (or Gaussian, or bell-shaped) distribution is -defined as: - -normalDist(x) = 1/$(SQRT) π $(INTEGRAL -$(INFINITY), x) exp( - $(POWER t, 2)/2) dt - = 0.5 + 0.5 * erf(x/sqrt(2)) - = 0.5 * erfc(- x/sqrt(2)) - -Note that -normalDistribution(x) = 1 - normalDistribution(-x). - -Accuracy: -Within a few bits of machine resolution over the entire -range. - -References: -$(LINK http://www.netlib.org/cephes/ldoubdoc.html), -G. Marsaglia, "Evaluating the Normal Distribution", -Journal of Statistical Software 11, (July 2004). -*/ -real normalDistribution(real a) -{ - return tango.math.ErrorFunction.normalDistributionImpl(a); -} - -/** ditto */ -real normalDistributionCompl(real a) -{ - return -tango.math.ErrorFunction.normalDistributionImpl(-a); -} - -/****************************** - * Inverse of Normal distribution function - * - * Returns the argument, x, for which the area under the - * Normal probability density function (integrated from - * minus infinity to x) is equal to p. - * - * For small arguments 0 < p < exp(-2), the program computes - * z = sqrt( -2 log(p) ); then the approximation is - * x = z - log(z)/z - (1/z) P(1/z) / Q(1/z) . - * For larger arguments, x/sqrt(2 pi) = w + w^3 R(w^2)/S(w^2)) , - * where w = p - 0.5 . - */ -real normalDistributionInv(real p) -{ - return tango.math.ErrorFunction.normalDistributionInvImpl(p); -} - -/** ditto */ -real normalDistributionComplInv(real p) -{ - return -tango.math.ErrorFunction.normalDistributionInvImpl(-p); -} - -debug(UnitTest) { -unittest { - assert(feqrel(normalDistributionInv(normalDistribution(0.1)),0.1)>=real.mant_dig-4); - assert(feqrel(normalDistributionComplInv(normalDistributionCompl(0.1)),0.1)>=real.mant_dig-4); -} -} - -/** Student's t cumulative distribution function - * - * Computes the integral from minus infinity to t of the Student - * t distribution with integer nu > 0 degrees of freedom: - * - * $(GAMMA)( (nu+1)/2) / ( sqrt(nu π) $(GAMMA)(nu/2) ) * - * $(INTEGRATE -∞, t) $(POWER (1+$(POWER x, 2)/nu), -(nu+1)/2) dx - * - * Can be used to test whether the means of two normally distributed populations - * are equal. - * - * It is related to the incomplete beta integral: - * 1 - studentsDistribution(nu,t) = 0.5 * betaDistribution( nu/2, 1/2, z ) - * where - * z = nu/(nu + t2). - * - * For t < -1.6, this is the method of computation. For higher t, - * a direct method is derived from integration by parts. - * Since the function is symmetric about t=0, the area under the - * right tail of the density is found by calling the function - * with -t instead of t. - */ -real studentsTDistribution(int nu, real t) -in{ - assert(nu>0); -} -body{ - /* Based on code from Cephes Math Library Release 2.3: January, 1995 - Copyright 1984, 1995 by Stephen L. Moshier - */ - - if ( nu <= 0 ) return NaN(TANGO_NAN.STUDENTSDDISTRIBUTION_DOMAIN); // domain error -- or should it return 0? - if ( t == 0.0 ) return 0.5; - - real rk, z, p; - - if ( t < -1.6 ) { - rk = nu; - z = rk / (rk + t * t); - return 0.5L * betaIncomplete( 0.5L*rk, 0.5L, z ); - } - - /* compute integral from -t to + t */ - - rk = nu; /* degrees of freedom */ - - real x; - if (t < 0) x = -t; else x = t; - z = 1.0L + ( x * x )/rk; - - real f, tz; - int j; - - if ( nu & 1) { - /* computation for odd nu */ - real xsqk = x/sqrt(rk); - p = atan( xsqk ); - if ( nu > 1 ) { - f = 1.0L; - tz = 1.0L; - j = 3; - while( (j<=(nu-2)) && ( (tz/f) > real.epsilon ) ) { - tz *= (j-1)/( z * j ); - f += tz; - j += 2; - } - p += f * xsqk/z; - } - p *= 2.0L/PI; - } else { - /* computation for even nu */ - f = 1.0L; - tz = 1.0L; - j = 2; - - while ( ( j <= (nu-2) ) && ( (tz/f) > real.epsilon ) ) { - tz *= (j - 1)/( z * j ); - f += tz; - j += 2; - } - p = f * x/sqrt(z*rk); - } - if ( t < 0.0L ) - p = -p; /* note destruction of relative accuracy */ - - p = 0.5L + 0.5L * p; - return p; -} - -/** Inverse of Student's t distribution - * - * Given probability p and degrees of freedom nu, - * finds the argument t such that the one-sided - * studentsDistribution(nu,t) is equal to p. - * - * Params: - * nu = degrees of freedom. Must be >1 - * p = probability. 0 < p < 1 - */ -real studentsTDistributionInv(int nu, real p ) -in { - assert(nu>0); - assert(p>=0.0L && p<=1.0L); -} -body -{ - if (p==0) return -real.infinity; - if (p==1) return real.infinity; - - real rk, z; - rk = nu; - - if ( p > 0.25L && p < 0.75L ) { - if ( p == 0.5L ) return 0; - z = 1.0L - 2.0L * p; - z = betaIncompleteInv( 0.5L, 0.5L*rk, fabs(z) ); - real t = sqrt( rk*z/(1.0L-z) ); - if( p < 0.5L ) - t = -t; - return t; - } - int rflg = -1; // sign of the result - if (p >= 0.5L) { - p = 1.0L - p; - rflg = 1; - } - z = betaIncompleteInv( 0.5L*rk, 0.5L, 2.0L*p ); - - if (z<0) return rflg * real.infinity; - return rflg * sqrt( rk/z - rk ); -} - -debug(UnitTest) { -unittest { - -// There are simple forms for nu = 1 and nu = 2. - -// if (nu == 1), tDistribution(x) = 0.5 + atan(x)/PI -// so tDistributionInv(p) = tan( PI * (p-0.5) ); -// nu==2: tDistribution(x) = 0.5 * (1 + x/ sqrt(2+x*x) ) - -assert(studentsTDistribution(1, -0.4)== 0.5 + atan(-0.4)/PI); -assert(studentsTDistribution(2, 0.9) == 0.5L * (1 + 0.9L/sqrt(2.0L + 0.9*0.9)) ); -assert(studentsTDistribution(2, -5.4) == 0.5L * (1 - 5.4L/sqrt(2.0L + 5.4*5.4)) ); - -// return true if a==b to given number of places. -bool isfeqabs(real a, real b, real diff) -{ - return fabs(a-b) < diff; -} - -// Check a few spot values with statsoft.com (Mathworld values are wrong!!) -// According to statsoft.com, studentsDistributionInv(10, 0.995)= 3.16927. - -// The remaining values listed here are from Excel, and are unlikely to be accurate -// in the last decimal places. However, they are helpful as a sanity check. - -// Microsoft Excel 2003 gives TINV(2*(1-0.995), 10) == 3.16927267160917 -assert(isfeqabs(studentsTDistributionInv(10, 0.995), 3.169_272_67L, 0.000_000_005L)); - - -assert(isfeqabs(studentsTDistributionInv(8, 0.6), 0.261_921_096_769_043L,0.000_000_000_05L)); -// -TINV(2*0.4, 18) == -0.257123042655869 - -assert(isfeqabs(studentsTDistributionInv(18, 0.4), -0.257_123_042_655_869L, 0.000_000_000_05L)); -assert( feqrel(studentsTDistribution(18, studentsTDistributionInv(18, 0.4L)),0.4L) - > real.mant_dig-2 ); -assert( feqrel(studentsTDistribution(11, studentsTDistributionInv(11, 0.9L)),0.9L) - > real.mant_dig-2); -} -} - -/** The F distribution, its complement, and inverse. - * - * The F density function (also known as Snedcor's density or the - * variance ratio density) is the density - * of x = (u1/df1)/(u2/df2), where u1 and u2 are random - * variables having $(POWER χ,2) distributions with df1 - * and df2 degrees of freedom, respectively. - * - * fDistribution returns the area from zero to x under the F density - * function. The complementary function, - * fDistributionCompl, returns the area from x to ∞ under the F density function. - * - * The inverse of the complemented F distribution, - * fDistributionComplInv, finds the argument x such that the integral - * from x to infinity of the F density is equal to the given probability y. - * - * Can be used to test whether the means of multiple normally distributed - * populations, all with the same standard deviation, are equal; - * or to test that the standard deviations of two normally distributed - * populations are equal. - * - * Params: - * df1 = Degrees of freedom of the first variable. Must be >= 1 - * df2 = Degrees of freedom of the second variable. Must be >= 1 - * x = Must be >= 0 - */ -real fDistribution(int df1, int df2, real x) -in { - assert(df1>=1 && df2>=1); - assert(x>=0); -} -body{ - real a = cast(real)(df1); - real b = cast(real)(df2); - real w = a * x; - w = w/(b + w); - return betaIncomplete(0.5L*a, 0.5L*b, w); -} - -/** ditto */ -real fDistributionCompl(int df1, int df2, real x) -in { - assert(df1>=1 && df2>=1); - assert(x>=0); -} -body{ - real a = cast(real)(df1); - real b = cast(real)(df2); - real w = b / (b + a * x); - return betaIncomplete( 0.5L*b, 0.5L*a, w ); -} - -/* - * Inverse of complemented F distribution - * - * Finds the F density argument x such that the integral - * from x to infinity of the F density is equal to the - * given probability p. - * - * This is accomplished using the inverse beta integral - * function and the relations - * - * z = betaIncompleteInv( df2/2, df1/2, p ), - * x = df2 (1-z) / (df1 z). - * - * Note that the following relations hold for the inverse of - * the uncomplemented F distribution: - * - * z = betaIncompleteInv( df1/2, df2/2, p ), - * x = df2 z / (df1 (1-z)). -*/ - -/** ditto */ -real fDistributionComplInv(int df1, int df2, real p ) -in { - assert(df1>=1 && df2>=1); - assert(p>=0 && p<=1.0); -} -body{ - real a = df1; - real b = df2; - /* Compute probability for x = 0.5. */ - real w = betaIncomplete( 0.5L*b, 0.5L*a, 0.5L ); - /* If that is greater than p, then the solution w < .5. - Otherwise, solve at 1-p to remove cancellation in (b - b*w). */ - if ( w > p || p < 0.001L) { - w = betaIncompleteInv( 0.5L*b, 0.5L*a, p ); - return (b - b*w)/(a*w); - } else { - w = betaIncompleteInv( 0.5L*a, 0.5L*b, 1.0L - p ); - return b*w/(a*(1.0L-w)); - } -} - -debug(UnitTest) { -unittest { -// fDistCompl(df1, df2, x) = Excel's FDIST(x, df1, df2) - assert(fabs(fDistributionCompl(6, 4, 16.5) - 0.00858719177897249L)< 0.0000000000005L); - assert(fabs((1-fDistribution(12, 23, 0.1)) - 0.99990562845505L)< 0.0000000000005L); - assert(fabs(fDistributionComplInv(8, 34, 0.2) - 1.48267037661408L)< 0.0000000005L); - assert(fabs(fDistributionComplInv(4, 16, 0.008) - 5.043_537_593_48596L)< 0.0000000005L); - // Regression test: This one used to fail because of a bug in the definition of MINLOG. - assert(feqrel(fDistributionCompl(4, 16, fDistributionComplInv(4,16, 0.008)), 0.008)>=real.mant_dig-3); -} -} - -/** $(POWER χ,2) cumulative distribution function and its complement. - * - * Returns the area under the left hand tail (from 0 to x) - * of the Chi square probability density function with - * v degrees of freedom. The complement returns the area under - * the right hand tail (from x to ∞). - * - * chiSqrDistribution(x | v) = ($(INTEGRATE 0, x) - * $(POWER t, v/2-1) $(POWER e, -t/2) dt ) - * / $(POWER 2, v/2) $(GAMMA)(v/2) - * - * chiSqrDistributionCompl(x | v) = ($(INTEGRATE x, ∞) - * $(POWER t, v/2-1) $(POWER e, -t/2) dt ) - * / $(POWER 2, v/2) $(GAMMA)(v/2) - * - * Params: - * v = degrees of freedom. Must be positive. - * x = the $(POWER χ,2) variable. Must be positive. - * - */ -real chiSqrDistribution(real v, real x) -in { - assert(x>=0); - assert(v>=1.0); -} -body{ - return gammaIncomplete( 0.5*v, 0.5*x); -} - -/** ditto */ -real chiSqrDistributionCompl(real v, real x) -in { - assert(x>=0); - assert(v>=1.0); -} -body{ - return gammaIncompleteCompl( 0.5L*v, 0.5L*x ); -} - -/** - * Inverse of complemented $(POWER χ, 2) distribution - * - * Finds the $(POWER χ, 2) argument x such that the integral - * from x to ∞ of the $(POWER χ, 2) density is equal - * to the given cumulative probability p. - * - * Params: - * p = Cumulative probability. 0<= p <=1. - * v = Degrees of freedom. Must be positive. - * - */ -real chiSqrDistributionComplInv(real v, real p) -in { - assert(p>=0 && p<=1.0L); - assert(v>=1.0L); -} -body -{ - return 2.0 * gammaIncompleteComplInv( 0.5*v, p); -} - -debug(UnitTest) { -unittest { - assert(feqrel(chiSqrDistributionCompl(3.5L, chiSqrDistributionComplInv(3.5L, 0.1L)), 0.1L)>=real.mant_dig-3); - assert(chiSqrDistribution(19.02L, 0.4L) + chiSqrDistributionCompl(19.02L, 0.4L) ==1.0L); -} -} - -/** - * The Γ distribution and its complement - * - * The Γ distribution is defined as the integral from 0 to x of the - * gamma probability density function. The complementary function returns the - * integral from x to ∞ - * - * gammaDistribution = ($(INTEGRATE 0, x) $(POWER t, b-1)$(POWER e, -at) dt) $(POWER a, b)/Γ(b) - * - * x must be greater than 0. - */ -real gammaDistribution(real a, real b, real x) -in { - assert(x>=0); -} -body { - return gammaIncomplete(b, a*x); -} - -/** ditto */ -real gammaDistributionCompl(real a, real b, real x ) -in { - assert(x>=0); -} -body { - return gammaIncompleteCompl( b, a * x ); -} - -debug(UnitTest) { -unittest { - assert(gammaDistribution(7,3,0.18)+gammaDistributionCompl(7,3,0.18)==1); -} -} - -/********************** - * Beta distribution and its inverse - * - * Returns the incomplete beta integral of the arguments, evaluated - * from zero to x. The function is defined as - * - * betaDistribution = Γ(a+b)/(Γ(a) Γ(b)) * - * $(INTEGRATE 0, x) $(POWER t, a-1)$(POWER (1-t),b-1) dt - * - * The domain of definition is 0 <= x <= 1. In this - * implementation a and b are restricted to positive values. - * The integral from x to 1 may be obtained by the symmetry - * relation - * - * betaDistributionCompl(a, b, x ) = betaDistribution( b, a, 1-x ) - * - * The integral is evaluated by a continued fraction expansion - * or, when b*x is small, by a power series. - * - * The inverse finds the value of x for which betaDistribution(a,b,x) - y = 0 - */ -real betaDistribution(real a, real b, real x ) -{ - return betaIncomplete(a, b, x ); -} - -/** ditto */ -real betaDistributionCompl(real a, real b, real x) -{ - return betaIncomplete(b, a, 1-x); -} - -/** ditto */ -real betaDistributionInv(real a, real b, real y) -{ - return betaIncompleteInv(a, b, y); -} - -/** ditto */ -real betaDistributionComplInv(real a, real b, real y) -{ - return 1-betaIncompleteInv(b, a, y); -} - -debug(UnitTest) { -unittest { - assert(feqrel(betaDistributionInv(2, 6, betaDistribution(2,6, 0.7L)),0.7L)>=real.mant_dig-3); - assert(feqrel(betaDistributionComplInv(1.3, 8, betaDistributionCompl(1.3,8, 0.01L)),0.01L)>=real.mant_dig-4); -} -} - -/** - * The Poisson distribution, its complement, and inverse - * - * k is the number of events. m is the mean. - * The Poisson distribution is defined as the sum of the first k terms of - * the Poisson density function. - * The complement returns the sum of the terms k+1 to ∞. - * - * poissonDistribution = $(BIGSUM j=0, k) $(POWER e, -m) $(POWER m, j)/j! - * - * poissonDistributionCompl = $(BIGSUM j=k+1, ∞) $(POWER e, -m) $(POWER m, j)/j! - * - * The terms are not summed directly; instead the incomplete - * gamma integral is employed, according to the relation - * - * y = poissonDistribution( k, m ) = gammaIncompleteCompl( k+1, m ). - * - * The arguments must both be positive. - */ -real poissonDistribution(int k, real m ) -in { - assert(k>=0); - assert(m>0); -} -body { - return gammaIncompleteCompl( k+1.0, m ); -} - -/** ditto */ -real poissonDistributionCompl(int k, real m ) -in { - assert(k>=0); - assert(m>0); -} -body { - return gammaIncomplete( k+1.0, m ); -} - -/** ditto */ -real poissonDistributionInv( int k, real p ) -in { - assert(k>=0); - assert(p>=0.0 && p<=1.0); -} -body { - return gammaIncompleteComplInv(k+1, p); -} - -debug(UnitTest) { -unittest { -// = Excel's POISSON(k, m, TRUE) - assert( fabs(poissonDistribution(5, 6.3) - - 0.398771730072867L) < 0.000000000000005L); - assert( feqrel(poissonDistributionInv(8, poissonDistribution(8, 2.7e3L)), 2.7e3L)>=real.mant_dig-2); - assert( poissonDistribution(2, 8.4e-5) + poissonDistributionCompl(2, 8.4e-5) == 1.0L); -} -} - -/*********************************** - * Binomial distribution and complemented binomial distribution - * - * The binomial distribution is defined as the sum of the terms 0 through k - * of the Binomial probability density. - * The complement returns the sum of the terms k+1 through n. - * - binomialDistribution = $(BIGSUM j=0, k) $(CHOOSE n, j) $(POWER p, j) $(POWER (1-p), n-j) - - binomialDistributionCompl = $(BIGSUM j=k+1, n) $(CHOOSE n, j) $(POWER p, j) $(POWER (1-p), n-j) - * - * The terms are not summed directly; instead the incomplete - * beta integral is employed, according to the formula - * - * y = binomialDistribution( k, n, p ) = betaDistribution( n-k, k+1, 1-p ). - * - * The arguments must be positive, with p ranging from 0 to 1, and k<=n. - */ -real binomialDistribution(int k, int n, real p ) -in { - assert(p>=0 && p<=1.0); // domain error - assert(k>=0 && k<=n); -} -body{ - real dk, dn, q; - if( k == n ) - return 1.0L; - - q = 1.0L - p; - dn = n - k; - if ( k == 0 ) { - return pow( q, dn ); - } else { - return betaIncomplete( dn, k + 1, q ); - } -} - -debug(UnitTest) { -unittest { - // = Excel's BINOMDIST(k, n, p, TRUE) - assert( fabs(binomialDistribution(8, 12, 0.5) - - 0.927001953125L) < 0.0000000000005L); - assert( fabs(binomialDistribution(0, 3, 0.008L) - - 0.976191488L) < 0.00000000005L); - assert(binomialDistribution(7,7, 0.3)==1.0); -} -} - - /** ditto */ -real binomialDistributionCompl(int k, int n, real p ) -in { - assert(p>=0 && p<=1.0); // domain error - assert(k>=0 && k<=n); -} -body{ - if ( k == n ) { - return 0; - } - real dn = n - k; - if ( k == 0 ) { - if ( p < .01L ) - return -expm1( dn * log1p(-p) ); - else - return 1.0L - pow( 1.0L-p, dn ); - } else { - return betaIncomplete( k+1, dn, p ); - } -} - -debug(UnitTest){ -unittest { - // = Excel's (1 - BINOMDIST(k, n, p, TRUE)) - assert( fabs(1.0L-binomialDistributionCompl(0, 15, 0.003) - - 0.955932824838906L) < 0.0000000000000005L); - assert( fabs(1.0L-binomialDistributionCompl(0, 25, 0.2) - - 0.00377789318629572L) < 0.000000000000000005L); - assert( fabs(1.0L-binomialDistributionCompl(8, 12, 0.5) - - 0.927001953125L) < 0.00000000000005L); - assert(binomialDistributionCompl(7,7, 0.3)==0.0); -} -} - -/** Inverse binomial distribution - * - * Finds the event probability p such that the sum of the - * terms 0 through k of the Binomial probability density - * is equal to the given cumulative probability y. - * - * This is accomplished using the inverse beta integral - * function and the relation - * - * 1 - p = betaDistributionInv( n-k, k+1, y ). - * - * The arguments must be positive, with 0 <= y <= 1, and k <= n. - */ -real binomialDistributionInv( int k, int n, real y ) -in { - assert(y>=0 && y<=1.0); // domain error - assert(k>=0 && k<=n); -} -body{ - real dk, p; - real dn = n - k; - if ( k == 0 ) { - if( y > 0.8L ) - p = -expm1( log1p(y-1.0L) / dn ); - else - p = 1.0L - pow( y, 1.0L/dn ); - } else { - dk = k + 1; - p = betaIncomplete( dn, dk, y ); - if( p > 0.5 ) - p = betaIncompleteInv( dk, dn, 1.0L-y ); - else - p = 1.0 - betaIncompleteInv( dn, dk, y ); - } - return p; -} - -debug(UnitTest){ -unittest { - real w = binomialDistribution(9, 15, 0.318L); - assert(feqrel(binomialDistributionInv(9, 15, w), 0.318L)>=real.mant_dig-3); - w = binomialDistribution(5, 35, 0.718L); - assert(feqrel(binomialDistributionInv(5, 35, w), 0.718L)>=real.mant_dig-3); - w = binomialDistribution(0, 24, 0.637L); - assert(feqrel(binomialDistributionInv(0, 24, w), 0.637L)>=real.mant_dig-3); - w = binomialDistributionInv(0, 59, 0.962L); - assert(feqrel(binomialDistribution(0, 59, w), 0.962L)>=real.mant_dig-5); -} -} - -/** Negative binomial distribution and its inverse - * - * Returns the sum of the terms 0 through k of the negative - * binomial distribution: - * - * $(BIGSUM j=0, k) $(CHOOSE n+j-1, j-1) $(POWER p, n) $(POWER (1-p), j) - * - * In a sequence of Bernoulli trials, this is the probability - * that k or fewer failures precede the n-th success. - * - * The arguments must be positive, with 0 < p < 1 and r>0. - * - * The inverse finds the argument y such - * that negativeBinomialDistribution(k,n,y) is equal to p. - * - * The Geometric Distribution is a special case of the negative binomial - * distribution. - * ----------------------- - * geometricDistribution(k, p) = negativeBinomialDistribution(k, 1, p); - * ----------------------- - * References: - * $(LINK http://mathworld.wolfram.com/NegativeBinomialDistribution.html) - */ - -real negativeBinomialDistribution(int k, int n, real p ) -in { - assert(p>=0 && p<=1.0); // domain error - assert(k>=0); -} -body{ - if ( k == 0 ) return pow( p, n ); - return betaIncomplete( n, k + 1, p ); -} - -/** ditto */ -real negativeBinomialDistributionInv(int k, int n, real p ) -in { - assert(p>=0 && p<=1.0); // domain error - assert(k>=0); -} -body{ - return betaIncompleteInv(n, k + 1, p); -} - -debug(UnitTest) { -unittest { - // Value obtained by sum of terms of MS Excel 2003's NEGBINOMDIST. - assert( fabs(negativeBinomialDistribution(10, 20, 0.2) - 3.830_52E-08)< 0.000_005e-08); - assert(feqrel(negativeBinomialDistributionInv(14, 208, negativeBinomialDistribution(14, 208, 1e-4L)), 1e-4L)>=real.mant_dig-3); -} -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/math/Random.d --- a/tango/tango/math/Random.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,178 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Various - -*******************************************************************************/ - -module tango.math.Random; - - -version (Win32) - private extern(Windows) int QueryPerformanceCounter (ulong *); - -version (Posix) - { - private import tango.stdc.posix.sys.time; - } - - -/****************************************************************************** - - KISS (via George Marsaglia & Paul Hsieh) - - the idea is to use simple, fast, individually promising - generators to get a composite that will be fast, easy to code - have a very long period and pass all the tests put to it. - The three components of KISS are - - x(n)=a*x(n-1)+1 mod 2^32 - y(n)=y(n-1)(I+L^13)(I+R^17)(I+L^5), - z(n)=2*z(n-1)+z(n-2) +carry mod 2^32 - - The y's are a shift register sequence on 32bit binary vectors - period 2^32-1; The z's are a simple multiply-with-carry sequence - with period 2^63+2^32-1. - - The period of KISS is thus 2^32*(2^32-1)*(2^63+2^32-1) > 2^127 - -******************************************************************************/ - -class Random -{ - /********************************************************************** - - Shared instance: - --- - auto random = Random.shared.next; - --- - - **********************************************************************/ - public static Random shared; - - private uint kiss_k; - private uint kiss_m; - private uint kiss_x = 1; - private uint kiss_y = 2; - private uint kiss_z = 4; - private uint kiss_w = 8; - private uint kiss_carry = 0; - - /********************************************************************** - - Create a static and shared instance: - --- - auto random = Random.shared.next; - --- - - **********************************************************************/ - - static this () - { - shared = new Random; - } - - /********************************************************************** - - Creates and seeds a new generator with the current time - - **********************************************************************/ - - this () - { - this.seed; - } - - /********************************************************************** - - Seed the generator with current time - - **********************************************************************/ - - final Random seed () - { - ulong s; - - version (Posix) - { - timeval tv; - - gettimeofday (&tv, null); - s = tv.tv_usec; - } - version (Win32) - QueryPerformanceCounter (&s); - - return seed (cast(uint) s); - } - - /********************************************************************** - - Seed the generator with a provided value - - **********************************************************************/ - - final Random seed (uint seed) - { - kiss_x = seed | 1; - kiss_y = seed | 2; - kiss_z = seed | 4; - kiss_w = seed | 8; - kiss_carry = 0; - return this; - } - - /********************************************************************** - - Returns X such that 0 <= X <= uint.max - - **********************************************************************/ - - final uint next () - { - kiss_x = kiss_x * 69069 + 1; - kiss_y ^= kiss_y << 13; - kiss_y ^= kiss_y >> 17; - kiss_y ^= kiss_y << 5; - kiss_k = (kiss_z >> 2) + (kiss_w >> 3) + (kiss_carry >> 2); - kiss_m = kiss_w + kiss_w + kiss_z + kiss_carry; - kiss_z = kiss_w; - kiss_w = kiss_m; - kiss_carry = kiss_k >> 30; - return kiss_x + kiss_y + kiss_w; - } - - /********************************************************************** - - Returns X such that 0 <= X < max - - Note that max is exclusive, making it compatible with - array indexing - - **********************************************************************/ - - final uint next (uint max) - { - return next() % max; - } - - /********************************************************************** - - Returns X such that min <= X < max - - Note that max is exclusive, making it compatible with - array indexing - - **********************************************************************/ - - final uint next (uint min, uint max) - { - return next(max-min) + min; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/DatagramConduit.d --- a/tango/tango/net/DatagramConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,173 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004 : Initial release - version: Dec 2006 : South Pacific release - - author: Kris - -*******************************************************************************/ - -module tango.net.DatagramConduit; - -public import tango.io.Conduit; - -package import tango.net.Socket, - tango.net.SocketConduit; - -/******************************************************************************* - - Datagrams provide a low-overhead, non-reliable data transmission - mechanism. - - Datagrams are not 'connected' in the same manner as a TCP socket; you - don't need to listen() or accept() to receive a datagram, and data - may arrive from multiple sources. A datagram socket may, however, - still use the connect() method like a TCP socket. When connected, - the read() and write() methods will be restricted to a single address - rather than being open instead. That is, applying connect() will make - the address argument to both read() and write() irrelevant. Without - connect(), method write() must be supplied with an address and method - read() should be supplied with one to identify where data originated. - - Note that when used as a listener, you must first bind the socket - to a local adapter. This can be achieved by binding the socket to - an InternetAddress constructed with a port only (ADDR_ANY), thus - requesting the OS to assign the address of a local network adapter - -*******************************************************************************/ - -class DatagramConduit : SocketConduit -{ - private Address to, - from; - - /*********************************************************************** - - Create a read/write datagram socket - - ***********************************************************************/ - - this () - { - super (SocketType.DGRAM, ProtocolType.IP); - } - - /*********************************************************************** - - Read bytes from an available datagram into the given array. - When provided, the 'from' address will be populated with the - origin of the incoming data. Note that we employ the timeout - mechanics exposed via our SocketConduit superclass. - - Returns the number of bytes read from the input, or Eof if - the socket cannot read - - ***********************************************************************/ - - uint read (void[] dst, Address from=null) - { - this.from = from; - return input.read (dst); - } - - /*********************************************************************** - - Write an array to the specified address. If address 'to' is - null, it is assumed the socket has been connected instead. - - Returns the number of bytes sent to the output, or Eof if - the socket cannot write - - ***********************************************************************/ - - uint write (void[] src, Address to=null) - { - this.to = to; - return output.write (src); - } - - /*********************************************************************** - - SocketConduit override: - - Read available datagram bytes into a provided array. Returns - the number of bytes read from the input, or Eof if the socket - cannot read. - - Note that we're taking advantage of timout support within the - superclass - - ***********************************************************************/ - - protected override uint socketReader (void[] dst) - { - int count; - - if (dst.length) - count = (from) ? socket.receiveFrom (dst, from) : socket.receiveFrom (dst); - - return count; - } - - /*********************************************************************** - - SocketConduit override: - - Write the provided content to the socket. This will stall - until the socket responds in some manner. If there is no - target address held by this class, we assume the datagram - has been connected instead. - - Returns the number of bytes sent to the output, or Eof if - the socket cannot write - - ***********************************************************************/ - - protected override uint write (void[] src) - { - int count; - - if (src.length) - { - count = (to) ? socket.sendTo (src, to) : socket.sendTo (src); - if (count <= 0) - count = Eof; - } - return count; - } -} - - - -/****************************************************************************** - -*******************************************************************************/ - -debug (Datagram) -{ - import tango.io.Console; - - import tango.net.InternetAddress; - - void main() - { - auto addr = new InternetAddress ("127.0.0.1", 8080); - - // listen for datagrams on the local address - auto gram = new DatagramConduit; - gram.bind (addr); - - // write to the local address - gram.write ("hello", addr); - - // we are listening also ... - char[8] tmp; - auto x = new InternetAddress; - auto bytes = gram.read (tmp, x); - Cout (x) (tmp[0..bytes]).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/InternetAddress.d --- a/tango/tango/net/InternetAddress.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Aug 2006 - - author: Kris - -*******************************************************************************/ - -module tango.net.InternetAddress; - -private import tango.net.Socket; - -/******************************************************************************* - - -*******************************************************************************/ - -class InternetAddress : IPv4Address -{ - /*********************************************************************** - - useful for Datagrams - - ***********************************************************************/ - - this(){} - - /*********************************************************************** - - -port- can be PORT_ANY - -addr- is an IP address or host name - - ***********************************************************************/ - - this (char[] addr, int port = PORT_ANY) - { - foreach (int i, char c; addr) - if (c is ':') - { - port = parse (addr [i+1 .. $]); - addr = addr [0 .. i]; - break; - } - - super (addr, cast(ushort) port); - } - - /*********************************************************************** - - - ***********************************************************************/ - - this (uint addr, ushort port) - { - super (addr, port); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - this (ushort port) - { - super (port); - } - - /********************************************************************** - - **********************************************************************/ - - private static int parse (char[] s) - { - int number; - - foreach (c; s) - number = number * 10 + (c - '0'); - - return number; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/MulticastConduit.d --- a/tango/tango/net/MulticastConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,186 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Jun 2004 : Initial release - version: Dec 2006 : South pacific version - - author: Kris - -*******************************************************************************/ - -module tango.net.MulticastConduit; - -public import tango.io.Conduit; - -private import tango.net.DatagramConduit, - tango.net.InternetAddress; - -/****************************************************************************** - - MulticastConduit sends and receives data on a multicast group, as - described by a class-D address. To send data, the recipient group - should be handed to the write() method. To receive, the socket is - bound to an available local adapter/port as a listener and must - join() the group before it becomes eligible for input from there. - - While MulticastConduit is a flavour of datagram, it doesn't support - being connected to a specific endpoint. - - Sending and receiving via a multicast group: - --- - auto group = new InternetAddress ("225.0.0.10", 8080); - - // listen for datagrams on the group address (via port 8080) - auto multi = new MulticastConduit (group); - - // join and broadcast to the group - multi.join.write ("hello", group); - - // we are listening also ... - char[8] tmp; - auto bytes = multi.read (tmp); - --- - - Note that this example is expecting to receive its own broadcast; - thus it may be necessary to enable loopback operation (see below) - for successful receipt of the broadcast. - - Note that class D addresses range from 225.0.0.0 to 239.255.255.255 - - see: http://www.kohala.com/start/mcast.api.txt - -*******************************************************************************/ - -class MulticastConduit : DatagramConduit -{ - private IPv4Address group; - - enum {Host=0, Subnet=1, Site=32, Region=64, Continent=128, Unrestricted=255} - - /*********************************************************************** - - Create a writable multicast socket - - ***********************************************************************/ - - this () - { - super (); - } - - /*********************************************************************** - - Create a read/write multicast socket - - This flavour is necessary only for a multicast receiver - (e.g. use this ctor in conjunction with SocketListener). - - You should specify both a group address and a port to - listen upon. The resultant socket will be bound to the - specified port (locally), and listening on the class-D - address. Expect this to fail without a network adapter - present, as bind() will not find anything to work with. - - The reuse parameter dictates how to behave when the port - is already in use. Default behaviour is to throw an IO - exception, and the alternate is to force usage. - - To become eligible for incoming group datagrams, you must - also invoke the join() method - - ***********************************************************************/ - - this (InternetAddress group, bool reuse = false) - { - super (); - - this.group = group; - socket.setAddressReuse(reuse).bind(new InternetAddress(group.port)); - } - - /*********************************************************************** - - Enable/disable the receipt of multicast packets sent - from the same adapter. The default state is OS specific - - ***********************************************************************/ - - MulticastConduit loopback (bool yes = true) - { - uint[1] onoff = yes; - socket.setOption (SocketOptionLevel.IP, SocketOption.IP_MULTICAST_LOOP, onoff); - return this; - } - - /*********************************************************************** - - Set the number of hops (time to live) of this socket. - Convenient values are - --- - Host: packets are restricted to the same host - Subnet: packets are restricted to the same subnet - Site: packets are restricted to the same site - Region: packets are restricted to the same region - Continent: packets are restricted to the same continent - Unrestricted: packets are unrestricted in scope - --- - - ***********************************************************************/ - - MulticastConduit ttl (uint value=Subnet) - { - uint[1] options = value; - socket.setOption (SocketOptionLevel.IP, SocketOption.IP_MULTICAST_TTL, options); - return this; - } - - /*********************************************************************** - - Add this socket to the listening group - - ***********************************************************************/ - - MulticastConduit join () - { - socket.joinGroup (group, true); - return this; - } - - /*********************************************************************** - - Remove this socket from the listening group - - ***********************************************************************/ - - MulticastConduit leave () - { - socket.joinGroup (group, false); - return this; - } -} - - -/****************************************************************************** - -*******************************************************************************/ - -debug (Multicast) -{ - void main() - { - auto group = new InternetAddress ("225.0.0.10", 8080); - - // listen for datagrams on the group address - auto multi = new MulticastConduit (group); - - // join and broadcast to the group - multi.join.write ("hello", group); - - // we are listening also ... - char[8] tmp; - auto bytes = multi.read (tmp); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/ServerSocket.d --- a/tango/tango/net/ServerSocket.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - Outback release: December 2006 - - author: Kris - -*******************************************************************************/ - -module tango.net.ServerSocket; - -private import tango.net.Socket, - tango.net.SocketConduit; - -private import tango.io.model.IConduit; - -public import tango.net.InternetAddress; - -/******************************************************************************* - - ServerSocket is a wrapper upon the basic socket functionality to - simplify the API somewhat. You use a ServerSocket to listen for - inbound connection requests, and get back a SocketConduit when a - connection is made. - - Accepted SocketConduit instances are held in a free-list to help - avoid heap activity. These instances are recycled upon invoking - the close() method, and one should ensure that occurs - -*******************************************************************************/ - -class ServerSocket : ISelectable -{ - private Socket socket_; - private int linger = -1; - - /*********************************************************************** - - Construct a ServerSocket on the given address, with the - specified number of backlog connections supported. The - socket is bound to the given address, and set to listen - for incoming connections. Note that the socket address - can be setup for reuse, so that a halted server may be - restarted immediately. - - ***********************************************************************/ - - this (InternetAddress addr, int backlog=32, bool reuse=false) - { - socket_ = new Socket (AddressFamily.INET, SocketType.STREAM, ProtocolType.IP); - socket_.setAddressReuse(reuse).bind(addr).listen(backlog); - } - - /*********************************************************************** - - Models a handle-oriented device. - - TODO: figure out how to avoid exposing this in the general - case - - ***********************************************************************/ - - Handle fileHandle () - { - return cast(Handle) socket_.fileHandle; - } - - /*********************************************************************** - - Set the period in which dead sockets are left lying around - by the O/S - - ***********************************************************************/ - - void setLingerPeriod (int period) - { - linger = period; - } - - /*********************************************************************** - - Return the wrapped socket - - ***********************************************************************/ - - Socket socket () - { - return socket_; - } - - /*********************************************************************** - - Is this server still alive? - - ***********************************************************************/ - - bool isAlive () - { - return socket_.isAlive; - } - - /*********************************************************************** - - Wait for a client to connect to us, and return a connected - SocketConduit. - - ***********************************************************************/ - - SocketConduit accept () - { - auto wrapper = SocketConduit.allocate(); - auto accepted = socket_.accept (wrapper.socket); - - // force abortive closure to avoid prolonged OS scavenging? - if (linger >= 0) - accepted.setLingerPeriod (linger); - - return wrapper; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/Socket.d --- a/tango/tango/net/Socket.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2160 +0,0 @@ -/* - Copyright (C) 2004 Christopher E. Miller - - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source distribution. - -*/ - -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: March 2004 - - author: Christopher Miller - Kris Bell - Anders F Bjorklund (Darwin patches) - - - The original code has been modified in several ways: - - 1) It has been altered to fit within the Tango environment, meaning - that certain original classes have been reorganized, and/or have - subclassed Tango base-classes. For example, the original Socket - class has been wrapped with three distinct subclasses, and now - derives from class tango.io.Resource. - - 2) All exception instances now subclass the Tango IOException. - - 3) Construction of new Socket instances via accept() is now - overloadable. - - 4) Constants and enums have been moved within a class boundary to - ensure explicit namespace usage. - - 5) changed Socket.select() to loop if it was interrupted. - - - All changes within the main body of code all marked with "Tango:" - - For a good tutorial on socket-programming I highly recommend going - here: http://www.ecst.csuchico.edu/~beej/guide/net/ - -*******************************************************************************/ - -module tango.net.Socket; - -private import tango.time.Time; - -private import tango.sys.Common; - -private import tango.core.Exception; - - -/******************************************************************************* - - -*******************************************************************************/ - -version=Tango; -version (Tango) -{ - private char[] toString (char[] tmp, int i) - { - int j = tmp.length; - do { - tmp[--j] = i % 10 + '0'; - } while (i /= 10); - - return tmp [j .. $]; - } -} - -version (linux) - version = BsdSockets; - -version (darwin) - version = BsdSockets; - -version (Posix) - version = BsdSockets; - - -/******************************************************************************* - - -*******************************************************************************/ - -version (Win32) - { - pragma(lib, "ws2_32.lib"); - - private typedef int socket_t = ~0; - - private const int IOCPARM_MASK = 0x7f; - private const int IOC_IN = cast(int)0x80000000; - private const int FIONBIO = cast(int) (IOC_IN | ((int.sizeof & IOCPARM_MASK) << 16) | (102 << 8) | 126); - - private const int WSADESCRIPTION_LEN = 256; - private const int WSASYS_STATUS_LEN = 128; - private const int WSAEWOULDBLOCK = 10035; - private const int WSAEINTR = 10004; - - - struct WSADATA - { - WORD wVersion; - WORD wHighVersion; - char szDescription[WSADESCRIPTION_LEN+1]; - char szSystemStatus[WSASYS_STATUS_LEN+1]; - ushort iMaxSockets; - ushort iMaxUdpDg; - char* lpVendorInfo; - } - alias WSADATA* LPWSADATA; - - extern (Windows) - { - int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); - int WSACleanup(); - socket_t socket(int af, int type, int protocol); - int ioctlsocket(socket_t s, int cmd, uint* argp); - uint inet_addr(char* cp); - int bind(socket_t s, sockaddr* name, int namelen); - int connect(socket_t s, sockaddr* name, int namelen); - int listen(socket_t s, int backlog); - socket_t accept(socket_t s, sockaddr* addr, int* addrlen); - int closesocket(socket_t s); - int shutdown(socket_t s, int how); - int getpeername(socket_t s, sockaddr* name, int* namelen); - int getsockname(socket_t s, sockaddr* name, int* namelen); - int send(socket_t s, void* buf, int len, int flags); - int sendto(socket_t s, void* buf, int len, int flags, sockaddr* to, int tolen); - int recv(socket_t s, void* buf, int len, int flags); - int recvfrom(socket_t s, void* buf, int len, int flags, sockaddr* from, int* fromlen); - int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, timeval* timeout); - //int __WSAFDIsSet(socket_t s, fd_set* fds); - int getsockopt(socket_t s, int level, int optname, void* optval, int* optlen); - int setsockopt(socket_t s, int level, int optname, void* optval, int optlen); - int gethostname(void* namebuffer, int buflen); - char* inet_ntoa(uint ina); - hostent* gethostbyname(char* name); - hostent* gethostbyaddr(void* addr, int len, int type); - int WSAGetLastError(); - } - - static this() - { - WSADATA wd; - if (WSAStartup (0x0101, &wd)) - throw new SocketException("Unable to initialize socket library"); - } - - - static ~this() - { - WSACleanup(); - } - - } - -version (BsdSockets) - { - private import tango.stdc.errno; - - private typedef int socket_t = -1; - - private const int F_GETFL = 3; - private const int F_SETFL = 4; - version (darwin) - private const int O_NONBLOCK = 0x0004; - else - private const int O_NONBLOCK = 04000; // OCTAL! Thx to volcore - - extern (C) - { - socket_t socket(int af, int type, int protocol); - int fcntl(socket_t s, int f, ...); - uint inet_addr(char* cp); - int bind(socket_t s, sockaddr* name, int namelen); - int connect(socket_t s, sockaddr* name, int namelen); - int listen(socket_t s, int backlog); - socket_t accept(socket_t s, sockaddr* addr, int* addrlen); - int close(socket_t s); - int shutdown(socket_t s, int how); - int getpeername(socket_t s, sockaddr* name, int* namelen); - int getsockname(socket_t s, sockaddr* name, int* namelen); - int send(socket_t s, void* buf, int len, int flags); - int sendto(socket_t s, void* buf, int len, int flags, sockaddr* to, int tolen); - int recv(socket_t s, void* buf, int len, int flags); - int recvfrom(socket_t s, void* buf, int len, int flags, sockaddr* from, int* fromlen); - int select(int nfds, fd_set* readfds, fd_set* writefds, fd_set* errorfds, timeval* timeout); - int getsockopt(socket_t s, int level, int optname, void* optval, int* optlen); - int setsockopt(socket_t s, int level, int optname, void* optval, int optlen); - int gethostname(void* namebuffer, int buflen); - char* inet_ntoa(uint ina); - hostent* gethostbyname(char* name); - hostent* gethostbyaddr(void* addr, int len, int type); - } - } - - -/******************************************************************************* - - -*******************************************************************************/ - -private const socket_t INVALID_SOCKET = socket_t.init; -private const int SOCKET_ERROR = -1; - - - -/******************************************************************************* - - Internal structs: - -*******************************************************************************/ - -struct timeval -{ - int tv_sec; //seconds - int tv_usec; //microseconds -} - - -//transparent -struct fd_set -{ -} - - -struct sockaddr -{ - ushort sa_family; - char[14] sa_data = [0]; -} - - -struct hostent -{ - char* h_name; - char** h_aliases; - version(Win32) - { - short h_addrtype; - short h_length; - } - else version(BsdSockets) - { - int h_addrtype; - int h_length; - } - char** h_addr_list; - - - char* h_addr() - { - return h_addr_list[0]; - } -} - - -/******************************************************************************* - - conversions for network byte-order - -*******************************************************************************/ - -version(BigEndian) -{ - ushort htons(ushort x) - { - return x; - } - - - uint htonl(uint x) - { - return x; - } -} -else version(LittleEndian) -{ - import tango.core.BitManip; - - - ushort htons(ushort x) - { - return cast(ushort) ((x >> 8) | (x << 8)); - } - - - uint htonl(uint x) - { - return bswap(x); - } -} -else -{ - static assert(0); -} - - -ushort ntohs(ushort x) -{ - return htons(x); -} - - -uint ntohl(uint x) -{ - return htonl(x); -} - - -/******************************************************************************* - - -*******************************************************************************/ - -private extern (C) int strlen(char*); - -private static char[] toString(char* s) -{ - return s ? s[0 .. strlen(s)] : cast(char[])null; -} - -private static char* convert2C (char[] input, char[] output) -{ - output [0 .. input.length] = input; - output [input.length] = 0; - return output.ptr; -} - - -/******************************************************************************* - - Public interface ... - -*******************************************************************************/ - -public: - - -/******************************************************************************* - - -*******************************************************************************/ - -static int lastError () -{ - version (Win32) - { - return WSAGetLastError(); - } - version (Posix) - { - return errno; - } -} - - -/*********************************************************************** - - -***********************************************************************/ - -version (Win32) -{ - /*************************************************************** - - - ***************************************************************/ - - enum SocketOption: int - { - //consistent - SO_DEBUG = 0x1, - - //possibly Winsock-only values - SO_BROADCAST = 0x20, - SO_REUSEADDR = 0x4, - SO_LINGER = 0x80, - SO_DONTLINGER = ~(SO_LINGER), - SO_OOBINLINE = 0x100, - SO_SNDBUF = 0x1001, - SO_RCVBUF = 0x1002, - SO_ERROR = 0x1007, - - SO_ACCEPTCONN = 0x2, // ? - SO_KEEPALIVE = 0x8, // ? - SO_DONTROUTE = 0x10, // ? - SO_TYPE = 0x1008, // ? - - // OptionLevel.IP settings - IP_MULTICAST_TTL = 10, - IP_MULTICAST_LOOP = 11, - IP_ADD_MEMBERSHIP = 12, - IP_DROP_MEMBERSHIP = 13, - - // OptionLevel.TCP settings - TCP_NODELAY = 0x0001, - } - - /*************************************************************** - - - ***************************************************************/ - - union linger - { - struct { - ushort l_onoff; // option on/off - ushort l_linger; // linger time - }; - ushort[2] array; // combined - } - - /*************************************************************** - - - ***************************************************************/ - - enum SocketOptionLevel - { - SOCKET = 0xFFFF, - IP = 0, - TCP = 6, - UDP = 17, - } -} -else version (darwin) -{ - enum SocketOption: int - { - SO_DEBUG = 0x0001, /* turn on debugging info recording */ - SO_BROADCAST = 0x0020, /* permit sending of broadcast msgs */ - SO_REUSEADDR = 0x0004, /* allow local address reuse */ - SO_LINGER = 0x0080, /* linger on close if data present */ - SO_DONTLINGER = ~(SO_LINGER), - SO_OOBINLINE = 0x0100, /* leave received OOB data in line */ - SO_ACCEPTCONN = 0x0002, /* socket has had listen() */ - SO_KEEPALIVE = 0x0008, /* keep connections alive */ - SO_DONTROUTE = 0x0010, /* just use interface addresses */ - SO_TYPE = 0x1008, /* get socket type */ - - /* - * Additional options, not kept in so_options. - */ - SO_SNDBUF = 0x1001, /* send buffer size */ - SO_RCVBUF = 0x1002, /* receive buffer size */ - SO_ERROR = 0x1007, /* get error status and clear */ - - // OptionLevel.IP settings - IP_MULTICAST_TTL = 10, - IP_MULTICAST_LOOP = 11, - IP_ADD_MEMBERSHIP = 12, - IP_DROP_MEMBERSHIP = 13, - - // OptionLevel.TCP settings - TCP_NODELAY = 0x0001, - } - - /*************************************************************** - - - ***************************************************************/ - - union linger - { - struct { - int l_onoff; // option on/off - int l_linger; // linger time - }; - int[2] array; // combined - } - - /*************************************************************** - - Question: are these correct for Darwin? - - ***************************************************************/ - - enum SocketOptionLevel - { - SOCKET = 1, // correct for linux on x86 - IP = 0, // appears to be correct - TCP = 6, // appears to be correct - UDP = 17, // appears to be correct - } -} -else version (linux) -{ - /*************************************************************** - - these appear to be compatible with x86 platforms, - but not others! - - ***************************************************************/ - - enum SocketOption: int - { - //consistent - SO_DEBUG = 1, - SO_BROADCAST = 6, - SO_REUSEADDR = 2, - SO_LINGER = 13, - SO_DONTLINGER = ~(SO_LINGER), - SO_OOBINLINE = 10, - SO_SNDBUF = 7, - SO_RCVBUF = 8, - SO_ERROR = 4, - - SO_ACCEPTCONN = 30, - SO_KEEPALIVE = 9, - SO_DONTROUTE = 5, - SO_TYPE = 3, - - // OptionLevel.IP settings - IP_MULTICAST_TTL = 33, - IP_MULTICAST_LOOP = 34, - IP_ADD_MEMBERSHIP = 35, - IP_DROP_MEMBERSHIP = 36, - - // OptionLevel.TCP settings - TCP_NODELAY = 0x0001, - } - - /*************************************************************** - - - ***************************************************************/ - - union linger - { - struct { - int l_onoff; // option on/off - int l_linger; // linger time - }; - int[2] array; // combined - } - - /*************************************************************** - - - ***************************************************************/ - - enum SocketOptionLevel - { - SOCKET = 1, // correct for linux on x86 - IP = 0, // appears to be correct - TCP = 6, // appears to be correct - UDP = 17, // appears to be correct - } -} // end versioning - -/*********************************************************************** - - -***********************************************************************/ - -enum SocketShutdown: int -{ - RECEIVE = 0, - SEND = 1, - BOTH = 2, -} - -/*********************************************************************** - - -***********************************************************************/ - -enum SocketFlags: int -{ - NONE = 0, - OOB = 0x1, //out of band - PEEK = 0x02, //only for receiving - DONTROUTE = 0x04, //only for sending -} - -/*********************************************************************** - - Communication semantics - -***********************************************************************/ - -enum SocketType: int -{ - STREAM = 1, /// sequenced, reliable, two-way communication-based byte streams - DGRAM = 2, /// connectionless, unreliable datagrams with a fixed maximum length; data may be lost or arrive out of order - RAW = 3, /// raw protocol access - RDM = 4, /// reliably-delivered message datagrams - SEQPACKET = 5, /// sequenced, reliable, two-way connection-based datagrams with a fixed maximum length -} - - -/*********************************************************************** - - Protocol - -***********************************************************************/ - -enum ProtocolType: int -{ - IP = 0, /// internet protocol version 4 - ICMP = 1, /// internet control message protocol - IGMP = 2, /// internet group management protocol - GGP = 3, /// gateway to gateway protocol - TCP = 6, /// transmission control protocol - PUP = 12, /// PARC universal packet protocol - UDP = 17, /// user datagram protocol - IDP = 22, /// Xerox NS protocol -} - - -/*********************************************************************** - - -***********************************************************************/ - -version(Win32) -{ - enum AddressFamily: int - { - UNSPEC = 0, - UNIX = 1, - INET = 2, - IPX = 6, - APPLETALK = 16, - //INET6 = ? // Need Windows XP ? - } -} -else version(BsdSockets) -{ - version (darwin) - { - enum AddressFamily: int - { - UNSPEC = 0, - UNIX = 1, - INET = 2, - IPX = 23, - APPLETALK = 16, - //INET6 = 10, - } - } - else version (linux) - { - enum AddressFamily: int - { - UNSPEC = 0, - UNIX = 1, - INET = 2, - IPX = 4, - APPLETALK = 5, - //INET6 = 10, - } - } // end version -} - - - -/******************************************************************************* - -*******************************************************************************/ - -class Socket -{ - socket_t sock; - SocketType type; - AddressFamily family; - ProtocolType protocol; - - version(Win32) - private bool _blocking = false; - - // For use with accept(). - package this() - { - } - - - /** - * Describe a socket flavor. If a single protocol type exists to support - * this socket type within the address family, the ProtocolType may be - * omitted. - */ - this(AddressFamily family, SocketType type, ProtocolType protocol, bool create=true) - { - this.type = type; - this.family = family; - this.protocol = protocol; - if (create) - initialize (); - } - - - /** - * Create or assign a socket - */ - private void initialize (socket_t sock = sock.init) - { - if (this.sock) - this.detach; - - if (sock is sock.init) - { - sock = cast(socket_t) socket(family, type, protocol); - if (sock is sock.init) - exception ("Unable to create socket: "); - } - - this.sock = sock; - } - - /*********************************************************************** - - Return the underlying OS handle of this Conduit - - ***********************************************************************/ - - socket_t fileHandle () - { - return sock; - } - - /*********************************************************************** - - Is this socket still alive? A closed socket is considered to - be dead, but a shutdown socket is still alive. - - ***********************************************************************/ - - bool isAlive() - { - int type, typesize = type.sizeof; - return getsockopt (sock, SocketOptionLevel.SOCKET, - SocketOption.SO_TYPE, cast(char*) &type, - &typesize) != SOCKET_ERROR; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - override char[] toString() - { - return "Socket"; - } - - - /*********************************************************************** - - getter - - ***********************************************************************/ - - bool blocking() - { - version(Win32) - { - return _blocking; - } - else version(BsdSockets) - { - return !(fcntl(sock, F_GETFL, 0) & O_NONBLOCK); - } - } - - - /*********************************************************************** - - setter - - ***********************************************************************/ - - void blocking(bool byes) - { - version(Win32) - { - uint num = !byes; - if(SOCKET_ERROR == ioctlsocket(sock, FIONBIO, &num)) - goto err; - _blocking = byes; - } - else version(BsdSockets) - { - int x = fcntl(sock, F_GETFL, 0); - if(byes) - x &= ~O_NONBLOCK; - else - x |= O_NONBLOCK; - if(SOCKET_ERROR == fcntl(sock, F_SETFL, x)) - goto err; - } - return; //success - - err: - exception("Unable to set socket blocking: "); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - AddressFamily addressFamily() - { - return family; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - Socket bind(Address addr) - { - if(SOCKET_ERROR == .bind (sock, addr.name(), addr.nameLen())) - exception ("Unable to bind socket: "); - return this; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - Socket connect(Address to) - { - if(SOCKET_ERROR == .connect (sock, to.name(), to.nameLen())) - { - if(!blocking) - { - version(Win32) - { - if(WSAEWOULDBLOCK == WSAGetLastError()) - return this; - } - else version (Posix) - { - if(EINPROGRESS == errno) - return this; - } - else - { - static assert(0); - } - } - exception ("Unable to connect socket: "); - } - return this; - } - - - /*********************************************************************** - - need to bind() first - - ***********************************************************************/ - - Socket listen(int backlog) - { - if(SOCKET_ERROR == .listen (sock, backlog)) - exception ("Unable to listen on socket: "); - return this; - } - - /** - * Accept an incoming connection. If the socket is blocking, accept - * waits for a connection request. Throws SocketAcceptException if unable - * to accept. See accepting for use with derived classes. - */ - Socket accept () - { - return accept (new Socket); - } - - Socket accept (Socket target) - { - auto newsock = cast(socket_t).accept(sock, null, null); // DMD 0.101 error: found '(' when expecting ';' following 'statement - if (socket_t.init == newsock) - throw new SocketAcceptException("Unable to accept socket connection: " ~ SysError.lookup(lastError)); - - target.initialize (newsock); - version(Win32) - target._blocking = _blocking; //inherits blocking mode - - target.protocol = protocol; //same protocol - target.family = family; //same family - target.type = type; //same type - - return target; //return configured target - } - - /*********************************************************************** - - The shutdown function shuts down the connection of the socket. - Depending on the argument value, it will: - - - stop receiving data for this socket. If further data - arrives, it is rejected. - - - stop trying to transmit data from this socket. Also - discards any data waiting to be sent. Stop looking for - acknowledgement of data already sent; don't retransmit - if any data is lost. - - ***********************************************************************/ - - Socket shutdown(SocketShutdown how) - { - .shutdown (sock, how); - return this; - } - - - /*********************************************************************** - - Tango: added - - ***********************************************************************/ - - Socket setLingerPeriod (int period) - { - linger l; - - l.l_onoff = 1; //option on/off - l.l_linger = cast(ushort) period; //linger time - - return setOption (SocketOptionLevel.SOCKET, SocketOption.SO_LINGER, l.array); - } - - - /*********************************************************************** - - - Tango: added - - ***********************************************************************/ - - Socket setAddressReuse (bool enabled) - { - int[1] x = enabled; - return setOption (SocketOptionLevel.SOCKET, SocketOption.SO_REUSEADDR, x); - } - - - /*********************************************************************** - - - Tango: added - - ***********************************************************************/ - - Socket setNoDelay (bool enabled) - { - int[1] x = enabled; - return setOption (SocketOptionLevel.TCP, SocketOption.TCP_NODELAY, x); - } - - - /*********************************************************************** - - Helper function to handle the adding and dropping of group - membership. - - Tango: Added - - ***********************************************************************/ - - void joinGroup (IPv4Address address, bool onOff) - { - assert (address, "Socket.joinGroup :: invalid null address"); - - struct ip_mreq - { - uint imr_multiaddr; /* IP multicast address of group */ - uint imr_interface; /* local IP address of interface */ - }; - - ip_mreq mrq; - - auto option = (onOff) ? SocketOption.IP_ADD_MEMBERSHIP : SocketOption.IP_DROP_MEMBERSHIP; - mrq.imr_interface = 0; - mrq.imr_multiaddr = address.sin.sin_addr; - - if (.setsockopt(sock, SocketOptionLevel.IP, option, &mrq, mrq.sizeof) == SOCKET_ERROR) - exception ("Unable to perform multicast join: "); - } - - - /*********************************************************************** - - calling shutdown() before this is recommended for connection- - oriented sockets - - ***********************************************************************/ - - void detach () - { - if (sock != sock.init) - { - version (TraceLinux) - printf ("closing socket handle ...\n"); - - version(Win32) - .closesocket (sock); - else - version(BsdSockets) - .close (sock); - - version (TraceLinux) - printf ("socket handle closed\n"); - - sock = sock.init; - } - } - - /*********************************************************************** - - - ***********************************************************************/ - - Address newFamilyObject () - { - Address result; - switch(family) - { - case AddressFamily.INET: - result = new IPv4Address; - break; - - default: - result = new UnknownAddress; - } - return result; - } - - - /*********************************************************************** - - Tango: added this to return the hostname - - ***********************************************************************/ - - static char[] hostName () - { - char[64] name; - - if(SOCKET_ERROR == .gethostname (name.ptr, name.length)) - exception ("Unable to obtain host name: "); - return name [0 .. strlen(name.ptr)].dup; - } - - - /*********************************************************************** - - Tango: added this to return the default host address (IPv4) - - ***********************************************************************/ - - static uint hostAddress () - { - NetHost ih = new NetHost; - - char[] hostname = hostName(); - ih.getHostByName (hostname); - assert (ih.addrList.length); - return ih.addrList[0]; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - Address remoteAddress () - { - Address addr = newFamilyObject (); - int nameLen = addr.nameLen (); - if(SOCKET_ERROR == .getpeername (sock, addr.name(), &nameLen)) - exception ("Unable to obtain remote socket address: "); - assert (addr.addressFamily() == family); - return addr; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - Address localAddress () - { - Address addr = newFamilyObject (); - int nameLen = addr.nameLen(); - if(SOCKET_ERROR == .getsockname (sock, addr.name(), &nameLen)) - exception ("Unable to obtain local socket address: "); - assert (addr.addressFamily() == family); - return addr; - } - - /// Send or receive error code. - const int ERROR = SOCKET_ERROR; - - - /** - * Send data on the connection. Returns the number of bytes actually - * sent, or ERROR on failure. If the socket is blocking and there is no - * buffer space left, send waits. - */ - //returns number of bytes actually sent, or -1 on error - int send(void[] buf, SocketFlags flags=SocketFlags.NONE) - { - return .send(sock, buf.ptr, buf.length, cast(int)flags); - } - - /** - * Send data to a specific destination Address. If the destination address is not specified, a connection must have been made and that address is used. If the socket is blocking and there is no buffer space left, sendTo waits. - */ - int sendTo(void[] buf, SocketFlags flags, Address to) - { - return .sendto(sock, buf.ptr, buf.length, cast(int)flags, to.name(), to.nameLen()); - } - - /// ditto - int sendTo(void[] buf, Address to) - { - return sendTo(buf, SocketFlags.NONE, to); - } - - - //assumes you connect()ed - /// ditto - int sendTo(void[] buf, SocketFlags flags=SocketFlags.NONE) - { - return .sendto(sock, buf.ptr, buf.length, cast(int)flags, null, 0); - } - - - /** - * Receive data on the connection. Returns the number of bytes actually - * received, 0 if the remote side has closed the connection, or ERROR on - * failure. If the socket is blocking, receive waits until there is data - * to be received. - */ - //returns number of bytes actually received, 0 on connection closure, or -1 on error - int receive(void[] buf, SocketFlags flags=SocketFlags.NONE) - { - if (!buf.length) - badArg ("Socket.receive :: target buffer has 0 length"); - - return .recv(sock, buf.ptr, buf.length, cast(int)flags); - } - - /** - * Receive data and get the remote endpoint Address. Returns the number of bytes actually received, 0 if the remote side has closed the connection, or ERROR on failure. If the socket is blocking, receiveFrom waits until there is data to be received. - */ - int receiveFrom(void[] buf, SocketFlags flags, Address from) - { - if (!buf.length) - badArg ("Socket.receiveFrom :: target buffer has 0 length"); - - assert(from.addressFamily() == family); - int nameLen = from.nameLen(); - return .recvfrom(sock, buf.ptr, buf.length, cast(int)flags, from.name(), &nameLen); - } - - - /// ditto - int receiveFrom(void[] buf, Address from) - { - return receiveFrom(buf, SocketFlags.NONE, from); - } - - - //assumes you connect()ed - /// ditto - int receiveFrom(void[] buf, SocketFlags flags = SocketFlags.NONE) - { - if (!buf.length) - badArg ("Socket.receiveFrom :: target buffer has 0 length"); - - return .recvfrom(sock, buf.ptr, buf.length, cast(int)flags, null, null); - } - - - /*********************************************************************** - - returns the length, in bytes, of the actual result - very - different from getsockopt() - - ***********************************************************************/ - - int getOption (SocketOptionLevel level, SocketOption option, void[] result) - { - int len = result.length; - if(SOCKET_ERROR == .getsockopt (sock, cast(int)level, cast(int)option, result.ptr, &len)) - exception ("Unable to get socket option: "); - return len; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - Socket setOption (SocketOptionLevel level, SocketOption option, void[] value) - { - if(SOCKET_ERROR == .setsockopt (sock, cast(int)level, cast(int)option, value.ptr, value.length)) - exception ("Unable to set socket option: "); - return this; - } - - - /*********************************************************************** - - Tango: added this common function - - ***********************************************************************/ - - protected static void exception (char[] msg) - { - throw new SocketException (msg ~ SysError.lookup(lastError)); - } - - - /*********************************************************************** - - Tango: added this common function - - ***********************************************************************/ - - protected static void badArg (char[] msg) - { - throw new IllegalArgumentException (msg); - } - - - /*********************************************************************** - - SocketSet's are updated to include only those sockets which an - event occured. - - Returns the number of events, 0 on timeout, or -1 on error - - for a connect()ing socket, writeability means connected - for a listen()ing socket, readability means listening - - Winsock: possibly internally limited to 64 sockets per set - - ***********************************************************************/ - - static int select (SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, timeval* tv) - in - { - //make sure none of the SocketSet's are the same object - if(checkRead) - { - assert(checkRead !is checkWrite); - assert(checkRead !is checkError); - } - if(checkWrite) - { - assert(checkWrite !is checkError); - } - } - body - { - fd_set* fr, fw, fe; - - version(Win32) - { - //Windows has a problem with empty fd_set's that aren't null - fr = (checkRead && checkRead.count()) ? checkRead.toFd_set() : null; - fw = (checkWrite && checkWrite.count()) ? checkWrite.toFd_set() : null; - fe = (checkError && checkError.count()) ? checkError.toFd_set() : null; - } - else - { - fr = checkRead ? checkRead.toFd_set() : null; - fw = checkWrite ? checkWrite.toFd_set() : null; - fe = checkError ? checkError.toFd_set() : null; - } - - int result; - - // Tango: if select() was interrupted, we now try again - version(Win32) - { - while ((result = .select (socket_t.max - 1, fr, fw, fe, tv)) == -1) - { - if(WSAGetLastError() != WSAEINTR) - break; - } - } - else version (Posix) - { - socket_t maxfd = 0; - - if (checkRead) - maxfd = checkRead.maxfd; - - if (checkWrite && checkWrite.maxfd > maxfd) - maxfd = checkWrite.maxfd; - - if (checkError && checkError.maxfd > maxfd) - maxfd = checkError.maxfd; - - while ((result = .select (maxfd + 1, fr, fw, fe, tv)) == -1) - { - if(errno() != EINTR) - break; - } - } - else - { - static assert(0); - } - // Tango: don't throw an exception here ... wait until we get - // a bit further back along the control path - //if(SOCKET_ERROR == result) - // throw new SocketException("Socket select error."); - - return result; - } - - /*********************************************************************** - - select with specified timeout - - ***********************************************************************/ - - static int select (SocketSet checkRead, SocketSet checkWrite, SocketSet checkError, TimeSpan time) - { - auto tv = toTimeval (time); - return select (checkRead, checkWrite, checkError, &tv); - } - - /*********************************************************************** - - select with maximum timeout - - ***********************************************************************/ - - static int select (SocketSet checkRead, SocketSet checkWrite, SocketSet checkError) - { - return select (checkRead, checkWrite, checkError, null); - } - - /*********************************************************************** - - Handy utility for converting TimeSpan into timeval - - ***********************************************************************/ - - static timeval toTimeval (TimeSpan time) - { - timeval tv; - tv.tv_sec = cast(uint) time.seconds; - tv.tv_usec = cast(uint) time.micros % 1_000_000; - return tv; - } -} - - - -/******************************************************************************* - - -*******************************************************************************/ - -abstract class Address -{ - protected sockaddr* name(); - protected int nameLen(); - AddressFamily addressFamily(); - char[] toString(); - - /*********************************************************************** - - Tango: added this common function - - ***********************************************************************/ - - static void exception (char[] msg) - { - throw new AddressException (msg); - } - -} - - -/******************************************************************************* - - -*******************************************************************************/ - -class UnknownAddress: Address -{ - protected: - sockaddr sa; - - - /*********************************************************************** - - - ***********************************************************************/ - - sockaddr* name() - { - return &sa; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - int nameLen() - { - return sa.sizeof; - } - - - public: - /*********************************************************************** - - - ***********************************************************************/ - - AddressFamily addressFamily() - { - return cast(AddressFamily) sa.sa_family; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - char[] toString() - { - return "Unknown"; - } -} - - -/******************************************************************************* - - -*******************************************************************************/ - -class NetHost -{ - char[] name; - char[][] aliases; - uint[] addrList; - - - /*********************************************************************** - - - ***********************************************************************/ - - protected void validHostent(hostent* he) - { - if(he.h_addrtype != cast(int)AddressFamily.INET || he.h_length != 4) - throw new HostException("Address family mismatch."); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void populate(hostent* he) - { - int i; - char* p; - - name = .toString(he.h_name); - - for(i = 0;; i++) - { - p = he.h_aliases[i]; - if(!p) - break; - } - - if(i) - { - aliases = new char[][i]; - for(i = 0; i != aliases.length; i++) - { - aliases[i] = .toString(he.h_aliases[i]); - } - } - else - { - aliases = null; - } - - for(i = 0;; i++) - { - p = he.h_addr_list[i]; - if(!p) - break; - } - - if(i) - { - addrList = new uint[i]; - for(i = 0; i != addrList.length; i++) - { - addrList[i] = ntohl(*(cast(uint*)he.h_addr_list[i])); - } - } - else - { - addrList = null; - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - synchronized bool getHostByName(char[] name) - { - char[1024] tmp; - - hostent* he = gethostbyname(convert2C (name, tmp)); - if(!he) - return false; - validHostent(he); - populate(he); - return true; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - synchronized bool getHostByAddr(uint addr) - { - uint x = htonl(addr); - hostent* he = gethostbyaddr(&x, 4, cast(int)AddressFamily.INET); - if(!he) - return false; - validHostent(he); - populate(he); - return true; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - //shortcut - synchronized bool getHostByAddr(char[] addr) - { - char[64] tmp; - - uint x = inet_addr(convert2C (addr, tmp)); - hostent* he = gethostbyaddr(&x, 4, cast(int)AddressFamily.INET); - if(!he) - return false; - validHostent(he); - populate(he); - return true; - } -} - - -debug (UnitText) -{ -extern (C) int printf(char*, ...); -unittest -{ - try - { - NetHost ih = new NetHost; - ih.getHostByName(Socket.hostName()); - assert(ih.addrList.length > 0); - IPv4Address ia = new IPv4Address(ih.addrList[0], IPv4Address.PORT_ANY); - printf("IP address = %.*s\nname = %.*s\n", ia.toAddrString(), ih.name); - foreach(int i, char[] s; ih.aliases) - { - printf("aliases[%d] = %.*s\n", i, s); - } - - printf("---\n"); - - assert(ih.getHostByAddr(ih.addrList[0])); - printf("name = %.*s\n", ih.name); - foreach(int i, char[] s; ih.aliases) - { - printf("aliases[%d] = %.*s\n", i, s); - } - } - catch( Object o ) - { - assert( false ); - } -} -} - - -/******************************************************************************* - - -*******************************************************************************/ - -class IPv4Address: Address -{ - protected: - char[8] _port; - - /*********************************************************************** - - - ***********************************************************************/ - - struct sockaddr_in - { - ushort sinfamily = AddressFamily.INET; - ushort sin_port; - uint sin_addr; //in_addr - char[8] sin_zero = [0]; - } - - sockaddr_in sin; - - - /*********************************************************************** - - - ***********************************************************************/ - - sockaddr* name() - { - return cast(sockaddr*)&sin; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - int nameLen() - { - return sin.sizeof; - } - - - public: - - /*********************************************************************** - - - ***********************************************************************/ - - this() - { - } - - - const uint ADDR_ANY = 0; - const uint ADDR_NONE = cast(uint)-1; - const ushort PORT_ANY = 0; - - - /*********************************************************************** - - - ***********************************************************************/ - - AddressFamily addressFamily() - { - return AddressFamily.INET; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - ushort port() - { - return ntohs(sin.sin_port); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - uint addr() - { - return ntohl(sin.sin_addr); - } - - - /*********************************************************************** - - -port- can be PORT_ANY - -addr- is an IP address or host name - - ***********************************************************************/ - - this(char[] addr, int port = PORT_ANY) - { - uint uiaddr = parse(addr); - if(ADDR_NONE == uiaddr) - { - NetHost ih = new NetHost; - if(!ih.getHostByName(addr)) - exception ("Unable to resolve '"~addr~"': "); - uiaddr = ih.addrList[0]; - } - sin.sin_addr = htonl(uiaddr); - sin.sin_port = htons(cast(ushort) port); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - this(uint addr, ushort port) - { - sin.sin_addr = htonl(addr); - sin.sin_port = htons(port); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - this(ushort port) - { - sin.sin_addr = 0; //any, "0.0.0.0" - sin.sin_port = htons(port); - } - - /*********************************************************************** - - - ***********************************************************************/ - - synchronized char[] toAddrString() - { - return .toString(inet_ntoa(sin.sin_addr)).dup; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - char[] toPortString() - { - return .toString (_port, port()); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - char[] toString() - { - return toAddrString() ~ ":" ~ toPortString(); - } - - - /*********************************************************************** - - -addr- is an IP address in the format "a.b.c.d" - returns ADDR_NONE on failure - - ***********************************************************************/ - - static uint parse(char[] addr) - { - char[64] tmp; - - return ntohl(inet_addr(convert2C (addr, tmp))); - } -} - -debug(Unittest) -{ -unittest -{ - IPv4Address ia = new IPv4Address("63.105.9.61", 80); - assert(ia.toString() == "63.105.9.61:80"); -} -} - -/******************************************************************************* - - -*******************************************************************************/ - -//a set of sockets for Socket.select() -class SocketSet -{ -// private: - private uint nbytes; //Win32: excludes uint.size "count" - private byte* buf; - - - version(Win32) - { - uint count() - { - return *(cast(uint*)buf); - } - - - void count(int setter) - { - *(cast(uint*)buf) = setter; - } - - - socket_t* first() - { - return cast(socket_t*)(buf + uint.sizeof); - } - } - else version (Posix) - { - import tango.core.BitManip; - - - uint nfdbits; - socket_t _maxfd = 0; - - uint fdelt(socket_t s) - { - return cast(uint)s / nfdbits; - } - - - uint fdmask(socket_t s) - { - return 1 << cast(uint)s % nfdbits; - } - - - uint* first() - { - return cast(uint*)buf; - } - - public socket_t maxfd() - { - return _maxfd; - } - } - - - public: - /*********************************************************************** - - - ***********************************************************************/ - - this(uint max) - { - version(Win32) - { - nbytes = max * socket_t.sizeof; - buf = (new byte[nbytes + uint.sizeof]).ptr; - count = 0; - } - else version (Posix) - { - if(max <= 32) - nbytes = 32 * uint.sizeof; - else - nbytes = max * uint.sizeof; - buf = (new byte[nbytes]).ptr; - nfdbits = nbytes * 8; - //clear(); //new initializes to 0 - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - this() - { - version(Win32) - { - this(64); - } - else version (Posix) - { - this(32); - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void reset() - { - version(Win32) - { - count = 0; - } - else version (Posix) - { - buf[0 .. nbytes] = 0; - _maxfd = 0; - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void add(socket_t s) - in - { - version(Win32) - { - assert(count < max); //added too many sockets; specify a higher max in the constructor - } - } - body - { - version(Win32) - { - uint c = count; - first[c] = s; - count = c + 1; - } - else version (Posix) - { - if (s > _maxfd) - _maxfd = s; - - bts(cast(uint*)&first[fdelt(s)], cast(uint)s % nfdbits); - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void add(Socket s) - { - add(s.sock); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void remove(socket_t s) - { - version(Win32) - { - uint c = count; - socket_t* start = first; - socket_t* stop = start + c; - - for(; start != stop; start++) - { - if(*start == s) - goto found; - } - return; //not found - - found: - for(++start; start != stop; start++) - { - *(start - 1) = *start; - } - - count = c - 1; - } - else version (Posix) - { - btr(cast(uint*)&first[fdelt(s)], cast(uint)s % nfdbits); - - // If we're removing the biggest file descriptor we've - // entered so far we need to recalculate this value - // for the socket set. - if (s == _maxfd) - { - while (--_maxfd >= 0) - { - if (isSet(_maxfd)) - { - break; - } - } - } - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - void remove(Socket s) - { - remove(s.sock); - } - - - /*********************************************************************** - - - ***********************************************************************/ - - int isSet(socket_t s) - { - version(Win32) - { - socket_t* start = first; - socket_t* stop = start + count; - - for(; start != stop; start++) - { - if(*start == s) - return true; - } - return false; - } - else version (Posix) - { - //return bt(cast(uint*)&first[fdelt(s)], cast(uint)s % nfdbits); - int index = cast(uint)s % nfdbits; - return (cast(uint*)&first[fdelt(s)])[index / (uint.sizeof*8)] & (1 << (index & ((uint.sizeof*8) - 1))); - } - else - { - static assert(0); - } - } - - - /*********************************************************************** - - - ***********************************************************************/ - - int isSet(Socket s) - { - return isSet(s.sock); - } - - - /*********************************************************************** - - max sockets that can be added, like FD_SETSIZE - - ***********************************************************************/ - - uint max() - { - return nbytes / socket_t.sizeof; - } - - - /*********************************************************************** - - - ***********************************************************************/ - - fd_set* toFd_set() - { - return cast(fd_set*)buf; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/SocketConduit.d --- a/tango/tango/net/SocketConduit.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,346 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mar 2004 : Initial release - version: Jan 2005 : RedShodan patch for timeout query - version: Dec 2006 : Outback release - - author: Kris - -*******************************************************************************/ - -module tango.net.SocketConduit; - -private import tango.time.Time; - -public import tango.io.Conduit; - -private import tango.net.Socket; - -/******************************************************************************* - - A wrapper around the bare Socket to implement the IConduit abstraction - and add socket-specific functionality. - - SocketConduit data-transfer is typically performed in conjunction with - an IBuffer, but can happily be handled directly using void array where - preferred - -*******************************************************************************/ - -class SocketConduit : Conduit -{ - private timeval tv; - private SocketSet ss; - package Socket socket_; - private bool timeout; - - // freelist support - private SocketConduit next; - private bool fromList; - private static SocketConduit freelist; - - /*********************************************************************** - - Create a streaming Internet Socket - - ***********************************************************************/ - - this () - { - this (SocketType.STREAM, ProtocolType.TCP); - } - - /*********************************************************************** - - Create an Internet Socket. Used by subclasses and by - ServerSocket; the latter via method allocate() below - - ***********************************************************************/ - - protected this (SocketType type, ProtocolType protocol, bool create=true) - { - socket_ = new Socket (AddressFamily.INET, type, protocol, create); - } - - /*********************************************************************** - - Return the name of this device - - ***********************************************************************/ - - override char[] toString() - { - return socket.toString; - } - - /*********************************************************************** - - Return the socket wrapper - - ***********************************************************************/ - - Socket socket () - { - return socket_; - } - - /*********************************************************************** - - Return a preferred size for buffering conduit I/O - - ***********************************************************************/ - - override uint bufferSize () - { - return 1024 * 8; - } - - /*********************************************************************** - - Models a handle-oriented device. - - TODO: figure out how to avoid exposing this in the general - case - - ***********************************************************************/ - - override Handle fileHandle () - { - return cast(Handle) socket_.fileHandle; - } - - /*********************************************************************** - - Set the read timeout to the specified interval. Set a - value of zero to disable timeout support. - - ***********************************************************************/ - - SocketConduit setTimeout (TimeSpan interval) - { - tv = Socket.toTimeval (interval); - return this; - } - - /*********************************************************************** - - Did the last operation result in a timeout? - - ***********************************************************************/ - - bool hadTimeout () - { - return timeout; - } - - /*********************************************************************** - - Is this socket still alive? - - ***********************************************************************/ - - override bool isAlive () - { - return socket_.isAlive; - } - - /*********************************************************************** - - Connect to the provided endpoint - - ***********************************************************************/ - - SocketConduit connect (Address addr) - { - socket_.connect (addr); - return this; - } - - /*********************************************************************** - - Bind the socket. This is typically used to configure a - listening socket (such as a server or multicast socket). - The address given should describe a local adapter, or - specify the port alone (ADDR_ANY) to have the OS assign - a local adapter address. - - ***********************************************************************/ - - SocketConduit bind (Address address) - { - socket_.bind (address); - return this; - } - - /*********************************************************************** - - Inform other end of a connected socket that we're no longer - available. In general, this should be invoked before close() - is invoked - - The shutdown function shuts down the connection of the socket: - - - stops receiving data for this socket. If further data - arrives, it is rejected. - - - stops trying to transmit data from this socket. Also - discards any data waiting to be sent. Stop looking for - acknowledgement of data already sent; don't retransmit - if any data is lost. - - ***********************************************************************/ - - SocketConduit shutdown () - { - socket_.shutdown (SocketShutdown.BOTH); - return this; - } - - /*********************************************************************** - - Read content from socket. This is implemented as a callback - from the reader() method so we can expose the timout support - to subclasses - - ***********************************************************************/ - - protected uint socketReader (void[] dst) - { - return socket_.receive (dst); - } - - /*********************************************************************** - - Release this SocketConduit - - Note that one should always disconnect a SocketConduit - under normal conditions, and generally invoke shutdown - on all connected sockets beforehand - - ***********************************************************************/ - - override void detach () - { - socket_.detach; - - // deallocate if this came from the free-list, - // otherwise just wait for the GC to handle it - if (fromList) - deallocate (this); - } - - /*********************************************************************** - - Callback routine to read content from the socket. Note - that the operation may timeout if method setTimeout() - has been invoked with a non-zero value. - - Returns the number of bytes read from the socket, or - IConduit.Eof where there's no more content available - - Note that a timeout is equivalent to Eof. Isolating - a timeout condition can be achieved via hadTimeout() - - Note also that a zero return value is not legitimate; - such a value indicates Eof - - ***********************************************************************/ - - override uint read (void[] dst) - { - // ensure just one read at a time - synchronized (this) - { - // reset timeout; we assume there's no thread contention - timeout = false; - - // did user disable timeout checks? - if (tv.tv_usec | tv.tv_sec) - { - // nope: ensure we have a SocketSet - if (ss is null) - ss = new SocketSet (1); - - ss.reset (); - ss.add (socket_); - - // wait until data is available, or a timeout occurs - auto copy = tv; - int i = socket_.select (ss, null, null, ©); - - if (i <= 0) - { - if (i is 0) - timeout = true; - return Eof; - } - } - - // invoke the actual read op - int count = socketReader (dst); - if (count <= 0) - count = Eof; - return count; - } - } - - /*********************************************************************** - - Callback routine to write the provided content to the - socket. This will stall until the socket responds in - some manner. Returns the number of bytes sent to the - output, or IConduit.Eof if the socket cannot write. - - ***********************************************************************/ - - override uint write (void[] src) - { - int count = socket_.send (src); - if (count <= 0) - count = Eof; - return count; - } - - /*********************************************************************** - - Allocate a SocketConduit from a list rather than creating - a new one. Note that the socket itself is not opened; only - the wrappers. This is because the socket is often assigned - directly via accept() - - ***********************************************************************/ - - package static synchronized SocketConduit allocate () - { - SocketConduit s; - - if (freelist) - { - s = freelist; - freelist = s.next; - } - else - { - s = new SocketConduit (SocketType.STREAM, ProtocolType.TCP, false); - s.fromList = true; - } - return s; - } - - /*********************************************************************** - - Return this SocketConduit to the free-list - - ***********************************************************************/ - - private static synchronized void deallocate (SocketConduit s) - { - s.next = freelist; - freelist = s; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/SocketListener.d --- a/tango/tango/net/SocketListener.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: June 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.SocketListener; - -private import tango.core.Thread; - -private import tango.io.model.IBuffer, - tango.io.model.IConduit, - tango.io.model.IListener; - -/****************************************************************************** - - Abstract class to asynchronously listen for incoming data on a - socket. This can be used with DatagramSocket & MulticastSocket, - and might possibly be useful with a basic SocketConduit also. - Note that DatagramSocket must first be bound to a local network - address via bind(), and MulticastSocket should first be made a - member of a multicast group via its join() method. Note also - that the underlying thread is not started by the constructor; - you should do that manually via the start() method. - -******************************************************************************/ - -class SocketListener : IListener -{ - private bool quit; - private Thread thread; - private IBuffer buffer; - private IConduit conduit; - private int limit = 3; - - /********************************************************************** - - Construct a listener with the requisite arguments. The - specified buffer is populated via the provided instance - of ISocketReader before being passed to the notify() - method. All arguments are required. - - **********************************************************************/ - - this (IBuffer buffer) - { - assert (buffer); - this (buffer.input, buffer); - } - - /********************************************************************** - - Construct a listener with the requisite arguments. The - specified buffer is populated via the provided instance - of ISocketReader before being passed to the notify() - method. All arguments are required. - - **********************************************************************/ - - this (InputStream stream, IBuffer buffer) - { - assert (stream); - this.buffer = buffer; - this.conduit = stream.conduit; - thread = new Thread (&run); - thread.isDaemon = true; - } - - /*********************************************************************** - - Notification callback invoked whenever the listener has - anything to report. The buffer will have whatever content - was available from the read() operation - - ***********************************************************************/ - - abstract void notify (IBuffer buffer); - - /*********************************************************************** - - Handle error conditions from the listener thread. - - ***********************************************************************/ - - abstract void exception (char[] msg); - - /********************************************************************** - - Start this listener - - **********************************************************************/ - - void execute () - { - thread.start; - } - - /********************************************************************** - - Cancel this listener. The thread will quit only after the - current read() request responds, or is interrrupted. - - **********************************************************************/ - - void cancel () - { - quit = true; - } - - /********************************************************************** - - Set the maximum contiguous number of exceptions this - listener will survive. Setting a limit of zero will - not survive any errors at all, whereas a limit of two - will survive as long as two consecutive errors don't - arrive back to back. - - **********************************************************************/ - - void setErrorLimit (ushort limit) - { - this.limit = limit + 1; - } - - /********************************************************************** - - Execution of this thread is typically stalled on the - read() method belonging to the conduit specified - during construction. You can invoke cancel() to indicate - execution should not proceed further, but that will not - actually interrupt a blocked read() operation. - - Note that exceptions are all directed towards the handler - implemented by the class instance. - - **********************************************************************/ - - private void run () - { - int lives = limit; - - while (lives > 0) - try { - // start with a clean slate - buffer.compress; - - // wait for incoming content - auto result = buffer.write (&conduit.input.read); - - // time to quit? Note that a v0.95 compiler bug - // prohibits 'break' from exiting the try{} block - if (quit || - (result is conduit.Eof && !conduit.isAlive)) - lives = 0; - else - { - // invoke callback - notify (buffer); - lives = limit; - } - } catch (Object x) - // time to quit? - if (quit || !conduit.isAlive) - break; - else - { - exception (x.toString); - if (--lives is 0) - exception ("listener thread aborting"); - } - } -} - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/Uri.d --- a/tango/tango/net/Uri.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,930 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.Uri; - -public import tango.net.model.UriView; - -private import tango.core.Exception; - -private import Integer = tango.text.convert.Integer; - -/******************************************************************************* - - external links - -*******************************************************************************/ - -extern (C) char* memchr (char *, char, uint); - - -/******************************************************************************* - - Implements an RFC 2396 compliant URI specification. See - this page - for more information. - - The implementation fails the spec on two counts: it doesn't insist - on a scheme being present in the Uri, and it doesn't implement the - "Relative References" support noted in section 5.2. The latter can - be found in tango.util.PathUtil instead. - - Note that IRI support can be implied by assuming each of userinfo, - path, query, and fragment are UTF-8 encoded - (see - this page for further details). - - Use the UriView subset where you need a readonly perspective. - -*******************************************************************************/ - -class Uri : UriView -{ - // simplistic string appender - private alias void delegate (void[]) Consumer; - - private int port; - private char[] host, - path, - query, - scheme, - userinfo, - fragment; - private HeapSlice decoded; - - private static ubyte map[256]; - - private static short[char[]] genericSchemes; - - private static const char[] hexDigits = "0123456789abcdef"; - - private static const SchemePort[] schemePorts = - [ - {"coffee", 80}, - {"file", InvalidPort}, - {"ftp", 21}, - {"gopher", 70}, - {"hnews", 80}, - {"http", 80}, - {"http-ng", 80}, - {"https", 443}, - {"imap", 143}, - {"irc", 194}, - {"ldap", 389}, - {"news", 119}, - {"nfs", 2049}, - {"nntp", 119}, - {"pop", 110}, - {"prospero", 1525}, - {"rwhois", 4321}, - {"sip", InvalidPort}, - {"sips", InvalidPort}, - {"sipt", InvalidPort}, - {"sipu", InvalidPort}, - {"shttp", 80}, - {"smtp", 25}, - {"snews", 563}, - {"telnet", 23}, - {"vemmi", 575}, - {"videotex", 516}, - {"wais", 210}, - {"whois", 43}, - {"whois++", 43}, - ]; - - public enum - { - ExcScheme = 0x01, - ExcAuthority = 0x02, - ExcPath = 0x04, - IncUser = 0x80, // encode spec for User - IncPath = 0x10, // encode spec for Path - IncQuery = 0x20, // encode spec for Query - IncQueryAll = 0x40, - IncScheme = 0x80, // encode spec for Scheme - IncGeneric = IncScheme | - IncUser | - IncPath | - IncQuery | - IncQueryAll - } - - // scheme and port pairs - private struct SchemePort - { - char[] name; - short port; - } - - /*********************************************************************** - - Initialize the Uri character maps and so on - - ***********************************************************************/ - - static this () - { - // Map known generic schemes to their default port. Specify - // InvalidPort for those schemes that don't use ports. Note - // that a port value of zero is not supported ... - foreach (SchemePort sp; schemePorts) - genericSchemes[sp.name] = sp.port; - genericSchemes.rehash; - - // load the character map with valid symbols - for (int i='a'; i <= 'z'; ++i) - map[i] = IncGeneric; - - for (int i='A'; i <= 'Z'; ++i) - map[i] = IncGeneric; - - for (int i='0'; i<='9'; ++i) - map[i] = IncGeneric; - - // exclude these from parsing elements - map[':'] |= ExcScheme; - map['/'] |= ExcScheme | ExcAuthority; - map['?'] |= ExcScheme | ExcAuthority | ExcPath; - map['#'] |= ExcScheme | ExcAuthority | ExcPath; - - // include these as common symbols - map['-'] |= IncUser | IncQuery | IncQueryAll; - map['_'] |= IncUser | IncQuery | IncQueryAll; - map['.'] |= IncUser | IncQuery | IncQueryAll; - map['!'] |= IncUser | IncQuery | IncQueryAll; - map['~'] |= IncUser | IncQuery | IncQueryAll; - map['*'] |= IncUser | IncQuery | IncQueryAll; - map['\''] |= IncUser | IncQuery | IncQueryAll; - map['('] |= IncUser | IncQuery | IncQueryAll; - map[')'] |= IncUser | IncQuery | IncQueryAll; - - // include these as scheme symbols - map['+'] |= IncScheme; - map['-'] |= IncScheme; - map['.'] |= IncScheme; - - // include these as userinfo symbols - map[';'] |= IncUser; - map[':'] |= IncUser; - map['&'] |= IncUser; - map['='] |= IncUser; - map['+'] |= IncUser; - map['$'] |= IncUser; - map[','] |= IncUser; - - // include these as path symbols - map['/'] |= IncPath; - map[';'] |= IncPath; - map[':'] |= IncPath; - map['@'] |= IncPath; - map['&'] |= IncPath; - map['='] |= IncPath; - map['+'] |= IncPath; - map['$'] |= IncPath; - map[','] |= IncPath; - - // include these as query symbols - map[';'] |= IncQuery | IncQueryAll; - map['/'] |= IncQuery | IncQueryAll; - map['?'] |= IncQueryAll; - map[':'] |= IncQuery | IncQueryAll; - map['@'] |= IncQuery | IncQueryAll; - map['&'] |= IncQueryAll; - map['='] |= IncQuery | IncQueryAll; - map['+'] |= IncQuery | IncQueryAll; - map['$'] |= IncQuery | IncQueryAll; - map[','] |= IncQuery | IncQueryAll; - - // '%' are permitted inside queries when constructing output - map['%'] |= IncQueryAll; - } - - /*********************************************************************** - - Create an empty Uri - - ***********************************************************************/ - - this () - { - port = InvalidPort; - decoded = new HeapSlice (256); - } - - /*********************************************************************** - - Construct a Uri from the provided character string - - ***********************************************************************/ - - this (char[] uri) - { - this (); - parse (uri); - } - - /*********************************************************************** - - Construct a Uri from the given components. The query is - optional. - - ***********************************************************************/ - - this (char[] scheme, char[] host, char[] path, char[] query = null) - { - this (); - - this.scheme = scheme; - this.query = query; - this.host = host; - this.path = path; - } - - /*********************************************************************** - - Clone another Uri. This can be used to make a mutable Uri - from an immutable UriView. - - ***********************************************************************/ - - this (UriView other) - { - with (other) - { - this (getScheme, getHost, getPath, getQuery); - this.userinfo = getUserInfo; - this.fragment = getFragment; - this.port = getPort; - } - } - - /*********************************************************************** - - Return the default port for the given scheme. InvalidPort - is returned if the scheme is unknown, or does not accept - a port. - - ***********************************************************************/ - - final int getDefaultPort (char[] scheme) - { - short* port = scheme in genericSchemes; - if (port is null) - return InvalidPort; - return *port; - } - - /*********************************************************************** - - Return the parsed scheme, or null if the scheme was not - specified - - ***********************************************************************/ - - final char[] getScheme() - { - return scheme; - } - - /*********************************************************************** - - Return the parsed host, or null if the host was not - specified - - ***********************************************************************/ - - final char[] getHost() - { - return host; - } - - /*********************************************************************** - - Return the parsed port number, or InvalidPort if the port - was not provided. - - ***********************************************************************/ - - final int getPort() - { - return port; - } - - /*********************************************************************** - - Return a valid port number by performing a lookup on the - known schemes if the port was not explicitly specified. - - ***********************************************************************/ - - final int getValidPort() - { - if (port is InvalidPort) - return getDefaultPort (scheme); - return port; - } - - /*********************************************************************** - - Return the parsed userinfo, or null if userinfo was not - provided. - - ***********************************************************************/ - - final char[] getUserInfo() - { - return userinfo; - } - - /*********************************************************************** - - Return the parsed path, or null if the path was not - provided. - - ***********************************************************************/ - - final char[] getPath() - { - return path; - } - - /*********************************************************************** - - Return the parsed query, or null if a query was not - provided. - - ***********************************************************************/ - - final char[] getQuery() - { - return query; - } - - /*********************************************************************** - - Return the parsed fragment, or null if a fragment was not - provided. - - ***********************************************************************/ - - final char[] getFragment() - { - return fragment; - } - - /*********************************************************************** - - Return whether or not the Uri scheme is considered generic. - - ***********************************************************************/ - - final bool isGeneric () - { - return (scheme in genericSchemes) !is null; - } - - /*********************************************************************** - - Emit the content of this Uri via the provided Consumer. The - output is constructed per RFC 2396. - - ***********************************************************************/ - - final Consumer produce (Consumer consume) - { - if (scheme.length) - consume (scheme), consume (":"); - - - if (userinfo.length || host.length || port != InvalidPort) - { - consume ("//"); - - if (userinfo.length) - encode (consume, userinfo, IncUser) ("@"); - - if (host.length) - consume (host); - - if (port != InvalidPort && port != getDefaultPort(scheme)) - { - char[8] tmp; - consume (":"), consume (Integer.itoa (tmp, cast(uint) port)); - } - } - - if (path.length) - encode (consume, path, IncPath); - - if (query.length) - { - consume ("?"); - encode (consume, query, IncQueryAll); - } - - if (fragment.length) - { - consume ("#"); - encode (consume, fragment, IncQuery); - } - - return consume; - } - - /*********************************************************************** - - Emit the content of this Uri via the provided Consumer. The - output is constructed per RFC 2396. - - ***********************************************************************/ - - final char[] toString () - { - void[] s; - - s.length = 256, s.length = 0; - produce ((void[] v) {s ~= v;}); - return cast(char[]) s; - } - - /*********************************************************************** - - Encode uri characters into a Consumer, such that - reserved chars are converted into their %hex version. - - ***********************************************************************/ - - static Consumer encode (Consumer consume, char[] s, int flags) - { - char[3] hex; - int mark; - - hex[0] = '%'; - foreach (int i, char c; s) - { - if (! (map[c] & flags)) - { - consume (s[mark..i]); - mark = i+1; - - hex[1] = hexDigits [(c >> 4) & 0x0f]; - hex[2] = hexDigits [c & 0x0f]; - consume (hex); - } - } - - // add trailing section - if (mark < s.length) - consume (s[mark..s.length]); - - return consume; - } - - /*********************************************************************** - - Encode uri characters into a string, such that reserved - chars are converted into their %hex version. - - Returns a dup'd string - - ***********************************************************************/ - - final char[] encode (char[] text, int flags) - { - void[] s; - encode ((void[] v) {s ~= v;}, text, flags); - return cast(char[]) s; - } - - /*********************************************************************** - - Decode a character string with potential %hex values in it. - The decoded strings are placed into a thread-safe expanding - buffer, and a slice of it is returned to the caller. - - ***********************************************************************/ - - private char[] decoder (char[] s, char ignore=0) - { - static int toInt (char c) - { - if (c >= '0' && c <= '9') - c -= '0'; - else - if (c >= 'a' && c <= 'f') - c -= ('a' - 10); - else - if (c >= 'A' && c <= 'F') - c -= ('A' - 10); - return c; - } - - int length = s.length; - - // take a peek first, to see if there's work to do - if (length && memchr (s.ptr, '%', length)) - { - char* p; - int j; - - // ensure we have enough decoding space available - p = cast(char*) decoded.expand (length); - - // scan string, stripping % encodings as we go - for (int i; i < length; ++i, ++j, ++p) - { - int c = s[i]; - - if (c is '%' && (i+2) < length) - { - c = toInt(s[i+1]) * 16 + toInt(s[i+2]); - - // leave ignored escapes in the stream, - // permitting escaped '&' to remain in - // the query string - if (c && (c is ignore)) - c = '%'; - else - i += 2; - } - - *p = c; - } - - // return a slice from the decoded input - return cast(char[]) decoded.slice (j); - } - - // return original content - return s; - } - - /*********************************************************************** - - Decode a duplicated string with potential %hex values in it - - ***********************************************************************/ - - final char[] decode (char[] s) - { - return decoder(s).dup; - } - - /*********************************************************************** - - Parsing is performed according to RFC 2396 - - --- - ^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? - 12 3 4 5 6 7 8 9 - - 2 isolates scheme - 4 isolates authority - 5 isolates path - 7 isolates query - 9 isolates fragment - --- - - This was originally a state-machine; it turned out to be a - lot faster (~40%) when unwound like this instead. - - ***********************************************************************/ - - final Uri parse (char[] uri, bool relative = false) - { - char c; - int i, - mark, - len = uri.length; - - reset; - - // isolate scheme (note that it's OK to not specify a scheme) - for (i=0; i < len && !(map[c = uri[i]] & ExcScheme); ++i) {} - if (c is ':') - { - scheme = uri [mark .. i]; - toLower (scheme); - mark = i + 1; - } - - // isolate authority - if (mark < len-1 && uri[mark] is '/' && uri[mark+1] is '/') - { - for (mark+=2, i=mark; i < len && !(map[uri[i]] & ExcAuthority); ++i) {} - parseAuthority (uri[mark .. i]); - mark = i; - } - else - if (relative && uri[0] != '/') - { - uri = toLastSlash(path) ~ uri; - query = fragment = null; - len = uri.length; - } - - // isolate path - for (i=mark; i < len && !(map[uri[i]] & ExcPath); ++i) {} - path = decoder (uri[mark .. i]); - mark = i; - - // isolate query - if (mark < len && uri[mark] is '?') - { - for (++mark, i=mark; i < len && uri[i] != '#'; ++i) {} - query = decoder (uri[mark .. i], '&'); - mark = i; - } - - // isolate fragment - if (mark < len && uri[mark] is '#') - fragment = decoder (uri[mark+1 .. len]); - - return this; - } - - /*********************************************************************** - - Clear everything to null. - - ***********************************************************************/ - - final void reset() - { - decoded.reset; - port = InvalidPort; - host = path = query = scheme = userinfo = fragment = null; - } - - /*********************************************************************** - - Parse the given uri, with support for relative URLs - - ***********************************************************************/ - - final Uri relParse (char[] uri) - { - return parse (uri, true); - } - - /*********************************************************************** - - Set the Uri scheme - - ***********************************************************************/ - - final Uri setScheme (char[] scheme) - { - this.scheme = scheme; - return this; - } - - /*********************************************************************** - - Set the Uri host - - ***********************************************************************/ - - final Uri setHost (char[] host) - { - this.host = host; - return this; - } - - /*********************************************************************** - - Set the Uri port - - ***********************************************************************/ - - final Uri setPort (int port) - { - this.port = port; - return this; - } - - /*********************************************************************** - - Set the Uri userinfo - - ***********************************************************************/ - - final Uri setUserInfo (char[] userinfo) - { - this.userinfo = userinfo; - return this; - } - - /*********************************************************************** - - Set the Uri query - - ***********************************************************************/ - - final Uri setQuery (char[] query) - { - this.query = query; - return this; - } - - /*********************************************************************** - - Extend the Uri query - - ***********************************************************************/ - - final char[] extendQuery (char[] tail) - { - if (tail.length) - if (query.length) - query = query ~ "&" ~ tail; - else - query = tail; - return query; - } - - /*********************************************************************** - - Set the Uri path - - ***********************************************************************/ - - final Uri setPath (char[] path) - { - this.path = path; - return this; - } - - /*********************************************************************** - - Set the Uri fragment - - ***********************************************************************/ - - final Uri setFragment (char[] fragment) - { - this.fragment = fragment; - return this; - } - - /*********************************************************************** - - Authority is the section after the scheme, but before the - path, query or fragment; it typically represents a host. - - --- - ^(([^@]*)@?)([^:]*)?(:(.*))? - 12 3 4 5 - - 2 isolates userinfo - 3 isolates host - 5 isolates port - --- - - ***********************************************************************/ - - private void parseAuthority (char[] auth) - { - int mark, - len = auth.length; - - // get userinfo: (([^@]*)@?) - foreach (int i, char c; auth) - if (c is '@') - { - userinfo = decoder (auth[0 .. i]); - mark = i + 1; - break; - } - - // get port: (:(.*))? - for (int i=mark; i < len; ++i) - if (auth [i] is ':') - { - port = Integer.atoi (auth [i+1 .. len]); - len = i; - break; - } - - // get host: ([^:]*)? - host = auth [mark..len]; - } - - /********************************************************************** - - **********************************************************************/ - - private final char[] toLastSlash (char[] path) - { - for (char*p = path.ptr+path.length; --p >= path.ptr;) - if (*p is '/') - return path [0 .. (p-path.ptr)+1]; - return path; - } - - /********************************************************************** - - in-place conversion to lowercase - - **********************************************************************/ - - private final static char[] toLower (inout char[] src) - { - foreach (inout char c; src) - if (c >= 'A' && c <= 'Z') - c = c + ('a' - 'A'); - return src; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private class HeapSlice -{ - private uint used; - private void[] buffer; - - /*********************************************************************** - - Create with the specified starting size - - ***********************************************************************/ - - this (uint size) - { - buffer = new void[size]; - } - - /*********************************************************************** - - Reset content length to zero - - ***********************************************************************/ - - final void reset () - { - used = 0; - } - - /*********************************************************************** - - Potentially expand the content space, and return a pointer - to the start of the empty section. - - ***********************************************************************/ - - final void* expand (uint size) - { - if ((used + size) > buffer.length) - buffer.length = (used + size) * 2; - return &buffer [used]; - } - - /*********************************************************************** - - Return a slice of the content from the current position - with the specified size. Adjusts the current position to - point at an empty zone. - - ***********************************************************************/ - - final void[] slice (int size) - { - uint i = used; - used += size; - return buffer [i..used]; - } -} - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (Uri) -{ - import tango.io.Console; - - void main() - { - auto uri = new Uri ("http://foo.bar?a=1&b=2&c=3&d=%26%26&e=5"); - - Cout (uri.getQuery).newline; - Cout (uri).newline; - - Cout (uri.encode ("&#$%", uri.IncQuery)).newline; - } -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/CacheInvalidatee.d --- a/tango/tango/net/cluster/CacheInvalidatee.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.CacheInvalidatee; - -private import tango.net.cluster.model.ICache; - -private import tango.net.cluster.NetworkClient, - tango.net.cluster.CacheInvalidator; - -/******************************************************************************* - - Wrapper around an ICache instance that attaches it to the network, - and ensures the former complies with cache invalidation requests. - Use this in conjunction with CacheInvalidator or NetworkCombo. The - ICache provided should typically be synchronized against thread - contention since it will potentially have entries removed from a - listener thread (you won't need synchronization if you're using - the concurrent hash-map ICache implementation). - -*******************************************************************************/ - -class CacheInvalidatee : NetworkClient -{ - alias ICache!(char[], IMessage) Cache; - - private Cache cache_; - private IConsumer consumer; - - /*********************************************************************** - - Construct a CacheInvalidatee upon the given cache, using - the named channel. This channel should be a name that is - common to both the receiver and the sender. - - ***********************************************************************/ - - this (ICluster cluster, char[] name, Cache cache) - { - super (cluster, name); - - assert (cache); - cache_ = cache; - - // start listening for invalidation requests - consumer = channel.createBulletinConsumer (¬ify); - } - - /*********************************************************************** - - Detach from the network. The CacheInvalidatee is disabled - from this point forward. - - ***********************************************************************/ - - void cancel () - { - consumer.cancel; - } - - /*********************************************************************** - - Return the ICache instance provided during construction - - ***********************************************************************/ - - Cache cache () - { - return cache_; - } - - /*********************************************************************** - - Notification callback from the listener. We remove the - indicated entry from our cache - - ***********************************************************************/ - - private void notify (IEvent event) - { - scope p = new InvalidatorPayload; - event.get (p); - - // remove entry from our cache - if (cache_.remove (p.key, p.time)) - event.log.trace ("removed cache entry '"~p.key~ - "' on channel '"~event.channel.name~"'"); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/CacheInvalidator.d --- a/tango/tango/net/cluster/CacheInvalidator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.CacheInvalidator; - -package import tango.net.cluster.NetworkClient; - -private import tango.net.cluster.NetworkMessage; - -/******************************************************************************* - - Utility class to invalidate specific cache entries across a - network. Any active CacheInvalidatee objects listening upon - the channel specified for this class will "wake up" whenever - the invalidate() method is invoked. - -*******************************************************************************/ - -class CacheInvalidator : NetworkClient -{ - private InvalidatorPayload filter; - - /*********************************************************************** - - Construct an invalidator on the specified channel. Only - those CacheInvalidatee instances configured for the same - channel will be listening to this invalidator. - - ***********************************************************************/ - - this (ICluster cluster, char[] channel) - { - assert (channel.length); - super (cluster, channel); - - // this is what we'll send as an invalidation notification ... - this.filter = new InvalidatorPayload; - } - - /*********************************************************************** - - Invalidate all network cache instances on this channel - using the specified key. When 'timeLimit' is specified, - only those cache entries with a time lesser or equal to - that specified will be removed. This is often useful if - you wish to avoid invalidating a cache (local or remote) - that has just been updated; simply pass the time value - of the 'old' IMessage as the argument. - - Note that this is asynchronous! An invalidation is just - a request to remove the item within a short time period. - If you need the entry removed synchronously, you should - use the NetworkCache extract() method instead. - - ***********************************************************************/ - - void invalidate (char[] key, Time timeLimit = Time.max) - { - assert (key.length); - filter.key (key); - filter.time (timeLimit); - - // broadcast a message across the cluster - channel.broadcast (filter); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private class InvalidatorPayload : NetworkMessage -{ - private char[] key_; - - /*********************************************************************** - - ***********************************************************************/ - - char[] key () - { - return key_; - } - - /*********************************************************************** - - ***********************************************************************/ - - void key (char[] key) - { - assert (key.length); - key_ = key; - } - - /*********************************************************************** - - Read our attributes, after telling our superclass to do - likewise. The order of this is important with respect to - inheritance, such that a subclass and superclass may be - populated in isolation where appropriate. - - Note that we slice our text attribute, rather than copying - it. Since this class is temporal we can forego allocation - of memory, and just map it directly from the input buffer. - - ***********************************************************************/ - - override void read (IReader input) - { - super.read (input); - input (key_); - } - - /*********************************************************************** - - ***********************************************************************/ - - override void write (IWriter output) - { - super.write (output); - output (key_); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkAlert.d --- a/tango/tango/net/cluster/NetworkAlert.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkAlert; - -private import tango.net.cluster.NetworkClient; - -/******************************************************************************* - -*******************************************************************************/ - -class NetworkAlert : NetworkClient -{ - /*********************************************************************** - - Construct a NetworkAlert gateway on the provided QOS cluster - for the specified channel. Each subsequent alert will take - place over the given channel. - - ***********************************************************************/ - - this (ICluster cluster, char[] channel) - { - super (cluster, channel); - } - - /*********************************************************************** - - ***********************************************************************/ - - IConsumer createConsumer (ChannelListener listener) - { - return channel.createBulletinConsumer (listener); - } - - /*********************************************************************** - - ***********************************************************************/ - - void broadcast (IMessage payload = null) - { - channel.broadcast (payload); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkCache.d --- a/tango/tango/net/cluster/NetworkCache.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkCache; - -private import tango.core.Thread; - -private import tango.net.cluster.model.IMessage; - -private import tango.net.cluster.QueuedCache, - tango.net.cluster.CacheInvalidator, - tango.net.cluster.CacheInvalidatee; - -/******************************************************************************* - - A gateway to the network cache. From here you can easily place - IMessage objects into the network cluster, copy them and remove - them. A cluster cache is spread out across many servers within - the network. Each cache entry is associated with a 'channel', - which is effectively the name of a cache instance within the - cluster. See ComboCache also. The basic procedure is so: - --- - import tango.net.cluster.NetworkCache; - import tango.net.cluster.tina.Cluster; - - auto cluster = new Cluster (...); - auto cache = new NetworkCache (cluster, ...); - - cache.put (...); - cache.get (); - cache.invalidate (...); - --- - - Note that any content placed into the cache must implement the - IMessage interface, and must be enrolled with the Registry, as - it may be frozen and thawed as it travels around the network. - -*******************************************************************************/ - -class NetworkCache : CacheInvalidator -{ - /*********************************************************************** - - Construct a NetworkCache using the QOS (cluster) provided, - and hook it onto the specified channel. Each subsequent - operation is tied to this channel. - - ***********************************************************************/ - - this (ICluster cluster, char[] channel) - { - super (cluster, channel); - } - - /*********************************************************************** - - Returns a copy of the cluster cache entry corresponding to - the provided key. Returns null if there is no such entry. - - ***********************************************************************/ - - IMessage get (char[] key) - { - assert (key.length); - return channel.getCache (key, false); - } - - /*********************************************************************** - - Remove and return the cache entry corresponding to the - provided key. - - ***********************************************************************/ - - IMessage extract (char[] key) - { - assert (key.length); - return channel.getCache (key, true); - } - - /*********************************************************************** - - Set a cluster cache entry. - - Place an entry into the network cache, replacing the - entry with the identical key. Where message.time is - set, it will be used to test for newer cache entries - than the one being sent i.e. if someone else placed - a newer entry into the cache, that one will remain. - - The msg will be placed into one or more cluster hosts - (depending upon QOS) - - Returns true if the cache entry was inserted, false if - the cache server already has an exiting key with a more - recent timestamp (where message.time is set). - - ***********************************************************************/ - - bool put (char[] key, IMessage message) - { - assert (message); - assert (key.length); - - return channel.putCache (key, message); - } -} - - -/******************************************************************************* - - A combination of a local cache, cluster cache, and CacheInvalidatee. - The two cache instances are combined such that they represent a - classic level1/level2 cache. The CacheInvalidatee ensures that the - level1 cache maintains coherency with the cluster. - -*******************************************************************************/ - -class NetworkCombo : NetworkCache -{ - private QueuedCache!(char[], IMessage) cache; - private CacheInvalidatee invalidatee; - - /*********************************************************************** - - Construct a ComboCache for the specified local cache, and - on the given cluster channel. - - ***********************************************************************/ - - this (ICluster cluster, char[] channel, uint capacity) - { - super (cluster, channel); - - cache = new QueuedCache!(char[], IMessage) (capacity); - invalidatee = new CacheInvalidatee (cluster, channel, cache); - } - - /*********************************************************************** - - Get an IMessage from the local cache, and revert to the - cluster cache if it's not found. - - Cluster lookups will *not* place new content into the - local cache without confirmation: the supplied delegate - must perform the appropriate cloning of cluster entries - before they will be placed into the local cache. This - delegate would typically invoke the clone() method on - the provided network message; behaviour is undefined - where a delegate simply returns a message without the - appropriate cloning steps. - - Returns null if the entry does not exist in either the - local or remote cache, or if the delegate returned null. - Returns the cache entry otherwise. - - ***********************************************************************/ - - IMessage get (char[] key, IMessage delegate(IMessage) dg) - { - auto cached = cache.get (key); - if (cached is null) - { - cached = super.get (key); - - // if delegate cloned the entry, - // place said clone into the cache - if (cached && (cached = dg(cached)) !is null) - cache.put (key, cached, cached.time); - } - return cached; - } - - /*********************************************************************** - - Place a new entry into the cache. This will also place - the entry into the cluster, and optionally invalidate - all other local cache instances across the network. If - a cache entry exists with the same key, it is replaced. - - Where message.time is set, it will be used to test for - newer cache entries than the one being sent i.e. if a - newer entry exists in the cache, that one will remain. - - Note that when using the coherency option you should - ensure your IMessage has a valid time stamp, since that - is used to invalidate appropriate cache listeners in the - cluster. You can use the getTime() method to retrieve a - current millisecond count. - - Returns true if the cache entry was inserted, false if - the cache server already has an exiting key with a more - recent timestamp (where message.time is set). - - ***********************************************************************/ - - bool put (char[] key, IMessage message, bool coherent = false) - { - // this will throw an exception if there's a problem - if (super.put (key, message)) - { - // place into local cache also - cache.put (key, message, message.time); - - // invalidate all other cache instances except this new one, - // such that no other listening cache has the same key - if (coherent) - invalidate (key, message.time); - - return true; - } - return false; - } - - /*********************************************************************** - - Remove and return the cache entry corresponding to the - provided key. - - Synchronously extracts the entry from the cluster, and - returns the entry from the local cache if there is one - there; null otherwise - - ***********************************************************************/ - - IMessage extract (char[] key) - { - // do this first, since its return value may have to be cloned - super.extract (key); - - // return the local entry if there is one - return cache.remove (key); - } -} - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkCall.d --- a/tango/tango/net/cluster/NetworkCall.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,230 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Tango. All rights reserved - - license: BSD style: $(LICENSE) - - version: April 2007: Initial release - - author: h3r3tic, Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkCall; - -private import tango.core.Traits; -private import tango.core.Thread; - -private import tango.net.cluster.NetworkMessage; - -protected import tango.io.protocol.model.IReader, - tango.io.protocol.model.IWriter; - -protected import tango.net.cluster.model.IChannel; - - -/******************************************************************************* - - task harness, for initiating the send - -*******************************************************************************/ - -class NetworkCall : NetworkMessage -{ - /*********************************************************************** - - ***********************************************************************/ - - void send (IChannel channel = null) - { - if (channel) - channel.execute (this); - else - { - auto x = cast(IChannel) Thread.getLocal(0); - if (x) - x.execute (this); - else - execute; - } - } -} - - -/******************************************************************************* - - Template for RPC glue - -*******************************************************************************/ - -class NetCall(alias realFunc) : NetworkCall -{ - alias ParameterTupleOf!(realFunc) Params; - alias ReturnTypeOf!(realFunc) RetType; - - static if (!is(RetType == void)) { - RetType result; - } - Params params; - - - override char[] toString() { - return signatureOfFunc!(realFunc); - } - - RetType opCall(Params params, IChannel channel = null) { - foreach (i, _dummy; this.params) { - this.params[i] = params[i]; - } - send (channel); - - static if (!is(RetType == void)) { - return result; - } - } - - override void execute() { - static if (!is(RetType == void)) { - result = realFunc(params); - } else { - realFunc(params); - } - } - - override void read(IReader input) { - static if (!is(RetType == void)) { - input(result); - } - foreach (i, _dummy; params) input(params[i]); - } - - override void write(IWriter output) { - static if (!is(RetType == void)) { - output(result); - } - foreach (i, _dummy; params) output(params[i]); - } -} - - -/******************************************************************************* - - Magic to get a clean function signature - -*******************************************************************************/ - -private { - struct Wrapper(alias fn) {} - const char[] WrapperPrefix = `__T7Wrapper`; - - - uint parseUint(char[] str) { - int res = 0; - foreach (c; str) { - res *= 10; - res += c - '0'; - } - return res; - } - - - char[] sliceOffSegment(inout char[] str) { - assert (str.length > 0 && str[0] >= '0' && str[0] <= '9'); - - int lenEnd = 0; - for (; str[lenEnd] >= '0' && str[lenEnd] <= '9'; ++lenEnd) {} - - char[] lenStr = str[0..lenEnd]; - uint segLen = parseUint(lenStr); - str = str[lenEnd .. $]; - - char[] res = str[0..segLen]; - str = str[segLen .. $]; - return res; - } - - - char[] digOutWrapper(char[] wrapped) { - wrapped = wrapped[1..$]; // skip the 'S' - char[] seg; - - do { - seg = sliceOffSegment(wrapped); - } while (seg.length < WrapperPrefix.length || seg[0..WrapperPrefix.length] != WrapperPrefix); - - return seg[WrapperPrefix.length .. $]; - } - - - char[] demangleDFunc(char[] mangled) { - char[] res = sliceOffSegment(mangled); - - while (mangled.length > 0 && mangled[0] >= '0' && mangled[0] <= '9') { - res ~= '.' ~ sliceOffSegment(mangled); - } - return res; - } - - - char[] nameOf_impl(char[] wrapped) { - char[] wrapper = digOutWrapper(wrapped)[1..$]; // skip the 'S' - char[] mangled = sliceOffSegment(wrapper); - - if (mangled.length > 2 && mangled[0..2] == `_D`) { - // D func - return demangleDFunc(mangled[2..$]); - } else { - return mangled; // C func - } - } - - - int match_param_(char[] str) { - if (str.length < `_param_0`.length) return 0; - - int numDigits = 0; - while (str[$-1-numDigits] >= '0' && str[$-1-numDigits] <= '9') { - ++numDigits; - } - - if (0 == numDigits) return 0; - - if (str.length >= `_param_`.length + numDigits && str[$-`_param_`.length-numDigits .. $-numDigits] == `_param_`) { - return `_param_`.length + numDigits; - } else { - return 0; - } - } - - - // sometimes the param lists have ugly _param_[0-9]+ names in them... - char[] tidyTupleStringof(char[] str) { - char[] res; - for (int i = 0; i < str.length; ++i) { - char c = str[i]; - - if (c == ')' || c == ',') { - if (auto len = match_param_(str[0..i])) { - // len is the length of the _param_[0-9]+ thing - int start = i-1-len; - str = str[0..start] ~ str[i..$]; - i -= len; - } - } - } - - return str; - } - - - template nameOfFunc(alias fn) { - static assert (is(typeof(fn) == function)); - const char[] nameOfFunc = nameOf_impl((Wrapper!(fn)).mangleof); - } - - - template signatureOfFunc(alias fn) { - static assert (is(typeof(fn) == function)); - const char[] signatureOfFunc = ReturnTypeOf!(fn).stringof ~ ' ' ~ nameOfFunc!(fn) ~ tidyTupleStringof(ParameterTupleOf!(fn).stringof); - } -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkClient.d --- a/tango/tango/net/cluster/NetworkClient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkClient; - -private import tango.time.Clock; - -private import tango.core.Exception; - -public import tango.net.cluster.model.ICluster; - -public import tango.net.cluster.NetworkMessage, - tango.net.cluster.NetworkRegistry; - -/******************************************************************************* - - The base class for all cluster clients (such as CacheInvalidator) - which acts simply as a container for the operating IChannel and - the configured ICluster. The former specifies something akin to - a 'topic' in the pub/sub world, while the latter provides access - to the underlying functional substrate (the QOS implementation). - -*******************************************************************************/ - -class NetworkClient -{ - private IChannel channel_; - private ICluster cluster_; - - public static NetworkMessage EmptyMessage; - - static this () - { - NetworkRegistry.shared.enroll (EmptyMessage = new NetworkMessage); - } - - /*********************************************************************** - - Construct this client with the specified channel and cluster. - The former specifies something akin to a 'topic', whilst the - latter provides access to the underlying functional substrate - (the QOS implementation). A good way to think about channels - is to map them directly to a class name. That is, since you - send and recieve classes on a channel, you might utilize the - class name as the channel name (this.classinfo.name). - - ***********************************************************************/ - - this (ICluster cluster, char[] channel) - { - assert (cluster); - assert (channel.length); - - cluster_ = cluster; - channel_ = cluster.createChannel (channel); - } - - /*********************************************************************** - - Return the channel we're tuned to - - ***********************************************************************/ - - IChannel channel () - { - return channel_; - } - - /*********************************************************************** - - Return the cluster specified during construction - - ***********************************************************************/ - - ICluster cluster () - { - return cluster_; - } - - /*********************************************************************** - - Return the current time - - ***********************************************************************/ - - Time time () - { - return Clock.now; - } - - /*********************************************************************** - - Return the Log instance - - ***********************************************************************/ - - Logger log () - { - return cluster_.log; - } - - /*********************************************************************** - - Create a channel with the specified name. A channel - represents something akin to a publush/subscribe topic, - or a radio station. These are used to segregate cluster - operations into a set of groups, where each group is - represented by a channel. Channel names are whatever you - want then to be; use of dot notation has proved useful - in the past. In fact, a good way to think about channels - is to map them directly to a class name. That is, since you - typically send and recieve classes on a channel, you might - utilize the class name as the channel (this.classinfo.name). - - ***********************************************************************/ - - IChannel createChannel (char[] name) - { - return cluster_.createChannel (name); - } -} - -/******************************************************************************* - - This exception is thrown by the cluster subsystem when an attempt - is made to place additional content into a full queue - -*******************************************************************************/ - -class ClusterFullException : ClusterException -{ - this (char[] msg) - { - super (msg); - } -} - -/******************************************************************************* - - This exception is thrown by the cluster subsystem when an attempt - is made to converse with a non-existant cluster, or one where all - cluster-servers have died. - -*******************************************************************************/ - -class ClusterEmptyException : ClusterException -{ - this (char[] msg) - { - super (msg); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkMessage.d --- a/tango/tango/net/cluster/NetworkMessage.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkMessage; - -private import tango.core.Exception; - -public import tango.net.cluster.model.ICluster; - -/******************************************************************************* - - A cluster-based messaging class. You should override both read() and - write() methods to transport non-transient content along with the msg. - - Note that when using read() and write(), invoke the superclass first - so that your Message can potentially be deserialized as a superclass - instance. That is, read() and write() might look something like this: - --- - void read (IReader input) - { - super.read (input); - input (myAttribute) (myOtherAttribute); - } - - void write (IWriter output) - { - super.write (output); - output (myAttribute) (myOtherAttribute2); - } - --- - -*******************************************************************************/ - -class NetworkMessage : IMessage -{ - private uint id_; - private long time_; // converted to Time as necessary - private char[] reply_; - - /*********************************************************************** - - Have to proxy this to satisfy interface requirements. It's - both annoying and fragile to be forced into this kind of - call-brokering, but then interfaces also don't expose the - methods from Object either. Interfaces in D are still a - bit too immature - - ***********************************************************************/ - - char[] toString () - { - return super.toString; - } - - /*********************************************************************** - - Set the optional reply-channel - - ***********************************************************************/ - - void reply (char[] channel) - { - reply_ = channel; - } - - /*********************************************************************** - - Return the optional reply-channel - - ***********************************************************************/ - - char[] reply () - { - return reply_; - } - - /*********************************************************************** - - Set the waterline of the cache-entries that should not be - touched by an invalidation. This is typically the time of - an entry in a local cache on the machine originating the - invalidation. Without the ability to guard against local - invalidation, the cache entry just added locally would be - removed along with others across the cluster. - - An alternative would be to invalidate before adding, though - that can become complicated by network race conditions. - - ***********************************************************************/ - - void time (Time time) - { - time_ = time.ticks; - } - - /*********************************************************************** - - Return our time value - - ***********************************************************************/ - - Time time () - { - return Time(time_); - } - - /*********************************************************************** - - ***********************************************************************/ - - void id (uint value) - { - id_ = value; - } - - /*********************************************************************** - - ***********************************************************************/ - - uint id () - { - return id_; - } - - /********************************************************************** - - Recover the reply-channel from the provided reader - - **********************************************************************/ - - void read (IReader input) - { - input (id_) (time_) (reply_); - } - - /********************************************************************** - - Emit our reply-channel to the provided writer - - **********************************************************************/ - - void write (IWriter output) - { - output (id_) (time_) (reply_); - } - - /*********************************************************************** - - Creates a shallow object copy. This is used internally - for setting up templates/hosts of registered objects and - should be overridden where deep(er) copying is desired. - Specifically: it makes a bit-copy only. Dynamic arrays or - pointer/reference oriented attributes are not duplicated. - - In general, there should be zero heap activity ocurring - during cluster requests. Thus, specific cluster services - utilize this method to construct message hosts, up-front, - helping to ensure the heap remains untouched during normal - operation. - - ***********************************************************************/ - - IMessage clone () - { - auto ci = this.classinfo; - auto end = ci.init.length; - auto start = Object.classinfo.init.length; - - auto clone = ci.create; - if (! clone) - throw new ClusterException ("cannot clone msg with no default ctor: "~ci.name); - - (cast(void*)clone)[start .. end] = (cast(void*)this)[start .. end]; - return cast(IMessage) clone; - } - - /********************************************************************** - - Interface issues mean that we'd have to reimplement all - the above methods again to support the ITask derivative. - Just hack this in here instead :[ - - **********************************************************************/ - - void execute () - { - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkQueue.d --- a/tango/tango/net/cluster/NetworkQueue.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkQueue; - -private import tango.net.cluster.NetworkClient; - -/******************************************************************************* - - Exposes a gateway to the cluster queues, which collect ICached - objects until they are removed. Because there is a finite limit - to the quantity of entries stored, the put() method may throw a - ClusterFullException if it cannot add a new entry. - -*******************************************************************************/ - -class NetworkQueue : NetworkClient, IConsumer -{ - private IChannel reply; - private IConsumer consumer; - - /*********************************************************************** - - Construct a NetworkMessage gateway on the provided QOS cluster - for the specified channel. Each subsequent queue operation - will take place over the given channel. - - You can listen for cluster replies by providing an optional - ChannelListener. Outgoing messages will be tagged appropriately - such that a consumer can respond using IEvent.reply - - ***********************************************************************/ - - this (ICluster cluster, char[] channel, ChannelListener listener = null) - { - super (cluster, channel); - - if (listener) - { - reply = cluster.createChannel (channel ~ ".reply"); - consumer = reply.createConsumer (listener); - } - } - - /*********************************************************************** - - Add an IMessage entry to the corresponding queue. This - will throw a ClusterFullException if there is no space - left in the clustered queue. - - ***********************************************************************/ - - void put (IMessage message) - { - assert (message); - - if (reply) - message.reply = reply.name; - - channel.putQueue (message); - } - - /*********************************************************************** - - Query the cluster for queued entries on our corresponding - channel. Returns, and removes, a matching entry from the - cluster. This is the synchronous (polling) approach; you - should use createConsumer() instead for asynchronous style - notification instead. - - ***********************************************************************/ - - IMessage get () - { - return channel.getQueue; - } - - /*********************************************************************** - - Cancel the listener. No more events will be dispatched to - the reply ChannelListener. - - ***********************************************************************/ - - void cancel() - { - if (consumer) - consumer.cancel; - consumer = null; - } - - /*********************************************************************** - - Create a listener for this channel. Listeners are invoked - when new content is placed into a corresponding queue. - - ***********************************************************************/ - - IConsumer createConsumer (ChannelListener listener) - { - return channel.createConsumer (listener); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkRegistry.d --- a/tango/tango/net/cluster/NetworkRegistry.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,170 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Apr 2004: Initial release - Dec 2006: Outback version - Apr 2007: Delegate revision - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkRegistry; - -private import tango.core.Exception; - -private import tango.net.cluster.model.IMessage; - - -/******************************************************************************* - - Bare framework for registering and creating serializable objects. - Such objects are intended to be transported across a local network - and re-instantiated at some destination node. - - Each IMessage exposes the means to write, or freeze, its content. An - IPickleFactory provides the means to create a new instance of itself - populated with thawed data. Frozen objects are uniquely identified - by a guid exposed via the interface. Responsibility of maintaining - uniqueness across said identifiers lies in the hands of the developer. - -*******************************************************************************/ - -class NetworkRegistry -{ - private IMessage[char[]] registry; - - public static NetworkRegistry shared; - - /*********************************************************************** - - - ***********************************************************************/ - - static this () - { - shared = new NetworkRegistry; - } - - /*********************************************************************** - - - ***********************************************************************/ - - this (typeof(registry) registry = null) - { - this.registry = registry; - } - - /*********************************************************************** - - Synchronized Factory lookup of the guid - - ***********************************************************************/ - - final synchronized IMessage lookup (char[] guid) - { - auto p = guid in registry; - if (p is null) - error ("Registry.thaw :: attempt to reify via unregistered guid: ", guid); - - return *p; - } - - /*********************************************************************** - - Add the provided Factory to the registry. Note that one - cannot change a registration once it is placed. Neither - can one remove registered item. This is done to avoid - issues when trying to synchronize servers across - a farm, which may still have live instances of "old" - objects waiting to be passed around the cluster. New - versions of an object should be given a distinct guid - from the prior version; appending an incremental number - may well be sufficient for your needs. - - ***********************************************************************/ - - final synchronized void enroll (IMessage target) - { - auto guid = target.toString; - - if (guid in registry) - error ("Registry.enroll :: attempt to re-register guid: ", guid); - - registry[guid] = target; - } - - /*********************************************************************** - - Serialize an Object. Objects are written in Network-order, - and are prefixed by the guid exposed via the IMessage - interface. This guid is used to identify the appropriate - factory when reconstructing the instance. - - ***********************************************************************/ - - final void freeze (IWriter output, IMessage target) - { - output (target.toString); - target.write (output); - } - - /*********************************************************************** - - Create a new instance of a registered class from the content - made available via the given reader. The factory is located - using the provided guid, which must match an enrolled factory. - - Note that only the factory lookup is synchronized, and not - the instance construction itself. This is intentional, and - limits how long the calling thread is stalled - - ***********************************************************************/ - - final IMessage thaw (IReader input, IMessage host = null) - { - char[] guid; - - input (guid); - - if (host is null) - host = lookup (guid); - else - if (guid != host.toString) - error ("Registry.thaw :: attempt to reify into a mismatched host: ", guid); - - host.read (input); - return host; - } - - /*********************************************************************** - - Duplicate the registry - - ***********************************************************************/ - - final NetworkRegistry dup () - { - typeof(registry) u; - - foreach (k, v; registry) - u[k] = v.clone; - return new NetworkRegistry (u); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static void error (char[] msg, char[] guid) - { - throw new RegistryException (msg ~ guid); - } -} - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/NetworkTask.d --- a/tango/tango/net/cluster/NetworkTask.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.NetworkTask; - -private import tango.net.cluster.NetworkClient; - -/******************************************************************************* - -*******************************************************************************/ - -class NetworkTask : NetworkClient -{ - /*********************************************************************** - - Construct a NetworkTask gateway on the provided QOS cluster - for the specified channel. Each subsequent task operation - will take place over the given channel. - - ***********************************************************************/ - - this (ICluster cluster, char[] channel) - { - super (cluster, channel); - } - - /*********************************************************************** - - Add an ITask entry to the corresponding queue. This - will throw a ClusterFullException if there is no space - left in the clustered queue. - - ***********************************************************************/ - - void execute (IMessage task) - { - channel.execute (task); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/QueuedCache.d --- a/tango/tango/net/cluster/QueuedCache.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,397 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: April 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.QueuedCache; - -private import tango.time.Time; - -private import tango.net.cluster.model.ICache; - -/****************************************************************************** - - QueuedCache extends the basic cache type by adding a limit to - the number of items contained at any given time. In addition, - QueuedCache sorts the cache entries such that those entries - frequently accessed are at the head of the queue, and those - least frequently accessed are at the tail. When the queue - becomes full, old entries are dropped from the tail and are - reused to house new cache entries. - - This is great for keeping commonly accessed items around, while - limiting the amount of memory used. Typically, the queue size - would be set in the hundreds (perhaps thousands). - - Note that key.init cannot be used as a valid key - -******************************************************************************/ - -class QueuedCache (K, V) : ICache!(K, V) -{ - private QueuedEntry*[K] map; - - // head and tail of queue - private QueuedEntry* head, - tail; - - /********************************************************************** - - Construct a cache with the specified maximum number of - entries. Additions to the cache beyond this number will - reuse the slot of the least-recently-referenced cache - entry. The concurrency level indicates approximately how - many threads will content for write access at one time. - - **********************************************************************/ - - this (uint capacity) - { - auto set = new QueuedEntry [capacity]; - - foreach (inout entry; set) - { - if (tail) - tail.next = &entry; - entry.prev = tail; - tail = &entry; - } - head = set.ptr; - } - - /********************************************************************** - - Get the cache entry identified by the given key - - **********************************************************************/ - - synchronized bool get (K key, inout V value) - { - // if we find 'key' then move it to the list head - auto e = lookup (key); - if (e) - { - value = reReference(e).value; - return true; - } - return false; - } - - /********************************************************************** - - Get the cache entry identified by the given key - - **********************************************************************/ - - synchronized V get (K key) - { - // if we find 'key' then move it to the list head - auto e = lookup (key); - if (e) - return reReference(e).value; - return V.init; - } - - /********************************************************************** - - Place an entry into the cache and associate it with the - provided key. Note that there can be only one entry for - any particular key. If two entries are added with the - same key, the second effectively overwrites the first. - - An optional time value allows for testing whether an - existing entry is newer than our provided one. Where - the provided time value is lesser, the put() operation - will be abandoned and false is returned. - - Returns true if the cache was updated. - - **********************************************************************/ - - synchronized bool put (K key, V value, Time time = Time.init) - { - assert (key !is key.init); - - auto e = lookup (key); - if (e is null) - map[key] = e = addEntry(); - else - if (time < e.time) - return false; - - reReference(e).set (key, value, time); - return true; - } - - /********************************************************************** - - Same as above, but being careful to avoid heap activity - where the provided key and value are potentially aliased - - **********************************************************************/ - - synchronized bool put (K peek, K delegate() key, V delegate() value, Time time = Time.init) - { - assert (peek !is peek.init); - - auto e = lookup (peek); - if (e is null) - map[peek = key()] = e = addEntry(); - else - if (time < e.time) - return false; - else - peek = e.key; - - reReference(e).set (peek, value(), time); - return true; - } - - /********************************************************************** - - Remove (and return) the cache entry associated with the - provided key. Returns null if there is no such entry. - - **********************************************************************/ - - synchronized V remove (K key, Time time = Time.max) - { - auto e = lookup (key); - if (e && (e.time < time)) - { - auto value = e.value; - - // don't actually kill the list entry -- just place - // it at the list 'tail' ready for subsequent reuse - deReference(e).set (K.init, V.init, Time.min); - - map.remove (key); - return value; - } - - return V.init; - } - - /********************************************************************** - - Iterate over elements - - Note that this needs to be synchronized, and can therefore - be very costly in terms of blocking other threads. Use with - caution - - **********************************************************************/ - - synchronized int opApply (int delegate(inout K key, inout V value) dg) - { - int ret; - foreach (k, v; map) - if ((ret = dg(k, v.value)) != 0) - break; - return ret; - } - - /********************************************************************** - - - **********************************************************************/ - - private final QueuedEntry* lookup (K key) - { - auto p = key in map; - return (p ? *p : null); - } - - /********************************************************************** - - Place a cache entry at the tail of the queue. This makes - it the least-recently referenced. - - **********************************************************************/ - - private final QueuedEntry* deReference (QueuedEntry* entry) - { - if (entry !is tail) - { - // adjust head - if (entry is head) - head = entry.next; - - // move to tail - entry.extract; - tail = entry.append (tail); - } - return entry; - } - - /********************************************************************** - - Move a cache entry to the head of the queue. This makes - it the most-recently referenced. - - **********************************************************************/ - - private final QueuedEntry* reReference (QueuedEntry* entry) - { - if (entry !is head) - { - // adjust tail - if (entry is tail) - tail = entry.prev; - - // move to head - entry.extract; - head = entry.prepend (head); - } - return entry; - } - - /********************************************************************** - - Add an entry into the queue. If the queue is full, the - least-recently-referenced entry is reused for the new - addition. - - **********************************************************************/ - - private final QueuedEntry* addEntry () - { - // steal from tail ... - auto entry = tail; - - // we're re-using an old QueuedEntry, so remove - // the old name from the hash-table first - if (entry.key !is entry.key.init) - map.remove (entry.key); - - // place at head of list - return reReference (entry); - } - - /********************************************************************** - - A doubly-linked list entry, used as a wrapper for queued - cache entries. - - **********************************************************************/ - - private static struct QueuedEntry - { - K key; - QueuedEntry* prev, - next; - Time time; - V value; - - /************************************************************** - - Set this entry with the given arguments. - - **************************************************************/ - - QueuedEntry* set (K key, V value, Time time) - { - this.value = value; - this.time = time; - this.key = key; - return this; - } - - /************************************************************** - - Insert this entry into the linked-list just in front - of the given entry. - - **************************************************************/ - - QueuedEntry* prepend (QueuedEntry* before) - { - assert (before); - - prev = before.prev; - - // patch 'prev' to point at me - if (prev) - prev.next = this; - - //patch 'before' to point at me - next = before; - return before.prev = this; - } - - /************************************************************** - - Add this entry into the linked-list just after the - given entry. - - **************************************************************/ - - QueuedEntry* append (QueuedEntry* after) - { - assert (after); - - next = after.next; - - // patch 'next' to point at me - if (next) - next.prev = this; - - //patch 'after' to point at me - prev = after; - return after.next = this; - } - - /************************************************************** - - Remove this entry from the linked-list. The previous - and next entries are patched together appropriately. - - **************************************************************/ - - QueuedEntry* extract () - { - // make 'prev' and 'next' entries see each other - if (prev) - prev.next = next; - - if (next) - next.prev = prev; - - // Murphy's law - next = prev = null; - return this; - } - } -} - - - -version (QueuedCache) -{ - import tango.io.Stdout; - - void main() - { - new QueuedCache!(int, char[])(100); - auto map = new QueuedCache!(char[], int)(2); - - map.put ("one", 1); - map.put ("two", 2); - int v; - map.get ("one", v); - map.put ("three", 3); - - foreach (k, v; map) - Stdout.formatln ("{}:{}", k, v); - - foreach (k, v; map.map) - Stdout.formatln ("{}:{}", k, v.value); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/model/ICache.d --- a/tango/tango/net/cluster/model/ICache.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: April 2004: Initial release - -*******************************************************************************/ - -module tango.net.cluster.model.ICache; - -private import tango.time.Time; - -/****************************************************************************** - -******************************************************************************/ - -interface ICache (K, V) -{ - /********************************************************************** - - Get the cache entry identified by the given key - - **********************************************************************/ - - V get (K key); - - /********************************************************************** - - Place an entry into the cache and associate it with the - provided key. Note that there can be only one entry for - any particular key. If two keys entries are added with - the same key, the second effectively overwrites the first. - - Returns what it was given - - **********************************************************************/ - - bool put (K key, V entry, Time time = Time.init); - - /********************************************************************** - - Remove (and return) the cache entry associated with the - provided key. The entry will not be removed if it's time - attribute is newer than the (optional) specified 'timelimit'. - - Returns null if there is no such entry. - - **********************************************************************/ - - V remove (K key, Time time = Time.max); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/model/IChannel.d --- a/tango/tango/net/cluster/model/IChannel.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.model.IChannel; - -private import tango.util.log.Logger; - -private import tango.net.cluster.model.IMessage, - tango.net.cluster.model.IConsumer; - -/******************************************************************************* - - A channel represents something akin to a publish/subscribe topic, - or a radio station. These are used to segregate cluster operations - into a set of groups, where each group is represented by a channel. - Channel names are whatever you want then to be: use of dot notation - has proved useful in the past. See Client.createChannel - -*******************************************************************************/ - -interface IChannel -{ - /*********************************************************************** - - Return the Logger associated with this cluster - - ***********************************************************************/ - - Logger log (); - - /*********************************************************************** - - Return the name of this channel. This is the name provided - when the channel was constructed. - - ***********************************************************************/ - - char[] name (); - - /*********************************************************************** - - Create a message listener on the given - channel. The ChannelListener should be called whenever - a corresponding cluster event happens. Note that the - notification is expected to be on a seperate thread. - - ***********************************************************************/ - - IConsumer createConsumer (ChannelListener notify); - - /*********************************************************************** - - Create a bulletin listener on the given - channel. The ChannelListener should be called whenever - a corresponding cluster event happens. Note that the - notification is expected to be on a seperate thread. - - ***********************************************************************/ - - IConsumer createBulletinConsumer (ChannelListener notify); - - /*********************************************************************** - - Place a cache entry into the cluster. If there is already - a matching entry, it is replaced. - - ***********************************************************************/ - - bool putCache (char[] key, IMessage message); - - /*********************************************************************** - - Return a cluster cache entry, and optionally remove it - from the cluster. - - ***********************************************************************/ - - IMessage getCache (char[] key, bool remove, IMessage host=null); - - /*********************************************************************** - - Ask the cache host to load an entry, via the provided - message. Note that the message itself should contain all - pertinent information to load the entry (such as whatever - key values are required). - - The host executes the message in a manner akin to RPC, thus - the message also needs to be registered with the host server - - ***********************************************************************/ - - bool loadCache (char[] key, IMessage message); - - /*********************************************************************** - - Place a new entry into the cluster queue. This may throw - a ClusterFullException when there is no space left within - the cluster queues. - - ***********************************************************************/ - - IMessage putQueue (IMessage message); - - /*********************************************************************** - - Query the cluster for queued entries on our corresponding - channel. Removes, and returns, the first matching entry - from the cluster. - - ***********************************************************************/ - - IMessage getQueue (IMessage host = null); - - /*********************************************************************** - - Scatter a message to all registered listeners. This is - akin to multicast. - - ***********************************************************************/ - - void broadcast (IMessage message = null); - - /*********************************************************************** - - Execute the provided message on the cluster, and return the - results internally - - ***********************************************************************/ - - bool execute (IMessage message); -} - - -/******************************************************************************* - - An IEvent is passed as the argument to each ChannelListener callback - -*******************************************************************************/ - -interface IEvent -{ - /*********************************************************************** - - Return the channel used to initiate the listener - - ***********************************************************************/ - - IChannel channel (); - - /*********************************************************************** - - Return one or more messages associated with this event, or - null if there is nothing available - - ***********************************************************************/ - - IMessage get (IMessage host = null); - - /*********************************************************************** - - Send a message back to the producer. This should support all - the various event styles. - - ***********************************************************************/ - - void reply (IChannel channel, IMessage message); - - /*********************************************************************** - - Return an appropriate reply channel for the given message, - or return null if no reply is expected - - ***********************************************************************/ - - IChannel replyChannel (IMessage message); - - /*********************************************************************** - - Return the Logger associated with this cluster - - ***********************************************************************/ - - Logger log (); -} - -/******************************************************************************* - - Declares the contract for listeners within the cluster package. - When creating a listener, you provide a callback delegate matching - this signature. The delegate is invoked, on a seperate thread, each - time a relevant event occurs. - -*******************************************************************************/ - -alias void delegate (IEvent event) ChannelListener; - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/model/ICluster.d --- a/tango/tango/net/cluster/model/ICluster.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.model.ICluster; - -public import tango.util.log.Logger; - -public import tango.net.cluster.model.IChannel, - tango.net.cluster.model.IMessage, - tango.net.cluster.model.IConsumer; - -/******************************************************************************* - - The contract exposed by each QOS implementation. This is the heart - of the cluster package, designed with multiple implementations in - mind. It should be reasonably straightforward to construct specific - implementations upon a database, pub/sub system, or other substrates. - -*******************************************************************************/ - -interface ICluster -{ - /*********************************************************************** - - Create a channel instance. Every cluster operation has - a channel provided as an argument - - ***********************************************************************/ - - IChannel createChannel (char[] channel); - - /*********************************************************************** - - Return the Logger associated with this cluster - - ***********************************************************************/ - - Logger log (); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/model/IConsumer.d --- a/tango/tango/net/cluster/model/IConsumer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.model.IConsumer; - -/******************************************************************************* - - Contract exposed by each cluster listener. This is what you are - handed back upon successful construction of a listener. - -*******************************************************************************/ - -interface IConsumer -{ - /*********************************************************************** - - Cancel the listener. No more events will be dispatched to - the associated ChannelListener. - - ***********************************************************************/ - - void cancel(); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/model/IMessage.d --- a/tango/tango/net/cluster/model/IMessage.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.model.IMessage; - -public import tango.time.Time; - -public import tango.io.protocol.model.IReader, - tango.io.protocol.model.IWriter; - -/******************************************************************************* - -*******************************************************************************/ - -interface IMessage : IReadable, IWritable -{ - /*********************************************************************** - - ***********************************************************************/ - - char[] toString (); - - /*********************************************************************** - - ***********************************************************************/ - - IMessage clone (); - - /*********************************************************************** - - ***********************************************************************/ - - void reply (char[] channel); - - /*********************************************************************** - - ***********************************************************************/ - - char[] reply (); - - /*********************************************************************** - - ***********************************************************************/ - - void time (Time value); - - /*********************************************************************** - - ***********************************************************************/ - - Time time (); - - /*********************************************************************** - - ***********************************************************************/ - - void id (uint value); - - /*********************************************************************** - - ***********************************************************************/ - - uint id (); - - /*********************************************************************** - - ***********************************************************************/ - - void execute (); -} - - -/****************************************************************************** - - Manages the lifespan of an ICache entry. These loaders effectively - isolate the cache from whence the content is derived. It's a good - idea to employ this abstraction where appropriate, since it allows - the cache source to change with minimal (if any) impact on client - code. - -******************************************************************************/ - -interface IMessageLoader -{ - /********************************************************************** - - Load a cache entry from wherever the content is persisted. - The 'time' argument represents that belonging to a stale - entry, which can be used to optimize the loader operation - (no need to perform a full load where there's already a - newer version in an L2 cache). This 'time' value will be - long.min where was no such stale entry. - - **********************************************************************/ - - IMessage load (); -} - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/CacheServer.d --- a/tango/tango/net/cluster/tina/CacheServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.CacheServer; - -private import tango.net.cluster.tina.RollCall, - tango.net.cluster.tina.CacheThread, - tango.net.cluster.tina.ClusterCache, - tango.net.cluster.tina.ClusterServer; - -/****************************************************************************** - - Extends the ClusterServer to glue cluster-cache support together - -******************************************************************************/ - -class CacheServer : ClusterServer -{ - private ClusterCache cache; - - /********************************************************************** - - Construct this server with the requisite attributes. The - 'bind' address is the local address we'll be listening on - - **********************************************************************/ - - this (InternetAddress bind, Logger logger, uint size) - { - super ("cache", bind, logger); - - // create a cache instance - cache = new ClusterCache (cluster, size); - } - - /********************************************************************** - - Start the server - - **********************************************************************/ - - void start (bool reuse=false) - { - super.start (new RollCall(RollCall.Cache), reuse); - } - - /********************************************************************** - - Factory method for servicing a request. We just create - a new CacheThread to handle requests from the client. - The thread does not exit until the socket connection is - broken by the client, or some other exception occurs. - - **********************************************************************/ - - override void service (IConduit conduit) - { - (new CacheThread (this, conduit, cluster, cache)).execute; - } -} - - - -version (CacheServer) -{ - import tango.io.Console; - - import tango.net.cluster.tina.CmdParser; - - void main (char[][] args) - { - auto arg = new CmdParser ("cache.server"); - - // default number of cache entries (per channel) - arg.size = 1024; - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: cacheserver -port=number -size=cachesize -log[=trace, info, warn, error, fatal, none]").newline; - else - (new CacheServer(new InternetAddress(arg.port), arg.log, arg.size)).start; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/CacheThread.d --- a/tango/tango/net/cluster/tina/CacheThread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.CacheThread; - -private import tango.core.Exception; - -private import tango.net.cluster.NetworkRegistry; - -private import tango.net.cluster.tina.ClusterCache, - tango.net.cluster.tina.ClusterTypes, - tango.net.cluster.tina.ClusterThread; - -/****************************************************************************** - - Thread for handling cache requests - -******************************************************************************/ - -class CacheThread : ClusterThread -{ - private ClusterCache cache; - private NetworkRegistry registry; - - /********************************************************************** - - Note that the conduit stays open until the client kills it - - **********************************************************************/ - - this (AbstractServer server, IConduit conduit, Cluster cluster, ClusterCache cache) - { - super (server, conduit, cluster); - - // clone the registry so that we have our own set of - // message templates to act as hosts. This eliminates - // allocating hosts on the fly for load() requests - registry = NetworkRegistry.shared.dup; - - // retain the cache instance - this.cache = cache; - } - - /********************************************************************** - - process client requests - - **********************************************************************/ - - void dispatch () - { - ProtocolWriter.Command cmd; - long time; - char[] channel; - char[] element; - - // wait for request to arrive - auto content = reader.getPacket (cmd, channel, element, time); - - switch (cmd) - { - case ProtocolWriter.Command.Add: - logger.trace (sprint ("{} add cache entry '{}' on channel '{}'", client, element, channel)); - - // return the content if we can't put it in the cache - if (cache.put (channel, element, content, Time(time))) - writer.success ("success"); - else - writer.reply (content); - break; - - case ProtocolWriter.Command.Copy: - logger.trace (sprint ("{} copy cache entry '{}' on channel '{}'", client, element, channel)); - - writer.reply (cache.get (channel, element)); - break; - - case ProtocolWriter.Command.Remove: - logger.trace (sprint ("{} remove cache entry '{}' on channel '{}'", client, element, channel)); - - writer.reply (cache.extract (channel, element)); - break; - - case ProtocolWriter.Command.Load: - logger.trace (sprint ("{} loading cache entry '{}' on channel '{}'", client, element, channel)); - - load (cmd, channel, element); - break; - - default: - throw new IllegalArgumentException ("invalid command"); - } - } - - - /********************************************************************** - - Manages the loading of cache entries remotely, upon - the host that actually contains the cache entry. - - The benefit of this approach lies in the ability to - 'gate' access to specific resources across the entire - network. That is; where particular cache entries are - prohibitively costly to construct, it is worthwhile - ensuring that cost is reduced to a bare minimum. These - remote loaders allow the cache host to block multiple - network clients until there's a new entry available. - Without this mechanism, it would become possible for - multiple network clients to request the same entry - simultaneously, therefore increasing the overall cost. - The end result is similar to that of a distributed - transaction. - - **********************************************************************/ - - void load (ProtocolWriter.Command cmd, char[] channel, char[] element) - { - // convert to a message instance. Note that we use a private - // set of msg templates, so we don't collide with other threads - auto msg = reader.thaw (registry); - - // check to see if it has already been updated or is - // currently locked; go home if so, otherwise lock it - if (cache.lock (channel, element, msg.time)) - try { - // ensure this is the right object - auto loader = cast(IMessageLoader) msg; - if (loader) - { - // acknowledge the request. Do NOT wait for completion! - writer.success.flush; - - // get the new cache entry. The 'time' attribute should - // be set appropriately before return - if (auto e = loader.load) - { - long time; - // serialize new entry and stuff it into cache - writer.put (writer.Command.OK, channel, element, e); - cache.put (channel, element, reader.getPacket (cmd, channel, element, time), e.time); - } - } - else - writer.exception (sprint ("invalid remote cache-loader '{}'", msg.toString)).flush; - - } finally - // ensure we unlock this one! - cache.unlock (channel, element); - else - writer.success.flush; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/Cluster.d --- a/tango/tango/net/cluster/tina/Cluster.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1705 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.Cluster; - -private import tango.math.Random; - -private import tango.core.Thread, - tango.core.Runtime, - tango.core.Exception; - -private import tango.util.log.Log, - tango.util.log.Logger; - -private import tango.time.Clock; - -private import tango.io.Buffer, - tango.io.GrowBuffer; - -private import tango.io.model.IConduit; - -private import tango.net.Socket, - tango.net.SocketConduit, - tango.net.SocketListener, - tango.net.InternetAddress, - tango.net.MulticastConduit; - -private import tango.net.cluster.NetworkClient; - -public import tango.net.cluster.model.ICluster; - -private import tango.net.cluster.tina.RollCall, - tango.net.cluster.tina.ProtocolReader, - tango.net.cluster.tina.ProtocolWriter; - -private import Integer = tango.text.convert.Integer; - -/******************************************************************************* - - QOS implementation for sockets. All cluster-client activity is - gated through here by the higher level classes; NetworkQueue & - NetworkCache for example. You gain access to the cluster by - creating an instance of the QOS (quality of service) you desire - and either mapping client classes onto it, or usign it directly. - For example: - --- - import tango.net.cluster.tina.Cluster; - - auto cluster = new Cluster; - cluster.join; - - auto channel = cluster.createChannel (...); - channel.putQueue (...); - channel.getQueue (); - --- - - Please see the cluster clients for additional details. Currently - these include CacheInvalidator, CacheInvalidatee, NetworkMessage, - NetworkTask, NetworkQueue, NetworkCache, NetworkCombo, plus the - Client base-class. - -*******************************************************************************/ - -class Cluster : Broadcaster, ICluster -{ - private FlexNodeSet task, - queue; - private FixedNodeSet cache; - private Logger logger; - - /*********************************************************************** - - Create a cluster instance with a default logger and Nagle - caching disabled - - ***********************************************************************/ - - this () - { - this (Log.getLogger ("cluster.generic"), true); - } - - /*********************************************************************** - - Create a cluster instance with the provided logger. Option - noDelay controls the settting of the Nagle algorithm on an - active connection to a server, which should be disabled by - default (noDelay == true) - - ***********************************************************************/ - - this (Logger log, bool noDelay = true) - { - assert (log); - logger = log; - - task = new FlexNodeSet (log, noDelay); - queue = new FlexNodeSet (log, noDelay); - cache = new FixedNodeSet (log, noDelay); - } - - /*********************************************************************** - - Join the cluster as a client, discovering servers. Client - applications should invoke this before making requests so - that there are some servers to address. - - If cache facilities will be used, then the join(cacheHosts) - variation should be used instead - - ***********************************************************************/ - - final Cluster join () - { - // listen for cluster servers - auto channel = createChannel ("cluster.server.advertise"); - channel.createBulletinConsumer (¬ify); - - // ask who's currently running - channel.broadcast (new RollCall); - logger.trace ("discovering cluster nodes"); - - // wait for enabled servers to respond ... - Thread.sleep (0.250); - return this; - } - - /*********************************************************************** - - Join the cluster as a client, discovering servers. Client - applications should invoke this before making requests so - that there are some servers to address. - - If cache facilities will be used, use this method to set - the group of valid cache hosts. Each cache host should be - described as an array of machine-name and port pairs e.g. - --- - ["lucy:1234", "daisy:3343", "daisy:3344"] - --- - - This sets up a fixed set of cache hosts, which should be - identical for all cache clients. Cache hosts not included - in this list will be ignored when they come online. - - ***********************************************************************/ - - final Cluster join (char[][] cacheHosts) - { - foreach (addr; cacheHosts) - cache.addNode (new Node (log, addr, "cache")); - return join; - } - - /*********************************************************************** - - Return the logger instance provided during construction. - - ***********************************************************************/ - - final Logger log () - { - return logger; - } - - /*********************************************************************** - - Create a channel instance. Our channel implementation - includes a number of cached IO helpers (ProtocolWriter - and so on) which simplifies and speeds up execution. - - ***********************************************************************/ - - final IChannel createChannel (char[] channel) - { - return new Channel (this, channel); - } - - /*********************************************************************** - - ChannelListener method for listening to RollCall responses. - These are sent out by cluster servers both when they get a - RollCall request, and when they heartbeat. - - ***********************************************************************/ - - private void notify (IEvent event) - { - scope rollcall = new RollCall; - event.get (rollcall); - - switch (rollcall.type) - { - default: - break; - - case RollCall.Task: - task.enable (rollcall.addr, "task"); - break; - - case RollCall.Cache: - cache.enable (rollcall.addr); - break; - - case RollCall.Queue: - queue.enable (rollcall.addr, "queue"); - break; - } - } -} - - -/******************************************************************************* - - Basic multicast support across the cluster. Multicast is used - for broadcasting messages to all nodes in the cluster. We use - it for cache-invalidation, heartbeat, rollcall and notification - of queue activity - -*******************************************************************************/ - -private class Broadcaster -{ - private static InternetAddress[char[]] groups; - private Buffer mBuffer; - private ProtocolWriter mWriter; - private MulticastConduit mSocket; - - private int groupPort = 3333; - private int groupPrefix = 225; - - /*********************************************************************** - - Setup a Cluster instance. Currently the buffer & writer - are shared for all bulletin serialization; this should - probably change at some point such that we can support - multiple threads broadcasting concurrently to different - output ports. - - ***********************************************************************/ - - this () - { - mBuffer = new Buffer (1024 * 4); - mSocket = new MulticastConduit; - mWriter = new ProtocolWriter (mBuffer); - } - - /*********************************************************************** - - Setup the multicast options. Port is used as the sole - address port for multicast usage, prefix is prepended - to each fabricated multicast address (should be a valid - class-D prefix), and ttl is the number of hops - - ***********************************************************************/ - - final MulticastConduit conduit () - { - return mSocket; - } - - /*********************************************************************** - - Setup the multicast options. Port is used as the sole - address port for multicast usage & prefix is prepended - to each fabricated multicast address (should be a valid - class-D prefix: 225 through 239 inclusive) - - ***********************************************************************/ - - final void multicast (int port, int prefix=225) - { - groupPort = port; - groupPrefix = prefix; - } - - /*********************************************************************** - - Broadcast a message on the specified channel. This uses - IP/Multicast to scatter the payload to all registered - listeners (on the same multicast group). Note that the - maximum message size is limited to that of an Ethernet - data frame, minus the IP/UDP header size (1472 bytes). - - Also note that we are synchronized to avoid contention - on the otherwise shared output buffer. - - ***********************************************************************/ - - final synchronized void broadcast (char[] channel, IMessage message=null) - { - // clear buffer and serialize content - mWriter.put (ProtocolWriter.Command.OK, channel, null, message); - - // Ethernet data-frame size minus the 28 byte UDP/IP header: - if (mBuffer.position > 1472) - throw new ClusterException ("message is too large to broadcast"); - - // send it to the appropriate multicast group - mSocket.write (mBuffer.slice, getGroup (channel)); - } - - /*********************************************************************** - - Return an internet address representing the multicast - group for the specified channel. We use three of the - four address segments to represent the channel itself - (via a hash on the channel name), and set the primary - segment to be that of the broadcast prefix (above). - - ***********************************************************************/ - - final synchronized InternetAddress getGroup (char[] channel) - { - auto p = channel in groups; - if (p) - return *p; - - // construct a group address from the prefix & channel-hash, - // where the hash is folded down to 24 bits - uint hash = jhash (channel.ptr, channel.length); - hash = (hash >> 24) ^ (hash & 0x00ffffff); - - auto address = Integer.toString (groupPrefix) ~ "." ~ - Integer.toString ((hash >> 16) & 0xff) ~ "." ~ - Integer.toString ((hash >> 8) & 0xff) ~ "." ~ - Integer.toString (hash & 0xff); - - // insert InternetAddress into hashmap - auto group = new InternetAddress (address, groupPort); - groups [channel] = group; - return group; - } -} - - -/******************************************************************************* - - A channel represents something akin to a publish/subscribe topic, - or a radio station. These are used to segregate cluster operations - into a set of groups, where each group is represented by a channel. - Channel names are whatever you want then to be: use of dot notation - has proved useful in the past. - - Channel maintain internal state in order to avoid heap activity. So - they should not be shared across threads without appropriate synchs - in place. One remedy is create another channel instance - -*******************************************************************************/ - -private class Channel : IChannel -{ - private char[] name_; - private Buffer buffer; - private ProtocolReader reader; - private ProtocolWriter writer; - private Cluster cluster_; - - /*********************************************************************** - - Construct a channel with the specified name. We cache - a number of session-related constructs here also, in - order to eliminate runtime overhead - - ***********************************************************************/ - - this (Cluster cluster, char[] name) - in { - assert (cluster); - assert (name.length); - } - body - { - name_ = name; - cluster_ = cluster; - - // this buffer will grow as required to house larger messages - buffer = new GrowBuffer (1024 * 2); - writer = new ProtocolWriter (buffer); - - // make the reader slice directly from the buffer content - reader = new ProtocolReader (buffer); - } - - /*********************************************************************** - - Return the name of this channel. This is the name provided - when the channel was constructed. - - ***********************************************************************/ - - final char[] name () - { - return name_; - } - - /*********************************************************************** - - Return the assigned cluster - - ***********************************************************************/ - - final Cluster cluster () - { - return cluster_; - } - - /*********************************************************************** - - Return the assigned logger - - ***********************************************************************/ - - final Logger log () - { - return cluster_.log; - } - - /*********************************************************************** - - Output this channel via the provided IWriter - - ***********************************************************************/ - - final void write (IWriter writer) - { - writer.put (name_); - } - - /*********************************************************************** - - Input this channel via the provided IReader - - ***********************************************************************/ - - final void read (IReader reader) - { - reader.get (name_); - } - - /*********************************************************************** - - deserialize a message into a provided host, or via - the registered instance of the incoming message - - ***********************************************************************/ - - final IMessage thaw (IMessage host = null) - { - return reader.thaw (host); - } - - /*********************************************************************** - - Create a listener of the specified type. Listeners are - run within their own thread, since they spend the vast - majority of their time blocked on a Socket read. Would - be good to support multiplexed reading instead, such - that a thread pool could be applied instead. - - ***********************************************************************/ - - final IConsumer createConsumer (ChannelListener notify) - { - cluster_.log.trace ("creating message consumer for '" ~ name_ ~ "'"); - return new MessageConsumer (this, notify); - } - - /*********************************************************************** - - Create a listener of the specified type. Listeners are - run within their own thread, since they spend the vast - majority of their time blocked on a Socket read. Would - be good to support multiplexed reading instead, such - that a thread pool could be applied instead. - - ***********************************************************************/ - - final IConsumer createBulletinConsumer (ChannelListener notify) - { - cluster_.log.trace ("creating bulletin consumer for '" ~ name_ ~ "'"); - return new BulletinConsumer (this, notify); - } - - /*********************************************************************** - - Return a entry from the network cache, and optionally - remove it. This is a synchronous operation as opposed - to the asynchronous nature of an invalidate broadcast. - - ***********************************************************************/ - - final IMessage getCache (char[] key, bool remove, IMessage host = null) - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (remove ? ProtocolWriter.Command.Remove : - ProtocolWriter.Command.Copy, name_, key).flush; - } - - if (cluster_.cache.request (&send, reader, key)) - return reader.thaw (host); - return null; - } - - /*********************************************************************** - - Place an entry into the network cache, replacing the - entry with the identical key. Where message.time is - set, it will be used to test for newer cache entries - than the one being sent i.e. if someone else placed - a newer entry into the cache, that one will remain. - - Note that this may cause the oldest entry in the cache - to be displaced if the cache is already full. - - ***********************************************************************/ - - final bool putCache (char[] key, IMessage message) - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (ProtocolWriter.Command.Add, name_, key, message).flush; - } - - // return false if the cache server said there's - // already something newer - if (cluster_.cache.request (&send, reader, key)) - return false; - return true; - } - - /*********************************************************************** - - Load a network cache entry remotely. This sends the given - IMessage over a network to the cache host, where it will - be executed locally. The benefit of doing so it that the - host may deny access to the cache entry for the duration - of the load operation. This, in turn, provides a mechanism - for gating/synchronizing multiple network clients over a - given cache entry; quite handy for those entries that are - relatively expensive to construct or access. - - ***********************************************************************/ - - final bool loadCache (char[] key, IMessage message) - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (ProtocolWriter.Command.Load, name_, key, message).flush; - } - - return cluster_.cache.request (&send, reader, key); - } - - /*********************************************************************** - - Query the cluster for queued entries on the corresponding - channel. Returns, and removes, the first matching entry - from the cluster. Note that this sweeps the cluster for - matching entries, and is synchronous in nature. The more - common approach is to setup a queue listener, which will - grab and dispatch queue entries asynchronously. - - ***********************************************************************/ - - final IMessage getQueue (IMessage host = null) - { - if (scanQueue) - return reader.thaw (host); - return null; - } - - /*********************************************************************** - - Query the cluster for queued entries on the corresponding - channel. Returns, and removes, the first matching entry - from the cluster. Note that this sweeps the cluster for - matching entries, and is synchronous in nature. The more - common approach is to setup a queue listener, which will - grab and dispatch queue entries asynchronously. - - ***********************************************************************/ - - private bool scanQueue () - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (ProtocolWriter.Command.RemoveQueue, name_).flush; - } - - bool scan (Node node) - { - bool message; - node.request (&send, reader, message); - return message; - } - - // make a pass over each Node, looking for channel entries - return cluster_.queue.scan (&scan); - } - - /*********************************************************************** - - Add an entry to the specified network queue. May throw a - QueueFullException if there's no room available. - - ***********************************************************************/ - - final IMessage putQueue (IMessage message) - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (ProtocolWriter.Command.AddQueue, name_, null, message).flush; - } - - cluster_.queue.request (&send, reader); - return message; - } - - /*********************************************************************** - - Send a remote call request to a server, and place the result - back into the provided message - - ***********************************************************************/ - - final bool execute (IMessage message) - { - void send (IConduit conduit) - { - buffer.setConduit (conduit); - writer.put (ProtocolWriter.Command.Call, name_, null, message).flush; - } - - if (cluster_.task.request (&send, reader)) - { - // place result back into the provided message - reader.thaw (message); - return true; - } - return false; - } - - /*********************************************************************** - - Broadcast a message on the specified channel. This uses - IP/Multicast to scatter the message to all registered - listeners (on the same multicast group). Note that the - maximum message size is limited to that of an Ethernet - data frame, minus the IP/UDP header size (1472 bytes). - - ***********************************************************************/ - - final void broadcast (IMessage message = null) - { - cluster_.broadcast (name_, message); - } -} - - -/******************************************************************************* - - A listener for multicast channel traffic. These are currently used - for cache coherency, queue publishing, and node discovery activity; - though could be used for direct messaging also. - - Be careful when using the retained channel, since it is shared with - the calling thread. Thus a race condition could arise between the - client and this thread, were both to use the channel for transfers - at the same instant. Note that MessageConsumer makes a copy of the - channel for this purpose - -*******************************************************************************/ - -private class BulletinConsumer : SocketListener, IConsumer, IEvent -{ - private bool hasMore; // incoming message? - private Buffer buffer; // input buffer - private ProtocolReader reader; // input decoder - private Channel channel_; // associated channel - private Cluster cluster; // associated cluster - private MulticastConduit consumer; // broadcast listener - private ChannelListener listener; // user-level callback - - /*********************************************************************** - - Construct a multicast consumer for the specified event. The - event handler will be invoked whenever a message arrives for - the associated channel. - - ***********************************************************************/ - - this (Channel channel, ChannelListener listener) - { - this.channel_ = channel; - this.listener = listener; - this.cluster = channel.cluster; - - // buffer doesn't need to be larger than Ethernet data-frame - buffer = new Buffer (1500); - - // make the reader slice directly from the buffer content - reader = new ProtocolReader (buffer); - - // configure a listener socket - consumer = new MulticastConduit (cluster.getGroup (channel_.name), true); - consumer.join; - - super (consumer, buffer); - - // fire up this listener - super.execute; - } - - /*********************************************************************** - - Notification callback invoked when we receive a multicast - packet. Note that we check the packet channel-name against - the one we're consuming, to check for cases where the group - address had a hash collision. - - ***********************************************************************/ - - override void notify (IBuffer buffer) - { - ProtocolWriter.Command cmd; - char[] channel; - char[] element; - - // read the incoming header, along with the object guid - // where available - hasMore = reader.getHeader (cmd, channel, element); - - // check it's really for us first (might be a hash collision) - if (channel == this.channel_.name) - invoke (this); - } - - /*********************************************************************** - - ***********************************************************************/ - - IMessage get (IMessage host = null) - { - if (hasMore) - return reader.thaw (host); - - throw new ClusterException ("attempting to thaw a non-existant message"); - } - - /*********************************************************************** - - Return the assigned logger - - ***********************************************************************/ - - final Logger log () - { - return cluster.log; - } - - /*********************************************************************** - - Handle error conditions from the listener thread. - - ***********************************************************************/ - - override void exception (char [] msg) - { - cluster.log.error ("BulletinConsumer: "~msg); - } - - /*********************************************************************** - - Overridable mean of notifying the client code. - - ***********************************************************************/ - - protected void invoke (IEvent event) - { - listener (event); - } - - /*********************************************************************** - - Return the cluster instance we're associated with. - - ***********************************************************************/ - - final Channel channel () - { - return channel_; - } - - /*********************************************************************** - - Temporarily halt listening. This can be used to ignore - multicast messages while, for example, the consumer is - busy doing other things. - - ***********************************************************************/ - - final void pauseGroup () - { - consumer.leave; - } - - /*********************************************************************** - - Resume listening, post-pause. - - ***********************************************************************/ - - final void resumeGroup () - { - consumer.join; - } - - /*********************************************************************** - - Cancel this consumer. The listener is effectively disabled - from this point forward. The listener thread does not halt - at this point, but waits until the socket-read returns. - Note that the D Interface implementation requires us to - "reimplement and dispatch" trivial things like this ~ it's - a pain in the neck to maintain. - - ***********************************************************************/ - - final void cancel () - { - super.cancel; - } - - /*********************************************************************** - - Send a message back to the producer - - ***********************************************************************/ - - void reply (IChannel channel, IMessage message) - { - assert (channel); - assert (message); - - channel.broadcast (message); - } - - - /*********************************************************************** - - Return an appropriate reply channel for the given message, - or return null if no reply is expected - - ***********************************************************************/ - - IChannel replyChannel (IMessage message) - { - if (message.reply.length) - return cluster.createChannel (message.reply); - return null; - } -} - - -/******************************************************************************* - - A listener for queue events. These events are produced by the - queue host on a periodic bases when it has available entries. - We listen for them (rather than constantly scanning) and then - begin a sweep to process as many as we can. Note that we will - be in competition with other nodes to process these entries. - - Also note that we create a copy of the channel in use, so that - race-conditions with the requesting client are avoided. - -*******************************************************************************/ - -private class MessageConsumer : BulletinConsumer -{ - /*********************************************************************** - - Construct a multicast consumer for the specified event - - ***********************************************************************/ - - this (Channel channel, ChannelListener listener) - { - super (channel, listener); - - // create private channel instance to use in our thread - this.channel_ = new Channel (channel.cluster, channel.name); - } - - /*********************************************************************** - - Handle error conditions from the listener thread. - - ***********************************************************************/ - - override void exception (char [] msg) - { - cluster.log.error ("MessageConsumer: "~msg); - } - - /*********************************************************************** - - Overrides the default processing to sweep the cluster for - queued entries. Each server node is queried until one is - found that contains a message. Note that it is possible - to set things up where we are told exactly which node to - go to; however given that we won't be listening whilst - scanning, and that there's likely to be a group of new - entries in the cluster, it's just as effective to scan. - This will be far from ideal for all environments, so we - should make the strategy pluggable instead. - - Note also that the content is retrieved via a duplicate - channel to avoid potential race-conditions on the original - - ***********************************************************************/ - - override IMessage get (IMessage host = null) - { - if (channel.scanQueue) - return channel.thaw (host); - return null; - } - - /*********************************************************************** - - Send a message back to the producer - - ***********************************************************************/ - - override void reply (IChannel channel, IMessage message) - { - assert (channel); - assert (message); - - channel.putQueue (message); - } - - /*********************************************************************** - - Override the default notification handler in order to - disable multicast reciepts while the application does - what it needs to - - ***********************************************************************/ - - override protected void invoke (IEvent event) - { - // temporarily pause listening while processing - pauseGroup; - try { - listener (event); - } finally resumeGroup; - } -} - - -/******************************************************************************* - - An abstraction of a socket connection. Used internally by the - socket-based Cluster. - -*******************************************************************************/ - -private class Connection -{ - abstract bool reset(); - - abstract void done (Time time); - - abstract SocketConduit conduit (); -} - - -/******************************************************************************* - - A pool of socket connections for accessing cluster nodes. Note - that the entries will timeout after a period of inactivity, and - will subsequently cause a connected host to drop the supporting - session. - -*******************************************************************************/ - -private class ConnectionPool -{ - private Logger log; - private int count; - private bool noDelay; - private InternetAddress address; - private PoolConnection freelist; - private TimeSpan timeout = TimeSpan.seconds(60); - - /*********************************************************************** - - Utility class to provide the basic connection facilities - provided by the connection pool. - - ***********************************************************************/ - - static class PoolConnection : Connection - { - Time time; - PoolConnection next; - ConnectionPool parent; - SocketConduit conduit_; - - /*************************************************************** - - Construct a new connection and set its parent - - ***************************************************************/ - - this (ConnectionPool pool) - { - parent = pool; - reset; - } - - /*************************************************************** - - Create a new socket and connect it to the specified - server. This will cause a dedicated thread to start - on the server. Said thread will quit when an error - occurs. - - ***************************************************************/ - - final bool reset () - { - try { - conduit_ = new SocketConduit; - - // apply Nagle settings - conduit.socket.setNoDelay (parent.noDelay); - - // set a 500ms timeout for read operations - conduit_.setTimeout (TimeSpan.millis(500)); - - // open a connection to this server - // parent.log.trace ("connecting to server"); - conduit_.connect (parent.address); - return true; - - } catch (Object o) - { - if (! Runtime.isHalting) - parent.log.warn ("server is unavailable :: "~o.toString); - } - return false; - } - - /*************************************************************** - - Return the socket belonging to this connection - - ***************************************************************/ - - final SocketConduit conduit () - { - return conduit_; - } - - /*************************************************************** - - Close the socket. This will cause any host session - to be terminated. - - ***************************************************************/ - - final void close () - { - conduit_.detach; - } - - /*************************************************************** - - Return this connection to the free-list. Note that - we have to synchronize on the parent-pool itself. - - ***************************************************************/ - - final void done (Time time) - { - synchronized (parent) - { - next = parent.freelist; - parent.freelist = this; - this.time = time; - } - } - } - - - /*********************************************************************** - - Create a connection-pool for the specified address. - - ***********************************************************************/ - - this (InternetAddress address, Logger log, bool noDelay) - { - this.log = log; - this.address = address; - this.noDelay = noDelay; - } - - /*********************************************************************** - - Allocate a Connection from a list rather than creating a - new one. Reap old entries as we go. - - ***********************************************************************/ - - final synchronized Connection borrow (Time time) - { - if (freelist) - do { - auto c = freelist; - - freelist = c.next; - if (freelist && (time - c.time > timeout)) - c.close; - else - return c; - } while (true); - - return new PoolConnection (this); - } - - /*********************************************************************** - - Close this pool and drop all existing connections. - - ***********************************************************************/ - - final synchronized void close () - { - auto c = freelist; - freelist = null; - while (c) - { - c.close; - c = c.next; - } - } -} - - -/******************************************************************************* - - Class to represent a cluster node. Each node supports both cache - and queue functionality. Note that the set of available nodes is - configured at startup, simplifying the discovery process in some - significant ways, and causing less thrashing of cache-keys. - -*******************************************************************************/ - -private class Node -{ - private Logger log; - private char[] name, - addr; - private ConnectionPool pool; - private bool enabled; - - alias void delegate (IConduit conduit) Requestor; - - /*********************************************************************** - - Construct a node with the provided name. This name should - be the network name of the hosting device. - - ***********************************************************************/ - - this (Logger log, char[] addr, char[] name) - { - this.log = log; - this.addr = addr; - this.name = name ~ ':' ~ addr; - } - - /*********************************************************************** - - Add a cache/queue reference for the remote node - - ***********************************************************************/ - - final void setPool (InternetAddress address, bool noDelay) - { - this.pool = new ConnectionPool (address, log, noDelay); - } - - /*********************************************************************** - - Return the name of this node - - ***********************************************************************/ - - override char[] toString () - { - return name; - } - - /*********************************************************************** - - Return the network address of this node - - ***********************************************************************/ - - final char[] address () - { - return addr; - } - - /*********************************************************************** - - Remove this Node from the cluster. The node is disabled - until it is seen to recover. - - ***********************************************************************/ - - final void fail () - { - setEnabled (false); - pool.close; - } - - /*********************************************************************** - - Get the current state of this node - - ***********************************************************************/ - - final bool isEnabled () - { - volatile - return enabled; - } - - /*********************************************************************** - - Set the enabled state of this node - - ***********************************************************************/ - - final void setEnabled (bool enabled) - { - if (enabled) - log.trace ("enabling "~name); - else - log.trace ("disabling "~name); - - volatile - this.enabled = enabled; - } - - /*********************************************************************** - - request data; fail this Node if we can't connect. Note - that we make several attempts to connect before writing - the node off as a failure. We use a delegate to perform - the request output since it may be invoked on more than - one iteration, where the current attempt fails. - - We return true if the cluster node responds, and false - otherwise. Exceptions are thrown if they occured on the - server. Parameter 'message' is set true if a message is - available from the server response - - ***********************************************************************/ - - final bool request (Requestor dg, ProtocolReader reader, out bool message) - { - ProtocolWriter.Command cmd; - Time time; - char[] channel; - char[] element; - - // it's possible that the pool may have failed between - // the point of selecting it, and the invocation itself - if (pool is null) - return false; - - // get a connection to the server - auto connect = pool.borrow (time = Clock.now); - - // talk to the server (try a few times if necessary) - for (int attempts=3; attempts--;) - try { - // attach connection to writer and send request - dg (connect.conduit); - - // attach connection to reader - reader.buffer.setConduit (connect.conduit); - - // load the returned object. Don't retry on - // failed reads, since the server is either - // really really busy, or near death. We must - // assume it is offline until it tells us - // otherwise (via a heartbeat) - attempts = 0; - message = reader.getHeader (cmd, channel, element); - - // return borrowed connection - connect.done (time); - - } catch (RegistryException x) - { - connect.done (time); - throw x; - } - catch (IOException x) - { - log.trace ("IOException on server request :: "~x.toString); - - // attempt to reconnect? - if (attempts is 0 || !connect.reset) - { - // that server is offline - fail; - - // state that we failed - return false; - } - } - - // is message an exception? - if (cmd !is ProtocolWriter.Command.OK) - { - // is node full? - if (cmd is ProtocolWriter.Command.Full) - throw new ClusterFullException (channel); - - // did node barf? - if (cmd is ProtocolWriter.Command.Exception) - throw new ClusterException (channel); - - // bogus response - throw new ClusterException ("invalid response from cluster server"); - } - - // ok, our server responded - return true; - } -} - - -/******************************************************************************* - - Models a generic set of cluster nodes. This is intended to be - thread-safe, with no locking on a lookup operation - -*******************************************************************************/ - -private class NodeSet -{ - private Node[char[]] map; - private Logger log; - private Set set; - private bool noDelay; - - /*********************************************************************** - - ***********************************************************************/ - - this (Logger log, bool noDelay) - { - this.log = log; - this.set = new Set; - this.noDelay = noDelay; - } - - /*********************************************************************** - - ***********************************************************************/ - - final Logger logger () - { - return log; - } - - /*********************************************************************** - - Add a node to the list of servers - - ***********************************************************************/ - - synchronized final Node addNode (Node node) - { - auto addr = node.address; - if (addr in map) - throw new ClusterException ("Attempt to add cluster node '"~addr~"' more than once"); - - map[addr] = node; - - // note that this creates a new Set instance. We do this - // so that selectNode() can avoid synchronization - set = set.add (node); - return node; - } - - /*********************************************************************** - - Select a cluster server based on a starting index. If the - selected server is not currently enabled, we just try the - next one. This behaviour should be consistent across each - cluster client. - - ***********************************************************************/ - - final Node selectNode (uint index) - { - auto hosts = set.nodes; - uint count = hosts.length; - - if (count) - { - index %= count; - - while (count--) - { - auto node = hosts [index]; - if (node.isEnabled) - return node; - - if (++index >= hosts.length) - index = 0; - } - } - throw new ClusterEmptyException ("No appropriate cluster nodes are available"); - } - - /*********************************************************************** - - Host class for the set of nodes. We utilize this to enable - atomic read/write where it would not be otherwise possible - -- D arrays are organized as ptr+length pairs and are thus - inherently non-atomic for assignment purposes - - ***********************************************************************/ - - private static class Set - { - Node[] nodes, - random; - - final Set add (Node node) - { - auto s = new Set; - s.nodes = nodes ~ node; - s.randomize; - return s; - } - - private final void randomize () - { - // copy the node list - random = nodes.dup; - - // muddle up the duplicate list. This randomized list - // is used when scanning the cluster for queued entries - foreach (i, n; random) - { - auto j = Random.shared.next (random.length); - auto tmp = random[i]; - random[i] = random[j]; - random[j] = tmp; - } - } - } -} - - -/******************************************************************************* - - Models a fixed set of cluster nodes. Used for Cache - -*******************************************************************************/ - -private class FixedNodeSet : NodeSet -{ - /*********************************************************************** - - ***********************************************************************/ - - this (Logger log, bool noDelay) - { - super (log, noDelay); - } - - /*********************************************************************** - - ***********************************************************************/ - - final synchronized void enable (char[] addr) - { - auto p = addr in map; - if (p) - { - auto node = *p; - if (! node.isEnabled) - { - node.setPool (new InternetAddress(addr), noDelay); - node.setEnabled (true); - } - } - else - // don't throw when no cache hosts have been configured at all - if (set.nodes.length) - throw new ClusterException ("Attempt to enable unregistered cache node '"~addr~"'"); - } - - /*********************************************************************** - - Select a cluster server based on the specified key. If the - selected server is not currently enabled, we just try the - next one. This behaviour should be consistent across each - cluster client. - - ***********************************************************************/ - - final bool request (Node.Requestor dg, ProtocolReader reader, char[] key) - { - Node node; - bool message; - - do { - node = selectNode (jhash (key.ptr, key.length)); - } while (! node.request (dg, reader, message)); - - return message; - } -} - - -/******************************************************************************* - - Models a flexible set of cluster nodes. Used for queue and task - -*******************************************************************************/ - -private class FlexNodeSet : NodeSet -{ - private uint rollover; - - /*********************************************************************** - - ***********************************************************************/ - - this (Logger log, bool noDelay) - { - super (log, noDelay); - } - - /*********************************************************************** - - ***********************************************************************/ - - final synchronized void enable (char[] addr, char[] name) - { - auto p = addr in map; - auto node = p ? *p : addNode (new Node (log, addr, name)); - - if (! node.isEnabled) - { - node.setPool (new InternetAddress(addr), noDelay); - node.setEnabled (true); - } - } - - /*********************************************************************** - - Select a cluster server based on the specified key. If the - selected server is not currently enabled, we just try the - next one. This behaviour should be consistent across each - cluster client. - - ***********************************************************************/ - - final bool request (Node.Requestor dg, ProtocolReader reader) - { - Node node; - bool message; - - do { - node = selectNode (++rollover); - } while (! node.request (dg, reader, message)); - - return message; - } - - /*********************************************************************** - - Sweep the cluster servers. Returns true if the delegate - returns true, false otherwise. The sweep is halted when - the delegate returns true. Note that this scans nodes in - a randomized pattern, which should tend to avoid 'bursty' - activity by a set of clients upon any one cluster server. - - ***********************************************************************/ - - final bool scan (bool delegate(Node) dg) - { - auto hosts = set.random; - auto index = hosts.length; - - while (index) - { - // lookup the randomized set of server nodes - auto node = hosts [--index]; - - // callback on each enabled node - if (node.isEnabled) - if (dg (node)) - return true; - } - return false; - } -} - - -/****************************************************************************** - - The Bob Jenkins lookup2 algorithm. This should be relocated - to somewhere common - -******************************************************************************/ - -private static uint jhash (void* k, uint len, uint init = 0) -{ - uint a = 0x9e3779b9, - b = 0x9e3779b9, - c = init, - i = len; - - // handle most of the key - while (i >= 12) - { - a += *cast(uint*)(k+0); - b += *cast(uint*)(k+4); - c += *cast(uint*)(k+8); - - a -= b; a -= c; a ^= (c>>13); - b -= c; b -= a; b ^= (a<<8); - c -= a; c -= b; c ^= (b>>13); - a -= b; a -= c; a ^= (c>>12); - b -= c; b -= a; b ^= (a<<16); - c -= a; c -= b; c ^= (b>>5); - a -= b; a -= c; a ^= (c>>3); - b -= c; b -= a; b ^= (a<<10); - c -= a; c -= b; c ^= (b>>15); - k += 12; i -= 12; - } - - // handle the last 11 bytes - c += len; - switch (i) - { - case 11: c+=(cast(uint)(cast(ubyte*)k)[10]<<24); - case 10: c+=(cast(uint)(cast(ubyte*)k)[9]<<16); - case 9 : c+=(cast(uint)(cast(ubyte*)k)[8]<<8); - case 8 : b+=(cast(uint)(cast(ubyte*)k)[7]<<24); - case 7 : b+=(cast(uint)(cast(ubyte*)k)[6]<<16); - case 6 : b+=(cast(uint)(cast(ubyte*)k)[5]<<8); - case 5 : b+=(cast(uint)(cast(ubyte*)k)[4]); - case 4 : a+=(cast(uint)(cast(ubyte*)k)[3]<<24); - case 3 : a+=(cast(uint)(cast(ubyte*)k)[2]<<16); - case 2 : a+=(cast(uint)(cast(ubyte*)k)[1]<<8); - case 1 : a+=(cast(uint)(cast(ubyte*)k)[0]); - default: - } - - a -= b; a -= c; a ^= (c>>13); - b -= c; b -= a; b ^= (a<<8); - c -= a; c -= b; c ^= (b>>13); - a -= b; a -= c; a ^= (c>>12); - b -= c; b -= a; b ^= (a<<16); - c -= a; c -= b; c ^= (b>>5); - a -= b; a -= c; a ^= (c>>3); - b -= c; b -= a; b ^= (a<<10); - c -= a; c -= b; c ^= (b>>15); - - return c; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterCache.d --- a/tango/tango/net/cluster/tina/ClusterCache.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,134 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterCache; - -private import tango.core.Exception; - -private import tango.net.cluster.QueuedCache; - -private import tango.net.cluster.tina.Cluster, - tango.net.cluster.tina.ClusterTypes; - -/****************************************************************************** - - The cache containers. These are initiated by ClusterServer and - maintained via ClusterThread. - -******************************************************************************/ - -class ClusterCache -{ - alias QueuedCache!(char[], ClusterContent) Cache; - - private Cache[char[]] set; - private uint size; - private Cluster cluster; - - /********************************************************************** - - Construct a host for multi-channel cache instances. - - TODO: all cache instances are currently the same size, - and it would be more practical to support some scheme - of specifying distinct sizes. Also, this could likely - benefit from a dedicated slab allocator instead of a - QueuedCache. - - **********************************************************************/ - - this (Cluster cluster, uint size) - { - this.size = size; - if (size < 1 || size > 32 * 1024) - throw new IllegalArgumentException ("cache size should be between 1 and 32K entries"); - } - - /********************************************************************** - - Stuff an entry into cache for the channel:element pair. If - the time value is provided, it will be used to guard against - updating an existing "newer" cache entry. - - Note that the args are aliased, so we copy them as necessary - - **********************************************************************/ - - bool put (char[] channel, char[] element, ClusterContent content, Time time) - { - return lookup(channel).put (element, {return element.dup;}, - {return cast(ClusterContent) content.dup;}, time); - } - - /********************************************************************** - - Remove an entry from the cache - - **********************************************************************/ - - ClusterContent extract (char[] channel, char[] element) - { - return lookup(channel).remove (element); - } - - /********************************************************************** - - Return an entry from the cache - - **********************************************************************/ - - ClusterContent get (char[] channel, char[] element) - { - return lookup(channel).get (element); - } - - /********************************************************************** - - Add a cache lock where the entry is invalid or unlocked. - Returns true if locked by this call, false otherwise. Note - that this will return false if the entry is already locked. - - TODO: implement - - **********************************************************************/ - - bool lock (char[] channel, char[] element, Time time) - { - return true; - } - - /********************************************************************** - - TODO: implement - - **********************************************************************/ - - void unlock (char[] channel, char[] element) - { - } - - /********************************************************************** - - Return a channel-specific cache. Could benefit from a - lock-free hashmap, instread of synching on AA access - - **********************************************************************/ - - private synchronized Cache lookup (char[] channel) - { - if (auto p = channel in set) - return *p; - - return set[channel.dup] = new Cache (size); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterQueue.d --- a/tango/tango/net/cluster/tina/ClusterQueue.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,442 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterQueue; - -private import tango.core.Thread; - -private import tango.stdc.stdlib : alloca; - -private import tango.net.cluster.tina.Cluster, - tango.net.cluster.tina.QueueFile, - tango.net.cluster.tina.ClusterTypes; - -/****************************************************************************** - -******************************************************************************/ - -class ClusterQueue -{ - private Logger log; - private uint used, - limit; - private double sleep; - private Thread thread; - private Cluster cluster; - - /********************************************************************** - - **********************************************************************/ - - abstract void watchdog (); - - /********************************************************************** - - **********************************************************************/ - - abstract ClusterContent get (char[] name); - - /********************************************************************** - - **********************************************************************/ - - abstract bool put (char[] name, ClusterContent content); - - /********************************************************************** - - **********************************************************************/ - - this (Cluster cluster, uint limit, double sleep) - { - thread = new Thread (&run); - - log = cluster.log; - this.limit = limit; - this.sleep = sleep; - this.cluster = cluster; - - thread.start; - } - - /********************************************************************** - - **********************************************************************/ - - final void publish (IChannel channel) - { - log.info ("publishing queue channel '" ~ channel.name ~ "'"); - channel.broadcast; - } - - /********************************************************************** - - **********************************************************************/ - - private void run () - { - while (true) - { - Thread.sleep (sleep); - - try { - watchdog; - } catch (Object x) - log.error ("queue-publisher: "~x.toString); - } - } -} - - - -/****************************************************************************** - - -******************************************************************************/ - -class PersistQueue : ClusterQueue -{ - private QueueFile[char[]] queueSet; - private QueueFile[] queueList; - - /********************************************************************** - - **********************************************************************/ - - this (Cluster cluster, uint limit, double sleep) - { - super (cluster, limit, sleep); - } - - /********************************************************************** - - **********************************************************************/ - - final synchronized QueueFile lookup (char[] name) - { - auto p = name in queueSet; - if (p is null) - { - // name is currently a reference only; copy it - name = name.dup; - - log.trace ("creating new queue for channel '" ~ name ~ "'"); - - // place new ChannelQueue into the list - auto queue = new QueueFile (log, cluster.createChannel(name), limit); - queueSet[name] = queue; - queueList ~= queue; - return queue; - } - - return *p; - } - - /********************************************************************** - - **********************************************************************/ - - final bool put (char[] name, ClusterContent content) - { - // stuff content into the appropriate queue - auto queue = lookup (name); - auto ret = queue.push (content); - - // notify immediately if we just transitioned from 0 - if (ret && queue.size is 1) - publish (queue.channel); - - return ret; - } - - /********************************************************************** - - **********************************************************************/ - - final ClusterContent get (char[] name) - { - return cast(ClusterContent) lookup(name).pop; - } - - /********************************************************************** - - Workaround for a compiler bug in 0.018 - - **********************************************************************/ - - private final synchronized void copy (QueueFile[] dst, QueueFile[] src) - { - dst[] = src; - } - - /********************************************************************** - - **********************************************************************/ - - final void watchdog () - { - auto len = queueList.length; - auto list = (cast(QueueFile*) alloca(len * QueueFile.sizeof))[0..len]; - - // clone the list of queues to avoid stalling everything - copy (list, queueList); - - // synchronized (this) - // list[] = queueList; - - foreach (q; list) - { - if (q.size) - publish (q.channel); - - if (q.isDirty) - { - q.flush; - log.info ("flushed "~q.channel.name~" to disk"); - } - } - } -} - - -/+ - -/****************************************************************************** - -******************************************************************************/ - -class MemoryQueue : ClusterQueue -{ - private HashMap queueSet; - - /********************************************************************** - - **********************************************************************/ - - this (Cluster cluster, uint limit, Interval sleep) - { - queueSet = new HashMap (256); - super (cluster, limit, sleep); - } - - /********************************************************************** - - **********************************************************************/ - - final ChannelQueue lookup (char[] channel) - { - return cast(ChannelQueue) queueSet.get (channel); - } - - /********************************************************************** - - **********************************************************************/ - - bool put (char[] name, ClusterContent content) - { - if ((used + content.length) < limit) - { - // select the appropriate queue - auto queue = lookup (name); - if (queue is null) - { - // name is currently a reference only; copy it - name = name.dup; - - log.trace ("creating new queue for channel '" ~ name ~ "'"); - - // place new ChannelQueue into the list - queueSet.put (name, queue = new ChannelQueue (cluster.createChannel (name))); - } - - queue.put (cast (ClusterContent) content.dup); - used += content.length; - return true; - } - return false; - } - - /********************************************************************** - - **********************************************************************/ - - synchronized ClusterContent get (char[] name) - { - ClusterContent ret = null; - auto queue = lookup (name); - - if (queue) - { - ret = queue.get; - used -= ret.length; - } - return ret; - } - - /********************************************************************** - - **********************************************************************/ - - void watchdog () - { - foreach (char[] k, Object o; queueSet) - { - auto q = cast(ChannelQueue) o; - if (q.count) - publish (q.channel); - } - } -} - - -/****************************************************************************** - -******************************************************************************/ - -private class ChannelQueue -{ - private Link head, // head of the Queue - tail; // tail of the Queue - private int count; // number of items present - IChannel channel; // Queue channel - - /********************************************************************** - - **********************************************************************/ - - private static class Link - { - Link prev, - next; - ClusterContent data; - - static Link freeList; - - /************************************************************** - - **************************************************************/ - - Link append (Link after) - { - if (after) - { - next = after.next; - - // patch 'next' to point at me - if (next) - next.prev = this; - - //patch 'after' to point at me - prev = after; - after.next = this; - } - return this; - } - - /************************************************************** - - **************************************************************/ - - Link unlink () - { - // make 'prev' and 'next' entries see each other - if (prev) - prev.next = next; - - if (next) - next.prev = prev; - - // Murphy's law - next = prev = null; - return this; - } - - /************************************************************** - - **************************************************************/ - - Link create () - { - Link l; - - if (freeList) - { - l = freeList; - freeList = l.next; - } - else - l = new Link; - return l; - } - - /************************************************************** - - **************************************************************/ - - void destroy () - { - next = freeList; - freeList = this; - this.data = null; - } - } - - - /********************************************************************** - - **********************************************************************/ - - this (IChannel channel) - { - head = tail = new Link; - this.channel = channel; - } - - /********************************************************************** - - Add the specified content to the queue at the current - tail position, and bump tail to the next Link - - **********************************************************************/ - - void put (ClusterContent content) - { - tail.data = content; - tail = tail.create.append (tail); - ++count; - } - - /********************************************************************** - - Extract from the head, which is the oldest item in the - queue. The removed Link is then appended to the tail, - ready for another put. Head is adjusted to point at the - next valid queue entry. - - **********************************************************************/ - - ClusterContent get () - { - if (head !is tail) - { - auto l = head; - head = head.next; - auto ret = l.data; - l.unlink; - l.destroy; - --count; - return ret; - } - return null; - } -} - -+/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterServer.d --- a/tango/tango/net/cluster/tina/ClusterServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterServer; - -private import tango.core.Thread; - -private import tango.util.ArgParser; - -private import tango.net.Socket, - tango.net.InternetAddress; - -private import tango.net.cluster.tina.Cluster, - tango.net.cluster.tina.RollCall; - -private import tango.net.cluster.NetworkRegistry; - -private import tango.net.cluster.tina.util.ServerThread; - -package import tango.net.cluster.tina.util.AbstractServer; - -/****************************************************************************** - - Extends the AbstractServer to glue cluster support together. - -******************************************************************************/ - -abstract class ClusterServer : AbstractServer -{ - package char[] name; - package Cluster cluster; - package IChannel channel; - package RollCall rollcall; - - /********************************************************************** - - Concrete server must expose a service handler - - **********************************************************************/ - - abstract void service (IConduit conduit); - - /********************************************************************** - - Construct this server with the requisite attributes. The - 'bind' address is the local address we'll be listening on, - 'threads' represents the number of socket-accept threads, - and backlog is the number of "simultaneous" connection - requests that a socket layer will buffer on our behalf. - - We also set up a listener for client discovery-requests, - and lastly, we tell active clients that we're available - for work. Clients should be listening on the appropriate - channel for an instance of the RollCall payload. - - **********************************************************************/ - - this (char[] name, InternetAddress bind, Logger logger) - { - this.name = name; - - super (bind, 1, 50, logger); - - // hook into the cluster as a server - cluster = new Cluster (logger); - } - - /********************************************************************** - - **********************************************************************/ - - void enroll (IMessage task) - { - NetworkRegistry.shared.enroll (task); - } - - /********************************************************************** - - Start the server - - Note that we hijack the calling thread, and use it to - generate a hearbeat. The hearbeat has two functions: it - tells all clients when this server starts, and it tells - them we're still alive. The latter is important if, for - example, a client request to this server had timed-out - due to the server being too busy. In such a case, the - client will mark the server as being unavailable, and - the heartbeat will presumably revert that. - - It would also be useful to monitor the GC from here. - - **********************************************************************/ - - void start (RollCall id, bool reuse=false) - { - super.start (reuse); - - // configure an identity for ourselves - id.addr = Socket.hostName ~ ':' ~ localAddress.toPortString; - this.rollcall = id; - - // clients are listening on this channel ... - channel = cluster.createChannel ("cluster.server.advertise"); - - // ... and listen for subsequent server.advertise requests - channel.createBulletinConsumer (¬ify); - - while (true) - { - getLogger.trace ("heartbeat"); - channel.broadcast (rollcall); - Thread.sleep (30.0); - } - } - - /********************************************************************** - - Return a text string identifying this server - - **********************************************************************/ - - char[] getProtocol () - { - return name; - } - - /********************************************************************** - - Return a text string identifying this server - - **********************************************************************/ - - override char[] toString () - { - return "cluster::" ~ name; - } - - /********************************************************************** - - Create a ServerSocket instance. - - **********************************************************************/ - - override ServerSocket createSocket (InternetAddress bind, int backlog, bool reuse=false) - { - return new ServerSocket (bind, backlog, reuse); - } - - /********************************************************************** - - Create a ServerThread instance. This can be overridden to - create other thread-types, perhaps with additional thread- - level data attached. - - **********************************************************************/ - - override void createThread (ServerSocket socket) - { - new ServerThread (this, socket); - } - - /********************************************************************** - - Interface method that's invoked when a client is making - discovery requests. We just send back our identity in a - reply - - **********************************************************************/ - - private void notify (IEvent event) - { - scope input = new RollCall; - event.get (input); - - // if this is a request, reply with our identity - if (input.type is input.Request) - channel.broadcast (rollcall); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterTask.d --- a/tango/tango/net/cluster/tina/ClusterTask.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterTask; - -/******************************************************************************* - - -*******************************************************************************/ - -private import tango.core.Thread; - -private import tango.net.cluster.tina.Cluster; - -/******************************************************************************* - - Quick bootstrap for cluster connectivity - -*******************************************************************************/ - -static this () -{ - auto cluster = (new Cluster).join; - Thread.setLocal (0, cast(void*) cluster.createChannel("task")); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterThread.d --- a/tango/tango/net/cluster/tina/ClusterThread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,149 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterThread; - -private import tango.core.Thread, - tango.core.Runtime, - tango.core.Exception; - -private import tango.io.Buffer, - tango.io.GrowBuffer, - tango.net.ServerSocket; - -package import tango.io.model.IBuffer, - tango.io.model.IConduit; - -private import tango.text.convert.Sprint; - -package import tango.net.cluster.tina.Cluster, - tango.net.cluster.tina.ProtocolReader, - tango.net.cluster.tina.ProtocolWriter; - -package import tango.net.cluster.tina.util.AbstractServer; - -/****************************************************************************** - - Thread for handling client requests. Note that this remains alive - until the client kills the socket - -******************************************************************************/ - -class ClusterThread -{ - protected IBuffer buffer; - protected ProtocolReader reader; - protected ProtocolWriter writer; - protected Logger logger; - protected char[] client; - protected Thread thread; - protected Sprint!(char) sprint; - protected Cluster cluster; - protected IConduit conduit; - - /********************************************************************** - - request handler - - **********************************************************************/ - - abstract void dispatch (); - - /********************************************************************** - - Note that the conduit stays open until the client kills it. - Also note that we use a GrowableBuffer here, which expands - as necessary to contain larger payloads. - - **********************************************************************/ - - this (AbstractServer server, IConduit conduit, Cluster cluster) - { - buffer = new GrowBuffer (1024 * 8); - buffer.setConduit (conduit); - - // get client infomation - client = server.remoteAddress(conduit).toString; - - // setup cluster protocol-transcoders - writer = new ProtocolWriter (buffer); - reader = new ProtocolReader (buffer); - - // grab a thread to execute within - thread = new Thread (&run); - - // make a formatter for this thread - sprint = new Sprint!(char); - - // save state - logger = server.getLogger; - this.conduit = conduit; - this.cluster = cluster; - } - - /********************************************************************** - - IRunnable method - - **********************************************************************/ - - void execute () - { - thread.start; - } - - /********************************************************************** - - process client requests - - **********************************************************************/ - - private void run () - { - logger.info (sprint ("{} starting service handler", client)); - - try { - while (true) - { - // start with a clear conscience - buffer.clear; - - // wait for something to arrive before we try/catch - buffer.slice (1, false); - - try { - dispatch; - } catch (Object x) - { - logger.error (sprint ("{} cluster request error '{}'", client, x)); - writer.exception (sprint ("cluster request error '{}'", x.toString)); - } - - // send response back to client - buffer.flush; - } - - } catch (IOException x) - if (! Runtime.isHalting) - logger.trace (sprint ("{} cluster socket exception '{}'", client, x)); - - catch (Object x) - logger.fatal (sprint ("{} cluster runtime exception '{}'", client, x)); - - // log our halt status - logger.info (sprint ("{} halting service handler", client)); - - // make sure we close the conduit - conduit.detach; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ClusterTypes.d --- a/tango/tango/net/cluster/tina/ClusterTypes.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,24 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ClusterTypes; - - -/******************************************************************************* - - typedef for opaque, serialized data. This is stashed away by - some of the servers - -*******************************************************************************/ - -package typedef ubyte[] ClusterContent; - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/CmdParser.d --- a/tango/tango/net/cluster/tina/CmdParser.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.CmdParser; - -private import tango.util.ArgParser; - -private import tango.text.convert.Integer; - -private import tango.util.log.Log, - tango.util.log.Configurator; - -/****************************************************************************** - - Extends the ArgParser to support/extract common arguments - -******************************************************************************/ - -class CmdParser : ArgParser -{ - Logger log; - ushort port; - uint size; - bool help; - - /********************************************************************** - - **********************************************************************/ - - this (char[] name) - { - log = Log.getLogger (name); - - // default logging is info, not trace - log.setLevel (log.Level.Info); - } - - /********************************************************************** - - **********************************************************************/ - - void parse (char[][] args) - { - static char[] strip (char[] value) - { - if (value.length && (value[0] is '=' || value [0] is ':')) - value = value[1..$]; - return value; - } - - static int toInt (char[] value) - { - return atoi (strip(value)); - } - - bind ("-", "h", {help = true;}); - - bind ("-", "log", delegate (char[] value) - {log.setLevel(Log.level(strip(value)));}); - - bind ("-", "port", delegate (char[] value) - {port = cast(ushort) toInt (value);}); - - bind ("-", "size", delegate (char[] value) - {size = toInt (value);}); - - super.parse (args); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ProtocolReader.d --- a/tango/tango/net/cluster/tina/ProtocolReader.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,157 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ProtocolReader; - -private import tango.io.protocol.Reader, - tango.io.protocol.Allocator, - tango.io.protocol.PickleProtocol; - -private import tango.net.cluster.model.IMessage; - -private import tango.net.cluster.NetworkRegistry; - -private import tango.net.cluster.tina.ClusterTypes; - -/******************************************************************************* - - Objects passed around a cluster are prefixed with a header, so the - receiver can pick them apart correctly. This header consists of: - --- - * the packet size, including the header (16 bits) - * a command code (8 bits) - * a version id (8 bits) - * a timestamp (64 bits) - * length of the channel name (32 bits) - * the channel name - * length of the key (32 bits) - * the key - * an optional payload (an IMessage instance) - --- - - Everything is written in Network order (big endian). - -*******************************************************************************/ - -class ProtocolReader : Reader -{ - /*********************************************************************** - - Construct a ProtocolReader upon the given buffer. As - Objects are serialized their content is written to this - buffer. The buffer content is then typically flushed to - some external conduit, such as a file or socket. - - Note that arrays (such as text) are *always* sliced from - the buffer -- there's no heap activity involved. Thus it - may be necessary to .dup content where appropriate - - ***********************************************************************/ - - this (IBuffer buffer) - { - super (new BufferSlice (new PickleProtocol (buffer))); - } - - /*********************************************************************** - - deserialize a payload into a provided host, or via - the registered instance of the incoming payload - - ***********************************************************************/ - - IMessage thaw (IMessage host = null) - { - return thaw (NetworkRegistry.shared, host); - } - - /*********************************************************************** - - deserialize a payload into a provided host, or via - the registered instance of the incoming payload - - ***********************************************************************/ - - IMessage thaw (NetworkRegistry registry, IMessage host = null) - { - return registry.thaw (this, host); - } - - /*********************************************************************** - - Read the protocol header and return true if there's a - payload available - - ***********************************************************************/ - - bool getHeader (inout ubyte cmd, inout char[] channel, inout char[] element) - { - auto position = buffer.position; - - long time; - ushort size; - ubyte versn; - - get (size) (cmd) (versn) (time); - - // avoid allocation for these two strings - get (channel) (element); - - // is there a payload attached? - if (size > (buffer.position - position)) - return true; - - return false; - } - - /*********************************************************************** - - Return an aliased slice of the buffer representing the - recieved payload. This is a bit of a hack, but eliminates - a reasonable amount of overhead. Note that the channel/key - text is retained right at the start of the returned content, - enabling the host to toss the whole thing back without any - further munging. - - ***********************************************************************/ - - ClusterContent getPacket (inout ubyte cmd, inout char[] channel, inout char[] element, inout long time) - { - ushort size; - ubyte versn; - - // load up the header - get (size) (cmd) (versn) (time); - - //printf ("size: %d\n", cast(int) size); - - // subtract header size - size -= buffer.position; - - // may throw an exception if the payload is too large to fit - // completely inside the buffer! - buffer.slice (size, false); - - // slice the remaining packet (with channel/key text) - auto content = cast(ClusterContent) buffer.slice; - - // get a slice upon the channel name - get (channel); - - // get a slice upon the element name - get (element); - - // return the aliased payload (including channel/key text) - return content; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/ProtocolWriter.d --- a/tango/tango/net/cluster/tina/ProtocolWriter.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,199 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.ProtocolWriter; - -private import tango.io.protocol.Writer, - tango.io.protocol.PickleProtocol; - -private import tango.net.cluster.model.IMessage; - -private import tango.net.cluster.NetworkRegistry; - -private import tango.net.cluster.tina.ClusterTypes; - -/******************************************************************************* - - Objects passed around a cluster are prefixed with a header, so the - receiver can pick them apart correctly. This header consists of: - --- - * the packet size, including the header (16 bits) - * a command code (8 bits) - * a version id (8 bits) - * a timestamp (64 bits) - * length of the channel name (32 bits) - * the channel name - * length of the key (32 bits) - * the key - * an optional payload (an IMessage instance) - --- - - Everything is written in Network order (big endian) - -*******************************************************************************/ - -class ProtocolWriter -{ - private Writer emit; - package IBuffer buffer; - - const ubyte Version = 0x01; - - /*********************************************************************** - - protocol commands - - ***********************************************************************/ - - enum Command : ubyte - { - OK, - Exception, - Full, - Locked, - Add, - Copy, - Remove, - Load, - AddQueue, - RemoveQueue, - Call - } - - /*********************************************************************** - - Construct a ProtocolWriter upon the given buffer. As - Objects are serialized, their content is written to this - buffer. The buffer content is then typically flushed to - some external conduit, such as a file or socket. - - Note that serialized data is always in Network order. - - ***********************************************************************/ - - this (IBuffer buffer) - { - assert (buffer); - emit = new Writer (new PickleProtocol(this.buffer = buffer)); - } - - /*********************************************************************** - - Stuff the request into our output buffer. Note that this - protocol is prefixed by a 'size' value, requiring that - all messages can be contained within the buffer. This is - not considered a serious limitation, as the messages are - not intended to be "large" given that they're traversing - the network. - - ***********************************************************************/ - - ProtocolWriter put (Command cmd, char[] channel, char[] element = null, IMessage msg = null) - { - auto time = (msg ? msg.time : Time.init); - - // reset the buffer first! - buffer.clear; - - auto content = cast(ubyte[]) buffer.getContent; - emit (cast(ushort) 0) - (cast(ubyte) cmd) - (cast(ubyte) Version) - (cast(ulong) time.ticks) - (channel) - (element); - - // is there a payload? - if (msg) - NetworkRegistry.shared.freeze (emit, msg); - - // go back and write the total number of bytes - auto size = buffer.limit; - content[0] = cast(ubyte) (size >> 8); - content[1] = cast(ubyte) (size & 0xff); - return this; - } - - /*********************************************************************** - - Emit a ClusterContent constructed by ProtocolReader.getPacket - - ***********************************************************************/ - - ProtocolWriter reply (ClusterContent content) - { - uint empty = 0; - - // reset the buffer first - buffer.clear; - - // write the length, the ack, version, and timestamp - emit (cast(ushort) (content.length + ushort.sizeof + ubyte.sizeof + ubyte.sizeof + ulong.sizeof)) - (cast(ubyte) ProtocolWriter.Command.OK) - (cast(ubyte) Version) - (cast(ulong) ulong.init); - - // and the payload (which includes both channel & element) - if (content.length) - buffer.append (content); - else - // or filler for an empty channel & element ... - emit (empty) (empty); - - return this; - } - - /*********************************************************************** - - Write an exception message - - ***********************************************************************/ - - ProtocolWriter exception (char[] message) - { - return put (ProtocolWriter.Command.Exception, message); - } - - /*********************************************************************** - - Write an "OK" confirmation - - ***********************************************************************/ - - ProtocolWriter success (char[] message = null) - { - return put (ProtocolWriter.Command.OK, message); - } - - /*********************************************************************** - - Indicate something has filled up - - ***********************************************************************/ - - ProtocolWriter full (char[] message) - { - return put (ProtocolWriter.Command.Full, message); - } - - /*********************************************************************** - - Flush the output - - ***********************************************************************/ - - void flush () - { - emit.flush; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/QueueFile.d --- a/tango/tango/net/cluster/tina/QueueFile.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,389 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.QueueFile; - -private import tango.io.FilePath, - tango.io.FileConduit; - -private import tango.util.log.Logger; - -private import tango.text.convert.Sprint; - -private import tango.net.cluster.model.IChannel; - -version (Posix) - private import tango.stdc.posix.fcntl; - -/****************************************************************************** - - -******************************************************************************/ - -class QueueFile -{ - struct Header // 16 bytes - { - uint size, // size of the current chunk - prior; // size of the prior chunk - ushort check; // simpe header checksum - ubyte pad; // how much padding applied? - byte[5] unused; // future use - } - - private Logger log; // logging target - private bool dirty; // is queue dirty? - private uint limit, // max file size - depth, // stack depth - insert; // file insert position - private void[] buffer; // read buffer - private Sprint!(char) sprint; // formatting buffer - private Header current; // top-of-stack info - private FileConduit conduit; // the file itself - private IChannel channel_; // the channel we're using - - /********************************************************************** - - **********************************************************************/ - - this (Logger log, IChannel channel, uint max, uint min=1024*1024) - { - this (log, channel.name~".queue", max, min); - channel_ = channel; - } - - /********************************************************************** - - **********************************************************************/ - - this (Logger log, char[] name, uint max, uint min=1024*1024) - { - Header tmp; - - this.log = log; - limit = max; - sprint = new Sprint!(char); - buffer = new void [1024 * 8]; - conduit = new FileConduit (name, FileConduit.ReadWriteOpen); - - // lock the file on Posix, since it has no O/S file locks - version (Posix) - { - flock f; - f.l_type = F_WRLCK; - f.l_start = f.l_len = f.l_whence = 0; - if (fcntl (conduit.fileHandle, F_SETLK, &f) is -1) - { - log.error (sprint("failed to lock queue file '{}'; it may already be in use", name)); - conduit.error; - } - } - - auto length = conduit.path.fileSize; - if (length is 0) - { - // make some space in the file - min = (min + buffer.length - 1) / buffer.length; - log.trace (sprint("initializing queue '{}' to {} KB", name, (min * buffer.length)/1024)); - - while (min-- > 0) - write (buffer.ptr, buffer.length); - conduit.seek (0); - } - else - { - // sweep the file and truncate on inconsistencies - while (insert < length) - { - // get a header - read (&tmp, tmp.sizeof); - - // end of queue? - if (tmp.size) - { - // a corrupted header? - if (checksum(tmp) != tmp.check) - { - log.warn (sprint("invalid header located in queue '{}'; truncating", name)); - break; - } - - // corrupted content? - auto content = read (tmp); - - ++depth; - current = tmp; - insert = insert + tmp.size + tmp.sizeof; - conduit.seek (insert); - - debug - log.trace (sprint("open: depth {}, prior {}, size {}, insert {}", - depth, tmp.prior, tmp.size, insert)); - } - else - break; - } - - // leave file position at insert point - conduit.seek (insert); - } - } - - /********************************************************************** - - **********************************************************************/ - - final void close () - { - if (conduit) - conduit.detach; - conduit = null; - } - - /********************************************************************** - - **********************************************************************/ - - final uint size () - { - return depth; - } - - /********************************************************************** - - **********************************************************************/ - - final IChannel channel () - { - return channel_; - } - - /********************************************************************** - - **********************************************************************/ - - final bool isDirty () - { - return dirty; - } - - /********************************************************************** - - **********************************************************************/ - - final synchronized void flush () - { - //conduit.commit; - dirty = false; - } - - /********************************************************************** - - **********************************************************************/ - - final synchronized bool push (void[] data) - { - //assert (insert is conduit.position); - - if (data.length is 0) - conduit.error ("invalid zero length content"); - - // check for overflow - if (insert > limit) - return false; - - Header chunk = void; - - // pad the output to 4 byte boundary, so - // that each header is aligned - chunk.prior = current.size; - chunk.size = ((data.length + 3) / 4) * 4; - chunk.pad = cast(ubyte) (chunk.size - data.length); - chunk.check = checksum (chunk); - - debug - log.trace (sprint("push: data {}, prior {}, size {}, insert {}, filepos {}", - data.length, chunk.prior, chunk.size, insert, conduit.position)); - - // write msg header and content - write (&chunk, chunk.sizeof); - write (data.ptr, chunk.size); - - // update refs - insert = insert + chunk.sizeof + chunk.size; - current = chunk; - ++depth; - - return dirty = true; - } - - /********************************************************************** - - **********************************************************************/ - - final synchronized void[] pop () - { - //assert (insert is conduit.position); - - Header tmp = void; - - if (depth) - { - // locate the current header - auto point = insert - (current.size + tmp.sizeof); - conduit.seek (point); - - // write a zero header to indicate eof - Header zero; - write (&zero, zero.sizeof); - - // read the current record - auto content = read (current, current.pad); - - // content before us? - if (depth > 1) - { - auto prior = point - (current.prior + tmp.sizeof); - conduit.seek (prior); - read (¤t, current.sizeof); - } - else - if (current.prior) - conduit.error ("queue file is corrupt"); - else - current = zero; - - // leave file position at insert-point - conduit.seek (point); - insert = point; - if (--depth is 0 && insert > 0) - conduit.error ("queue file is corrupt"); - return content; - } - return null; - } - - /********************************************************************** - - **********************************************************************/ - - private final void[] read (inout Header hdr, uint pad=0) - { - auto len = hdr.size - pad; - - // make buffer big enough - if (buffer.length < len) - buffer.length = len; - - read (buffer.ptr, len); - return buffer [0 .. len]; - } - - /********************************************************************** - - **********************************************************************/ - - private final void read (void* data, uint len) - { - auto input = conduit.input; - - for (uint i; len > 0; len -= i, data += i) - if ((i = input.read (data[0..len])) is conduit.Eof) - conduit.error ("QueueFile.read :: Eof while reading"); - } - - /********************************************************************** - - **********************************************************************/ - - private final void write (void* data, uint len) - { - auto output = conduit.output; - - for (uint i; len > 0; len -= i, data += i) - if ((i = output.write (data[0..len])) is conduit.Eof) - conduit.error ("QueueFile.write :: Eof while writing"); - } - - /********************************************************************** - - **********************************************************************/ - - private static ushort checksum (inout Header hdr) - { - uint i = hdr.pad; - i = i ^ hdr.size ^ (hdr.size >> 16); - i = i ^ hdr.prior ^ (hdr.prior >> 16); - return cast(ushort) i; - } -} - - -/****************************************************************************** - - -******************************************************************************/ - -version (QueueFile) -{ - import tango.time.StopWatch; - - import tango.util.log.Log, - tango.util.log.Configurator; - - void main (char[][] args) - { - auto log = Log.getLogger("queue.persist").setLevel(Logger.Level.Info); - - auto z = new QueueFile (log, "foo.bar", 30 * 1024 * 1024); - pushTimer (z); - z.close; - } - - void pushTimer (QueueFile z) - { - StopWatch w; - char[200] test; - - popAll(z); - w.start; - for (int i=10_000; i--;) - z.push(test); - z.log.info (z.sprint("{} push/s", 10_000/w.stop)); - popAll(z); - } - - void push (QueueFile z) - { - z.push ("one"); - z.push ("two"); - z.push ("three"); - z.push ("four"); - z.push ("five"); - z.push ("six"); - z.push ("seven"); - z.push ("eight"); - z.push ("nine"); - z.push ("ten"); - z.push ("eleven"); - } - - void popAll(QueueFile z) - { - uint i; - StopWatch w; - - w.start; - while (z.pop !is null) ++i; - z.log.info (z.sprint("{}, {} pop/s",i, i/w.stop)); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/QueueServer.d --- a/tango/tango/net/cluster/tina/QueueServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.QueueServer; - -private import tango.net.cluster.tina.RollCall, - tango.net.cluster.tina.QueueThread, - tango.net.cluster.tina.ClusterQueue, - tango.net.cluster.tina.ClusterServer; - -/****************************************************************************** - - Extends the ClusterServer to glue cluster-cache support together. - -******************************************************************************/ - -class QueueServer : ClusterServer -{ - private ClusterQueue queue; - - /********************************************************************** - - Construct this server with the requisite attributes. The - 'bind' address is the local address we'll be listening on - - **********************************************************************/ - - this (InternetAddress bind, Logger logger) - { - super ("queue", bind, logger); - - // create a queue instance - // queue = new MemoryQueue (cluster, 64 * 1024 * 1024, 1.0); - queue = new PersistQueue (cluster, 64 * 1024 * 1024, 3.0); - - } - - /********************************************************************** - - Start the server - - **********************************************************************/ - - void start (bool reuse=false) - { - super.start (new RollCall(RollCall.Queue), reuse); - } - - /********************************************************************** - - Factory method for servicing a request. We just create - a new QueueThread to handle requests from the client. - The thread does not exit until the socket connection is - broken by the client, or some other exception occurs. - - **********************************************************************/ - - override void service (IConduit conduit) - { - (new QueueThread (this, conduit, cluster, queue)).execute; - } -} - - - -version (QueueServer) -{ - import tango.io.Console; - - import tango.net.cluster.tina.CmdParser; - - void main (char[][] args) - { - auto arg = new CmdParser ("queue.server"); - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: queueserver -port=number -log[=trace, info, warn, error, fatal, none]").newline; - else - (new QueueServer(new InternetAddress(arg.port), arg.log)).start; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/QueueThread.d --- a/tango/tango/net/cluster/tina/QueueThread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.QueueThread; - -private import tango.core.Exception; - -private import tango.net.cluster.tina.ClusterQueue, - tango.net.cluster.tina.ClusterTypes, - tango.net.cluster.tina.ClusterThread; - -/****************************************************************************** - - Thread for handling queue requests. - -******************************************************************************/ - -class QueueThread : ClusterThread -{ - private ClusterQueue queue; - - /********************************************************************** - - Note that the conduit stays open until the client kills it - - **********************************************************************/ - - this (AbstractServer server, IConduit conduit, Cluster cluster, ClusterQueue queue) - { - super (server, conduit, cluster); - this.queue = queue; - } - - /********************************************************************** - - process client requests - - **********************************************************************/ - - void dispatch () - { - ProtocolWriter.Command cmd; - long time; - char[] channel; - char[] element; - - // wait for request to arrive - auto content = reader.getPacket (cmd, channel, element, time); - - switch (cmd) - { - case ProtocolWriter.Command.AddQueue: - logger.trace (sprint ("{} add queue entry on channel '{}'", client, channel)); - - if (queue.put (channel, content)) - writer.success; - else - writer.full ("cluster queue is full"); - break; - - case ProtocolWriter.Command.RemoveQueue: - logger.trace (sprint ("{} remove queue entry on channel '{}'", client, channel)); - - writer.reply (queue.get (channel)); - break; - - default: - throw new IllegalArgumentException ("invalid command"); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/RollCall.d --- a/tango/tango/net/cluster/tina/RollCall.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.RollCall; - -private import tango.net.cluster.NetworkMessage; - -/****************************************************************************** - - An IMessage used by the cluster client and server during discovery - lookup and liveness broadcasts. The client broadcasts one of these - at startup to see which servers are alive. The server responds with - a reply RollCall stating its name and port. The server will also - broadcast one of these when it first starts, such that any running - clients can tell the server has 'recovered'. - - Requests and responses are distinguished by the content of the msg: - a type value of Request indicates a request from a client and other - values are considered to be responses from servers. - -******************************************************************************/ - -class RollCall : NetworkMessage -{ - enum {Request, Cache, Queue, Task} - - char[] addr; // server name & port pair - uint type; // request, cache, queue, or task server? - - /********************************************************************** - - A request from a client - - **********************************************************************/ - - this () - { - } - - /********************************************************************** - - Response from a server - - **********************************************************************/ - - this (int type) - { - this.type = type; - } - - /********************************************************************** - - Freeze the content - - **********************************************************************/ - - void read (IReader input) - { - super.read (input); - input (addr) (type); - } - - /********************************************************************** - - Defrost the content - - **********************************************************************/ - - void write (IWriter output) - { - super.write (output); - output (addr) (type); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/TaskServer.d --- a/tango/tango/net/cluster/tina/TaskServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.TaskServer; - -private import tango.net.cluster.tina.RollCall, - tango.net.cluster.tina.TaskThread, - tango.net.cluster.tina.ClusterServer; - -/****************************************************************************** - - Extends the ClusterServer to glue cluster-rpc support together - -******************************************************************************/ - -class TaskServer : ClusterServer -{ - /********************************************************************** - - Construct this server with the requisite attributes. The - 'bind' address is the local address we'll be listening on - - **********************************************************************/ - - this (InternetAddress bind, Logger logger) - { - super ("task", bind, logger); - } - - /********************************************************************** - - Start the server - - **********************************************************************/ - - override void start (bool reuse=false) - { - super.start (new RollCall(RollCall.Task), reuse); - } - - /********************************************************************** - - Factory method for servicing a request. We just create - a new TaskThread to handle requests from the client. - The thread does not exit until the socket connection is - broken by the client, or some other exception occurs. - - **********************************************************************/ - - override void service (IConduit conduit) - { - (new TaskThread (this, conduit, cluster)).execute; - } -} - - - -version (TaskServer) -{ - import tango.io.Console; - - import tango.net.cluster.tina.CmdParser; - - void main (char[][] args) - { - auto arg = new CmdParser ("task.server"); - - if (args.length > 1) - arg.parse (args[1..$]); - - if (arg.help) - Cout ("usage: taskserver -port=number -log[=trace, info, warn, error, fatal, none]").newline; - else - (new TaskServer(new InternetAddress(arg.port), arg.log)).start; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/TaskThread.d --- a/tango/tango/net/cluster/tina/TaskThread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: July 2004: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.TaskThread; - -private import tango.core.Exception; - -private import tango.net.cluster.NetworkRegistry; - -private import tango.net.cluster.tina.ClusterThread; - -/****************************************************************************** - - Thread for handling remote-call requests. - -******************************************************************************/ - -class TaskThread : ClusterThread -{ - private NetworkRegistry registry; - - /********************************************************************** - - Note that the conduit stays open until the client kills it - - **********************************************************************/ - - this (AbstractServer server, IConduit conduit, Cluster cluster) - { - super (server, conduit, cluster); - - // clone the registry so that we have our own set of - // message templates to act as hosts. This eliminates - // allocating hosts on the fly - registry = NetworkRegistry.shared.dup; - } - - /********************************************************************** - - process client requests - - **********************************************************************/ - - void dispatch () - { - ProtocolWriter.Command cmd; - char[] channel; - char[] element; - - // wait for request to arrive - if (reader.getHeader (cmd, channel, element)) - { - // convert to a task. Note that we use a private set of - // msg templates, so we don't collide with other threads - auto task = reader.thaw (registry); - - if (task is null) - throw new IllegalArgumentException ("Remote-call instance is not executable"); - - switch (cmd) - { - case ProtocolWriter.Command.Call: - logger.trace (sprint ("{} executing remote call '{}'", client, task.toString)); - task.execute; - - writer.put (ProtocolWriter.Command.OK, channel, element, task); - break; - - default: - throw new IllegalArgumentException ("invalid command"); - } - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/util/AbstractServer.d --- a/tango/tango/net/cluster/tina/util/AbstractServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.util.AbstractServer; - -private import tango.net.Socket; - -protected import tango.util.log.Log; - -protected import tango.net.ServerSocket, - tango.net.SocketConduit; - -protected import tango.io.model.IConduit; - -protected import tango.text.convert.Sprint; - -protected import tango.net.cluster.tina.util.model.IServer; - -/****************************************************************************** - - Exposes the foundation of a multi-threaded Socket server. This is - subclassed by mango.net.http.server.HttpServer, which itself would - likely be subclassed by a SecureHttpServer. - -******************************************************************************/ - -class AbstractServer : IServer -{ - private InternetAddress bind; - private ServerSocket server; - private Logger logger; - private Sprint!(char) sprint; - private uint threads; - private uint backlog; - - /********************************************************************** - - Setup this server with the requisite attributes. The number - of threads specified dictate exactly that. You might have - anything between 1 thread and several hundred, dependent - upon the underlying O/S and hardware. - - Parameter 'backlog' specifies the max number of"simultaneous" - connection requests to be handled by an underlying socket - implementation. - - **********************************************************************/ - - this (InternetAddress bind, int threads, int backlog, Logger logger) - in { - assert (bind); - assert (logger); - assert (backlog >= 0); - assert (threads > 0 && threads < 256); - } - body - { - this.bind = bind; - this.logger = logger; - this.threads = threads; - this.backlog = backlog; - this.sprint = new Sprint!(char); - } - - /********************************************************************** - - Concrete server must expose a name - - **********************************************************************/ - - protected abstract char[] toString(); - - /********************************************************************** - - Concrete server must expose a ServerSocket factory - - **********************************************************************/ - - protected abstract ServerSocket createSocket (InternetAddress bind, int backlog, bool reuse=false); - - /********************************************************************** - - Concrete server must expose a thread factory - - **********************************************************************/ - - protected abstract void createThread (ServerSocket socket); - - /********************************************************************** - - Concrete server must expose a service handler - - **********************************************************************/ - - abstract void service (IConduit conduit); - - /********************************************************************** - - Provide support for figuring out the remote address - - **********************************************************************/ - - IPv4Address remoteAddress (IConduit conduit) - { - auto tmp = cast(SocketConduit) conduit; - if (tmp) - return cast(IPv4Address) tmp.socket.remoteAddress; - return null; - } - - /********************************************************************** - - Provide support for figuring out the remote address - - **********************************************************************/ - - IPv4Address localAddress () - { - return cast(IPv4Address) server.socket.localAddress; - } - - /********************************************************************** - - Provide support for figuring out the remote address - - **********************************************************************/ - - char[] getRemoteAddress (IConduit conduit) - { - auto addr = remoteAddress (conduit); - - if (addr) - return addr.toAddrString; - return "127.0.0.1"; - } - - /********************************************************************** - - Provide support for figuring out the remote host. Not - currently implemented. - - **********************************************************************/ - - char[] getRemoteHost (IConduit conduit) - { - return null; - } - - /********************************************************************** - - Return the local port we're attached to - - **********************************************************************/ - - int getPort () - { - return localAddress.port; - } - - /********************************************************************** - - Return the local address we're attached to - - **********************************************************************/ - - char[] getHost () - { - return localAddress.toAddrString; - } - - /********************************************************************** - - Return the logger associated with this server - - **********************************************************************/ - - Logger getLogger () - { - return logger; - } - - /********************************************************************** - - Start this server - - **********************************************************************/ - - void start (bool reuse = false) - { - // have the subclass create a ServerSocket for us - server = createSocket (bind, backlog, reuse); - - // instantiate and start all threads - for (auto i=threads; i-- > 0;) - createThread (server); - - // indicate what's going on - logger.info (sprint ("Server {} started on {} with {} accept threads and {} backlogs", - this, localAddress, threads, backlog)); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/util/ServerThread.d --- a/tango/tango/net/cluster/tina/util/ServerThread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.util.ServerThread; - -private import tango.core.Thread, - tango.core.Runtime, - tango.core.Exception; - -private import tango.net.ServerSocket; - -private import tango.net.cluster.tina.util.AbstractServer; - -/****************************************************************************** - - Subclasses Thread to provide the basic server-thread loop. This - functionality could also be implemented as a delegate, however, - we also wish to subclass in order to add thread-local data (see - HttpThread). - -******************************************************************************/ - -class ServerThread -{ - private AbstractServer server; - private ServerSocket socket; - - /********************************************************************** - - Construct a ServerThread for the given Server, upon the - specified socket - - **********************************************************************/ - - this (AbstractServer server, ServerSocket socket) - { - this.server = server; - this.socket = socket; - (new Thread (&run)).start; - } - - /********************************************************************** - - Execute this thread until the Server says to halt. Each - thread waits in the socket.accept() state, waiting for - a connection request to arrive. Upon selection, a thread - dispatches the request via the request service-handler - and, upon completion, enters the socket.accept() state - once more. - - **********************************************************************/ - - private void run () - { - while (Runtime.isHalting is false) - try { - // wait for a socket connection - auto sc = socket.accept; - - // did we get a valid response? - if (sc) - // yep - process this request - server.service (sc); - else - // server may be halting ... - if (socket.isAlive) - server.getLogger.error ("Socket.accept failed"); - - } catch (IOException x) - server.getLogger.error ("IOException: "~x.toString); - - catch (Object x) - server.getLogger.fatal ("Exception: "~x.toString); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/cluster/tina/util/model/IServer.d --- a/tango/tango/net/cluster/tina/util/model/IServer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,64 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.cluster.tina.util.model.IServer; - -private import tango.io.model.IConduit; - -/****************************************************************************** - - Contract to be fulfilled by all Mango servers. - -******************************************************************************/ - -interface IServer -{ - /********************************************************************** - - Provide support for figuring out the remote address - - **********************************************************************/ - - char[] getRemoteAddress (IConduit conduit); - - /********************************************************************** - - Provide support for figuring out the remote host. - - **********************************************************************/ - - char[] getRemoteHost (IConduit conduit); - - /********************************************************************** - - Return the protocol in use. - - **********************************************************************/ - - char[] getProtocol(); - - /********************************************************************** - - Return the local port we're attached to - - **********************************************************************/ - - int getPort(); - - /********************************************************************** - - Return the local address we're attached to - - **********************************************************************/ - - char[] getHost(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/ftp/FtpClient.d --- a/tango/tango/net/ftp/FtpClient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1922 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 UWB. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: June 2006 - - author: UWB - -*******************************************************************************/ - -module tango.net.ftp.FtpClient; - -private import tango.net.Socket; - -private import tango.net.ftp.Telnet; - -private import tango.time.Clock; - -private import tango.io.Conduit, - tango.io.GrowBuffer, - tango.io.FileConduit; - -private import tango.time.chrono.Gregorian; - -private import Text = tango.text.Util; - -private import Ascii = tango.text.Ascii; - -private import Regex = tango.text.Regex; - -private import Integer = tango.text.convert.Integer; - -private import Timestamp = tango.text.convert.TimeStamp; - - -/// An FTP progress delegate. -/// -/// You may need to add the restart position to this, and use SIZE to determine -/// percentage completion. This only represents the number of bytes -/// transferred. -/// -/// Params: -/// pos = the current offset into the stream -alias void delegate(in size_t pos) FtpProgress; - -/// The format of data transfer. -enum FtpFormat -{ - /// Indicates ASCII NON PRINT format (line ending conversion to CRLF.) - ascii, - /// Indicates IMAGE format (8 bit binary octets.) - image, -} - -/// A server response, consisting of a code and a potentially multi-line message. -struct FtpResponse -{ - /// The response code. - /// - /// The digits in the response code can be used to determine status - /// programatically. - /// - /// First Digit (status): - /// 1xx = a positive, but preliminary, reply - /// 2xx = a positive reply indicating completion - /// 3xx = a positive reply indicating incomplete status - /// 4xx = a temporary negative reply - /// 5xx = a permanent negative reply - /// - /// Second Digit (subject): - /// x0x = condition based on syntax - /// x1x = informational - /// x2x = connection - /// x3x = authentication/process - /// x5x = file system - char[3] code = "000"; - - /// The message from the server. - /// - /// With some responses, the message may contain parseable information. - /// For example, this is true of the 257 response. - char[] message = null; -} - -/// Active or passive connection mode. -enum FtpConnectionType -{ - /// Active - server connects to client on open port. - active, - /// Passive - server listens for a connection from the client. - passive, -} - -/// Detail about the data connection. -/// -/// This is used to properly send PORT and PASV commands. -struct FtpConnectionDetail -{ - /// The type to be used. - FtpConnectionType type = FtpConnectionType.passive; - - /// The address to give the server. - Address address = null; - - /// The address to actually listen on. - Address listen = null; -} - -/// A supported feature of an FTP server. -struct FtpFeature -{ - /// The command which is supported, e.g. SIZE. - char[] command = null; - /// Parameters for this command; e.g. facts for MLST. - char[] params = null; -} - -/// The type of a file in an FTP listing. -enum FtpFileType -{ - /// An unknown file or type (no type fact.) - unknown, - /// A regular file, or similar. - file, - /// The current directory (e.g. ., but not necessarily.) - cdir, - /// A parent directory (usually "..".) - pdir, - /// Any other type of directory. - dir, - /// Another type of file. Consult the "type" fact. - other, -} - -/// Information about a file in an FTP listing. -struct FtpFileInfo -{ - /// The filename. - char[] name = null; - /// Its type. - FtpFileType type = FtpFileType.unknown; - /// Size in bytes (8 bit octets), or -1 if not available. - long size = -1; - /// Modification time, if available. - Time modify = Time.max; - /// Creation time, if available (not often.) - Time create = Time.max; - /// The file's mime type, if known. - char[] mime = null; - /// An associative array of all facts returned by the server, lowercased. - char[][char[]] facts; -} - -/// A connection to an FTP server. -/// -/// Example: -/// ---------- -/// auto ftp = new FTPConnection("hostname", "user", "pass",21); -/// -/// ftp.mkdir("test"); -/// ftp.close(); -/// ---------- -/// -/// Standards: RFC 959, RFC 2228, RFC 2389, RFC 2428 -/// -/// Bugs: -/// Does not support several uncommon FTP commands and responses. - - -class FTPConnection : Telnet -{ - /// Supported features (if known.) - /// - /// This will be empty if not known, or else contain at least FEAT. - public FtpFeature[] supported_features = null; - - /// Data connection information. - protected FtpConnectionDetail data_info; - - /// The last-set restart position. - /// - /// This is only used when a local file is used for a RETR or STOR. - protected size_t restart_pos = 0; - - /// error handler - protected void exception (char[] msg) - { - throw new FTPException ("Exception: " ~ msg); - } - - /// ditto - protected void exception (FtpResponse r) - { - throw new FTPException (r); - } - - /// Construct an FTPConnection without connecting immediately. - public this() - { - } - - /// Connect to an FTP server with a username and password. - /// - /// Params: - /// hostname = the hostname or IP address to connect to - /// port = the port number to connect to - /// username = username to be sent - /// password = password to be sent, if requested - public this(char[] hostname, char[] username, char[] password, int port = 21) - { - this.connect(hostname, username, password,port); - } - - /// Connect to an FTP server with a username and password. - /// - /// Params: - /// hostname = the hostname or IP address to connect to - /// port = the port number to connect to - /// username = username to be sent - /// password = password to be sent, if requested - public void connect(char[] hostname, char[] username, char[] password, int port = 21) - in - { - // We definitely need a hostname and port. - assert (hostname.length > 0); - assert (port > 0); - } - body - { - // Close any active connection. - - if (this.socket !is null) - this.close(); - - - // Connect to whichever FTP server responds first. - this.findAvailableServer(hostname, port); - - this.socket.blocking = false; - - scope (failure) - { - this.close(); - } - - // The welcome message should always be a 220. 120 and 421 are considered errors. - this.readResponse("220"); - - if (username.length == 0) - return; - - // Send the username. Anything but 230, 331, or 332 is basically an error. - this.sendCommand("USER", username); - auto response = this.readResponse(); - - // 331 means username okay, please proceed with password. - if (response.code == "331") - { - this.sendCommand("PASS", password); - response = this.readResponse(); - } - - // We don't support ACCT (332) so we should get a 230 here. - if (response.code != "230" && response.code != "202") - { - - exception (response); - } - - } - - /// Close the connection to the server. - public void close() - { - assert (this.socket !is null); - - // Don't even try to close it if it's not open. - if (this.socket !is null) - { - try - { - this.sendCommand("QUIT"); - this.readResponse("221"); - } - // Ignore if the above could not be completed. - catch (FTPException) - { - } - - // Shutdown the socket... - this.socket.shutdown(SocketShutdown.BOTH); - this.socket.detach(); - - // Clear out everything. - delete this.supported_features; - delete this.socket; - } - } - - /// Set the connection to use passive mode for data tranfers. - /// - /// This is the default. - public void setPassive() - { - this.data_info.type = FtpConnectionType.passive; - - delete this.data_info.address; - delete this.data_info.listen; - } - - /// Set the connection to use active mode for data transfers. - /// - /// This may not work behind firewalls. - /// - /// Params: - /// ip = the ip address to use - /// port = the port to use - /// listen_ip = the ip to listen on, or null for any - /// listen_port = the port to listen on, or 0 for the same port - public void setActive(char[] ip, ushort port, char[] listen_ip = null, ushort listen_port = 0) - in - { - assert (ip.length > 0); - assert (port > 0); - } - body - { - this.data_info.type = FtpConnectionType.active; - this.data_info.address = new IPv4Address(ip, port); - - // A local-side port? - if (listen_port == 0) - listen_port = port; - - // Any specific IP to listen on? - if (listen_ip == null) - this.data_info.listen = new IPv4Address(IPv4Address.ADDR_ANY, listen_port); - else - this.data_info.listen = new IPv4Address(listen_ip, listen_port); - } - - - /// Change to the specified directory. - public void cd(char[] dir) - in - { - assert (dir.length > 0); - } - body - { - this.sendCommand("CWD", dir); - this.readResponse("250"); - } - - /// Change to the parent of this directory. - public void cdup() - { - this.sendCommand("CDUP"); - this.readResponse("200"); - } - - /// Determine the current directory. - /// - /// Returns: the current working directory - public char[] cwd() - { - this.sendCommand("PWD"); - auto response = this.readResponse("257"); - - return this.parse257(response); - } - - /// Change the permissions of a file. - /// - /// This is a popular feature of most FTP servers, but not explicitly outlined - /// in the spec. It does not work on, for example, Windows servers. - /// - /// Params: - /// path = the path to the file to chmod - /// mode = the desired mode; expected in octal (0777, 0644, etc.) - public void chmod(char[] path, int mode) - in - { - assert (path.length > 0); - assert (mode >= 0 && (mode >> 16) == 0); - } - body - { - char[] tmp = "000"; - // Convert our octal parameter to a string. - Integer.format(tmp, cast(long) mode, Integer.Style.Octal); - this.sendCommand("SITE CHMOD", tmp, path); - this.readResponse("200"); - } - - /// Remove a file or directory. - /// - /// Params: - /// path = the path to the file or directory to delete - public void del(char[] path) - in - { - assert (path.length > 0); - } - body - { - this.sendCommand("DELE", path); - auto response = this.readResponse(); - - // Try it as a directory, then...? - if (response.code != "250") - this.rm(path); - } - - /// Remove a directory. - /// - /// Params: - /// path = the directory to delete - public void rm(char[] path) - in - { - assert (path.length > 0); - } - body - { - this.sendCommand("RMD", path); - this.readResponse("250"); - } - - /// Rename/move a file or directory. - /// - /// Params: - /// old_path = the current path to the file - /// new_path = the new desired path - public void rename(char[] old_path, char[] new_path) - in - { - assert (old_path.length > 0); - assert (new_path.length > 0); - } - body - { - // Rename from... rename to. Pretty simple. - this.sendCommand("RNFR", old_path); - this.readResponse("350"); - - this.sendCommand("RNTO", new_path); - this.readResponse("250"); - } - - /// Determine the size in bytes of a file. - /// - /// This size is dependent on the current type (ASCII or IMAGE.) - /// - /// Params: - /// path = the file to retrieve the size of - /// format = what format the size is desired in - public size_t size(char[] path, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - } - body - { - this.type(format); - - this.sendCommand("SIZE", path); - auto response = this.readResponse("213"); - - // Only try to parse the numeric bytes of the response. - size_t end_pos = 0; - while (end_pos < response.message.length) - { - if (response.message[end_pos] < '0' || response.message[end_pos] > '9') - break; - end_pos++; - } - - return toInt(response.message[0 .. end_pos]); - } - - /// Send a command and process the data socket. - /// - /// This opens the data connection and checks for the appropriate response. - /// - /// Params: - /// command = the command to send (e.g. STOR) - /// parameters = any arguments to send - /// - /// Returns: the data socket - public Socket processDataCommand(char[] command, char[][] parameters ...) - { - // Create a connection. - Socket data = this.getDataSocket(); - scope (failure) - { - // Close the socket, whether we were listening or not. - data.shutdown(SocketShutdown.BOTH); - data.detach(); - } - - // Tell the server about it. - this.sendCommand(command, parameters); - - // We should always get a 150/125 response. - auto response = this.readResponse(); - if (response.code != "150" && response.code != "125") - exception (response); - - // We might need to do this for active connections. - this.prepareDataSocket(data); - - return data; - } - - /// Clean up after the data socket and process the response. - /// - /// This closes the socket and reads the 226 response. - /// - /// Params: - /// data = the data socket - public void finishDataCommand(Socket data) - { - // Close the socket. This tells the server we're done (EOF.) - data.shutdown(SocketShutdown.BOTH); - data.detach(); - - // We shouldn't get a 250 in STREAM mode. - this.readResponse("226"); - } - - /// Get a data socket from the server. - /// - /// This sends PASV/PORT as necessary. - /// - /// Returns: the data socket or a listener - protected Socket getDataSocket() - { - // What type are we using? - switch (this.data_info.type) - { - default: - exception ("unknown connection type"); - - // Passive is complicated. Handle it in another member. - case FtpConnectionType.passive: - return this.connectPassive(); - - // Active is simpler, but not as fool-proof. - case FtpConnectionType.active: - IPv4Address data_addr = cast(IPv4Address) this.data_info.address; - - // Start listening. - Socket listener = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); - listener.bind(this.data_info.listen); - listener.listen(32); - - // Use EPRT if we know it's supported. - if (this.is_supported("EPRT")) - { - char[64] tmp = void; - - this.sendCommand("EPRT", Text.layout(tmp, "|1|%0|%1|", data_addr.toAddrString, data_addr.toPortString)); - // this.sendCommand("EPRT", format("|1|%s|%s|", data_addr.toAddrString(), data_addr.toPortString())); - this.readResponse("200"); - } - else - { - int h1, h2, h3, h4, p1, p2; - h1 = (data_addr.addr() >> 24) % 256; - h2 = (data_addr.addr() >> 16) % 256; - h3 = (data_addr.addr() >> 8_) % 256; - h4 = (data_addr.addr() >> 0_) % 256; - p1 = (data_addr.port() >> 8_) % 256; - p2 = (data_addr.port() >> 0_) % 256; - - // low overhead method to format a numerical string - char[64] tmp = void; - char[20] foo = void; - auto str = Text.layout (tmp, "%0,%1,%2,%3,%4,%5", - Integer.format(foo[0..3], h1), - Integer.format(foo[3..6], h2), - Integer.format(foo[6..9], h3), - Integer.format(foo[9..12], h4), - Integer.format(foo[12..15], p1), - Integer.format(foo[15..18], p2)); - - // This formatting is weird. - // this.sendCommand("PORT", format("%d,%d,%d,%d,%d,%d", h1, h2, h3, h4, p1, p2)); - - this.sendCommand("PORT", str); - this.readResponse("200"); - } - - return listener; - } - assert (false); - } - - /// Prepare a data socket for use. - /// - /// This modifies the socket in some cases. - /// - /// Params: - /// data = the data listener socket - protected void prepareDataSocket(inout Socket data) - { - switch (this.data_info.type) - { - default: - exception ("unknown connection type"); - - case FtpConnectionType.active: - Socket new_data = null; - - SocketSet set = new SocketSet(); - scope (exit) - delete set; - - // At end_time, we bail. - Time end_time = Clock.now + this.timeout; - - while (Clock.now < end_time) - { - set.reset(); - set.add(data); - - // Can we accept yet? - int code = Socket.select(set, null, null, this.timeout); - if (code == -1 || code == 0) - break; - - new_data = data.accept(); - break; - } - - if (new_data is null) - throw new FTPException("CLIENT: No connection from server", "420"); - - // We don't need the listener anymore. - data.shutdown(SocketShutdown.BOTH); - data.detach(); - - // This is the actual socket. - data = new_data; - break; - - case FtpConnectionType.passive: - break; - } - } - - /// Send a PASV and initiate a connection. - /// - /// Returns: a connected socket - public Socket connectPassive() - { - Address connect_to = null; - - // SPSV, which is just a port number. - if (this.is_supported("SPSV")) - { - this.sendCommand("SPSV"); - auto response = this.readResponse("227"); - - // Connecting to the same host. - IPv4Address remote = cast(IPv4Address) this.socket.remoteAddress(); - assert (remote !is null); - - uint address = remote.addr(); - uint port = toInt(response.message); - - connect_to = new IPv4Address(address, cast(ushort) port); - } - // Extended passive mode (IP v6, etc.) - else if (this.is_supported("EPSV")) - { - this.sendCommand("EPSV"); - auto response = this.readResponse("229"); - - // Try to pull out the (possibly not parenthesized) address. - auto r = Regex.search(response.message, `\([^0-9][^0-9][^0-9](\d+)[^0-9]\)`); - if (r is null) - throw new FTPException("CLIENT: Unable to parse address", "501"); - - IPv4Address remote = cast(IPv4Address) this.socket.remoteAddress(); - assert (remote !is null); - - uint address = remote.addr(); - uint port = toInt(r.match(1)); - - connect_to = new IPv4Address(address, cast(ushort) port); - } - else - { - this.sendCommand("PASV"); - auto response = this.readResponse("227"); - - // Try to pull out the (possibly not parenthesized) address. - auto r = Regex.search(response.message, `(\d+),\s*(\d+),\s*(\d+),\s*(\d+),\s*(\d+)(,\s*(\d+))?`); - if (r is null) - throw new FTPException("CLIENT: Unable to parse address", "501"); - - // Now put it into something std.socket will understand. - char[] address = r.match(1)~"."~r.match(2)~"."~r.match(3)~"."~r.match(4); - uint port = (toInt(r.match(5)) << 8) + (r.match(7).length > 0 ? toInt(r.match(7)) : 0); - - // Okay, we've got it! - connect_to = new IPv4Address(address, port); - } - - scope (exit) - delete connect_to; - - // This will throw an exception if it cannot connect. - auto sock = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); - sock.connect (connect_to); - return sock; - } - - /// Change the type of data transfer. - /// - /// ASCII mode implies that line ending conversion should be made. - /// Only NON PRINT is supported. - /// - /// Params: - /// type = FtpFormat.ascii or FtpFormat.image - public void type(FtpFormat format) - { - if (format == FtpFormat.ascii) - this.sendCommand("TYPE", "A"); - else - this.sendCommand("TYPE", "I"); - - this.readResponse("200"); - } - - /// Store a local file on the server. - /// - /// Calling this function will change the current data transfer format. - /// - /// Params: - /// path = the path to the remote file - /// local_file = the path to the local file - /// progress = a delegate to call with progress information - /// format = what format to send the data in - - public void put(char[] path, char[] local_file, FtpProgress progress = null, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - assert (local_file.length > 0); - } - body - { - // Open the file for reading... - auto file = new FileConduit(local_file); - scope (exit) - { - file.detach(); - delete file; - } - - // Seek to the correct place, if specified. - if (this.restart_pos > 0) - { - file.seek(this.restart_pos); - this.restart_pos = 0; - } - else - { - // Allocate space for the file, if we need to. - this.allocate(file.length); - } - - // Now that it's open, we do what we always do. - this.put(path, file, progress, format); - } - - /// Store data from a stream on the server. - /// - /// Calling this function will change the current data transfer format. - /// - /// Params: - /// path = the path to the remote file - /// stream = data to store, or null for a blank file - /// progress = a delegate to call with progress information - /// format = what format to send the data in - public void put(char[] path, InputStream stream = null, FtpProgress progress = null, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - } - body - { - // Change to the specified format. - this.type(format); - - // Okay server, we want to store something... - Socket data = this.processDataCommand("STOR", path); - - // Send the stream over the socket! - if (stream !is null) - this.sendStream(data, stream, progress); - - this.finishDataCommand(data); - } - - /// Append data to a file on the server. - /// - /// Calling this function will change the current data transfer format. - /// - /// Params: - /// path = the path to the remote file - /// stream = data to append to the file - /// progress = a delegate to call with progress information - /// format = what format to send the data in - public void append(char[] path, InputStream stream, FtpProgress progress = null, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - assert (stream !is null); - } - body - { - // Change to the specified format. - this.type(format); - - // Okay server, we want to store something... - Socket data = this.processDataCommand("APPE", path); - - // Send the stream over the socket! - this.sendStream(data, stream, progress); - - this.finishDataCommand(data); - } - - /// Seek to a byte offset for the next transfer. - /// - /// Params: - /// offset = the number of bytes to seek forward - public void restartSeek(size_t offset) - { - char[16] tmp; - this.sendCommand("REST", Integer.format (tmp, cast(long) offset)); - this.readResponse("350"); - - // Set this for later use. - this.restart_pos = offset; - } - - /// Allocate space for a file. - /// - /// After calling this, append() or put() should be the next command. - /// - /// Params: - /// bytes = the number of bytes to allocate - public void allocate(long bytes) - in - { - assert (bytes > 0); - } - body - { - char[16] tmp; - this.sendCommand("ALLO", Integer.format(tmp, bytes)); - auto response = this.readResponse(); - - // For our purposes 200 and 202 are both fine. - if (response.code != "200" && response.code != "202") - exception (response); - } - - /// Retrieve a remote file's contents into a local file. - /// - /// Calling this function will change the current data transfer format. - /// - /// Params: - /// path = the path to the remote file - /// local_file = the path to the local file - /// progress = a delegate to call with progress information - /// format = what format to read the data in - public void get(char[] path, char[] local_file, FtpProgress progress = null, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - assert (local_file.length > 0); - } - body - { - FileConduit file = null; - - // We may either create a new file... - if (this.restart_pos == 0) - file = new FileConduit (local_file, FileConduit.ReadWriteCreate); - // Or open an existing file, and seek to the specified position (read: not end, necessarily.) - else - { - file = new FileConduit (local_file, FileConduit.ReadWriteExisting); - file.seek(this.restart_pos); - - this.restart_pos = 0; - } - - scope (exit) - { - file.detach(); - delete file; - } - - // Now that it's open, we do what we always do. - this.get(path, file, progress, format); - } - - /// Retrieve a remote file's contents into a local file. - /// - /// Calling this function will change the current data transfer format. - /// - /// Params: - /// path = the path to the remote file - /// stream = stream to write the data to - /// progress = a delegate to call with progress information - /// format = what format to read the data in - public void get(char[] path, OutputStream stream, FtpProgress progress = null, FtpFormat format = FtpFormat.image) - in - { - assert (path.length > 0); - assert (stream !is null); - } - body - { - // Change to the specified format. - this.type(format); - - // Okay server, we want to get this file... - Socket data = this.processDataCommand("RETR", path); - - // Read the stream in from the socket! - this.readStream(data, stream, progress); - - this.finishDataCommand(data); - } - - /// Get information about a single file. - /// - /// Return an FtpFileInfo struct about the specified path. - /// This may not work consistently on directories (but should.) - /// - /// Params: - /// path = the file or directory to get information about - /// - /// Returns: the file information - public FtpFileInfo getFileInfo(char[] path) - in - { - assert (path.length > 0); - } - body - { - // Start assuming the MLST didn't work. - bool mlst_success = false; - FtpResponse response; - - // Check if MLST might be supported... - if (this.isSupported("MLST")) - { - this.sendCommand("MLST", path); - response = this.readResponse(); - - // If we know it was supported for sure, this is an error. - if (this.is_supported("MLST")) - exception (response); - // Otherwise, it probably means we need to try a LIST. - else - mlst_success = response.code == "250"; - } - - // Okay, we got the MLST response... parse it. - if (mlst_success) - { - char[][] lines = Text.splitLines (response.message); - - // We need at least 3 lines - first and last and header/footer lines. - // Note that more than 3 could be returned; e.g. multiple lines about the one file. - if (lines.length <= 2) - throw new FTPException("CLIENT: Bad MLST response from server", "501"); - - // Return the first line's information. - return parseMlstLine(lines[1]); - } - else - { - // Send a list command. This may list the contents of a directory, even. - FtpFileInfo[] temp = this.sendListCommand(path); - - // If there wasn't at least one line, the file didn't exist? - // We should have already handled that. - if (temp.length < 1) - throw new FTPException("CLIENT: Bad LIST response from server", "501"); - - // If there are multiple lines, try to return the correct one. - if (temp.length != 1) - foreach (FtpFileInfo info; temp) - { - if (info.type == FtpFileType.cdir) - return info; - } - - // Okay then, the first line. Best we can do? - return temp[0]; - } - } - - /// Get a listing of a directory's contents. - /// - /// Don't end path in a /. Blank means the current directory. - /// - /// Params: - /// path = the directory to list - /// - /// Returns: an array of the contents - public FtpFileInfo[] ls(char[] path = "") // default to current dir - in - { - assert (path.length == 0 || path[path.length - 1] != '/'); - } - body - { - FtpFileInfo[] dir; - - // We'll try MLSD (which is so much better) first... but it may fail. - bool mlsd_success = false; - Socket data = null; - - // Try it if it could/might/maybe is supported. - if (this.isSupported("MLST")) - { - mlsd_success = true; - - // Since this is a data command, processDataCommand handles - // checking the response... just catch its Exception. - try - { - if (path.length > 0) - data = this.processDataCommand("MLSD", path); - else - data = this.processDataCommand("MLSD"); - } - catch (FTPException) - mlsd_success = false; - } - - // If it passed, parse away! - if (mlsd_success) - { - auto listing = new GrowBuffer; - this.readStream(data, listing); - this.finishDataCommand(data); - - // Each line is something in that directory. - char[][] lines = Text.splitLines (cast(char[]) listing.slice()); - scope (exit) - delete lines; - - foreach (char[] line; lines) - { - // Parse each line exactly like MLST does. - FtpFileInfo info = this.parseMlstLine(line); - if (info.name.length > 0) - dir ~= info; - } - - return dir; - } - // Fall back to LIST. - else - return this.sendListCommand(path); - } - - /// Send a LIST command to determine a directory's content. - /// - /// The format of a LIST response is not guaranteed. If available, - /// MLSD should be used instead. - /// - /// Params: - /// path = the file or directory to list - /// - /// Returns: an array of the contents - protected FtpFileInfo[] sendListCommand(char[] path) - { - FtpFileInfo[] dir; - Socket data = null; - - if (path.length > 0) - data = this.processDataCommand("LIST", path); - else - data = this.processDataCommand("LIST"); - - // Read in the stupid non-standardized response. - auto listing = new GrowBuffer; - this.readStream(data, listing); - this.finishDataCommand(data); - - // Split out the lines. Most of the time, it's one-to-one. - char[][] lines = Text.splitLines (cast(char[]) listing.slice()); - scope (exit) - delete lines; - - foreach (char[] line; lines) - { - // If there are no spaces, or if there's only one... skip the line. - // This is probably like a "total 8" line. - if (Text.locate(line, ' ') == Text.locatePrior(line, ' ')) - continue; - - // Now parse the line, or try to. - FtpFileInfo info = this.parseListLine(line); - if (info.name.length > 0) - dir ~= info; - } - - return dir; - } - - /// Parse a LIST response line. - /// - /// The format here isn't even specified, so we have to try to detect - /// commmon ones. - /// - /// Params: - /// line = the line to parse - /// - /// Returns: information about the file - protected FtpFileInfo parseListLine(char[] line) - { - FtpFileInfo info; - size_t pos = 0; - - // Convenience function to parse a word from the line. - char[] parse_word() - { - size_t start = 0, end = 0; - - // Skip whitespace before. - while (pos < line.length && line[pos] == ' ') - pos++; - - start = pos; - while (pos < line.length && line[pos] != ' ') - pos++; - end = pos; - - // Skip whitespace after. - while (pos < line.length && line[pos] == ' ') - pos++; - - return line[start .. end]; - } - - // We have to sniff this... :/. - switch (! Text.contains ("0123456789", line[0])) - { - // Not a number; this is UNIX format. - case true: - // The line must be at least 20 characters long. - if (line.length < 20) - return info; - - // The first character tells us what it is. - if (line[0] == 'd') - info.type = FtpFileType.dir; - else if (line[0] == '-') - info.type = FtpFileType.file; - else - info.type = FtpFileType.unknown; - - // Parse out the mode... rwxrwxrwx = 777. - char[] unix_mode = "0000".dup; - void read_mode(int digit) - { - for (pos = 1 + digit * 3; pos <= 3 + digit * 3; pos++) - { - if (line[pos] == 'r') - unix_mode[digit + 1] |= 4; - else if (line[pos] == 'w') - unix_mode[digit + 1] |= 2; - else if (line[pos] == 'x') - unix_mode[digit + 1] |= 1; - } - } - - // This makes it easier, huh? - read_mode(0); - read_mode(1); - read_mode(2); - - info.facts["UNIX.mode"] = unix_mode; - - // Links, owner, group. These are hard to translate to MLST facts. - parse_word(); - parse_word(); - parse_word(); - - // Size in bytes, this one is good. - info.size = toLong(parse_word()); - - // Make sure we still have enough space. - if (pos + 13 >= line.length) - return info; - - // Not parsing date for now. It's too weird (last 12 months, etc.) - pos += 13; - - info.name = line[pos .. line.length]; - break; - - // A number; this is DOS format. - case false: - // We need some data here, to parse. - if (line.length < 18) - return info; - - // The order is 1 MM, 2 DD, 3 YY, 4 HH, 5 MM, 6 P - auto r = Regex.search(line, `(\d\d)-(\d\d)-(\d\d)\s+(\d\d):(\d\d)(A|P)M`); - if (r is null) - return info; - - if (Timestamp.dostime (r.match(0), info.modify) is 0) - info.modify = Time.max; - - pos = r.match(0).length; - delete r; - - // This will either be , or a number. - char[] dir_or_size = parse_word(); - - if (dir_or_size.length < 0) - return info; - else if (dir_or_size[0] == '<') - info.type = FtpFileType.dir; - else - info.size = toLong(dir_or_size); - - info.name = line[pos .. line.length]; - break; - - // Something else, not supported. - default: - throw new FTPException("CLIENT: Unsupported LIST format", "501"); - } - - // Try to fix the type? - if (info.name == ".") - info.type = FtpFileType.cdir; - else if (info.name == "..") - info.type = FtpFileType.pdir; - - return info; - } - - /// Parse an MLST/MLSD response line. - /// - /// The format here is very rigid, and has facts followed by a filename. - /// - /// Params: - /// line = the line to parse - /// - /// Returns: information about the file - protected FtpFileInfo parseMlstLine(char[] line) - { - FtpFileInfo info; - - // After this loop, filename_pos will be location of space + 1. - size_t filename_pos = 0; - while (filename_pos < line.length && line[filename_pos++] != ' ') - continue; - - if (filename_pos == line.length) - throw new FTPException("CLIENT: Bad syntax in MLSx response", "501"); - - info.name = line[filename_pos .. line.length]; - - // Everything else is frosting on top. - if (filename_pos > 1) - { - char[][] temp_facts = Text.delimit(line[0 .. filename_pos - 1], ";"); - - // Go through each fact and parse them into the array. - foreach (char[] fact; temp_facts) - { - int pos = Text.locate(fact, '='); - if (pos == fact.length) - continue; - - info.facts[Ascii.toLower(fact[0 .. pos])] = fact[pos + 1 .. fact.length]; - } - - // Do we have a type? - if ("type" in info.facts) - { - // Some reflection might be nice here. - switch (Ascii.toLower(info.facts["type"])) - { - case "file": - info.type = FtpFileType.file; - break; - - case "cdir": - info.type = FtpFileType.cdir; - break; - - case "pdir": - info.type = FtpFileType.pdir; - break; - - case "dir": - info.type = FtpFileType.dir; - break; - - default: - info.type = FtpFileType.other; - } - } - - // Size, mime, etc... - if ("size" in info.facts) - info.size = toLong(info.facts["size"]); - if ("media-type" in info.facts) - info.mime = info.facts["media-type"]; - - // And the two dates. - if ("modify" in info.facts) - info.modify = this.parseTimeval(info.facts["modify"]); - if ("create" in info.facts) - info.create = this.parseTimeval(info.facts["create"]); - } - - return info; - } - - /// Parse a timeval from an FTP response. - /// - /// This is basically an ISO 8601 date, but even more rigid. - /// - /// Params: - /// timeval = the YYYYMMDDHHMMSS date - /// - /// Returns: a d_time representing the same date - - protected Time parseTimeval(char[] timeval) - { - if (timeval.length < 14) - throw new FTPException("CLIENT: Unable to parse timeval", "501"); - - return Gregorian.generic.toTime (Integer.atoi (timeval[0..4]), - Integer.atoi (timeval[4..6]), - Integer.atoi (timeval[6..8]), - Integer.atoi (timeval[8..10]), - Integer.atoi (timeval[10..12]), - Integer.atoi (timeval[12..14])); - } - - /// Get the modification time of a file. - /// - /// Not supported by a lot of servers. - /// - /// Params: - /// path = the file or directory in question - /// - /// Returns: a d_time representing the mtime - public Time filemtime(char[] path) - in - { - assert (path.length > 0); - } - body - { - this.sendCommand("MDTM", path); - auto response = this.readResponse("213"); - - // The whole response should be a timeval. - return this.parseTimeval(response.message); - } - - /// Create a directory. - /// - /// Depending on server model, a cwd with the same path may not work. - /// Use the return value instead to escape this problem. - /// - /// Params: - /// path = the directory to create - /// - /// Returns: the path to the directory created - public char[] mkdir(char[] path) - in - { - assert (path.length > 0); - } - body - { - this.sendCommand("MKD", path); - auto response = this.readResponse("257"); - - return this.parse257(response); - } - - /// Get supported features from the server. - /// - /// This may not be supported, in which case the list will remain empty. - /// Otherwise, it will contain at least FEAT. - public void getFeatures() - { - this.sendCommand("FEAT"); - auto response = this.readResponse(); - - // 221 means FEAT is supported, and a list follows. Otherwise we don't know... - if (response.code != "211") - delete this.supported_features; - else - { - char[][] lines = Text.splitLines (response.message); - - // There are two more lines than features, but we also have FEAT. - this.supported_features = new FtpFeature[lines.length - 1]; - this.supported_features[0].command = "FEAT"; - - for (size_t i = 1; i < lines.length - 1; i++) - { - size_t pos = Text.locate(lines[i], ' '); - - this.supported_features[i].command = lines[i][0 .. pos]; - if (pos < lines[i].length - 1) - this.supported_features[i].params = lines[i][pos + 1 .. lines[i].length]; - } - - delete lines; - } - } - - /// Check if a specific feature might be supported. - /// - /// Example: - /// ---------- - /// if (ftp.isSupported("SIZE")) - /// size = ftp.size("example.txt"); - /// ---------- - /// - /// Params: - /// command = the command in question - public bool isSupported(char[] command) - in - { - assert (command.length > 0); - } - body - { - if (this.supported_features.length == 0) - return true; - - // Search through the list for the feature. - foreach (FtpFeature feat; this.supported_features) - { - if (Ascii.icompare(feat.command, command) == 0) - return true; - } - - return false; - } - - /// Check if a specific feature is known to be supported. - /// - /// Example: - /// ---------- - /// if (ftp.is_supported("SIZE")) - /// size = ftp.size("example.txt"); - /// ---------- - /// - /// Params: - /// command = the command in question - public bool is_supported(char[] command) - { - if (this.supported_features.length == 0) - return false; - - return this.isSupported(command); - } - - /// Send a site-specific command. - /// - /// The command might be WHO, for example, returning a list of users online. - /// These are typically heavily server-specific. - /// - /// Params: - /// command = the command to send (after SITE) - /// parameters = any additional parameters to send - /// (each will be prefixed by a space) - public FtpResponse siteCommand(char[] command, char[][] parameters ...) - in - { - assert (command.length > 0); - } - body - { - // Because of the way sendCommand() works, we have to tweak this a bit. - char[][] temp_params = new char[][parameters.length + 1]; - temp_params[0] = command; - temp_params[1 .. temp_params.length][] = parameters; - - this.sendCommand("SITE", temp_params); - auto response = this.readResponse(); - - // Check to make sure it didn't fail. - if (response.code[0] != '2') - exception (response); - - return response; - } - - /// Send a NOOP, typically used to keep the connection alive. - public void noop() - { - this.sendCommand("NOOP"); - this.readResponse("200"); - } - - /// Send the stream to the server. - /// - /// Params: - /// data = the socket to write to - /// stream = the stream to read from - /// progress = a delegate to call with progress information - - protected void sendStream(Socket data, InputStream stream, FtpProgress progress = null) - in - { - assert (data !is null); - assert (stream !is null); - } - body - { - // Set up a SocketSet so we can use select() - it's pretty efficient. - SocketSet set = new SocketSet(); - scope (exit) - delete set; - - // At end_time, we bail. - Time end_time = Clock.now + this.timeout; - - // This is the buffer the stream data is stored in. - ubyte[8 * 1024] buf; - size_t buf_size = 0, buf_pos = 0; - int delta = 0; - - size_t pos = 0; - bool completed = false; - while (!completed && Clock.now < end_time) - { - set.reset(); - set.add(data); - - // Can we write yet, can we write yet? - int code = Socket.select(null, set, null, this.timeout); - if (code == -1 || code == 0) - break; - - if (buf_size - buf_pos <= 0) - { - if ((buf_size = stream.read(buf)) is stream.Eof) - buf_size = 0, completed = true; - buf_pos = 0; - } - - // Send the chunk (or as much of it as possible!) - delta = data.send(buf[buf_pos .. buf_size]); - if (delta == data.ERROR) - break; - - buf_pos += delta; - - pos += delta; - if (progress !is null) - progress(pos); - - // Give it more time as long as data is going through. - if (delta != 0) - end_time = Clock.now + this.timeout; - } - - // Did all the data get sent? - if (!completed) - throw new FTPException("CLIENT: Timeout when sending data", "420"); - } - - /// Reads from the server to a stream until EOF. - /// - /// Params: - /// data = the socket to read from - /// stream = the stream to write to - /// progress = a delegate to call with progress information - protected void readStream(Socket data, OutputStream stream, FtpProgress progress = null) - in - { - assert (data !is null); - assert (stream !is null); - } - body - { - // Set up a SocketSet so we can use select() - it's pretty efficient. - SocketSet set = new SocketSet(); - scope (exit) - delete set; - - // At end_time, we bail. - Time end_time = Clock.now + this.timeout; - - // This is the buffer the stream data is stored in. - ubyte[8 * 1024] buf; - int buf_size = 0; - - bool completed = false; - size_t pos; - while (Clock.now < end_time) - { - set.reset(); - set.add(data); - - // Can we read yet, can we read yet? - int code = Socket.select(set, null, null, this.timeout); - if (code == -1 || code == 0) - break; - - buf_size = data.receive(buf); - if (buf_size == data.ERROR) - break; - - if (buf_size == 0) - { - completed = true; - break; - } - - stream.write(buf[0 .. buf_size]); - - pos += buf_size; - if (progress !is null) - progress(pos); - - // Give it more time as long as data is going through. - end_time = Clock.now + this.timeout; - } - - // Did all the data get received? - if (!completed) - throw new FTPException("CLIENT: Timeout when reading data", "420"); - } - - /// Parse a 257 response (which begins with a quoted path.) - /// - /// Params: - /// response = the response to parse - /// - /// Returns: the path in the response - - protected char[] parse257(FtpResponse response) - { - char[] path = new char[response.message.length]; - size_t pos = 1, len = 0; - - // Since it should be quoted, it has to be at least 3 characters in length. - if (response.message.length <= 2) - exception (response); - - assert (response.message[0] == '"'); - - // Trapse through the response... - while (pos < response.message.length) - { - if (response.message[pos] == '"') - { - // An escaped quote, keep going. False alarm. - if (response.message[++pos] == '"') - path[len++] = response.message[pos]; - else - break; - } - else - path[len++] = response.message[pos]; - - pos++; - } - - // Okay, done! That wasn't too hard. - path.length = len; - return path; - } - - /// Send a command to the FTP server. - /// - /// Does not get/wait for the response. - /// - /// Params: - /// command = the command to send - /// ... = additional parameters to send (a space will be prepended to each) - public void sendCommand(char[] command, char[][] parameters ...) - { - assert (this.socket !is null); - - - char [] socketCommand = command ; - - // Send the command, parameters, and then a CRLF. - - foreach (char[] param; parameters) - { - socketCommand ~= " " ~ param; - - } - - socketCommand ~= "\r\n"; - - debug(FtpDebug) - { - Stdout.formatln("[sendCommand] Sending command '{0}'",socketCommand ); - } - this.sendData(socketCommand); - } - - /// Read in response lines from the server, expecting a certain code. - /// - /// Params: - /// expected_code = the code expected from the server - /// - /// Returns: the response from the server - /// - /// Throws: FTPException if code does not match - public FtpResponse readResponse(char[] expected_code) - { - debug (FtpDebug ) { Stdout.formatln("[readResponse] Expected Response {0}",expected_code )(); } - auto response = this.readResponse(); - debug (FtpDebug ) { Stdout.formatln("[readResponse] Actual Response {0}",response.code)(); } - - if (response.code != expected_code) - exception (response); - - - - return response; - } - - /// Read in the response line(s) from the server. - /// - /// Returns: the response from the server - public FtpResponse readResponse() - { - assert (this.socket !is null); - - // Pick a time at which we stop reading. It can't take too long, but it could take a bit for the whole response. - Time end_time = Clock.now + this.timeout * 10; - - FtpResponse response; - char[] single_line = null; - - // Danger, Will Robinson, don't fall into an endless loop from a malicious server. - while (Clock.now < end_time) - { - single_line = this.readLine(); - - - // This is the first line. - if (response.message.length == 0) - { - // The first line must have a code and then a space or hyphen. - if (single_line.length <= 4) - { - response.code[] = "500"; - break; - } - - // The code is the first three characters. - response.code[] = single_line[0 .. 3]; - response.message = single_line[4 .. single_line.length]; - } - // This is either an extra line, or the last line. - else - { - response.message ~= "\n"; - - // If the line starts like "123-", that is not part of the response message. - if (single_line.length > 4 && single_line[0 .. 3] == response.code) - response.message ~= single_line[4 .. single_line.length]; - // If it starts with a space, that isn't either. - else if (single_line.length > 2 && single_line[0] == ' ') - response.message ~= single_line[1 .. single_line.length]; - else - response.message ~= single_line; - } - - // We're done if the line starts like "123 ". Otherwise we're not. - if (single_line.length > 4 && single_line[0 .. 3] == response.code && single_line[3] == ' ') - break; - } - - return response; - } - - /// convert text to integer - private int toInt (char[] s) - { - return cast(int) toLong (s); - } - - /// convert text to integer - private long toLong (char[] s) - { - return Integer.parse (s); - } -} - - - -/// An exception caused by an unexpected FTP response. -/// -/// Even after such an exception, the connection may be in a usable state. -/// Use the response code to determine more information about the error. -/// -/// Standards: RFC 959, RFC 2228, RFC 2389, RFC 2428 -class FTPException: Exception -{ - /// The three byte response code. - char[3] response_code = "000"; - - /// Construct an FTPException based on a message and code. - /// - /// Params: - /// message = the exception message - /// code = the code (5xx for fatal errors) - this (char[] message, char[3] code = "420") - { - this.response_code[] = code; - super(message); - } - - /// Construct an FTPException based on a response. - /// - /// Params: - /// r = the server response - this (FtpResponse r) - { - this.response_code[] = r.code; - super(r.message); - } - - /// A string representation of the error. - char[] toString() - { - char[] buffer = new char[this.msg.length + 4]; - - buffer[0 .. 3] = this.response_code; - buffer[3] = ' '; - buffer[4 .. buffer.length] = this.msg; - - return buffer; - } -} - - -debug (UnitTest ) -{ - import tango.io.Stdout; - - unittest - { - - try - { - /+ - + TODO: Fix this - + - auto ftp = new FTPConnection("ftp.gnu.org","anonymous","anonymous"); - auto dirList = ftp.ls(); // get list for current dir - - foreach ( entry;dirList ) - { - - Stdout("File :")(entry.name)("\tSize :")(entry.size).newline; - - } - - ftp.cd("gnu/windows/emacs"); - - - dirList = ftp.ls(); - - foreach ( entry;dirList ) - { - - Stdout("File :")(entry.name)("\tSize :")(entry.size).newline; - - } - - - size_t size = ftp.size("emacs-21.3-barebin-i386.tar.gz"); - - void progress( size_t pos ) - { - - Stdout.formatln("Byte {0} of {1}",pos,size); - - } - - - ftp.get("emacs-21.3-barebin-i386.tar.gz","emacs.tgz", &progress); - +/ - } - catch( Object o ) - { - assert( false ); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/ftp/Telnet.d --- a/tango/tango/net/ftp/Telnet.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,247 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 UWB. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: June 2006 - - author: UWB - -*******************************************************************************/ - -module tango.net.ftp.Telnet; - -private import tango.time.Clock; - -private import tango.net.Socket; - -private import tango.core.Exception; - -private import Integer = tango.text.convert.Integer; - - -/// Utilities for telnet-based connections. -/// -/// Params: -/// TelnetException = the type for exceptions thrown -/// socket = the connected socket -/// timeout = the timeout for socket communication -class Telnet -{ - /// The control connection socket. - protected Socket socket; - - /// The number of milliseconds to wait for socket communication or connection. - protected TimeSpan timeout = TimeSpan.millis(5000); - - /// provided by host - abstract void exception (char[] msg); - - /// Send a line over the socket. - /// - /// Params: - /// buf = the bytes to send - - void sendLine(void[] buf) - { - this.sendData(buf); - this.sendData("\r\n"); - } - - /// Send data over the socket. - /// - /// Params: - /// buf = the bytes to send - void sendData(void[] buf) - in - { - assert (buf.length > 0); - } - body - { - // At end_time, we bail. - Time end_time = Clock.now + this.timeout; - - // Set up a SocketSet so we can use select() - it's pretty efficient. - SocketSet set = new SocketSet(); - scope (exit) - delete set; - - size_t pos = 0; - while (Clock.now < end_time) - { - set.reset(); - set.add(this.socket); - - // Can we write yet, can we write yet? - int code = Socket.select(null, set, null, this.timeout); - if (code == -1 || code == 0) - break; - - // Send it (or as much as possible!) - int delta = this.socket.send(buf[pos .. buf.length]); - if (delta == -1) - break; - - pos += delta; - if (pos >= buf.length) - break; - } - - // If we didn't send everything, we're dead in the water. - if (pos != buf.length) - exception ("CLIENT: Timeout when sending command"); - } - - /// Read a CRLF terminated line from the socket. - /// - /// Returns: the line read - char[] readLine() - { - // Figure, first, how long we're allowed to take. - Time end_time = Clock.now + this.timeout; - - // An overall buffer and a one-char buffer. - char[] buffer; - char[1] buf; - size_t buffer_pos = 0; - - // Push a byte onto the buffer. - void push_byte() - { - // Lines aren't usually that long. Allocate in blocks of 16 bytes. - if (buffer.length <= buffer_pos) - buffer.length = buffer.length + 16; - - buffer[buffer_pos++] = buf[0]; - } - - // Get the resultant buffer. - char[] get_buffer() - { - return buffer[0 .. buffer_pos]; - } - - // Now the socket set for selecting purposes. - SocketSet set = new SocketSet(); - scope (exit) - delete set; - - while (Clock.now < end_time) - { - set.reset(); - set.add(this.socket); - - // Try to read from the socket. - int code = Socket.select(set, null, null, this.timeout); - if (code == -1 || code == 0) - break; - - // Okay, now we're ready. Read in the measly byte. - int delta = this.socket.receive(buf); - if (delta != 1) - break; - - if (buf == "\r") - continue; - else if (buf == "\n") - break; - - push_byte(); - } - - return get_buffer(); - } - - /// Find a server which is listening on the specified port. - /// - /// Params: - /// hostname = the hostname to lookup and connect to - /// port = the port to connect on - Socket findAvailableServer(char[] hostname, int port) - { - // First we need to get a list of IP addresses. - auto host = new NetHost(); - scope (exit) - delete host; - - // Try to resolve the actual address for this hostname. - host.getHostByName(hostname); - scope (exit) - delete host.addrList; - - // None were found... darn. - if (host.addrList.length == 0) - throw new AddressException("Unable to resolve host '" ~ hostname ~ "'"); - - // Get all the sockets ready (or just one if there's just one address.) - Socket[] sockets = new Socket[host.addrList.length]; - scope (exit) - delete sockets; - - // And now just connect to all of them. - for (int i = 0; i < host.addrList.length; i++) - { - sockets[i] = new Socket(AddressFamily.INET, SocketType.STREAM, ProtocolType.TCP); - sockets[i].blocking = false; - - Address addr = new IPv4Address(host.addrList[i], cast(ushort) port); - scope (exit) - delete addr; - - // Start trying to connect as soon as possible. - sockets[i].connect(addr); - } - - // Set up some stuff so we can select through the hosts. - SocketSet set = new SocketSet(); - this.socket = null; - - scope (exit) - delete set; - - // Wait until we find a good socket... - while (this.socket is null) - { - set.reset(); - foreach (Socket s; sockets) - set.add(s); - - // Anyone available? - int code = Socket.select(null, set, null, this.timeout); - if (code == -1 || code == 0) - break; - - // Now we have to check to find a good socket, and break out if we find one. - foreach (Socket s; sockets) - if (set.isSet(s)) - { - this.socket = s; - break; - } - } - - // Close the other sockets (or all on error.) - foreach (Socket s; sockets) - if (s !is this.socket) - { - s.shutdown(SocketShutdown.BOTH); - s.detach(); - - delete s; - } - - // No socket, no data. Can't do anything about that. - if (this.socket is null) - { - char[10] tmp; - exception ("CLIENT: Unable to connect within the specified time limit (" ~ Integer.itoa(tmp, cast(uint) this.timeout.millis) ~ " ms.)"); - } - - // Make it blocking again, because that's the norm. - this.socket.blocking = true; - - return this.socket; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/ChunkStream.d --- a/tango/tango/net/http/ChunkStream.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,166 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) Nov 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Nov 2007: Initial release - - author: Kris - - Support for HTTP chunked I/O. - - See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html - -*******************************************************************************/ - -module tango.net.http.ChunkStream; - -private import tango.io.Buffer, - tango.io.Conduit; - -private import tango.text.stream.LineIterator; - -private import Integer = tango.text.convert.Integer; - -/******************************************************************************* - - Prefix each block of data with its length (in hex digits) and add - appropriate \r\n sequences. To write trailing headers you'll need - to step around this stream (otherwise those headers will be chunk - stamped also: use this.host or this.buffer to obtain the upstream - sibling) - -*******************************************************************************/ - -class ChunkOutput : OutputFilter, Buffered -{ - private IBuffer output; - - /*********************************************************************** - - Use a buffer belonging to our sibling, if one is available - - ***********************************************************************/ - - this (OutputStream stream) - { - super (output = Buffer.share(stream)); - } - - /*********************************************************************** - - Buffered interface - - ***********************************************************************/ - - IBuffer buffer () - { - return output; - } - - /*********************************************************************** - - Write a chunk to the output, prefixed and postfixed in a - manner consistent with the HTTP chunked transfer coding - - ***********************************************************************/ - - final override uint write (void[] src) - { - char[8] tmp = void; - - output.append (Integer.format (tmp, src.length, Integer.Style.Hex)) - .append ("\r\n") - .append (src) - .append ("\r\n"); - return src.length; - } -} - - -/******************************************************************************* - - Parse hex digits, and use the resultant size to modulate requests - for incoming data. A chunk size of 0 terminates the stream, so to - read any trailing headers you'll need to reach into the upstream - sibling instead (this.host or this.buffer, for example). - -*******************************************************************************/ - -class ChunkInput : LineIterator!(char) -{ - private uint available; - - /*********************************************************************** - - Prime the available chunk size by reading and parsing the - first available line - - ***********************************************************************/ - - this (InputStream stream) - { - super (stream); - available = nextChunk; - } - - /*********************************************************************** - - Read and parse another chunk size - - ***********************************************************************/ - - private final uint nextChunk () - { - char[] tmp; - - if ((tmp = super.next).ptr) - return cast(uint) Integer.parse (tmp, 16); - return 0; - } - - /*********************************************************************** - - Read content based on a previously parsed chunk size - - ***********************************************************************/ - - final override uint read (void[] dst) - { - if (available is 0) - return IConduit.Eof; - - auto size = dst.length > available ? available : dst.length; - auto read = super.read (dst [0 .. size]); - - // check for next chunk header - if (read != IConduit.Eof && (available -= read) is 0) - { - // consume trailing \r\n - super.buffer.skip (2); - available = nextChunk (); - } - - return read; - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (ChunkStream) -{ - import tango.io.Console; - - void main() - { - auto buf = new Buffer(20); - auto chunk = new ChunkOutput (buf); - chunk.write ("hello world"); - auto input = new ChunkInput (buf); - Cout.stream.copy (input); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpClient.d --- a/tango/tango/net/http/HttpClient.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,663 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - Outback release: December 2006 - - author: Kris - original module - author: h3r3tic - fixed a number of Post issues and - bugs in the 'params' construction - - Redirection handling guided via - http://ppewww.ph.gla.ac.uk/~flavell/www/post-redirect.html - -*******************************************************************************/ - -module tango.net.http.HttpClient; - -private import tango.time.Time; - -private import tango.io.Buffer; - -private import tango.net.Uri, - tango.net.SocketConduit, - tango.net.InternetAddress; - -private import tango.net.http.HttpConst, - tango.net.http.HttpParams, - tango.net.http.HttpHeaders, - tango.net.http.HttpTriplet, - tango.net.http.HttpCookies; - -private import tango.text.stream.LineIterator; - -private import Integer = tango.text.convert.Integer; - - -/******************************************************************************* - - Supports the basic needs of a client making requests of an HTTP - server. The following is an example of how this might be used: - - --- - // callback for client reader - void sink (char[] content) - { - Stdout.put (content); - } - - // create client for a GET request - auto client = new HttpClient (HttpClient.Get, "http://www.yahoo.com"); - - // make request - client.open (); - - // check return status for validity - if (client.isResponseOK) - { - // extract content length - auto length = client.getResponseHeaders.getInt (HttpHeader.ContentLength, uint.max); - - // display all returned headers - Stdout.put (client.getResponseHeaders); - - // display remaining content - client.read (&sink, length); - } - else - Stderr.put (client.getResponse); - - client.close (); - --- - - See modules HttpGet and HttpPost for simple wrappers instead. - -*******************************************************************************/ - -class HttpClient -{ - // callback for sending PUT content - alias void delegate (IBuffer) Pump; - - // this is struct rather than typedef to avoid compiler bugs - private struct RequestMethod - { - final char[] name; - } - - // class members; there's a surprising amount of stuff here! - private Uri uri; - private IBuffer tmp, - input, - output; - private SocketConduit socket; - private RequestMethod method; - private InternetAddress address; - private HttpParams paramsOut; - private HttpHeadersView headersIn; - private HttpHeaders headersOut; - private HttpCookies cookiesOut; - private ResponseLine responseLine; - - // default to three second timeout on read operations ... - private TimeSpan timeout = TimeSpan.seconds(3); - - // should we perform internal redirection? - private bool doRedirect = true; - - // use HTTP v1.0? - private static const char[] DefaultHttpVersion = "HTTP/1.0"; - - // standard set of request methods ... - static const RequestMethod Get = {"GET"}, - Put = {"PUT"}, - Head = {"HEAD"}, - Post = {"POST"}, - Trace = {"TRACE"}, - Delete = {"DELETE"}, - Options = {"OPTIONS"}, - Connect = {"CONNECT"}; - - /*********************************************************************** - - Create a client for the given URL. The argument should be - fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (RequestMethod method, char[] url) - { - this (method, new Uri(url)); - } - - /*********************************************************************** - - Create a client with the provided Uri instance. The Uri should - be fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (RequestMethod method, Uri uri) - { - this.uri = uri; - this.method = method; - - responseLine = new ResponseLine; - headersIn = new HttpHeadersView; - - tmp = new Buffer (1024 * 4); - paramsOut = new HttpParams (new Buffer (1024 * 4)); - headersOut = new HttpHeaders (new Buffer (1024 * 4)); - cookiesOut = new HttpCookies (headersOut); - - // decode the host name (may take a second or two) - auto host = uri.getHost (); - if (host) - address = new InternetAddress (host, uri.getValidPort); - else - responseLine.error ("invalid url provided to HttpClient ctor"); - } - - /*********************************************************************** - - Get the current input headers, as returned by the host request. - - ***********************************************************************/ - - HttpHeadersView getResponseHeaders() - { - return headersIn; - } - - /*********************************************************************** - - Gain access to the request headers. Use this to add whatever - headers are required for a request. - - ***********************************************************************/ - - HttpHeaders getRequestHeaders() - { - return headersOut; - } - - /*********************************************************************** - - Gain access to the request parameters. Use this to add x=y - style parameters to the request. These will be appended to - the request assuming the original Uri does not contain any - of its own. - - ***********************************************************************/ - - HttpParams getRequestParams() - { - return paramsOut; - } - - /*********************************************************************** - - Return the Uri associated with this client - - ***********************************************************************/ - - UriView getUri() - { - return uri; - } - - /*********************************************************************** - - Return the response-line for the latest request. This takes - the form of "version status reason" as defined in the HTTP - RFC. - - ***********************************************************************/ - - ResponseLine getResponse() - { - return responseLine; - } - - /*********************************************************************** - - Return the HTTP status code set by the remote server - - ***********************************************************************/ - - int getStatus() - { - return responseLine.getStatus; - } - - /*********************************************************************** - - Return whether the response was OK or not - - ***********************************************************************/ - - bool isResponseOK() - { - return getStatus is HttpResponseCode.OK; - } - - /*********************************************************************** - - Add a cookie to the outgoing headers - - ***********************************************************************/ - - void addCookie (Cookie cookie) - { - cookiesOut.add (cookie); - } - - /*********************************************************************** - - Close all resources used by a request. You must invoke this - between successive open() calls. - - ***********************************************************************/ - - void close () - { - if (socket) - { - socket.shutdown; - socket.detach; - socket = null; - } - } - - /*********************************************************************** - - Reset the client such that it is ready for a new request. - - ***********************************************************************/ - - void reset () - { - headersIn.reset; - headersOut.reset; - paramsOut.reset; - } - - /*********************************************************************** - - enable/disable the internal redirection suppport - - ***********************************************************************/ - - void enableRedirect (bool yes) - { - doRedirect = yes; - } - - /*********************************************************************** - - set timeout period for read operation - - ***********************************************************************/ - - void setTimeout (TimeSpan interval) - { - timeout = interval; - } - - /** - * Deprecated: use setTimeout(TimeSpan) instead - */ - deprecated void setTimeout(double interval) - { - setTimeout(TimeSpan.interval(interval)); - } - - /*********************************************************************** - - Overridable method to create a Socket. You may find a need - to override this for some purpose; perhaps to add input or - output filters. - - ***********************************************************************/ - - protected SocketConduit createSocket () - { - return new SocketConduit; - } - - /*********************************************************************** - - Make a request for the resource specified via the constructor, - using the specified timeout period (in milli-seconds).The - return value represents the input buffer, from which all - returned headers and content may be accessed. - - ***********************************************************************/ - - IBuffer open (IBuffer buffer = null) - { - return open (method, null, buffer); - } - - /*********************************************************************** - - Make a request for the resource specified via the constructor, - using a callback for pumping additional data to the host. This - defaults to a three-second timeout period. The return value - represents the input buffer, from which all returned headers - and content may be accessed. - - ***********************************************************************/ - - IBuffer open (Pump pump, IBuffer buffer = null) - { - return open (method, pump, buffer); - } - - /*********************************************************************** - - Make a request for the resource specified via the constructor - using the specified timeout period (in micro-seconds), and a - user-defined callback for pumping additional data to the host. - The callback would be used when uploading data during a 'put' - operation (or equivalent). The return value represents the - input buffer, from which all returned headers and content may - be accessed. - - Note that certain request-headers may generated automatically - if they are not present. These include a Host header and, in - the case of Post, both ContentType & ContentLength for a query - type of request. The latter two are *not* produced for Post - requests with 'pump' specified ~ when using 'pump' to output - additional content, you must explicitly set your own headers. - - Note also that IOException instances may be thrown. These - should be caught by the client to ensure a close() operation - is always performed - - ***********************************************************************/ - - private IBuffer open (RequestMethod method, Pump pump, IBuffer input) - { - // create socket, and connect it - socket = createSocket; - socket.setTimeout (timeout); - socket.connect (address); - - // create buffers for input and output - if (input) - input.clear, input.setConduit (socket); - else - input = new Buffer (socket); - output = new Buffer (socket); - - // save for read() method - this.input = input; - - // setup a Host header - if (headersOut.get (HttpHeader.Host, null) is null) - headersOut.add (HttpHeader.Host, uri.getHost); - - // http/1.0 needs connection:close - headersOut.add (HttpHeader.Connection, "close"); - - // attach/extend query parameters if user has added some - tmp.clear; - auto query = uri.extendQuery (paramsOut.formatTokens(tmp, "&")); - - // patch request path? - auto path = uri.getPath; - if (path.length is 0) - path = "/"; - - // format encoded request - output (method.name) (" "), uri.encode (&output.consume, path, uri.IncPath); - - // should we emit query as part of request line? - if (query.length) - if (method is Get) - output ("?"), uri.encode (&output.consume, query, uri.IncQueryAll); - else - if (method is Post && pump.funcptr is null) - { - // we're POSTing query text - add default info - if (headersOut.get (HttpHeader.ContentType, null) is null) - headersOut.add (HttpHeader.ContentType, "application/x-www-form-urlencoded"); - - if (headersOut.get (HttpHeader.ContentLength, null) is null) - headersOut.addInt (HttpHeader.ContentLength, query.length); - } - - // complete the request line, and emit headers too - output (" ") (DefaultHttpVersion) (HttpConst.Eol); - - headersOut.produce (&output.consume, HttpConst.Eol); - output (HttpConst.Eol); - - // user has additional data to send? - if (pump.funcptr) - pump (output); - else - // send encoded POST query instead? - if (method is Post && query.length) - uri.encode (&output.consume, query, uri.IncQueryAll); - - // send entire request - output.flush; - - // Token for initial parsing of input header lines - auto line = new LineIterator!(char) (input); - - // skip any blank lines - while (line.next && line.get.length is 0) - {} - - // throw if we experienced a timeout - if (socket.hadTimeout) - responseLine.error ("response timeout"); - - // is this a bogus request? - if (line.get.length is 0) - responseLine.error ("truncated response"); - - // read response line - responseLine.parse (line.get); - - // parse incoming headers - headersIn.reset.parse (input); - - // check for redirection - if (doRedirect) - switch (responseLine.getStatus) - { - case HttpResponseCode.SeeOther: - case HttpResponseCode.MovedPermanently: - case HttpResponseCode.MovedTemporarily: - case HttpResponseCode.TemporaryRedirect: - // drop this connection - close; - - // remove any existing Host header - headersOut.remove (HttpHeader.Host); - - // parse redirected uri - auto redirect = headersIn.get (HttpHeader.Location, "[missing url]"); - uri.relParse (redirect); - - // decode the host name (may take a second or two) - auto host = uri.getHost(); - if (host) - address = new InternetAddress (uri.getHost, uri.getValidPort); - else - responseLine.error ("redirect has invalid url: "~redirect); - - // figure out what to do - if (method is Get || method is Head) - return open (method, pump, input); - else - if (method is Post) - return redirectPost (pump, input, responseLine.getStatus); - else - responseLine.error ("unexpected redirect for method "~method.name); - default: - break; - } - - // return the input buffer - return input; - } - - /*********************************************************************** - - Read the content from the returning input stream, up to a - maximum length, and pass content to the given sink delegate - as it arrives. - - Exits when length bytes have been processed, or an Eof is - seen on the stream. - - ***********************************************************************/ - - void read (void delegate (void[]) sink, long len = long.max) - { - while (len > 0) - { - auto content = input.slice; - if ((len -= content.length) < 0) - { - content = content [0 .. $ + cast(size_t) len]; - sink (content); - input.skip (content.length); - } - else - { - sink (content); - input.clear; - if (input.fill(input.input) is socket.Eof) - break; - } - } - } - - /*********************************************************************** - - Handle redirection of Post - - Guidance for the default behaviour came from this page: - http://ppewww.ph.gla.ac.uk/~flavell/www/post-redirect.html - - ***********************************************************************/ - - IBuffer redirectPost (Pump pump, IBuffer input, int status) - { - switch (status) - { - // use Get method to complete the Post - case HttpResponseCode.SeeOther: - case HttpResponseCode.MovedTemporarily: - - // remove POST headers first! - headersOut.remove (HttpHeader.ContentLength); - headersOut.remove (HttpHeader.ContentType); - paramsOut.reset; - return open (Get, null, input); - - // try entire Post again, if user say OK - case HttpResponseCode.MovedPermanently: - case HttpResponseCode.TemporaryRedirect: - if (canRepost (status)) - return open (this.method, pump, input); - // fall through! - - default: - responseLine.error ("Illegal redirection of Post"); - } - return null; - } - - /*********************************************************************** - - Handle user-notification of Post redirection. This should - be overridden appropriately. - - Guidance for the default behaviour came from this page: - http://ppewww.ph.gla.ac.uk/~flavell/www/post-redirect.html - - ***********************************************************************/ - - bool canRepost (uint status) - { - return false; - } -} - - -/****************************************************************************** - - Class to represent an HTTP response-line - -******************************************************************************/ - -private class ResponseLine : HttpTriplet -{ - private char[] vers, - reason; - private int status; - - /********************************************************************** - - test the validity of these tokens - - **********************************************************************/ - - void test () - { - vers = tokens[0]; - reason = tokens[2]; - status = cast(int) Integer.convert (tokens[1]); - if (status is 0) - { - status = cast(int) Integer.convert (tokens[2]); - if (status is 0) - error ("Invalid HTTP response: '"~tokens[0]~"' '"~tokens[1]~"' '" ~tokens[2] ~"'"); - } - } - - /********************************************************************** - - Return HTTP version - - **********************************************************************/ - - char[] getVersion () - { - return vers; - } - - /********************************************************************** - - Return reason text - - **********************************************************************/ - - char[] getReason () - { - return reason; - } - - /********************************************************************** - - Return status integer - - **********************************************************************/ - - int getStatus () - { - return status; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpConst.d --- a/tango/tango/net/http/HttpConst.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpConst; - -/******************************************************************************* - - Constants - -*******************************************************************************/ - -struct HttpConst -{ - const char[] Eol = "\r\n"; -} - -/******************************************************************************* - - Headers are distinct types in their own right. This is because they - are somewhat optimized via a trailing ':' character. - -*******************************************************************************/ - -struct HttpHeaderName -{ - final char[] value; -} - -/******************************************************************************* - - Define the traditional set of HTTP header names - -*******************************************************************************/ - -struct HttpHeader -{ - // size of both the request & response buffer (per thread) - const int IOBufferSize = 16 * 1024; - - // maximum length for POST parameters (to avoid DOS ...) - const int MaxPostParamSize = 4 * 1024; - - const HttpHeaderName Version = {"HTTP/1.0"}; - const HttpHeaderName TextHtml = {"text/html"}; - - const HttpHeaderName Accept = {"Accept:"}; - const HttpHeaderName AcceptCharset = {"Accept-Charset:"}; - const HttpHeaderName AcceptEncoding = {"Accept-Encoding:"}; - const HttpHeaderName AcceptLanguage = {"Accept-Language:"}; - const HttpHeaderName AcceptRanges = {"Accept-Ranges:"}; - const HttpHeaderName Age = {"Age:"}; - const HttpHeaderName Allow = {"Allow:"}; - const HttpHeaderName Authorization = {"Authorization:"}; - const HttpHeaderName CacheControl = {"Cache-Control:"}; - const HttpHeaderName Connection = {"Connection:"}; - const HttpHeaderName ContentEncoding = {"Content-Encoding:"}; - const HttpHeaderName ContentLanguage = {"Content-Language:"}; - const HttpHeaderName ContentLength = {"Content-Length:"}; - const HttpHeaderName ContentLocation = {"Content-Location:"}; - const HttpHeaderName ContentRange = {"Content-Range:"}; - const HttpHeaderName ContentType = {"Content-Type:"}; - const HttpHeaderName Cookie = {"Cookie:"}; - const HttpHeaderName Date = {"Date:"}; - const HttpHeaderName ETag = {"ETag:"}; - const HttpHeaderName Expect = {"Expect:"}; - const HttpHeaderName Expires = {"Expires:"}; - const HttpHeaderName From = {"From:"}; - const HttpHeaderName Host = {"Host:"}; - const HttpHeaderName Identity = {"Identity:"}; - const HttpHeaderName IfMatch = {"If-Match:"}; - const HttpHeaderName IfModifiedSince = {"If-Modified-Since:"}; - const HttpHeaderName IfNoneMatch = {"If-None-Match:"}; - const HttpHeaderName IfRange = {"If-Range:"}; - const HttpHeaderName IfUnmodifiedSince = {"If-Unmodified-Since:"}; - const HttpHeaderName LastModified = {"Last-Modified:"}; - const HttpHeaderName Location = {"Location:"}; - const HttpHeaderName MaxForwards = {"Max-Forwards:"}; - const HttpHeaderName MimeVersion = {"MIME-Version:"}; - const HttpHeaderName Pragma = {"Pragma:"}; - const HttpHeaderName ProxyAuthenticate = {"Proxy-Authenticate:"}; - const HttpHeaderName ProxyConnection = {"Proxy-Connection:"}; - const HttpHeaderName Range = {"Range:"}; - const HttpHeaderName Referrer = {"Referer:"}; - const HttpHeaderName RetryAfter = {"Retry-After:"}; - const HttpHeaderName Server = {"Server:"}; - const HttpHeaderName ServletEngine = {"Servlet-Engine:"}; - const HttpHeaderName SetCookie = {"Set-Cookie:"}; - const HttpHeaderName SetCookie2 = {"Set-Cookie2:"}; - const HttpHeaderName TE = {"TE:"}; - const HttpHeaderName Trailer = {"Trailer:"}; - const HttpHeaderName TransferEncoding = {"Transfer-Encoding:"}; - const HttpHeaderName Upgrade = {"Upgrade:"}; - const HttpHeaderName UserAgent = {"User-Agent:"}; - const HttpHeaderName Vary = {"Vary:"}; - const HttpHeaderName Warning = {"Warning:"}; - const HttpHeaderName WwwAuthenticate = {"WWW-Authenticate:"}; -} - - -/******************************************************************************* - - Declare the traditional set of HTTP response codes - -*******************************************************************************/ - -enum HttpResponseCode -{ - Continue = 100, - SwitchingProtocols = 101, - OK = 200, - Created = 201, - Accepted = 202, - NonAuthoritativeInformation = 203, - NoContent = 204, - ResetContent = 205, - PartialContent = 206, - MultipleChoices = 300, - MovedPermanently = 301, - MovedTemporarily = 302, - SeeOther = 303, - NotModified = 304, - UseProxy = 305, - TemporaryRedirect = 307, - BadRequest = 400, - Unauthorized = 401, - PaymentRequired = 402, - Forbidden = 403, - NotFound = 404, - MethodNotAllowed = 405, - NotAcceptable = 406, - ProxyAuthenticationRequired = 407, - RequestTimeout = 408, - Conflict = 409, - Gone = 410, - LengthRequired = 411, - PreconditionFailed = 412, - RequestEntityTooLarge = 413, - RequestURITooLarge = 414, - UnsupportedMediaType = 415, - RequestedRangeNotSatisfiable = 416, - ExpectationFailed = 417, - InternalServerError = 500, - NotImplemented = 501, - BadGateway = 502, - ServiceUnavailable = 503, - GatewayTimeout = 504, - VersionNotSupported = 505, -}; - -/******************************************************************************* - - Status is a compound type, with a name and a code. - -*******************************************************************************/ - -struct HttpStatus -{ - final int code; - final char[] name; -} - -/******************************************************************************* - - Declare the traditional set of HTTP responses - -*******************************************************************************/ - -struct HttpResponses -{ - static HttpStatus Continue = {HttpResponseCode.Continue, "Continue"}; - static HttpStatus SwitchingProtocols = {HttpResponseCode.SwitchingProtocols, "SwitchingProtocols"}; - static HttpStatus OK = {HttpResponseCode.OK, "OK"}; - static HttpStatus Created = {HttpResponseCode.Created, "Created"}; - static HttpStatus Accepted = {HttpResponseCode.Accepted, "Accepted"}; - static HttpStatus NonAuthoritativeInformation = {HttpResponseCode.NonAuthoritativeInformation, "NonAuthoritativeInformation"}; - static HttpStatus NoContent = {HttpResponseCode.NoContent, "NoContent"}; - static HttpStatus ResetContent = {HttpResponseCode.ResetContent, "ResetContent"}; - static HttpStatus PartialContent = {HttpResponseCode.PartialContent, "PartialContent"}; - static HttpStatus MultipleChoices = {HttpResponseCode.MultipleChoices, "MultipleChoices"}; - static HttpStatus MovedPermanently = {HttpResponseCode.MovedPermanently, "MovedPermanently"}; - static HttpStatus MovedTemporarily = {HttpResponseCode.MovedTemporarily, "MovedTemporarily"}; - static HttpStatus SeeOther = {HttpResponseCode.SeeOther, "SeeOther"}; - static HttpStatus NotModified = {HttpResponseCode.NotModified, "NotModified"}; - static HttpStatus UseProxy = {HttpResponseCode.UseProxy, "UseProxy"}; - static HttpStatus BadRequest = {HttpResponseCode.BadRequest, "BadRequest"}; - static HttpStatus Unauthorized = {HttpResponseCode.Unauthorized, "Unauthorized"}; - static HttpStatus PaymentRequired = {HttpResponseCode.PaymentRequired, "PaymentRequired"}; - static HttpStatus Forbidden = {HttpResponseCode.Forbidden, "Forbidden"}; - static HttpStatus NotFound = {HttpResponseCode.NotFound, "NotFound"}; - static HttpStatus MethodNotAllowed = {HttpResponseCode.MethodNotAllowed, "MethodNotAllowed"}; - static HttpStatus NotAcceptable = {HttpResponseCode.NotAcceptable, "NotAcceptable"}; - static HttpStatus ProxyAuthenticationRequired = {HttpResponseCode.ProxyAuthenticationRequired, "ProxyAuthenticationRequired"}; - static HttpStatus RequestTimeout = {HttpResponseCode.RequestTimeout, "RequestTimeout"}; - static HttpStatus Conflict = {HttpResponseCode.Conflict, "Conflict"}; - static HttpStatus Gone = {HttpResponseCode.Gone, "Gone"}; - static HttpStatus LengthRequired = {HttpResponseCode.LengthRequired, "LengthRequired"}; - static HttpStatus PreconditionFailed = {HttpResponseCode.PreconditionFailed, "PreconditionFailed"}; - static HttpStatus RequestEntityTooLarge = {HttpResponseCode.RequestEntityTooLarge, "RequestEntityTooLarge"}; - static HttpStatus RequestURITooLarge = {HttpResponseCode.RequestURITooLarge, "RequestURITooLarge"}; - static HttpStatus UnsupportedMediaType = {HttpResponseCode.UnsupportedMediaType, "UnsupportedMediaType"}; - static HttpStatus RequestedRangeNotSatisfiable = {HttpResponseCode.RequestedRangeNotSatisfiable, "RequestedRangeNotSatisfiable"}; - static HttpStatus ExpectationFailed = {HttpResponseCode.ExpectationFailed, "ExpectationFailed"}; - static HttpStatus InternalServerError = {HttpResponseCode.InternalServerError, "InternalServerError"}; - static HttpStatus NotImplemented = {HttpResponseCode.NotImplemented, "NotImplemented"}; - static HttpStatus BadGateway = {HttpResponseCode.BadGateway, "BadGateway"}; - static HttpStatus ServiceUnavailable = {HttpResponseCode.ServiceUnavailable, "ServiceUnavailable"}; - static HttpStatus GatewayTimeout = {HttpResponseCode.GatewayTimeout, "GatewayTimeout"}; - static HttpStatus VersionNotSupported = {HttpResponseCode.VersionNotSupported, "VersionNotSupported"}; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpCookies.d --- a/tango/tango/net/http/HttpCookies.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,649 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpCookies; - -private import tango.io.Buffer; - -private import tango.stdc.ctype; - -private import tango.net.http.HttpHeaders; - -private import tango.io.protocol.model.IWriter; - -private import tango.text.stream.StreamIterator; - -private import Integer = tango.text.convert.Integer; - -/******************************************************************************* - - Defines the Cookie class, and the means for reading & writing them. - Cookie implementation conforms with RFC 2109, but supports parsing - of server-side cookies only. Client-side cookies are supported in - terms of output, but response parsing is not yet implemented ... - - See over here - for the RFC document. - -*******************************************************************************/ - -class Cookie : IWritable -{ - private char[] name, - path, - value, - domain, - comment; - private uint vrsn=1; // 'version' is a reserved word - private long maxAge; - private bool secure; - - /*********************************************************************** - - Construct an empty client-side cookie. You add these - to an output request using HttpClient.addCookie(), or - the equivalent. - - ***********************************************************************/ - - this () {} - - /*********************************************************************** - - Construct a cookie with the provided attributes. You add - these to an output request using HttpClient.addCookie(), - or the equivalent. - - ***********************************************************************/ - - this (char[] name, char[] value) - { - setName (name); - setValue (value); - } - - /*********************************************************************** - - Set the name of this cookie - - ***********************************************************************/ - - void setName (char[] name) - { - this.name = name; - } - - /*********************************************************************** - - Set the value of this cookie - - ***********************************************************************/ - - void setValue (char[] value) - { - this.value = value; - } - - /*********************************************************************** - - Set the version of this cookie - - ***********************************************************************/ - - void setVersion (uint vrsn) - { - this.vrsn = vrsn; - } - - /*********************************************************************** - - Set the path of this cookie - - ***********************************************************************/ - - void setPath (char[] path) - { - this.path = path; - } - - /*********************************************************************** - - Set the domain of this cookie - - ***********************************************************************/ - - void setDomain (char[] domain) - { - this.domain = domain; - } - - /*********************************************************************** - - Set the comment associated with this cookie - - ***********************************************************************/ - - void setComment (char[] comment) - { - this.comment = comment; - } - - /*********************************************************************** - - Set the maximum duration of this cookie - - ***********************************************************************/ - - void setMaxAge (long maxAge) - { - this.maxAge = maxAge; - } - - /*********************************************************************** - - Indicate wether this cookie should be considered secure or not - - ***********************************************************************/ - - void setSecure (bool secure) - { - this.secure = secure; - } - - /*********************************************************************** - - Output the cookie as a text stream, via the provided IWriter - - ***********************************************************************/ - - void write (IWriter writer) - { - produce (&writer.buffer.consume); - } - - /*********************************************************************** - - Output the cookie as a text stream, via the provided consumer - - ***********************************************************************/ - - void produce (void delegate(void[]) consume) - { - consume (name); - - if (value.length) - consume ("="), consume (value); - - if (path.length) - consume (";Path="), consume (path); - - if (domain.length) - consume (";Domain="), consume (domain); - - if (vrsn) - { - char[16] tmp = void; - - consume (";Version="); - consume (Integer.format (tmp, vrsn)); - - if (comment.length) - consume (";Comment=\""), consume(comment), consume("\""); - - if (secure) - consume (";Secure"); - - if (maxAge >= 0) - consume (";Max-Age="c), consume (Integer.format (tmp, maxAge)); - } - } - - /*********************************************************************** - - Reset this cookie - - ***********************************************************************/ - - void clear () - { - vrsn = 1; - maxAge = 0; - secure = false; - name = path = domain = comment = null; - } -} - - - -/******************************************************************************* - - Implements a stack of cookies. Each cookie is pushed onto the - stack by a parser, which takes its input from HttpHeaders. The - stack can be populated for both client and server side cookies. - -*******************************************************************************/ - -class CookieStack -{ - private int depth; - private Cookie[] cookies; - - /********************************************************************** - - Construct a cookie stack with the specified initial extent. - The stack will grow as necessary over time. - - **********************************************************************/ - - this (int size) - { - cookies = new Cookie[0]; - resize (cookies, size); - } - - /********************************************************************** - - Pop the stack all the way to zero - - **********************************************************************/ - - final void reset () - { - depth = 0; - } - - /********************************************************************** - - Return a fresh cookie from the stack - - **********************************************************************/ - - final Cookie push () - { - if (depth == cookies.length) - resize (cookies, depth * 2); - return cookies [depth++]; - } - - /********************************************************************** - - Resize the stack such that it has more room. - - **********************************************************************/ - - private final static void resize (inout Cookie[] cookies, int size) - { - int i = cookies.length; - - for (cookies.length=size; i < cookies.length; ++i) - cookies[i] = new Cookie(); - } - - /********************************************************************** - - Iterate over all cookies in stack - - **********************************************************************/ - - int opApply (int delegate(inout Cookie) dg) - { - int result = 0; - - for (int i=0; i < depth; ++i) - if ((result = dg (cookies[i])) != 0) - break; - return result; - } -} - - - -/******************************************************************************* - - This is the support point for server-side cookies. It wraps a - CookieStack together with a set of HttpHeaders, along with the - appropriate cookie parser. One would do something very similar - for client side cookie parsing also. - -*******************************************************************************/ - -class HttpCookiesView : IWritable -{ - private bool parsed; - private CookieStack stack; - private CookieParser parser; - private HttpHeadersView headers; - - /********************************************************************** - - Construct cookie wrapper with the provided headers. - - **********************************************************************/ - - this (HttpHeadersView headers) - { - this.headers = headers; - - // create a stack for parsed cookies - stack = new CookieStack (10); - - // create a parser - parser = new CookieParser (stack); - } - - /********************************************************************** - - Output each of the cookies parsed to the provided IWriter. - - **********************************************************************/ - - void write (IWriter writer) - { - produce (&writer.buffer.consume, HttpConst.Eol); - } - - /********************************************************************** - - Output the token list to the provided consumer - - **********************************************************************/ - - void produce (void delegate (void[]) consume, char[] eol = HttpConst.Eol) - { - foreach (cookie; parse) - cookie.produce (consume), consume (eol); - } - - /********************************************************************** - - Reset these cookies for another parse - - **********************************************************************/ - - void reset () - { - stack.reset; - parsed = false; - } - - /********************************************************************** - - Parse all cookies from our HttpHeaders, pushing each onto - the CookieStack as we go. - - **********************************************************************/ - - CookieStack parse () - { - if (! parsed) - { - parsed = true; - - foreach (HeaderElement header; headers) - if (header.name.value == HttpHeader.Cookie.value) - parser.parse (header.value); - } - return stack; - } -} - - - -/******************************************************************************* - - Handles a set of output cookies by writing them into the list of - output headers. - -*******************************************************************************/ - -class HttpCookies -{ - private HttpHeaders headers; - - /********************************************************************** - - Construct an output cookie wrapper upon the provided - output headers. Each cookie added is converted to an - addition to those headers. - - **********************************************************************/ - - this (HttpHeaders headers) - { - this.headers = headers; - } - - /********************************************************************** - - Add a cookie to our output headers. - - **********************************************************************/ - - void add (Cookie cookie) - { - // add the cookie header via our callback - headers.add (HttpHeader.SetCookie, (IBuffer buf){cookie.produce (&buf.consume);}); - } -} - - - -/******************************************************************************* - - Server-side cookie parser. See RFC 2109 for details. - -*******************************************************************************/ - -class CookieParser : StreamIterator!(char) -{ - private enum State {Begin, LValue, Equals, RValue, Token, SQuote, DQuote}; - - private CookieStack stack; - private Buffer buffer; - - /*********************************************************************** - - ***********************************************************************/ - - this (CookieStack stack) - { - super(); - this.stack = stack; - buffer = new Buffer; - } - - /*********************************************************************** - - Callback for iterator.next(). We scan for name-value - pairs, populating Cookie instances along the way. - - ***********************************************************************/ - - protected uint scan (void[] data) - { - char c; - int mark, - vrsn; - char[] name, - token; - Cookie cookie; - - State state = State.Begin; - char[] content = cast(char[]) data; - - /*************************************************************** - - Found a value; set that also - - ***************************************************************/ - - void setValue (int i) - { - token = content [mark..i]; - //Print ("::name '%.*s'\n", name); - //Print ("::value '%.*s'\n", token); - - if (name[0] != '$') - { - cookie = stack.push(); - cookie.setName (name); - cookie.setValue (token); - cookie.setVersion (vrsn); - } - else - switch (toLower (name)) - { - case "$path": - if (cookie) - cookie.setPath (token); - break; - - case "$domain": - if (cookie) - cookie.setDomain (token); - break; - - case "$version": - vrsn = cast(int) Integer.parse (token); - break; - - default: - break; - } - state = State.Begin; - } - - /*************************************************************** - - Scan content looking for cookie fields - - ***************************************************************/ - - for (int i; i < content.length; ++i) - { - c = content [i]; - switch (state) - { - // look for an lValue - case State.Begin: - mark = i; - if (isalpha (c) || c is '$') - state = State.LValue; - continue; - - // scan until we have all lValue chars - case State.LValue: - if (! isalnum (c)) - { - state = State.Equals; - name = content [mark..i]; - --i; - } - continue; - - // should now have either a '=', ';', or ',' - case State.Equals: - if (c is '=') - state = State.RValue; - else - if (c is ',' || c is ';') - // get next NVPair - state = State.Begin; - continue; - - // look for a quoted token, or a plain one - case State.RValue: - mark = i; - if (c is '\'') - state = State.SQuote; - else - if (c is '"') - state = State.DQuote; - else - if (isalpha (c)) - state = State.Token; - continue; - - // scan for all plain token chars - case State.Token: - if (! isalnum (c)) - { - setValue (i); - --i; - } - continue; - - // scan until the next ' - case State.SQuote: - if (c is '\'') - ++mark, setValue (i); - continue; - - // scan until the next " - case State.DQuote: - if (c is '"') - ++mark, setValue (i); - continue; - - default: - continue; - } - } - - // we ran out of content; patch partial cookie values - if (state is State.Token) - setValue (content.length); - - // go home - return IConduit.Eof; - } - - /*********************************************************************** - - Locate the next token from the provided buffer, and map a - buffer reference into token. Returns true if a token was - located, false otherwise. - - Note that the buffer content is not duplicated. Instead, a - slice of the buffer is referenced by the token. You can use - Token.clone() or Token.toString().dup() to copy content per - your application needs. - - Note also that there may still be one token left in a buffer - that was not terminated correctly (as in eof conditions). In - such cases, tokens are mapped onto remaining content and the - buffer will have no more readable content. - - ***********************************************************************/ - - bool parse (char[] header) - { - super.set (buffer.setContent (header)); - return next.ptr > null; - } - - /********************************************************************** - - in-place conversion to lowercase - - **********************************************************************/ - - final static char[] toLower (inout char[] src) - { - foreach (int i, char c; src) - if (c >= 'A' && c <= 'Z') - src[i] = c + ('a' - 'A'); - return src; - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpGet.d --- a/tango/tango/net/http/HttpGet.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,82 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpGet; - -public import tango.net.Uri; - -private import tango.io.GrowBuffer; - -private import tango.net.http.HttpClient, - tango.net.http.HttpHeaders; - -/******************************************************************************* - - Supports the basic needs of a client making requests of an HTTP - server. The following is a usage example: - --- - // open a web-page for reading (see HttpPost for writing) - auto page = new HttpGet ("http://www.digitalmars.com/d/intro.html"); - - // retrieve and flush display content - Cout (cast(char[]) page.read) (); - --- - -*******************************************************************************/ - -class HttpGet : HttpClient -{ - private GrowBuffer buffer; - - /*********************************************************************** - - Create a client for the given URL. The argument should be - fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (char[] url, uint pageChunk = 16 * 1024) - { - this (new Uri(url), pageChunk); - } - - /*********************************************************************** - - Create a client with the provided Uri instance. The Uri should - be fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (Uri uri, uint pageChunk = 16 * 1024) - { - super (HttpClient.Get, uri); - buffer = new GrowBuffer (pageChunk, pageChunk); - } - - /*********************************************************************** - - ***********************************************************************/ - - void[] read () - { - try { - buffer.clear; - open (buffer); - if (isResponseOK) - buffer.fill (getResponseHeaders.getInt(HttpHeader.ContentLength, uint.max)); - } finally {close;} - return buffer.slice; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpHeaders.d --- a/tango/tango/net/http/HttpHeaders.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,340 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpHeaders; - -private import tango.time.Time; - -private import tango.io.model.IBuffer; - -public import tango.net.http.HttpConst; - -private import tango.net.http.HttpTokens; - -private import tango.text.stream.LineIterator; - -/****************************************************************************** - - Exposes freachable HttpHeader instances - -******************************************************************************/ - -struct HeaderElement -{ - HttpHeaderName name; - char[] value; -} - -/****************************************************************************** - - Maintains a set of input headers. These are placed into an input - buffer and indexed via a HttpStack. - -******************************************************************************/ - -class HttpHeadersView : HttpTokens -{ - // tell compiler to used super.parse() also - alias HttpTokens.parse parse; - - private LineIterator!(char) line; - - /********************************************************************** - - Construct this set of headers, using a HttpStack based - upon a ':' delimiter - - **********************************************************************/ - - this () - { - // separator is a ':', and specify we want it included as - // part of the name whilst iterating - super (':', true); - - // construct a line tokenizer for later usage - line = new LineIterator!(char); - } - - /********************************************************************** - - Clone a source set of HttpHeaders - - **********************************************************************/ - - this (HttpHeadersView source) - { - super (source); - } - - /********************************************************************** - - Clone this set of HttpHeadersView - - **********************************************************************/ - - HttpHeadersView clone () - { - return new HttpHeadersView (this); - } - - /********************************************************************** - - Read all header lines. Everything is mapped rather - than being allocated & copied - - **********************************************************************/ - - void parse (IBuffer input) - { - setParsed (true); - line.set (input); - - while (line.next && line.get.length) - stack.push (line.get); - } - - /********************************************************************** - - Return the value of the provided header, or null if the - header does not exist - - **********************************************************************/ - - char[] get (HttpHeaderName name, char[] def = null) - { - return super.get (name.value, def); - } - - /********************************************************************** - - Return the integer value of the provided header, or -1 - if the header does not exist - - **********************************************************************/ - - int getInt (HttpHeaderName name, int def = -1) - { - return super.getInt (name.value, def); - } - - /********************************************************************** - - Return the date value of the provided header, or Time.epoch - if the header does not exist - - **********************************************************************/ - - Time getDate (HttpHeaderName name, Time def = Time.epoch) - { - return super.getDate (name.value, def); - } - - /********************************************************************** - - Iterate over the set of headers. This is a shell around - the superclass, where we can convert the HttpToken into - a HeaderElement instead. - - **********************************************************************/ - - int opApply (int delegate(inout HeaderElement) dg) - { - HeaderElement element; - int result = 0; - - foreach (HttpToken token; super) - { - element.name.value = token.name; - element.value = token.value; - result = dg (element); - if (result) - break; - } - return result; - } - - /********************************************************************** - - Create a filter for iterating of a set of named headers. - We have to create a filter since we can't pass additional - arguments directly to an opApply() method. - - **********************************************************************/ - - FilteredHeaders createFilter (HttpHeaderName header) - { - return new FilteredHeaders (this, header); - } - - /********************************************************************** - - Filter class for isolating a set of named headers. - - **********************************************************************/ - - private static class FilteredHeaders : FilteredTokens - { - /************************************************************** - - Construct a filter upon the specified headers, for - the given header name. - - **************************************************************/ - - this (HttpHeadersView headers, HttpHeaderName header) - { - super (headers, header.value); - } - - /************************************************************** - - Iterate over all headers matching the given name. - This wraps the HttpToken iterator to convert the - output into a HeaderElement instead. - - **************************************************************/ - - int opApply (int delegate(inout HeaderElement) dg) - { - HeaderElement element; - int result = 0; - - foreach (HttpToken token; super) - { - element.name.value = token.name; - element.value = token.value; - result = dg (element); - if (result) - break; - } - return result; - } - - } -} - - -/****************************************************************************** - - Maintains a set of output headers. These are held in an output - buffer, and indexed via a HttpStack. Deleting a header could be - supported by setting the HttpStack entry to null, and ignoring - such values when it's time to write the headers. - -******************************************************************************/ - -class HttpHeaders : HttpHeadersView -{ - /********************************************************************** - - Construct output headers, using the provided buffer as - a place to stash the header content. - - **********************************************************************/ - - this (IBuffer output) - { - super (); - super.setOutputBuffer (output); - } - - /********************************************************************** - - Clone a source set of HttpHeaders - - **********************************************************************/ - - this (HttpHeaders source) - { - super (source); - } - - /********************************************************************** - - Clone this set of HttpHeaders - - **********************************************************************/ - - HttpHeaders clone () - { - return new HttpHeaders (this); - } - - /********************************************************************** - - Add the specified header, and use a callback to provide - the content. - - **********************************************************************/ - - void add (HttpHeaderName name, void delegate (IBuffer) dg) - { - super.add (name.value, dg); - } - - /********************************************************************** - - Add the specified header and text - - **********************************************************************/ - - void add (HttpHeaderName name, char[] value) - { - super.add (name.value, value); - } - - /********************************************************************** - - Add the specified header and integer value - - **********************************************************************/ - - void addInt (HttpHeaderName name, int value) - { - super.addInt (name.value, value); - } - - /********************************************************************** - - Add the specified header and long/date value - - **********************************************************************/ - - void addDate (HttpHeaderName name, Time value) - { - super.addDate (name.value, value); - } - - /********************************************************************** - - Remove the specified header header. Returns false if not - found. - - **********************************************************************/ - - bool remove (HttpHeaderName name) - { - return super.remove (name.value); - } - - /********************************************************************** - - Return the output buffer provided during construction. - - **********************************************************************/ - - IBuffer getOutputBuffer () - { - return super.getOutputBuffer (); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpParams.d --- a/tango/tango/net/http/HttpParams.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,181 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpParams; - -private import tango.time.Time; - -private import tango.io.model.IBuffer; - -private import tango.net.http.HttpTokens; - -private import tango.io.protocol.model.IWriter; - -private import tango.text.stream.SimpleIterator; - -public import tango.net.http.model.HttpParamsView; - -/****************************************************************************** - - Maintains a set of query parameters, parsed from an HTTP request. - Use HttpParams instead for output parameters. - - Note that these input params may have been encoded by the user- - agent. Unfortunately there has been little consensus on what that - encoding should be (especially regarding GET query-params). With - luck, that will change to a consistent usage of UTF-8 within the - near future. - -******************************************************************************/ - -class HttpParams : HttpTokens, HttpParamsView -{ - // tell compiler to expose super.parse() also - alias HttpTokens.parse parse; - - private SimpleIterator!(char) amp; - - /********************************************************************** - - Construct parameters by telling the HttpStack that - name/value pairs are seperated by a '=' character. - - **********************************************************************/ - - this () - { - super ('='); - - // construct a line tokenizer for later usage - amp = new SimpleIterator!(char) ("&"); - } - - /********************************************************************** - - Construct output params upon the provided IBuffer - - **********************************************************************/ - - this (IBuffer output) - { - this(); - setOutputBuffer (output); - } - - /********************************************************************** - - Read all query parameters. Everything is mapped rather - than being allocated & copied - - **********************************************************************/ - - void parse (IBuffer input) - { - setParsed (true); - amp.set (input); - - while (amp.next || amp.get.length) - stack.push (amp.get); - } - - /********************************************************************** - - Add a name/value pair to the query list - - **********************************************************************/ - - void add (char[] name, char[] value) - { - super.add (name, value); - } - - /********************************************************************** - - Add a name/integer pair to the query list - - **********************************************************************/ - - void addInt (char[] name, int value) - { - super.addInt (name, value); - } - - - /********************************************************************** - - Add a name/date(long) pair to the query list - - **********************************************************************/ - - void addDate (char[] name, Time value) - { - super.addDate (name, value); - } - - /********************************************************************** - - Return the value of the provided header, or null if the - header does not exist - - **********************************************************************/ - - char[] get (char[] name, char[] ret = null) - { - return super.get (name, ret); - } - - /********************************************************************** - - Return the integer value of the provided header, or the - provided default-value if the header does not exist - - **********************************************************************/ - - int getInt (char[] name, int ret = -1) - { - return super.getInt (name, ret); - } - - /********************************************************************** - - Return the date value of the provided header, or the - provided default-value if the header does not exist - - **********************************************************************/ - - Time getDate (char[] name, Time ret = Time.epoch) - { - return super.getDate (name, ret); - } - - /********************************************************************** - - Output the token list to the provided writer - - **********************************************************************/ - - void write (IWriter writer) - { - super.write (writer); - } - - /********************************************************************** - - Output the param list to the provided consumer - - **********************************************************************/ - - void produce (void delegate (void[]) consume, char[] eol) - { - super.produce (consume, eol); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpPost.d --- a/tango/tango/net/http/HttpPost.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,122 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpPost; - -public import tango.net.Uri; - -private import tango.io.GrowBuffer; - -private import tango.net.http.HttpClient, - tango.net.http.HttpHeaders; - -/******************************************************************************* - - Supports the basic needs of a client sending POST requests to a - HTTP server. The following is a usage example: - - --- - // open a web-page for posting (see HttpGet for simple reading) - auto post = new HttpPost ("http://yourhost/yourpath"); - - // send, retrieve and display response - Cout (cast(char[]) post.write("posted data", "text/plain")); - --- - -*******************************************************************************/ - -class HttpPost : HttpClient -{ - private GrowBuffer buffer; - - /*********************************************************************** - - Create a client for the given URL. The argument should be - fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (char[] url, uint pageChunk = 16 * 1024) - { - this (new Uri(url), pageChunk); - } - - /*********************************************************************** - - Create a client with the provided Uri instance. The Uri should - be fully qualified with an "http:" or "https:" scheme, or an - explicit port should be provided. - - ***********************************************************************/ - - this (Uri uri, uint pageChunk = 16 * 1024) - { - super (HttpClient.Post, uri); - buffer = new GrowBuffer (pageChunk, pageChunk); - } - - /*********************************************************************** - - Send query params only - - ***********************************************************************/ - - void[] write () - { - return write (null); - } - - /*********************************************************************** - - Send content and no query params. The contentLength header - will be set to match the provided content, and contentType - set to the given type. - - ***********************************************************************/ - - void[] write (void[] content, char[] type) - { - auto headers = getRequestHeaders(); - - headers.add (HttpHeader.ContentType, type); - headers.addInt (HttpHeader.ContentLength, content.length); - - return write (delegate void (IBuffer b){b.append(content);}); - } - - /*********************************************************************** - - Send raw data via the provided pump, and no query - params. You have full control over headers and so - on via this method. - - ***********************************************************************/ - - void[] write (Pump pump) - { - try { - buffer.clear; - open (pump, buffer); - - // check return status for validity - auto status = getStatus(); - if (status is HttpResponseCode.OK || - status is HttpResponseCode.Created || - status is HttpResponseCode.Accepted) - buffer.fill (getResponseHeaders.getInt (HttpHeader.ContentLength, uint.max)); - } finally {close;} - - return buffer.slice; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpStack.d --- a/tango/tango/net/http/HttpStack.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,278 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris, John Reimer - -*******************************************************************************/ - -module tango.net.http.HttpStack; - -private import tango.core.Exception; - -/****************************************************************************** - - Unix doesn't appear to have a memicmp() ... JJR notes that the - strncasecmp() is available instead. - -******************************************************************************/ - -version (Win32) - { - extern (C) int memicmp (char *, char *, uint); - } - -version (Posix) - { - extern (C) int strncasecmp (char *, char*, uint); - } - -extern (C) void* memmove (void* dst, void* src, int n); - - -/****************************************************************************** - - Internal representation of a token - -******************************************************************************/ - -class Token -{ - private char[] value; - - Token set (char[] value) - { - this.value = value; - return this; - } - - char[] toString () - { - return value; - } -} - -/****************************************************************************** - - A stack of Tokens, used for capturing http headers. The tokens - themselves are typically mapped onto the content of a Buffer, - or some other external content, so there's minimal allocation - involved (typically zero). - -******************************************************************************/ - -class HttpStack -{ - private int depth; - private Token[] tokens; - - private static const int MaxHttpStackSize = 256; - - /********************************************************************** - - Construct a HttpStack with the specified initial size. - The stack will later be resized as necessary. - - **********************************************************************/ - - this (int size = 10) - { - tokens = new Token[0]; - resize (tokens, size); - } - - /********************************************************************** - - Clone this stack of tokens - - **********************************************************************/ - - HttpStack clone () - { - // setup a new HttpStack of the same depth - HttpStack clone = new HttpStack(depth); - - clone.depth = depth; - - // duplicate the content of each original token - for (int i=0; i < depth; ++i) - clone.tokens[i].set (tokens[i].toString().dup); - - return clone; - } - - /********************************************************************** - - Iterate over all tokens in stack - - **********************************************************************/ - - int opApply (int delegate(inout Token) dg) - { - int result = 0; - - for (int i=0; i < depth; ++i) - if ((result = dg (tokens[i])) != 0) - break; - return result; - } - - /********************************************************************** - - Pop the stack all the way back to zero - - **********************************************************************/ - - final void reset () - { - depth = 0; - } - - /********************************************************************** - - Scan the tokens looking for the first one with a matching - name. Returns the matching Token, or null if there is no - such match. - - **********************************************************************/ - - final Token findToken (char[] match) - { - Token tok; - - for (int i=0; i < depth; ++i) - { - tok = tokens[i]; - if (isMatch (tok, match)) - return tok; - } - return null; - } - - /********************************************************************** - - Scan the tokens looking for the first one with a matching - name, and remove it. Returns true if a match was found, or - false if not. - - **********************************************************************/ - - final bool removeToken (char[] match) - { - for (int i=0; i < depth; ++i) - if (isMatch (tokens[i], match)) - { - tokens[i].value = null; - return true; - } - return false; - } - - /********************************************************************** - - Return the current stack depth - - **********************************************************************/ - - final int size () - { - return depth; - } - - /********************************************************************** - - Push a new token onto the stack, and set it content to - that provided. Returns the new Token. - - **********************************************************************/ - - final Token push (char[] content) - { - return push().set (content); - } - - /********************************************************************** - - Push a new token onto the stack, and set it content to - be that of the specified token. Returns the new Token. - - **********************************************************************/ - - final Token push (inout Token token) - { - return push (token.toString()); - } - - /********************************************************************** - - Push a new token onto the stack, and return it. - - **********************************************************************/ - - final Token push () - { - if (depth == tokens.length) - resize (tokens, depth * 2); - return tokens[depth++]; - } - - /********************************************************************** - - Pop the stack by one. - - **********************************************************************/ - - final void pop () - { - if (depth) - --depth; - else - throw new IOException ("illegal attempt to pop Token stack"); - } - - /********************************************************************** - - See if the given token matches the specified text. The - two must match the minimal extent exactly. - - **********************************************************************/ - - final static bool isMatch (inout Token token, char[] match) - { - char[] target = token.toString(); - - int length = target.length; - if (length > match.length) - length = match.length; - - if (length is 0) - return false; - - version (Win32) - return memicmp (target.ptr, match.ptr, length) is 0; - version (Posix) - return strncasecmp (target.ptr, match.ptr, length) is 0; - } - - /********************************************************************** - - Resize this stack by extending the array. - - **********************************************************************/ - - final static void resize (inout Token[] tokens, int size) - { - int i = tokens.length; - - // this should *never* realistically happen - if (size > MaxHttpStackSize) - throw new IOException ("Token stack exceeds maximum depth"); - - for (tokens.length=size; i < tokens.length; ++i) - tokens[i] = new Token(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpTokens.d --- a/tango/tango/net/http/HttpTokens.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,554 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpTokens; - -private import tango.time.Time; - -private import tango.io.Buffer; - -private import tango.io.model.IBuffer; - -private import tango.net.http.HttpStack, - tango.net.http.HttpConst; - -private import Text = tango.text.Util; - -private import tango.io.protocol.model.IWriter; - -private import Integer = tango.text.convert.Integer; - -private import TimeStamp = tango.text.convert.TimeStamp; - -/****************************************************************************** - - Struct used to expose freachable HttpToken instances. - -******************************************************************************/ - -struct HttpToken -{ - char[] name, - value; -} - -/****************************************************************************** - - Maintains a set of HTTP tokens. These tokens include headers, query- - parameters, and anything else vaguely related. Both input and output - are supported, though a subclass may choose to expose as read-only. - - All tokens are mapped directly onto a buffer, so there is no memory - allocation or copying involved. - - Note that this class does not support deleting tokens, per se. Instead - it marks tokens as being 'unused' by setting content to null, avoiding - unwarranted reshaping of the token stack. The token stack is reused as - time goes on, so there's only minor runtime overhead. - -******************************************************************************/ - -class HttpTokens : IWritable -{ - protected HttpStack stack; - - private IBuffer input, - output; - private bool parsed; - private bool inclusive; - private char separator; - private char[1] sepString; - - /********************************************************************** - - Construct a set of tokens based upon the given delimiter, - and an indication of whether said delimiter should be - considered part of the left side (effectively the name). - - The latter is useful with headers, since the seperating - ':' character should really be considered part of the - name for purposes of subsequent token matching. - - **********************************************************************/ - - this (char separator, bool inclusive = false) - { - stack = new HttpStack; - - this.inclusive = inclusive; - this.separator = separator; - - // convert separator into a string, for later use - sepString[0] = separator; - - // pre-construct an empty buffer for wrapping char[] parsing - input = new Buffer; - } - - /********************************************************************** - - Clone a source set of HttpTokens - - **********************************************************************/ - - this (HttpTokens source) - { - stack = source.stack.clone; - input = null; - output = source.output; - parsed = true; - inclusive = source.inclusive; - separator = source.separator; - sepString[0] = source.sepString[0]; - } - - /********************************************************************** - - Read all tokens. Everything is mapped rather than being - allocated & copied - - **********************************************************************/ - - abstract void parse (IBuffer input); - - /********************************************************************** - - Parse an input string. - - **********************************************************************/ - - void parse (char[] content) - { - input.setContent (content); - parse (input); - } - - /********************************************************************** - - Reset this set of tokens. - - **********************************************************************/ - - HttpTokens reset () - { - stack.reset; - parsed = false; - - // reset output buffer, if it was configured - if (output) - output.clear; - - return this; - } - - /********************************************************************** - - Have tokens been parsed yet? - - **********************************************************************/ - - bool isParsed () - { - return parsed; - } - - /********************************************************************** - - Indicate whether tokens have been parsed or not. - - **********************************************************************/ - - void setParsed (bool parsed) - { - this.parsed = parsed; - } - - /********************************************************************** - - Return the value of the provided header, or null if the - header does not exist - - **********************************************************************/ - - char[] get (char[] name, char[] ret = null) - { - Token token = stack.findToken (name); - if (token) - { - HttpToken element; - - if (split (token, element)) - ret = trim (element.value); - } - return ret; - } - - /********************************************************************** - - Return the integer value of the provided header, or the - provided default-vaule if the header does not exist - - **********************************************************************/ - - int getInt (char[] name, int ret = -1) - { - char[] value = get (name); - - if (value.length) - ret = cast(int) Integer.parse (value); - - return ret; - } - - /********************************************************************** - - Return the date value of the provided header, or the - provided default-value if the header does not exist - - **********************************************************************/ - - Time getDate (char[] name, Time date = Time.epoch) - { - char[] value = get (name); - - if (value.length) - date = TimeStamp.parse (value); - - return date; - } - - /********************************************************************** - - Iterate over the set of tokens - - **********************************************************************/ - - int opApply (int delegate(inout HttpToken) dg) - { - HttpToken element; - int result = 0; - - foreach (Token t; stack) - if (split (t, element)) - { - result = dg (element); - if (result) - break; - } - return result; - } - - /********************************************************************** - - Output the token list to the provided writer - - **********************************************************************/ - - void write (IWriter writer) - { - produce (&writer.buffer.consume, HttpConst.Eol); - } - - /********************************************************************** - - Output the token list to the provided consumer - - **********************************************************************/ - - void produce (void delegate (void[]) consume, char[] eol) - { - foreach (Token token; stack) - { - auto content = token.toString(); - if (content.length) - consume (content), consume (eol); - } - } - - /********************************************************************** - - overridable method to handle the case where a token does - not have a separator. Apparently, this can happen in HTTP - usage - - **********************************************************************/ - - protected bool handleMissingSeparator (char[] s, inout HttpToken element) - { - return false; - } - - /********************************************************************** - - split basic token into an HttpToken - - **********************************************************************/ - - final private bool split (Token t, inout HttpToken element) - { - auto s = t.toString(); - - if (s.length) - { - auto i = Text.locate (s, separator); - - // we should always find the separator - if (i < s.length) - { - auto j = (inclusive) ? i+1 : i; - element.name = s[0 .. j]; - element.value = (++i < s.length) ? s[i .. $] : null; - return true; - } - else - // allow override to specialize this case - return handleMissingSeparator (s, element); - } - return false; - } - - /********************************************************************** - - Create a filter for iterating over the tokens matching - a particular name. - - **********************************************************************/ - - FilteredTokens createFilter (char[] match) - { - return new FilteredTokens (this, match); - } - - /********************************************************************** - - Implements a filter for iterating over tokens matching - a particular name. We do it like this because there's no - means of passing additional information to an opApply() - method. - - **********************************************************************/ - - private static class FilteredTokens - { - private char[] match; - private HttpTokens tokens; - - /************************************************************** - - Construct this filter upon the given tokens, and - set the pattern to match against. - - **************************************************************/ - - this (HttpTokens tokens, char[] match) - { - this.match = match; - this.tokens = tokens; - } - - /************************************************************** - - Iterate over all tokens matching the given name - - **************************************************************/ - - int opApply (int delegate(inout HttpToken) dg) - { - HttpToken element; - int result = 0; - - foreach (Token token; tokens.stack) - if (tokens.stack.isMatch (token, match)) - if (tokens.split (token, element)) - { - result = dg (element); - if (result) - break; - } - return result; - } - - } - - /********************************************************************** - - Is the argument a whitespace character? - - **********************************************************************/ - - private bool isSpace (char c) - { - return cast(bool) (c is ' ' || c is '\t' || c is '\r' || c is '\n'); - } - - /********************************************************************** - - Trim the provided string by stripping whitespace from - both ends. Returns a slice of the original content. - - **********************************************************************/ - - private char[] trim (char[] source) - { - int front, - back = source.length; - - if (back) - { - while (front < back && isSpace(source[front])) - ++front; - - while (back > front && isSpace(source[back-1])) - --back; - } - return source [front .. back]; - } - - - /********************************************************************** - ****************** these should be exposed carefully ****************** - **********************************************************************/ - - - /********************************************************************** - - Set the output buffer for adding tokens to. This is used - by the various mutating classes. - - **********************************************************************/ - - protected void setOutputBuffer (IBuffer output) - { - this.output = output; - } - - /********************************************************************** - - Return the buffer used for output. - - **********************************************************************/ - - protected IBuffer getOutputBuffer () - { - return output; - } - - /********************************************************************** - - Return a char[] representing the output. An empty array - is returned if output was not configured. This perhaps - could just return our 'output' buffer content, but that - would not reflect deletes, or seperators. Better to do - it like this instead, for a small cost. - - **********************************************************************/ - - char[] formatTokens (IBuffer dst, char[] delim) - { - int adjust = 0; - - foreach (Token token; stack) - { - char[] content = token.toString; - if (content.length) - { - dst.append(content).append(delim); - adjust = delim.length; - } - } - - dst.truncate (dst.limit - adjust); - return cast(char[]) dst.slice; - } - - /********************************************************************** - - Add a token with the given name. The content is provided - via the specified delegate. We stuff this name & content - into the output buffer, and map a new Token onto the - appropriate buffer slice. - - **********************************************************************/ - - protected void add (char[] name, void delegate (IBuffer) dg) - { - // save the buffer write-position - int prior = output.limit; - - // add the name - output.append (name); - - // don't append separator if it's already part of the name - if (! inclusive) - output.append (sepString); - - // add the value - dg (output); - - // map new token onto buffer slice - stack.push (cast(char[]) output.slice [prior .. $]); - } - - /********************************************************************** - - Add a simple name/value pair to the output - - **********************************************************************/ - - protected void add (char[] name, char[] value) - { - void addValue (IBuffer buffer) - { - buffer.append (value); - } - - add (name, &addValue); - } - - /********************************************************************** - - Add a name/integer pair to the output - - **********************************************************************/ - - protected void addInt (char[] name, int value) - { - char[16] tmp = void; - - add (name, Integer.format (tmp, cast(long) value)); - } - - /********************************************************************** - - Add a name/date(long) pair to the output - - **********************************************************************/ - - protected void addDate (char[] name, Time value) - { - char[40] tmp = void; - - add (name, TimeStamp.format (tmp, value)); - } - - /********************************************************************** - - remove a token from our list. Returns false if the named - token is not found. - - **********************************************************************/ - - protected bool remove (char[] name) - { - return stack.removeToken (name); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/HttpTriplet.d --- a/tango/tango/net/http/HttpTriplet.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,100 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.HttpTriplet; - -private import tango.core.Exception; - -private import tango.io.protocol.model.IWriter; - -/****************************************************************************** - - Class to represent an HTTP response- or request-line - -******************************************************************************/ - -class HttpTriplet : IWritable -{ - protected char[] line; - protected char[][3] tokens; - - /********************************************************************** - - test the validity of these tokens - - **********************************************************************/ - - abstract void test (); - - /********************************************************************** - - Parse the the given line into its constituent components. - - **********************************************************************/ - - void parse (char[] line) - { - int i; - int mark; - - this.line = line; - foreach (int index, char c; line) - if (c is ' ') - if (i < 2) - { - tokens[i] = line[mark .. index]; - mark = index+1; - ++i; - } - else - break; - - tokens[2] = line [mark .. line.length]; - - test (); - } - - /********************************************************************** - - return a reference to the original string - - **********************************************************************/ - - override char[] toString () - { - return line; - } - - /********************************************************************** - - Output the string via the given writer - - **********************************************************************/ - - void write (IWriter writer) - { - writer(toString).newline(); - } - - /********************************************************************** - - throw an exception - - **********************************************************************/ - - final void error (char[] msg) - { - throw new IOException (msg); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/http/model/HttpParamsView.d --- a/tango/tango/net/http/model/HttpParamsView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,70 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.http.model.HttpParamsView; - -private import tango.time.Time; - -private import tango.io.model.IBuffer; - -private import tango.io.protocol.model.IWriter; - -/****************************************************************************** - - Maintains a set of query parameters, parsed from an HTTP request. - Use HttpParams instead for output parameters. - - Note that these input params may have been encoded by the user- - agent. Unfortunately there has been little consensus on what that - encoding should be (especially regarding GET query-params). With - luck, that will change to a consistent usage of UTF-8 within the - near future. - -******************************************************************************/ - -interface HttpParamsView : IWritable -{ - /********************************************************************** - - Return the value of the provided header, or null if the - header does not exist - - **********************************************************************/ - - char[] get (char[] name, char[] ret = null); - - /********************************************************************** - - Return the integer value of the provided header, or the - provided default-value if the header does not exist - - **********************************************************************/ - - int getInt (char[] name, int ret = -1); - - /********************************************************************** - - Return the date value of the provided header, or the - provided default-value if the header does not exist - - **********************************************************************/ - - Time getDate (char[] name, Time ret = Time.epoch); - - /********************************************************************** - - Output the param list to the provided consumer - - **********************************************************************/ - - void produce (void delegate (void[]) consume, char[] eol); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/net/model/UriView.d --- a/tango/tango/net/model/UriView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2004 - - author: Kris - -*******************************************************************************/ - -module tango.net.model.UriView; - -/******************************************************************************* - - Implements an RFC 2396 compliant URI specification. See - this page - for more information. - - The implementation fails the spec on two counts: it doesn't insist - on a scheme being present in the UriView, and it doesn't implement the - "Relative References" support noted in section 5.2. - - Note that IRI support can be implied by assuming each of userinfo, path, - query, and fragment are UTF-8 encoded - (see - this page for further details). - - Use a Uri instead where you need to alter specific uri attributes. - -*******************************************************************************/ - -abstract class UriView -{ - public enum {InvalidPort = -1} - - /*********************************************************************** - - Return the default port for the given scheme. InvalidPort - is returned if the scheme is unknown, or does not accept - a port. - - ***********************************************************************/ - - abstract int getDefaultPort (char[] scheme); - - /*********************************************************************** - - Return the parsed scheme, or null if the scheme was not - specified - - ***********************************************************************/ - - abstract char[] getScheme(); - - /*********************************************************************** - - Return the parsed host, or null if the host was not - specified - - ***********************************************************************/ - - abstract char[] getHost(); - - /*********************************************************************** - - Return the parsed port number, or InvalidPort if the port - was not provided. - - ***********************************************************************/ - - abstract int getPort(); - - /*********************************************************************** - - Return a valid port number by performing a lookup on the - known schemes if the port was not explicitly specified. - - ***********************************************************************/ - - abstract int getValidPort(); - - /*********************************************************************** - - Return the parsed userinfo, or null if userinfo was not - provided. - - ***********************************************************************/ - - abstract char[] getUserInfo(); - - /*********************************************************************** - - Return the parsed path, or null if the path was not - provided. - - ***********************************************************************/ - - abstract char[] getPath(); - - /*********************************************************************** - - Return the parsed query, or null if a query was not - provided. - - ***********************************************************************/ - - abstract char[] getQuery(); - - /*********************************************************************** - - Return the parsed fragment, or null if a fragment was not - provided. - - ***********************************************************************/ - - abstract char[] getFragment(); - - /*********************************************************************** - - Return whether or not the UriView scheme is considered generic. - - ***********************************************************************/ - - abstract bool isGeneric (); - - /*********************************************************************** - - Emit the content of this UriView. Output is constructed per - RFC 2396. - - ***********************************************************************/ - - abstract char[] toString (); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/complex.d --- a/tango/tango/stdc/complex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.complex; - -extern (C): - -cdouble cacos(cdouble z); -cfloat cacosf(cfloat z); -creal cacosl(creal z); - -cdouble casin(cdouble z); -cfloat casinf(cfloat z); -creal casinl(creal z); - -cdouble catan(cdouble z); -cfloat catanf(cfloat z); -creal catanl(creal z); - -cdouble ccos(cdouble z); -cfloat ccosf(cfloat z); -creal ccosl(creal z); - -cdouble csin(cdouble z); -cfloat csinf(cfloat z); -creal csinl(creal z); - -cdouble ctan(cdouble z); -cfloat ctanf(cfloat z); -creal ctanl(creal z); - -cdouble cacosh(cdouble z); -cfloat cacoshf(cfloat z); -creal cacoshl(creal z); - -cdouble casinh(cdouble z); -cfloat casinhf(cfloat z); -creal casinhl(creal z); - -cdouble catanh(cdouble z); -cfloat catanhf(cfloat z); -creal catanhl(creal z); - -cdouble ccosh(cdouble z); -cfloat ccoshf(cfloat z); -creal ccoshl(creal z); - -cdouble csinh(cdouble z); -cfloat csinhf(cfloat z); -creal csinhl(creal z); - -cdouble ctanh(cdouble z); -cfloat ctanhf(cfloat z); -creal ctanhl(creal z); - -cdouble cexp(cdouble z); -cfloat cexpf(cfloat z); -creal cexpl(creal z); - -cdouble clog(cdouble z); -cfloat clogf(cfloat z); -creal clogl(creal z); - - double cabs(cdouble z); - float cabsf(cfloat z); - real cabsl(creal z); - -cdouble cpow(cdouble x, cdouble y); -cfloat cpowf(cfloat x, cfloat y); -creal cpowl(creal x, creal y); - -cdouble csqrt(cdouble z); -cfloat csqrtf(cfloat z); -creal csqrtl(creal z); - - double carg(cdouble z); - float cargf(cfloat z); - real cargl(creal z); - - double cimag(cdouble z); - float cimagf(cfloat z); - real cimagl(creal z); - -cdouble conj(cdouble z); -cfloat conjf(cfloat z); -creal conjl(creal z); - -cdouble cproj(cdouble z); -cfloat cprojf(cfloat z); -creal cprojl(creal z); - -// double creal(cdouble z); - float crealf(cfloat z); - real creall(creal z); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/config.d --- a/tango/tango/stdc/config.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.config; - -extern (C): - -version( Windows ) -{ - alias int c_long; - alias uint c_ulong; -} -else -{ - static if( (void*).sizeof > int.sizeof ) - { - alias long c_long; - alias ulong c_ulong; - } - else - { - alias int c_long; - alias uint c_ulong; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/ctype.d --- a/tango/tango/stdc/ctype.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.ctype; - -extern (C): - -int isalnum(int c); -int isalpha(int c); -int isblank(int c); -int iscntrl(int c); -int isdigit(int c); -int isgraph(int c); -int islower(int c); -int isprint(int c); -int ispunct(int c); -int isspace(int c); -int isupper(int c); -int isxdigit(int c); -int tolower(int c); -int toupper(int c); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/errno.d --- a/tango/tango/stdc/errno.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,280 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.errno; - -private -{ - extern (C) int getErrno(); - extern (C) int setErrno(int); -} - -int errno() { return getErrno(); } -int errno( int val ) { return setErrno( val ); } - -extern (C): - -version( Win32 ) -{ - const EPERM = 1; // Operation not permitted - const ENOENT = 2; // No such file or directory - const ESRCH = 3; // No such process - const EINTR = 4; // Interrupted system call - const EIO = 5; // I/O error - const ENXIO = 6; // No such device or address - const E2BIG = 7; // Argument list too long - const ENOEXEC = 8; // Exec format error - const EBADF = 9; // Bad file number - const ECHILD = 10; // No child processes - const EAGAIN = 11; // Try again - const ENOMEM = 12; // Out of memory - const EACCES = 13; // Permission denied - const EFAULT = 14; // Bad address - const EBUSY = 16; // Device or resource busy - const EEXIST = 17; // File exists - const EXDEV = 18; // Cross-device link - const ENODEV = 19; // No such device - const ENOTDIR = 20; // Not a directory - const EISDIR = 21; // Is a directory - const EINVAL = 22; // Invalid argument - const ENFILE = 23; // File table overflow - const EMFILE = 24; // Too many open files - const ENOTTY = 25; // Not a typewriter - const EFBIG = 27; // File too large - const ENOSPC = 28; // No space left on device - const ESPIPE = 29; // Illegal seek - const EROFS = 30; // Read-only file system - const EMLINK = 31; // Too many links - const EPIPE = 32; // Broken pipe - const EDOM = 33; // Math argument out of domain of func - const ERANGE = 34; // Math result not representable - const EDEADLK = 36; // Resource deadlock would occur - const ENAMETOOLONG = 38; // File name too long - const ENOLCK = 39; // No record locks available - const ENOSYS = 40; // Function not implemented - const ENOTEMPTY = 41; // Directory not empty - const EILSEQ = 42; // Illegal byte sequence - const EDEADLOCK = EDEADLK; -} -else version( linux ) -{ - const EPERM = 1; // Operation not permitted - const ENOENT = 2; // No such file or directory - const ESRCH = 3; // No such process - const EINTR = 4; // Interrupted system call - const EIO = 5; // I/O error - const ENXIO = 6; // No such device or address - const E2BIG = 7; // Argument list too long - const ENOEXEC = 8; // Exec format error - const EBADF = 9; // Bad file number - const ECHILD = 10; // No child processes - const EAGAIN = 11; // Try again - const ENOMEM = 12; // Out of memory - const EACCES = 13; // Permission denied - const EFAULT = 14; // Bad address - const ENOTBLK = 15; // Block device required - const EBUSY = 16; // Device or resource busy - const EEXIST = 17; // File exists - const EXDEV = 18; // Cross-device link - const ENODEV = 19; // No such device - const ENOTDIR = 20; // Not a directory - const EISDIR = 21; // Is a directory - const EINVAL = 22; // Invalid argument - const ENFILE = 23; // File table overflow - const EMFILE = 24; // Too many open files - const ENOTTY = 25; // Not a typewriter - const ETXTBSY = 26; // Text file busy - const EFBIG = 27; // File too large - const ENOSPC = 28; // No space left on device - const ESPIPE = 29; // Illegal seek - const EROFS = 30; // Read-only file system - const EMLINK = 31; // Too many links - const EPIPE = 32; // Broken pipe - const EDOM = 33; // Math argument out of domain of func - const ERANGE = 34; // Math result not representable - const EDEADLK = 35; // Resource deadlock would occur - const ENAMETOOLONG = 36; // File name too long - const ENOLCK = 37; // No record locks available - const ENOSYS = 38; // Function not implemented - const ENOTEMPTY = 39; // Directory not empty - const ELOOP = 40; // Too many symbolic links encountered - const EWOULDBLOCK = EAGAIN; // Operation would block - const ENOMSG = 42; // No message of desired type - const EIDRM = 43; // Identifier removed - const ECHRNG = 44; // Channel number out of range - const EL2NSYNC = 45; // Level 2 not synchronized - const EL3HLT = 46; // Level 3 halted - const EL3RST = 47; // Level 3 reset - const ELNRNG = 48; // Link number out of range - const EUNATCH = 49; // Protocol driver not attached - const ENOCSI = 50; // No CSI structure available - const EL2HLT = 51; // Level 2 halted - const EBADE = 52; // Invalid exchange - const EBADR = 53; // Invalid request descriptor - const EXFULL = 54; // Exchange full - const ENOANO = 55; // No anode - const EBADRQC = 56; // Invalid request code - const EBADSLT = 57; // Invalid slot - const EDEADLOCK = EDEADLK; - const EBFONT = 59; // Bad font file format - const ENOSTR = 60; // Device not a stream - const ENODATA = 61; // No data available - const ETIME = 62; // Timer expired - const ENOSR = 63; // Out of streams resources - const ENONET = 64; // Machine is not on the network - const ENOPKG = 65; // Package not installed - const EREMOTE = 66; // Object is remote - const ENOLINK = 67; // Link has been severed - const EADV = 68; // Advertise error - const ESRMNT = 69; // Srmount error - const ECOMM = 70; // Communication error on send - const EPROTO = 71; // Protocol error - const EMULTIHOP = 72; // Multihop attempted - const EDOTDOT = 73; // RFS specific error - const EBADMSG = 74; // Not a data message - const EOVERFLOW = 75; // Value too large for defined data type - const ENOTUNIQ = 76; // Name not unique on network - const EBADFD = 77; // File descriptor in bad state - const EREMCHG = 78; // Remote address changed - const ELIBACC = 79; // Can not access a needed shared library - const ELIBBAD = 80; // Accessing a corrupted shared library - const ELIBSCN = 81; // .lib section in a.out corrupted - const ELIBMAX = 82; // Attempting to link in too many shared libraries - const ELIBEXEC = 83; // Cannot exec a shared library directly - const EILSEQ = 84; // Illegal byte sequence - const ERESTART = 85; // Interrupted system call should be restarted - const ESTRPIPE = 86; // Streams pipe error - const EUSERS = 87; // Too many users - const ENOTSOCK = 88; // Socket operation on non-socket - const EDESTADDRREQ = 89; // Destination address required - const EMSGSIZE = 90; // Message too long - const EPROTOTYPE = 91; // Protocol wrong type for socket - const ENOPROTOOPT = 92; // Protocol not available - const EPROTONOSUPPORT = 93; // Protocol not supported - const ESOCKTNOSUPPORT = 94; // Socket type not supported - const EOPNOTSUPP = 95; // Operation not supported on transport endpoint - const EPFNOSUPPORT = 96; // Protocol family not supported - const EAFNOSUPPORT = 97; // Address family not supported by protocol - const EADDRINUSE = 98; // Address already in use - const EADDRNOTAVAIL = 99; // Cannot assign requested address - const ENETDOWN = 100; // Network is down - const ENETUNREACH = 101; // Network is unreachable - const ENETRESET = 102; // Network dropped connection because of reset - const ECONNABORTED = 103; // Software caused connection abort - const ECONNRESET = 104; // Connection reset by peer - const ENOBUFS = 105; // No buffer space available - const EISCONN = 106; // Transport endpoint is already connected - const ENOTCONN = 107; // Transport endpoint is not connected - const ESHUTDOWN = 108; // Cannot send after transport endpoint shutdown - const ETOOMANYREFS = 109; // Too many references: cannot splice - const ETIMEDOUT = 110; // Connection timed out - const ECONNREFUSED = 111; // Connection refused - const EHOSTDOWN = 112; // Host is down - const EHOSTUNREACH = 113; // No route to host - const EALREADY = 114; // Operation already in progress - const EINPROGRESS = 115; // Operation now in progress - const ESTALE = 116; // Stale NFS file handle - const EUCLEAN = 117; // Structure needs cleaning - const ENOTNAM = 118; // Not a XENIX named type file - const ENAVAIL = 119; // No XENIX semaphores available - const EISNAM = 120; // Is a named type file - const EREMOTEIO = 121; // Remote I/O error - const EDQUOT = 122; // Quota exceeded - const ENOMEDIUM = 123; // No medium found - const EMEDIUMTYPE = 124; // Wrong medium type - const ECANCELED = 125; // Operation Canceled - const ENOKEY = 126; // Required key not available - const EKEYEXPIRED = 127; // Key has expired - const EKEYREVOKED = 128; // Key has been revoked - const EKEYREJECTED = 129; // Key was rejected by service - const EOWNERDEAD = 130; // Owner died - const ENOTRECOVERABLE = 131; // State not recoverable -} -else version( darwin ) -{ - const EPERM = 1; // Operation not permitted - const ENOENT = 2; // No such file or directory - const ESRCH = 3; // No such process - const EINTR = 4; // Interrupted system call - const EIO = 5; // Input/output error - const ENXIO = 6; // Device not configured - const E2BIG = 7; // Argument list too long - const ENOEXEC = 8; // Exec format error - const EBADF = 9; // Bad file descriptor - const ECHILD = 10; // No child processes - const EDEADLK = 11; // Resource deadlock avoided - const ENOMEM = 12; // Cannot allocate memory - const EACCES = 13; // Permission denied - const EFAULT = 14; // Bad address - const EBUSY = 16; // Device busy - const EEXIST = 17; // File exists - const EXDEV = 18; // Cross-device link - const ENODEV = 19; // Operation not supported by device - const ENOTDIR = 20; // Not a directory - const EISDIR = 21; // Is a directory - const EINVAL = 22; // Invalid argument - const ENFILE = 23; // Too many open files in system - const EMFILE = 24; // Too many open files - const ENOTTY = 25; // Inappropriate ioctl for device - const ETXTBSY = 26; // Text file busy - const EFBIG = 27; // File too large - const ENOSPC = 28; // No space left on device - const ESPIPE = 29; // Illegal seek - const EROFS = 30; // Read-only file system - const EMLINK = 31; // Too many links - const EPIPE = 32; // Broken pipe - const EDOM = 33; // Numerical argument out of domain - const ERANGE = 34; // Result too large - const EAGAIN = 35; // Resource temporarily unavailable - const EWOULDBLOCK = EAGAIN; // Operation would block - const EINPROGRESS = 36; // Operation now in progress - const EALREADY = 37; // Operation already in progress - const ENOTSOCK = 38; // Socket operation on non-socket - const EDESTADDRREQ = 39; // Destination address required - const EMSGSIZE = 40; // Message too long - const EPROTOTYPE = 41; // Protocol wrong type for socket - const ENOPROTOOPT = 42; // Protocol not available - const EPROTONOSUPPORT = 43; // Protocol not supported - const ENOTSUP = 45; // Operation not supported - const EOPNOTSUPP = ENOTSUP; // Operation not supported on socket - const EAFNOSUPPORT = 47; // Address family not supported by protocol family - const EADDRINUSE = 48; // Address already in use - const EADDRNOTAVAIL = 49; // Can't assign requested address - const ENETDOWN = 50; // Network is down - const ENETUNREACH = 51; // Network is unreachable - const ENETRESET = 52; // Network dropped connection on reset - const ECONNABORTED = 53; // Software caused connection abort - const ECONNRESET = 54; // Connection reset by peer - const ENOBUFS = 55; // No buffer space available - const EISCONN = 56; // Socket is already connected - const ENOTCONN = 57; // Socket is not connected - const ETIMEDOUT = 60; // Operation timed out - const ECONNREFUSED = 61; // Connection refused - const ELOOP = 62; // Too many levels of symbolic links - const ENAMETOOLONG = 63; // File name too long - const EHOSTUNREACH = 65; // No route to host - const ENOTEMPTY = 66; // Directory not empty - const EDQUOT = 69; // Disc quota exceeded - const ESTALE = 70; // Stale NFS file handle - const ENOLCK = 77; // No locks available - const ENOSYS = 78; // Function not implemented - const EOVERFLOW = 84; // Value too large to be stored in data type - const ECANCELED = 89; // Operation canceled - const EIDRM = 90; // Identifier removed - const ENOMSG = 91; // No message of desired type - const EILSEQ = 92; // Illegal byte sequence - const EBADMSG = 94; // Bad message - const EMULTIHOP = 95; // Reserved - const ENODATA = 96; // No message available on STREAM - const ENOLINK = 97; // Reserved - const ENOSR = 98; // No STREAM resources - const ENOSTR = 99; // Not a STREAM - const EPROTO = 100; // Protocol error - const ETIME = 101; // STREAM ioctl timeout - const ELAST = 101; // Must be equal largest errno -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/fenv.d --- a/tango/tango/stdc/fenv.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,118 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly, Walter Bright - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.fenv; - -extern (C): - -version( Win32 ) -{ - struct fenv_t - { - ushort status; - ushort control; - ushort round; - ushort[2] reserved; - } - - alias int fexcept_t; -} -else version( linux ) -{ - struct fenv_t - { - ushort __control_word; - ushort __unused1; - ushort __status_word; - ushort __unused2; - ushort __tags; - ushort __unused3; - uint __eip; - ushort __cs_selector; - ushort __opcode; - uint __data_offset; - ushort __data_selector; - ushort __unused5; - } - - alias int fexcept_t; -} -else version ( darwin ) -{ - version ( BigEndian ) - { - alias uint fenv_t; - alias uint fexcept_t; - } - version ( LittleEndian ) - { - struct fenv_t - { - ushort __control; - ushort __status; - uint __mxcsr; - byte[8] __reserved; - } - - alias ushort fexcept_t; - } -} -else -{ - static assert( false ); -} - -enum -{ - FE_INVALID = 1, - FE_DENORMAL = 2, // non-standard - FE_DIVBYZERO = 4, - FE_OVERFLOW = 8, - FE_UNDERFLOW = 0x10, - FE_INEXACT = 0x20, - FE_ALL_EXCEPT = 0x3F, - FE_TONEAREST = 0, - FE_UPWARD = 0x800, - FE_DOWNWARD = 0x400, - FE_TOWARDZERO = 0xC00, -} - -version( Win32 ) -{ - private extern fenv_t _FE_DFL_ENV; - fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; -} -else version( linux ) -{ - fenv_t* FE_DFL_ENV = cast(fenv_t*)(-1); -} -else version( darwin ) -{ - private extern fenv_t _FE_DFL_ENV; - fenv_t* FE_DFL_ENV = &_FE_DFL_ENV; -} -else -{ - static assert( false ); -} - -void feraiseexcept(int excepts); -void feclearexcept(int excepts); - -int fetestexcept(int excepts); -int feholdexcept(fenv_t* envp); - -void fegetexceptflag(fexcept_t* flagp, int excepts); -void fesetexceptflag(fexcept_t* flagp, int excepts); - -int fegetround(); -int fesetround(int round); - -void fegetenv(fenv_t* envp); -void fesetenv(fenv_t* envp); -void feupdateenv(fenv_t* envp); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/inttypes.d --- a/tango/tango/stdc/inttypes.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,252 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.inttypes; - -public import tango.stdc.stddef; -public import tango.stdc.stdint; - -extern (C): - -struct imaxdiv_t -{ - intmax_t quot, - rem; -} - -version( VerboseC ) -{ - const char* PRId8 = "hhd"; - const char* PRId16 = "hd"; - const char* PRId32 = "ld"; - const char* PRId64 = "lld"; - - const char* PRIdLEAST8 = "hhd"; - const char* PRIdLEAST16 = "hd"; - const char* PRIdLEAST32 = "ld"; - const char* PRIdLEAST64 = "lld"; - - const char* PRIdFAST8 = "hhd"; - const char* PRIdFAST16 = "d"; - const char* PRIdFAST32 = "ld"; - const char* PRIdFAST64 = "lld"; - - const char* PRIi8 = "hhi"; - const char* PRIi16 = "hi"; - const char* PRIi32 = "li"; - const char* PRIi64 = "lli"; - - const char* PRIiLEAST8 = "hhi"; - const char* PRIiLEAST16 = "hi"; - const char* PRIiLEAST32 = "li"; - const char* PRIiLEAST64 = "lli"; - - const char* PRIiFAST8 = "hhi"; - const char* PRIiFAST16 = "i"; - const char* PRIiFAST32 = "li"; - const char* PRIiFAST64 = "lli"; - - const char* PRIo8 = "hho"; - const char* PRIo16 = "ho"; - const char* PRIo32 = "lo"; - const char* PRIo64 = "llo"; - - const char* PRIoLEAST8 = "hho"; - const char* PRIoLEAST16 = "ho"; - const char* PRIoLEAST32 = "lo"; - const char* PRIoLEAST64 = "llo"; - - const char* PRIoFAST8 = "hho"; - const char* PRIoFAST16 = "o"; - const char* PRIoFAST32 = "lo"; - const char* PRIoFAST64 = "llo"; - - const char* PRIu8 = "hhu"; - const char* PRIu16 = "hu"; - const char* PRIu32 = "lu"; - const char* PRIu64 = "llu"; - - const char* PRIuLEAST8 = "hhu"; - const char* PRIuLEAST16 = "hu"; - const char* PRIuLEAST32 = "lu"; - const char* PRIuLEAST64 = "llu"; - - const char* PRIuFAST8 = "hhu"; - const char* PRIuFAST16 = "u"; - const char* PRIuFAST32 = "lu"; - const char* PRIuFAST64 = "llu"; - - const char* PRIx8 = "hhx"; - const char* PRIx16 = "hx"; - const char* PRIx32 = "lx"; - const char* PRIx64 = "llx"; - - const char* PRIxLEAST8 = "hhx"; - const char* PRIxLEAST16 = "hx"; - const char* PRIxLEAST32 = "lx"; - const char* PRIxLEAST64 = "llx"; - - const char* PRIxFAST8 = "hhx"; - const char* PRIxFAST16 = "x"; - const char* PRIxFAST32 = "lx"; - const char* PRIxFAST64 = "llx"; - - const char* PRIX8 = "hhX"; - const char* PRIX16 = "hX"; - const char* PRIX32 = "lX"; - const char* PRIX64 = "llX"; - - const char* PRIXLEAST8 = "hhX"; - const char* PRIXLEAST16 = "hX"; - const char* PRIXLEAST32 = "lX"; - const char* PRIXLEAST64 = "llX"; - - const char* PRIXFAST8 = "hhX"; - const char* PRIXFAST16 = "X"; - const char* PRIXFAST32 = "lX"; - const char* PRIXFAST64 = "llX"; - - const char* SCNd8 = "hhd"; - const char* SCNd16 = "hd"; - const char* SCNd32 = "ld"; - const char* SCNd64 = "lld"; - - const char* SCNdLEAST8 = "hhd"; - const char* SCNdLEAST16 = "hd"; - const char* SCNdLEAST32 = "ld"; - const char* SCNdLEAST64 = "lld"; - - const char* SCNdFAST8 = "hhd"; - const char* SCNdFAST16 = "d"; - const char* SCNdFAST32 = "ld"; - const char* SCNdFAST64 = "lld"; - - const char* SCNi8 = "hhd"; - const char* SCNi16 = "hi"; - const char* SCNi32 = "li"; - const char* SCNi64 = "lli"; - - const char* SCNiLEAST8 = "hhd"; - const char* SCNiLEAST16 = "hi"; - const char* SCNiLEAST32 = "li"; - const char* SCNiLEAST64 = "lli"; - - const char* SCNiFAST8 = "hhd"; - const char* SCNiFAST16 = "i"; - const char* SCNiFAST32 = "li"; - const char* SCNiFAST64 = "lli"; - - const char* SCNo8 = "hhd"; - const char* SCNo16 = "ho"; - const char* SCNo32 = "lo"; - const char* SCNo64 = "llo"; - - const char* SCNoLEAST8 = "hhd"; - const char* SCNoLEAST16 = "ho"; - const char* SCNoLEAST32 = "lo"; - const char* SCNoLEAST64 = "llo"; - - const char* SCNoFAST8 = "hhd"; - const char* SCNoFAST16 = "o"; - const char* SCNoFAST32 = "lo"; - const char* SCNoFAST64 = "llo"; - - const char* SCNu8 = "hhd"; - const char* SCNu16 = "hu"; - const char* SCNu32 = "lu"; - const char* SCNu64 = "llu"; - - const char* SCNuLEAST8 = "hhd"; - const char* SCNuLEAST16 = "hu"; - const char* SCNuLEAST32 = "lu"; - const char* SCNuLEAST64 = "llu"; - - const char* SCNuFAST8 = "hhd"; - const char* SCNuFAST16 = "u"; - const char* SCNuFAST32 = "lu"; - const char* SCNuFAST64 = "llu"; - - const char* SCNx8 = "hhd"; - const char* SCNx16 = "hx"; - const char* SCNx32 = "lx"; - const char* SCNx64 = "llx"; - - const char* SCNxLEAST8 = "hhd"; - const char* SCNxLEAST16 = "hx"; - const char* SCNxLEAST32 = "lx"; - const char* SCNxLEAST64 = "llx"; - - const char* SCNxFAST8 = "hhd"; - const char* SCNxFAST16 = "x"; - const char* SCNxFAST32 = "lx"; - const char* SCNxFAST64 = "llx"; - - version( X86_64 ) - { - const char* PRIdMAX = PRId64; - const char* PRIiMAX = PRIi64; - const char* PRIoMAX = PRIo64; - const char* PRIuMAX = PRIu64; - const char* PRIxMAX = PRIx64; - const char* PRIXMAX = PRIX64; - - const char* SCNdMAX = SCNd64; - const char* SCNiMAX = SCNi64; - const char* SCNoMAX = SCNo64; - const char* SCNuMAX = SCNu64; - const char* SCNxMAX = SCNx64; - - const char* PRIdPTR = PRId64; - const char* PRIiPTR = PRIi64; - const char* PRIoPTR = PRIo64; - const char* PRIuPTR = PRIu64; - const char* PRIxPTR = PRIx64; - const char* PRIXPTR = PRIX64; - - const char* SCNdPTR = SCNd64; - const char* SCNiPTR = SCNi64; - const char* SCNoPTR = SCNo64; - const char* SCNuPTR = SCNu64; - const char* SCNxPTR = SCNx64; - } - else - { - const char* PRIdMAX = PRId32; - const char* PRIiMAX = PRIi32; - const char* PRIoMAX = PRIo32; - const char* PRIuMAX = PRIu32; - const char* PRIxMAX = PRIx32; - const char* PRIXMAX = PRIX32; - - const char* SCNdMAX = SCNd32; - const char* SCNiMAX = SCNi32; - const char* SCNoMAX = SCNo32; - const char* SCNuMAX = SCNu32; - const char* SCNxMAX = SCNx32; - - const char* PRIdPTR = PRId32; - const char* PRIiPTR = PRIi32; - const char* PRIoPTR = PRIo32; - const char* PRIuPTR = PRIu32; - const char* PRIxPTR = PRIx32; - const char* PRIXPTR = PRIX32; - - const char* SCNdPTR = SCNd32; - const char* SCNiPTR = SCNi32; - const char* SCNoPTR = SCNo32; - const char* SCNuPTR = SCNu32; - const char* SCNxPTR = SCNx32; - } -} - -intmax_t imaxabs(intmax_t j); -imaxdiv_t imaxdiv(intmax_t numer, intmax_t denom); -intmax_t strtoimax(char* nptr, char** endptr, int base); -uintmax_t strtoumax(char* nptr, char** endptr, int base); -intmax_t wcstoimax(wchar_t* nptr, wchar_t** endptr, int base); -uintmax_t wcstoumax(wchar_t* nptr, wchar_t** endptr, int base); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/limits.d --- a/tango/tango/stdc/limits.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.limits; - -private import tango.stdc.config; - -extern (C): - -const CHAR_BIT = 8; -const SCHAR_MIN = byte.min; -const SCHAR_MAX = byte.max; -const UCHAR_MAX = ubyte.min; -const CHAR_MIN = char.max; -const CHAR_MAX = char.max; -const MB_LEN_MAX = 2; -const SHRT_MIN = short.min; -const SHRT_MAX = short.max; -const USHRT_MAX = ushort.max; -const INT_MIN = int.min; -const INT_MAX = int.max; -const UINT_MAX = uint.max; -const LONG_MIN = c_long.min; -const LONG_MAX = c_long.max; -const ULONG_MAX = c_ulong.max; -const LLONG_MIN = long.min; -const LLONG_MAX = long.max; -const ULLONG_MAX = ulong.max; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/locale.d --- a/tango/tango/stdc/locale.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.locale; - -extern (C): - -struct lconv -{ - char* decimal_point; - char* thousands_sep; - char* grouping; - char* int_curr_symbol; - char* currency_symbol; - char* mon_decimal_point; - char* mon_thousands_sep; - char* mon_grouping; - char* positive_sign; - char* negative_sign; - byte int_frac_digits; - byte frac_digits; - byte p_cs_precedes; - byte p_sep_by_space; - byte n_cs_precedes; - byte n_sep_by_space; - byte p_sign_posn; - byte n_sign_posn; - byte int_p_cs_precedes; - byte int_p_sep_by_space; - byte int_n_cs_precedes; - byte int_n_sep_by_space; - byte int_p_sign_posn; - byte int_n_sign_posn; -} - -const LC_CTYPE = 0; -const LC_NUMERIC = 1; -const LC_TIME = 2; -const LC_COLLATE = 3; -const LC_MONETARY = 4; -const LC_ALL = 6; -const LC_PAPER = 7; -const LC_NAME = 8; -const LC_ADDRESS = 9; -const LC_TELEPHONE = 10; -const LC_MEASUREMENT = 11; -const LC_IDENTIFICATION = 12; - -char* setlocale( int category, char* locale ); -lconv* localeconv(); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/math.d --- a/tango/tango/stdc/math.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,624 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly, Walter Bright - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.math; - -private import tango.stdc.config; - -extern (C): - -alias float float_t; -alias double double_t; - -const double HUGE_VAL = double.infinity; -const double HUGE_VALF = float.infinity; -const double HUGE_VALL = real.infinity; - -const float INFINITY = float.infinity; -const float NAN = float.nan; - -const int FP_ILOGB0 = int.min; -const int FP_ILOGBNAN = int.min; - -const int MATH_ERRNO = 1; -const int MATH_ERREXCEPT = 2; -const int math_errhandling = MATH_ERRNO | MATH_ERREXCEPT; - -version( none ) -{ - // - // these functions are all macros in C - // - - //int fpclassify(real-floating x); - int fpclassify(float x); - int fpclassify(double x); - int fpclassify(real x); - - //int isfinite(real-floating x); - int isfinite(float x); - int isfinite(double x); - int isfinite(real x); - - //int isinf(real-floating x); - int isinf(float x); - int isinf(double x); - int isinf(real x); - - //int isnan(real-floating x); - int isnan(float x); - int isnan(double x); - int isnan(real x); - - //int isnormal(real-floating x); - int isnormal(float x); - int isnormal(double x); - int isnormal(real x); - - //int signbit(real-floating x); - int signbit(float x); - int signbit(double x); - int signbit(real x); - - //int isgreater(real-floating x, real-floating y); - int isgreater(float x, float y); - int isgreater(double x, double y); - int isgreater(real x, real y); - - //int isgreaterequal(real-floating x, real-floating y); - int isgreaterequal(float x, float y); - int isgreaterequal(double x, double y); - int isgreaterequal(real x, real y); - - //int isless(real-floating x, real-floating y); - int isless(float x, float y); - int isless(double x, double y); - int isless(real x, real y); - - //int islessequal(real-floating x, real-floating y); - int islessequal(float x, float y); - int islessequal(double x, double y); - int islessequal(real x, real y); - - //int islessgreater(real-floating x, real-floating y); - int islessgreater(float x, float y); - int islessgreater(double x, double y); - int islessgreater(real x, real y); - - //int isunordered(real-floating x, real-floating y); - int isunordered(float x, float y); - int isunordered(double x, double y); - int isunordered(real x, real y); -} - -version( DigitalMars ) version( Win32 ) - version = DigitalMarsWin32; - -version( DigitalMarsWin32 ) -{ - enum - { - FP_NANS = 0, - FP_NANQ = 1, - FP_INFINITE = 2, - FP_NORMAL = 3, - FP_SUBNORMAL = 4, - FP_ZERO = 5, - FP_NAN = FP_NANQ, - FP_EMPTY = 6, - FP_UNSUPPORTED = 7, - } - - enum - { - FP_FAST_FMA = 0, - FP_FAST_FMAF = 0, - FP_FAST_FMAL = 0, - } - - uint __fpclassify_f(float x); - uint __fpclassify_d(double x); - uint __fpclassify_ld(real x); - - extern (D) - { - //int fpclassify(real-floating x); - int fpclassify(float x) { return __fpclassify_f(x); } - int fpclassify(double x) { return __fpclassify_d(x); } - int fpclassify(real x) - { - return (real.sizeof == double.sizeof) - ? __fpclassify_d(x) - : __fpclassify_ld(x); - } - - //int isfinite(real-floating x); - int isfinite(float x) { return fpclassify(x) >= FP_NORMAL; } - int isfinite(double x) { return fpclassify(x) >= FP_NORMAL; } - int isfinite(real x) { return fpclassify(x) >= FP_NORMAL; } - - //int isinf(real-floating x); - int isinf(float x) { return fpclassify(x) == FP_INFINITE; } - int isinf(double x) { return fpclassify(x) == FP_INFINITE; } - int isinf(real x) { return fpclassify(x) == FP_INFINITE; } - - //int isnan(real-floating x); - int isnan(float x) { return fpclassify(x) <= FP_NANQ; } - int isnan(double x) { return fpclassify(x) <= FP_NANQ; } - int isnan(real x) { return fpclassify(x) <= FP_NANQ; } - - //int isnormal(real-floating x); - int isnormal(float x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(double x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(real x) { return fpclassify(x) == FP_NORMAL; } - - //int signbit(real-floating x); - int signbit(float x) { return (cast(short*)&(x))[1] & 0x8000; } - int signbit(double x) { return (cast(short*)&(x))[3] & 0x8000; } - int signbit(real x) - { - return (real.sizeof == double.sizeof) - ? (cast(short*)&(x))[3] & 0x8000 - : (cast(short*)&(x))[4] & 0x8000; - } - } -} -else version( linux ) -{ - enum - { - FP_NAN, - FP_INFINITE, - FP_ZERO, - FP_SUBNORMAL, - FP_NORMAL, - } - - enum - { - FP_FAST_FMA = 0, - FP_FAST_FMAF = 0, - FP_FAST_FMAL = 0, - } - - int __fpclassifyf(float x); - int __fpclassify(double x); - int __fpclassifyl(real x); - - int __finitef(float x); - int __finite(double x); - int __finitel(real x); - - int __isinff(float x); - int __isinf(double x); - int __isinfl(real x); - - int __isnanf(float x); - int __isnan(double x); - int __isnanl(real x); - - int __signbitf(float x); - int __signbit(double x); - int __signbitl(real x); - - extern (D) - { - //int fpclassify(real-floating x); - int fpclassify(float x) { return __fpclassifyf(x); } - int fpclassify(double x) { return __fpclassify(x); } - int fpclassify(real x) - { - return (real.sizeof == double.sizeof) - ? __fpclassify(x) - : __fpclassifyl(x); - } - - //int isfinite(real-floating x); - int isfinite(float x) { return __finitef(x); } - int isfinite(double x) { return __finite(x); } - int isfinite(real x) - { - return (real.sizeof == double.sizeof) - ? __finite(x) - : __finitel(x); - } - - //int isinf(real-floating x); - int isinf(float x) { return __isinff(x); } - int isinf(double x) { return __isinf(x); } - int isinf(real x) - { - return (real.sizeof == double.sizeof) - ? __isinf(x) - : __isinfl(x); - } - - //int isnan(real-floating x); - int isnan(float x) { return __isnanf(x); } - int isnan(double x) { return __isnan(x); } - int isnan(real x) - { - return (real.sizeof == double.sizeof) - ? __isnan(x) - : __isnanl(x); - } - - //int isnormal(real-floating x); - int isnormal(float x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(double x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(real x) { return fpclassify(x) == FP_NORMAL; } - - //int signbit(real-floating x); - int signbit(float x) { return __signbitf(x); } - int signbit(double x) { return __signbit(x); } - int signbit(real x) - { - return (real.sizeof == double.sizeof) - ? __signbit(x) - : __signbitl(x); - } - } -} -else version( darwin ) -{ - enum - { - FP_NAN = 1, - FP_INFINITE = 2, - FP_ZERO = 3, - FP_NORMAL = 4, - FP_SUBNORMAL = 5, - FP_SUPERNORMAL = 6 - } - - enum - { - FP_FAST_FMA = 0, - FP_FAST_FMAF = 0, - FP_FAST_FMAL = 0, - } - - int __fpclassifyf(float x); - int __fpclassifyd(double x); - int __fpclassify(real x); - - int __isfinitef(float x); - int __isfinited(double x); - int __isfinite(real x); - - int __isinff(float x); - int __isinfd(double x); - int __isinf(real x); - - int __isnanf(float x); - int __isnand(double x); - int __isnan(real x); - - int __signbitf(float x); - int __signbitd(double x); - int __signbitl(real x); - - extern (D) - { - //int fpclassify(real-floating x); - int fpclassify(float x) { return __fpclassifyf(x); } - int fpclassify(double x) { return __fpclassifyd(x); } - int fpclassify(real x) - { - return (real.sizeof == double.sizeof) - ? __fpclassifyd(x) - : __fpclassify(x); - } - - //int isfinite(real-floating x); - int isfinite(float x) { return __isfinitef(x); } - int isfinite(double x) { return __isfinited(x); } - int isfinite(real x) - { - return (real.sizeof == double.sizeof) - ? __isfinited(x) - : __isfinite(x); - } - - //int isinf(real-floating x); - int isinf(float x) { return __isinff(x); } - int isinf(double x) { return __isinfd(x); } - int isinf(real x) - { - return (real.sizeof == double.sizeof) - ? __isinfd(x) - : __isinf(x); - } - - //int isnan(real-floating x); - int isnan(float x) { return __isnanf(x); } - int isnan(double x) { return __isnand(x); } - int isnan(real x) - { - return (real.sizeof == double.sizeof) - ? __isnand(x) - : __isnan(x); - } - - //int isnormal(real-floating x); - int isnormal(float x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(double x) { return fpclassify(x) == FP_NORMAL; } - int isnormal(real x) { return fpclassify(x) == FP_NORMAL; } - - //int signbit(real-floating x); - int signbit(float x) { return __signbitf(x); } - int signbit(double x) { return __signbitd(x); } - int signbit(real x) - { - return (real.sizeof == double.sizeof) - ? __signbitd(x) - : __signbitl(x); - } - } -} - -extern (D) -{ - //int isgreater(real-floating x, real-floating y); - int isgreater(float x, float y) { return !(x !> y); } - int isgreater(double x, double y) { return !(x !> y); } - int isgreater(real x, real y) { return !(x !> y); } - - //int isgreaterequal(real-floating x, real-floating y); - int isgreaterequal(float x, float y) { return !(x !>= y); } - int isgreaterequal(double x, double y) { return !(x !>= y); } - int isgreaterequal(real x, real y) { return !(x !>= y); } - - //int isless(real-floating x, real-floating y); - int isless(float x, float y) { return !(x !< y); } - int isless(double x, double y) { return !(x !< y); } - int isless(real x, real y) { return !(x !< y); } - - //int islessequal(real-floating x, real-floating y); - int islessequal(float x, float y) { return !(x !<= y); } - int islessequal(double x, double y) { return !(x !<= y); } - int islessequal(real x, real y) { return !(x !<= y); } - - //int islessgreater(real-floating x, real-floating y); - int islessgreater(float x, float y) { return !(x !<> y); } - int islessgreater(double x, double y) { return !(x !<> y); } - int islessgreater(real x, real y) { return !(x !<> y); } - - //int isunordered(real-floating x, real-floating y); - int isunordered(float x, float y) { return (x !<>= y); } - int isunordered(double x, double y) { return (x !<>= y); } - int isunordered(real x, real y) { return (x !<>= y); } -} - -double acos(double x); -float acosf(float x); -real acosl(real x); - -double asin(double x); -float asinf(float x); -real asinl(real x); - -double atan(double x); -float atanf(float x); -real atanl(real x); - -double atan2(double y, double x); -float atan2f(float y, float x); -real atan2l(real y, real x); - -double cos(double x); -float cosf(float x); -real cosl(real x); - -double sin(double x); -float sinf(float x); -real sinl(real x); - -double tan(double x); -float tanf(float x); -real tanl(real x); - -double acosh(double x); -float acoshf(float x); -real acoshl(real x); - -double asinh(double x); -float asinhf(float x); -real asinhl(real x); - -double atanh(double x); -float atanhf(float x); -real atanhl(real x); - -double cosh(double x); -float coshf(float x); -real coshl(real x); - -double sinh(double x); -float sinhf(float x); -real sinhl(real x); - -double tanh(double x); -float tanhf(float x); -real tanhl(real x); - -double exp(double x); -float expf(float x); -real expl(real x); - -double exp2(double x); -float exp2f(float x); -real exp2l(real x); - -double expm1(double x); -float expm1f(float x); -real expm1l(real x); - -double frexp(double value, int* exp); -float frexpf(float value, int* exp); -real frexpl(real value, int* exp); - -int ilogb(double x); -int ilogbf(float x); -int ilogbl(real x); - -double ldexp(double x, int exp); -float ldexpf(float x, int exp); -real ldexpl(real x, int exp); - -double log(double x); -float logf(float x); -real logl(real x); - -double log10(double x); -float log10f(float x); -real log10l(real x); - -double log1p(double x); -float log1pf(float x); -real log1pl(real x); - -double log2(double x); -float log2f(float x); -real log2l(real x); - -double logb(double x); -float logbf(float x); -real logbl(real x); - -double modf(double value, double* iptr); -float modff(float value, float* iptr); -real modfl(real value, real *iptr); - -double scalbn(double x, int n); -float scalbnf(float x, int n); -real scalbnl(real x, int n); - -double scalbln(double x, c_long n); -float scalblnf(float x, c_long n); -real scalblnl(real x, c_long n); - -double cbrt(double x); -float cbrtf(float x); -real cbrtl(real x); - -double fabs(double x); -float fabsf(float x); -real fabsl(real x); - -double hypot(double x, double y); -float hypotf(float x, float y); -real hypotl(real x, real y); - -double pow(double x, double y); -float powf(float x, float y); -real powl(real x, real y); - -double sqrt(double x); -float sqrtf(float x); -real sqrtl(real x); - -double erf(double x); -float erff(float x); -real erfl(real x); - -double erfc(double x); -float erfcf(float x); -real erfcl(real x); - -double lgamma(double x); -float lgammaf(float x); -real lgammal(real x); - -double tgamma(double x); -float tgammaf(float x); -real tgammal(real x); - -double ceil(double x); -float ceilf(float x); -real ceill(real x); - -double floor(double x); -float floorf(float x); -real floorl(real x); - -double nearbyint(double x); -float nearbyintf(float x); -real nearbyintl(real x); - -double rint(double x); -float rintf(float x); -real rintl(real x); - -c_long lrint(double x); -c_long lrintf(float x); -c_long lrintl(real x); - -long llrint(double x); -long llrintf(float x); -long llrintl(real x); - -double round(double x); -float roundf(float x); -real roundl(real x); - -c_long lround(double x); -c_long lroundf(float x); -c_long lroundl(real x); - -long llround(double x); -long llroundf(float x); -long llroundl(real x); - -double trunc(double x); -float truncf(float x); -real truncl(real x); - -double fmod(double x, double y); -float fmodf(float x, float y); -real fmodl(real x, real y); - -double remainder(double x, double y); -float remainderf(float x, float y); -real remainderl(real x, real y); - -double remquo(double x, double y, int* quo); -float remquof(float x, float y, int* quo); -real remquol(real x, real y, int* quo); - -double copysign(double x, double y); -float copysignf(float x, float y); -real copysignl(real x, real y); - -double nan(char* tagp); -float nanf(char* tagp); -real nanl(char* tagp); - -double nextafter(double x, double y); -float nextafterf(float x, float y); -real nextafterl(real x, real y); - -double nexttoward(double x, real y); -float nexttowardf(float x, real y); -real nexttowardl(real x, real y); - -double fdim(double x, double y); -float fdimf(float x, float y); -real fdiml(real x, real y); - -double fmax(double x, double y); -float fmaxf(float x, float y); -real fmaxl(real x, real y); - -double fmin(double x, double y); -float fminf(float x, float y); -real fminl(real x, real y); - -double fma(double x, double y, double z); -float fmaf(float x, float y, float z); -real fmal(real x, real y, real z); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/arpa/inet.d --- a/tango/tango/stdc/posix/arpa/inet.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.arpa.inet; - -private import tango.stdc.posix.config; -public import tango.stdc.inttypes : uint32_t, uint16_t; -public import tango.stdc.posix.sys.socket : socklen_t; - -extern (C): - -// -// Required -// -/* -in_port_t // from tango.stdc.posix.netinet.in_ -in_addr_t // from tango.stdc.posix.netinet.in_ - -struct in_addr // from tango.stdc.posix.netinet.in_ -INET_ADDRSTRLEN // from tango.stdc.posix.netinet.in_ - -uint32_t // from tango.stdc.inttypes -uint16_t // from tango.stdc.inttypes - -uint32_t htonl(uint32_t); -uint16_t htons(uint16_t); -uint32_t ntohl(uint32_t); -uint16_t ntohs(uint16_t); - -in_addr_t inet_addr(char*); -char* inet_ntoa(in_addr); -char* inet_ntop(int, void*, char*, socklen_t); -int inet_pton(int, char*, void*); -*/ - -version( linux ) -{ - alias uint16_t in_port_t; - alias uint32_t in_addr_t; - - struct in_addr - { - in_addr_t s_addr;; - } - - const INET_ADDRSTRLEN = 16; - - uint32_t htonl(uint32_t); - uint16_t htons(uint16_t); - uint32_t ntohl(uint32_t); - uint16_t ntohs(uint16_t); - - in_addr_t inet_addr(char*); - char* inet_ntoa(in_addr); - char* inet_ntop(int, void*, char*, socklen_t); - int inet_pton(int, char*, void*); -} -else version( darwin ) -{ - -} - - -// -// IPV6 (IP6) -// -/* -INET6_ADDRSTRLEN // from tango.stdc.posix.netinet.in_ -*/ - -version( linux ) -{ - const INET6_ADDRSTRLEN = 46; -} -else version( darwin ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/config.d --- a/tango/tango/stdc/posix/config.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.config; - -public import tango.stdc.config; - -extern (C): - -version( linux ) -{ - const bool __USE_FILE_OFFSET64 = false; - const bool __USE_LARGEFILE64 = false; - const bool __REDIRECT = false; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/dirent.d --- a/tango/tango/stdc/posix/dirent.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,129 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.dirent; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for ino_t - -extern (C): - -// -// Required -// -/* -DIR - -struct dirent -{ - char[] d_name; -} - -int closedir(DIR*); -DIR* opendir(char*); -dirent* readdir(DIR*); -void rewinddir(DIR*); -*/ - -version( linux ) -{ - // NOTE: The following constants are non-standard Linux definitions - // for dirent.d_type. - enum - { - DT_UNKNOWN = 0, - DT_FIFO = 1, - DT_CHR = 2, - DT_DIR = 4, - DT_BLK = 6, - DT_REG = 8, - DT_LNK = 10, - DT_SOCK = 12, - DT_WHT = 14 - } - - struct dirent - { - ino_t d_ino; - off_t d_off; - ushort d_reclen; - ubyte d_type; - char[256] d_name; - } - - struct DIR - { - // Managed by OS - } - - dirent* readdir(DIR*); -} -else version( darwin ) -{ - enum - { - DT_UNKNOWN = 0, - DT_FIFO = 1, - DT_CHR = 2, - DT_DIR = 4, - DT_BLK = 6, - DT_REG = 8, - DT_LNK = 10, - DT_SOCK = 12, - DT_WHT = 14 - } - - align(4) - struct dirent - { - ino_t d_ino; - ushort d_reclen; - ubyte d_type; - ubyte d_namlen; - char[256] d_name; - } - - struct DIR - { - // Managed by OS - } - - dirent* readdir(DIR*); -} -else -{ - dirent* readdir(DIR*); -} - -int closedir(DIR*); -DIR* opendir(char*); -//dirent* readdir(DIR*); -void rewinddir(DIR*); - -// -// Thread-Safe Functions (TSF) -// -/* -int readdir_r(DIR*, dirent*, dirent**); -*/ - -int readdir_r(DIR*, dirent*, dirent**); - -// -// XOpen (XSI) -// -/* -void seekdir(DIR*, c_long); -c_long telldir(DIR*); -*/ - -version( linux ) -{ - void seekdir(DIR*, c_long); - c_long telldir(DIR*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/dlfcn.d --- a/tango/tango/stdc/posix/dlfcn.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.dlfcn; - -private import tango.stdc.posix.config; - -extern (C): - -// -// XOpen (XSI) -// -/* -RTLD_LAZY -RTLD_NOW -RTLD_GLOBAL -RTLD_LOCAL - -int dlclose(void*); -char* dlerror(); -void* dlopen(char*, int); -void* dlsym(void*, char*); -*/ - -version( linux ) -{ - const RTLD_LAZY = 0x00001; - const RTLD_NOW = 0x00002; - const RTLD_GLOBAL = 0x00100; - const RTLD_LOCAL = 0x00000; - - int dlclose(void*); - char* dlerror(); - void* dlopen(char*, int); - void* dlsym(void*, char*); -} -else version( darwin ) -{ - const RTLD_LAZY = 0x00001; - const RTLD_NOW = 0x00002; - const RTLD_GLOBAL = 0x00100; - const RTLD_LOCAL = 0x00000; - - int dlclose(void*); - char* dlerror(); - void* dlopen(char*, int); - void* dlsym(void*, char*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/fcntl.d --- a/tango/tango/stdc/posix/fcntl.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,184 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.fcntl; - -private import tango.stdc.posix.config; -private import tango.stdc.stdint; -public import tango.stdc.stddef; // for size_t -public import tango.stdc.posix.sys.types; // for off_t, mode_t -public import tango.stdc.posix.sys.stat; // for S_IFMT, etc. - -extern (C): - -// -// Required -// -/* -F_DUPFD -F_GETFD -F_SETFD -F_GETFL -F_SETFL -F_GETLK -F_SETLK -F_SETLKW -F_GETOWN -F_SETOWN - -FD_CLOEXEC - -F_RDLCK -F_UNLCK -F_WRLCK - -O_CREAT -O_EXCL -O_NOCTTY -O_TRUNC - -O_APPEND -O_DSYNC -O_NONBLOCK -O_RSYNC -O_SYNC - -O_ACCMODE -O_RDONLY -O_RDWR -O_WRONLY - -struct flock -{ - short l_type; - short l_whence; - off_t l_start; - off_t l_len; - pid_t l_pid; -} - -int creat(char*, mode_t); -int fcntl(int, int, ...); -int open(char*, int, ...); -*/ -version( linux ) -{ - const F_DUPFD = 0; - const F_GETFD = 1; - const F_SETFD = 2; - const F_GETFL = 3; - const F_SETFL = 4; - static if( __USE_FILE_OFFSET64 ) - { - const F_GETLK = 12; - const F_SETLK = 13; - const F_SETLKW = 14; - } - else - { - const F_GETLK = 5; - const F_SETLK = 6; - const F_SETLKW = 7; - } - const F_GETOWN = 9; - const F_SETOWN = 8; - - const FD_CLOEXEC = 1; - - const F_RDLCK = 0; - const F_UNLCK = 2; - const F_WRLCK = 1; - - const O_CREAT = 0100; - const O_EXCL = 0200; - const O_NOCTTY = 0400; - const O_TRUNC = 01000; - - const O_APPEND = 02000; - const O_NONBLOCK = 04000; - const O_SYNC = 010000; - const O_DSYNC = O_SYNC; - const O_RSYNC = O_SYNC; - - const O_ACCMODE = 0003; - const O_RDONLY = 00; - const O_WRONLY = 01; - const O_RDWR = 02; - - struct flock - { - short l_type; - short l_whence; - off_t l_start; - off_t l_len; - pid_t l_pid; - } -} -else version( darwin ) -{ - const F_DUPFD = 0; - const F_GETFD = 1; - const F_SETFD = 2; - const F_GETFL = 3; - const F_SETFL = 4; - const F_GETOWN = 5; - const F_SETOWN = 6; - const F_GETLK = 7; - const F_SETLK = 8; - const F_SETLKW = 9; - - const FD_CLOEXEC = 1; - - const F_RDLCK = 1; - const F_UNLCK = 2; - const F_WRLCK = 3; - - const O_CREAT = 0x0200; - const O_EXCL = 0x0800; - const O_NOCTTY = 0; - const O_TRUNC = 0x0400; - - const O_RDONLY = 0x0000; - const O_WRONLY = 0x0001; - const O_RDWR = 0x0002; - const O_ACCMODE = 0x0003; - - const O_NONBLOCK = 0x0004; - const O_APPEND = 0x0008; - const O_SYNC = 0x0080; - //const O_DSYNC - //const O_RSYNC - - struct flock - { - off_t l_start; - off_t l_len; - pid_t l_pid; - short l_type; - short l_whence; - } -} - -int creat(char*, mode_t); -int fcntl(int, int, ...); -int open(char*, int, ...); - -// -// Advisory Information (ADV) -// -/* -POSIX_FADV_NORMAL -POSIX_FADV_SEQUENTIAL -POSIX_FADV_RANDOM -POSIX_FADV_WILLNEED -POSIX_FADV_DONTNEED -POSIX_FADV_NOREUSE - -int posix_fadvise(int, off_t, off_t, int); -int posix_fallocate(int, off_t, off_t); -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/inttypes.d --- a/tango/tango/stdc/posix/inttypes.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.inttypes; - -public import tango.stdc.inttypes; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/net/if_.d --- a/tango/tango/stdc/posix/net/if_.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.net.if_; - -private import tango.stdc.posix.config; - -extern (C): - -// -// Required -// -/* -struct if_nameindex // renamed to if_nameindex_t -{ - uint if_index; - char* if_name; -} - -IF_NAMESIZE - -uint if_nametoindex(char*); -char* if_indextoname(uint, char*); -if_nameindex_t* if_nameindex(); -void if_freenameindex(if_nameindex_t*); -*/ - -version( linux ) -{ - struct if_nameindex_t - { - uint if_index; - char* if_name; - } - - const IF_NAMESIZE = 16; - - uint if_nametoindex(char*); - char* if_indextoname(uint, char*); - if_nameindex_t* if_nameindex(); - void if_freenameindex(if_nameindex_t*); -} -else version( darwin ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/netinet/in_.d --- a/tango/tango/stdc/posix/netinet/in_.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,153 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.netinet.in_; - -private import tango.stdc.posix.config; -public import tango.stdc.inttypes : uint32_t, uint16_t; -public import tango.stdc.posix.arpa.inet; - -extern (C): - -// -// Required -// -/* -NOTE: The following must must be defined in tango.stdc.posix.arpa.inet to break - a circular import: in_port_t, in_addr_t, struct in_addr, INET_ADDRSTRLEN. - -in_port_t -in_addr_t - -sa_family_t -uint8_t // from tango.stdc.inttypes -uint32_t // from tango.stdc.inttypes - -struct in_addr -{ - in_addr_t s_addr; -} - -struct sockaddr_in -{ - sa_family_t sin_family; - in_port_t sin_port; - in_addr sin_addr; -} - -IPPROTO_IP -IPPROTO_ICMP -IPPROTO_TCP -IPPROTO_UDP - -INADDR_ANY -INADDR_BROADCAST - -INET_ADDRSTRLEN - -htonl() // from tango.stdc.posix.arpa.inet -htons() // from tango.stdc.posix.arpa.inet -ntohl() // from tango.stdc.posix.arpa.inet -ntohs() // from tango.stdc.posix.arpa.inet -*/ - -version( linux ) -{ - alias ushort sa_family_t; - - private const __SOCK_SIZE__ = 16; - - struct sockaddr_in - { - sa_family_t sin_family; - in_port_t sin_port; - in_addr sin_addr; - - /* Pad to size of `struct sockaddr'. */ - ubyte[__SOCK_SIZE__ - sa_family_t.sizeof - - in_port_t.sizeof - in_addr.sizeof] __pad; - } - - enum - { - IPPROTO_IP = 0, - IPPROTO_ICMP = 1, - IPPROTO_TCP = 6, - IPPROTO_UDP = 17 - } - - const c_ulong INADDR_ANY = 0x00000000; - const c_ulong INADDR_BROADCAST = 0xffffffff; -} -else version( darwin ) -{ - -} - - -// -// IPV6 (IP6) -// -/* -NOTE: The following must must be defined in tango.stdc.posix.arpa.inet to break - a circular import: INET6_ADDRSTRLEN. - -uint8_t[16] s6_addr; - -struct sockaddr_in6 -{ - sa_family_t sin6_family; - in_port_t sin6_port; - uint32_t sin6_flowinfo; - in6_addr sin6_addr; - uint32_t sin6_scope_id; -} - -extern in6_addr in6addr_any; -extern in6_addr in6addr_loopback; - -struct ipv6_mreq -{ - in6_addr ipv6mr_multiaddr; - uint ipv6mr_interface; -} - -IPPROTO_IPV6 - -INET6_ADDRSTRLEN - -IPV6_JOIN_GROUP -IPV6_LEAVE_GROUP -IPV6_MULTICAST_HOPS -IPV6_MULTICAST_IF -IPV6_MULTICAST_LOOP -IPV6_UNICAST_HOPS -IPV6_V6ONLY - -// macros -int IN6_IS_ADDR_UNSPECIFIED(in6_addr*) -int IN6_IS_ADDR_LOOPBACK(in6_addr*) -int IN6_IS_ADDR_MULTICAST(in6_addr*) -int IN6_IS_ADDR_LINKLOCAL(in6_addr*) -int IN6_IS_ADDR_SITELOCAL(in6_addr*) -int IN6_IS_ADDR_V4MAPPED(in6_addr*) -int IN6_IS_ADDR_V4COMPAT(in6_addr*) -int IN6_IS_ADDR_MC_NODELOCAL(in6_addr*) -int IN6_IS_ADDR_MC_LINKLOCAL(in6_addr*) -int IN6_IS_ADDR_MC_SITELOCAL(in6_addr*) -int IN6_IS_ADDR_MC_ORGLOCAL(in6_addr*) -int IN6_IS_ADDR_MC_GLOBAL(in6_adddr*) -*/ - - -// -// Raw Sockets (RS) -// -/* -IPPROTO_RAW -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/netinet/tcp.d --- a/tango/tango/stdc/posix/netinet/tcp.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.netinet.tcp; - -private import tango.stdc.posix.config; - -extern (C): - -// -// Required -// -/* -TCP_NODELAY -*/ - -version( linux ) -{ - const TCP_NODELAY = 1; -} -else version( darwin ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/poll.d --- a/tango/tango/stdc/posix/poll.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.poll; - -private import tango.stdc.posix.config; - -extern (C): - -// -// XOpen (XSI) -// -/* -struct pollfd -{ - int fd; - short events; - short revents; -} - -nfds_t - -POLLIN -POLLRDNORM -POLLRDBAND -POLLPRI -POLLOUT -POLLWRNORM -POLLWRBAND -POLLERR -POLLHUP -POLLNVAL - -int poll(pollfd[], nfds_t, int); -*/ - -version( linux ) -{ - struct pollfd - { - int fd; - short events; - short revents; - } - - alias c_ulong nfds_t; - - const POLLIN = 0x001; - const POLLRDNORM = 0x040; - const POLLRDBAND = 0x080; - const POLLPRI = 0x002; - const POLLOUT = 0x004; - const POLLWRNORM = 0x100; - const POLLWRBAND = 0x200; - const POLLERR = 0x008; - const POLLHUP = 0x010; - const POLLNVAL = 0x020; - - int poll(pollfd*, nfds_t, int); -} -else version( darwin ) -{ - struct pollfd - { - int fd; - short events; - short revents; - }; - - alias uint nfds_t; - - enum - { - POLLIN = 0x0001, - POLLPRI = 0x0002, - POLLOUT = 0x0004, - POLLRDNORM = 0x0040, - POLLWRNORM = POLLOUT, - POLLRDBAND = 0x0080, - POLLWRBAND = 0x0100, - POLLEXTEND = 0x0200, - POLLATTRIB = 0x0400, - POLLNLINK = 0x0800, - POLLWRITE = 0x1000, - POLLERR = 0x0008, - POLLHUP = 0x0010, - POLLNVAL = 0x0020, - - POLLSTANDARD = (POLLIN|POLLPRI|POLLOUT|POLLRDNORM|POLLRDBAND| - POLLWRBAND|POLLERR|POLLHUP|POLLNVAL) - } - - int poll(pollfd*, nfds_t, int); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/pthread.d --- a/tango/tango/stdc/posix/pthread.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,506 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.pthread; - -public import tango.stdc.posix.sys.types; -public import tango.stdc.posix.sched; -public import tango.stdc.posix.time; - -extern (C): - -// -// Required -// -/* -PTHREAD_CANCEL_ASYNCHRONOUS -PTHREAD_CANCEL_ENABLE -PTHREAD_CANCEL_DEFERRED -PTHREAD_CANCEL_DISABLE -PTHREAD_CANCELED -PTHREAD_COND_INITIALIZER -PTHREAD_CREATE_DETACHED -PTHREAD_CREATE_JOINABLE -PTHREAD_EXPLICIT_SCHED -PTHREAD_INHERIT_SCHED -PTHREAD_MUTEX_INITIALIZER -PTHREAD_ONCE_INIT -PTHREAD_PROCESS_SHARED -PTHREAD_PROCESS_PRIVATE - -int pthread_atfork(void function(), void function(), void function()); -int pthread_attr_destroy(pthread_attr_t*); -int pthread_attr_getdetachstate(pthread_attr_t*, int*); -int pthread_attr_getschedparam(pthread_attr_t*, sched_param*); -int pthread_attr_init(pthread_attr_t*); -int pthread_attr_setdetachstate(pthread_attr_t*, int); -int pthread_attr_setschedparam(pthread_attr_t*, sched_param*); -int pthread_cancel(pthread_t); -void pthread_cleanup_push(void function(void*), void*); -void pthread_cleanup_pop(int); -int pthread_cond_broadcast(pthread_cond_t*); -int pthread_cond_destroy(pthread_cond_t*); -int pthread_cond_init(pthread_cond_t*, pthread_condattr_t*); -int pthread_cond_signal(pthread_cond_t*); -int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, timespec*); -int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); -int pthread_condattr_destroy(pthread_condattr_t*); -int pthread_condattr_init(pthread_condattr_t*); -int pthread_create(pthread_t*, pthread_attr_t*, void* function(void*), void*); -int pthread_detach(pthread_t); -int pthread_equal(pthread_t, pthread_t); -void pthread_exit(void*); -void* pthread_getspecific(pthread_key_t); -int pthread_join(pthread_t, void**); -int pthread_key_create(pthread_key_t*, void function(void*)); -int pthread_key_delete(pthread_key_t); -int pthread_mutex_destroy(pthread_mutex_t*); -int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); -int pthread_mutex_lock(pthread_mutex_t*); -int pthread_mutex_trylock(pthread_mutex_t*); -int pthread_mutex_unlock(pthread_mutex_t*); -int pthread_mutexattr_destroy(pthread_mutexattr_t*); -int pthread_mutexattr_init(pthread_mutexattr_t*); -int pthread_once(pthread_once_t*, void function()); -int pthread_rwlock_destroy(pthread_rwlock_t*); -int pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t*); -int pthread_rwlock_rdlock(pthread_rwlock_t*); -int pthread_rwlock_tryrdlock(pthread_rwlock_t*); -int pthread_rwlock_trywrlock(pthread_rwlock_t*); -int pthread_rwlock_unlock(pthread_rwlock_t*); -int pthread_rwlock_wrlock(pthread_rwlock_t*); -int pthread_rwlockattr_destroy(pthread_rwlockattr_t*); -int pthread_rwlockattr_init(pthread_rwlockattr_t*); -pthread_t pthread_self(); -int pthread_setcancelstate(int, int*); -int pthread_setcanceltype(int, int*); -int pthread_setspecific(pthread_key_t, void*); -void pthread_testcancel(); -*/ - -enum -{ - PTHREAD_CANCEL_ENABLE, - PTHREAD_CANCEL_DISABLE -} - -enum -{ - PTHREAD_CANCEL_DEFERRED, - PTHREAD_CANCEL_ASYNCHRONOUS -} - -const PTHREAD_CANCELED = cast(void*) -1; - -//const pthread_mutex_t PTHREAD_COND_INITIALIZER = { __LOCK_ALT_INITIALIZER, 0, "", 0 }; - -enum -{ - PTHREAD_CREATE_JOINABLE, - PTHREAD_CREATE_DETACHED -} - -enum -{ - PTHREAD_INHERIT_SCHED, - PTHREAD_EXPLICIT_SCHED -} - -//const pthread_mutex_t PTHREAD_MUTEX_INITIALIZER = { 0, 0, null, PTHREAD_MUTEX_NORMAL, { 0, 0 } }; - -const PTHREAD_ONCE_INIT = 0; - -enum -{ - PTHREAD_PROCESS_PRIVATE, - PTHREAD_PROCESS_SHARED -} - -int pthread_atfork(void function(), void function(), void function()); -int pthread_attr_destroy(pthread_attr_t*); -int pthread_attr_getdetachstate(pthread_attr_t*, int*); -int pthread_attr_getschedparam(pthread_attr_t*, sched_param*); -int pthread_attr_init(pthread_attr_t*); -int pthread_attr_setdetachstate(pthread_attr_t*, int); -int pthread_attr_setschedparam(pthread_attr_t*, sched_param*); -int pthread_cancel(pthread_t); - -version( linux ) -{ - alias void function(void*) _pthread_cleanup_routine; - - struct _pthread_cleanup_buffer - { - _pthread_cleanup_routine __routine; - void* __arg; - int __canceltype; - _pthread_cleanup_buffer* __prev; - } - - void _pthread_cleanup_push(_pthread_cleanup_buffer*, _pthread_cleanup_routine, void*); - void _pthread_cleanup_pop(_pthread_cleanup_buffer*, int); - - struct pthread_cleanup - { - _pthread_cleanup_buffer buffer = void; - - void push()( _pthread_cleanup_routine routine, void* arg ) - { - _pthread_cleanup_push( &buffer, routine, arg ); - } - - void pop()( int execute ) - { - _pthread_cleanup_pop( &buffer, execute ); - } - } -} -else version( darwin ) -{ - alias void function(void*) _pthread_cleanup_routine; - - struct _pthread_cleanup_buffer - { - _pthread_cleanup_routine __routine; - void* __arg; - _pthread_cleanup_buffer* __next; - } - - struct pthread_cleanup - { - _pthread_cleanup_buffer buffer = void; - - void push()( _pthread_cleanup_routine routine, void* arg ) - { - pthread_t self = pthread_self(); - buffer.__routine = routine; - buffer.__arg = arg; - buffer.__next = cast(_pthread_cleanup_buffer*) self.__cleanup_stack; - self.__cleanup_stack = cast(pthread_handler_rec*) &buffer; - } - - void pop()( int execute ) - { - pthread_t self = pthread_self(); - self.__cleanup_stack = cast(pthread_handler_rec*) buffer.__next; - if( execute ) - { - buffer.__routine( buffer.__arg ); - } - } - } -} -else -{ - void pthread_cleanup_push(void function(void*), void*); - void pthread_cleanup_pop(int); -} - -int pthread_cond_broadcast(pthread_cond_t*); -int pthread_cond_destroy(pthread_cond_t*); -int pthread_cond_init(pthread_cond_t*, pthread_condattr_t*); -int pthread_cond_signal(pthread_cond_t*); -int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, timespec*); -int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); -int pthread_condattr_destroy(pthread_condattr_t*); -int pthread_condattr_init(pthread_condattr_t*); -int pthread_create(pthread_t*, pthread_attr_t*, void* function(void*), void*); -int pthread_detach(pthread_t); -int pthread_equal(pthread_t, pthread_t); -void pthread_exit(void*); -void* pthread_getspecific(pthread_key_t); -int pthread_join(pthread_t, void**); -int pthread_key_create(pthread_key_t*, void function(void*)); -int pthread_key_delete(pthread_key_t); -int pthread_mutex_destroy(pthread_mutex_t*); -int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); -int pthread_mutex_lock(pthread_mutex_t*); -int pthread_mutex_trylock(pthread_mutex_t*); -int pthread_mutex_unlock(pthread_mutex_t*); -int pthread_mutexattr_destroy(pthread_mutexattr_t*); -int pthread_mutexattr_init(pthread_mutexattr_t*); -int pthread_once(pthread_once_t*, void function()); -int pthread_rwlock_destroy(pthread_rwlock_t*); -int pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t*); -int pthread_rwlock_rdlock(pthread_rwlock_t*); -int pthread_rwlock_tryrdlock(pthread_rwlock_t*); -int pthread_rwlock_trywrlock(pthread_rwlock_t*); -int pthread_rwlock_unlock(pthread_rwlock_t*); -int pthread_rwlock_wrlock(pthread_rwlock_t*); -int pthread_rwlockattr_destroy(pthread_rwlockattr_t*); -int pthread_rwlockattr_init(pthread_rwlockattr_t*); -pthread_t pthread_self(); -int pthread_setcancelstate(int, int*); -int pthread_setcanceltype(int, int*); -int pthread_setspecific(pthread_key_t, void*); -void pthread_testcancel(); - -// -// Barrier (BAR) -// -/* -PTHREAD_BARRIER_SERIAL_THREAD - -int pthread_barrier_destroy(pthread_barrier_t*); -int pthread_barrier_init(pthread_barrier_t*, pthread_barrierattr_t*, uint); -int pthread_barrier_wait(pthread_barrier_t*); -int pthread_barrierattr_destroy(pthread_barrierattr_t*); -int pthread_barrierattr_getpshared(pthread_barrierattr_t*, int*); (BAR|TSH) -int pthread_barrierattr_init(pthread_barrierattr_t*); -int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); (BAR|TSH) -*/ - -version( linux ) -{ - const PTHREAD_BARRIER_SERIAL_THREAD = -1; - - int pthread_barrier_destroy(pthread_barrier_t*); - int pthread_barrier_init(pthread_barrier_t*, pthread_barrierattr_t*, uint); - int pthread_barrier_wait(pthread_barrier_t*); - int pthread_barrierattr_destroy(pthread_barrierattr_t*); - int pthread_barrierattr_getpshared(pthread_barrierattr_t*, int*); - int pthread_barrierattr_init(pthread_barrierattr_t*); - int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); -} -else version( darwin ) -{ - // NOTE: The following definitions are Tango-specific because darwin does - // not support them directly. - - const PTHREAD_BARRIER_SERIAL_THREAD = -1; - - int pthread_barrier_destroy(pthread_barrier_t*); - int pthread_barrier_init(pthread_barrier_t*, pthread_barrierattr_t*, uint); - int pthread_barrier_wait(pthread_barrier_t*); - int pthread_barrierattr_destroy(pthread_barrierattr_t*); - int pthread_barrierattr_getpshared(pthread_barrierattr_t*, int*); - int pthread_barrierattr_init(pthread_barrierattr_t*); - int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); -} - -// -// Clock (CS) -// -/* -int pthread_condattr_getclock(pthread_condattr_t*, clockid_t*); -int pthread_condattr_setclock(pthread_condattr_t*, clockid_t); -*/ - -// -// Spinlock (SPI) -// -/* -int pthread_spin_destroy(pthread_spinlock_t*); -int pthread_spin_init(pthread_spinlock_t*, int); -int pthread_spin_lock(pthread_spinlock_t*); -int pthread_spin_trylock(pthread_spinlock_t*); -int pthread_spin_unlock(pthread_spinlock_t*); -*/ - -version( linux ) -{ - int pthread_spin_destroy(pthread_spinlock_t*); - int pthread_spin_init(pthread_spinlock_t*, int); - int pthread_spin_lock(pthread_spinlock_t*); - int pthread_spin_trylock(pthread_spinlock_t*); - int pthread_spin_unlock(pthread_spinlock_t*); -} - -// -// XOpen (XSI) -// -/* -PTHREAD_MUTEX_DEFAULT -PTHREAD_MUTEX_ERRORCHECK -PTHREAD_MUTEX_NORMAL -PTHREAD_MUTEX_RECURSIVE - -int pthread_attr_getguardsize(pthread_attr_t*, size_t*); -int pthread_attr_setguardsize(pthread_attr_t*, size_t); -int pthread_getconcurrency(); -int pthread_mutexattr_gettype(pthread_mutexattr_t*, int*); -int pthread_mutexattr_settype(pthread_mutexattr_t*, int); -int pthread_setconcurrency(int); -*/ - -version( linux ) -{ - const PTHREAD_MUTEX_NORMAL = 0; - const PTHREAD_MUTEX_RECURSIVE = 1; - const PTHREAD_MUTEX_ERRORCHECK = 2; - const PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL; - - int pthread_attr_getguardsize(pthread_attr_t*, size_t*); - int pthread_attr_setguardsize(pthread_attr_t*, size_t); - int pthread_getconcurrency(); - int pthread_mutexattr_gettype(pthread_mutexattr_t*, int*); - int pthread_mutexattr_settype(pthread_mutexattr_t*, int); - int pthread_setconcurrency(int); -} -else version( darwin ) -{ - const PTHREAD_MUTEX_NORMAL = 0; - const PTHREAD_MUTEX_ERRORCHECK = 1; - const PTHREAD_MUTEX_RECURSIVE = 2; - const PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL; - - int pthread_attr_getguardsize(pthread_attr_t*, size_t*); - int pthread_attr_setguardsize(pthread_attr_t*, size_t); - int pthread_getconcurrency(); - int pthread_mutexattr_gettype(pthread_mutexattr_t*, int*); - int pthread_mutexattr_settype(pthread_mutexattr_t*, int); - int pthread_setconcurrency(int); -} - -// -// CPU Time (TCT) -// -/* -int pthread_getcpuclockid(pthread_t, clockid_t*); -*/ - -version( linux ) -{ - int pthread_getcpuclockid(pthread_t, clockid_t*); -} - -// -// Timeouts (TMO) -// -/* -int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); -int pthread_rwlock_timedrdlock(pthread_rwlock_t*, timespec*); -int pthread_rwlock_timedwrlock(pthread_rwlock_t*, timespec*); -*/ - -version( linux ) -{ - int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); - int pthread_rwlock_timedrdlock(pthread_rwlock_t*, timespec*); - int pthread_rwlock_timedwrlock(pthread_rwlock_t*, timespec*); -} -else version( darwin ) -{ - int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); - int pthread_rwlock_timedrdlock(pthread_rwlock_t*, timespec*); - int pthread_rwlock_timedwrlock(pthread_rwlock_t*, timespec*); -} - -// -// Priority (TPI|TPP) -// -/* -PTHREAD_PRIO_INHERIT (TPI) -PTHREAD_PRIO_NONE (TPP|TPI) -PTHREAD_PRIO_PROTECT (TPI) - -int pthread_mutex_getprioceiling(pthread_mutex_t*, int*); (TPP) -int pthread_mutex_setprioceiling(pthread_mutex_t*, int, int*); (TPP) -int pthread_mutexattr_getprioceiling(pthread_mutexattr_t*, int*); (TPP) -int pthread_mutexattr_getprotocol(pthread_mutexattr_t*, int*); (TPI|TPP) -int pthread_mutexattr_setprioceiling(pthread_mutexattr_t*, int); (TPP) -int pthread_mutexattr_setprotocol(pthread_mutexattr_t*, int); (TPI|TPP) -*/ - -// -// Scheduling (TPS) -// -/* -PTHREAD_SCOPE_PROCESS -PTHREAD_SCOPE_SYSTEM - -int pthread_attr_getinheritsched(pthread_attr_t*, int*); -int pthread_attr_getschedpolicy(pthread_attr_t*, int*); -int pthread_attr_getscope(pthread_attr_t*, int*); -int pthread_attr_setinheritsched(pthread_attr_t*, int); -int pthread_attr_setschedpolicy(pthread_attr_t*, int); -int pthread_attr_setscope(pthread_attr_t*, int); -int pthread_getschedparam(pthread_t, int*, sched_param*); -int pthread_setschedparam(pthread_t, int, sched_param*); -int pthread_setschedprio(pthread_t, int); -*/ - -version( linux ) -{ - enum - { - PTHREAD_SCOPE_SYSTEM, - PTHREAD_SCOPE_PROCESS - } - - int pthread_attr_getinheritsched(pthread_attr_t*, int*); - int pthread_attr_getschedpolicy(pthread_attr_t*, int*); - int pthread_attr_getscope(pthread_attr_t*, int*); - int pthread_attr_setinheritsched(pthread_attr_t*, int); - int pthread_attr_setschedpolicy(pthread_attr_t*, int); - int pthread_attr_setscope(pthread_attr_t*, int); - int pthread_getschedparam(pthread_t, int*, sched_param*); - int pthread_setschedparam(pthread_t, int, sched_param*); - //int pthread_setschedprio(pthread_t, int); -} -else version( darwin ) -{ - enum - { - PTHREAD_SCOPE_SYSTEM = 1, - PTHREAD_SCOPE_PROCESS = 2 - } - - int pthread_attr_getinheritsched(pthread_attr_t*, int*); - int pthread_attr_getschedpolicy(pthread_attr_t*, int*); - int pthread_attr_getscope(pthread_attr_t*, int*); - int pthread_attr_setinheritsched(pthread_attr_t*, int); - int pthread_attr_setschedpolicy(pthread_attr_t*, int); - int pthread_attr_setscope(pthread_attr_t*, int); - int pthread_getschedparam(pthread_t, int*, sched_param*); - int pthread_setschedparam(pthread_t, int, sched_param*); - //int pthread_setschedprio(pthread_t, int); -} - -// -// Stack (TSA|TSS) -// -/* -int pthread_attr_getstack(pthread_attr_t*, void**, size_t*); (TSA|TSS) -int pthread_attr_getstackaddr(pthread_attr_t*, void**); (TSA) -int pthread_attr_getstacksize(pthread_attr_t*, size_t*); (TSS) -int pthread_attr_setstack(pthread_attr_t*, void*, size_t); (TSA|TSS) -int pthread_attr_setstackaddr(pthread_attr_t*, void*); (TSA) -int pthread_attr_setstacksize(pthread_attr_t*, size_t); (TSS) -*/ - -version( linux ) -{ - int pthread_attr_getstack(pthread_attr_t*, void**, size_t*); - int pthread_attr_getstackaddr(pthread_attr_t*, void**); - int pthread_attr_getstacksize(pthread_attr_t*, size_t*); - int pthread_attr_setstack(pthread_attr_t*, void*, size_t); - int pthread_attr_setstackaddr(pthread_attr_t*, void*); - int pthread_attr_setstacksize(pthread_attr_t*, size_t); -} -else version( darwin ) -{ - int pthread_attr_getstack(pthread_attr_t*, void**, size_t*); - int pthread_attr_getstackaddr(pthread_attr_t*, void**); - int pthread_attr_getstacksize(pthread_attr_t*, size_t*); - int pthread_attr_setstack(pthread_attr_t*, void*, size_t); - int pthread_attr_setstackaddr(pthread_attr_t*, void*); - int pthread_attr_setstacksize(pthread_attr_t*, size_t); -} - -// -// Shared Synchronization (TSH) -// -/* -int pthread_condattr_getpshared(pthread_condattr_t*, int*); -int pthread_condattr_setpshared(pthread_condattr_t*, int); -int pthread_mutexattr_getpshared(pthread_mutexattr_t*, int*); -int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int); -int pthread_rwlockattr_getpshared(pthread_rwlockattr_t*, int*); -int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int); -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/pwd.d --- a/tango/tango/stdc/posix/pwd.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.pwd; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for gid_t, uid_t - -extern (C): - -// -// Required -// -/* -struct passwd -{ - char* pw_name; - uid_t pw_uid; - gid_t pw_gid; - char* pw_dir; - char* pw_shell; -} - -passwd* getpwnam(char*); -passwd* getpwuid(uid_t); -*/ - -version( linux ) -{ - struct passwd - { - char* pw_name; - char* pw_passwd; - uid_t pw_uid; - gid_t pw_gid; - char* pw_gecos; - char* pw_dir; - char* pw_shell; - } -} -else version( darwin ) -{ - struct passwd - { - char* pw_name; - char* pw_passwd; - uid_t pw_uid; - gid_t pw_gid; - time_t pw_change; - char* pw_class; - char* pw_gecos; - char* pw_dir; - char* pw_shell; - time_t pw_expire; - } -} - -passwd* getpwnam(char*); -passwd* getpwuid(uid_t); - -// -// Thread-Safe Functions (TSF) -// -/* -int getpwnam_r(char*, passwd*, char*, size_t, passwd**); -int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); -*/ - -version( linux ) -{ - int getpwnam_r(char*, passwd*, char*, size_t, passwd**); - int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); -} -else version( darwin ) -{ - int getpwnam_r(char*, passwd*, char*, size_t, passwd**); - int getpwuid_r(uid_t, passwd*, char*, size_t, passwd**); -} -// -// XOpen (XSI) -// -/* -void endpwent(); -passwd* getpwent(); -void setpwent(); -*/ - -version( linux ) -{ - void endpwent(); - passwd* getpwent(); - void setpwent(); -} -else version ( darwin ) -{ - void endpwent(); - passwd* getpwent(); - void setpwent(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sched.d --- a/tango/tango/stdc/posix/sched.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sched; - -public import tango.stdc.posix.time; -public import tango.stdc.posix.sys.types; - -extern (C): - -// -// Required -// -/* -struct sched_param -{ - int sched_priority (THR) - int sched_ss_low_priority (SS|TSP) - struct timespec sched_ss_repl_period (SS|TSP) - struct timespec sched_ss_init_budget (SS|TSP) - int sched_ss_max_repl (SS|TSP) -} - -SCHED_FIFO -SCHED_RR -SCHED_SPORADIC (SS|TSP) -SCHED_OTHER - -int sched_getparam(pid_t, sched_param*); -int sched_getscheduler(pid_t); -int sched_setparam(pid_t, sched_param*); -int sched_setscheduler(pid_t, int, sched_param*); -*/ - -version( linux ) -{ - struct sched_param - { - int sched_priority; - } - - const SCHED_OTHER = 0; - const SCHED_FIFO = 1; - const SCHED_RR = 2; - //SCHED_SPORADIC (SS|TSP) -} -else version( darwin ) -{ - const SCHED_OTHER = 1; - const SCHED_FIFO = 4; - const SCHED_RR = 2; - // SCHED_SPORADIC seems to be unavailable - - private const __SCHED_PARAM_SIZE__ = 4; - - struct sched_param - { - int sched_priority; - byte[__SCHED_PARAM_SIZE__] opaque; - } -} - -int sched_getparam(pid_t, sched_param*); -int sched_getscheduler(pid_t); -int sched_setparam(pid_t, sched_param*); -int sched_setscheduler(pid_t, int, sched_param*); - -// -// Thread (THR) -// -/* -int sched_yield(); -*/ - -version( linux ) -{ - int sched_yield(); -} -else version( darwin ) -{ - int sched_yield(); -} - -// -// Scheduling (TPS) -// -/* -int sched_get_priority_max(int); -int sched_get_priority_min(int); -int sched_rr_get_interval(pid_t, timespec*); -*/ - -version( linux ) -{ - int sched_get_priority_max(int); - int sched_get_priority_min(int); - int sched_rr_get_interval(pid_t, timespec*); -} -else version( darwin ) -{ - int sched_get_priority_min(int); - int sched_get_priority_max(int); - //int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable? -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/semaphore.d --- a/tango/tango/stdc/posix/semaphore.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.semaphore; - -private import tango.stdc.posix.config; -private import tango.stdc.posix.time; - -extern (C): - -// -// Required -// -/* -sem_t -SEM_FAILED - -int sem_close(sem_t*); -int sem_destroy(sem_t*); -int sem_getvalue(sem_t*, int*); -int sem_init(sem_t*, int, uint); -sem_t* sem_open(char*, int, ...); -int sem_post(sem_t*); -int sem_trywait(sem_t*); -int sem_unlink(char*); -int sem_wait(sem_t*); -*/ - -version( linux ) -{ - private alias int __atomic_lock_t; - - private struct _pthread_fastlock - { - c_long __status; - __atomic_lock_t __spinlock; - } - - struct sem_t - { - _pthread_fastlock __sem_lock; - int __sem_value; - void* __sem_waiting; - } - - const SEM_FAILED = cast(sem_t*) null; -} -else version( darwin ) -{ - alias int sem_t; - - const SEM_FAILED = cast(sem_t*) null; -} - -int sem_close(sem_t*); -int sem_destroy(sem_t*); -int sem_getvalue(sem_t*, int*); -int sem_init(sem_t*, int, uint); -sem_t* sem_open(char*, int, ...); -int sem_post(sem_t*); -int sem_trywait(sem_t*); -int sem_unlink(char*); -int sem_wait(sem_t*); - -// -// Timeouts (TMO) -// -/* -int sem_timedwait(sem_t*, timespec*); -*/ - -version( linux ) -{ - int sem_timedwait(sem_t*, timespec*); -} -else version( darwin ) -{ - int sem_timedwait(sem_t*, timespec*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/setjmp.d --- a/tango/tango/stdc/posix/setjmp.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.setjmp; - -private import tango.stdc.posix.config; -private import tango.stdc.posix.signal; // for sigset_t - -extern (C): - -// -// Required -// -/* -jmp_buf - -int setjmp(jmp_buf); -void longjmp(jmp_buf, int); -*/ - -version( linux ) -{ - version( X86_64 ) - { - //const JB_BX = 0; - //const JB_BP = 1; - //const JB_12 = 2; - //const JB_13 = 3; - //const JB_14 = 4; - //const JB_15 = 5; - //const JB_SP = 6; - //const JB_PC = 7; - //const JB_SIZE = 64; - - alias long[8] __jmp_buf; - } - else version( X86 ) - { - //const JB_BX = 0; - //const JB_SI = 1; - //const JB_DI = 2; - //const JB_BP = 3; - //const JB_SP = 4; - //const JB_PC = 5; - //const JB_SIZE = 24; - - alias int[6] __jmp_buf; - } - - struct __jmp_buf_tag - { - __jmp_buf __jmpbuf; - int __mask_was_saved; - sigset_t __saved_mask; - } - - alias __jmp_buf_tag[1] jmp_buf; - - alias _setjmp setjmp; // see XOpen block - void longjmp(jmp_buf, int); -} - -// -// C Extension (CX) -// -/* -sigjmp_buf - -int sigsetjmp(sigjmp_buf, int); -void siglongjmp(sigjmp_buf, int); -*/ - -version( linux ) -{ - alias jmp_buf sigjmp_buf; - - int __sigsetjmp(sigjmp_buf, int); - alias __sigsetjmp sigsetjmp; - void siglongjmp(sigjmp_buf, int); -} - -// -// XOpen (XSI) -// -/* -int _setjmp(jmp_buf); -void _longjmp(jmp_buf, int); -*/ - -version( linux ) -{ - int _setjmp(jmp_buf); - void _longjmp(jmp_buf, int); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/signal.d --- a/tango/tango/stdc/posix/signal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,716 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.signal; - -private import tango.stdc.posix.config; -public import tango.stdc.signal; -public import tango.stdc.stddef; // for size_t -public import tango.stdc.posix.sys.types; // for pid_t -//public import tango.stdc.posix.time; // for timespec, now defined here - -extern (C): - -private alias void function(int) sigfn_t; -private alias void function(int, siginfo_t*, void*) sigactfn_t; - -// -// Required -// -/* -SIG_DFL (defined in tango.stdc.signal) -SIG_ERR (defined in tango.stdc.signal) -SIG_IGN (defined in tango.stdc.signal) - -sig_atomic_t (defined in tango.stdc.signal) - -SIGEV_NONE -SIGEV_SIGNAL -SIGEV_THREAD - -union sigval -{ - int sival_int; - void* sival_ptr; -} - -SIGRTMIN -SIGRTMAX - -SIGABRT (defined in tango.stdc.signal) -SIGALRM -SIGBUS -SIGCHLD -SIGCONT -SIGFPE (defined in tango.stdc.signal) -SIGHUP -SIGILL (defined in tango.stdc.signal) -SIGINT (defined in tango.stdc.signal) -SIGKILL -SIGPIPE -SIGQUIT -SIGSEGV (defined in tango.stdc.signal) -SIGSTOP -SIGTERM (defined in tango.stdc.signal) -SIGTSTP -SIGTTIN -SIGTTOU -SIGUSR1 -SIGUSR2 -SIGURG - -struct sigaction_t -{ - sigfn_t sa_handler; - sigset_t sa_mask; - sigactfn_t sa_sigaction; -} - -sigfn_t signal(int sig, sigfn_t func); (defined in tango.stdc.signal) -int raise(int sig); (defined in tango.stdc.signal) -*/ - -//SIG_DFL (defined in tango.stdc.signal) -//SIG_ERR (defined in tango.stdc.signal) -//SIG_IGN (defined in tango.stdc.signal) - -//sig_atomic_t (defined in tango.stdc.signal) - -enum -{ - SIGEV_SIGNAL, - SIGEV_NONE, - SIGEV_THREAD -} - -union sigval -{ - int sival_int; - void* sival_ptr; -} - -private extern (C) int __libc_current_sigrtmin(); -private extern (C) int __libc_current_sigrtmax(); - -alias __libc_current_sigrtmin SIGRTMIN; -alias __libc_current_sigrtmax SIGRTMAX; - -version( linux ) -{ - //SIGABRT (defined in tango.stdc.signal) - const SIGALRM = 14; - const SIGBUS = 7; - const SIGCHLD = 17; - const SIGCONT = 18; - //SIGFPE (defined in tango.stdc.signal) - const SIGHUP = 1; - //SIGILL (defined in tango.stdc.signal) - //SIGINT (defined in tango.stdc.signal) - const SIGKILL = 9; - const SIGPIPE = 13; - const SIGQUIT = 3; - //SIGSEGV (defined in tango.stdc.signal) - const SIGSTOP = 19; - //SIGTERM (defined in tango.stdc.signal) - const SIGTSTP = 20; - const SIGTTIN = 21; - const SIGTTOU = 22; - const SIGUSR1 = 10; - const SIGUSR2 = 12; - const SIGURG = 23; -} -else version( darwin ) -{ - //SIGABRT (defined in tango.stdc.signal) - const SIGALRM = 14; - const SIGBUS = 10; - const SIGCHLD = 20; - const SIGCONT = 19; - //SIGFPE (defined in tango.stdc.signal) - const SIGHUP = 1; - //SIGILL (defined in tango.stdc.signal) - //SIGINT (defined in tango.stdc.signal) - const SIGKILL = 9; - const SIGPIPE = 13; - const SIGQUIT = 3; - //SIGSEGV (defined in tango.stdc.signal) - const SIGSTOP = 17; - //SIGTERM (defined in tango.stdc.signal) - const SIGTSTP = 18; - const SIGTTIN = 21; - const SIGTTOU = 22; - const SIGUSR1 = 30; - const SIGUSR2 = 31; - const SIGURG = 16; -} - -struct sigaction_t -{ - static if( true /* __USE_POSIX199309 */ ) - { - union - { - sigfn_t sa_handler; - sigactfn_t sa_sigaction; - } - } - else - { - sigfn_t sa_handler; - } - sigset_t sa_mask; - int sa_flags; - - version( darwin ) {} else { - void function() sa_restorer; - } -} - -// -// C Extension (CX) -// -/* -SIG_HOLD - -sigset_t -pid_t (defined in sys.types) - -SIGABRT (defined in tango.stdc.signal) -SIGFPE (defined in tango.stdc.signal) -SIGILL (defined in tango.stdc.signal) -SIGINT (defined in tango.stdc.signal) -SIGSEGV (defined in tango.stdc.signal) -SIGTERM (defined in tango.stdc.signal) - -SA_NOCLDSTOP (CX|XSI) -SIG_BLOCK -SIG_UNBLOCK -SIG_SETMASK - -struct siginfo_t -{ - int si_signo; - int si_code; - - version( XSI ) - { - int si_errno; - pid_t si_pid; - uid_t si_uid; - void* si_addr; - int si_status; - c_long si_band; - } - version( RTS ) - { - sigval si_value; - } -} - -SI_USER -SI_QUEUE -SI_TIMER -SI_ASYNCIO -SI_MESGQ - -int kill(pid_t, int); -int sigaction(int, sigaction_t*, sigaction_t*); -int sigaddset(sigset_t*, int); -int sigdelset(sigset_t*, int); -int sigemptyset(sigset_t*); -int sigfillset(sigset_t*); -int sigismember( sigset_t*, int); -int sigpending(sigset_t*); -int sigprocmask(int, sigset_t*, sigset_t*); -int sigsuspend(sigset_t*); -int sigwait(sigset_t*, int*); -*/ - -version( linux ) -{ - const SIG_HOLD = cast(sigfn_t) 1; - - private const _SIGSET_NWORDS = 1024 / (8 * c_ulong.sizeof); - - struct sigset_t - { - c_ulong[_SIGSET_NWORDS] __val; - } - - // pid_t (defined in sys.types) - - //SIGABRT (defined in tango.stdc.signal) - //SIGFPE (defined in tango.stdc.signal) - //SIGILL (defined in tango.stdc.signal) - //SIGINT (defined in tango.stdc.signal) - //SIGSEGV (defined in tango.stdc.signal) - //SIGTERM (defined in tango.stdc.signal) - - const SA_NOCLDSTOP = 1; // (CX|XSI) - - const SIG_BLOCK = 0; - const SIG_UNBLOCK = 1; - const SIG_SETMASK = 2; - - private const __SI_MAX_SIZE = 128; - - static if( false /* __WORDSIZE == 64 */ ) - { - private const __SI_PAD_SIZE = ((__SI_MAX_SIZE / int.sizeof) - 4); - } - else - { - private const __SI_PAD_SIZE = ((__SI_MAX_SIZE / int.sizeof) - 3); - } - - struct siginfo_t - { - int si_signo; // Signal number - int si_errno; // If non-zero, an errno value associated with - // this signal, as defined in - int si_code; // Signal code - - union _sifields_t - { - int _pad[__SI_PAD_SIZE]; - - // kill() - struct _kill_t - { - pid_t si_pid; // Sending process ID - uid_t si_uid; // Real user ID of sending process - } _kill_t _kill; - - // POSIX.1b timers. - struct _timer_t - { - int si_tid; // Timer ID - int si_overrun; // Overrun count - sigval si_sigval; // Signal value - } _timer_t _timer; - - // POSIX.1b signals - struct _rt_t - { - pid_t si_pid; // Sending process ID - uid_t si_uid; // Real user ID of sending process - sigval si_sigval; // Signal value - } _rt_t _rt; - - // SIGCHLD - struct _sigchild_t - { - pid_t si_pid; // Which child - uid_t si_uid; // Real user ID of sending process - int si_status; // Exit value or signal - clock_t si_utime; - clock_t si_stime; - } _sigchild_t _sigchld; - - // SIGILL, SIGFPE, SIGSEGV, SIGBUS - struct _sigfault_t - { - void* si_addr; // Faulting insn/memory ref - } _sigfault_t _sigfault; - - // SIGPOLL - struct _sigpoll_t - { - c_long si_band; // Band event for SIGPOLL - int si_fd; - } _sigpoll_t _sigpoll; - } _sifields_t _sifields; - } - - enum - { - SI_ASYNCNL = -60, - SI_TKILL = -6, - SI_SIGIO, - SI_ASYNCIO, - SI_MESGQ, - SI_TIMER, - SI_QUEUE, - SI_USER, - SI_KERNEL = 0x80 - } - - int kill(pid_t, int); - int sigaction(int, sigaction_t*, sigaction_t*); - int sigaddset(sigset_t*, int); - int sigdelset(sigset_t*, int); - int sigemptyset(sigset_t*); - int sigfillset(sigset_t*); - int sigismember( sigset_t*, int); - int sigpending(sigset_t*); - int sigprocmask(int, sigset_t*, sigset_t*); - int sigsuspend(sigset_t*); - int sigwait(sigset_t*, int*); -} -else version( darwin ) -{ - //SIG_HOLD - - alias uint sigset_t; - // pid_t (defined in sys.types) - - //SIGABRT (defined in tango.stdc.signal) - //SIGFPE (defined in tango.stdc.signal) - //SIGILL (defined in tango.stdc.signal) - //SIGINT (defined in tango.stdc.signal) - //SIGSEGV (defined in tango.stdc.signal) - //SIGTERM (defined in tango.stdc.signal) - - //SA_NOCLDSTOP (CX|XSI) - - //SIG_BLOCK - //SIG_UNBLOCK - //SIG_SETMASK - - struct siginfo_t - { - int si_signo; - int si_errno; - int si_code; - pid_t si_pid; - uid_t si_uid; - int si_status; - void* si_addr; - sigval si_value; - int si_band; - uint pad[7]; - } - - //SI_USER - //SI_QUEUE - //SI_TIMER - //SI_ASYNCIO - //SI_MESGQ - - int kill(pid_t, int); - int sigaction(int, sigaction_t*, sigaction_t*); - int sigaddset(sigset_t*, int); - int sigdelset(sigset_t*, int); - int sigemptyset(sigset_t*); - int sigfillset(sigset_t*); - int sigismember( sigset_t*, int); - int sigpending(sigset_t*); - int sigprocmask(int, sigset_t*, sigset_t*); - int sigsuspend(sigset_t*); - int sigwait(sigset_t*, int*); -} - -// -// XOpen (XSI) -// -/* -SIGPOLL -SIGPROF -SIGSYS -SIGTRAP -SIGVTALRM -SIGXCPU -SIGXFSZ - -SA_ONSTACK -SA_RESETHAND -SA_RESTART -SA_SIGINFO -SA_NOCLDWAIT -SA_NODEFER -SS_ONSTACK -SS_DISABLE -MINSIGSTKSZ -SIGSTKSZ - -ucontext_t // from ucontext -mcontext_t // from ucontext - -struct stack_t -{ - void* ss_sp; - size_t ss_size; - int ss_flags; -} - -struct sigstack -{ - int ss_onstack; - void* ss_sp; -} - -ILL_ILLOPC -ILL_ILLOPN -ILL_ILLADR -ILL_ILLTRP -ILL_PRVOPC -ILL_PRVREG -ILL_COPROC -ILL_BADSTK - -FPE_INTDIV -FPE_INTOVF -FPE_FLTDIV -FPE_FLTOVF -FPE_FLTUND -FPE_FLTRES -FPE_FLTINV -FPE_FLTSUB - -SEGV_MAPERR -SEGV_ACCERR - -BUS_ADRALN -BUS_ADRERR -BUS_OBJERR - -TRAP_BRKPT -TRAP_TRACE - -CLD_EXITED -CLD_KILLED -CLD_DUMPED -CLD_TRAPPED -CLD_STOPPED -CLD_CONTINUED - -POLL_IN -POLL_OUT -POLL_MSG -POLL_ERR -POLL_PRI -POLL_HUP - -sigfn_t bsd_signal(int sig, sigfn_t func); -sigfn_t sigset(int sig, sigfn_t func); - -int killpg(pid_t, int); -int sigaltstack(stack_t*, stack_t*); -int sighold(int); -int sigignore(int); -int siginterrupt(int, int); -int sigpause(int); -int sigrelse(int); -*/ - -version( linux ) -{ - const SIGPOLL = 29; - const SIGPROF = 27; - const SIGSYS = 31; - const SIGTRAP = 5; - const SIGVTALRM = 26; - const SIGXCPU = 24; - const SIGXFSZ = 25; - - const SA_ONSTACK = 0x08000000; - const SA_RESETHAND = 0x80000000; - const SA_RESTART = 0x10000000; - const SA_SIGINFO = 4; - const SA_NOCLDWAIT = 2; - const SA_NODEFER = 0x40000000; - const SS_ONSTACK = 1; - const SS_DISABLE = 2; - const MINSIGSTKSZ = 2048; - const SIGSTKSZ = 8192; - - //ucontext_t (defined in tango.stdc.posix.ucontext) - //mcontext_t (defined in tango.stdc.posix.ucontext) - - struct stack_t - { - void* ss_sp; - int ss_flags; - size_t ss_size; - } - - struct sigstack - { - void* ss_sp; - int ss_onstack; - } - - enum - { - ILL_ILLOPC = 1, - ILL_ILLOPN, - ILL_ILLADR, - ILL_ILLTRP, - ILL_PRVOPC, - ILL_PRVREG, - ILL_COPROC, - ILL_BADSTK - } - - enum - { - FPE_INTDIV = 1, - FPE_INTOVF, - FPE_FLTDIV, - FPE_FLTOVF, - FPE_FLTUND, - FPE_FLTRES, - FPE_FLTINV, - FPE_FLTSUB - } - - enum - { - SEGV_MAPERR = 1, - SEGV_ACCERR - } - - enum - { - BUS_ADRALN = 1, - BUS_ADRERR, - BUS_OBJERR - } - - enum - { - TRAP_BRKPT = 1, - TRAP_TRACE - } - - enum - { - CLD_EXITED = 1, - CLD_KILLED, - CLD_DUMPED, - CLD_TRAPPED, - CLD_STOPPED, - CLD_CONTINUED - } - - enum - { - POLL_IN = 1, - POLL_OUT, - POLL_MSG, - POLL_ERR, - POLL_PRI, - POLL_HUP - } - - sigfn_t bsd_signal(int sig, sigfn_t func); - sigfn_t sigset(int sig, sigfn_t func); - - int killpg(pid_t, int); - int sigaltstack(stack_t*, stack_t*); - int sighold(int); - int sigignore(int); - int siginterrupt(int, int); - int sigpause(int); - int sigrelse(int); -} - -// -// Timer (TMR) -// -/* -NOTE: This should actually be defined in tango.stdc.posix.time. - It is defined here instead to break a circular import. - -struct timespec -{ - time_t tv_sec; - int tv_nsec; -} -*/ - -version( linux ) -{ - struct timespec - { - time_t tv_sec; - c_long tv_nsec; - } -} -else version( darwin ) -{ - struct timespec - { - time_t tv_sec; - c_long tv_nsec; - } -} - -// -// Realtime Signals (RTS) -// -/* -struct sigevent -{ - int sigev_notify; - int sigev_signo; - sigval sigev_value; - void(*)(sigval) sigev_notify_function; - pthread_attr_t* sigev_notify_attributes; -} - -int sigqueue(pid_t, int, sigval); -int sigtimedwait( sigset_t*, siginfo_t*, timespec*); -int sigwaitinfo( sigset_t*, siginfo_t*); -*/ - -version( linux ) -{ - private const __SIGEV_MAX_SIZE = 64; - - static if( false /* __WORDSIZE == 64 */ ) - { - private const __SIGEV_PAD_SIZE = ((__SIGEV_MAX_SIZE / int.sizeof) - 4); - } - else - { - private const __SIGEV_PAD_SIZE = ((__SIGEV_MAX_SIZE / int.sizeof) - 3); - } - - struct sigevent - { - sigval sigev_value; - int sigev_signo; - int sigev_notify; - - union _sigev_un_t - { - int[__SIGEV_PAD_SIZE] _pad; - pid_t _tid; - - struct _sigev_thread_t - { - void function(sigval) _function; - void* _attribute; - } _sigev_thread_t _sigev_thread; - } _sigev_un_t _sigev_un; - } - - int sigqueue(pid_t, int, sigval); - int sigtimedwait( sigset_t*, siginfo_t*, timespec*); - int sigwaitinfo( sigset_t*, siginfo_t*); -} - -// -// Threads (THR) -// -/* -int pthread_kill(pthread_t, int); -int pthread_sigmask(int, sigset_t*, sigset_t*); -*/ - -version( linux ) -{ - int pthread_kill(pthread_t, int); - int pthread_sigmask(int, sigset_t*, sigset_t*); -} -else version( darwin ) -{ - int pthread_kill(pthread_t, int); - int pthread_sigmask(int, sigset_t*, sigset_t*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/stdio.d --- a/tango/tango/stdc/posix/stdio.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,156 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.stdio; - -private import tango.stdc.posix.config; -public import tango.stdc.stdio; -public import tango.stdc.posix.sys.types; // for off_t - -extern (C): - -// -// Required (defined in tango.stdc.stdio) -// -/* -BUFSIZ -_IOFBF -_IOLBF -_IONBF -L_tmpnam -SEEK_CUR -SEEK_END -SEEK_SET -FILENAME_MAX -FOPEN_MAX -TMP_MAX -EOF -NULL -stderr -stdin -stdout -FILE -fpos_t -size_t - -void clearerr(FILE*); -int fclose(FILE*); -int feof(FILE*); -int ferror(FILE*); -int fflush(FILE*); -int fgetc(FILE*); -int fgetpos(FILE*, fpos_t *); -char* fgets(char*, int, FILE*); -FILE* fopen(char*, char*); -int fprintf(FILE*, char*, ...); -int fputc(int, FILE*); -int fputs(char*, FILE*); -size_t fread(void *, size_t, size_t, FILE*); -FILE* freopen(char*, char*, FILE*); -int fscanf(FILE*, char*, ...); -int fseek(FILE*, c_long, int); -int fsetpos(FILE*, fpos_t *); -c_long ftell(FILE*); -size_t fwrite(void *, size_t, size_t, FILE*); -int getc(FILE*); -int getchar(); -char* gets(char*); -void perror(char*); -int printf(char*, ...); -int putc(int, FILE*); -int putchar(int); -int puts(char*); -int remove(char*); -int rename(char*, char*); -void rewind(FILE*); -int scanf(char*, ...); -void setbuf(FILE*, char*); -int setvbuf(FILE*, char*, int, size_t); -int snprintf(char*, size_t, char*, ...); -int sprintf(char*, char*, ...); -int sscanf(char*, char*, int ...); -FILE* tmpfile(); -char* tmpnam(char*); -int ungetc(int, FILE*); -int vfprintf(FILE*, char*, va_list); -int vfscanf(FILE*, char*, va_list); -int vprintf(char*, va_list); -int vscanf(char*, va_list); -int vsnprintf(char*, size_t, char*, va_list); -int vsprintf(char*, char*, va_list); -int vsscanf(char*, char*, va_list arg); -*/ - -// -// C Extension (CX) -// -/* -L_ctermid - -char* ctermid(char*); -FILE* fdopen(int, char*); -int fileno(FILE*); -int fseeko(FILE*, off_t, int); -off_t ftello(FILE*); -char* gets(char*); -FILE* popen(char*, char*); -*/ - -version( linux ) -{ - const L_ctermid = 9; -} - -char* ctermid(char*); -FILE* fdopen(int, char*); -int fileno(FILE*); -int fseeko(FILE*, off_t, int); -off_t ftello(FILE*); -char* gets(char*); -FILE* popen(char*, char*); - -// -// Thread-Safe Functions (TSF) -// -/* -void flockfile(FILE*); -int ftrylockfile(FILE*); -void funlockfile(FILE*); -int getc_unlocked(FILE*); -int getchar_unlocked(); -int putc_unlocked(int, FILE*); -int putchar_unlocked(int); -*/ - -version( linux ) -{ - void flockfile(FILE*); - int ftrylockfile(FILE*); - void funlockfile(FILE*); - int getc_unlocked(FILE*); - int getchar_unlocked(); - int putc_unlocked(int, FILE*); - int putchar_unlocked(int); -} - -// -// XOpen (XSI) -// -/* -P_tmpdir -va_list (defined in tango.stdc.stdarg) - -char* tempnam(char*, char*); -*/ - -version( linux ) -{ - const P_tmpdir = "/tmp"; - - char* tempnam(char*, char*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/stdlib.d --- a/tango/tango/stdc/posix/stdlib.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.stdlib; - -private import tango.stdc.posix.config; -public import tango.stdc.stdlib; -public import tango.stdc.posix.sys.wait; - -extern (C): - -// -// Required (defined in tango.stdc.stdlib) -// -/* -EXIT_FAILURE -EXIT_SUCCESS -NULL -RAND_MAX -MB_CUR_MAX -div_t -ldiv_t -lldiv_t -size_t -wchar_t - -void _Exit(int); -void abort(); -int abs(int); -int atexit(void function()); -double atof(char*); -int atoi(char*); -c_long atol(char*); -long atoll(char*); -void* bsearch(void*, void*, size_t, size_t, int function(void*, void*)); -void* calloc(size_t, size_t); -div_t div(int, int); -void exit(int); -void free(void*); -char* getenv(char*); -c_long labs(c_long); -ldiv_t ldiv(c_long, c_long); -long llabs(long); -lldiv_t lldiv(long, long); -void* malloc(size_t); -int mblen(char*, size_t); -size_t mbstowcs(wchar_t*, char*, size_t); -int mbtowc(wchar_t*, char*, size_t); -void qsort(void*, size_t, size_t, int function(void*, void*)); -int rand(); -void* realloc(void*, size_t); -void srand(uint); -double strtod(char*, char**); -float strtof(char*, char**); -c_long strtol(char*, char**, int); -real strtold(char*, char**); -long strtoll(char*, char**, int); -c_ulong strtoul(char*, char**, int); -ulong strtoull(char*, char**, int); -int system(char*); -size_t wcstombs(char*, wchar_t*, size_t); -int wctomb(char*, wchar_t); -*/ - -// -// Advisory Information (ADV) -// -/* -int posix_memalign(void**, size_t, size_t); -*/ - -version( linux ) -{ - int posix_memalign(void**, size_t, size_t); -} - -// -// C Extension (CX) -// -/* -int setenv(char*, char*, int); -int unsetenv(char*); -*/ - -version( linux ) -{ - int setenv(char*, char*, int); - int unsetenv(char*); - - void* valloc(size_t); // LEGACY non-standard -} -else version( darwin ) -{ - int setenv(char*, char*, int); - int unsetenv(char*); - - void* valloc(size_t); // LEGACY non-standard -} - -// -// Thread-Safe Functions (TSF) -// -/* -int rand_r(uint*); -*/ - -version( linux ) -{ - int rand_r(uint*); -} -else version( darwin ) -{ - int rand_r(uint*); -} - -// -// XOpen (XSI) -// -/* -WNOHANG (defined in tango.stdc.posix.sys.wait) -WUNTRACED (defined in tango.stdc.posix.sys.wait) -WEXITSTATUS (defined in tango.stdc.posix.sys.wait) -WIFEXITED (defined in tango.stdc.posix.sys.wait) -WIFSIGNALED (defined in tango.stdc.posix.sys.wait) -WIFSTOPPED (defined in tango.stdc.posix.sys.wait) -WSTOPSIG (defined in tango.stdc.posix.sys.wait) -WTERMSIG (defined in tango.stdc.posix.sys.wait) - -c_long a64l(char*); -double drand48(); -char* ecvt(double, int, int *, int *); // LEGACY -double erand48(ushort[3]); -char* fcvt(double, int, int *, int *); // LEGACY -char* gcvt(double, int, char*); // LEGACY -int getsubopt(char**, char**, char**); -int grantpt(int); -char* initstate(uint, char*, size_t); -c_long jrand48(ushort[3]); -char* l64a(c_long); -void lcong48(ushort[7]); -c_long lrand48(); -char* mktemp(char*); // LEGACY -int mkstemp(char*); -c_long mrand48(); -c_long nrand48(ushort[3]); -int posix_openpt(int); -char* ptsname(int); -int putenv(char*); -c_long random(); -char* realpath(char*, char*); -ushort seed48(ushort[3]); -void setkey(char*); -char* setstate(char*); -void srand48(c_long); -void srandom(uint); -int unlockpt(int); -*/ - -version( linux ) -{ - //WNOHANG (defined in tango.stdc.posix.sys.wait) - //WUNTRACED (defined in tango.stdc.posix.sys.wait) - //WEXITSTATUS (defined in tango.stdc.posix.sys.wait) - //WIFEXITED (defined in tango.stdc.posix.sys.wait) - //WIFSIGNALED (defined in tango.stdc.posix.sys.wait) - //WIFSTOPPED (defined in tango.stdc.posix.sys.wait) - //WSTOPSIG (defined in tango.stdc.posix.sys.wait) - //WTERMSIG (defined in tango.stdc.posix.sys.wait) - - c_long a64l(char*); - double drand48(); - char* ecvt(double, int, int *, int *); // LEGACY - double erand48(ushort[3]); - char* fcvt(double, int, int *, int *); // LEGACY - char* gcvt(double, int, char*); // LEGACY - int getsubopt(char**, char**, char**); - int grantpt(int); - char* initstate(uint, char*, size_t); - c_long jrand48(ushort[3]); - char* l64a(c_long); - void lcong48(ushort[7]); - c_long lrand48(); - char* mktemp(char*); // LEGACY - int mkstemp(char*); - c_long mrand48(); - c_long nrand48(ushort[3]); - int posix_openpt(int); - char* ptsname(int); - int putenv(char*); - c_long random(); - char* realpath(char*, char*); - ushort seed48(ushort[3]); - void setkey(char*); - char* setstate(char*); - void srand48(c_long); - void srandom(uint); - int unlockpt(int); -} -else version( darwin ) -{ - //WNOHANG (defined in tango.stdc.posix.sys.wait) - //WUNTRACED (defined in tango.stdc.posix.sys.wait) - //WEXITSTATUS (defined in tango.stdc.posix.sys.wait) - //WIFEXITED (defined in tango.stdc.posix.sys.wait) - //WIFSIGNALED (defined in tango.stdc.posix.sys.wait) - //WIFSTOPPED (defined in tango.stdc.posix.sys.wait) - //WSTOPSIG (defined in tango.stdc.posix.sys.wait) - //WTERMSIG (defined in tango.stdc.posix.sys.wait) - - c_long a64l(char*); - double drand48(); - char* ecvt(double, int, int *, int *); // LEGACY - double erand48(ushort[3]); - char* fcvt(double, int, int *, int *); // LEGACY - char* gcvt(double, int, char*); // LEGACY - int getsubopt(char**, char**, char**); - int grantpt(int); - char* initstate(uint, char*, size_t); - c_long jrand48(ushort[3]); - char* l64a(c_long); - void lcong48(ushort[7]); - c_long lrand48(); - char* mktemp(char*); // LEGACY - int mkstemp(char*); - c_long mrand48(); - c_long nrand48(ushort[3]); - int posix_openpt(int); - char* ptsname(int); - int putenv(char*); - c_long random(); - char* realpath(char*, char*); - ushort seed48(ushort[3]); - void setkey(char*); - char* setstate(char*); - void srand48(c_long); - void srandom(uint); - int unlockpt(int); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/ipc.d --- a/tango/tango/stdc/posix/sys/ipc.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.ipc; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for uid_t, gid_t, mode_t, key_t - -extern (C): - -// -// XOpen (XSI) -// -/* -struct ipc_perm -{ - uid_t uid; - gid_t gid; - uid_t cuid; - gid_t cgid; - mode_t mode; -} - -IPC_CREAT -IPC_EXCL -IPC_NOWAIT - -IPC_PRIVATE - -IPC_RMID -IPC_SET -IPC_STAT - -key_t ftok(char*, int); -*/ - -version( linux ) -{ - struct ipc_perm - { - key_t __key; - uid_t uid; - gid_t gid; - uid_t cuid; - gid_t cgid; - ushort mode; - ushort __pad1; - ushort __seq; - ushort __pad2; - c_ulong __unused1; - c_ulong __unused2; - } - - const IPC_CREAT = 01000; - const IPC_EXCL = 02000; - const IPC_NOWAIT = 04000; - - const key_t IPC_PRIVATE = 0; - - const IPC_RMID = 0; - const IPC_SET = 1; - const IPC_STAT = 2; - - key_t ftok(char*, int); -} -else version( darwin ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/mman.d --- a/tango/tango/stdc/posix/sys/mman.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.mman; - -public import tango.stdc.stddef; // for size_t -public import tango.stdc.posix.sys.types; // for off_t, mode_t - -extern (C): - -// -// Advisory Information (ADV) -// -/* -int posix_madvise(void*, size_t, int); -*/ - -// -// Advisory Information and either Memory Mapped Files or Shared Memory Objects (MC1) -// -/* -POSIX_MADV_NORMAL -POSIX_MADV_SEQUENTIAL -POSIX_MADV_RANDOM -POSIX_MADV_WILLNEED -POSIX_MADV_DONTNEED -*/ - -version( darwin ) -{ - const POSIX_MADV_NORMAL = 0; - const POSIX_MADV_RANDOM = 1; - const POSIX_MADV_SEQUENTIAL = 2; - const POSIX_MADV_WILLNEED = 3; - const POSIX_MADV_DONTNEED = 4; -} - -// -// Memory Mapped Files, Shared Memory Objects, or Memory Protection (MC2) -// -/* -PROT_READ -PROT_WRITE -PROT_EXEC -PROT_NONE -*/ - -version( linux ) -{ - const PROT_NONE = 0x0; - const PROT_READ = 0x1; - const PROT_WRITE = 0x2; - const PROT_EXEC = 0x4; -} -else version( darwin ) -{ - const PROT_NONE = 0x00; - const PROT_READ = 0x01; - const PROT_WRITE = 0x02; - const PROT_EXEC = 0x04; -} - -// -// Memory Mapped Files, Shared Memory Objects, or Typed Memory Objects (MC3) -// -/* -void* mmap(void*, size_t, int, int, int, off_t); -int munmap(void*, size_t); -*/ - -version( linux ) -{ - void* mmap(void*, size_t, int, int, int, off_t); - int munmap(void*, size_t); -} -else version( darwin ) -{ - void* mmap(void*, size_t, int, int, int, off_t); - int munmap(void*, size_t); -} - -// -// Memory Mapped Files (MF) -// -/* -MAP_SHARED (MF|SHM) -MAP_PRIVATE (MF|SHM) -MAP_FIXED (MF|SHM) -MAP_FAILED (MF|SHM) - -MS_ASYNC (MF|SIO) -MS_SYNC (MF|SIO) -MS_INVALIDATE (MF|SIO) - -int msync(void*, size_t, int); (MF|SIO) -*/ - -version( linux ) -{ - const MAP_SHARED = 0x01; - const MAP_PRIVATE = 0x02; - const MAP_FIXED = 0x10; - const MAP_ANON = 0x20; // non-standard - - const MAP_FAILED = cast(void*) -1; - - enum - { - MS_ASYNC = 1, - MS_SYNC = 4, - MS_INVALIDATE = 2 - } - - int msync(void*, size_t, int); -} -else version( darwin ) -{ - const MAP_SHARED = 0x0001; - const MAP_PRIVATE = 0x0002; - const MAP_FIXED = 0x0010; - const MAP_ANON = 0x1000; // non-standard - - const MAP_FAILED = cast(void*)-1; - - const MS_ASYNC = 0x0001; - const MS_INVALIDATE = 0x0002; - const MS_SYNC = 0x0010; - - int msync(void*, size_t, int); -} - -// -// Process Memory Locking (ML) -// -/* -MCL_CURRENT -MCL_FUTURE - -int mlockall(int); -int munlockall(); -*/ - -version( linux ) -{ - const MCL_CURRENT = 1; - const MCL_FUTURE = 2; - - int mlockall(int); - int munlockall(); - -} -else version( darwin ) -{ - const MCL_CURRENT = 0x0001; - const MCL_FUTURE = 0x0002; - - int mlockall(int); - int munlockall(); -} - -// -// Range Memory Locking (MLR) -// -/* -int mlock(void*, size_t); -int munlock(void*, size_t); -*/ - -version( linux ) -{ - int mlock(void*, size_t); - int munlock(void*, size_t); -} -else version( darwin ) -{ - int mlock(void*, size_t); - int munlock(void*, size_t); -} - -// -// Memory Protection (MPR) -// -/* -int mprotect(void*, size_t, int); -*/ - -version( darwin ) -{ - int mprotect(void*, size_t, int); -} - -// -// Shared Memory Objects (SHM) -// -/* -int shm_open(char*, int, mode_t); -int shm_unlink(char*); -*/ - -version( linux ) -{ - int shm_open(char*, int, mode_t); - int shm_unlink(char*); -} -else version( darwin ) -{ - int shm_open(char*, int, mode_t); - int shm_unlink(char*); -} - -// -// Typed Memory Objects (TYM) -// -/* -POSIX_TYPED_MEM_ALLOCATE -POSIX_TYPED_MEM_ALLOCATE_CONTIG -POSIX_TYPED_MEM_MAP_ALLOCATABLE - -struct posix_typed_mem_info -{ - size_t posix_tmi_length; -} - -int posix_mem_offset(void*, size_t, off_t *, size_t *, int *); -int posix_typed_mem_get_info(int, struct posix_typed_mem_info *); -int posix_typed_mem_open(char*, int, int); -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/select.d --- a/tango/tango/stdc/posix/sys/select.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.select; - -private import tango.stdc.posix.config; -public import tango.stdc.time; // for timespec -public import tango.stdc.posix.sys.time; // for timeval -public import tango.stdc.posix.sys.types; // for time_t -public import tango.stdc.posix.signal; // for sigset_t - -extern (C): - -// -// Required -// -/* -NOTE: This module requires timeval from tango.stdc.posix.sys.time, but timeval - is supposedly an XOpen extension. As a result, this header will not - compile on platforms that are not XSI-compliant. This must be resolved - on a per-platform basis. - -fd_set - -void FD_CLR(int fd, fd_set* fdset); -int FD_ISSET(int fd, fd_set* fdset); -void FD_SET(int fd, fd_set* fdset); -void FD_ZERO(fd_set* fdset); - -FD_SETSIZE - -int pselect(int, fd_set*, fd_set*, fd_set*, timespec*, sigset_t*); -int select(int, fd_set*, fd_set*, fd_set*, timeval*); -*/ - -version( linux ) -{ - private - { - alias c_long __fd_mask; - const __NFDBITS = 8 * __fd_mask.sizeof; - - extern (D) int __FDELT( int d ) - { - return d / __NFDBITS; - } - - extern (D) int __FDMASK( int d ) - { - return cast(__fd_mask) 1 << ( d % __NFDBITS ); - } - } - - const FD_SETSIZE = 1024; - - struct fd_set - { - __fd_mask[FD_SETSIZE / __NFDBITS] fds_bits; - } - - extern (D) void FD_CLR( int fd, fd_set* fdset ) - { - fdset.fds_bits[__FDELT( fd )] &= ~__FDMASK( fd ); - } - - extern (D) int FD_ISSET( int fd, fd_set* fdset ) - { - return fdset.fds_bits[__FDELT( fd )] & __FDMASK( fd ); - } - - extern (D) void FD_SET( int fd, fd_set* fdset ) - { - fdset.fds_bits[__FDELT( fd )] |= __FDMASK( fd ); - } - - extern (D) void FD_ZERO( fd_set* fdset ) - { - fdset.fds_bits[0 .. $] = 0; - } - - /+ - + GNU ASM Implementation - + - # define __FD_ZERO(fdsp) \ - do { \ - int __d0, __d1; \ - __asm__ __volatile__ ("cld; rep; stosl" \ - : "=c" (__d0), "=D" (__d1) \ - : "a" (0), "0" (sizeof (fd_set) \ - / sizeof (__fd_mask)), \ - "1" (&__FDS_BITS (fdsp)[0]) \ - : "memory"); \ - } while (0) - - # define __FD_SET(fd, fdsp) \ - __asm__ __volatile__ ("btsl %1,%0" \ - : "=m" (__FDS_BITS (fdsp)[__FDELT (fd)]) \ - : "r" (((int) (fd)) % __NFDBITS) \ - : "cc","memory") - # define __FD_CLR(fd, fdsp) \ - __asm__ __volatile__ ("btrl %1,%0" \ - : "=m" (__FDS_BITS (fdsp)[__FDELT (fd)]) \ - : "r" (((int) (fd)) % __NFDBITS) \ - : "cc","memory") - # define __FD_ISSET(fd, fdsp) \ - (__extension__ \ - ({register char __result; \ - __asm__ __volatile__ ("btl %1,%2 ; setcb %b0" \ - : "=q" (__result) \ - : "r" (((int) (fd)) % __NFDBITS), \ - "m" (__FDS_BITS (fdsp)[__FDELT (fd)]) \ - : "cc"); \ - __result; })) - +/ - - int pselect(int, fd_set*, fd_set*, fd_set*, timespec*, sigset_t*); - int select(int, fd_set*, fd_set*, fd_set*, timeval*); -} -else version( darwin ) -{ - private - { - const uint __DARWIN_NBBY = 8; /* bits in a byte */ - const uint __DARWIN_NFDBITS = (int.sizeof * __DARWIN_NBBY); /* bits per mask */ - } - - const FD_SETSIZE = 1024; - - struct fd_set - { - int fds_bits[(((FD_SETSIZE) + ((__DARWIN_NFDBITS) - 1)) / (__DARWIN_NFDBITS))]; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/shm.d --- a/tango/tango/stdc/posix/sys/shm.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.shm; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for pid_t, time_t, key_t, size_t -public import tango.stdc.posix.sys.ipc; - -extern (C): - -// -// XOpen (XSI) -// -/* -SHM_RDONLY -SHM_RND - -SHMLBA - -shmatt_t - -struct shmid_ds -{ - ipc_perm shm_perm; - size_t shm_segsz; - pid_t shm_lpid; - pid_t shm_cpid; - shmatt_t shm_nattch; - time_t shm_atime; - time_t shm_dtime; - time_t shm_ctime; -} - -void* shmat(int, void*, int); -int shmctl(int, int, shmid_ds*); -int shmdt(void*); -int shmget(key_t, size_t, int); -*/ - -version( linux ) -{ - const SHM_RDONLY = 010000; - const SHM_RND = 020000; - - int __getpagesize(); - alias __getpagesize SHMLBA; - - alias c_ulong shmatt_t; - - struct shmid_ds - { - ipc_perm shm_perm; - size_t shm_segsz; - time_t shm_atime; - c_ulong __unused1; - time_t shm_dtime; - c_ulong __unused2; - time_t shm_ctime; - c_ulong __unused3; - pid_t shm_cpid; - pid_t shm_lpid; - shmatt_t shm_nattch; - c_ulong __unused4; - c_ulong __unused5; - } - - void* shmat(int, void*, int); - int shmctl(int, int, shmid_ds*); - int shmdt(void*); - int shmget(key_t, size_t, int); -} -else version( darwin ) -{ - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/socket.d --- a/tango/tango/stdc/posix/sys/socket.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,318 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.socket; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for ssize_t, size_t -public import tango.stdc.posix.sys.uio; // for iovec - -extern (C): - -// -// Required -// -/* -socklen_t -sa_family_t - -struct sockaddr -{ - sa_family_t sa_family; - char sa_data[]; -} - -struct sockaddr_storage -{ - sa_family_t ss_family; -} - -struct msghdr -{ - void* msg_name; - socklen_t msg_namelen; - struct iovec* msg_iov; - int msg_iovlen; - void* msg_control; - socklen_t msg_controllen; - int msg_flags; -} - -struct iovec {} // from tango.stdc.posix.sys.uio - -struct cmsghdr -{ - socklen_t cmsg_len; - int cmsg_level; - int cmsg_type; -} - -SCM_RIGHTS - -CMSG_DATA(cmsg) -CMSG_NXTHDR(mhdr,cmsg) -CMSG_FIRSTHDR(mhdr) - -struct linger -{ - int l_onoff; - int l_linger; -} - -SOCK_DGRAM -SOCK_SEQPACKET -SOCK_STREAM - -SOL_SOCKET - -SO_ACCEPTCONN -SO_BROADCAST -SO_DEBUG -SO_DONTROUTE -SO_ERROR -SO_KEEPALIVE -SO_LINGER -SO_OOBINLINE -SO_RCVBUF -SO_RCVLOWAT -SO_RCVTIMEO -SO_REUSEADDR -SO_SNDBUF -SO_SNDLOWAT -SO_SNDTIMEO -SO_TYPE - -SOMAXCONN - -MSG_CTRUNC -MSG_DONTROUTE -MSG_EOR -MSG_OOB -MSG_PEEK -MSG_TRUNC -MSG_WAITALL - -AF_INET -AF_UNIX -AF_UNSPEC - -SHUT_RD -SHUT_RDWR -SHUT_WR - -int accept(int, sockaddr*, socklen_t*); -int bind(int, sockaddr*, socklen_t); -int connect(int, sockaddr*, socklen_t); -int getpeername(int, sockaddr*, socklen_t*); -int getsockname(int, sockaddr*, socklen_t*); -int getsockopt(int, int, int, void*, socklen_t*); -int listen(int, int); -ssize_t recv(int, void*, size_t, int); -ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*); -ssize_t recvmsg(int, msghdr*, int); -ssize_t send(int, void*, size_t, int); -ssize_t sendmsg(int, msghdr*, int); -ssize_t sendto(int, void*, size_t, int, sockaddr*, socklen_t); -int setsockopt(int, int, int, void*, socklen_t); -int shutdown(int, int); -int socket(int, int, int); -int sockatmark(int); -int socketpair(int, int, int, int[2]); -*/ - -version( linux ) -{ - alias uint socklen_t; - alias ushort sa_family_t; - - struct sockaddr - { - sa_family_t sa_family; - byte[14] sa_data; - } - - private enum : size_t - { - _SS_SIZE = 128, - _SS_PADSIZE = _SS_SIZE - (c_ulong.sizeof * 2) - } - - struct sockaddr_storage - { - sa_family_t ss_family; - c_ulong __ss_align; - byte[_SS_PADSIZE] __ss_padding; - } - - struct msghdr - { - void* msg_name; - socklen_t msg_namelen; - iovec* msg_iov; - size_t msg_iovlen; - void* msg_control; - size_t msg_controllen; - int msg_flags; - } - - struct cmsghdr - { - size_t cmsg_len; - int cmsg_level; - int cmsg_type; - static if( false /* (!is( __STRICT_ANSI__ ) && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L */ ) - { - ubyte[1] __cmsg_data; - } - } - - enum : uint - { - SCM_RIGHTS = 0x01 - } - - static if( false /* (!is( __STRICT_ANSI__ ) && __GNUC__ >= 2) || __STDC_VERSION__ >= 199901L */ ) - { - extern (D) ubyte[1] CMSG_DATA( cmsghdr* cmsg ) { return cmsg.__cmsg_data; } - } - else - { - extern (D) ubyte* CMSG_DATA( cmsghdr* cmsg ) { return cast(ubyte*)( cmsg + 1 ); } - } - - private cmsghdr* __cmsg_nxthdr(msghdr*, cmsghdr*); - alias __cmsg_nxthdr CMSG_NXTHDR; - - extern (D) size_t CMSG_FIRSTHDR( msghdr* mhdr ) - { - return cast(size_t)( mhdr.msg_controllen >= cmsghdr.sizeof - ? cast(cmsghdr*) mhdr.msg_control - : cast(cmsghdr*) null ); - } - - struct linger - { - int l_onoff; - int l_linger; - } - - enum - { - SOCK_DGRAM = 2, - SOCK_SEQPACKET = 5, - SOCK_STREAM = 1 - } - - enum - { - SOL_SOCKET = 1 - } - - enum - { - SO_ACCEPTCONN = 30, - SO_BROADCAST = 6, - SO_DEBUG = 1, - SO_DONTROUTE = 5, - SO_ERROR = 4, - SO_KEEPALIVE = 9, - SO_LINGER = 13, - SO_OOBINLINE = 10, - SO_RCVBUF = 8, - SO_RCVLOWAT = 18, - SO_RCVTIMEO = 20, - SO_REUSEADDR = 2, - SO_SNDBUF = 7, - SO_SNDLOWAT = 19, - SO_SNDTIMEO = 21, - SO_TYPE = 3 - } - - enum - { - SOMAXCONN = 128 - } - - enum : uint - { - MSG_CTRUNC = 0x08, - MSG_DONTROUTE = 0x04, - MSG_EOR = 0x80, - MSG_OOB = 0x01, - MSG_PEEK = 0x02, - MSG_TRUNC = 0x20, - MSG_WAITALL = 0x100 - } - - enum - { - AF_INET = 2, - AF_UNIX = 1, - AF_UNSPEC = 0 - } - - enum - { - SHUT_RD, - SHUT_WR, - SHUT_RDWR - } - - int accept(int, sockaddr*, socklen_t*); - int bind(int, sockaddr*, socklen_t); - int connect(int, sockaddr*, socklen_t); - int getpeername(int, sockaddr*, socklen_t*); - int getsockname(int, sockaddr*, socklen_t*); - int getsockopt(int, int, int, void*, socklen_t*); - int listen(int, int); - ssize_t recv(int, void*, size_t, int); - ssize_t recvfrom(int, void*, size_t, int, sockaddr*, socklen_t*); - ssize_t recvmsg(int, msghdr*, int); - ssize_t send(int, void*, size_t, int); - ssize_t sendmsg(int, msghdr*, int); - ssize_t sendto(int, void*, size_t, int, sockaddr*, socklen_t); - int setsockopt(int, int, int, void*, socklen_t); - int shutdown(int, int); - int socket(int, int, int); - int sockatmark(int); - int socketpair(int, int, int, int[2]); -} -else version( darwin ) -{ - alias uint socklen_t; -} - -// -// IPV6 (IP6) -// -/* -AF_INET6 -*/ - -version( linux ) -{ - enum - { - AF_INET6 = 10 - } -} - -// -// Raw Sockets (RS) -// -/* -SOCK_RAW -*/ - -version( linux ) -{ - enum - { - SOCK_RAW = 3 - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/stat.d --- a/tango/tango/stdc/posix/sys/stat.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,294 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.stat; - -private import tango.stdc.posix.config; -private import tango.stdc.stdint; -private import tango.stdc.posix.time; // for timespec -public import tango.stdc.stddef; // for size_t -public import tango.stdc.posix.sys.types; // for off_t, mode_t - -extern (C): - -// -// Required -// -/* -struct stat -{ - dev_t st_dev; - ino_t st_ino; - mode_t st_mode; - nlink_t st_nlink; - uid_t st_uid; - gid_t st_gid; - off_t st_size; - time_t st_atime; - time_t st_mtime; - time_t st_ctime; -} - -S_IRWXU - S_IRUSR - S_IWUSR - S_IXUSR -S_IRWXG - S_IRGRP - S_IWGRP - S_IXGRP -S_IRWXO - S_IROTH - S_IWOTH - S_IXOTH -S_ISUID -S_ISGID -S_ISVTX - -S_ISBLK(m) -S_ISCHR(m) -S_ISDIR(m) -S_ISFIFO(m) -S_ISREG(m) -S_ISLNK(m) -S_ISSOCK(m) - -S_TYPEISMQ(buf) -S_TYPEISSEM(buf) -S_TYPEISSHM(buf) - -int chmod(char*, mode_t); -int fchmod(int, mode_t); -int fstat(int, stat*); -int lstat(char*, stat*); -int mkdir(char*, mode_t); -int mkfifo(char*, mode_t); -int stat(char*, stat*); -mode_t umask(mode_t); -*/ - -version( linux ) -{ - struct stat_t - { - dev_t st_dev; - ushort __pad1; - static if( __USE_FILE_OFFSET64 ) - { - ino_t __st_ino; - } - else - { - ino_t st_ino; - } - mode_t st_mode; - nlink_t st_nlink; - uid_t st_uid; - gid_t st_gid; - dev_t st_rdev; - ushort __pad2; - off_t st_size; - blksize_t st_blksize; - blkcnt_t st_blocks; - static if( false /*__USE_MISC*/ ) // true if _BSD_SOURCE || _SVID_SOURCE - { - /* Nanosecond resolution timestamps are stored in a format - equivalent to 'struct timespec'. This is the type used - whenever possible but the Unix namespace rules do not allow the - identifier 'timespec' to appear in the header. - Therefore we have to handle the use of this header in strictly - standard-compliant sources special. */ - timespec st_atim; - timespec st_mtim; - timespec st_ctim; - alias st_atim.tv_sec st_atime; - alias st_mtim.tv_sec st_mtime; - alias st_ctim.tv_sec st_ctime; - } - else - { - time_t st_atime; - c_ulong st_atimensec; - time_t st_mtime; - c_ulong st_mtimensec; - time_t st_ctime; - c_ulong st_ctimensec; - } - static if( __USE_FILE_OFFSET64 ) - { - ino_t st_ino; - } - else - { - c_ulong __unused4; - c_ulong __unused5; - } - } - - const S_IRUSR = 0400; - const S_IWUSR = 0200; - const S_IXUSR = 0100; - const S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR; - - const S_IRGRP = S_IRUSR >> 3; - const S_IWGRP = S_IWUSR >> 3; - const S_IXGRP = S_IXUSR >> 3; - const S_IRWXG = S_IRWXU >> 3; - - const S_IROTH = S_IRGRP >> 3; - const S_IWOTH = S_IWGRP >> 3; - const S_IXOTH = S_IXGRP >> 3; - const S_IRWXO = S_IRWXG >> 3; - - const S_ISUID = 04000; - const S_ISGID = 02000; - const S_ISVTX = 01000; - - private - { - extern (D) bool S_ISTYPE( mode_t mode, uint mask ) - { - return ( mode & S_IFMT ) == mask; - } - } - - extern (D) bool S_ISBLK( mode_t mode ) { return S_ISTYPE( mode, S_IFBLK ); } - extern (D) bool S_ISCHR( mode_t mode ) { return S_ISTYPE( mode, S_IFCHR ); } - extern (D) bool S_ISDIR( mode_t mode ) { return S_ISTYPE( mode, S_IFDIR ); } - extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO ); } - extern (D) bool S_ISREG( mode_t mode ) { return S_ISTYPE( mode, S_IFREG ); } - extern (D) bool S_ISLNK( mode_t mode ) { return S_ISTYPE( mode, S_IFLNK ); } - extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); } - - static if( true /*__USE_POSIX199309*/ ) - { - extern bool S_TYPEISMQ( stat_t* buf ) { return false; } - extern bool S_TYPEISSEM( stat_t* buf ) { return false; } - extern bool S_TYPEISSHM( stat_t* buf ) { return false; } - } -} -else version( darwin ) -{ - struct stat_t - { - dev_t st_dev; - ino_t st_ino; - mode_t st_mode; - nlink_t st_nlink; - uid_t st_uid; - gid_t st_gid; - dev_t st_rdev; - time_t st_atime; - c_ulong st_atimensec; - time_t st_mtime; - c_ulong st_mtimensec; - time_t st_ctime; - c_ulong st_ctimensec; - off_t st_size; - blkcnt_t st_blocks; - blksize_t st_blksize; - uint st_flags; - uint st_gen; - int st_lspare; - long st_qspare[2]; - } - - const S_IRUSR = 0400; - const S_IWUSR = 0200; - const S_IXUSR = 0100; - const S_IRWXU = S_IRUSR | S_IWUSR | S_IXUSR; - - const S_IRGRP = S_IRUSR >> 3; - const S_IWGRP = S_IWUSR >> 3; - const S_IXGRP = S_IXUSR >> 3; - const S_IRWXG = S_IRWXU >> 3; - - const S_IROTH = S_IRGRP >> 3; - const S_IWOTH = S_IWGRP >> 3; - const S_IXOTH = S_IXGRP >> 3; - const S_IRWXO = S_IRWXG >> 3; - - const S_ISUID = 04000; - const S_ISGID = 02000; - const S_ISVTX = 01000; - - private - { - extern (D) bool S_ISTYPE( mode_t mode, uint mask ) - { - return ( mode & S_IFMT ) == mask; - } - } - - extern (D) bool S_ISBLK( mode_t mode ) { return S_ISTYPE( mode, S_IFBLK ); } - extern (D) bool S_ISCHR( mode_t mode ) { return S_ISTYPE( mode, S_IFCHR ); } - extern (D) bool S_ISDIR( mode_t mode ) { return S_ISTYPE( mode, S_IFDIR ); } - extern (D) bool S_ISFIFO( mode_t mode ) { return S_ISTYPE( mode, S_IFIFO ); } - extern (D) bool S_ISREG( mode_t mode ) { return S_ISTYPE( mode, S_IFREG ); } - extern (D) bool S_ISLNK( mode_t mode ) { return S_ISTYPE( mode, S_IFLNK ); } - extern (D) bool S_ISSOCK( mode_t mode ) { return S_ISTYPE( mode, S_IFSOCK ); } -} - -int chmod(char*, mode_t); -int fchmod(int, mode_t); -int fstat(int, stat_t*); -int lstat(char*, stat_t*); -int mkdir(char*, mode_t); -int mkfifo(char*, mode_t); -int stat(char*, stat_t*); -mode_t umask(mode_t); - -// -// Typed Memory Objects (TYM) -// -/* -S_TYPEISTMO(buf) -*/ - -// -// XOpen (XSI) -// -/* -S_IFMT -S_IFBLK -S_IFCHR -S_IFIFO -S_IFREG -S_IFDIR -S_IFLNK -S_IFSOCK - -int mknod(char*, mode_t, dev_t); -*/ - -version( linux ) -{ - const S_IFMT = 0170000; - const S_IFBLK = 0060000; - const S_IFCHR = 0020000; - const S_IFIFO = 0010000; - const S_IFREG = 0100000; - const S_IFDIR = 0040000; - const S_IFLNK = 0120000; - const S_IFSOCK = 0140000; - - int mknod(char*, mode_t, dev_t); -} -else version( darwin ) -{ - const S_IFMT = 0170000; - const S_IFBLK = 0060000; - const S_IFCHR = 0020000; - const S_IFIFO = 0010000; - const S_IFREG = 0100000; - const S_IFDIR = 0040000; - const S_IFLNK = 0120000; - const S_IFSOCK = 0140000; - - int mknod(char*, mode_t, dev_t); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/time.d --- a/tango/tango/stdc/posix/sys/time.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,94 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.time; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for time_t, suseconds_t -public import tango.stdc.posix.sys.select; // for fd_set, FD_CLR() FD_ISSET() FD_SET() FD_ZERO() FD_SETSIZE - -extern (C): - -// -// XOpen (XSI) -// -/* -struct timeval -{ - time_t tv_sec; - suseconds_t tv_usec; -} - -struct itimerval -{ - timeval it_interval; - timeval it_value; -} - -ITIMER_REAL -ITIMER_VIRTUAL -ITIMER_PROF - -int getitimer(int, itimerval*); -int gettimeofday(timeval*, void*); -int select(int, fd_set*, fd_set*, fd_set*, timeval*); -int setitimer(int, itimerval*, itimerval*); -int utimes(char*, timeval[2]); // LEGACY -*/ - -version( linux ) -{ - struct timeval - { - time_t tv_sec; - suseconds_t tv_usec; - } - - struct itimerval - { - timeval it_interval; - timeval it_value; - } - - const ITIMER_REAL = 0; - const ITIMER_VIRTUAL = 1; - const ITIMER_PROF = 2; - - int getitimer(int, itimerval*); - int gettimeofday(timeval*, void*); - int select(int, fd_set*, fd_set*, fd_set*, timeval*); - int setitimer(int, itimerval*, itimerval*); - int utimes(char*, timeval[2]); // LEGACY -} -else version( darwin ) -{ - struct timeval - { - time_t tv_sec; - suseconds_t tv_usec; - } - - struct itimerval - { - timeval it_interval; - timeval it_value; - } - - // non-standard - struct timezone_t - { - int tz_minuteswest; - int tz_dsttime; - } - - int getitimer(int, itimerval*); - int gettimeofday(timeval*, timezone_t*); // timezone_t* is normally void* - int select(int, fd_set*, fd_set*, fd_set*, timeval*); - int setitimer(int, itimerval*, itimerval*); - int utimes(char*, timeval*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/types.d --- a/tango/tango/stdc/posix/sys/types.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,397 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.types; - -private import tango.stdc.posix.config; -private import tango.stdc.stdint; -public import tango.stdc.stddef; // for size_t -public import tango.stdc.time; // for clock_t, time_t - -extern (C): - -// -// Required -// -/* -blkcnt_t -blksize_t -dev_t -gid_t -ino_t -mode_t -nlink_t -off_t -pid_t -size_t -ssize_t -time_t -uid_t -*/ - -version( linux ) -{ - static if( __USE_FILE_OFFSET64 ) - { - alias long blkcnt_t; - alias ulong ino_t; - alias long off_t; - } - else - { - alias c_long blkcnt_t; - alias c_ulong ino_t; - alias c_long off_t; - } - alias c_long blksize_t; - alias ulong dev_t; - alias uint gid_t; - alias uint mode_t; - alias uint nlink_t; - alias int pid_t; - //size_t (defined in tango.stdc.stddef) - alias int ssize_t; - //time_t (defined in tango.stdc.time) - alias uint uid_t; -} -else version( darwin ) -{ - alias long blkcnt_t; - alias int blksize_t; - alias int dev_t; - alias uint gid_t; - alias uint ino_t; - alias ushort mode_t; - alias ushort nlink_t; - alias long off_t; - alias int pid_t; - //size_t (defined in tango.stdc.stddef) - alias size_t ssize_t; - //time_t (defined in tango.stdc.time) - alias uint uid_t; -} - -// -// XOpen (XSI) -// -/* -clock_t -fsblkcnt_t -fsfilcnt_t -id_t -key_t -suseconds_t -useconds_t -*/ - -version( linux ) -{ - static if( __USE_FILE_OFFSET64 ) - { - alias ulong fsblkcnt_t; - alias ulong fsfilcnt_t; - } - else - { - alias c_ulong fsblkcnt_t; - alias c_ulong fsfilcnt_t; - } - // clock_t (defined in tango.stdc.time) - alias uint id_t; - alias int key_t; - alias c_long suseconds_t; - alias uint useconds_t; -} -else version( darwin ) -{ - //clock_t - alias uint fsblkcnt_t; - alias uint fsfilcnt_t; - alias uint id_t; - // key_t - alias int suseconds_t; - alias uint useconds_t; -} - -// -// Thread (THR) -// -/* -pthread_attr_t -pthread_cond_t -pthread_condattr_t -pthread_key_t -pthread_mutex_t -pthread_mutexattr_t -pthread_once_t -pthread_rwlock_t -pthread_rwlockattr_t -pthread_t -*/ - -version( linux ) -{ - private struct __sched_param - { - int __sched_priority; - } - - struct pthread_attr_t - { - int __detachstate; - int __schedpolicy; - __sched_param __schedparam; - int __inheritsched; - int __scope; - size_t __guardsize; - int __stackaddr_set; - void* __stackaddr; - size_t __stacksize; - } - - private alias int __atomic_lock_t; - - private struct _pthread_fastlock - { - c_long __status; - __atomic_lock_t __spinlock; - } - - private alias void* _pthread_descr; - - private alias long __pthread_cond_align_t; - - struct pthread_cond_t - { - _pthread_fastlock __c_lock; - _pthread_descr __c_waiting; - char[48 - - _pthread_fastlock.sizeof - - _pthread_descr.sizeof - - __pthread_cond_align_t.sizeof] - __padding; - __pthread_cond_align_t __align; - } - - struct pthread_condattr_t - { - int __dummy; - } - - alias uint pthread_key_t; - - struct pthread_mutex_t - { - int __m_reserved; - int __m_count; - _pthread_descr __m_owner; - int __m_kind; - _pthread_fastlock __m_lock; - } - - struct pthread_mutexattr_t - { - int __mutexkind; - } - - alias int pthread_once_t; - - struct pthread_rwlock_t - { - _pthread_fastlock __rw_lock; - int __rw_readers; - _pthread_descr __rw_writer; - _pthread_descr __rw_read_waiting; - _pthread_descr __rw_write_waiting; - int __rw_kind; - int __rw_pshared; - } - - struct pthread_rwlockattr_t - { - int __lockkind; - int __pshared; - } - - alias c_ulong pthread_t; -} -else version( darwin ) -{ - private - { - // #if defined(__LP64__) - // FIXME: what is LP64, is it important enough to be included? - version( LP64 ) - { - const __PTHREAD_SIZE__ = 1168; - const __PTHREAD_ATTR_SIZE__ = 56; - const __PTHREAD_MUTEXATTR_SIZE__ = 8; - const __PTHREAD_MUTEX_SIZE__ = 56; - const __PTHREAD_CONDATTR_SIZE__ = 8; - const __PTHREAD_COND_SIZE__ = 40; - const __PTHREAD_ONCE_SIZE__ = 8; - const __PTHREAD_RWLOCK_SIZE__ = 192; - const __PTHREAD_RWLOCKATTR_SIZE__ = 16; - } - else - { - const __PTHREAD_SIZE__ = 596; - const __PTHREAD_ATTR_SIZE__ = 36; - const __PTHREAD_MUTEXATTR_SIZE__ = 8; - const __PTHREAD_MUTEX_SIZE__ = 40; - const __PTHREAD_CONDATTR_SIZE__ = 4; - const __PTHREAD_COND_SIZE__ = 24; - const __PTHREAD_ONCE_SIZE__ = 4; - const __PTHREAD_RWLOCK_SIZE__ = 124; - const __PTHREAD_RWLOCKATTR_SIZE__ = 12; - } - } - - struct pthread_handler_rec - { - void function(void*) __routine; - void* __arg; - pthread_handler_rec* __next; - } - - struct pthread_attr_t - { - c_long __sig; - byte[__PTHREAD_ATTR_SIZE__] __opaque; - } - - struct pthread_cond_t - { - c_long __sig; - byte[__PTHREAD_COND_SIZE__] __opaque; - } - - struct pthread_condattr_t - { - c_long __sig; - byte[__PTHREAD_CONDATTR_SIZE__] __opaque; - } - - alias c_ulong pthread_key_t; - - struct pthread_mutex_t - { - c_long __sig; - byte[__PTHREAD_MUTEX_SIZE__] __opaque; - } - - struct pthread_mutexattr_t - { - c_long __sig; - byte[__PTHREAD_MUTEXATTR_SIZE__] __opaque; - } - - struct pthread_once_t - { - c_long __sig; - byte[__PTHREAD_ONCE_SIZE__] __opaque; - } - - struct pthread_rwlock_t - { - c_long __sig; - byte[__PTHREAD_RWLOCK_SIZE__] __opaque; - } - - struct pthread_rwlockattr_t - { - c_long __sig; - byte[__PTHREAD_RWLOCKATTR_SIZE__] __opaque; - } - - private struct _opaque_pthread_t - { - c_long __sig; - pthread_handler_rec* __cleanup_stack; - byte[__PTHREAD_SIZE__] __opaque; - } - - alias _opaque_pthread_t* pthread_t; -} - -// -// Barrier (BAR) -// -/* -pthread_barrier_t -pthread_barrierattr_t -*/ - -version( linux ) -{ - struct pthread_barrier_t - { - _pthread_fastlock __ba_lock; - int __ba_required; - int __ba_present; - _pthread_descr __ba_waiting; - } - - struct pthread_barrierattr_t - { - int __pshared; - } -} -else version( darwin ) -{ - // NOTE: The following definitions are Tango-specific because darwin does - // not support them directly. - - struct pthread_barrier_t - { - pthread_mutex_t b_lock; - pthread_cond_t b_cond; - int b_count; - int b_waiters; - int b_generation; - } - - struct pthread_barrierattr_t - { - int pshared; - } -} - -// -// Spin (SPN) -// -/* -pthread_spinlock_t -*/ - -version( linux ) -{ - alias int pthread_spinlock_t; // volatile -} -else version( darwin ) -{ - struct pthread_spinlock_t; -} - -// -// Timer (TMR) -// -/* -clockid_t -timer_t -*/ - -// -// Trace (TRC) -// -/* -trace_attr_t -trace_event_id_t -trace_event_set_t -trace_id_t -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/uio.d --- a/tango/tango/stdc/posix/sys/uio.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.uio; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for ssize_t, size_t - -extern (C): - -// -// Required -// -/* -struct iovec -{ - void* iov_base; - size_t iov_len; -} - -ssize_t // from tango.stdc.posix.sys.types -size_t // from tango.stdc.posix.sys.types - -ssize_t readv(int, iovec*, int); -ssize_t writev(int, iovec*, int); -*/ - -version( linux ) -{ - struct iovec - { - void* iov_base; - size_t iov_len; - } - - ssize_t readv(int, iovec*, int); - ssize_t writev(int, iovec*, int); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/sys/wait.d --- a/tango/tango/stdc/posix/sys/wait.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.sys.wait; - -public import tango.stdc.posix.sys.types; // for id_t, pid_t -public import tango.stdc.posix.signal; // for siginfo_t (XSI) -//public import tango.stdc.posix.resource; // for rusage (XSI) - -extern (C): - -// -// Required -// -/* -WNOHANG -WUNTRACED - -WEXITSTATUS -WIFCONTINUED -WIFEXITED -WIFSIGNALED -WIFSTOPPED -WSTOPSIG -WTERMSIG - -pid_t wait(int*); -pid_t waitpid(pid_t, int*, int); -*/ - -version( linux ) -{ - const WNOHANG = 1; - const WUNTRACED = 2; - - private - { - const __W_CONTINUED = 0xFFFF; - - extern (D) int __WTERMSIG( int status ) { return status & 0x7F; } - } - - // - // NOTE: These macros assume __USE_BSD is not defined in the relevant - // C headers as the parameter definition there is different and - // much more complicated. - // - extern (D) int WEXITSTATUS( int status ) { return ( status & 0xFF00 ) >> 8; } - extern (D) int WIFCONTINUED( int status ) { return status == __W_CONTINUED; } - extern (D) bool WIFEXITED( int status ) { return __WTERMSIG( status ) == 0; } - extern (D) bool WIFSIGNALED( int status ) - { - return ( cast(byte) ( ( status & 0x7F ) + 1 ) >> 1 ) > 0; - } - extern (D) bool WIFSTOPPED( int status ) { return ( status & 0xFF ) == 0x7F; } - extern (D) int WSTOPSIG( int status ) { return WEXITSTATUS( status ); } - extern (D) int WTERMSIG( int status ) { return status & 0x7F; } -} -else version( darwin ) -{ - const WNOHANG = 1; - const WUNTRACED = 2; - - private - { - const _WSTOPPED = 0177; - } - - extern (D) int _WSTATUS(int status) { return (status & 0177); } - extern (D) int WEXITSTATUS( int status ) { return (status >> 8); } - extern (D) int WIFCONTINUED( int status ) { return status == 0x13; } - extern (D) bool WIFEXITED( int status ) { return _WSTATUS(status) == 0; } - extern (D) bool WIFSIGNALED( int status ) - { - return _WSTATUS( status ) != _WSTOPPED && _WSTATUS( status ) != 0; - } - extern (D) bool WIFSTOPPED( int status ) { return _WSTATUS( status ) == _WSTOPPED; } - extern (D) int WSTOPSIG( int status ) { return status >> 8; } - extern (D) int WTERMSIG( int status ) { return _WSTATUS( status ); } -} -else -{ - static assert( false ); -} - -pid_t wait(int*); -pid_t waitpid(pid_t, int*, int); - -// -// XOpen (XSI) -// -/* -WEXITED -WSTOPPED -WCONTINUED -WNOHANG -WNOWAIT - -enum idtype_t -{ - P_ALL, - P_PID, - P_PGID -} - -int waitid(idtype_t, id_t, siginfo_t*, int); -*/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/time.d --- a/tango/tango/stdc/posix/time.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,204 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.time; - -private import tango.stdc.posix.config; -public import tango.stdc.time; -public import tango.stdc.posix.sys.types; -public import tango.stdc.posix.signal; // for sigevent - -extern (C): - -// -// Required (defined in tango.stdc.time) -// -/* -char* asctime(tm*); -clock_t clock(); -char* ctime(time_t*); -double difftime(time_t, time_t); -tm* gmtime(time_t*); -tm* localtime(time_t*); -time_t mktime(tm*); -size_t strftime(char*, size_t, char*, tm*); -time_t time(time_t*); -*/ - -version( linux ) -{ - time_t timegm(tm*); // non-standard -} -else version( darwin ) -{ - time_t timegm(tm*); // non-standard -} - -// -// C Extension (CX) -// (defined in tango.stdc.time) -// -/* -char* tzname[]; -void tzset(); -*/ - -// -// Process CPU-Time Clocks (CPT) -// -/* -int clock_getcpuclockid(pid_t, clockid_t*); -*/ - -// -// Clock Selection (CS) -// -/* -int clock_nanosleep(clockid_t, int, timespec*, timespec*); -*/ - -// -// Monotonic Clock (MON) -// -/* -CLOCK_MONOTONIC -*/ - -// -// Timer (TMR) -// -/* -CLOCK_PROCESS_CPUTIME_ID (TMR|CPT) -CLOCK_THREAD_CPUTIME_ID (TMR|TCT) - -NOTE: timespec must be defined in tango.stdc.posix.signal to break - a circular import. - -struct timespec -{ - time_t tv_sec; - int tv_nsec; -} - -struct itimerspec -{ - timespec it_interval; - timespec it_value; -} - -CLOCK_REALTIME -TIMER_ABSTIME - -clockid_t -timer_t - -int clock_getres(clockid_t, timespec*); -int clock_gettime(clockid_t, timespec*); -int clock_settime(clockid_t, timespec*); -int nanosleep(timespec*, timespec*); -int timer_create(clockid_t, sigevent*, timer_t*); -int timer_delete(timer_t); -int timer_gettime(timer_t, itimerspec*); -int timer_getoverrun(timer_t); -int timer_settime(timer_t, int, itimerspec*, itimerspec*); -*/ - -version( linux ) -{ - const CLOCK_PROCESS_CPUTIME_ID = 2; // (TMR|CPT) - const CLOCK_THREAD_CPUTIME_ID = 3; // (TMR|TCT) - - // NOTE: See above for why this is commented out. - // - //struct timespec - //{ - // time_t tv_sec; - // c_long tv_nsec; - //} - - struct itimerspec - { - timespec it_interval; - timespec it_value; - } - - const CLOCK_REALTIME = 0; - const TIMER_ABSTIME = 0x01; - - alias int clockid_t; - alias int timer_t; - - int clock_getres(clockid_t, timespec*); - //int clock_gettime(clockid_t, timespec*); - //int clock_settime(clockid_t, timespec*); - int nanosleep(timespec*, timespec*); - int timer_create(clockid_t, sigevent*, timer_t*); - int timer_delete(timer_t); - int timer_gettime(timer_t, itimerspec*); - int timer_getoverrun(timer_t); - int timer_settime(timer_t, int, itimerspec*, itimerspec*); -} -else version( darwin ) -{ - int nanosleep(timespec*, timespec*); -} - - -// -// Thread-Safe Functions (TSF) -// -/* -char* asctime_r(tm*, char*); -char* ctime_r(time_t*, char*); -tm* gmtime_r(time_t*, tm*); -tm* localtime_r(time_t*, tm*); -*/ - -version( linux ) -{ - char* asctime_r(tm*, char*); - char* ctime_r(time_t*, char*); - tm* gmtime_r(time_t*, tm*); - tm* localtime_r(time_t*, tm*); -} -else version( darwin ) -{ - char* asctime_r(tm*, char*); - char* ctime_r(time_t*, char*); - tm* gmtime_r(time_t*, tm*); - tm* localtime_r(time_t*, tm*); -} - -// -// XOpen (XSI) -// -/* -getdate_err - -int daylight; -int timezone; - -tm* getdate(char*); -char* strptime(char*, char*, tm*); -*/ - -version( linux ) -{ - extern int daylight; - extern c_long timezone; - - tm* getdate(char*); - char* strptime(char*, char*, tm*); -} -else version( darwin ) -{ - extern c_long timezone; - - tm* getdate(char *); - char* strptime(char*, char*, tm*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/ucontext.d --- a/tango/tango/stdc/posix/ucontext.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.ucontext; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.signal; // for sigset_t, stack_t - -extern (C): - -// -// XOpen (XSI) -// -/* -mcontext_t - -struct ucontext_t -{ - ucontext_t* uc_link; - sigset_t uc_sigmask; - stack_t uc_stack; - mcontext_t uc_mcontext; -} -*/ - -version( linux ) -{ - - version( X86_64 ) - { - private - { - struct _libc_fpxreg - { - ushort[4] significand; - ushort exponent; - ushort[3] padding; - } - - struct _libc_xmmreg - { - uint[4] element; - } - - struct _libc_fpstate - { - ushort cwd; - ushort swd; - ushort ftw; - ushort fop; - ulong rip; - ulong rdp; - uint mxcsr; - uint mxcr_mask; - _libc_fpxreg[8] _st; - _libc_xmmreg[16] _xmm; - uint[24] padding; - } - - const NGREG = 23; - - alias c_long greg_t; - alias greg_t[NGREG] gregset_t; - alias _libc_fpstate* fpregset_t; - } - - struct mcontext_t - { - gregset_t gregs; - fpregset_t fpregs; - c_ulong[8] __reserved1; - } - } - else version( X86 ) - { - private - { - struct _libc_fpreg - { - ushort[4] significand; - ushort exponent; - } - - struct _libc_fpstate - { - c_ulong cw; - c_ulong sw; - c_ulong tag; - c_ulong ipoff; - c_ulong cssel; - c_ulong dataoff; - c_ulong datasel; - _libc_fpreg[8] _st; - c_ulong status; - } - - const NGREG = 19; - - alias int greg_t; - alias greg_t[NGREG] gregset_t; - alias _libc_fpstate* fpregset_t; - } - - struct mcontext_t - { - gregset_t gregs; - fpregset_t fpregs; - c_ulong oldmask; - c_ulong cr2; - } - - struct ucontext_t - { - c_ulong uc_flags; - ucontext_t* uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - sigset_t uc_sigmask; - _libc_fpstate __fpregs_mem; - } - } -} - -// -// Obsolescent (OB) -// -/* -int getcontext(ucontext_t*); -void makecontext(ucontext_t*, void function(), int, ...); -int setcontext(ucontext_t*); -int swapcontext(ucontext_t*, ucontext_t*); -*/ - -static if( is( typeof( ucontext_t ) ) ) -{ - int getcontext(ucontext_t*); - void makecontext(ucontext_t*, void function(), int, ...); - int setcontext(ucontext_t*); - int swapcontext(ucontext_t*, ucontext_t*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/unistd.d --- a/tango/tango/stdc/posix/unistd.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,503 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.unistd; - -private import tango.stdc.posix.config; -private import tango.stdc.stddef; -public import tango.stdc.posix.inttypes; // for intptr_t -public import tango.stdc.posix.sys.types; // for size_t, ssize_t, uid_t, gid_t, off_t, pid_t, useconds_t - -extern (C): - -const STDIN_FILENO = 0; -const STDOUT_FILENO = 1; -const STDERR_FILENO = 2; - -char* optarg; -int optind; -int opterr; -int optopt; - -int access(char*, int); -uint alarm(uint); -int chdir(char*); -int chown(char*, uid_t, gid_t); -int close(int); -size_t confstr(int, char*, size_t); -int dup(int); -int dup2(int, int); -int execl(char*, char*, ...); -int execle(char*, char*, ...); -int execlp(char*, char*, ...); -int execv(char*, char**); -int execve(char*, char**, char**); -int execvp(char*, char**); -void _exit(int); -int fchown(int, uid_t, gid_t); -pid_t fork(); -c_long fpathconf(int, int); -int ftruncate(int, off_t); -char* getcwd(char*, size_t); -gid_t getegid(); -uid_t geteuid(); -gid_t getgid(); -int getgroups(int, gid_t *); -int gethostname(char*, size_t); -char* getlogin(); -int getlogin_r(char*, size_t); -int getopt(int, char**, char*); -pid_t getpgrp(); -pid_t getpid(); -pid_t getppid(); -uid_t getuid(); -int isatty(int); -int link(char*, char*); -off_t lseek(int, off_t, int); -c_long pathconf(char*, int); -int pause(); -int pipe(int[2]); -ssize_t read(int, void*, size_t); -ssize_t readlink(char*, char*, size_t); -int rmdir(char*); -int setegid(gid_t); -int seteuid(uid_t); -int setgid(gid_t); -int setpgid(pid_t, pid_t); -pid_t setsid(); -int setuid(uid_t); -uint sleep(uint); -int symlink(char*, char*); -c_long sysconf(int); -pid_t tcgetpgrp(int); -int tcsetpgrp(int, pid_t); -char* ttyname(int); -int ttyname_r(int, char*, size_t); -int unlink(char*); -ssize_t write(int, void*, size_t); - -version( linux ) -{ - const F_OK = 0; - const R_OK = 4; - const W_OK = 2; - const X_OK = 1; - - const F_ULOCK = 0; - const F_LOCK = 1; - const F_TLOCK = 2; - const F_TEST = 3; - - enum - { - _CS_PATH, - - _CS_V6_WIDTH_RESTRICTED_ENVS, - - _CS_GNU_LIBC_VERSION, - _CS_GNU_LIBPTHREAD_VERSION, - - _CS_LFS_CFLAGS = 1000, - _CS_LFS_LDFLAGS, - _CS_LFS_LIBS, - _CS_LFS_LINTFLAGS, - _CS_LFS64_CFLAGS, - _CS_LFS64_LDFLAGS, - _CS_LFS64_LIBS, - _CS_LFS64_LINTFLAGS, - - _CS_XBS5_ILP32_OFF32_CFLAGS = 1100, - _CS_XBS5_ILP32_OFF32_LDFLAGS, - _CS_XBS5_ILP32_OFF32_LIBS, - _CS_XBS5_ILP32_OFF32_LINTFLAGS, - _CS_XBS5_ILP32_OFFBIG_CFLAGS, - _CS_XBS5_ILP32_OFFBIG_LDFLAGS, - _CS_XBS5_ILP32_OFFBIG_LIBS, - _CS_XBS5_ILP32_OFFBIG_LINTFLAGS, - _CS_XBS5_LP64_OFF64_CFLAGS, - _CS_XBS5_LP64_OFF64_LDFLAGS, - _CS_XBS5_LP64_OFF64_LIBS, - _CS_XBS5_LP64_OFF64_LINTFLAGS, - _CS_XBS5_LPBIG_OFFBIG_CFLAGS, - _CS_XBS5_LPBIG_OFFBIG_LDFLAGS, - _CS_XBS5_LPBIG_OFFBIG_LIBS, - _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS, - - _CS_POSIX_V6_ILP32_OFF32_CFLAGS, - _CS_POSIX_V6_ILP32_OFF32_LDFLAGS, - _CS_POSIX_V6_ILP32_OFF32_LIBS, - _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS, - _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS, - _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS, - _CS_POSIX_V6_ILP32_OFFBIG_LIBS, - _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS, - _CS_POSIX_V6_LP64_OFF64_CFLAGS, - _CS_POSIX_V6_LP64_OFF64_LDFLAGS, - _CS_POSIX_V6_LP64_OFF64_LIBS, - _CS_POSIX_V6_LP64_OFF64_LINTFLAGS, - _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS, - _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS, - _CS_POSIX_V6_LPBIG_OFFBIG_LIBS, - _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS - } - - enum - { - _PC_LINK_MAX, - _PC_MAX_CANON, - _PC_MAX_INPUT, - _PC_NAME_MAX, - _PC_PATH_MAX, - _PC_PIPE_BUF, - _PC_CHOWN_RESTRICTED, - _PC_NO_TRUNC, - _PC_VDISABLE, - _PC_SYNC_IO, - _PC_ASYNC_IO, - _PC_PRIO_IO, - _PC_SOCK_MAXBUF, - _PC_FILESIZEBITS, - _PC_REC_INCR_XFER_SIZE, - _PC_REC_MAX_XFER_SIZE, - _PC_REC_MIN_XFER_SIZE, - _PC_REC_XFER_ALIGN, - _PC_ALLOC_SIZE_MIN, - _PC_SYMLINK_MAX, - _PC_2_SYMLINKS - } - - enum - { - _SC_ARG_MAX, - _SC_CHILD_MAX, - _SC_CLK_TCK, - _SC_NGROUPS_MAX, - _SC_OPEN_MAX, - _SC_STREAM_MAX, - _SC_TZNAME_MAX, - _SC_JOB_CONTROL, - _SC_SAVED_IDS, - _SC_REALTIME_SIGNALS, - _SC_PRIORITY_SCHEDULING, - _SC_TIMERS, - _SC_ASYNCHRONOUS_IO, - _SC_PRIORITIZED_IO, - _SC_SYNCHRONIZED_IO, - _SC_FSYNC, - _SC_MAPPED_FILES, - _SC_MEMLOCK, - _SC_MEMLOCK_RANGE, - _SC_MEMORY_PROTECTION, - _SC_MESSAGE_PASSING, - _SC_SEMAPHORES, - _SC_SHARED_MEMORY_OBJECTS, - _SC_AIO_LISTIO_MAX, - _SC_AIO_MAX, - _SC_AIO_PRIO_DELTA_MAX, - _SC_DELAYTIMER_MAX, - _SC_MQ_OPEN_MAX, - _SC_MQ_PRIO_MAX, - _SC_VERSION, - _SC_PAGESIZE, - _SC_PAGE_SIZE = _SC_PAGESIZE, - _SC_RTSIG_MAX, - _SC_SEM_NSEMS_MAX, - _SC_SEM_VALUE_MAX, - _SC_SIGQUEUE_MAX, - _SC_TIMER_MAX, - - _SC_BC_BASE_MAX, - _SC_BC_DIM_MAX, - _SC_BC_SCALE_MAX, - _SC_BC_STRING_MAX, - _SC_COLL_WEIGHTS_MAX, - _SC_EQUIV_CLASS_MAX, - _SC_EXPR_NEST_MAX, - _SC_LINE_MAX, - _SC_RE_DUP_MAX, - _SC_CHARCLASS_NAME_MAX, - - _SC_2_VERSION, - _SC_2_C_BIND, - _SC_2_C_DEV, - _SC_2_FORT_DEV, - _SC_2_FORT_RUN, - _SC_2_SW_DEV, - _SC_2_LOCALEDEF, - - _SC_PII, - _SC_PII_XTI, - _SC_PII_SOCKET, - _SC_PII_INTERNET, - _SC_PII_OSI, - _SC_POLL, - _SC_SELECT, - _SC_UIO_MAXIOV, - _SC_IOV_MAX = _SC_UIO_MAXIOV, - _SC_PII_INTERNET_STREAM, - _SC_PII_INTERNET_DGRAM, - _SC_PII_OSI_COTS, - _SC_PII_OSI_CLTS, - _SC_PII_OSI_M, - _SC_T_IOV_MAX, - - _SC_THREADS, - _SC_THREAD_SAFE_FUNCTIONS, - _SC_GETGR_R_SIZE_MAX, - _SC_GETPW_R_SIZE_MAX, - _SC_LOGIN_NAME_MAX, - _SC_TTY_NAME_MAX, - _SC_THREAD_DESTRUCTOR_ITERATIONS, - _SC_THREAD_KEYS_MAX, - _SC_THREAD_STACK_MIN, - _SC_THREAD_THREADS_MAX, - _SC_THREAD_ATTR_STACKADDR, - _SC_THREAD_ATTR_STACKSIZE, - _SC_THREAD_PRIORITY_SCHEDULING, - _SC_THREAD_PRIO_INHERIT, - _SC_THREAD_PRIO_PROTECT, - _SC_THREAD_PROCESS_SHARED, - - _SC_NPROCESSORS_CONF, - _SC_NPROCESSORS_ONLN, - _SC_PHYS_PAGES, - _SC_AVPHYS_PAGES, - _SC_ATEXIT_MAX, - _SC_PASS_MAX, - - _SC_XOPEN_VERSION, - _SC_XOPEN_XCU_VERSION, - _SC_XOPEN_UNIX, - _SC_XOPEN_CRYPT, - _SC_XOPEN_ENH_I18N, - _SC_XOPEN_SHM, - - _SC_2_CHAR_TERM, - _SC_2_C_VERSION, - _SC_2_UPE, - - _SC_XOPEN_XPG2, - _SC_XOPEN_XPG3, - _SC_XOPEN_XPG4, - - _SC_CHAR_BIT, - _SC_CHAR_MAX, - _SC_CHAR_MIN, - _SC_INT_MAX, - _SC_INT_MIN, - _SC_LONG_BIT, - _SC_WORD_BIT, - _SC_MB_LEN_MAX, - _SC_NZERO, - _SC_SSIZE_MAX, - _SC_SCHAR_MAX, - _SC_SCHAR_MIN, - _SC_SHRT_MAX, - _SC_SHRT_MIN, - _SC_UCHAR_MAX, - _SC_UINT_MAX, - _SC_ULONG_MAX, - _SC_USHRT_MAX, - - _SC_NL_ARGMAX, - _SC_NL_LANGMAX, - _SC_NL_MSGMAX, - _SC_NL_NMAX, - _SC_NL_SETMAX, - _SC_NL_TEXTMAX, - - _SC_XBS5_ILP32_OFF32, - _SC_XBS5_ILP32_OFFBIG, - _SC_XBS5_LP64_OFF64, - _SC_XBS5_LPBIG_OFFBIG, - - _SC_XOPEN_LEGACY, - _SC_XOPEN_REALTIME, - _SC_XOPEN_REALTIME_THREADS, - - _SC_ADVISORY_INFO, - _SC_BARRIERS, - _SC_BASE, - _SC_C_LANG_SUPPORT, - _SC_C_LANG_SUPPORT_R, - _SC_CLOCK_SELECTION, - _SC_CPUTIME, - _SC_THREAD_CPUTIME, - _SC_DEVICE_IO, - _SC_DEVICE_SPECIFIC, - _SC_DEVICE_SPECIFIC_R, - _SC_FD_MGMT, - _SC_FIFO, - _SC_PIPE, - _SC_FILE_ATTRIBUTES, - _SC_FILE_LOCKING, - _SC_FILE_SYSTEM, - _SC_MONOTONIC_CLOCK, - _SC_MULTI_PROCESS, - _SC_SINGLE_PROCESS, - _SC_NETWORKING, - _SC_READER_WRITER_LOCKS, - _SC_SPIN_LOCKS, - _SC_REGEXP, - _SC_REGEX_VERSION, - _SC_SHELL, - _SC_SIGNALS, - _SC_SPAWN, - _SC_SPORADIC_SERVER, - _SC_THREAD_SPORADIC_SERVER, - _SC_SYSTEM_DATABASE, - _SC_SYSTEM_DATABASE_R, - _SC_TIMEOUTS, - _SC_TYPED_MEMORY_OBJECTS, - _SC_USER_GROUPS, - _SC_USER_GROUPS_R, - _SC_2_PBS, - _SC_2_PBS_ACCOUNTING, - _SC_2_PBS_LOCATE, - _SC_2_PBS_MESSAGE, - _SC_2_PBS_TRACK, - _SC_SYMLOOP_MAX, - _SC_STREAMS, - _SC_2_PBS_CHECKPOINT, - - _SC_V6_ILP32_OFF32, - _SC_V6_ILP32_OFFBIG, - _SC_V6_LP64_OFF64, - _SC_V6_LPBIG_OFFBIG, - - _SC_HOST_NAME_MAX, - _SC_TRACE, - _SC_TRACE_EVENT_FILTER, - _SC_TRACE_INHERIT, - _SC_TRACE_LOG, - - _SC_LEVEL1_ICACHE_SIZE, - _SC_LEVEL1_ICACHE_ASSOC, - _SC_LEVEL1_ICACHE_LINESIZE, - _SC_LEVEL1_DCACHE_SIZE, - _SC_LEVEL1_DCACHE_ASSOC, - _SC_LEVEL1_DCACHE_LINESIZE, - _SC_LEVEL2_CACHE_SIZE, - _SC_LEVEL2_CACHE_ASSOC, - _SC_LEVEL2_CACHE_LINESIZE, - _SC_LEVEL3_CACHE_SIZE, - _SC_LEVEL3_CACHE_ASSOC, - _SC_LEVEL3_CACHE_LINESIZE, - _SC_LEVEL4_CACHE_SIZE, - _SC_LEVEL4_CACHE_ASSOC, - _SC_LEVEL4_CACHE_LINESIZE, - - _SC_IPV6 = _SC_LEVEL1_ICACHE_SIZE + 50, - _SC_RAW_SOCKETS - } -} -else version( darwin ) -{ - const F_OK = 0; - const R_OK = 4; - const W_OK = 2; - const X_OK = 1; - - const F_ULOCK = 0; - const F_LOCK = 1; - const F_TLOCK = 2; - const F_TEST = 3; -} - -// -// File Synchronization (FSC) -// -/* -int fsync(int); -*/ - -// -// Synchronized I/O (SIO) -// -/* -int fdatasync(int); -*/ - -// -// XOpen (XSI) -// -/* -char* crypt(char*, char*); -char* ctermid(char*); -void encrypt(char[64], int); -int fchdir(int); -c_long gethostid(); -pid_t getpgid(pid_t); -pid_t getsid(pid_t); -char* getwd(char*); // LEGACY -int lchown(char*, uid_t, gid_t); -int lockf(int, int, off_t); -int nice(int); -ssize_t pread(int, void*, size_t, off_t); -ssize_t pwrite(int, void*, size_t, off_t); -pid_t setpgrp(); -int setregid(gid_t, gid_t); -int setreuid(uid_t, uid_t); -void swab(void*, void*, ssize_t); -void sync(); -int truncate(char*, off_t); -useconds_t ualarm(useconds_t, useconds_t); -int usleep(useconds_t); -pid_t vfork(); -*/ - -version( linux ) -{ - char* crypt(char*, char*); - char* ctermid(char*); - void encrypt(char[64], int); - int fchdir(int); - c_long gethostid(); - pid_t getpgid(pid_t); - pid_t getsid(pid_t); - char* getwd(char*); // LEGACY - int lchown(char*, uid_t, gid_t); - int lockf(int, int, off_t); - int nice(int); - ssize_t pread(int, void*, size_t, off_t); - ssize_t pwrite(int, void*, size_t, off_t); - pid_t setpgrp(); - int setregid(gid_t, gid_t); - int setreuid(uid_t, uid_t); - void swab(void*, void*, ssize_t); - void sync(); - int truncate(char*, off_t); - useconds_t ualarm(useconds_t, useconds_t); - int usleep(useconds_t); - pid_t vfork(); -} -else version (darwin) -{ - char* crypt(char*, char*); - char* ctermid(char*); - void encrypt(char[64], int); - int fchdir(int); - c_long gethostid(); - pid_t getpgid(pid_t); - pid_t getsid(pid_t); - char* getwd(char*); // LEGACY - int lchown(char*, uid_t, gid_t); - int lockf(int, int, off_t); - int nice(int); - ssize_t pread(int, void*, size_t, off_t); - ssize_t pwrite(int, void*, size_t, off_t); - pid_t setpgrp(); - int setregid(gid_t, gid_t); - int setreuid(uid_t, uid_t); - void swab(void*, void*, ssize_t); - void sync(); - int truncate(char*, off_t); - useconds_t ualarm(useconds_t, useconds_t); - int usleep(useconds_t); - pid_t vfork(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/posix/utime.d --- a/tango/tango/stdc/posix/utime.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/** - * D header file for POSIX. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition - */ -module tango.stdc.posix.utime; - -private import tango.stdc.posix.config; -public import tango.stdc.posix.sys.types; // for time_t - -extern (C): - -// -// Required -// -/* -struct utimbuf -{ - time_t actime; - time_t modtime; -} - -int utime(char*, utimbuf*); -*/ - -version( linux ) -{ - struct utimbuf - { - time_t actime; - time_t modtime; - } - - int utime(char*, utimbuf*); -} -else version( darwin ) -{ - struct utimbuf - { - time_t actime; - time_t modtime; - } - - int utime(char*, utimbuf*); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/signal.d --- a/tango/tango/stdc/signal.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.signal; - -extern (C): - -// this should be volatile -alias int sig_atomic_t; - -private alias void function(int) sigfn_t; - -version( Posix ) -{ - const SIG_ERR = cast(sigfn_t) -1; - const SIG_DFL = cast(sigfn_t) 0; - const SIG_IGN = cast(sigfn_t) 1; - - // standard C signals - const SIGABRT = 6; // Abnormal termination - const SIGFPE = 8; // Floating-point error - const SIGILL = 4; // Illegal hardware instruction - const SIGINT = 2; // Terminal interrupt character - const SIGSEGV = 11; // Invalid memory reference - const SIGTERM = 15; // Termination -} -else -{ - const SIG_ERR = cast(sigfn_t) -1; - const SIG_DFL = cast(sigfn_t) 0; - const SIG_IGN = cast(sigfn_t) 1; - - // standard C signals - const SIGABRT = 22; // Abnormal termination - const SIGFPE = 8; // Floating-point error - const SIGILL = 4; // Illegal hardware instruction - const SIGINT = 2; // Terminal interrupt character - const SIGSEGV = 11; // Invalid memory reference - const SIGTERM = 15; // Termination -} - -sigfn_t signal(int sig, sigfn_t func); -int raise(int sig); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stdarg.d --- a/tango/tango/stdc/stdarg.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,63 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Hauke Duden, Walter Bright - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.stdarg; - - -version( GNU ) -{ - public import std.c.stdarg; -} -else version( LLVMDC ) -{ - alias void* va_list; - - pragma(LLVM_internal, "va_start") - void va_start(T)(va_list ap, ref T); - - pragma(LLVM_internal, "va_arg") - T va_arg(T)(va_list ap); - - pragma(LLVM_internal, "va_intrinsic", "llvm.va_end") - void va_end(va_list args); - - pragma(LLVM_internal, "va_intrinsic", "llvm.va_copy") - void va_copy(va_list dst, va_list src); -} -else -{ - alias void* va_list; - - template va_start( T ) - { - void va_start( out va_list ap, inout T parmn ) - { - ap = cast(va_list) ( cast(void*) &parmn + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); - } - } - - template va_arg( T ) - { - T va_arg( inout va_list ap ) - { - T arg = *cast(T*) ap; - ap = cast(va_list) ( cast(void*) ap + ( ( T.sizeof + int.sizeof - 1 ) & ~( int.sizeof - 1 ) ) ); - return arg; - } - } - - void va_end( va_list ap ) - { - - } - - void va_copy( out va_list dest, va_list src ) - { - dest = src; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stddef.d --- a/tango/tango/stdc/stddef.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.stddef; - -extern (C): - -//alias typeof(int.sizeof) size_t; -//alias typeof(cast(void*)0 - cast(void*)0) ptrdiff_t; - -version( Win32 ) -{ - alias wchar wint_t; - alias wchar wchar_t; - alias wchar wctype_t; - alias wchar wctrans_t; - - const wchar WEOF = 0xFFFF; -} -else -{ - alias dchar wint_t; - alias dchar wchar_t; - alias dchar wctype_t; - alias dchar wctrans_t; - - const dchar WEOF = 0xFFFF; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stdint.d --- a/tango/tango/stdc/stdint.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,151 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.stdint; - -private -{ - template typify(T) - { - T typify( T val ) { return val; } - } -} - -extern (C): - -alias byte int8_t; -alias short int16_t; -alias int int32_t; -alias long int64_t; -//alias cent int128_t; - -alias ubyte uint8_t; -alias ushort uint16_t; -alias uint uint32_t; -alias ulong uint64_t; -//alias ucent uint128_t; - -alias byte int_least8_t; -alias short int_least16_t; -alias int int_least32_t; -alias long int_least64_t; - -alias ubyte uint_least8_t; -alias ushort uint_least16_t; -alias uint uint_least32_t; -alias ulong uint_least64_t; - -alias byte int_fast8_t; -alias int int_fast16_t; -alias int int_fast32_t; -alias long int_fast64_t; - -alias ubyte uint_fast8_t; -alias uint uint_fast16_t; -alias uint uint_fast32_t; -alias ulong uint_fast64_t; - -version( X86_64 ) -{ - alias long intptr_t; - alias ulong uintptr_t; -} -else -{ - alias int intptr_t; - alias uint uintptr_t; -} - -alias long intmax_t; -alias ulong uintmax_t; - -version( VerboseC ) -{ - private import tango.stdc.stddef; - private import tango.stdc.signal; // for sig_atomic_t - - const int8_t INT8_MIN = int8_t.min; - const int8_t INT8_MAX = int8_t.max; - const int16_t INT16_MIN = int16_t.min; - const int16_t INT16_MAX = int16_t.max; - const int32_t INT32_MIN = int32_t.min; - const int32_t INT32_MAX = int32_t.max; - const int64_t INT64_MIN = int64_t.min; - const int64_t INT64_MAX = int64_t.max; - - const uint8_t UINT8_MAX = uint8_t.max; - const uint16_t UINT16_MAX = uint16_t.max; - const uint32_t UINT32_MAX = uint32_t.max; - const uint64_t UINT64_MAX = uint64_t.max; - - const int_least8_t INT_LEAST8_MIN = int_least8_t.min; - const int_least8_t INT_LEAST8_MAX = int_least8_t.max; - const int_least16_t INT_LEAST16_MIN = int_least16_t.min; - const int_least16_t INT_LEAST16_MAX = int_least16_t.max; - const int_least32_t INT_LEAST32_MIN = int_least32_t.min; - const int_least32_t INT_LEAST32_MAX = int_least32_t.max; - const int_least64_t INT_LEAST64_MIN = int_least64_t.min; - const int_least64_t INT_LEAST64_MAX = int_least64_t.max; - - const uint_least8_t UINT_LEAST8_MAX = uint_least8_t.max; - const uint_least16_t UINT_LEAST16_MAX = uint_least16_t.max; - const uint_least32_t UINT_LEAST32_MAX = uint_least32_t.max; - const uint_least64_t UINT_LEAST64_MAX = uint_least64_t.max; - - const int_fast8_t INT_FAST8_MIN = int_fast8_t.min; - const int_fast8_t INT_FAST8_MAX = int_fast8_t.max; - const int_fast16_t INT_FAST16_MIN = int_fast16_t.min; - const int_fast16_t INT_FAST16_MAX = int_fast16_t.max; - const int_fast32_t INT_FAST32_MIN = int_fast32_t.min; - const int_fast32_t INT_FAST32_MAX = int_fast32_t.max; - const int_fast64_t INT_FAST64_MIN = int_fast64_t.min; - const int_fast64_t INT_FAST64_MAX = int_fast64_t.max; - - const uint_fast8_t UINT_FAST8_MAX = uint_fast8_t.max; - const uint_fast16_t UINT_FAST16_MAX = uint_fast16_t.max; - const uint_fast32_t UINT_FAST32_MAX = uint_fast32_t.max; - const uint_fast64_t UINT_FAST64_MAX = uint_fast64_t.max; - - const intptr_t INTPTR_MIN = intptr_t.min; - const intptr_t INTPTR_MAX = intptr_t.max; - - const uintptr_t UINTPTR_MIN = uintptr_t.min; - const uintptr_t UINTPTR_MAX = uintptr_t.max; - - const intmax_t INTMAX_MIN = intmax_t.min; - const intmax_t INTMAX_MAX = intmax_t.max; - - const uintmax_t UINTMAX_MAX = uintmax_t.max; - - const ptrdiff_t PTRDIFF_MIN = ptrdiff_t.min; - const ptrdiff_t PTRDIFF_MAX = ptrdiff_t.max; - - const sig_atomic_t SIG_ATOMIC_MIN = sig_atomic_t.min; - const sig_atomic_t SIG_ATOMIC_MAX = sig_atomic_t.max; - - const size_t SIZE_MAX = size_t.max; - - const wchar_t WCHAR_MIN = wchar_t.min; - const wchar_t WCHAR_MAX = wchar_t.max; - - const wint_t WINT_MIN = wint_t.min; - const wint_t WINT_MAX = wint_t.max; -} - -alias typify!(int8_t) INT8_C; -alias typify!(int16_t) INT16_C; -alias typify!(int32_t) INT32_C; -alias typify!(int64_t) INT64_C; - -alias typify!(uint8_t) UINT8_C; -alias typify!(uint16_t) UINT16_C; -alias typify!(uint32_t) UINT32_C; -alias typify!(uint64_t) UINT64_C; - -alias typify!(intmax_t) INTMAX_C; -alias typify!(uintmax_t) UINTMAX_C; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stdio.d --- a/tango/tango/stdc/stdio.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,360 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly, Walter Bright - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.stdio; - -private -{ - import tango.stdc.stdarg; - import tango.stdc.stddef; - import tango.stdc.config; -} - -extern (C): - -version( Win32 ) -{ - const int BUFSIZ = 0x4000; - const int EOF = -1; - const int FOPEN_MAX = 20; - const int FILENAME_MAX = 256; // 255 plus NULL - const int TMP_MAX = 32767; - const int _SYS_OPEN = 20; - const int SYS_OPEN = _SYS_OPEN; - - const int _NFILE = 60; - const char[] _P_tmpdir = "\\"; - const wchar[] _wP_tmpdir = "\\"; - const int L_tmpnam = _P_tmpdir.length + 12; -} -else version( linux ) -{ - //const int BUFSIZ = 0x4000; - const int EOF = -1; - const int FOPEN_MAX = 16; - const int FILENAME_MAX = 4095; - const int TMP_MAX = 238328; - const int L_tmpnam = 20; -} -else version( darwin ) -{ - const int EOF = -1; - const int FOPEN_MAX = 20; - const int FILENAME_MAX = 1024; - const int TMP_MAX = 308915776; - const int L_tmpnam = 1024; - - private - { - struct __sbuf - { - ubyte* _base; - int _size; - } - - struct __sFILEX - { - - } - } -} -else -{ - static assert( false ); -} - -enum -{ - SEEK_SET, - SEEK_CUR, - SEEK_END -} - -struct _iobuf -{ - align (1): - version( Win32 ) - { - char* _ptr; - int _cnt; - char* _base; - int _flag; - int _file; - int _charbuf; - int _bufsiz; - int __tmpnum; - } - else version( linux ) - { - char* _read_ptr; - char* _read_end; - char* _read_base; - char* _write_base; - char* _write_ptr; - char* _write_end; - char* _buf_base; - char* _buf_end; - char* _save_base; - char* _backup_base; - char* _save_end; - void* _markers; - _iobuf* _chain; - int _fileno; - int _blksize; - int _old_offset; - ushort _cur_column; - byte _vtable_offset; - char[1] _shortbuf; - void* _lock; - } - else version( darwin ) - { - ubyte* _p; - int _r; - int _w; - short _flags; - short _file; - __sbuf _bf; - int _lbfsize; - - int* function(void*) _close; - int* function(void*, char*, int) _read; - fpos_t* function(void*, fpos_t, int) _seek; - int* function(void*, char *, int) _write; - - __sbuf _ub; - __sFILEX* _extra; - int _ur; - - ubyte[3] _ubuf; - ubyte[1] _nbuf; - - __sbuf _lb; - - int _blksize; - fpos_t _offset; - } -} - -alias _iobuf FILE; - -enum -{ - _F_RDWR = 0x0003, - _F_READ = 0x0001, - _F_WRIT = 0x0002, - _F_BUF = 0x0004, - _F_LBUF = 0x0008, - _F_ERR = 0x0010, - _F_EOF = 0x0020, - _F_BIN = 0x0040, - _F_IN = 0x0080, - _F_OUT = 0x0100, - _F_TERM = 0x0200, -} - -version( Win32 ) -{ - enum - { - _IOFBF = 0, - _IOREAD = 1, - _IOWRT = 2, - _IONBF = 4, - _IOMYBUF = 8, - _IOEOF = 0x10, - _IOERR = 0x20, - _IOLBF = 0x40, - _IOSTRG = 0x40, - _IORW = 0x80, - _IOTRAN = 0x100, - _IOAPP = 0x200, - } - - extern void function() _fcloseallp; - - version (GNU) { - extern FILE[_NFILE]* _imp___iob; - - const FILE* stdin; - const FILE* stdout; - const FILE* stderr; - const FILE* stdaux; - const FILE* stdprn; - - static this() { - stdin = &(*_imp___iob)[0]; - stdout = &(*_imp___iob)[1]; - stderr = &(*_imp___iob)[2]; - stdaux = &(*_imp___iob)[3]; - stdprn = &(*_imp___iob)[4]; - } - } else { - extern FILE[_NFILE] _iob; - - const FILE* stdin = &_iob[0]; - const FILE* stdout = &_iob[1]; - const FILE* stderr = &_iob[2]; - const FILE* stdaux = &_iob[3]; - const FILE* stdprn = &_iob[4]; - } -} -else version( linux ) -{ - enum - { - _IOFBF = 0, - _IOLBF = 1, - _IONBF = 2, - } - - extern FILE* stdin; - extern FILE* stdout; - extern FILE* stderr; -} -else version( darwin ) -{ - extern FILE[3] __sF; - const FILE* stdin = &__sF[0]; - const FILE* stdout = &__sF[1]; - const FILE* stderr = &__sF[2]; -} -else -{ - static assert( false ); -} - -alias int fpos_t; - -int remove(char* filename); -int rename(char* from, char* to); - -FILE* tmpfile(); -char* tmpnam(char* s); - -int fclose(FILE* stream); -int fflush(FILE* stream); -FILE* fopen(char* filename, char* mode); -FILE* freopen(char* filename, char* mode, FILE* stream); - -void setbuf(FILE* stream, char* buf); -int setvbuf(FILE* stream, char* buf, int mode, size_t size); - -int fprintf(FILE* stream, char* format, ...); -int fscanf(FILE* stream, char* format, ...); -int sprintf(char* s, char* format, ...); -int sscanf(char* s, char* format, ...); -int vfprintf(FILE* stream, char* format, va_list arg); -int vfscanf(FILE* stream, char* format, va_list arg); -int vsprintf(char* s, char* format, va_list arg); -int vsscanf(char* s, char* format, va_list arg); -int vprintf(char* format, va_list arg); -int vscanf(char* format, va_list arg); -int printf(char* format, ...); -int scanf(char* format, ...); - -int fgetc(FILE* stream); -int fputc(int c, FILE* stream); - -char* fgets(char* s, int n, FILE* stream); -int fputs(char* s, FILE* stream); -char* gets(char* s); -int puts(char* s); - -extern (D) -{ - int getchar() { return getc(stdin); } - int putchar(int c) { return putc(c,stdout); } - int getc(FILE* stream) { return fgetc(stream); } - int putc(int c, FILE* stream) { return fputc(c,stream); } -} - -int ungetc(int c, FILE* stream); - -size_t fread(void* ptr, size_t size, size_t nmemb, FILE* stream); -size_t fwrite(void* ptr, size_t size, size_t nmemb, FILE* stream); - -int fgetpos(FILE* stream, fpos_t * pos); -int fsetpos(FILE* stream, fpos_t* pos); - -int fseek(FILE* stream, c_long offset, int whence); -c_long ftell(FILE* stream); - -version( Win32 ) -{ - extern (D) - { - void rewind(FILE* stream) { fseek(stream,0L,SEEK_SET); stream._flag&=~_IOERR; } - void clearerr(FILE* stream) { stream._flag &= ~(_IOERR|_IOEOF); } - int feof(FILE* stream) { return stream._flag&_IOEOF; } - int ferror(FILE* stream) { return stream._flag&_IOERR; } - } - int _snprintf(char*,size_t,char*,...); - alias _snprintf snprintf; - - int _vsnprintf(char* s, size_t n, char* format, va_list arg); - alias _vsnprintf vsnprintf; -} -else version( linux ) -{ - void rewind(FILE* stream); - void clearerr(FILE* stream); - int feof(FILE* stream); - int ferror(FILE* stream); - int fileno(FILE *); - - int snprintf(char* s, size_t n, char* format, ...); - int vsnprintf(char* s, size_t n, char* format, va_list arg); -} -else version( darwin ) -{ - void rewind(FILE*); - void clearerr(FILE*); - int feof(FILE*); - int ferror(FILE*); - int fileno(FILE*); - - int snprintf(char*, size_t, char*, ...); - int vsnprintf(char*, size_t, char*, va_list); -} -else -{ - static assert( false ); -} - -void perror(char* s); - -int fwprintf(FILE* stream, wchar_t* format, ...); -int fwscanf(FILE* stream, wchar_t* format, ...); -int swprintf(wchar_t* s, size_t n, wchar_t* format, ...); -int swscanf(wchar_t* s, wchar_t* format, ...); -int vfwprintf(FILE* stream, wchar_t* format, va_list arg); -int vfwscanf(FILE* stream, wchar_t* format, va_list arg); -int vswprintf(wchar_t* s, size_t n, wchar_t* format, va_list arg); -int vswscanf(wchar_t* s, wchar_t* format, va_list arg); -int vwprintf(wchar_t* format, va_list arg); -int vwscanf(wchar_t* format, va_list arg); -int wprintf(wchar_t* format, ...); -int wscanf(wchar_t* format, ...); - -wint_t fgetwc(FILE* stream); -wint_t fputwc(wchar_t c, FILE* stream); - -wchar_t* fgetws(wchar_t* s, int n, FILE* stream); -int fputws(wchar_t* s, FILE* stream); - -extern (D) -{ - wint_t getwchar() { return fgetwc(stdin); } - wint_t putwchar(wchar_t c) { return fputwc(c,stdout); } - wint_t getwc(FILE* stream) { return fgetwc(stream); } - wint_t putwc(wchar_t c, FILE* stream) { return fputwc(c, stream); } -} - -wint_t ungetwc(wint_t c, FILE* stream); -int fwide(FILE* stream, int mode); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stdlib.d --- a/tango/tango/stdc/stdlib.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.stdlib; - -private import tango.stdc.stddef; -private import tango.stdc.config; - -extern (C): - -struct div_t -{ - int quot, - rem; -} - -struct ldiv_t -{ - int quot, - rem; -} - -struct lldiv_t -{ - long quot, - rem; -} - -const EXIT_SUCCESS = 0; -const EXIT_FAILURE = 1; -const RAND_MAX = 32767; -const MB_CUR_MAX = 1; - -double atof(char* nptr); -int atoi(char* nptr); -c_long atol(char* nptr); -long atoll(char* nptr); - -double strtod(char* nptr, char** endptr); -float strtof(char* nptr, char** endptr); -real strtold(char* nptr, char** endptr); -c_long strtol(char* nptr, char** endptr, int base); -long strtoll(char* nptr, char** endptr, int base); -c_ulong strtoul(char* nptr, char** endptr, int base); -ulong strtoull(char* nptr, char** endptr, int base); - -double wcstod(wchar_t* nptr, wchar_t** endptr); -float wcstof(wchar_t* nptr, wchar_t** endptr); -real wcstold(wchar_t* nptr, wchar_t** endptr); -c_long wcstol(wchar_t* nptr, wchar_t** endptr, int base); -long wcstoll(wchar_t* nptr, wchar_t** endptr, int base); -c_ulong wcstoul(wchar_t* nptr, wchar_t** endptr, int base); -ulong wcstoull(wchar_t* nptr, wchar_t** endptr, int base); - -int rand(); -void srand(uint seed); - -void* malloc(size_t size); -void* calloc(size_t nmemb, size_t size); -void* realloc(void* ptr, size_t size); -void free(void* ptr); - -void abort(); -void exit(int status); -int atexit(void function() func); -void _Exit(int status); - -char* getenv(char* name); -int system(char* string); - -void* bsearch(void* key, void* base, size_t nmemb, size_t size, int function(void*, void*) compar); -void qsort(void* base, size_t nmemb, size_t size, int function(void*, void*) compar); - -int abs(int j); -c_long labs(c_long j); -long llabs(long j); - -div_t div(int numer, int denom); -ldiv_t ldiv(c_long numer, c_long denom); -lldiv_t lldiv(long numer, long denom); - -int mblen(char* s, size_t n); -int mbtowc(wchar_t* pwc, char* s, size_t n); -int wctomb(char*s, wchar_t wc); -size_t mbstowcs(wchar_t* pwcs, char* s, size_t n); -size_t wcstombs(char* s, wchar_t* pwcs, size_t n); - -version( DigitalMars ) -{ - void* alloca(size_t size); -} -else version( GNU ) -{ - private import gcc.builtins; - alias gcc.builtins.__builtin_alloca alloca; -} -else version( LLVMDC ) -{ - pragma(LLVM_internal, "alloca") - void* alloca(size_t size); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/string.d --- a/tango/tango/stdc/string.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.string; - -private import tango.stdc.stddef; - -extern (C): - -void* memchr(void* s, int c, size_t n); -int memcmp(void* s1, void* s2, size_t n); -void* memcpy(void* s1, void* s2, size_t n); -void* memmove(void* s1, void* s2, size_t n); -void* memset(void* s, int c, size_t n); - -char* strcpy(char* s1, char* s2); -char* strncpy(char* s1, char* s2, size_t n); -char* strcat(char* s1, char* s2); -char* strncat(char* s1, char* s2, size_t n); -int strcmp(char* s1, char* s2); -int strcoll(char* s1, char* s2); -int strncmp(char* s1, char* s2, size_t n); -size_t strxfrm(char* s1, char* s2, size_t n); -char* strchr(char* s, int c); -size_t strcspn(char* s1, char* s2); -char* strpbrk(char* s1, char* s2); -char* strrchr(char* s, int c); -size_t strspn(char* s1, char* s2); -char* strstr(char* s1, char* s2); -char* strtok(char* s1, char* s2); -char* strerror(int errnum); -size_t strlen(char* s); - -version( Posix ) -{ - char* strdup(char*); -} - -wchar_t* wmemchr(wchar_t* s, wchar_t c, size_t n); -int wmemcmp(wchar_t* s1, wchar_t* s2, size_t n); -wchar_t* wmemcpy(wchar_t* s1, wchar_t* s2, size_t n); -wchar_t* wmemmove(wchar_t*s1, wchar_t*s2, size_t n); -wchar_t* wmemset(wchar_t* s, wchar_t c, size_t n); - -wchar_t* wcscpy(wchar_t* s1, wchar_t* s2); -wchar_t* wcsncpy(wchar_t* s1, wchar_t* s2, size_t n); -wchar_t* wcscat(wchar_t* s1, wchar_t* s2); -wchar_t* wcsncat(wchar_t* s1, wchar_t* s2, size_t n); -int wcscmp(wchar_t*s1, wchar_t*s2); -int wcscoll(wchar_t*s1, wchar_t*s2); -int wcsncmp(wchar_t*s1, wchar_t*s2, size_t n); -size_t wcsxfrm(wchar_t* s1, wchar_t* s2, size_t n); -wchar_t* wcschr(wchar_t* s, wchar_t c); -size_t wcscspn(wchar_t*s1, wchar_t*s2); -wchar_t* wcspbrk(wchar_t*s1, wchar_t*s2); -wchar_t* wcsrchr(wchar_t* s, wchar_t c); -size_t wcsspn(wchar_t*s1, wchar_t*s2); -wchar_t* wcsstr(wchar_t*s1, wchar_t*s2); -wchar_t* wcstok(wchar_t* s1, wchar_t* s2, wchar_t** ptr); -size_t wcslen(wchar_t* s); - -alias int mbstate_t; - -wint_t btowc(int c); -int wctob(wint_t c); -int mbsinit(mbstate_t*ps); -size_t mbrlen(char* s, size_t n, mbstate_t* ps); -size_t mbrtowc(wchar_t* pwc, char* s, size_t n, mbstate_t* ps); -size_t wcrtomb(char* s, wchar_t wc, mbstate_t* ps); -size_t mbsrtowcs(wchar_t* dst, char** src, size_t len, mbstate_t* ps); -size_t wcsrtombs(char* dst, wchar_t** src, size_t len, mbstate_t* ps); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/stringz.d --- a/tango/tango/stdc/stringz.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,93 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Keinfarbton. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: October 2006 - - author: Keinfarbton - -*******************************************************************************/ - -module tango.stdc.stringz; - -/********************************* - * Convert array of chars s[] to a C-style 0 terminated string. - */ - -char* toStringz (char[] s) -{ - if (s.ptr) - if (! (s.length && s[$-1] is 0)) - s = s ~ '\0'; - return s.ptr; -} - -/********************************* - * Convert a C-style 0 terminated string to an array of char - */ - -char[] fromUtf8z (char* s) -{ - return s ? s[0 .. strlenz(s)] : null; -} - -/********************************* - * Convert array of wchars s[] to a C-style 0 terminated string. - */ - -wchar* toString16z (wchar[] s) -{ - if (s.ptr) - if (! (s.length && s[$-1] is 0)) - s = s ~ "\0"w; - return s.ptr; -} - -/********************************* - * Convert a C-style 0 terminated string to an array of wchar - */ - -wchar[] fromUtf16z (wchar* s) -{ - return s ? s[0 .. strlenz(s)] : null; -} - -/********************************* - * portable strlen - */ - -size_t strlenz(T) (T* s) -{ - size_t i; - - if (s) - while (*s++) - ++i; - return i; -} - - - -debug (UnitTest) -{ - import tango.stdc.stdio; - - unittest - { - debug(string) printf("stdc.stringz.unittest\n"); - - char* p = toStringz("foo"); - assert(strlenz(p) == 3); - char foo[] = "abbzxyzzy"; - p = toStringz(foo[3..5]); - assert(strlenz(p) == 2); - - char[] test = "\0"; - p = toStringz(test); - assert(*p == 0); - assert(p == test.ptr); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/tgmath.d --- a/tango/tango/stdc/tgmath.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,331 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly, Walter Bright - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.tgmath; - -private import tango.stdc.config; -private static import tango.stdc.math; -private static import tango.stdc.complex; - -extern (C): - -alias tango.stdc.math.acos acos; -alias tango.stdc.math.acosf acos; -alias tango.stdc.math.acosl acos; - -alias tango.stdc.complex.cacos acos; -alias tango.stdc.complex.cacosf acos; -alias tango.stdc.complex.cacosl acos; - -alias tango.stdc.math.asin asin; -alias tango.stdc.math.asinf asin; -alias tango.stdc.math.asinl asin; - -alias tango.stdc.complex.casin asin; -alias tango.stdc.complex.casinf asin; -alias tango.stdc.complex.casinl asin; - -alias tango.stdc.math.atan atan; -alias tango.stdc.math.atanf atan; -alias tango.stdc.math.atanl atan; - -alias tango.stdc.complex.catan atan; -alias tango.stdc.complex.catanf atan; -alias tango.stdc.complex.catanl atan; - -alias tango.stdc.math.atan2 atan2; -alias tango.stdc.math.atan2f atan2; -alias tango.stdc.math.atan2l atan2; - -alias tango.stdc.math.cos cos; -alias tango.stdc.math.cosf cos; -alias tango.stdc.math.cosl cos; - -alias tango.stdc.complex.ccos cos; -alias tango.stdc.complex.ccosf cos; -alias tango.stdc.complex.ccosl cos; - -alias tango.stdc.math.sin sin; -alias tango.stdc.math.sinf sin; -alias tango.stdc.math.sinl sin; - -alias tango.stdc.complex.csin csin; -alias tango.stdc.complex.csinf csin; -alias tango.stdc.complex.csinl csin; - -alias tango.stdc.math.tan tan; -alias tango.stdc.math.tanf tan; -alias tango.stdc.math.tanl tan; - -alias tango.stdc.complex.ctan tan; -alias tango.stdc.complex.ctanf tan; -alias tango.stdc.complex.ctanl tan; - -alias tango.stdc.math.acosh acosh; -alias tango.stdc.math.acoshf acosh; -alias tango.stdc.math.acoshl acosh; - -alias tango.stdc.complex.cacosh acosh; -alias tango.stdc.complex.cacoshf acosh; -alias tango.stdc.complex.cacoshl acosh; - -alias tango.stdc.math.asinh asinh; -alias tango.stdc.math.asinhf asinh; -alias tango.stdc.math.asinhl asinh; - -alias tango.stdc.complex.casinh asinh; -alias tango.stdc.complex.casinhf asinh; -alias tango.stdc.complex.casinhl asinh; - -alias tango.stdc.math.atanh atanh; -alias tango.stdc.math.atanhf atanh; -alias tango.stdc.math.atanhl atanh; - -alias tango.stdc.complex.catanh atanh; -alias tango.stdc.complex.catanhf atanh; -alias tango.stdc.complex.catanhl atanh; - -alias tango.stdc.math.cosh cosh; -alias tango.stdc.math.coshf cosh; -alias tango.stdc.math.coshl cosh; - -alias tango.stdc.complex.ccosh cosh; -alias tango.stdc.complex.ccoshf cosh; -alias tango.stdc.complex.ccoshl cosh; - -alias tango.stdc.math.sinh sinh; -alias tango.stdc.math.sinhf sinh; -alias tango.stdc.math.sinhl sinh; - -alias tango.stdc.complex.csinh sinh; -alias tango.stdc.complex.csinhf sinh; -alias tango.stdc.complex.csinhl sinh; - -alias tango.stdc.math.tanh tanh; -alias tango.stdc.math.tanhf tanh; -alias tango.stdc.math.tanhl tanh; - -alias tango.stdc.complex.ctanh tanh; -alias tango.stdc.complex.ctanhf tanh; -alias tango.stdc.complex.ctanhl tanh; - -alias tango.stdc.math.exp exp; -alias tango.stdc.math.expf exp; -alias tango.stdc.math.expl exp; - -alias tango.stdc.complex.cexp exp; -alias tango.stdc.complex.cexpf exp; -alias tango.stdc.complex.cexpl exp; - -alias tango.stdc.math.exp2 exp2; -alias tango.stdc.math.exp2f exp2; -alias tango.stdc.math.exp2l exp2; - -alias tango.stdc.math.expm1 expm1; -alias tango.stdc.math.expm1f expm1; -alias tango.stdc.math.expm1l expm1; - -alias tango.stdc.math.frexp frexp; -alias tango.stdc.math.frexpf frexp; -alias tango.stdc.math.frexpl frexp; - -alias tango.stdc.math.ilogb ilogb; -alias tango.stdc.math.ilogbf ilogb; -alias tango.stdc.math.ilogbl ilogb; - -alias tango.stdc.math.ldexp ldexp; -alias tango.stdc.math.ldexpf ldexp; -alias tango.stdc.math.ldexpl ldexp; - -alias tango.stdc.math.log log; -alias tango.stdc.math.logf log; -alias tango.stdc.math.logl log; - -alias tango.stdc.complex.clog log; -alias tango.stdc.complex.clogf log; -alias tango.stdc.complex.clogl log; - -alias tango.stdc.math.log10 log10; -alias tango.stdc.math.log10f log10; -alias tango.stdc.math.log10l log10; - -alias tango.stdc.math.log1p log1p; -alias tango.stdc.math.log1pf log1p; -alias tango.stdc.math.log1pl log1p; - -alias tango.stdc.math.log2 log1p; -alias tango.stdc.math.log2f log1p; -alias tango.stdc.math.log2l log1p; - -alias tango.stdc.math.logb log1p; -alias tango.stdc.math.logbf log1p; -alias tango.stdc.math.logbl log1p; - -alias tango.stdc.math.modf modf; -alias tango.stdc.math.modff modf; -alias tango.stdc.math.modfl modf; - -alias tango.stdc.math.scalbn scalbn; -alias tango.stdc.math.scalbnf scalbn; -alias tango.stdc.math.scalbnl scalbn; - -alias tango.stdc.math.scalbln scalbln; -alias tango.stdc.math.scalblnf scalbln; -alias tango.stdc.math.scalblnl scalbln; - -alias tango.stdc.math.cbrt cbrt; -alias tango.stdc.math.cbrtf cbrt; -alias tango.stdc.math.cbrtl cbrt; - -alias tango.stdc.math.fabs fabs; -alias tango.stdc.math.fabsf fabs; -alias tango.stdc.math.fabsl fabs; - -alias tango.stdc.complex.cabs fabs; -alias tango.stdc.complex.cabsf fabs; -alias tango.stdc.complex.cabsl fabs; - -alias tango.stdc.math.hypot hypot; -alias tango.stdc.math.hypotf hypot; -alias tango.stdc.math.hypotl hypot; - -alias tango.stdc.math.pow pow; -alias tango.stdc.math.powf pow; -alias tango.stdc.math.powl pow; - -alias tango.stdc.complex.cpow pow; -alias tango.stdc.complex.cpowf pow; -alias tango.stdc.complex.cpowl pow; - -alias tango.stdc.math.sqrt sqrt; -alias tango.stdc.math.sqrtf sqrt; -alias tango.stdc.math.sqrtl sqrt; - -alias tango.stdc.complex.csqrt sqrt; -alias tango.stdc.complex.csqrtf sqrt; -alias tango.stdc.complex.csqrtl sqrt; - -alias tango.stdc.math.erf erf; -alias tango.stdc.math.erff erf; -alias tango.stdc.math.erfl erf; - -alias tango.stdc.math.erfc erfc; -alias tango.stdc.math.erfcf erfc; -alias tango.stdc.math.erfcl erfc; - -alias tango.stdc.math.lgamma lgamma; -alias tango.stdc.math.lgammaf lgamma; -alias tango.stdc.math.lgammal lgamma; - -alias tango.stdc.math.tgamma tgamma; -alias tango.stdc.math.tgammaf tgamma; -alias tango.stdc.math.tgammal tgamma; - -alias tango.stdc.math.ceil ceil; -alias tango.stdc.math.ceilf ceil; -alias tango.stdc.math.ceill ceil; - -alias tango.stdc.math.floor floor; -alias tango.stdc.math.floorf floor; -alias tango.stdc.math.floorl floor; - -alias tango.stdc.math.nearbyint nearbyint; -alias tango.stdc.math.nearbyintf nearbyint; -alias tango.stdc.math.nearbyintl nearbyint; - -alias tango.stdc.math.rint rint; -alias tango.stdc.math.rintf rint; -alias tango.stdc.math.rintl rint; - -alias tango.stdc.math.lrint lrint; -alias tango.stdc.math.lrintf lrint; -alias tango.stdc.math.lrintl lrint; - -alias tango.stdc.math.llrint llrint; -alias tango.stdc.math.llrintf llrint; -alias tango.stdc.math.llrintl llrint; - -alias tango.stdc.math.round round; -alias tango.stdc.math.roundf round; -alias tango.stdc.math.roundl round; - -alias tango.stdc.math.lround lround; -alias tango.stdc.math.lroundf lround; -alias tango.stdc.math.lroundl lround; - -alias tango.stdc.math.llround llround; -alias tango.stdc.math.llroundf llround; -alias tango.stdc.math.llroundl llround; - -alias tango.stdc.math.trunc trunc; -alias tango.stdc.math.truncf trunc; -alias tango.stdc.math.truncl trunc; - -alias tango.stdc.math.fmod fmod; -alias tango.stdc.math.fmodf fmod; -alias tango.stdc.math.fmodl fmod; - -alias tango.stdc.math.remainder remainder; -alias tango.stdc.math.remainderf remainder; -alias tango.stdc.math.remainderl remainder; - -alias tango.stdc.math.remquo remquo; -alias tango.stdc.math.remquof remquo; -alias tango.stdc.math.remquol remquo; - -alias tango.stdc.math.copysign copysign; -alias tango.stdc.math.copysignf copysign; -alias tango.stdc.math.copysignl copysign; - -alias tango.stdc.math.nan nan; -alias tango.stdc.math.nanf nan; -alias tango.stdc.math.nanl nan; - -alias tango.stdc.math.nextafter nextafter; -alias tango.stdc.math.nextafterf nextafter; -alias tango.stdc.math.nextafterl nextafter; - -alias tango.stdc.math.nexttoward nexttoward; -alias tango.stdc.math.nexttowardf nexttoward; -alias tango.stdc.math.nexttowardl nexttoward; - -alias tango.stdc.math.fdim fdim; -alias tango.stdc.math.fdimf fdim; -alias tango.stdc.math.fdiml fdim; - -alias tango.stdc.math.fmax fmax; -alias tango.stdc.math.fmaxf fmax; -alias tango.stdc.math.fmaxl fmax; - -alias tango.stdc.math.fmin fmin; -alias tango.stdc.math.fmin fmin; -alias tango.stdc.math.fminl fmin; - -alias tango.stdc.math.fma fma; -alias tango.stdc.math.fmaf fma; -alias tango.stdc.math.fmal fma; - -alias tango.stdc.complex.carg carg; -alias tango.stdc.complex.cargf carg; -alias tango.stdc.complex.cargl carg; - -alias tango.stdc.complex.cimag cimag; -alias tango.stdc.complex.cimagf cimag; -alias tango.stdc.complex.cimagl cimag; - -alias tango.stdc.complex.conj conj; -alias tango.stdc.complex.conjf conj; -alias tango.stdc.complex.conjl conj; - -alias tango.stdc.complex.cproj cproj; -alias tango.stdc.complex.cprojf cproj; -alias tango.stdc.complex.cprojl cproj; - -//alias tango.stdc.complex.creal creal; -//alias tango.stdc.complex.crealf creal; -//alias tango.stdc.complex.creall creal; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/time.d --- a/tango/tango/stdc/time.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.time; - -private import tango.stdc.config; -private import tango.stdc.stddef; - -extern (C): - -version( Win32 ) -{ - struct tm - { - int tm_sec; // seconds after the minute - [0, 60] - int tm_min; // minutes after the hour - [0, 59] - int tm_hour; // hours since midnight - [0, 23] - int tm_mday; // day of the month - [1, 31] - int tm_mon; // months since January - [0, 11] - int tm_year; // years since 1900 - int tm_wday; // days since Sunday - [0, 6] - int tm_yday; // days since January 1 - [0, 365] - int tm_isdst; // Daylight Saving Time flag - } -} -else -{ - struct tm - { - int tm_sec; // seconds after the minute [0-60] - int tm_min; // minutes after the hour [0-59] - int tm_hour; // hours since midnight [0-23] - int tm_mday; // day of the month [1-31] - int tm_mon; // months since January [0-11] - int tm_year; // years since 1900 - int tm_wday; // days since Sunday [0-6] - int tm_yday; // days since January 1 [0-365] - int tm_isdst; // Daylight Savings Time flag - c_long tm_gmtoff; // offset from CUT in seconds - char* tm_zone; // timezone abbreviation - } -} - -alias int time_t; -alias int clock_t; - -version( Win32 ) -{ - clock_t CLOCKS_PER_SEC = 1000; -} -else version( darwin ) -{ - clock_t CLOCKS_PER_SEC = 100; -} -else -{ - clock_t CLOCKS_PER_SEC = 1000000; -} - -clock_t clock(); -double difftime(time_t time1, time_t time0); -time_t mktime(tm* timeptr); -time_t time(time_t* timer); -char* asctime(tm* timeptr); -char* ctime(time_t* timer); -tm* gmtime(time_t* timer); -tm* localtime(time_t* timer); -size_t strftime(char* s, size_t maxsize, char* format, tm* timeptr); -size_t wcsftime(wchar_t* s, size_t maxsize, wchar_t* format, tm* timeptr); - -version( Win32 ) -{ - void tzset(); - void _tzset(); - char* _strdate(char* s); - char* _strtime(char* s); - - wchar_t* _wasctime(tm*); - wchar_t* _wctime(time_t*); - wchar_t* _wstrdate(wchar_t*); - wchar_t* _wstrtime(wchar_t*); -} -else version( linux ) -{ - void tzset(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/stdc/wctype.d --- a/tango/tango/stdc/wctype.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -/** - * D header file for C99. - * - * Copyright: Public Domain - * License: Public Domain - * Authors: Sean Kelly - * Standards: ISO/IEC 9899:1999 (E) - */ -module tango.stdc.wctype; - -private import tango.stdc.stddef; - -extern (C): - -int iswalnum(wint_t wc); -int iswalpha(wint_t wc); -int iswblank(wint_t wc); -int iswcntrl(wint_t wc); -int iswdigit(wint_t wc); -int iswgraph(wint_t wc); -int iswlower(wint_t wc); -int iswprint(wint_t wc); -int iswpunct(wint_t wc); -int iswspace(wint_t wc); -int iswupper(wint_t wc); -int iswxdigit(wint_t wc); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/Common.d --- a/tango/tango/sys/Common.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: November 2005 - - author: Kris - -*******************************************************************************/ - -module tango.sys.Common; - -version (Win32) - { - public import tango.sys.win32.UserGdi; - } - -version (linux) - { - public import tango.sys.linux.linux; - alias tango.sys.linux.linux posix; - } - -version (darwin) - { - public import tango.sys.darwin.darwin; - alias tango.sys.darwin.darwin posix; - } - - -/******************************************************************************* - - Stuff for sysErrorMsg(), kindly provided by Regan Heath. - -*******************************************************************************/ - -version (Win32) - { - private const FORMAT_MESSAGE_ALLOCATE_BUFFER = 0x00000100; - private const FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200; - private const FORMAT_MESSAGE_FROM_STRING = 0x00000400; - private const FORMAT_MESSAGE_FROM_HMODULE = 0x00000800; - private const FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000; - private const FORMAT_MESSAGE_ARGUMENT_ARRAY = 0x00002000; - private const FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF; - - private DWORD MAKELANGID(WORD p, WORD s) { return (((cast(WORD)s) << 10) | cast(WORD)p); } - - private alias HGLOBAL HLOCAL; - - private const LANG_NEUTRAL = 0x00; - private const SUBLANG_DEFAULT = 0x01; - - private extern (Windows) - { - DWORD FormatMessageA (DWORD dwFlags, - LPCVOID lpSource, - DWORD dwMessageId, - DWORD dwLanguageId, - LPTSTR lpBuffer, - DWORD nSize, - LPCVOID args - ); - - HLOCAL LocalFree(HLOCAL hMem); - } - } -else -version (Posix) - { - private import tango.stdc.errno; - private import tango.stdc.string; - } -else - { - pragma (msg, "Unsupported environment; neither Win32 or Posix is declared"); - static assert(0); - } - - -/******************************************************************************* - -*******************************************************************************/ - -struct SysError -{ - /*********************************************************************** - - ***********************************************************************/ - - static uint lastCode () - { - version (Win32) - return GetLastError; - else - return errno; - } - - /*********************************************************************** - - ***********************************************************************/ - - static char[] lastMsg () - { - return lookup (lastCode); - } - - /*********************************************************************** - - ***********************************************************************/ - - static char[] lookup (uint errcode) - { - char[] text; - - version (Win32) - { - DWORD r; - LPVOID lpMsgBuf; - - r = FormatMessageA ( - FORMAT_MESSAGE_ALLOCATE_BUFFER | - FORMAT_MESSAGE_FROM_SYSTEM | - FORMAT_MESSAGE_IGNORE_INSERTS, - null, - errcode, - MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language - cast(LPTSTR)&lpMsgBuf, - 0, - null); - - /* Remove \r\n from error string */ - if (r >= 2) r-= 2; - text = (cast(char *)lpMsgBuf)[0..r].dup; - LocalFree(cast(HLOCAL)lpMsgBuf); - } - else - { - uint r; - char* pemsg; - - pemsg = strerror(errcode); - r = strlen(pemsg); - - /* Remove \r\n from error string */ - if (pemsg[r-1] == '\n') r--; - if (pemsg[r-1] == '\r') r--; - text = pemsg[0..r].dup; - } - - return text; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/Environment.d --- a/tango/tango/sys/Environment.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,310 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Tango. All rights reserved - - license: BSD style: $(LICENSE) - - version: Feb 2007: Initial release - - author: Deewiant, Maxter, Gregor, Kris - -*******************************************************************************/ - -module tango.sys.Environment; - -private import tango.sys.Common; - -private import tango.io.FilePath, - tango.io.FileConst, - tango.io.FileSystem; - -private import tango.core.Exception; - -private import Text = tango.text.Util; - -/******************************************************************************* - -*******************************************************************************/ - -version (Windows) -{ - private import tango.text.convert.Utf; - - pragma (lib, "kernel32.lib"); - - extern (Windows) - { - private void* GetEnvironmentStringsW(); - private bool FreeEnvironmentStringsW(wchar**); - } - extern (Windows) - { - private int SetEnvironmentVariableW(wchar*, wchar*); - private uint GetEnvironmentVariableW(wchar*, wchar*, uint); - private const int ERROR_ENVVAR_NOT_FOUND = 203; - } -} -else -{ - private extern (C) extern char** environ; - - import tango.stdc.posix.stdlib; - import tango.stdc.string; -} - - -/******************************************************************************* - - Exposes the system Environment settings, along with some handy - utilities - -*******************************************************************************/ - -struct Environment -{ - /*********************************************************************** - - Returns the full path location of the provided executable - file, rifling through the PATH as necessary. - - Returns null if the provided filename was not found - - ***********************************************************************/ - - static FilePath exePath (char[] file) - { - auto bin = new FilePath (file); - - // on Windows, this is a .exe - version (Windows) - if (bin.ext.length is 0) - bin.append (".exe"); - - // is this a directory? Potentially make it absolute - if (bin.isChild) - return FileSystem.toAbsolute (bin); - - // is it in cwd? - version (Windows) - if (bin.path(FileSystem.getDirectory).exists) - return bin; - - // rifle through the path - foreach (pe; Text.patterns (get("PATH"), FileConst.SystemPathString)) - if (bin.path(pe).exists) - version (Windows) - return bin; - else - { - stat_t stats; - stat(bin.cString.ptr, &stats); - if (stats.st_mode & 0100) - return bin; - } - return null; - } - - - version (Win32) - { - /************************************************************** - - Returns the provided 'def' value if the variable - does not exist - - **************************************************************/ - - static char[] get (char[] variable, char[] def = null) - { - wchar[] var = toString16(variable) ~ "\0"; - - uint size = GetEnvironmentVariableW(var.ptr, cast(wchar*)null, 0); - if (size is 0) - { - if (SysError.lastCode is ERROR_ENVVAR_NOT_FOUND) - return def; - else - throw new PlatformException (SysError.lastMsg); - } - - auto buffer = new wchar[size]; - size = GetEnvironmentVariableW(var.ptr, buffer.ptr, size); - if (size is 0) - throw new PlatformException (SysError.lastMsg); - - return toString (buffer[0 .. size]); - } - - /************************************************************** - - clears the variable if value is null or empty - - **************************************************************/ - - static void set (char[] variable, char[] value = null) - { - wchar * var, val; - - var = (toString16 (variable) ~ "\0").ptr; - - if (value.length > 0) - val = (toString16 (value) ~ "\0").ptr; - - if (! SetEnvironmentVariableW(var, val)) - throw new PlatformException (SysError.lastMsg); - } - - /************************************************************** - - **************************************************************/ - - static char[][char[]] get () - { - char[][char[]] arr; - - wchar[] key = new wchar[20], - value = new wchar[40]; - - wchar** env = cast(wchar**) GetEnvironmentStringsW(); - scope (exit) - FreeEnvironmentStringsW (env); - - for (wchar* str = cast(wchar*) env; *str; ++str) - { - size_t k = 0, v = 0; - - while (*str != '=') - { - key[k++] = *str++; - - if (k is key.length) - key.length = 2 * key.length; - } - - ++str; - - while (*str) - { - value [v++] = *str++; - - if (v is value.length) - value.length = 2 * value.length; - } - - arr [toString(key[0 .. k])] = toString(value[0 .. v]); - } - - return arr; - } - } - else // POSIX - { - /************************************************************** - - Returns the provided 'def' value if the variable - does not exist - - **************************************************************/ - - static char[] get (char[] variable, char[] def = null) - { - char* ptr = getenv (variable.ptr); - - if (ptr is null) - return def; - - return ptr[0 .. strlen(ptr)].dup; - } - - /************************************************************** - - clears the variable, if value is null or empty - - **************************************************************/ - - static void set (char[] variable, char[] value = null) - { - int result; - - if (value.length is 0) - unsetenv ((variable ~ '\0').ptr); - else - result = setenv ((variable ~ '\0').ptr, (value ~ '\0').ptr, 1); - - if (result != 0) - throw new PlatformException (SysError.lastMsg); - } - - /************************************************************** - - **************************************************************/ - - static char[][char[]] get () - { - char[][char[]] arr; - - for (char** p = environ; *p; ++p) - { - size_t k = 0; - char* str = *p; - - while (*str++ != '=') - ++k; - char[] key = (*p)[0..k]; - - k = 0; - char* val = str; - while (*str++) - ++k; - arr[key] = val[0 .. k]; - } - - return arr; - } - } -} - -debug (Environment) -{ - import tango.io.Console; - - - void main(char[][] args) - { - const char[] VAR = "TESTENVVAR"; - const char[] VAL1 = "VAL1"; - const char[] VAL2 = "VAL2"; - - assert(Environment.get(VAR) is null); - - Environment.set(VAR, VAL1); - assert(Environment.get(VAR) == VAL1); - - Environment.set(VAR, VAL2); - assert(Environment.get(VAR) == VAL2); - - Environment.set(VAR, null); - assert(Environment.get(VAR) is null); - - Environment.set(VAR, VAL1); - Environment.set(VAR, ""); - - assert(Environment.get(VAR) is null); - - foreach (key, value; Environment.get) - Cout (key) ("=") (value).newline; - - if (args.length > 0) - { - auto p = Environment.exePath (args[0]); - Cout (p).newline; - } - - if (args.length > 1) - { - if (auto p = Environment.exePath (args[1])) - Cout (p).newline; - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/Pipe.d --- a/tango/tango/sys/Pipe.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,224 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.sys.Pipe; - -private import tango.sys.Common; -private import tango.io.Buffer; -private import tango.io.DeviceConduit; - -private import tango.core.Exception; - -version (Posix) -{ - private import tango.stdc.posix.unistd; -} - -debug (PipeConduit) -{ - private import tango.io.Stdout; -} - - -/** - * Conduit for pipes. - * - * Each PipeConduit can only read or write, depending on the way it has been - * created. - */ -class PipeConduit: DeviceConduit -{ - version (OLD) - { - alias DeviceConduit.fileHandle fileHandle; - alias DeviceConduit.copy copy; - alias DeviceConduit.read read; - alias DeviceConduit.write write; - alias DeviceConduit.close close; - alias DeviceConduit.error error; - } - - static const uint DefaultBufferSize = 8 * 1024; - - private uint _bufferSize; - - - /** - * Create a PipeConduit with the provided handle and access permissions. - * - * Params: - * handle = handle of the operating system pipe we will wrap inside - * the PipeConduit. - * style = access flags for the pipe (readable, writable, etc.). - * bufferSize = buffer size. - */ - private this(ISelectable.Handle handle, - uint bufferSize = DefaultBufferSize) - { - version (Win32) - this.handle = cast(HANDLE) handle; - else - this.handle = handle; - _bufferSize = bufferSize; - } - - /** - * Destructor. - */ - public ~this() - { - close(); - } - - /** - * Returns the buffer size for the PipeConduit. - */ - public override uint bufferSize() - { - return _bufferSize; - } - - /** - * Returns the name of the device. - */ - public override char[] toString() - { - return ""; - } - - version (OLD) - { - /** - * Read a chunk of bytes from the file into the provided array - * (typically that belonging to an IBuffer) - */ - protected override uint read (void[] dst) - { - uint result; - DWORD read; - void *p = dst.ptr; - - if (!ReadFile (handle, p, dst.length, &read, null)) - { - if (SysError.lastCode() == ERROR_BROKEN_PIPE) - { - return Eof; - } - else - { - error(); - } - } - - if (read == 0 && dst.length > 0) - { - return Eof; - } - return read; - } - - /** - * Write a chunk of bytes to the file from the provided array - * (typically that belonging to an IBuffer). - */ - protected override uint write (void[] src) - { - DWORD written; - - if (!WriteFile (handle, src.ptr, src.length, &written, null)) - { - error(); - } - return written; - } - } -} - -/** - * Factory class for Pipes. - */ -class Pipe -{ - private PipeConduit _source; - private PipeConduit _sink; - - /** - * Create a Pipe. - */ - public this(uint bufferSize = PipeConduit.DefaultBufferSize) - { - version (Windows) - { - this(bufferSize, null); - } - else version (Posix) - { - int fd[2]; - - if (pipe(fd) == 0) - { - _source = new PipeConduit(cast(ISelectable.Handle) fd[0], bufferSize); - _sink = new PipeConduit(cast(ISelectable.Handle) fd[1], bufferSize); - } - else - { - error(); - } - } - else - { - assert(false, "Unknown platform"); - } - } - - version (Windows) - { - /** - * Helper constructor for pipes on Windows with non-null security - * attributes. - */ - package this(uint bufferSize, SECURITY_ATTRIBUTES *sa) - { - HANDLE sourceHandle; - HANDLE sinkHandle; - - if (CreatePipe(&sourceHandle, &sinkHandle, sa, cast(DWORD) bufferSize)) - { - _source = new PipeConduit(cast(ISelectable.Handle) sourceHandle); - _sink = new PipeConduit(cast(ISelectable.Handle) sinkHandle); - } - else - { - error(); - } - } - } - - /** - * Return the PipeConduit that you can write to. - */ - public PipeConduit sink() - { - return _sink; - } - - /** - * Return the PipeConduit that you can read from. - */ - public PipeConduit source() - { - return _source; - } - - /** - * - */ - private final void error () - { - throw new IOException("Pipe error: " ~ SysError.lastMsg); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/Process.d --- a/tango/tango/sys/Process.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1504 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2006 Juan Jose Comellas. All rights reserved - license: BSD style: $(LICENSE) - author: Juan Jose Comellas -*******************************************************************************/ - -module tango.sys.Process; - -private import tango.io.FileConst; -private import tango.io.Console; -private import tango.io.Buffer; -private import tango.sys.Common; -private import tango.sys.Pipe; -private import tango.core.Exception; -private import tango.text.Util; -private import Integer = tango.text.convert.Integer; - -private import tango.stdc.stdlib; -private import tango.stdc.string; -private import tango.stdc.stringz; - -version (Posix) -{ - private import tango.stdc.errno; - private import tango.stdc.posix.fcntl; - private import tango.stdc.posix.unistd; - private import tango.stdc.posix.sys.wait; -} - -debug (Process) -{ - private import tango.io.Stdout; -} - - -/** - * The Process class is used to start external programs and communicate with - * them via their standard input, output and error streams. - * - * You can pass either the command line or an array of arguments to execute, - * either in the constructor or to the args property. The environment - * variables can be set in a similar way using the env property and you can - * set the program's working directory via the workDir property. - * - * To actually start a process you need to use the execute() method. Once the - * program is running you will be able to write to its standard input via the - * stdin OutputStream and you will be able to read from its standard output and - * error through the stdout and stderr InputStream respectively. - * - * You can check whether the process is running or not with the isRunning() - * method and you can get its process ID via the pid property. - * - * After you are done with the process of if you just want to wait for it to - * end you need to call the wait() method, which will return once the process - * is no longer running. - * - * To stop a running process you must use kill() method. If you do this you - * cannot call the wait() method. Once the kill() method returns the process - * will be already dead. - * - * Examples: - * --- - * try - * { - * auto p = new Process ("ls -al", null); - * p.execute; - * - * Stdout.formatln ("Output from {}:", p.programName); - * Stdout.copy (p.stdout).flush; - * auto result = p.wait; - * - * Stdout.formatln ("Process '{}' ({}) exited with reason {}, status {}", - * p.programName, p.pid, cast(int) result.reason, result.status); - * } - * catch (ProcessException e) - * Stdout.formatln ("Process execution failed: {}", e); - * --- - */ -class Process -{ - /** - * Result returned by wait(). - */ - public struct Result - { - /** - * Reasons returned by wait() indicating why the process is no - * longer running. - */ - public enum - { - Exit, - Signal, - Stop, - Continue, - Error - } - - public int reason; - public int status; - - /** - * Returns a string with a description of the process execution result. - */ - public char[] toString() - { - char[] str; - - switch (reason) - { - case Exit: - str = format("Process exited normally with return code ", status); - break; - - case Signal: - str = format("Process was killed with signal ", status); - break; - - case Stop: - str = format("Process was stopped with signal ", status); - break; - - case Continue: - str = format("Process was resumed with signal ", status); - break; - - case Error: - str = format("Process failed with error code ", reason) ~ - " : " ~ SysError.lookup(status); - break; - - default: - str = format("Unknown process result ", reason); - break; - } - return str; - } - } - - static const uint DefaultStdinBufferSize = 512; - static const uint DefaultStdoutBufferSize = 8192; - static const uint DefaultStderrBufferSize = 512; - - private char[][] _args; - private char[][char[]] _env; - private char[] _workDir; - private PipeConduit _stdin; - private PipeConduit _stdout; - private PipeConduit _stderr; - private bool _running = false; - - version (Windows) - { - private PROCESS_INFORMATION *_info = null; - } - else - { - private pid_t _pid = cast(pid_t) -1; - } - - /** - * Constructor (variadic version). - * - * Params: - * args = array of strings with the process' arguments; the first - * argument must be the process' name; the arguments can be - * empty. - * - * Examples: - * --- - * auto p = new Process("myprogram", "first argument", "second", "third") - * --- - */ - public this(char[][] args ...) - { - _args = args; - } - - /** - * Constructor. - * - * Params: - * command = string with the process' command line; arguments that have - * embedded whitespace must be enclosed in inside double-quotes ("). - * env = associative array of strings with the process' environment - * variables; the variable name must be the key of each entry. - * - * Examples: - * --- - * char[] command = "myprogram \"first argument\" second third"; - * char[][char[]] env; - * - * // Environment variables - * env["MYVAR1"] = "first"; - * env["MYVAR2"] = "second"; - * - * auto p = new Process(command, env) - * --- - */ - public this(char[] command, char[][char[]] env) - in - { - assert(command.length > 0); - } - body - { - _args = splitArgs(command); - _env = env; - } - - /** - * Constructor. - * - * Params: - * args = array of strings with the process' arguments; the first - * argument must be the process' name; the arguments can be - * empty. - * env = associative array of strings with the process' environment - * variables; the variable name must be the key of each entry. - * - * Examples: - * --- - * char[][] args; - * char[][char[]] env; - * - * // Process name - * args ~= "myprogram"; - * // Process arguments - * args ~= "first argument"; - * args ~= "second"; - * args ~= "third"; - * - * // Environment variables - * env["MYVAR1"] = "first"; - * env["MYVAR2"] = "second"; - * - * auto p = new Process(args, env) - * --- - */ - public this(char[][] args, char[][char[]] env) - in - { - assert(args.length > 0); - assert(args[0].length > 0); - } - body - { - _args = args; - _env = env; - } - - /** - * Indicate whether the process is running or not. - */ - public bool isRunning() - { - return _running; - } - - /** - * Return the running process' ID. - * - * Returns: an int with the process ID if the process is running; - * -1 if not. - */ - public int pid() - { - version (Windows) - { - return (_info !is null ? cast(int) _info.dwProcessId : -1); - } - else // version (Posix) - { - return cast(int) _pid; - } - } - - /** - * Return the process' executable filename. - */ - public char[] programName() - { - return (_args !is null ? _args[0] : null); - } - - /** - * Set the process' executable filename. - */ - public void programName(char[] name) - { - if (_args.length == 0) - { - _args.length = 1; - } - _args[0] = name; - } - - /** - * Return an array with the process' arguments. - */ - public char[][] args() - { - return _args; - } - - /** - * Set the process' arguments from the arguments received by the method. - * - * Remarks: - * The first element of the array must be the name of the process' - * executable. - * - * Examples: - * --- - * p.args("myprogram", "first", "second argument", "third"); - * --- - */ - public void args(char[][] args ...) - { - _args = args; - } - - /** - * Return an associative array with the process' environment variables. - */ - public char[][char[]] env() - { - return _env; - } - - /** - * Set the process' environment variables from the associative array - * received by the method. - * - * Params: - * env = associative array of strings containing the environment - * variables for the process. The variable name should be the key - * used for each entry. - * - * Examples: - * --- - * char[][char[]] env; - * - * env["MYVAR1"] = "first"; - * env["MYVAR2"] = "second"; - * - * p.env = env; - * --- - */ - public void env(char[][char[]] env) - { - _env = env; - } - - /** - * Return an UTF-8 string with the process' command line. - */ - public char[] toString() - { - char[] command; - - for (uint i = 0; i < _args.length; ++i) - { - if (i > 0) - { - command ~= ' '; - } - if (contains(_args[i], ' ') || _args[i].length == 0) - { - command ~= '"'; - command ~= _args[i]; - command ~= '"'; - } - else - { - command ~= _args[i]; - } - } - return command; - } - - /** - * Return the working directory for the process. - * - * Returns: a string with the working directory; null if the working - * directory is the current directory. - */ - public char[] workDir() - { - return _workDir; - } - - /** - * Set the working directory for the process. - * - * Params: - * dir = a string with the working directory; null if the working - * directory is the current directory. - */ - public void workDir(char[] dir) - { - _workDir = dir; - } - - /** - * Return the running process' standard input pipe. - * - * Returns: a write-only PipeConduit connected to the child - * process' stdin. - * - * Remarks: - * The stream will be null if no child process has been executed. - */ - public PipeConduit stdin() - { - return _stdin; - } - - /** - * Return the running process' standard output pipe. - * - * Returns: a read-only PipeConduit connected to the child - * process' stdout. - * - * Remarks: - * The stream will be null if no child process has been executed. - */ - public PipeConduit stdout() - { - return _stdout; - } - - /** - * Return the running process' standard error pipe. - * - * Returns: a read-only PipeConduit connected to the child - * process' stderr. - * - * Remarks: - * The stream will be null if no child process has been executed. - */ - public PipeConduit stderr() - { - return _stderr; - } - - /** - * Execute a process using the arguments as parameters to this method. - * - * Once the process is executed successfully, its input and output can be - * manipulated through the stdin, stdout and - * stderr member PipeConduit's. - * - * Throws: - * ProcessCreateException if the process could not be created - * successfully; ProcessForkException if the call to the fork() - * system call failed (on POSIX-compatible platforms). - * - * Remarks: - * The process must not be running and the provided list of arguments must - * not be empty. If there was any argument already present in the args - * member, they will be replaced by the arguments supplied to the method. - */ - public void execute(char[][] args ...) - in - { - assert(!_running); - } - body - { - if (args.length > 0 && args[0] !is null) - { - _args = args; - } - executeInternal(); - } - - /** - * Execute a process using the command line arguments as parameters to - * this method. - * - * Once the process is executed successfully, its input and output can be - * manipulated through the stdin, stdout and - * stderr member PipeConduit's. - * - * Params: - * command = string with the process' command line; arguments that have - * embedded whitespace must be enclosed in inside double-quotes ("). - * env = associative array of strings with the process' environment - * variables; the variable name must be the key of each entry. - * - * Throws: - * ProcessCreateException if the process could not be created - * successfully; ProcessForkException if the call to the fork() - * system call failed (on POSIX-compatible platforms). - * - * Remarks: - * The process must not be running and the provided list of arguments must - * not be empty. If there was any argument already present in the args - * member, they will be replaced by the arguments supplied to the method. - */ - public void execute(char[] command, char[][char[]] env) - in - { - assert(!_running); - assert(command.length > 0); - } - body - { - _args = splitArgs(command); - _env = env; - - executeInternal(); - } - - /** - * Execute a process using the command line arguments as parameters to - * this method. - * - * Once the process is executed successfully, its input and output can be - * manipulated through the stdin, stdout and - * stderr member PipeConduit's. - * - * Params: - * args = array of strings with the process' arguments; the first - * argument must be the process' name; the arguments can be - * empty. - * env = associative array of strings with the process' environment - * variables; the variable name must be the key of each entry. - * - * Throws: - * ProcessCreateException if the process could not be created - * successfully; ProcessForkException if the call to the fork() - * system call failed (on POSIX-compatible platforms). - * - * Remarks: - * The process must not be running and the provided list of arguments must - * not be empty. If there was any argument already present in the args - * member, they will be replaced by the arguments supplied to the method. - * - * Examples: - * --- - * auto p = new Process(); - * char[][] args; - * - * args ~= "ls"; - * args ~= "-l"; - * - * p.execute(args, null); - * --- - */ - public void execute(char[][] args, char[][char[]] env) - in - { - assert(!_running); - assert(args.length > 0); - } - body - { - _args = args; - _env = env; - - executeInternal(); - } - - /** - * Execute a process using the arguments that were supplied to the - * constructor or to the args property. - * - * Once the process is executed successfully, its input and output can be - * manipulated through the stdin, stdout and - * stderr member PipeConduit's. - * - * Throws: - * ProcessCreateException if the process could not be created - * successfully; ProcessForkException if the call to the fork() - * system call failed (on POSIX-compatible platforms). - * - * Remarks: - * The process must not be running and the list of arguments must - * not be empty before calling this method. - */ - protected void executeInternal() - in - { - assert(!_running); - assert(_args.length > 0 && _args[0] !is null); - } - body - { - version (Windows) - { - SECURITY_ATTRIBUTES sa; - STARTUPINFO startup; - - // We close and delete the pipes that could have been left open - // from a previous execution. - cleanPipes(); - - // Set up the security attributes struct. - sa.nLength = SECURITY_ATTRIBUTES.sizeof; - sa.lpSecurityDescriptor = null; - sa.bInheritHandle = true; - - // Set up members of the STARTUPINFO structure. - memset(&startup, '\0', STARTUPINFO.sizeof); - startup.cb = STARTUPINFO.sizeof; - startup.dwFlags |= STARTF_USESTDHANDLES; - - // Create the pipes used to communicate with the child process. - Pipe pin = new Pipe(DefaultStdinBufferSize, &sa); - // Replace stdin with the "read" pipe - _stdin = pin.sink; - startup.hStdInput = cast(HANDLE) pin.source.fileHandle(); - // Ensure the write handle to the pipe for STDIN is not inherited. - SetHandleInformation(cast(HANDLE) pin.sink.fileHandle(), HANDLE_FLAG_INHERIT, 0); - scope(exit) - pin.source.close(); - - Pipe pout = new Pipe(DefaultStdoutBufferSize, &sa); - // Replace stdout with the "write" pipe - _stdout = pout.source; - startup.hStdOutput = cast(HANDLE) pout.sink.fileHandle(); - // Ensure the read handle to the pipe for STDOUT is not inherited. - SetHandleInformation(cast(HANDLE) pout.source.fileHandle(), HANDLE_FLAG_INHERIT, 0); - scope(exit) - pout.sink.close(); - - Pipe perr = new Pipe(DefaultStderrBufferSize, &sa); - // Replace stderr with the "write" pipe - _stderr = perr.source; - startup.hStdError = cast(HANDLE) perr.sink.fileHandle(); - // Ensure the read handle to the pipe for STDOUT is not inherited. - SetHandleInformation(cast(HANDLE) perr.source.fileHandle(), HANDLE_FLAG_INHERIT, 0); - scope(exit) - perr.sink.close(); - - _info = new PROCESS_INFORMATION; - // Set up members of the PROCESS_INFORMATION structure. - memset(_info, '\0', PROCESS_INFORMATION.sizeof); - - char[] command = toString(); - command ~= '\0'; - - // Convert the working directory to a null-ended string if - // necessary. - if (CreateProcessA(null, command.ptr, null, null, true, - DETACHED_PROCESS, - (_env.length > 0 ? toNullEndedBuffer(_env).ptr : null), - toStringz(_workDir), &startup, _info)) - { - CloseHandle(_info.hThread); - _running = true; - } - else - { - throw new ProcessCreateException(_args[0], __FILE__, __LINE__); - } - } - else version (Posix) - { - // We close and delete the pipes that could have been left open - // from a previous execution. - cleanPipes(); - - Pipe pin = new Pipe(DefaultStdinBufferSize); - Pipe pout = new Pipe(DefaultStdoutBufferSize); - Pipe perr = new Pipe(DefaultStderrBufferSize); - // This pipe is used to propagate the result of the call to - // execv*() from the child process to the parent process. - Pipe pexec = new Pipe(8); - int status = 0; - - _pid = fork(); - if (_pid >= 0) - { - if (_pid != 0) - { - // Parent process - _stdin = pin.sink; - pin.source.close(); - - _stdout = pout.source; - pout.sink.close(); - - _stderr = perr.source; - perr.sink.close(); - - pexec.sink.close(); - scope(exit) - pexec.source.close(); - - try - { - pexec.source.input.read((cast(byte*) &status)[0 .. status.sizeof]); - } - catch (Exception e) - { - // Everything's OK, the pipe was closed after the call to execv*() - } - - if (status == 0) - { - _running = true; - } - else - { - // We set errno to the value that was sent through - // the pipe from the child process - errno = status; - _running = false; - - throw new ProcessCreateException(_args[0], __FILE__, __LINE__); - } - } - else - { - // Child process - int rc; - char*[] argptr; - char*[] envptr; - - // Replace stdin with the "read" pipe - dup2(pin.source.fileHandle(), STDIN_FILENO); - pin.sink().close(); - scope(exit) - pin.source.close(); - - // Replace stdout with the "write" pipe - dup2(pout.sink.fileHandle(), STDOUT_FILENO); - pout.source.close(); - scope(exit) - pout.sink.close(); - - // Replace stderr with the "write" pipe - dup2(perr.sink.fileHandle(), STDERR_FILENO); - perr.source.close(); - scope(exit) - perr.sink.close(); - - // We close the unneeded part of the execv*() notification pipe - pexec.source.close(); - scope(exit) - pexec.sink.close(); - // Set the "write" pipe so that it closes upon a successful - // call to execv*() - if (fcntl(cast(int) pexec.sink.fileHandle(), F_SETFD, FD_CLOEXEC) == 0) - { - // Convert the arguments and the environment variables to - // the format expected by the execv() family of functions. - argptr = toNullEndedArray(_args); - envptr = (_env.length > 0 ? toNullEndedArray(_env) : null); - - // Switch to the working directory if it has been set. - if (_workDir.length > 0) - { - chdir(toStringz(_workDir)); - } - - // Replace the child fork with a new process. We always use the - // system PATH to look for executables that don't specify - // directories in their names. - rc = execvpe(_args[0], argptr, envptr); - if (rc == -1) - { - Cerr("Failed to exec ")(_args[0])(": ")(SysError.lastMsg).newline; - - try - { - status = errno; - - // Propagate the child process' errno value to - // the parent process. - pexec.sink.output.write((cast(byte*) &status)[0 .. status.sizeof]); - } - catch (Exception e) - { - } - exit(errno); - } - } - else - { - Cerr("Failed to set notification pipe to close-on-exec for ") - (_args[0])(": ")(SysError.lastMsg).newline; - exit(errno); - } - } - } - else - { - throw new ProcessForkException(_pid, __FILE__, __LINE__); - } - } - else - { - assert(false, "tango.sys.Process: Unsupported platform"); - } - } - - - /** - * Unconditionally wait for a process to end and return the reason and - * status code why the process ended. - * - * Returns: - * The return value is a Result struct, which has two members: - * reason and status. The reason can take the - * following values: - * - * Process.Result.Exit: the child process exited normally; - * status has the process' return - * code. - * - * Process.Result.Signal: the child process was killed by a signal; - * status has the signal number - * that killed the process. - * - * Process.Result.Stop: the process was stopped; status - * has the signal number that was used to stop - * the process. - * - * Process.Result.Continue: the process had been previously stopped - * and has now been restarted; - * status has the signal number - * that was used to continue the process. - * - * Process.Result.Error: We could not properly wait on the child - * process; status has the - * errno value if the process was - * running and -1 if not. - * - * Remarks: - * You can only call wait() on a running process once. The Signal, Stop - * and Continue reasons will only be returned on POSIX-compatible - * platforms. - */ - public Result wait() - { - version (Windows) - { - Result result; - - if (_running) - { - DWORD rc; - DWORD exitCode; - - assert(_info !is null); - - // We clean up the process related data and set the _running - // flag to false once we're done waiting for the process to - // finish. - // - // IMPORTANT: we don't delete the open pipes so that the parent - // process can get whatever the child process left on - // these pipes before dying. - scope(exit) - { - CloseHandle(_info.hProcess); - _running = false; - } - - rc = WaitForSingleObject(_info.hProcess, INFINITE); - if (rc == WAIT_OBJECT_0) - { - GetExitCodeProcess(_info.hProcess, &exitCode); - - result.reason = Result.Exit; - result.status = cast(typeof(result.status)) exitCode; - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) returned with code {2}\n", - _args[0], _pid, result.status); - } - else if (rc == WAIT_FAILED) - { - result.reason = Result.Error; - result.status = cast(short) GetLastError(); - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) failed " - "with unknown exit status {2}\n", - _args[0], _pid, result.status); - } - } - else - { - result.reason = Result.Error; - result.status = -1; - - debug (Process) - Stdout.formatln("Child process '{0}' is not running", _args[0]); - } - return result; - } - else version (Posix) - { - Result result; - - if (_running) - { - int rc; - - // We clean up the process related data and set the _running - // flag to false once we're done waiting for the process to - // finish. - // - // IMPORTANT: we don't delete the open pipes so that the parent - // process can get whatever the child process left on - // these pipes before dying. - scope(exit) - { - _running = false; - } - - // Wait for child process to end. - if (waitpid(_pid, &rc, 0) != -1) - { - if (WIFEXITED(rc)) - { - result.reason = Result.Exit; - result.status = WEXITSTATUS(rc); - if (result.status != 0) - { - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) returned with code {2}\n", - _args[0], _pid, result.status); - } - } - else - { - if (WIFSIGNALED(rc)) - { - result.reason = Result.Signal; - result.status = WTERMSIG(rc); - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) was killed prematurely " - "with signal {2}", - _args[0], _pid, result.status); - } - else if (WIFSTOPPED(rc)) - { - result.reason = Result.Stop; - result.status = WSTOPSIG(rc); - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) was stopped " - "with signal {2}", - _args[0], _pid, result.status); - } - else if (WIFCONTINUED(rc)) - { - result.reason = Result.Stop; - result.status = WSTOPSIG(rc); - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) was continued " - "with signal {2}", - _args[0], _pid, result.status); - } - else - { - result.reason = Result.Error; - result.status = rc; - - debug (Process) - Stdout.formatln("Child process '{0}' ({1}) failed " - "with unknown exit status {2}\n", - _args[0], _pid, result.status); - } - } - } - else - { - result.reason = Result.Error; - result.status = errno; - - debug (Process) - Stdout.formatln("Could not wait on child process '{0}' ({1}): ({2}) {3}", - _args[0], _pid, result.status, SysError.lastMsg); - } - } - else - { - result.reason = Result.Error; - result.status = -1; - - debug (Process) - Stdout.formatln("Child process '{0}' is not running", _args[0]); - } - return result; - } - else - { - assert(false, "tango.sys.Process: Unsupported platform"); - } - } - - /** - * Kill a running process. This method will not return until the process - * has been killed. - * - * Throws: - * ProcessKillException if the process could not be killed; - * ProcessWaitException if we could not wait on the process after - * killing it. - * - * Remarks: - * After calling this method you will not be able to call wait() on the - * process. - */ - public void kill() - { - version (Windows) - { - if (_running) - { - assert(_info !is null); - - if (TerminateProcess(_info.hProcess, cast(UINT) -1)) - { - assert(_info !is null); - - // We clean up the process related data and set the _running - // flag to false once we're done waiting for the process to - // finish. - // - // IMPORTANT: we don't delete the open pipes so that the parent - // process can get whatever the child process left on - // these pipes before dying. - scope(exit) - { - CloseHandle(_info.hProcess); - _running = false; - } - - // FIXME: We should probably use a timeout here - if (WaitForSingleObject(_info.hProcess, INFINITE) == WAIT_FAILED) - { - throw new ProcessWaitException(cast(int) _info.dwProcessId, - __FILE__, __LINE__); - } - } - else - { - throw new ProcessKillException(cast(int) _info.dwProcessId, - __FILE__, __LINE__); - } - } - else - { - debug (Process) - Stdout.print("Tried to kill an invalid process"); - } - } - else version (Posix) - { - if (_running) - { - int rc; - - assert(_pid > 0); - - if (.kill(_pid, SIGTERM) != -1) - { - // We clean up the process related data and set the _running - // flag to false once we're done waiting for the process to - // finish. - // - // IMPORTANT: we don't delete the open pipes so that the parent - // process can get whatever the child process left on - // these pipes before dying. - scope(exit) - { - _running = false; - } - - // FIXME: is this loop really needed? - for (uint i = 0; i < 100; i++) - { - rc = waitpid(pid, null, WNOHANG | WUNTRACED); - if (rc == _pid) - { - break; - } - else if (rc == -1) - { - throw new ProcessWaitException(cast(int) _pid, __FILE__, __LINE__); - } - usleep(50000); - } - } - else - { - throw new ProcessKillException(_pid, __FILE__, __LINE__); - } - } - else - { - debug (Process) - Stdout.print("Tried to kill an invalid process"); - } - } - else - { - assert(false, "tango.sys.Process: Unsupported platform"); - } - } - - /** - * Split a string containing the command line used to invoke a program - * and return and array with the parsed arguments. The double-quotes (") - * character can be used to specify arguments with embedded spaces. - * e.g. first "second param" third - */ - protected static char[][] splitArgs(inout char[] command, char[] delims = " \t\r\n") - in - { - assert(!contains(delims, '"'), - "The argument delimiter string cannot contain a double quotes ('\"') character"); - } - body - { - enum State - { - Start, - FindDelimiter, - InsideQuotes - } - - char[][] args = null; - char[][] chunks = null; - int start = -1; - char c; - int i; - State state = State.Start; - - // Append an argument to the 'args' array using the 'chunks' array - // and the current position in the 'command' string as the source. - void appendChunksAsArg() - { - uint argPos; - - if (chunks.length > 0) - { - // Create the array element corresponding to the argument by - // appending the first chunk. - args ~= chunks[0]; - argPos = args.length - 1; - - for (uint chunkPos = 1; chunkPos < chunks.length; ++chunkPos) - { - args[argPos] ~= chunks[chunkPos]; - } - - if (start != -1) - { - args[argPos] ~= command[start .. i]; - } - chunks.length = 0; - } - else - { - if (start != -1) - { - args ~= command[start .. i]; - } - } - start = -1; - } - - for (i = 0; i < command.length; i++) - { - c = command[i]; - - switch (state) - { - // Start looking for an argument. - case State.Start: - if (c == '"') - { - state = State.InsideQuotes; - } - else if (!contains(delims, c)) - { - start = i; - state = State.FindDelimiter; - } - else - { - appendChunksAsArg(); - } - break; - - // Find the ending delimiter for an argument. - case State.FindDelimiter: - if (c == '"') - { - // If we find a quotes character this means that we've - // found a quoted section of an argument. (e.g. - // abc"def"ghi). The quoted section will be appended - // to the preceding part of the argument. This is also - // what Unix shells do (i.e. a"b"c becomes abc). - if (start != -1) - { - chunks ~= command[start .. i]; - start = -1; - } - state = State.InsideQuotes; - } - else if (contains(delims, c)) - { - appendChunksAsArg(); - state = State.Start; - } - break; - - // Inside a quoted argument or section of an argument. - case State.InsideQuotes: - if (start == -1) - { - start = i; - } - - if (c == '"') - { - chunks ~= command[start .. i]; - start = -1; - state = State.Start; - } - break; - - default: - assert(false, "Invalid state in Process.splitArgs"); - } - } - - // Add the last argument (if there is one) - appendChunksAsArg(); - - return args; - } - - /** - * Close and delete any pipe that may have been left open in a previous - * execution of a child process. - */ - protected void cleanPipes() - { - delete _stdin; - delete _stdout; - delete _stderr; - } - - version (Windows) - { - /** - * Convert an associative array of strings to a buffer containing a - * concatenation of "=" strings separated by a null - * character and with an additional null character at the end of it. - * This is the format expected by the CreateProcess() Windows API for - * the environment variables. - */ - protected static char[] toNullEndedBuffer(char[][char[]] src) - { - char[] dest; - - foreach (key, value; src) - { - dest ~= key ~ '=' ~ value ~ '\0'; - } - - if (dest.length > 0) - { - dest ~= '\0'; - } - - return dest; - } - } - else version (Posix) - { - /** - * Convert an array of strings to an array of pointers to char with - * a terminating null character (C strings). The resulting array - * has a null pointer at the end. This is the format expected by - * the execv*() family of POSIX functions. - */ - protected static char*[] toNullEndedArray(char[][] src) - { - if (src !is null) - { - char*[] dest = new char*[src.length + 1]; - int i = src.length; - - // Add terminating null pointer to the array - dest[i] = null; - - while (--i >= 0) - { - // Add a terminating null character to each string - dest[i] = toStringz(src[i]); - } - return dest; - } - else - { - return null; - } - } - - /** - * Convert an associative array of strings to an array of pointers to - * char with a terminating null character (C strings). The resulting - * array has a null pointer at the end. This is the format expected by - * the execv*() family of POSIX functions for environment variables. - */ - protected static char*[] toNullEndedArray(char[][char[]] src) - { - char*[] dest; - - foreach (key, value; src) - { - dest ~= (key ~ '=' ~ value ~ '\0').ptr; - } - - if (dest.length > 0) - { - dest ~= null; - } - return dest; - } - - /** - * Execute a process by looking up a file in the system path, passing - * the array of arguments and the the environment variables. This - * method is a combination of the execve() and execvp() POSIX system - * calls. - */ - protected static int execvpe(char[] filename, char*[] argv, char*[] envp) - in - { - assert(filename.length > 0); - } - body - { - int rc = -1; - char* str; - - if (!contains(filename, FileConst.PathSeparatorChar) && - (str = getenv("PATH")) !is null) - { - char[][] pathList = delimit(str[0 .. strlen(str)], ":"); - - foreach (path; pathList) - { - if (path[path.length - 1] != FileConst.PathSeparatorChar) - { - path ~= FileConst.PathSeparatorChar; - } - - debug (Process) - Stdout.formatln("Trying execution of '{0}' in directory '{1}'", - filename, path); - - path ~= filename; - path ~= '\0'; - - rc = execve(path.ptr, argv.ptr, (envp.length > 0 ? envp.ptr : null)); - // If the process execution failed because of an error - // other than ENOENT (No such file or directory) we - // abort the loop. - if (rc == -1 && errno != ENOENT) - { - break; - } - } - } - else - { - debug (Process) - Stdout.formatln("Calling execve('{0}', argv[{1}], {2})", - (argv[0])[0 .. strlen(argv[0])], - argv.length, (envp.length > 0 ? "envp" : "null")); - - rc = execve(argv[0], argv.ptr, (envp.length > 0 ? envp.ptr : null)); - } - return rc; - } - } -} - - -/** - * Exception thrown when the process cannot be created. - */ -class ProcessCreateException: ProcessException -{ - public this(char[] command, char[] file, uint line) - { - super("Could not create process for " ~ command ~ " : " ~ SysError.lastMsg); - } -} - -/** - * Exception thrown when the parent process cannot be forked. - * - * This exception will only be thrown on POSIX-compatible platforms. - */ -class ProcessForkException: ProcessException -{ - public this(int pid, char[] file, uint line) - { - super(format("Could not fork process ", pid) ~ " : " ~ SysError.lastMsg); - } -} - -/** - * Exception thrown when the process cannot be killed. - */ -class ProcessKillException: ProcessException -{ - public this(int pid, char[] file, uint line) - { - super(format("Could not kill process ", pid) ~ " : " ~ SysError.lastMsg); - } -} - -/** - * Exception thrown when the parent process tries to wait on the child - * process and fails. - */ -class ProcessWaitException: ProcessException -{ - public this(int pid, char[] file, uint line) - { - super(format("Could not wait on process ", pid) ~ " : " ~ SysError.lastMsg); - } -} - - - - -/** - * append an int argument to a message -*/ -private char[] format (char[] msg, int value) -{ - char[10] tmp; - - return msg ~ Integer.format (tmp, value); -} - - -debug (UnitTest) -{ - private import tango.text.stream.LineIterator; - - unittest - { - char[][] params; - char[] command = "echo "; - - params ~= "one"; - params ~= "two"; - params ~= "three"; - - command ~= '"'; - foreach (i, param; params) - { - command ~= param; - if (i != params.length - 1) - { - command ~= '\n'; - } - } - command ~= '"'; - - try - { - auto p = new Process(command, null); - - p.execute(); - - foreach (i, line; new LineIterator!(char)(p.stdout)) - { - if (i == params.length) // echo can add ending new line confusing this test - break; - assert(line == params[i]); - } - - auto result = p.wait(); - - assert(result.reason == Process.Result.Exit && result.status == 0); - } - catch (ProcessException e) - { - Cerr("Program execution failed: ")(e.toString()).newline(); - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/SharedLib.d --- a/tango/tango/sys/SharedLib.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,337 +0,0 @@ -/** - * The shared library module provides a basic layer around the native functions - * used to load symbols from shared libraries. - * - * Copyright: Copyright (C) 2007 Tomasz Stachowiak - * License: BSD style: $(LICENSE) - * Authors: Tomasz Stachowiak, Anders Bergh - */ - -module tango.sys.SharedLib; - - -private { - import tango.core.Exception : TracedException; - import tango.stdc.stringz : fromUtf8z; - - version (Windows) { - import tango.sys.Common : SysError; - - alias void* HINSTANCE, HMODULE; - alias int BOOL; - - extern (Windows) { - void* GetProcAddress(HINSTANCE, char*); - HINSTANCE LoadLibraryA(char*); - BOOL FreeLibrary(HMODULE); - } - } - else version (Posix) { - import tango.stdc.posix.dlfcn; - } - else { - static assert (false, "No support for this platform"); - } - - version (SharedLibVerbose) import tango.util.log.Trace; -} - - -/** - SharedLib is an interface to system-specific shared libraries, such - as ".dll", ".so" or ".dylib" files. It provides a simple interface to obtain - symbol addresses (such as function pointers) from these libraries. - - Example: - ---- - - void main() { - if (auto lib = SharedLib.load(`c:\windows\system32\opengl32.dll`)) { - Trace.formatln("Library successfully loaded"); - - void* ptr = lib.getSymbol("glClear"); - if (ptr) { - Trace.formatln("Symbol glClear found. Address = 0x{:x}", ptr); - } else { - Trace.formatln("Symbol glClear not found"); - } - - lib.unload(); - } else { - Trace.formatln("Could not load the library"); - } - - assert (0 == SharedLib.numLoadedLibs); - } - - ---- - - This implementation uses reference counting, thus a library is not loaded - again if it has been loaded before and not unloaded by the user. - Unloading a SharedLib decreases its reference count. When it reaches 0, - the shared library associated with it is unloaded and the SharedLib instance - is deleted. Please do not delete SharedLib instances manually, unload() will - take care of it. - - Note: - SharedLib is thread-safe. - */ -final class SharedLib { - /// Mapped from RTLD_NOW, RTLD_LAZY, RTLD_GLOBAL and RTLD_LOCAL - enum LoadMode { - Now = 0b1, - Lazy = 0b10, - Global = 0b100, - Local = 0b1000 - } - - - /** - Loads an OS-specific shared library. - - Note: - Please use this function instead of the constructor, which is private. - - Params: - path = The path to a shared library to be loaded - mode = Library loading mode. See LoadMode - - Returns: - A SharedLib instance being a handle to the library, or null if it - could not be loaded and SharedLib.throwExceptions is set to false. - Otherwise, throws SharedLibException - */ - static SharedLib load(char[] path, LoadMode mode = LoadMode.Now | LoadMode.Global) { - SharedLib res; - - synchronized (mutex) { - auto lib = path in loadedLibs; - if (lib) { - version (SharedLibVerbose) Trace.formatln("SharedLib found in the hashmap"); - res = *lib; - } - else { - version (SharedLibVerbose) Trace.formatln("Creating a new instance of SharedLib"); - res = new SharedLib(path); - loadedLibs[path] = res; - } - - ++res.refCnt; - } - - bool delRes = false; - Exception exc; - - synchronized (res) { - if (!res.loaded) { - version (SharedLibVerbose) Trace.formatln("Loading the SharedLib"); - try { - res.load_(mode); - } catch (Exception e) { - exc = e; - } - } - - if (res.loaded) { - version (SharedLibVerbose) Trace.formatln("SharedLib successfully loaded, returning"); - return res; - } else { - synchronized (mutex) { - if (path in loadedLibs) { - version (SharedLibVerbose) Trace.formatln("Removing the SharedLib from the hashmap"); - loadedLibs.remove(path); - } - } - } - - // make sure that only one thread will delete the object - if (0 == --res.refCnt) { - delRes = true; - } - } - - if (delRes) { - version (SharedLibVerbose) Trace.formatln("Deleting the SharedLib"); - delete res; - } - - if (exc !is null) { - throw exc; - } - - version (SharedLibVerbose) Trace.formatln("SharedLib not loaded, returning null"); - return null; - } - - - /** - Unloads the OS-specific shared library associated with this SharedLib instance. - - Note: - It's invalid to use the object after unload() has been called, as unload() - will delete it if it's not referenced any more. - - Throws SharedLibException on failure. In this case, the SharedLib object is not deleted. - */ - void unload() { - bool deleteThis = false; - - synchronized (this) { - assert (loaded); - assert (refCnt > 0); - - synchronized (mutex) { - if (--refCnt <= 0) { - version (SharedLibVerbose) Trace.formatln("Unloading the SharedLib"); - try { - unload_(); - } catch (Exception e) { - ++refCnt; - throw e; - } - - assert ((path in loadedLibs) !is null); - loadedLibs.remove(path); - - deleteThis = true; - } - } - } - if (deleteThis) { - version (SharedLibVerbose) Trace.formatln("Deleting the SharedLib"); - delete this; - } - } - - - /** - Returns the path to the OS-specific shared library associated with this object. - */ - char[] path() { - return this.path_; - } - - - /** - Obtains the address of a symbol within the shared library - - Params: - name = The name of the symbol; must be a null-terminated C string - - Returns: - A pointer to the symbol or null if it's not present in the library - and SharedLib.throwExceptions is set to false. Otherwise, throws SharedLibException - */ - void* getSymbol(char* name) { - assert (loaded); - return getSymbol_(name); - } - - - - /** - Returns the total number of libraries currently loaded by SharedLib - */ - static uint numLoadedLibs() { - return loadedLibs.keys.length; - } - - - private { - version (Windows) { - HMODULE handle; - - void load_(LoadMode mode) { - handle = LoadLibraryA((this.path_ ~ \0).ptr); - if (handle is null && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't load shared library '" ~ this.path_ ~ "' : " ~ SysError.lastMsg); - } - } - - void* getSymbol_(char* name) { - auto res = GetProcAddress(handle, name); - if (res is null && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't load symbol '" ~ fromUtf8z(name) ~ "' from shared library '" ~ this.path_ ~ "' : " ~ SysError.lastMsg); - } else { - return res; - } - } - - void unload_() { - if (0 == FreeLibrary(handle) && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't unload shared library '" ~ this.path_ ~ "' : " ~ SysError.lastMsg); - } - } - } - else version (Posix) { - void* handle; - - void load_(LoadMode mode) { - int mode_; - if (mode & LoadMode.Now) mode_ |= RTLD_NOW; - if (mode & LoadMode.Lazy) mode_ |= RTLD_LAZY; - if (mode & LoadMode.Global) mode_ |= RTLD_GLOBAL; - if (mode & LoadMode.Local) mode_ |= RTLD_LOCAL; - - handle = dlopen((this.path_ ~ \0).ptr, mode_); - if (handle is null && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't load shared library: " ~ fromUtf8z(dlerror())); - } - } - - void* getSymbol_(char* name) { - auto res = dlsym(handle, name); - if (res is null && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't load symbol: " ~ fromUtf8z(dlerror())); - } else { - return res; - } - } - - void unload_() { - if (0 != dlclose(handle) && SharedLib.throwExceptions) { - throw new SharedLibException("Couldn't unload shared library: " ~ fromUtf8z(dlerror())); - } - } - } - else { - static assert (false, "No support for this platform"); - } - - - char[] path_; - int refCnt = 0; - - - bool loaded() { - return handle !is null; - } - - - this(char[] path) { - this.path_ = path.dup; - } - } - - - private static { - SharedLib[char[]] loadedLibs; - Object mutex; - } - - - static this() { - mutex = new Object; - } - - - /// Set this to false if you don't want SharedLib to throw exceptions in symbol(), load() and unload() - static bool throwExceptions = true; -} - - -class SharedLibException : TracedException { - this (char[] msg) { - super(msg); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/darwin/darwin.d --- a/tango/tango/sys/darwin/darwin.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -module tango.sys.darwin.darwin; - -public import tango.stdc.time; -public import tango.stdc.posix.dlfcn; -public import tango.stdc.posix.fcntl; -public import tango.stdc.posix.poll; -public import tango.stdc.posix.pwd; -public import tango.stdc.posix.time; -public import tango.stdc.posix.unistd; -public import tango.stdc.posix.sys.select; -public import tango.stdc.posix.sys.stat; -public import tango.stdc.posix.sys.types; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/linux/epoll.d --- a/tango/tango/sys/linux/epoll.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -module tango.sys.linux.epoll; - -version (linux) -{ - // From : support for the Linux epoll_*() system calls - extern (C) - { - enum: uint - { - EPOLLIN = 0x001, - EPOLLPRI = 0x002, - EPOLLOUT = 0x004, - EPOLLRDNORM = 0x040, - EPOLLRDBAND = 0x080, - EPOLLWRNORM = 0x100, - EPOLLWRBAND = 0x200, - EPOLLMSG = 0x400, - EPOLLERR = 0x008, - EPOLLHUP = 0x010, - EPOLLONESHOT = (1 << 30), - EPOLLET = (1 << 31) - } - - // Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). - public const int EPOLL_CTL_ADD = 1; // Add a file descriptor to the interface. - public const int EPOLL_CTL_DEL = 2; // Remove a file descriptor from the interface. - public const int EPOLL_CTL_MOD = 3; // Change file descriptor epoll_event structure. - - align(1) union epoll_data - { - void* ptr; - int fd; - uint u32; - ulong u64; - } - - alias epoll_data epoll_data_t; - - align(1) struct epoll_event - { - uint events; // Epoll events - epoll_data_t data; // User data variable - } - - // Creates an epoll instance. Returns an fd for the new instance. - // The "size" parameter is a hint specifying the number of file - // descriptors to be associated with the new instance. The fd - // returned by epoll_create() should be closed with close(). - int epoll_create(int size); - - // Manipulate an epoll instance "epfd". Returns 0 in case of success, - // -1 in case of error (the "errno" variable will contain the - // specific error code) The "op" parameter is one of the EPOLL_CTL_* - // constants defined above. The "fd" parameter is the target of the - // operation. The "event" parameter describes which events the caller - // is interested in and any associated user data. - int epoll_ctl(int epfd, int op, int fd, epoll_event* event); - - // Wait for events on an epoll instance "epfd". Returns the number of - // triggered events returned in "events" buffer. Or -1 in case of - // error with the "errno" variable set to the specific error code. The - // "events" parameter is a buffer that will contain triggered - // events. The "maxevents" is the maximum number of events to be - // returned (usually size of "events"). The "timeout" parameter - // specifies the maximum wait time in milliseconds (-1 == infinite). - int epoll_wait(int epfd, epoll_event* events, int maxevents, int timeout); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/linux/linux.d --- a/tango/tango/sys/linux/linux.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -module tango.sys.linux.linux; - - -public import tango.stdc.time; -public import tango.stdc.posix.dlfcn; -public import tango.stdc.posix.fcntl; -public import tango.stdc.posix.poll; -public import tango.stdc.posix.pwd; -public import tango.stdc.posix.time; -public import tango.stdc.posix.unistd; -public import tango.stdc.posix.sys.select; -public import tango.stdc.posix.sys.stat; -public import tango.stdc.posix.sys.types; -public import tango.sys.linux.epoll; diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/linux/socket.d --- a/tango/tango/sys/linux/socket.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,377 +0,0 @@ -module tango.sys.linux.socket; - -private import tango.stdc.stdint; -public import tango.stdc.posix.fcntl; -public import tango.stdc.posix.unistd; // for gethostname - -extern(C): - -alias int socklen_t; - -int socket(int af, int type, int protocol); -int bind(int s, sockaddr* name, int namelen); -int connect(int s, sockaddr* name, int namelen); -int listen(int s, int backlog); -int accept(int s, sockaddr* addr, int* addrlen); -int shutdown(int s, int how); -int getpeername(int s, sockaddr* name, int* namelen); -int getsockname(int s, sockaddr* name, int* namelen); -int send(int s, void* buf, int len, int flags); -int sendto(int s, void* buf, int len, int flags, sockaddr* to, int tolen); -int recv(int s, void* buf, int len, int flags); -int recvfrom(int s, void* buf, int len, int flags, sockaddr* from, int* fromlen); -int getsockopt(int s, int level, int optname, void* optval, int* optlen); -int setsockopt(int s, int level, int optname, void* optval, int optlen); -uint inet_addr(char* cp); -char* inet_ntoa(in_addr ina); -hostent* gethostbyname(char* name); -hostent* gethostbyaddr(void* addr, int len, int type); -protoent* getprotobyname(char* name); -protoent* getprotobynumber(int number); -servent* getservbyname(char* name, char* proto); -servent* getservbyport(int port, char* proto); -int getaddrinfo(char* nodename, char* servname, addrinfo* hints, addrinfo** res); -void freeaddrinfo(addrinfo* ai); -int getnameinfo(sockaddr* sa, socklen_t salen, char* node, socklen_t nodelen, char* service, socklen_t servicelen, int flags); - - -enum: int -{ - AF_UNSPEC = 0, - AF_UNIX = 1, - AF_INET = 2, - AF_IPX = 4, - AF_APPLETALK = 5, - AF_INET6 = 10, - // ... - - PF_UNSPEC = AF_UNSPEC, - PF_UNIX = AF_UNIX, - PF_INET = AF_INET, - PF_IPX = AF_IPX, - PF_APPLETALK = AF_APPLETALK, - PF_INET6 = AF_INET6, -} - - -version( X86 ) -{ - enum: int - { - SOL_SOCKET = 1, - } -} -else version( X86_64 ) -{ - enum: int - { - SOL_SOCKET = 1, - } -}else -{ - // Different values on other platforms. - static assert(0); -} - - -enum: int -{ - SO_DEBUG = 1, - SO_BROADCAST = 6, - SO_REUSEADDR = 2, - SO_LINGER = 13, - SO_DONTLINGER = ~SO_LINGER, - SO_OOBINLINE = 10, - SO_SNDBUF = 7, - SO_RCVBUF = 8, - SO_ACCEPTCONN = 30, - SO_DONTROUTE = 5, - SO_TYPE = 3, - - TCP_NODELAY = 1, - - IP_MULTICAST_LOOP = 34, - IP_ADD_MEMBERSHIP = 35, - IP_DROP_MEMBERSHIP = 36, - - // ... - - IPV6_ADDRFORM = 1, - IPV6_PKTINFO = 2, - IPV6_HOPOPTS = 3, - IPV6_DSTOPTS = 4, - IPV6_RTHDR = 5, - IPV6_PKTOPTIONS = 6, - IPV6_CHECKSUM = 7, - IPV6_HOPLIMIT = 8, - IPV6_NEXTHOP = 9, - IPV6_AUTHHDR = 10, - IPV6_UNICAST_HOPS = 16, - IPV6_MULTICAST_IF = 17, - IPV6_MULTICAST_HOPS = 18, - IPV6_MULTICAST_LOOP = 19, - IPV6_JOIN_GROUP = 20, - IPV6_LEAVE_GROUP = 21, - IPV6_ROUTER_ALERT = 22, - IPV6_MTU_DISCOVER = 23, - IPV6_MTU = 24, - IPV6_RECVERR = 25, - IPV6_V6ONLY = 26, - IPV6_JOIN_ANYCAST = 27, - IPV6_LEAVE_ANYCAST = 28, - IPV6_IPSEC_POLICY = 34, - IPV6_XFRM_POLICY = 35, -} - - -struct linger -{ - int32_t l_onoff; - int32_t l_linger; -} - - -struct protoent -{ - char* p_name; - char** p_aliases; - int32_t p_proto; -} - - -struct servent -{ - char* s_name; - char** s_aliases; - int32_t s_port; - char* s_proto; -} - - -version( BigEndian ) -{ - uint16_t htons(uint16_t x) - { - return x; - } - - - uint32_t htonl(uint32_t x) - { - return x; - } -} -else version( LittleEndian ) -{ - private import tango.core.BitManip; - - - uint16_t htons(uint16_t x) - { - return cast(uint16_t) ((x >> 8) | (x << 8)); - } - - - uint32_t htonl(uint32_t x) - { - return bswap(x); - } -} -else -{ - static assert(0); -} - - -uint16_t ntohs(uint16_t x) -{ - return htons(x); -} - - -uint32_t ntohl(uint32_t x) -{ - return htonl(x); -} - - -enum: int -{ - SOCK_STREAM = 1, - SOCK_DGRAM = 2, - SOCK_RAW = 3, - SOCK_RDM = 4, - SOCK_SEQPACKET = 5, -} - - -enum: int -{ - IPPROTO_IP = 0, - IPPROTO_ICMP = 1, - IPPROTO_IGMP = 2, - IPPROTO_GGP = 3, - IPPROTO_TCP = 6, - IPPROTO_PUP = 12, - IPPROTO_UDP = 17, - IPPROTO_IDP = 22, - IPPROTO_IPV6 = 41, - IPPROTO_ND = 77, - IPPROTO_RAW = 255, - - IPPROTO_MAX = 256, -} - - -enum: int -{ - MSG_OOB = 0x1, - MSG_PEEK = 0x2, - MSG_DONTROUTE = 0x4, -} - - -enum: int -{ - SD_RECEIVE = 0, - SD_SEND = 1, - SD_BOTH = 2, -} - - -enum: uint -{ - INADDR_ANY = 0, - INADDR_LOOPBACK = 0x7F000001, - INADDR_BROADCAST = 0xFFFFFFFF, - INADDR_NONE = 0xFFFFFFFF, - ADDR_ANY = INADDR_ANY, -} - - -enum: int -{ - AI_PASSIVE = 0x1, - AI_CANONNAME = 0x2, - AI_NUMERICHOST = 0x4, -} - - -union in_addr -{ - private union _S_un_t - { - private struct _S_un_b_t - { - uint8_t s_b1, s_b2, s_b3, s_b4; - } - _S_un_b_t S_un_b; - - private struct _S_un_w_t - { - uint16_t s_w1, s_w2; - } - _S_un_w_t S_un_w; - - uint32_t S_addr; - } - _S_un_t S_un; - - uint32_t s_addr; - - struct - { - uint8_t s_net, s_host; - - union - { - uint16_t s_imp; - - struct - { - uint8_t s_lh, s_impno; - } - } - } -} - - -union in6_addr -{ - private union _in6_u_t - { - uint8_t[16] u6_addr8; - uint16_t[8] u6_addr16; - uint32_t[4] u6_addr32; - } - _in6_u_t in6_u; - - uint8_t[16] s6_addr8; - uint16_t[8] s6_addr16; - uint32_t[4] s6_addr32; -} - - -const in6_addr IN6ADDR_ANY = { s6_addr8: [0] }; -const in6_addr IN6ADDR_LOOPBACK = { s6_addr8: [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] }; -//alias IN6ADDR_ANY IN6ADDR_ANY_INIT; -//alias IN6ADDR_LOOPBACK IN6ADDR_LOOPBACK_INIT; - -const uint INET_ADDRSTRLEN = 16; -const uint INET6_ADDRSTRLEN = 46; - - -struct sockaddr -{ - int16_t sa_family; - ubyte[14] sa_data; -} - - -struct sockaddr_in -{ - int16_t sin_family = AF_INET; - uint16_t sin_port; - in_addr sin_addr; - ubyte[8] sin_zero; -} - - -struct sockaddr_in6 -{ - int16_t sin6_family = AF_INET6; - uint16_t sin6_port; - uint32_t sin6_flowinfo; - in6_addr sin6_addr; - uint32_t sin6_scope_id; -} - - -struct addrinfo -{ - int32_t ai_flags; - int32_t ai_family; - int32_t ai_socktype; - int32_t ai_protocol; - size_t ai_addrlen; - sockaddr* ai_addr; - char* ai_canonname; - addrinfo* ai_next; -} - - -struct hostent -{ - char* h_name; - char** h_aliases; - int32_t h_addrtype; - int32_t h_length; - char** h_addr_list; - - - char* h_addr() - { - return h_addr_list[0]; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/win32/CodePage.d --- a/tango/tango/sys/win32/CodePage.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: April 2007 - - author: Kris - -*******************************************************************************/ - -module tango.sys.win32.CodePage; - -private import tango.sys.Common; - -private import tango.core.Exception; - -/******************************************************************************* - - Convert text to and from Windows 'code pages'. This is non-portable, - and will be unlikely to operate even across all Windows platforms. - -*******************************************************************************/ - -struct CodePage -{ - /********************************************************************** - - Test a text array to see if it contains non-ascii elements. - Returns true if ascii, false otherwise - - **********************************************************************/ - - static bool isAscii (char[] src) - { - foreach (c; src) - if (c & 0x80) - return false; - return true; - } - - - /********************************************************************** - - Convert utf8 text to a codepage representation - - page 0 - the ansi code page - 1 - the oem code page - 2 - the mac code page - 3 - ansi code page for the calling thread - 65000 - UTF-7 translation - 65001 - UTF-8 translation - - or a region-specific codepage - - returns: a slice of the provided output buffer - representing converted text - - Note that the input must be utf8 encoded. Note also - that the dst output should be sufficiently large to - accomodate the output; a size of 2*src.length would - be enough to host almost any conversion - - **********************************************************************/ - - static char[] into (char[] src, char[] dst, uint page=0) - { - return convert (src, dst, CP_UTF8, page); - } - - - /********************************************************************** - - Convert codepage text to a utf8 representation - - page 0 - the ansi code page - 1 - the oem code page - 2 - the mac code page - 3 - ansi code page for the calling thread - 65000 - UTF-7 translation - 65001 - UTF-8 translation - - or a region-specific codepage - - returns: a slice of the provided output buffer - representing converted text - - Note that the input will be utf8 encoded. Note also - that the dst output should be sufficiently large to - accomodate the output; a size of 2*src.length would - be enough to host almost any conversion - - **********************************************************************/ - - static char[] from (char[] src, char[] dst, uint page=0) - { - return convert (src, dst, page, CP_UTF8); - } - - - /********************************************************************** - - Internal conversion routine; we avoid heap activity for - strings of short and medium length. A zero is appended - to the dst array in order to simplify C API conversions - - **********************************************************************/ - - private static char[] convert (char[] src, char[] dst, uint from, uint into) - { - uint len = 0; - - // sanity check - assert (dst.length); - - // got some input? - if (src.length > 0) - { - wchar[2000] tmp = void; - wchar[] wide = (src.length <= tmp.length) ? tmp : new wchar[src.length]; - - len = MultiByteToWideChar (from, 0, src.ptr, src.length, - wide.ptr, wide.length); - if (len) - len = WideCharToMultiByte (into, 0, wide.ptr, len, - dst.ptr, dst.length-1, null, null); - if (len is 0) - throw new IllegalArgumentException ("CodePage.convert :: "~SysError.lastMsg); - } - - // append a null terminator - dst[len] = 0; - return dst [0 .. len]; - } -} - - -debug(Test) -{ - void main () - { - char[] s = "foo"; - char[3] x = void; - - //if (! CodePage.isAscii (s)) - s = CodePage.into (s, x); - s = CodePage.from (s, x); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/win32/Macros.di --- a/tango/tango/sys/win32/Macros.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,210 +0,0 @@ -module tango.sys.win32.Macros; - -/* - Module: Windows Utilities - Author: Trevor Parscal -*/ - -/+ Imports +/ -public -{ - import tango.sys.win32.Types; -} -private -{ - import tango.stdc.string; - import tango.sys.win32.UserGdi; -} - - -/+ Functions +/ -ushort MAKEWORD(ubyte A, ubyte B) -{ - return cast(ushort)(A | (B << 8)); -} -uint MAKELONG(ushort A, ushort B) -{ - return cast(uint)(A | (B << 16)); -} -ushort HIWORD(uint L) -{ - return cast(ushort)(L >> 16); -} -ushort LOWORD(uint L) -{ - return cast(ushort)(L & 0xFFFF); -} -ubyte HIBYTE(ushort W) -{ - return cast(ubyte)(W >> 8); -} -ubyte LOBYTE(ushort W) -{ - return cast(ubyte)(W & 0xFF); -} -HANDLE GlobalDiscard(HANDLE h) -{ - return GlobalReAlloc(h, 0, GMEM_MOVEABLE); -} -HANDLE LocalDiscard(HANDLE h) -{ - return LocalReAlloc(h, 0, LMEM_MOVEABLE); -} -BOOL SUCCEEDED(HRESULT Status) -{ - return (cast(int)Status & 0x80000000) == 0; -} -BOOL FAILED(HRESULT Status) -{ - return (cast(int)Status & 0x80000000) != 0; -} -BOOL IS_ERROR(HRESULT Status) -{ - return (cast(int)Status >> 31) == SEVERITY_ERROR; -} -int HRESULT_CODE(HRESULT hr) -{ - return cast(int)hr & 0xFFFF; -} -int HRESULT_FACILITY(HRESULT hr) -{ - return (cast(int)hr >> 16) & 0x1FFF; -} -int HRESULT_SEVERITY(HRESULT hr) -{ - return (cast(int)hr >> 31) & 0x1; -} -HRESULT MAKE_HRESULT(int sev, int fac, int code) -{ - return cast(HRESULT)((sev << 31) | (fac << 16) | code); -} -HRESULT HRESULT_FROM_WIN32(int x) -{ - return cast(HRESULT) (x ? (x & 0xFFFF) | (FACILITY_WIN32 << 16) | 0x80000000 : 0); -} -//HRESULT HRESULT_FROM_NT(int x) -//{ -// return x | FACILITY_NT_BIT; -//} -DWORD MAKEROP4(DWORD fore, DWORD back) -{ - return ((back << 8) & 0xFF000000) | fore; -} -ubyte GetKValue(COLORREF cmyk) -{ - return cast(ubyte)(cmyk & 0xFF); -} -ubyte GetYValue(COLORREF cmyk) -{ - return cast(ubyte)((cmyk >> 8) & 0xFF); -} -ubyte GetMValue(COLORREF cmyk) -{ - return cast(ubyte)((cmyk >> 16) & 0xFF); -} -ubyte GetCValue(COLORREF cmyk) -{ - return cast(ubyte)((cmyk >> 24) & 0xFF); -} -COLORREF CMYK(ubyte c, ubyte m, ubyte y, ubyte k) -{ - return k | (y << 8) | (m << 16) | (c << 24); -} -COLORREF RGB(ubyte r, ubyte g, ubyte b) -{ - return r | (g << 8) | (b << 16); -} -COLORREF PALETTERGB(ubyte r, ubyte g, ubyte b) -{ - return 0x02000000 | RGB(r, g, b); -} -COLORREF PALETTEINDEX(ushort i) -{ - return 0x01000000 | i; -} -ubyte GetRValue(COLORREF rgb) -{ - return cast(ubyte)(rgb & 0xFF); -} -ubyte GetGValue(COLORREF rgb) -{ - return cast(ubyte)((rgb >> 8) & 0xFF); -} -ubyte GetBValue(COLORREF rgb) -{ - return cast(ubyte)((rgb >> 16) & 0xFF); -} -WPARAM MAKEWPARAM(ushort l, ushort h) -{ - return MAKELONG(l, h); -} -LPARAM MAKELPARAM(ushort l, ushort h) -{ - return MAKELONG(l, h); -} -LRESULT MAKELRESULT(ushort l, ushort h) -{ - return MAKELONG(l, h); -} -BOOL ExitWindows(DWORD dwReserved, UINT uReserved) -{ - return ExitWindowsEx(EWX_LOGOFF, 0); -} -HWND CreateWindowA(PCHAR b, PCHAR c, DWORD d, int e, - int f, int g, int h, HWND i, HMENU j, HINST k, POINTER l) -{ - return CreateWindowExA(0, b, c, d, e, f, g, h, i, j, k, l); -} -HWND CreateWindowW(PWIDECHAR b, PWIDECHAR c, DWORD d, int e, - int f, int g, int h, HWND i, HMENU j, HINST k, POINTER l) -{ - return CreateWindowExW(0, b, c, d, e, f, g, h, i, j, k, l); -} -HWND CreateDialogA(HINST a, PANSICHAR b, HWND c, DLGPROC d) -{ - return CreateDialogParamA(a, b, c, d, 0); -} -HWND CreateDialogW(HINST a, PWIDECHAR b, HWND c, DLGPROC d) -{ - return CreateDialogParamW(a, b, c, d, 0); -} -HWND CreateDialogIndirectA(HINST a, DLGTEMPLATE* b, HWND c, DLGPROC d) -{ - return CreateDialogIndirectParamA(a, b, c, d, 0); -} -HWND CreateDialogIndirectW(HINST a, DLGTEMPLATE* b, HWND c, DLGPROC d) -{ - return CreateDialogIndirectParamW(a, b, c, d, 0); -} -int DialogBoxA(HINST a, PANSICHAR b, HWND c, DLGPROC d) -{ - return DialogBoxParamA(a, b, c, d, 0); -} -int DialogBoxW(HINST a, PWIDECHAR b, HWND c, DLGPROC d) -{ - return DialogBoxParamW(a, b, c, d, 0); -} -int DialogBoxIndirectA(HINST a, DLGTEMPLATE* b, HWND c, DLGPROC d) -{ - return DialogBoxIndirectParamA(a, b, c, d, 0); -} -int DialogBoxIndirectW(HINST a, DLGTEMPLATE* b, HWND c, DLGPROC d) -{ - return DialogBoxIndirectParamW(a, b, c, d, 0); -} -void ZeroMemory(void* dest, uint len) -{ - memset(dest, 0, len); -} -void FillMemory(void* dest, uint len, ubyte c) -{ - memset(dest, c, len); -} -void MoveMemory(void* dest, void* src, uint len) -{ - memmove(dest, src, len); -} -void CopyMemory(void* dest, void* src, uint len) -{ - memcpy(dest, src, len); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/win32/Process.di --- a/tango/tango/sys/win32/Process.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,91 +0,0 @@ -/* - * Written by Sean Kelly - * Placed into Public Domain - */ - -module tango.sys.win32.Process; - - -private -{ - import tango.stdc.stdint; - import tango.stdc.stddef; -} - -extern (C): - -enum -{ - P_WAIT, - P_NOWAIT, - P_OVERLAY, - P_NOWAITO, - P_DETACH, -} - -enum -{ - WAIT_CHILD, - WAIT_GRANDCHILD, -} - -private -{ - extern (C) alias void function(void*) bt_fptr; - extern (Windows) alias uint function(void*) btex_fptr; -} - -uintptr_t _beginthread(bt_fptr, uint, void*); -void _endthread(); -uintptr_t _beginthreadex(void*, uint, btex_fptr, void*, uint, uint *); -void _endthreadex(uint); - -void abort(); -void exit(int); -void _exit(int); -void _cexit(); -void _c_exit(); - -intptr_t cwait(int*, intptr_t, int); -intptr_t wait(int*); - -int getpid(); -int system(char*); - -intptr_t spawnl(int, char*, char*, ...); -intptr_t spawnle(int, char*, char*, ...); -intptr_t spawnlp(int, char*, char*, ...); -intptr_t spawnlpe(int, char*, char*, ...); -intptr_t spawnv(int, char*, char**); -intptr_t spawnve(int, char*, char**, char**); -intptr_t spawnvp(int, char*, char**); -intptr_t spawnvpe(int, char*, char**, char**); - -intptr_t execl(char*, char*, ...); -intptr_t execle(char*, char*, ...); -intptr_t execlp(char*, char*, ...); -intptr_t execlpe(char*, char*, ...); -intptr_t execv(char*, char**); -intptr_t execve(char*, char**, char**); -intptr_t execvp(char*, char**); -intptr_t execvpe(char*, char**, char**); - -int _wsystem(wchar_t*); - -intptr_t _wspawnl(int, wchar_t*, wchar_t*, ...); -intptr_t _wspawnle(int, wchar_t*, wchar_t*, ...); -intptr_t _wspawnlp(int, wchar_t*, wchar_t*, ...); -intptr_t _wspawnlpe(int, wchar_t*, wchar_t*, ...); -intptr_t _wspawnv(int, wchar_t*, wchar_t**); -intptr_t _wspawnve(int, wchar_t*, wchar_t**, wchar_t**); -intptr_t _wspawnvp(int, wchar_t*, wchar_t**); -intptr_t _wspawnvpe(int, wchar_t*, wchar_t**, wchar_t**); - -intptr_t _wexecl(wchar_t*, wchar_t*, ...); -intptr_t _wexecle(wchar_t*, wchar_t*, ...); -intptr_t _wexeclp(wchar_t*, wchar_t*, ...); -intptr_t _wexeclpe(wchar_t*, wchar_t*, ...); -intptr_t _wexecv(wchar_t*, wchar_t**); -intptr_t _wexecve(wchar_t*, wchar_t**, wchar_t**); -intptr_t _wexecvp(wchar_t*, wchar_t**); -intptr_t _wexecvpe(wchar_t*, wchar_t**, wchar_t**); diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/win32/Types.di --- a/tango/tango/sys/win32/Types.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13437 +0,0 @@ -module tango.sys.win32.Types; - -/* - Module: Windows Types - Author: Trevor Parscal -*/ - -/+ Aliases, Types, and Constants +/ -const int NULL = 0; -alias int SCODE; -alias void VOID; -alias void* POINTER; -alias ushort ATOM; -alias int WINBOOL; -alias WINBOOL BOOL; -alias uint CALTYPE; -alias uint CALID; -alias char CCHAR; -alias char* PCHAR; -alias uint COLORREF; -alias uint TCOLORREF; -alias ubyte BYTE; -alias short INT16; -alias ushort UINT16; -alias short SHORT; -alias int INT; -alias int WINT; -alias int LONG; -alias ushort WORD; -alias uint DWORD; -alias int INT_PTR; -alias uint UINT_PTR; -alias int LONG_PTR; -alias uint ULONG_PTR; -alias uint PROPID; -const BOOL FALSE = 0; -const BOOL TRUE = -1; -alias char* PANSICHAR; -alias wchar* PWIDECHAR; -alias int* PINTEGER; -alias double LONGLONG; -alias LONGLONG* PLONGLONG; -alias double DWORDLONG; -alias DWORDLONG* PDWORDLONG; -alias double FLOAT; -alias void* HANDLE; -alias HANDLE HACCEL; -alias HANDLE HBITMAP; -alias HANDLE HBRUSH; -alias HANDLE HCOLORSPACE; -alias HANDLE HCONV; -alias HANDLE HCONVLIST; -alias HANDLE HCURSOR; -alias HANDLE HDBC; -alias HANDLE HDC; -alias HANDLE HDDEDATA; -alias HANDLE HDESK; -alias HANDLE HDROP; -alias HANDLE HDWP; -alias HANDLE HENHMETAFILE; -alias HANDLE HENV; -alias HANDLE HFILE; -alias HANDLE HFONT; -alias HANDLE HGDIOBJ; -alias HANDLE HGLOBAL; -alias HANDLE HGLRC; -alias HANDLE HHOOK; -alias HANDLE HICON; -alias HANDLE HIMAGELIST; -alias HANDLE HINST; -alias HINST HINSTANCE; -alias HANDLE HKEY; -alias HANDLE HKL; -alias HANDLE HLOCAL; -alias HANDLE HMENU; -alias HANDLE HMETAFILE; -alias HANDLE HMODULE; -alias HANDLE HPALETTE; -alias HANDLE HPEN; -alias HANDLE HRASCONN; -alias int HRESULT; -alias HANDLE HRGN; -alias HANDLE HRSRC; -alias HANDLE HSTMT; -alias HANDLE HSZ; -alias HANDLE HWINSTA; -alias HANDLE HWND; -alias ushort LANGID; -alias DWORD LCID; -alias DWORD LCTYPE; -alias int LPARAM; -alias ushort* LP; -alias WINBOOL* LPBOOL; -alias ubyte* LPBYTE; -alias PCHAR LPCCH; -alias PCHAR LPCH; -alias COLORREF* LPCOLORREF; -alias PCHAR LPCSTR; -alias PCHAR LPCTSTR; -alias wchar* LPCWCH; -alias wchar* LPCWSTR; -alias DWORD* LPDWORD; -alias HANDLE* LPHANDLE; -alias int* LPINT; -alias int* LPLONG; -alias PCHAR LPSTR; -alias PCHAR LPTCH; -alias PCHAR LPTSTR; -alias int LRESULT; -alias POINTER LPVOID; -alias POINTER LPCVOID; -alias wchar* LPWCH; -alias wchar* LPWORD; -alias wchar* LPWSTR; -alias wchar* NWPSTR; -alias WINBOOL* PWINBOOL; -alias ubyte* PBOOLEAN; -alias ubyte* PBYTE; -alias PCHAR PCCH; -alias PCHAR PCH; -alias PCHAR PCSTR; -alias wchar* PCWCH; -alias wchar* PCWSTR; -alias DWORD* PDWORD; -alias double* PFLOAT; -alias HANDLE* PHANDLE; -alias HKEY* PHKEY; -alias int* PINT; -alias int* PLONG; -alias int* PSHORT; -alias PCHAR PSTR; -alias PCHAR PSZ; -alias ubyte* PTBYTE; -alias PCHAR PTCH; -alias PCHAR PTCHAR; -alias PCHAR PTSTR; -alias ubyte* PUCHAR; -alias wchar* PWCH; -alias wchar* PWCHAR; -alias ushort* PWORD; -alias uint* PUINT; -alias uint* PULONG; -alias ushort* PUSHORT; -alias POINTER PVOID; -// NOTE: This is defined in sqltypes. Probably shouldn't be here. Commenting for now. -//alias int RETCODE; -alias HANDLE SC_HANDLE; -alias LPVOID SC_LOCK; -alias SC_HANDLE* LPSC_HANDLE; -alias DWORD SERVICE_STATUS_HANDLE; -alias ubyte TBYTE; -alias char TCHAR; -alias ubyte BCHAR; -alias ubyte UCHAR; -alias wchar WCHAR; -alias uint UINT; -alias uint ULONG; -alias ushort USHORT; -alias uint WPARAM; -alias int ACL_INFORMATION_CLASS; - -struct GUID { // size is 16 -align(1): - DWORD Data1; - WORD Data2; - WORD Data3; - BYTE[8] Data4; -} - -enum { AclRevisionInformation = 1, AclSizeInformation, }; -alias ACL_INFORMATION_CLASS _ACL_INFORMATION_CLASS; -alias int MEDIA_TYPE; -enum { Unknown, F5_1Pt2_512, F3_1Pt44_512, F3_2Pt88_512, F3_20Pt8_512, F3_720_512, F5_360_512, F5_320_512, F5_320_1024, F5_180_512, F5_160_512, RemovableMedia, FixedMedia, }; -alias MEDIA_TYPE _MEDIA_TYPE; -const int RASCS_DONE = (0x2000); -const int RASCS_PAUSED = (0x1000); -alias int RASCONNSTATE; -enum { RASCS_OpenPort = 0, RASCS_PortOpened, RASCS_ConnectDevice, RASCS_DeviceConnected, RASCS_AllDevicesConnected, RASCS_Authenticate, RASCS_AuthNotify, RASCS_AuthRetry, RASCS_AuthCallback, RASCS_AuthChangePassword, RASCS_AuthProject, RASCS_AuthLinkSpeed, RASCS_AuthAck, RASCS_ReAuthenticate, RASCS_Authenticated, RASCS_PrepareForCallback, RASCS_WaitForModemReset, RASCS_WaitForCallback, RASCS_Projected, RASCS_StartAuthentication, RASCS_CallbackComplete, RASCS_LogonNetwork, RASCS_Interactive = RASCS_PAUSED, RASCS_RetryAuthentication, RASCS_CallbackSetByCaller, RASCS_PasswordExpired, RASCS_Connected = RASCS_DONE, RASCS_Disconnected, }; -alias RASCONNSTATE _RASCONNSTATE; -alias int RASPROJECTION; -enum { RASP_Amb = 0x10000, RASP_PppNbf = 0x803F, RASP_PppIpx = 0x802B, RASP_PppIp = 0x8021, }; -alias RASPROJECTION _RASPROJECTION; -alias int SECURITY_IMPERSONATION_LEVEL; -enum { SecurityAnonymous, SecurityIdentification, SecurityImpersonation, SecurityDelegation, }; -alias SECURITY_IMPERSONATION_LEVEL _SECURITY_IMPERSONATION_LEVEL; -alias int SID_NAME_USE; -enum { SidTypeUser = 1, SidTypeGroup, SidTypeDomain, SidTypeAlias, SidTypeWellKnownGroup, SidTypeDeletedAccount, SidTypeInvalid, SidTypeUnknown, }; -alias SID_NAME_USE* PSID_NAME_USE; -alias SID_NAME_USE _SID_NAME_USE; -alias int TOKEN_INFORMATION_CLASS; -enum { TokenUser = 1, TokenGroups, TokenPrivileges, TokenOwner, TokenPrimaryGroup, TokenDefaultDacl, TokenSource, TokenType, TokenImpersonationLevel, TokenStatistics, }; -alias TOKEN_INFORMATION_CLASS _TOKEN_INFORMATION_CLASS; -alias int TOKEN_TYPE; -enum { TokenPrimary = 1, TokenImpersonation, }; -alias TOKEN_TYPE TAGTOKEN_TYPE; - -extern(Windows){ -alias int (*BFFCALLBACK)(HWND, UINT, LPARAM, LPARAM); -alias UINT (*LPCCHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias UINT (*LPCFHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias POINTER PTHREAD_START_ROUTINE; -alias PTHREAD_START_ROUTINE LPTHREAD_START_ROUTINE; -alias DWORD (*EDITSTREAMCALLBACK)(DWORD, LPBYTE, LONG, LONG); -alias UINT (*LPFRHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias UINT (*LPOFNHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias UINT (*LPPRINTHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias UINT (*LPSETUPHOOKPROC)(HWND, UINT, WPARAM, LPARAM); -alias LRESULT (*DLGPROC)(HWND, UINT, WPARAM, LPARAM); -alias int (*PFNPROPSHEETCALLBACK)(HWND, UINT, LPARAM); -alias void (*LPSERVICE_MAIN_FUNCTION)(DWORD); -alias int (*PFNTVCOMPARE)(LPARAM, LPARAM, LPARAM); -alias LRESULT (*WNDPROC)(HWND, UINT, WPARAM, LPARAM); -alias POINTER FARPROC; -alias FARPROC PROC; -alias WINBOOL (*ENUMRESTYPEPROC)(HANDLE, LPTSTR, LONG); -alias WINBOOL (*ENUMRESNAMEPROC)(HANDLE, LPCTSTR, LPTSTR, LONG); -alias WINBOOL (*ENUMRESLANGPROC)(HANDLE, LPCTSTR, LPCTSTR, ushort, LONG); -alias FARPROC DESKTOPENUMPROC; -alias WINBOOL (*ENUMWINDOWSPROC)(HWND, LPARAM); -alias WINBOOL (*ENUMWINDOWSTATIONPROC)(LPTSTR, LPARAM); -alias void (*SENDASYNCPROC)(HWND, UINT, DWORD); -alias void (*TIMERPROC)(HWND, UINT, UINT); -alias BOOL(*MONITORENUMPROC)(HMONITOR, HDC, RECT*, LPARAM); -alias FARPROC GRAYSTRINGPROC; -alias WINBOOL (*DRAWSTATEPROC)(HDC, LPARAM, WPARAM, int, int); -alias WINBOOL (*PROPENUMPROCEX)(HWND, LPCTSTR, HANDLE, DWORD); -alias WINBOOL (*PROPENUMPROC)(HWND, LPCTSTR, HANDLE); -alias LRESULT (*HOOKPROC)(int, WPARAM, LPARAM); -alias void (*ENUMOBJECTSPROC)(LPVOID); -alias void (*LINEDDAPROC)(int, int); -alias WINBOOL (*TABORTPROC)(HDC, int); -alias UINT (*LPPAGEPAINTHOOK)(HWND, UINT, WPARAM, LPARAM); -alias UINT (*LPPAGESETUPHOOK)(HWND, UINT, WPARAM, LPARAM); -alias int (*ICMENUMPROC)(LPTSTR, LPARAM); -alias LONG (*EDITWORDBREAKPROCEX)(PCHAR, LONG, ubyte, INT); -alias int (*PFNLVCOMPARE)(LPARAM, LPARAM, LPARAM); -alias WINBOOL (*LOCALE_ENUMPROC)(LPTSTR); -alias WINBOOL (*CODEPAGE_ENUMPROC)(LPTSTR); -alias WINBOOL (*DATEFMT_ENUMPROC)(LPTSTR); -alias WINBOOL (*TIMEFMT_ENUMPROC)(LPTSTR); -alias WINBOOL (*CALINFO_ENUMPROC)(LPTSTR); -alias WINBOOL (*PHANDLER_ROUTINE)(DWORD); -alias WINBOOL (*LPHANDLER_FUNCTION)(DWORD); -alias void (*PTIMERAPCROUTINE)(LPVOID, DWORD, DWORD); -alias UINT (*PFNGETPROFILEPATH)(LPCTSTR, LPSTR, UINT); -alias UINT (*PFNRECONCILEPROFILE)(LPCTSTR, LPCTSTR, DWORD); -alias WINBOOL (*PFNPROCESSPOLICIES)(HWND, LPCTSTR, LPCTSTR, LPCTSTR, DWORD); -} - -const { - char* SE_CREATE_TOKEN_NAME = ("SeCreateTokenPrivilege"); - char* SE_ASSIGNPRIMARYTOKEN_NAME = ("SeAssignPrimaryTokenPrivilege"); - char* SE_LOCK_MEMORY_NAME = ("SeLockMemoryPrivilege"); - char* SE_INCREASE_QUOTA_NAME = ("SeIncreaseQuotaPrivilege"); - char* SE_UNSOLICITED_INPUT_NAME = ("SeUnsolicitedInputPrivilege"); - char* SE_MACHINE_ACCOUNT_NAME = ("SeMachineAccountPrivilege"); - char* SE_TCB_NAME = ("SeTcbPrivilege"); - char* SE_SECURITY_NAME = ("SeSecurityPrivilege"); - char* SE_TAKE_OWNERSHIP_NAME = ("SeTakeOwnershipPrivilege"); - char* SE_LOAD_DRIVER_NAME = ("SeLoadDriverPrivilege"); - char* SE_SYSTEM_PROFILE_NAME = ("SeSystemProfilePrivilege"); - char* SE_SYSTEMTIME_NAME = ("SeSystemtimePrivilege"); - char* SE_PROF_SINGLE_PROCESS_NAME = ("SeProfileSingleProcessPrivilege"); - char* SE_INC_BASE_PRIORITY_NAME = ("SeIncreaseBasePriorityPrivilege"); - char* SE_CREATE_PAGEFILE_NAME = ("SeCreatePagefilePrivilege"); - char* SE_CREATE_PERMANENT_NAME = ("SeCreatePermanentPrivilege"); - char* SE_BACKUP_NAME = ("SeBackupPrivilege"); - char* SE_RESTORE_NAME = ("SeRestorePrivilege"); - char* SE_SHUTDOWN_NAME = ("SeShutdownPrivilege"); - char* SE_DEBUG_NAME = ("SeDebugPrivilege"); - char* SE_AUDIT_NAME = ("SeAuditPrivilege"); - char* SE_SYSTEM_ENVIRONMENT_NAME = ("SeSystemEnvironmentPrivilege"); - char* SE_CHANGE_NOTIFY_NAME = ("SeChangeNotifyPrivilege"); - char* SE_REMOTE_SHUTDOWN_NAME = ("SeRemoteShutdownPrivilege"); - char* SERVICES_ACTIVE_DATABASEA = ("ServicesActive"); - char* SERVICES_FAILED_DATABASEA = ("ServicesFailed"); - char* SC_GROUP_IDENTIFIERA = ("+"); - char* SERVICES_ACTIVE_DATABASE = (SERVICES_ACTIVE_DATABASEA); - char* SERVICES_FAILED_DATABASE = (SERVICES_FAILED_DATABASEA); - char* SC_GROUP_IDENTIFIER = (SC_GROUP_IDENTIFIERA); -} - -extern(Windows){ -alias HDDEDATA (*PFNCALLBACK)(UINT, UINT, HCONV, HSZ, HSZ, HDDEDATA, DWORD, DWORD); -} -alias PFNCALLBACK CALLB; -alias WINBOOL SECURITY___FILE___TRACKING_MODE; -alias FARPROC WNDENUMPROC; -alias FARPROC ENHMFENUMPROC; -alias DWORD CCSTYLE; -alias CCSTYLE* PCCSTYLE; -alias CCSTYLE* LPCCSTYLE; -alias DWORD CCSTYLEFLAGA; -alias CCSTYLEFLAGA* PCCSTYLEFLAGA; -alias CCSTYLEFLAGA* LPCCSTYLEFLAGA; - -const HANDLE INVALID_HANDLE_VALUE = cast(HANDLE) -1; - - -enum : DWORD { - SM_CXVIRTUALSCREEN = (76), - SM_CYVIRTUALSCREEN = (77), - MONITORINFOF_PRIMARY = (1), - LZERROR_UNKNOWNALG = -((8)), - LZERROR_BADVALUE = -((7)), - LZERROR_GLOBLOCK = -((6)), - LZERROR_GLOBALLOC = -((5)), - LZERROR_WRITE = -((4)), - LZERROR_READ = -((3)), - LZERROR_BADOUTHANDLE = -((2)), - LZERROR_BADINHANDLE = -((1)), - NO_ERROR = (0), - ERROR_SUCCESS = (0), - ERROR_INVALID_FUNCTION = (1), - ERROR_FILE_NOT_FOUND = (2), - ERROR_PATH_NOT_FOUND = (3), - ERROR_TOO_MANY_OPEN_FILES = (4), - ERROR_ACCESS_DENIED = (5), - ERROR_INVALID_HANDLE = (6), - ERROR_ARENA_TRASHED = (7), - ERROR_NOT_ENOUGH_MEMORY = (8), - ERROR_INVALID_BLOCK = (9), - ERROR_BAD_ENVIRONMENT = (10), - ERROR_BAD_FORMAT = (11), - ERROR_INVALID_ACCESS = (12), - ERROR_INVALID_DATA = (13), - ERROR_OUTOFMEMORY = (14), - ERROR_INVALID_DRIVE = (15), - ERROR_CURRENT_DIRECTORY = (16), - ERROR_NOT_SAME_DEVICE = (17), - ERROR_NO_MORE_FILES = (18), - ERROR_WRITE_PROTECT = (19), - ERROR_BAD_UNIT = (20), - ERROR_NOT_READY = (21), - ERROR_BAD_COMMAND = (22), - ERROR_CRC = (23), - ERROR_BAD_LENGTH = (24), - ERROR_SEEK = (25), - ERROR_NOT_DOS_DISK = (26), - ERROR_SECTOR_NOT_FOUND = (27), - ERROR_OUT_OF_PAPER = (28), - ERROR_WRITE_FAULT = (29), - ERROR_READ_FAULT = (30), - ERROR_GEN_FAILURE = (31), - ERROR_SHARING_VIOLATION = (32), - ERROR_LOCK_VIOLATION = (33), - ERROR_WRONG_DISK = (34), - ERROR_SHARING_BUFFER_EXCEEDED = (36), - ERROR_HANDLE_EOF = (38), - ERROR_HANDLE_DISK_FULL = (39), - ERROR_NOT_SUPPORTED = (50), - ERROR_REM_NOT_LIST = (51), - ERROR_DUP_NAME = (52), - ERROR_BAD_NETPATH = (53), - ERROR_NETWORK_BUSY = (54), - ERROR_DEV_NOT_EXIST = (55), - ERROR_TOO_MANY_CMDS = (56), - ERROR_ADAP_HDW_ERR = (57), - ERROR_BAD_NET_RESP = (58), - ERROR_UNEXP_NET_ERR = (59), - ERROR_BAD_REM_ADAP = (60), - ERROR_PRINTQ_FULL = (61), - ERROR_NO_SPOOL_SPACE = (62), - ERROR_PRINT_CANCELLED = (63), - ERROR_NETNAME_DELETED = (64), - ERROR_NETWORK_ACCESS_DENIED = (65), - ERROR_BAD_DEV_TYPE = (66), - ERROR_BAD_NET_NAME = (67), - ERROR_TOO_MANY_NAMES = (68), - ERROR_TOO_MANY_SESS = (69), - ERROR_SHARING_PAUSED = (70), - ERROR_REQ_NOT_ACCEP = (71), - ERROR_REDIR_PAUSED = (72), - ERROR_FILE_EXISTS = (80), - ERROR_CANNOT_MAKE = (82), - ERROR_FAIL_I24 = (83), - ERROR_OUT_OF_STRUCTURES = (84), - ERROR_ALREADY_ASSIGNED = (85), - ERROR_INVALID_PASSWORD = (86), - ERROR_INVALID_PARAMETER = (87), - ERROR_NET_WRITE_FAULT = (88), - ERROR_NO_PROC_SLOTS = (89), - ERROR_TOO_MANY_SEMAPHORES = (100), - ERROR_EXCL_SEM_ALREADY_OWNED = (101), - ERROR_SEM_IS_SET = (102), - ERROR_TOO_MANY_SEM_REQUESTS = (103), - ERROR_INVALID_AT_INTERRUPT_TIME = (104), - ERROR_SEM_OWNER_DIED = (105), - ERROR_SEM_USER_LIMIT = (106), - ERROR_DISK_CHANGE = (107), - ERROR_DRIVE_LOCKED = (108), - ERROR_BROKEN_PIPE = (109), - ERROR_OPEN_FAILED = (110), - ERROR_BUFFER_OVERFLOW = (111), - ERROR_DISK_FULL = (112), - ERROR_NO_MORE_SEARCH_HANDLES = (113), - ERROR_INVALID_TARGET_HANDLE = (114), - ERROR_INVALID_CATEGORY = (117), - ERROR_INVALID_VERIFY_SWITCH = (118), - ERROR_BAD_DRIVER_LEVEL = (119), - ERROR_CALL_NOT_IMPLEMENTED = (120), - ERROR_SEM_TIMEOUT = (121), - ERROR_INSUFFICIENT_BUFFER = (122), - ERROR_INVALID_NAME = (123), - ERROR_INVALID_LEVEL = (124), - ERROR_NO_VOLUME_LABEL = (125), - ERROR_MOD_NOT_FOUND = (126), - ERROR_PROC_NOT_FOUND = (127), - ERROR_WAIT_NO_CHILDREN = (128), - ERROR_CHILD_NOT_COMPLETE = (129), - ERROR_DIRECT_ACCESS_HANDLE = (130), - ERROR_NEGATIVE_SEEK = (131), - ERROR_SEEK_ON_DEVICE = (132), - ERROR_IS_JOIN_TARGET = (133), - ERROR_IS_JOINED = (134), - ERROR_IS_SUBSTED = (135), - ERROR_NOT_JOINED = (136), - ERROR_NOT_SUBSTED = (137), - ERROR_JOIN_TO_JOIN = (138), - ERROR_SUBST_TO_SUBST = (139), - ERROR_JOIN_TO_SUBST = (140), - ERROR_SUBST_TO_JOIN = (141), - ERROR_BUSY_DRIVE = (142), - ERROR_SAME_DRIVE = (143), - ERROR_DIR_NOT_ROOT = (144), - ERROR_DIR_NOT_EMPTY = (145), - ERROR_IS_SUBST_PATH = (146), - ERROR_IS_JOIN_PATH = (147), - ERROR_PATH_BUSY = (148), - ERROR_IS_SUBST_TARGET = (149), - ERROR_SYSTEM_TRACE = (150), - ERROR_INVALID_EVENT_COUNT = (151), - ERROR_TOO_MANY_MUXWAITERS = (152), - ERROR_INVALID_LIST_FORMAT = (153), - ERROR_LABEL_TOO_LONG = (154), - ERROR_TOO_MANY_TCBS = (155), - ERROR_SIGNAL_REFUSED = (156), - ERROR_DISCARDED = (157), - ERROR_NOT_LOCKED = (158), - ERROR_BAD_THREADID_ADDR = (159), - ERROR_BAD_ARGUMENTS = (160), - ERROR_BAD_PATHNAME = (161), - ERROR_SIGNAL_PENDING = (162), - ERROR_MAX_THRDS_REACHED = (164), - ERROR_LOCK_FAILED = (167), - ERROR_BUSY = (170), - ERROR_CANCEL_VIOLATION = (173), - ERROR_ATOMIC_LOCKS_NOT_SUPPORTED = (174), - ERROR_INVALID_SEGMENT_NUMBER = (180), - ERROR_INVALID_ORDINAL = (182), - ERROR_ALREADY_EXISTS = (183), - ERROR_INVALID_FLAG_NUMBER = (186), - ERROR_SEM_NOT_FOUND = (187), - ERROR_INVALID_STARTING_CODESEG = (188), - ERROR_INVALID_STACKSEG = (189), - ERROR_INVALID_MODULETYPE = (190), - ERROR_INVALID_EXE_SIGNATURE = (191), - ERROR_EXE_MARKED_INVALID = (192), - ERROR_BAD_EXE_FORMAT = (193), - ERROR_ITERATED_DATA_EXCEEDS_64k = (194), - ERROR_INVALID_MINALLOCSIZE = (195), - ERROR_DYNLINK_FROM_INVALID_RING = (196), - ERROR_IOPL_NOT_ENABLED = (197), - ERROR_INVALID_SEGDPL = (198), - ERROR_AUTODATASEG_EXCEEDS_64k = (199), - ERROR_RING2SEG_MUST_BE_MOVABLE = (200), - ERROR_RELOC_CHAIN_XEEDS_SEGLIM = (201), - ERROR_INFLOOP_IN_RELOC_CHAIN = (202), - ERROR_ENVVAR_NOT_FOUND = (203), - ERROR_NO_SIGNAL_SENT = (205), - ERROR_FILENAME_EXCED_RANGE = (206), - ERROR_RING2_STACK_IN_USE = (207), - ERROR_META_EXPANSION_TOO_LONG = (208), - ERROR_INVALID_SIGNAL_NUMBER = (209), - ERROR_THREAD_1_INACTIVE = (210), - ERROR_LOCKED = (212), - ERROR_TOO_MANY_MODULES = (214), - ERROR_NESTING_NOT_ALLOWED = (215), - ERROR_BAD_PIPE = (230), - ERROR_PIPE_BUSY = (231), - ERROR_NO_DATA = (232), - ERROR_PIPE_NOT_CONNECTED = (233), - ERROR_MORE_DATA = (234), - ERROR_VC_DISCONNECTED = (240), - ERROR_INVALID_EA_NAME = (254), - ERROR_EA_LIST_INCONSISTENT = (255), - ERROR_NO_MORE_ITEMS = (259), - ERROR_CANNOT_COPY = (266), - ERROR_DIRECTORY = (267), - ERROR_EAS_DIDNT_FIT = (275), - ERROR_EA_FILE_CORRUPT = (276), - ERROR_EA_TABLE_FULL = (277), - ERROR_INVALID_EA_HANDLE = (278), - ERROR_EAS_NOT_SUPPORTED = (282), - ERROR_NOT_OWNER = (288), - ERROR_TOO_MANY_POSTS = (298), - ERROR_PARTIAL_COPY = (299), - ERROR_MR_MID_NOT_FOUND = (317), - ERROR_INVALID_ADDRESS = (487), - ERROR_ARITHMETIC_OVERFLOW = (534), - ERROR_PIPE_CONNECTED = (535), - ERROR_PIPE_LISTENING = (536), - ERROR_EA_ACCESS_DENIED = (994), - ERROR_OPERATION_ABORTED = (995), - ERROR_IO_INCOMPLETE = (996), - ERROR_IO_PENDING = (997), - ERROR_NOACCESS = (998), - ERROR_SWAPERROR = (999), - ERROR_STACK_OVERFLOW = (1001), - ERROR_INVALID_MESSAGE = (1002), - ERROR_CAN_NOT_COMPLETE = (1003), - ERROR_INVALID_FLAGS = (1004), - ERROR_UNRECOGNIZED_VOLUME = (1005), - ERROR_FILE_INVALID = (1006), - ERROR_FULLSCREEN_MODE = (1007), - ERROR_NO_TOKEN = (1008), - ERROR_BADDB = (1009), - ERROR_BADKEY = (1010), - ERROR_CANTOPEN = (1011), - ERROR_CANTREAD = (1012), - ERROR_CANTWRITE = (1013), - ERROR_REGISTRY_RECOVERED = (1014), - ERROR_REGISTRY_CORRUPT = (1015), - ERROR_REGISTRY_IO_FAILED = (1016), - ERROR_NOT_REGISTRY_FILE = (1017), - ERROR_KEY_DELETED = (1018), - ERROR_NO_LOG_SPACE = (1019), - ERROR_KEY_HAS_CHILDREN = (1020), - ERROR_CHILD_MUST_BE_VOLATILE = (1021), - ERROR_NOTIFY_ENUM_DIR = (1022), - ERROR_DEPENDENT_SERVICES_RUNNING = (1051), - ERROR_INVALID_SERVICE_CONTROL = (1052), - ERROR_SERVICE_REQUEST_TIMEOUT = (1053), - ERROR_SERVICE_NO_THREAD = (1054), - ERROR_SERVICE_DATABASE_LOCKED = (1055), - ERROR_SERVICE_ALREADY_RUNNING = (1056), - ERROR_INVALID_SERVICE_ACCOUNT = (1057), - ERROR_SERVICE_DISABLED = (1058), - ERROR_CIRCULAR_DEPENDENCY = (1059), - ERROR_SERVICE_DOES_NOT_EXIST = (1060), - ERROR_SERVICE_CANNOT_ACCEPT_CTRL = (1061), - ERROR_SERVICE_NOT_ACTIVE = (1062), - ERROR_FAILED_SERVICE_CONTROLLER_CONNECT = (1063), - ERROR_EXCEPTION_IN_SERVICE = (1064), - ERROR_DATABASE_DOES_NOT_EXIST = (1065), - ERROR_SERVICE_SPECIFIC_ERROR = (1066), - ERROR_PROCESS_ABORTED = (1067), - ERROR_SERVICE_DEPENDENCY_FAIL = (1068), - ERROR_SERVICE_LOGON_FAILED = (1069), - ERROR_SERVICE_START_HANG = (1070), - ERROR_INVALID_SERVICE_LOCK = (1071), - ERROR_SERVICE_MARKED_FOR_DELETE = (1072), - ERROR_SERVICE_EXISTS = (1073), - ERROR_ALREADY_RUNNING_LKG = (1074), - ERROR_SERVICE_DEPENDENCY_DELETED = (1075), - ERROR_BOOT_ALREADY_ACCEPTED = (1076), - ERROR_SERVICE_NEVER_STARTED = (1077), - ERROR_DUPLICATE_SERVICE_NAME = (1078), - ERROR_END_OF_MEDIA = (1100), - ERROR_FILEMARK_DETECTED = (1101), - ERROR_BEGINNING_OF_MEDIA = (1102), - ERROR_SETMARK_DETECTED = (1103), - ERROR_NO_DATA_DETECTED = (1104), - ERROR_PARTITION_FAILURE = (1105), - ERROR_INVALID_BLOCK_LENGTH = (1106), - ERROR_DEVICE_NOT_PARTITIONED = (1107), - ERROR_UNABLE_TO_LOCK_MEDIA = (1108), - ERROR_UNABLE_TO_UNLOAD_MEDIA = (1109), - ERROR_MEDIA_CHANGED = (1110), - ERROR_BUS_RESET = (1111), - ERROR_NO_MEDIA_IN_DRIVE = (1112), - ERROR_NO_UNICODE_TRANSLATION = (1113), - ERROR_DLL_INIT_FAILED = (1114), - ERROR_SHUTDOWN_IN_PROGRESS = (1115), - ERROR_NO_SHUTDOWN_IN_PROGRESS = (1116), - ERROR_IO_DEVICE = (1117), - ERROR_SERIAL_NO_DEVICE = (1118), - ERROR_IRQ_BUSY = (1119), - ERROR_MORE_WRITES = (1120), - ERROR_COUNTER_TIMEOUT = (1121), - ERROR_FLOPPY_ID_MARK_NOT_FOUND = (1122), - ERROR_FLOPPY_WRONG_CYLINDER = (1123), - ERROR_FLOPPY_UNKNOWN_ERROR = (1124), - ERROR_FLOPPY_BAD_REGISTERS = (1125), - ERROR_DISK_RECALIBRATE_FAILED = (1126), - ERROR_DISK_OPERATION_FAILED = (1127), - ERROR_DISK_RESET_FAILED = (1128), - ERROR_EOM_OVERFLOW = (1129), - ERROR_NOT_ENOUGH_SERVER_MEMORY = (1130), - ERROR_POSSIBLE_DEADLOCK = (1131), - ERROR_MAPPED_ALIGNMENT = (1132), - ERROR_SET_POWER_STATE_VETOED = (1140), - ERROR_SET_POWER_STATE_FAILED = (1141), - ERROR_OLD_WIN_VERSION = (1150), - ERROR_APP_WRONG_OS = (1151), - ERROR_SINGLE_INSTANCE_APP = (1152), - ERROR_RMODE_APP = (1153), - ERROR_INVALID_DLL = (1154), - ERROR_NO_ASSOCIATION = (1155), - ERROR_DDE_FAIL = (1156), - ERROR_DLL_NOT_FOUND = (1157), - ERROR_BAD_USERNAME = (2202), - ERROR_NOT_CONNECTED = (2250), - ERROR_OPEN_FILES = (2401), - ERROR_ACTIVE_CONNECTIONS = (2402), - ERROR_DEVICE_IN_USE = (2404), - ERROR_BAD_DEVICE = (1200), - ERROR_CONNECTION_UNAVAIL = (1201), - ERROR_DEVICE_ALREADY_REMEMBERED = (1202), - ERROR_NO_NET_OR_BAD_PATH = (1203), - ERROR_BAD_PROVIDER = (1204), - ERROR_CANNOT_OPEN_PROFILE = (1205), - ERROR_BAD_PROFILE = (1206), - ERROR_NOT_CONTAINER = (1207), - ERROR_EXTENDED_ERROR = (1208), - ERROR_INVALID_GROUPNAME = (1209), - ERROR_INVALID_COMPUTERNAME = (1210), - ERROR_INVALID_EVENTNAME = (1211), - ERROR_INVALID_DOMAINNAME = (1212), - ERROR_INVALID_SERVICENAME = (1213), - ERROR_INVALID_NETNAME = (1214), - ERROR_INVALID_SHARENAME = (1215), - ERROR_INVALID_PASSWORDNAME = (1216), - ERROR_INVALID_MESSAGENAME = (1217), - ERROR_INVALID_MESSAGEDEST = (1218), - ERROR_SESSION_CREDENTIAL_CONFLICT = (1219), - ERROR_REMOTE_SESSION_LIMIT_EXCEEDED = (1220), - ERROR_DUP_DOMAINNAME = (1221), - ERROR_NO_NETWORK = (1222), - ERROR_CANCELLED = (1223), - ERROR_USER_MAPPED_FILE = (1224), - ERROR_CONNECTION_REFUSED = (1225), - ERROR_GRACEFUL_DISCONNECT = (1226), - ERROR_ADDRESS_ALREADY_ASSOCIATED = (1227), - ERROR_ADDRESS_NOT_ASSOCIATED = (1228), - ERROR_CONNECTION_INVALID = (1229), - ERROR_CONNECTION_ACTIVE = (1230), - ERROR_NETWORK_UNREACHABLE = (1231), - ERROR_HOST_UNREACHABLE = (1232), - ERROR_PROTOCOL_UNREACHABLE = (1233), - ERROR_PORT_UNREACHABLE = (1234), - ERROR_REQUEST_ABORTED = (1235), - ERROR_CONNECTION_ABORTED = (1236), - ERROR_RETRY = (1237), - ERROR_CONNECTION_COUNT_LIMIT = (1238), - ERROR_LOGIN_TIME_RESTRICTION = (1239), - ERROR_LOGIN_WKSTA_RESTRICTION = (1240), - ERROR_INCORRECT_ADDRESS = (1241), - ERROR_ALREADY_REGISTERED = (1242), - ERROR_SERVICE_NOT_FOUND = (1243), - ERROR_NOT_AUTHENTICATED = (1244), - ERROR_NOT_LOGGED_ON = (1245), - ERROR_CONTINUE = (1246), - ERROR_ALREADY_INITIALIZED = (1247), - ERROR_NO_MORE_DEVICES = (1248), - ERROR_NOT_ALL_ASSIGNED = (1300), - ERROR_SOME_NOT_MAPPED = (1301), - ERROR_NO_QUOTAS_FOR_ACCOUNT = (1302), - ERROR_LOCAL_USER_SESSION_KEY = (1303), - ERROR_NULL_LM_PASSWORD = (1304), - ERROR_UNKNOWN_REVISION = (1305), - ERROR_REVISION_MISMATCH = (1306), - ERROR_INVALID_OWNER = (1307), - ERROR_INVALID_PRIMARY_GROUP = (1308), - ERROR_NO_IMPERSONATION_TOKEN = (1309), - ERROR_CANT_DISABLE_MANDATORY = (1310), - ERROR_NO_LOGON_SERVERS = (1311), - ERROR_NO_SUCH_LOGON_SESSION = (1312), - ERROR_NO_SUCH_PRIVILEGE = (1313), - ERROR_PRIVILEGE_NOT_HELD = (1314), - ERROR_INVALID_ACCOUNT_NAME = (1315), - ERROR_USER_EXISTS = (1316), - ERROR_NO_SUCH_USER = (1317), - ERROR_GROUP_EXISTS = (1318), - ERROR_NO_SUCH_GROUP = (1319), - ERROR_MEMBER_IN_GROUP = (1320), - ERROR_MEMBER_NOT_IN_GROUP = (1321), - ERROR_LAST_ADMIN = (1322), - ERROR_WRONG_PASSWORD = (1323), - ERROR_ILL_FORMED_PASSWORD = (1324), - ERROR_PASSWORD_RESTRICTION = (1325), - ERROR_LOGON_FAILURE = (1326), - ERROR_ACCOUNT_RESTRICTION = (1327), - ERROR_INVALID_LOGON_HOURS = (1328), - ERROR_INVALID_WORKSTATION = (1329), - ERROR_PASSWORD_EXPIRED = (1330), - ERROR_ACCOUNT_DISABLED = (1331), - ERROR_NONE_MAPPED = (1332), - ERROR_TOO_MANY_LUIDS_REQUESTED = (1333), - ERROR_LUIDS_EXHAUSTED = (1334), - ERROR_INVALID_SUB_AUTHORITY = (1335), - ERROR_INVALID_ACL = (1336), - ERROR_INVALID_SID = (1337), - ERROR_INVALID_SECURITY_DESCR = (1338), - ERROR_BAD_INHERITANCE_ACL = (1340), - ERROR_SERVER_DISABLED = (1341), - ERROR_SERVER_NOT_DISABLED = (1342), - ERROR_INVALID_ID_AUTHORITY = (1343), - ERROR_ALLOTTED_SPACE_EXCEEDED = (1344), - ERROR_INVALID_GROUP_ATTRIBUTES = (1345), - ERROR_BAD_IMPERSONATION_LEVEL = (1346), - ERROR_CANT_OPEN_ANONYMOUS = (1347), - ERROR_BAD_VALIDATION_CLASS = (1348), - ERROR_BAD_TOKEN_TYPE = (1349), - ERROR_NO_SECURITY_ON_OBJECT = (1350), - ERROR_CANT_ACCESS_DOMAIN_INFO = (1351), - ERROR_INVALID_SERVER_STATE = (1352), - ERROR_INVALID_DOMAIN_STATE = (1353), - ERROR_INVALID_DOMAIN_ROLE = (1354), - ERROR_NO_SUCH_DOMAIN = (1355), - ERROR_DOMAIN_EXISTS = (1356), - ERROR_DOMAIN_LIMIT_EXCEEDED = (1357), - ERROR_INTERNAL_DB_CORRUPTION = (1358), - ERROR_INTERNAL_ERROR = (1359), - ERROR_GENERIC_NOT_MAPPED = (1360), - ERROR_BAD_DESCRIPTOR_FORMAT = (1361), - ERROR_NOT_LOGON_PROCESS = (1362), - ERROR_LOGON_SESSION_EXISTS = (1363), - ERROR_NO_SUCH_PACKAGE = (1364), - ERROR_BAD_LOGON_SESSION_STATE = (1365), - ERROR_LOGON_SESSION_COLLISION = (1366), - ERROR_INVALID_LOGON_TYPE = (1367), - ERROR_CANNOT_IMPERSONATE = (1368), - ERROR_RXACT_INVALID_STATE = (1369), - ERROR_RXACT_COMMIT_FAILURE = (1370), - ERROR_SPECIAL_ACCOUNT = (1371), - ERROR_SPECIAL_GROUP = (1372), - ERROR_SPECIAL_USER = (1373), - ERROR_MEMBERS_PRIMARY_GROUP = (1374), - ERROR_TOKEN_ALREADY_IN_USE = (1375), - ERROR_NO_SUCH_ALIAS = (1376), - ERROR_MEMBER_NOT_IN_ALIAS = (1377), - ERROR_MEMBER_IN_ALIAS = (1378), - ERROR_ALIAS_EXISTS = (1379), - ERROR_LOGON_NOT_GRANTED = (1380), - ERROR_TOO_MANY_SECRETS = (1381), - ERROR_SECRET_TOO_LONG = (1382), - ERROR_INTERNAL_DB_ERROR = (1383), - ERROR_TOO_MANY___FILE___IDS = (1384), - ERROR_LOGON_TYPE_NOT_GRANTED = (1385), - ERROR_NT_CROSS_ENCRYPTION_REQUIRED = (1386), - ERROR_NO_SUCH_MEMBER = (1387), - ERROR_INVALID_MEMBER = (1388), - ERROR_TOO_MANY_SIDS = (1389), - ERROR_LM_CROSS_ENCRYPTION_REQUIRED = (1390), - ERROR_NO_INHERITANCE = (1391), - ERROR_FILE_CORRUPT = (1392), - ERROR_DISK_CORRUPT = (1393), - ERROR_NO_USER_SESSION_KEY = (1394), - ERROR_LICENSE_QUOTA_EXCEEDED = (1395), - ERROR_INVALID_WINDOW_HANDLE = (1400), - ERROR_INVALID_MENU_HANDLE = (1401), - ERROR_INVALID_CURSOR_HANDLE = (1402), - ERROR_INVALID_ACCEL_HANDLE = (1403), - ERROR_INVALID_HOOK_HANDLE = (1404), - ERROR_INVALID_DWP_HANDLE = (1405), - ERROR_TLW_WITH_WSCHILD = (1406), - ERROR_CANNOT_FIND_WND_CLASS = (1407), - ERROR_WINDOW_OF_OTHER_THREAD = (1408), - ERROR_HOTKEY_ALREADY_REGISTERED = (1409), - ERROR_CLASS_ALREADY_EXISTS = (1410), - ERROR_CLASS_DOES_NOT_EXIST = (1411), - ERROR_CLASS_HAS_WINDOWS = (1412), - ERROR_INVALID_INDEX = (1413), - ERROR_INVALID_ICON_HANDLE = (1414), - ERROR_PRIVATE_DIALOG_INDEX = (1415), - ERROR_LISTBOX_ID_NOT_FOUND = (1416), - ERROR_NO_WILDCARD_CHARACTERS = (1417), - ERROR_CLIPBOARD_NOT_OPEN = (1418), - ERROR_HOTKEY_NOT_REGISTERED = (1419), - ERROR_WINDOW_NOT_DIALOG = (1420), - ERROR_CONTROL_ID_NOT_FOUND = (1421), - ERROR_INVALID_COMBOBOX_MESSAGE = (1422), - ERROR_WINDOW_NOT_COMBOBOX = (1423), - ERROR_INVALID_EDIT_HEIGHT = (1424), - ERROR_DC_NOT_FOUND = (1425), - ERROR_INVALID_HOOK_FILTER = (1426), - ERROR_INVALID_FILTER_PROC = (1427), - ERROR_HOOK_NEEDS_HMOD = (1428), - ERROR_GLOBAL_ONLY_HOOK = (1429), - ERROR_JOURNAL_HOOK_SET = (1430), - ERROR_HOOK_NOT_INSTALLED = (1431), - ERROR_INVALID_LB_MESSAGE = (1432), - ERROR_SETCOUNT_ON_BAD_LB = (1433), - ERROR_LB_WITHOUT_TABSTOPS = (1434), - ERROR_DESTROY_OBJECT_OF_OTHER_THREAD = (1435), - ERROR_CHILD_WINDOW_MENU = (1436), - ERROR_NO_SYSTEM_MENU = (1437), - ERROR_INVALID_MSGBOX_STYLE = (1438), - ERROR_INVALID_SPI_VALUE = (1439), - ERROR_SCREEN_ALREADY_LOCKED = (1440), - ERROR_HWNDS_HAVE_DIFF_PARENT = (1441), - ERROR_NOT_CHILD_WINDOW = (1442), - ERROR_INVALID_GW_COMMAND = (1443), - ERROR_INVALID_THREAD_ID = (1444), - ERROR_NON_MDICHILD_WINDOW = (1445), - ERROR_POPUP_ALREADY_ACTIVE = (1446), - ERROR_NO_SCROLLBARS = (1447), - ERROR_INVALID_SCROLLBAR_RANGE = (1448), - ERROR_INVALID_SHOWWIN_COMMAND = (1449), - ERROR_NO_SYSTEM_RESOURCES = (1450), - ERROR_NONPAGED_SYSTEM_RESOURCES = (1451), - ERROR_PAGED_SYSTEM_RESOURCES = (1452), - ERROR_WORKING_SET_QUOTA = (1453), - ERROR_PAGEFILE_QUOTA = (1454), - ERROR_COMMITMENT_LIMIT = (1455), - ERROR_MENU_ITEM_NOT_FOUND = (1456), - ERROR_EVENTLOG_FILE_CORRUPT = (1500), - ERROR_EVENTLOG_CANT_START = (1501), - ERROR_LOG_FILE_FULL = (1502), - ERROR_EVENTLOG_FILE_CHANGED = (1503), - RPC_S_INVALID_STRING_BINDING = (1700), - RPC_S_WRONG_KIND_OF_BINDING = (1701), - RPC_S_INVALID_BINDING = (1702), - RPC_S_PROTSEQ_NOT_SUPPORTED = (1703), - RPC_S_INVALID_RPC_PROTSEQ = (1704), - RPC_S_INVALID_STRING_UUID = (1705), - RPC_S_INVALID_ENDPOINT_FORMAT = (1706), - RPC_S_INVALID_NET_ADDR = (1707), - RPC_S_NO_ENDPOINT_FOUND = (1708), - RPC_S_INVALID_TIMEOUT = (1709), - RPC_S_OBJECT_NOT_FOUND = (1710), - RPC_S_ALREADY_REGISTERED = (1711), - RPC_S_TYPE_ALREADY_REGISTERED = (1712), - RPC_S_ALREADY_LISTENING = (1713), - RPC_S_NO_PROTSEQS_REGISTERED = (1714), - RPC_S_NOT_LISTENING = (1715), - RPC_S_UNKNOWN_MGR_TYPE = (1716), - RPC_S_UNKNOWN_IF = (1717), - RPC_S_NO_BINDINGS = (1718), - RPC_S_NO_PROTSEQS = (1719), - RPC_S_CANT_CREATE_ENDPOINT = (1720), - RPC_S_OUT_OF_RESOURCES = (1721), - RPC_S_SERVER_UNAVAILABLE = (1722), - RPC_S_SERVER_TOO_BUSY = (1723), - RPC_S_INVALID_NETWORK_OPTIONS = (1724), - RPC_S_NO_CALL_ACTIVE = (1725), - RPC_S_CALL_FAILED = (1726), - RPC_S_CALL_FAILED_DNE = (1727), - RPC_S_PROTOCOL_ERROR = (1728), - RPC_S_UNSUPPORTED_TRANS_SYN = (1730), - RPC_S_UNSUPPORTED_TYPE = (1732), - RPC_S_INVALID_TAG = (1733), - RPC_S_INVALID_BOUND = (1734), - RPC_S_NO_ENTRY_NAME = (1735), - RPC_S_INVALID_NAME_SYNTAX = (1736), - RPC_S_UNSUPPORTED_NAME_SYNTAX = (1737), - RPC_S_UUID_NO_ADDRESS = (1739), - RPC_S_DUPLICATE_ENDPOINT = (1740), - RPC_S_UNKNOWN_AUTHN_TYPE = (1741), - RPC_S_MAX_CALLS_TOO_SMALL = (1742), - RPC_S_STRING_TOO_LONG = (1743), - RPC_S_PROTSEQ_NOT_FOUND = (1744), - RPC_S_PROCNUM_OUT_OF_RANGE = (1745), - RPC_S_BINDING_HAS_NO_AUTH = (1746), - RPC_S_UNKNOWN_AUTHN_SERVICE = (1747), - RPC_S_UNKNOWN_AUTHN_LEVEL = (1748), - RPC_S_INVALID_AUTH_IDENTITY = (1749), - RPC_S_UNKNOWN_AUTHZ_SERVICE = (1750), - EPT_S_INVALID_ENTRY = (1751), - EPT_S_CANT_PERFORM_OP = (1752), - EPT_S_NOT_REGISTERED = (1753), - RPC_S_NOTHING_TO_EXPORT = (1754), - RPC_S_INCOMPLETE_NAME = (1755), - RPC_S_INVALID_VERS_OPTION = (1756), - RPC_S_NO_MORE_MEMBERS = (1757), - RPC_S_NOT_ALL_OBJS_UNEXPORTED = (1758), - RPC_S_INTERFACE_NOT_FOUND = (1759), - RPC_S_ENTRY_ALREADY_EXISTS = (1760), - RPC_S_ENTRY_NOT_FOUND = (1761), - RPC_S_NAME_SERVICE_UNAVAILABLE = (1762), - RPC_S_INVALID_NAF_ID = (1763), - RPC_S_CANNOT_SUPPORT = (1764), - RPC_S_NO___FILE___AVAILABLE = (1765), - RPC_S_INTERNAL_ERROR = (1766), - RPC_S_ZERO_DIVIDE = (1767), - RPC_S_ADDRESS_ERROR = (1768), - RPC_S_FP_DIV_ZERO = (1769), - RPC_S_FP_UNDERFLOW = (1770), - RPC_S_FP_OVERFLOW = (1771), - RPC_X_NO_MORE_ENTRIES = (1772), - RPC_X_SS_CHAR_TRANS_OPEN_FAIL = (1773), - RPC_X_SS_CHAR_TRANS_SHORT_FILE = (1774), - RPC_X_SS_IN_NULL___FILE__ = (1775), - RPC_X_SS___FILE___DAMAGED = (1777), - RPC_X_SS_HANDLES_MISMATCH = (1778), - RPC_X_SS_CANNOT_GET_CALL_HANDLE = (1779), - RPC_X_NULL_REF_POINTER = (1780), - RPC_X_ENUM_VALUE_OUT_OF_RANGE = (1781), - RPC_X_BYTE_COUNT_TOO_SMALL = (1782), - RPC_X_BAD_STUB_DATA = (1783), - ERROR_INVALID_USER_BUFFER = (1784), - ERROR_UNRECOGNIZED_MEDIA = (1785), - ERROR_NO_TRUST_LSA_SECRET = (1786), - ERROR_NO_TRUST_SAM_ACCOUNT = (1787), - ERROR_TRUSTED_DOMAIN_FAILURE = (1788), - ERROR_TRUSTED_RELATIONSHIP_FAILURE = (1789), - ERROR_TRUST_FAILURE = (1790), - RPC_S_CALL_IN_PROGRESS = (1791), - ERROR_NETLOGON_NOT_STARTED = (1792), - ERROR_ACCOUNT_EXPIRED = (1793), - ERROR_REDIRECTOR_HAS_OPEN_HANDLES = (1794), - ERROR_PRINTER_DRIVER_ALREADY_INSTALLED = (1795), - ERROR_UNKNOWN_PORT = (1796), - ERROR_UNKNOWN_PRINTER_DRIVER = (1797), - ERROR_UNKNOWN_PRINTPROCESSOR = (1798), - ERROR_INVALID_SEPARATOR_FILE = (1799), - ERROR_INVALID_PRIORITY = (1800), - ERROR_INVALID_PRINTER_NAME = (1801), - ERROR_PRINTER_ALREADY_EXISTS = (1802), - ERROR_INVALID_PRINTER_COMMAND = (1803), - ERROR_INVALID_DATATYPE = (1804), - ERROR_INVALID_ENVIRONMENT = (1805), - RPC_S_NO_MORE_BINDINGS = (1806), - ERROR_NOLOGON_INTERDOMAIN_TRUST_ACCOUNT = (1807), - ERROR_NOLOGON_WORKSTATION_TRUST_ACCOUNT = (1808), - ERROR_NOLOGON_SERVER_TRUST_ACCOUNT = (1809), - ERROR_DOMAIN_TRUST_INCONSISTENT = (1810), - ERROR_SERVER_HAS_OPEN_HANDLES = (1811), - ERROR_RESOURCE_DATA_NOT_FOUND = (1812), - ERROR_RESOURCE_TYPE_NOT_FOUND = (1813), - ERROR_RESOURCE_NAME_NOT_FOUND = (1814), - ERROR_RESOURCE_LANG_NOT_FOUND = (1815), - ERROR_NOT_ENOUGH_QUOTA = (1816), - RPC_S_NO_INTERFACES = (1817), - RPC_S_CALL_CANCELLED = (1818), - RPC_S_BINDING_INCOMPLETE = (1819), - RPC_S_COMM_FAILURE = (1820), - RPC_S_UNSUPPORTED_AUTHN_LEVEL = (1821), - RPC_S_NO_PRINC_NAME = (1822), - RPC_S_NOT_RPC_ERROR = (1823), - RPC_S_UUID_LOCAL_ONLY = (1824), - RPC_S_SEC_PKG_ERROR = (1825), - RPC_S_NOT_CANCELLED = (1826), - RPC_X_INVALID_ES_ACTION = (1827), - RPC_X_WRONG_ES_VERSION = (1828), - RPC_X_WRONG_STUB_VERSION = (1829), - RPC_S_GROUP_MEMBER_NOT_FOUND = (1898), - EPT_S_CANT_CREATE = (1899), - RPC_S_INVALID_OBJECT = (1900), - ERROR_INVALID_TIME = (1901), - ERROR_INVALID_FORM_NAME = (1902), - ERROR_INVALID_FORM_SIZE = (1903), - ERROR_ALREADY_WAITING = (1904), - ERROR_PRINTER_DELETED = (1905), - ERROR_INVALID_PRINTER_STATE = (1906), - ERROR_PASSWORD_MUST_CHANGE = (1907), - ERROR_DOMAIN_CONTROLLER_NOT_FOUND = (1908), - ERROR_ACCOUNT_LOCKED_OUT = (1909), - ERROR_NO_BROWSER_SERVERS_FOUND = (6118), - ERROR_INVALID_PIXEL_FORMAT = (2000), - ERROR_BAD_DRIVER = (2001), - ERROR_INVALID_WINDOW_STYLE = (2002), - ERROR_METAFILE_NOT_SUPPORTED = (2003), - ERROR_TRANSFORM_NOT_SUPPORTED = (2004), - ERROR_CLIPPING_NOT_SUPPORTED = (2005), - ERROR_UNKNOWN_PRINT_MONITOR = (3000), - ERROR_PRINTER_DRIVER_IN_USE = (3001), - ERROR_SPOOL_FILE_NOT_FOUND = (3002), - ERROR_SPL_NO_STARTDOC = (3003), - ERROR_SPL_NO_ADDJOB = (3004), - ERROR_PRINT_PROCESSOR_ALREADY_INSTALLED = (3005), - ERROR_PRINT_MONITOR_ALREADY_INSTALLED = (3006), - ERROR_WINS_INTERNAL = (4000), - ERROR_CAN_NOT_DEL_LOCAL_WINS = (4001), - ERROR_STATIC_INIT = (4002), - ERROR_INC_BACKUP = (4003), - ERROR_FULL_BACKUP = (4004), - ERROR_REC_NON_EXISTENT = (4005), - ERROR_RPL_NOT_ALLOWED = (4006), - MAX_PATH = (260), - LF_FACESIZE = (32), - LF_FULLFACESIZE = (64), - ELF_VENDOR_SIZE = (4), - SECURITY_STATIC_TRACKING = (0), - SECURITY_DYNAMIC_TRACKING = (1), - MAX_DEFAULTCHAR = (2), - MAX_LEADBYTES = (12), - EXCEPTION_MAXIMUM_PARAMETERS = (15), - CCHDEVICENAME = (32), - CCHFORMNAME = (32), - MENU_TEXT_LEN = (40), - MAX_LANA = (254), - NCBNAMSZ = (16), - NETBIOS_NAME_LEN = (16), - OFS_MAXPATHNAME = (128), - MAX_TAB_STOPS = (32), - ANYSIZE_ARRAY = (1), - RAS_MaxCallbackNumber = (128), - RAS_MaxDeviceName = (128), - RAS_MaxDeviceType = (16), - RAS_MaxEntryName = (256), - RAS_MaxIpAddress = (15), - RAS_MaxIpxAddress = (21), - RAS_MaxPhoneNumber = (128), - UNLEN = (256), - PWLEN = (256), - CNLEN = (15), - DNLEN = (15), - MAXDWORD = (0xFFFFFFFF), - MAXWORD = (0xFFFF), - MAXBYTE = (0xFF), - MINCHAR = (0x80), - MAXCHAR = (0x7F), - MINSHORT = (0x8000), - MAXSHORT = (0x7FFF), - MINLONG = (0x80000000), - MAXLONG = (0x7FFFFFFF), - FILE_BEGIN = (0), - FILE_CURRENT = (1), - FILE_END = (2), - OF_READ = (0), - OF_READWRITE = (2), - OF_WRITE = (1), - OF_SHARE_COMPAT = (0), - OF_SHARE_DENY_NONE = (64), - OF_SHARE_DENY_READ = (48), - OF_SHARE_DENY_WRITE = (32), - OF_SHARE_EXCLUSIVE = (16), - OF_CANCEL = (2048), - OF_CREATE = (4096), - OF_DELETE = (512), - OF_EXIST = (16384), - OF_PARSE = (256), - OF_PROMPT = (8192), - OF_REOPEN = (32768), - OF_VERIFY = (1024), - HKL_NEXT = (1), - HKL_PREV = (0), - KLF_REORDER = (8), - KLF_UNLOADPREVIOUS = (4), - KLF_ACTIVATE = (1), - KLF_NOTELLSHELL = (128), - KLF_REPLACELANG = (16), - KLF_SUBSTITUTE_OK = (2), - MF_BITMAP = (0x4), - MF_DISABLED = (0x2), - MF_ENABLED = (0), - MF_GRAYED = (0x1), - MF_HELP = (0x4000), - MF_MENUBARBREAK = (0x20), - MF_MENUBREAK = (0x40), - MF_MOUSESELECT = (0x8000), - MF_OWNERDRAW = (0x100), - MF_POPUP = (0x10), - MF_SEPARATOR = (0x800), - MF_STRING = (0), - MF_SYSMENU = (0x2000), - MF_USECHECKBITMAPS = (0x200), - BLACKNESS = (0x00000042), - NOTSRCERASE = (0x001100A6), - NOTSRCCOPY = (0x00330008), - SRCERASE = (0x00440328), - DSTINVERT = (0x00550009), - PATINVERT = (0x005A0049), - SRCINVERT = (0x00660046), - SRCAND = (0x008800C6), - MERGEPAINT = (0x00BB0226), - MERGECOPY = (0x00C000CA), - SRCCOPY = (0x00CC0020), - SRCPAINT = (0x00EE0086), - PATCOPY = (0x00F00021), - PATPAINT = (0x00FB0A09), - WHITENESS = (0x00FF0062), - R2_BLACK = (1), - R2_COPYPEN = (13), - R2_MASKNOTPEN = (3), - R2_MASKPEN = (9), - R2_MASKPENNOT = (5), - R2_MERGENOTPEN = (12), - R2_MERGEPEN = (15), - R2_MERGEPENNOT = (14), - R2_NOP = (11), - R2_NOT = (6), - R2_NOTCOPYPEN = (4), - R2_NOTMASKPEN = (8), - R2_NOTMERGEPEN = (2), - R2_NOTXORPEN = (10), - R2_WHITE = (16), - R2_XORPEN = (7), - BSF_FLUSHDISK = (4), - BSF_FORCEIFHUNG = (32), - BSF_IGNORECURRENTTASK = (2), - BSF_NOHANG = (8), - BSF_POSTMESSAGE = (16), - BSF_QUERY = (1), - BSM_ALLCOMPONENTS = (0), - BSM_APPLICATIONS = (8), - BSM_INSTALLABLEDRIVERS = (4), - BSM_NETDRIVER = (2), - BSM_VXDS = (1), - BROADCAST_QUERY_DENY = (1112363332), - NMPWAIT_NOWAIT = (1), - NMPWAIT_WAIT_FOREVER = -((1)), - NMPWAIT_USE_DEFAULT_WAIT = (0), - MDITILE_SKIPDISABLED = (2), - MDITILE_HORIZONTAL = (1), - MDITILE_VERTICAL = (0), - HCBT_ACTIVATE = (5), - HCBT_CLICKSKIPPED = (6), - HCBT_CREATEWND = (3), - HCBT_DESTROYWND = (4), - HCBT_KEYSKIPPED = (7), - HCBT_MINMAX = (1), - HCBT_MOVESIZE = (0), - HCBT_QS = (2), - HCBT_SETFOCUS = (9), - HCBT_SYSCOMMAND = (8), - DM_BITSPERPEL = (0x40000), - DM_PELSWIDTH = (0x80000), - DM_PELSHEIGHT = (0x100000), - DM_DISPLAYFLAGS = (0x200000), - DM_DISPLAYFREQUENCY = (0x400000), - CDS_UPDATEREGISTRY = (1), - CDS_TEST = (2), - DISP_CHANGE_SUCCESSFUL = (0), - DISP_CHANGE_RESTART = (1), - DISP_CHANGE_BADFLAGS = -((4)), - DISP_CHANGE_FAILED = -((1)), - DISP_CHANGE_BADMODE = -((2)), - DISP_CHANGE_NOTUPDATED = -((3)), - SERVICE_NO_CHANGE = -((1)), - SERVICE_WIN32_OWN_PROCESS = (16), - SERVICE_WIN32_SHARE_PROCESS = (32), - SERVICE_KERNEL_DRIVER = (1), - SERVICE_FILE_SYSTEM_DRIVER = (2), - SERVICE_INTERACTIVE_PROCESS = (256), - SERVICE_BOOT_START = (0), - SERVICE_SYSTEM_START = (1), - SERVICE_AUTO_START = (2), - SERVICE_DEMAND_START = (3), - SERVICE_DISABLED = (4), - SERVICE_STOPPED = (1), - SERVICE_START_PENDING = (2), - SERVICE_STOP_PENDING = (3), - SERVICE_RUNNING = (4), - SERVICE_CONTINUE_PENDING = (5), - SERVICE_PAUSE_PENDING = (6), - SERVICE_PAUSED = (7), - SERVICE_ACCEPT_STOP = (1), - SERVICE_ACCEPT_PAUSE_CONTINUE = (2), - SERVICE_ACCEPT_SHUTDOWN = (4), - BST_CHECKED = (1), - BST_INDETERMINATE = (2), - BST_UNCHECKED = (0), - BST_FOCUS = (8), - BST_PUSHED = (4), - MF_BYCOMMAND = (0), - MF_BYPOSITION = (0x400), - MF_CHECKED = (0x8), - MF_UNCHECKED = (0), - MF_HILITE = (0x80), - MF_UNHILITE = (0), - CWP_ALL = (0), - CWP_SKIPINVISIBLE = (1), - CWP_SKIPDISABLED = (2), - CWP_SKIPTRANSPARENT = (4), - CE_BREAK = (16), - CE_DNS = (2048), - CE_FRAME = (8), - CE_IOE = (1024), - CE_MODE = (32768), - CE_OOP = (4096), - CE_OVERRUN = (2), - CE_PTO = (512), - CE_RXOVER = (1), - CE_RXPARITY = (4), - CE_TXFULL = (256), - RGN_AND = (1), - RGN_COPY = (5), - RGN_DIFF = (4), - RGN_OR = (2), - RGN_XOR = (3), - NULLREGION = (1), - SIMPLEREGION = (2), - COMPLEXREGION = (3), - ERROR = (0), - CDERR_DIALOGFAILURE = (0xffff), - CDERR_FINDRESFAILURE = (6), - CDERR_INITIALIZATION = (2), - CDERR_LOADRESFAILURE = (7), - CDERR_LOADSTRFAILURE = (5), - CDERR_LOCKRESFAILURE = (8), - CDERR_MEMALLOCFAILURE = (9), - CDERR_MEMLOCKFAILURE = (10), - CDERR_NOHINSTANCE = (4), - CDERR_NOHOOK = (11), - CDERR_NOTEMPLATE = (3), - CDERR_REGISTERMSGFAIL = (12), - CDERR_STRUCTSIZE = (1), - PDERR_CREATEICFAILURE = (0x1000)+(10), - PDERR_DEFAULTDIFFERENT = (0x1000)+(12), - PDERR_DNDMMISMATCH = (0x1000)+(9), - PDERR_GETDEVMODEFAIL = (0x1000)+(5), - PDERR_INITFAILURE = (0x1000)+(6), - PDERR_LOADDRVFAILURE = (0x1000)+(4), - PDERR_NODEFAULTPRN = (0x1000)+(8), - PDERR_NODEVICES = (0x1000)+(7), - PDERR_PARSEFAILURE = (0x1000)+(2), - PDERR_PRINTERNOTFOUND = (0x1000)+(11), - PDERR_RETDEFFAILURE = (0x1000)+(3), - PDERR_SETUPFAILURE = (0x1000)+(1), - CFERR_MAXLESSTHANMIN = (0x2000)+(2), - CFERR_NOFONTS = (0x2000)+(1), - FNERR_BUFFERTOOSMALL = (0x3000)+(3), - FNERR_INVALIDFILENAME = (0x3000)+(2), - FNERR_SUBCLASSFAILURE = (0x3000)+(1), - FRERR_BUFFERLENGTHZERO = (0x4000)+(1), - LOCALE_SYSTEM_DEFAULT = (0x800), - LOCALE_USER_DEFAULT = (0x400), - NORM_IGNORECASE = (1), - NORM_IGNOREKANATYPE = (65536), - NORM_IGNORENONSPACE = (2), - NORM_IGNORESYMBOLS = (4), - NORM_IGNOREWIDTH = (131072), - SORT_STRINGSORT = (4096), - LCMAP_BYTEREV = (2048), - LCMAP_FULLWIDTH = (8388608), - LCMAP_HALFWIDTH = (4194304), - LCMAP_HIRAGANA = (1048576), - LCMAP_KATAKANA = (2097152), - LCMAP_LOWERCASE = (256), - LCMAP_SORTKEY = (1024), - LCMAP_UPPERCASE = (512), - DBG_CONTINUE = (0x10002), - DBG_CONTROL_BREAK = (0x40010008), - DBG_CONTROL_C = (0x40010005), - DBG_EXCEPTION_NOT_HANDLED = (0x80010001), - DBG_TERMINATE_THREAD = (0x40010003), - DBG_TERMINATE_PROCESS = (0x40010004), - SERVICE_CONTROL_STOP = (1), - SERVICE_CONTROL_PAUSE = (2), - SERVICE_CONTROL_CONTINUE = (3), - SERVICE_CONTROL_INTERROGATE = (4), - SERVICE_CONTROL_SHUTDOWN = (5), - IMAGE_BITMAP = (0), - IMAGE_CURSOR = (2), - IMAGE_ENHMETAFILE = (1), - IMAGE_ICON = (1), - LR_COPYDELETEORG = (8), - LR_COPYRETURNORG = (4), - LR_MONOCHROME = (1), - LR_CREATEDIBSECTION = (8192), - LR_DEFAULTSIZE = (64), - DF_ALLOWOTHERACCOUNTHOOK = (0x1), - DESKTOP_CREATEMENU = (0x4), - DESKTOP_CREATEWINDOW = (0x2), - DESKTOP_ENUMERATE = (0x40), - DESKTOP_HOOKCONTROL = (0x8), - DESKTOP_JOURNALPLAYBACK = (0x20), - DESKTOP_JOURNALRECORD = (0x10), - DESKTOP_READOBJECTS = (0x1), - DESKTOP_SWITCHDESKTOP = (0x100), - DESKTOP_WRITEOBJECTS = (0x80), - WSF_VISIBLE = (0x1), - CBM_INIT = (0x4), - DIB_PAL_COLORS = (1), - DIB_RGB_COLORS = (0), - GENERIC_READ = (0x80000000), - GENERIC_WRITE = (0x40000000), - FILE_READ_DATA = (0x0001), - FILE_LIST_DIRECTORY = (0x0001), - FILE_WRITE_DATA = (0x0002), - FILE_ADD_FILE = (0x0002), - FILE_APPEND_DATA = (0x0004), - FILE_ADD_SUBDIRECTORY = (0x0004), - FILE_CREATE_PIPE_INSTANCE = (0x0004), - FILE_READ_EA = (0x0008), - FILE_READ_PROPERTIES = (FILE_READ_EA), - FILE_WRITE_EA = (0x0010), - FILE_WRITE_PROPERTIES = (FILE_WRITE_EA), - FILE_EXECUTE = (0x0020), - FILE_TRAVERSE = (0x0020), - FILE_DELETE_CHILD = (0x0040), - FILE_READ_ATTRIBUTES = (0x0080), - FILE_WRITE_ATTRIBUTES = (0x0100), - FILE_SHARE_DELETE = (4), - FILE_SHARE_READ = (1), - FILE_SHARE_WRITE = (2), - CONSOLE_TEXTMODE_BUFFER = (1), - CREATE_NEW = (1), - CREATE_ALWAYS = (2), - OPEN_EXISTING = (3), - OPEN_ALWAYS = (4), - TRUNCATE_EXISTING = (5), - INVALID_FILE_ATTRIBUTE = (-1), - FILE_ATTRIBUTE_ARCHIVE = (32), - FILE_ATTRIBUTE_COMPRESSED = (2048), - FILE_ATTRIBUTE_NORMAL = (128), - FILE_ATTRIBUTE_DIRECTORY = (16), - FILE_ATTRIBUTE_HIDDEN = (2), - FILE_ATTRIBUTE_READONLY = (1), - FILE_ATTRIBUTE_SYSTEM = (4), - FILE_ATTRIBUTE_TEMPORARY = (256), - FILE_FLAG_WRITE_THROUGH = (2147483648), - FILE_FLAG_OVERLAPPED = (1073741824), - FILE_FLAG_NO_BUFFERING = (536870912), - FILE_FLAG_RANDOM_ACCESS = (268435456), - FILE_FLAG_SEQUENTIAL_SCAN = (134217728), - FILE_FLAG_DELETE_ON_CLOSE = (67108864), - FILE_FLAG_BACKUP_SEMANTICS = (33554432), - FILE_FLAG_POSIX_SEMANTICS = (16777216), - SECURITY_ANONYMOUS = (0), - SECURITY_IDENTIFICATION = (65536), - SECURITY_IMPERSONATION = (131072), - SECURITY_DELEGATION = (196608), - SECURITY___FILE___TRACKING = (262144), - SECURITY_EFFECTIVE_ONLY = (524288), - SECURITY_SQOS_PRESENT = (1048576), - SEC_COMMIT = (134217728), - SEC_IMAGE = (16777216), - SEC_NOCACHE = (268435456), - SEC_RESERVE = (67108864), - PAGE_READONLY = (2), - PAGE_READWRITE = (4), - PAGE_WRITECOPY = (8), - PAGE_EXECUTE = (16), - PAGE_EXECUTE_READ = (32), - PAGE_EXECUTE_READWRITE = (64), - PAGE_EXECUTE_WRITECOPY = (128), - PAGE_GUARD = (256), - PAGE_NOACCESS = (1), - PAGE_NOCACHE = (512), - MEM_COMMIT = (4096), - MEM_FREE = (65536), - MEM_RESERVE = (8192), - MEM_IMAGE = (16777216), - MEM_MAPPED = (262144), - MEM_PRIVATE = (131072), - MEM_DECOMMIT = (16384), - MEM_RELEASE = (32768), - MEM_TOP_DOWN = (1048576), - EXCEPTION_GUARD_PAGE = (0x80000001), - SECTION_EXTEND_SIZE = (0x10), - SECTION_MAP_READ = (0x4), - SECTION_MAP_WRITE = (0x2), - SECTION_QUERY = (0x1), - SECTION_ALL_ACCESS = (0xf001f), - FW_DONTCARE = (0), - FW_THIN = (100), - FW_EXTRALIGHT = (200), - FW_LIGHT = (300), - FW_NORMAL = (400), - FW_REGULAR = (FW_NORMAL), - FW_MEDIUM = (500), - FW_SEMIBOLD = (600), - FW_BOLD = (700), - FW_EXTRABOLD = (800), - FW_HEAVY = (900), - ANSI_CHARSET = (0), - DEFAULT_CHARSET = (1), - SYMBOL_CHARSET = (2), - SHIFTJIS_CHARSET = (128), - HANGEUL_CHARSET = (129), - GB2312_CHARSET = (134), - CHINESEBIG5_CHARSET = (136), - GREEK_CHARSET = (161), - TURKISH_CHARSET = (162), - HEBREW_CHARSET = (177), - ARABIC_CHARSET = (178), - BALTIC_CHARSET = (186), - RUSSIAN_CHARSET = (204), - THAI_CHARSET = (222), - EASTEUROPE_CHARSET = (238), - OEM_CHARSET = (255), - OUT_DEFAULT_PRECIS = (0), - OUT_STRING_PRECIS = (1), - OUT_CHARACTER_PRECIS = (2), - OUT_STROKE_PRECIS = (3), - OUT_TT_PRECIS = (4), - OUT_DEVICE_PRECIS = (5), - OUT_RASTER_PRECIS = (6), - OUT_TT_ONLY_PRECIS = (7), - OUT_OUTLINE_PRECIS = (8), - CLIP_DEFAULT_PRECIS = (0), - CLIP_CHARACTER_PRECIS = (1), - CLIP_STROKE_PRECIS = (2), - CLIP_MASK = (15), - CLIP_LH_ANGLES = (16), - CLIP_TT_ALWAYS = (32), - CLIP_EMBEDDED = (128), - DEFAULT_QUALITY = (0), - DRAFT_QUALITY = (1), - PROOF_QUALITY = (2), - DEFAULT_PITCH = (0), - FIXED_PITCH = (1), - VARIABLE_PITCH = (2), - FF_DECORATIVE = (80), - FF_DONTCARE = (0), - FF_MODERN = (48), - FF_ROMAN = (16), - FF_SCRIPT = (64), - FF_SWISS = (32), - HS_BDIAGONAL = (3), - HS_CROSS = (4), - HS_DIAGCROSS = (5), - HS_FDIAGONAL = (2), - HS_HORIZONTAL = (0), - HS_VERTICAL = (1), - LR_DEFAULTCOLOR = (0), - LR_LOADREALSIZE = (128), - MAILSLOT_WAIT_FOREVER = (0xffffffff), - MAILSLOT_NO_MESSAGE = (0xffffffff), - CMB_MASKED = (2), - PIPE_ACCESS_DUPLEX = (3), - PIPE_ACCESS_INBOUND = (1), - PIPE_ACCESS_OUTBOUND = (2), - WRITE_DAC = (0x40000), - WRITE_OWNER = (0x80000), - ACCESS_SYSTEM_SECURITY = (0x1000000), - PIPE_TYPE_BYTE = (0), - PIPE_TYPE_MESSAGE = (4), - PIPE_READMODE_BYTE = (0), - PIPE_READMODE_MESSAGE = (2), - PIPE_WAIT = (0), - PIPE_NOWAIT = (1), - PS_GEOMETRIC = (65536), - PS_COSMETIC = (0), - PS_ALTERNATE = (8), - PS_SOLID = (0), - PS_DASH = (1), - PS_DOT = (2), - PS_DASHDOT = (3), - PS_DASHDOTDOT = (4), - PS_NULL = (5), - PS_USERSTYLE = (7), - PS_INSIDEFRAME = (6), - PS_ENDCAP_ROUND = (0), - PS_ENDCAP_SQUARE = (256), - PS_ENDCAP_FLAT = (512), - PS_JOIN_BEVEL = (4096), - PS_JOIN_MITER = (8192), - PS_JOIN_ROUND = (0), - PS_STYLE_MASK = (15), - PS_ENDCAP_MASK = (3840), - PS_TYPE_MASK = (983040), - ALTERNATE = (1), - WINDING = (2), - CREATE_DEFAULT_ERROR_MODE = (67108864), - CREATE_NEW_CONSOLE = (16), - CREATE_NEW_PROCESS_GROUP = (512), - CREATE_SEPARATE_WOW_VDM = (2048), - CREATE_SUSPENDED = (4), - CREATE_UNICODE_ENVIRONMENT = (1024), - DEBUG_PROCESS = (1), - DEBUG_ONLY_THIS_PROCESS = (2), - DETACHED_PROCESS = (8), - HIGH_PRIORITY_CLASS = (128), - IDLE_PRIORITY_CLASS = (64), - NORMAL_PRIORITY_CLASS = (32), - REALTIME_PRIORITY_CLASS = (256), - SERVICE_ALL_ACCESS = (0xf01ff), - SERVICE_CHANGE_CONFIG = (2), - SERVICE_ENUMERATE_DEPENDENTS = (8), - SERVICE_INTERROGATE = (128), - SERVICE_PAUSE_CONTINUE = (64), - SERVICE_QUERY_CONFIG = (1), - SERVICE_QUERY_STATUS = (4), - SERVICE_START = (16), - SERVICE_STOP = (32), - SERVICE_USER_DEFINED_CONTROL = (256), - SERVICE_DELETE = (0x10000), - SERVICE_READ_CONTROL = (0x20000), - SERVICE_GENERIC_EXECUTE = (0x20000000), - SERVICE_ERROR_IGNORE = (0), - SERVICE_ERROR_NORMAL = (1), - SERVICE_ERROR_SEVERE = (2), - SERVICE_ERROR_CRITICAL = (3), - TAPE_FIXED_PARTITIONS = (0), - TAPE_INITIATOR_PARTITIONS = (0x2), - TAPE_SELECT_PARTITIONS = (0x1), - TAPE_FILEMARKS = (0x1), - TAPE_LONG_FILEMARKS = (0x3), - TAPE_SETMARKS = (0), - TAPE_SHORT_FILEMARKS = (0x2), - CW_USEDEFAULT = (0x80000000), - WS_BORDER = (0x800000), - WS_CAPTION = (0xc00000), - WS_CHILD = (0x40000000), - WS_CHILDWINDOW = (0x40000000), - WS_CLIPCHILDREN = (0x2000000), - WS_CLIPSIBLINGS = (0x4000000), - WS_DISABLED = (0x8000000), - WS_DLGFRAME = (0x400000), - WS_GROUP = (0x20000), - WS_HSCROLL = (0x100000), - WS_ICONIC = (0x20000000), - WS_MAXIMIZE = (0x1000000), - WS_MAXIMIZEBOX = (0x10000), - WS_MINIMIZE = (0x20000000), - WS_MINIMIZEBOX = (0x20000), - WS_OVERLAPPED = (0), - WS_OVERLAPPEDWINDOW = (0xcf0000), - WS_POPUP = (0x80000000), - WS_POPUPWINDOW = (0x80880000), - WS_SIZEBOX = (0x40000), - WS_SYSMENU = (0x80000), - WS_TABSTOP = (0x10000), - WS_THICKFRAME = (0x40000), - WS_TILED = (0), - WS_TILEDWINDOW = (0xcf0000), - WS_VISIBLE = (0x10000000), - WS_VSCROLL = (0x200000), - MDIS_ALLCHILDSTYLES = (0x1), - BS_3STATE = (0x5), - BS_AUTO3STATE = (0x6), - BS_AUTOCHECKBOX = (0x3), - BS_AUTORADIOBUTTON = (0x9), - BS_BITMAP = (0x80), - BS_BOTTOM = (0x800), - BS_CENTER = (0x300), - BS_CHECKBOX = (0x2), - BS_DEFPUSHBUTTON = (0x1), - BS_GROUPBOX = (0x7), - BS_ICON = (0x40), - BS_LEFT = (0x100), - BS_LEFTTEXT = (0x20), - BS_MULTILINE = (0x2000), - BS_NOTIFY = (0x4000), - BS_OWNERDRAW = (0xb), - BS_PUSHBUTTON = (0), - BS_PUSHLIKE = (0x1000), - BS_RADIOBUTTON = (0x4), - BS_RIGHT = (0x200), - BS_RIGHTBUTTON = (0x20), - BS_TEXT = (0), - BS_TOP = (0x400), - BS_USERBUTTON = (0x8), - BS_VCENTER = (0xc00), - CBS_AUTOHSCROLL = (0x40), - CBS_DISABLENOSCROLL = (0x800), - CBS_DROPDOWN = (0x2), - CBS_DROPDOWNLIST = (0x3), - CBS_HASSTRINGS = (0x200), - CBS_LOWERCASE = (0x4000), - CBS_NOINTEGRALHEIGHT = (0x400), - CBS_OEMCONVERT = (0x80), - CBS_OWNERDRAWFIXED = (0x10), - CBS_OWNERDRAWVARIABLE = (0x20), - CBS_SIMPLE = (0x1), - CBS_SORT = (0x100), - CBS_UPPERCASE = (0x2000), - ES_AUTOHSCROLL = (0x80), - ES_AUTOVSCROLL = (0x40), - ES_CENTER = (0x1), - ES_LEFT = (0), - ES_LOWERCASE = (0x10), - ES_MULTILINE = (0x4), - ES_NOHIDESEL = (0x100), - ES_NUMBER = (0x2000), - ES_OEMCONVERT = (0x400), - ES_PASSWORD = (0x20), - ES_READONLY = (0x800), - ES_RIGHT = (0x2), - ES_UPPERCASE = (0x8), - ES_WANTRETURN = (0x1000), - LBS_DISABLENOSCROLL = (0x1000), - LBS_EXTENDEDSEL = (0x800), - LBS_HASSTRINGS = (0x40), - LBS_MULTICOLUMN = (0x200), - LBS_MULTIPLESEL = (0x8), - LBS_NODATA = (0x2000), - LBS_NOINTEGRALHEIGHT = (0x100), - LBS_NOREDRAW = (0x4), - LBS_NOSEL = (0x4000), - LBS_NOTIFY = (0x1), - LBS_OWNERDRAWFIXED = (0x10), - LBS_OWNERDRAWVARIABLE = (0x20), - LBS_SORT = (0x2), - LBS_STANDARD = (0xa00003), - LBS_USETABSTOPS = (0x80), - LBS_WANTKEYBOARDINPUT = (0x400), - SBS_BOTTOMALIGN = (0x4), - SBS_HORZ = (0), - SBS_LEFTALIGN = (0x2), - SBS_RIGHTALIGN = (0x4), - SBS_SIZEBOX = (0x8), - SBS_SIZEBOXBOTTOMRIGHTALIGN = (0x4), - SBS_SIZEBOXTOPLEFTALIGN = (0x2), - SBS_SIZEGRIP = (0x10), - SBS_TOPALIGN = (0x2), - SBS_VERT = (0x1), - SS_BITMAP = (0xe), - SS_BLACKFRAME = (0x7), - SS_BLACKRECT = (0x4), - SS_CENTER = (0x1), - SS_CENTERIMAGE = (0x200), - SS_ENHMETAFILE = (0xf), - SS_ETCHEDFRAME = (0x12), - SS_ETCHEDHORZ = (0x10), - SS_ETCHEDVERT = (0x11), - SS_GRAYFRAME = (0x8), - SS_GRAYRECT = (0x5), - SS_ICON = (0x3), - SS_LEFT = (0), - SS_LEFTNOWORDWRAP = (0xc), - SS_NOPREFIX = (0x80), - SS_NOTIFY = (0x100), - SS_OWNERDRAW = (0xd), - SS_REALSIZEIMAGE = (0x800), - SS_RIGHT = (0x2), - SS_RIGHTJUST = (0x400), - SS_SIMPLE = (0xb), - SS_SUNKEN = (0x1000), - SS_USERITEM = (0xa), - SS_WHITEFRAME = (0x9), - SS_WHITERECT = (0x6), - DS_3DLOOK = (0x4), - DS_ABSALIGN = (0x1), - DS_CENTER = (0x800), - DS_CENTERMOUSE = (0x1000), - DS___FILE__HELP = (0x2000), - DS_CONTROL = (0x400), - DS_FIXEDSYS = (0x8), - DS_LOCALEDIT = (0x20), - DS_MODALFRAME = (0x80), - DS_NOFAILCREATE = (0x10), - DS_NOIDLEMSG = (0x100), - DS_SETFONT = (0x40), - DS_SETFOREGROUND = (0x200), - DS_SYSMODAL = (0x2), - WS_EX_ACCEPTFILES = (0x10), - WS_EX_APPWINDOW = (0x40000), - WS_EX_CLIENTEDGE = (0x200), - WS_EX___FILE__HELP = (0x400), - WS_EX_CONTROLPARENT = (0x10000), - WS_EX_DLGMODALFRAME = (0x1), - WS_EX_LEFT = (0), - WS_EX_LEFTSCROLLBAR = (0x4000), - WS_EX_LTRREADING = (0), - WS_EX_MDICHILD = (0x40), - WS_EX_NOPARENTNOTIFY = (0x4), - WS_EX_OVERLAPPEDWINDOW = (0x300), - WS_EX_PALETTEWINDOW = (0x188), - WS_EX_RIGHT = (0x1000), - WS_EX_RIGHTSCROLLBAR = (0), - WS_EX_RTLREADING = (0x2000), - WS_EX_STATICEDGE = (0x20000), - WS_EX_TOOLWINDOW = (0x80), - WS_EX_TOPMOST = (0x8), - WS_EX_TRANSPARENT = (0x20), - WS_EX_WINDOWEDGE = (0x100), - WINSTA_ACCESSCLIPBOARD = (0x4), - WINSTA_ACCESSGLOBALATOMS = (0x20), - WINSTA_CREATEDESKTOP = (0x8), - WINSTA_ENUMDESKTOPS = (0x1), - WINSTA_ENUMERATE = (0x100), - WINSTA_EXITWINDOWS = (0x40), - WINSTA_READATTRIBUTES = (0x2), - WINSTA_READSCREEN = (0x200), - WINSTA_WRITEATTRIBUTES = (0x10), - WH_CALLWNDPROC = (4), - WH_CALLWNDPROCRET = (12), - WH_CBT = (5), - WH_DEBUG = (9), - WH_GETMESSAGE = (3), - WH_JOURNALPLAYBACK = (1), - WH_JOURNALRECORD = (0), - WH_KEYBOARD = (2), - WH_MOUSE = (7), - WH_MSGFILTER = -((1)), - WH_SHELL = (10), - WH_SYSMSGFILTER = (6), - WH_FOREGROUNDIDLE = (11), - DDD_RAW_TARGET_PATH = (1), - DDD_REMOVE_DEFINITION = (2), - DDD_EXACT_MATCH_ON_REMOVE = (4), - DC_BINNAMES = (12), - DC_BINS = (6), - DC_COPIES = (18), - DC_DRIVER = (11), - DC_DATATYPE_PRODUCED = (21), - DC_DUPLEX = (7), - DC_EMF_COMPLIANT = (20), - DC_ENUMRESOLUTIONS = (13), - DC_EXTRA = (9), - DC_FIELDS = (1), - DC_FILEDEPENDENCIES = (14), - DC_MAXEXTENT = (5), - DC_MINEXTENT = (4), - DC_ORIENTATION = (17), - DC_PAPERNAMES = (16), - DC_PAPERS = (2), - DC_PAPERSIZE = (3), - DC_SIZE = (8), - DC_TRUETYPE = (15), - DCTT_BITMAP = (0x1), - DCTT_DOWNLOAD = (0x2), - DCTT_SUBDEV = (0x4), - DC_VERSION = (10), - DC_BINADJUST = (19), - DDL_ARCHIVE = (32), - DDL_DIRECTORY = (16), - DDL_DRIVES = (16384), - DDL_EXCLUSIVE = (32768), - DDL_HIDDEN = (2), - DDL_READONLY = (1), - DDL_READWRITE = (0), - DDL_SYSTEM = (4), - DDL_POSTMSGS = (8192), - DLL_PROCESS_ATTACH = (1), - DLL_THREAD_ATTACH = (2), - DLL_PROCESS_DETACH = (0), - DLL_THREAD_DETACH = (3), - DM_IN_BUFFER = (8), - DM_MODIFY = (8), - DM_IN_PROMPT = (4), - DM_PROMPT = (4), - DM_OUT_BUFFER = (2), - DM_COPY = (2), - DM_UPDATE = (1), - IDANI_OPEN = (1), - IDANI_CLOSE = (2), - DC_ACTIVE = (1), - DC_SMALLCAP = (2), - BDR_RAISEDINNER = (4), - BDR_SUNKENINNER = (8), - BDR_RAISEDOUTER = (1), - BDR_SUNKENOUTER = (1), - EDGE_BUMP = (9), - EDGE_ETCHED = (6), - EDGE_RAISED = (5), - EDGE_SUNKEN = (10), - BF_ADJUST = (8192), - BF_BOTTOM = (8), - BF_BOTTOMLEFT = (9), - BF_BOTTOMRIGHT = (12), - BF_DIAGONAL = (16), - BF_DIAGONAL_ENDBOTTOMLEFT = (25), - BF_DIAGONAL_ENDBOTTOMRIGHT = (28), - BF_DIAGONAL_ENDTOPLEFT = (19), - BF_DIAGONAL_ENDTOPRIGHT = (22), - BF_FLAT = (16384), - BF_LEFT = (1), - BF_MIDDLE = (2048), - BF_MONO = (32768), - BF_RECT = (15), - BF_RIGHT = (4), - BF_SOFT = (4096), - BF_TOP = (2), - BF_TOPLEFT = (3), - BF_TOPRIGHT = (6), - DFC_BUTTON = (4), - DFC_CAPTION = (1), - DFC_MENU = (2), - DFC_SCROLL = (3), - DFCS_BUTTON3STATE = (8), - DFCS_BUTTONCHECK = (0), - DFCS_BUTTONPUSH = (16), - DFCS_BUTTONRADIO = (4), - DFCS_BUTTONRADIOIMAGE = (1), - DFCS_BUTTONRADIOMASK = (2), - DFCS_CAPTIONCLOSE = (0), - DFCS_CAPTIONHELP = (4), - DFCS_CAPTIONMAX = (2), - DFCS_CAPTIONMIN = (1), - DFCS_CAPTIONRESTORE = (3), - DFCS_MENUARROW = (0), - DFCS_MENUBULLET = (2), - DFCS_MENUCHECK = (1), - DFCS_SCROLLCOMBOBOX = (5), - DFCS_SCROLLDOWN = (1), - DFCS_SCROLLLEFT = (2), - DFCS_SCROLLRIGHT = (3), - DFCS_SCROLLSIZEGRIP = (8), - DFCS_SCROLLUP = (0), - DFCS_ADJUSTRECT = (8192), - DFCS_CHECKED = (1024), - DFCS_FLAT = (16384), - DFCS_INACTIVE = (256), - DFCS_MONO = (32768), - DFCS_PUSHED = (512), - DI_COMPAT = (4), - DI_DEFAULTSIZE = (8), - DI_IMAGE = (2), - DI_MASK = (1), - DI_NORMAL = (3), - DST_BITMAP = (4), - DST_COMPLEX = (0), - DST_ICON = (3), - DST_PREFIXTEXT = (2), - DST_TEXT = (1), - DSS_NORMAL = (0), - DSS_UNION = (16), - DSS_DISABLED = (32), - DSS_MONO = (128), - SBT_NOBORDERS = (256), - SBT_OWNERDRAW = (4096), - SBT_POPOUT = (512), - SBT_RTLREADING = (1024), - DT_BOTTOM = (8), - DT_CALCRECT = (1024), - DT_CENTER = (1), - DT_EDITCONTROL = (8192), - DT_END_ELLIPSIS = (32768), - DT_PATH_ELLIPSIS = (16384), - DT_EXPANDTABS = (64), - DT_EXTERNALLEADING = (512), - DT_LEFT = (0), - DT_MODIFYSTRING = (65536), - DT_NOCLIP = (256), - DT_NOPREFIX = (2048), - DT_RIGHT = (2), - DT_RTLREADING = (131072), - DT_SINGLELINE = (32), - DT_TABSTOP = (128), - DT_TOP = (0), - DT_VCENTER = (4), - DT_WORDBREAK = (16), - DT_INTERNAL = (4096), - DUPLICATE_CLOSE_SOURCE = (1), - DUPLICATE_SAME_ACCESS = (2), - FILE_MAP_ALL_ACCESS = (0xf001f), - FILE_MAP_READ = (4), - FILE_MAP_WRITE = (2), - FILE_MAP_COPY = (1), - MUTEX_ALL_ACCESS = (0x1f0001), - MUTEX_MODIFY_STATE = (1), - SYNCHRONIZE = (0x100000), - SEMAPHORE_ALL_ACCESS = (0x1f0003), - SEMAPHORE_MODIFY_STATE = (2), - EVENT_ALL_ACCESS = (0x1f0003), - EVENT_MODIFY_STATE = (2), - KEY_ALL_ACCESS = (0xf003f), - KEY_CREATE_LINK = (32), - KEY_CREATE_SUB_KEY = (4), - KEY_ENUMERATE_SUB_KEYS = (8), - KEY_EXECUTE = (0x20019), - KEY_NOTIFY = (16), - KEY_QUERY_VALUE = (1), - KEY_READ = (0x20019), - KEY_SET_VALUE = (2), - KEY_WRITE = (0x20006), - PROCESS_ALL_ACCESS = (0x1f0fff), - PROCESS_CREATE_PROCESS = (128), - PROCESS_CREATE_THREAD = (2), - PROCESS_DUP_HANDLE = (64), - PROCESS_QUERY_INFORMATION = (1024), - PROCESS_SET_INFORMATION = (512), - PROCESS_TERMINATE = (1), - PROCESS_VM_OPERATION = (8), - PROCESS_VM_READ = (16), - PROCESS_VM_WRITE = (32), - THREAD_ALL_ACCESS = (0x1f03ff), - THREAD_DIRECT_IMPERSONATION = (512), - THREAD_GET___FILE__ = (8), - THREAD_IMPERSONATE = (256), - THREAD_QUERY_INFORMATION = (64), - THREAD_SET___FILE__ = (16), - THREAD_SET_INFORMATION = (32), - THREAD_SET_THREAD_TOKEN = (128), - THREAD_SUSPEND_RESUME = (2), - THREAD_TERMINATE = (1), - WB_ISDELIMITER = (2), - WB_LEFT = (0), - WB_RIGHT = (1), - SB_BOTH = (3), - SB_CTL = (2), - SB_HORZ = (0), - SB_VERT = (1), - ESB_DISABLE_BOTH = (3), - ESB_DISABLE_DOWN = (2), - ESB_DISABLE_LEFT = (1), - ESB_DISABLE_LTUP = (1), - ESB_DISABLE_RIGHT = (2), - ESB_DISABLE_RTDN = (2), - ESB_DISABLE_UP = (1), - ESB_ENABLE_BOTH = (0), - SB_LINEUP = (0), - SB_LINEDOWN = (1), - SB_LINELEFT = (0), - SB_LINERIGHT = (1), - SB_PAGEUP = (2), - SB_PAGEDOWN = (3), - SB_PAGELEFT = (2), - SB_PAGERIGHT = (3), - SB_THUMBPOSITION = (4), - SB_THUMBTRACK = (5), - SB_ENDSCROLL = (8), - SB_LEFT = (6), - SB_RIGHT = (7), - SB_BOTTOM = (7), - SB_TOP = (6), - ENUM_ALL_CALENDARS = -((1)), - DATE_SHORTDATE = (1), - DATE_LONGDATE = (2), - SERVICE_ACTIVE = (1), - SERVICE_INACTIVE = (2), - DEVICE_FONTTYPE = (2), - RASTER_FONTTYPE = (1), - TRUETYPE_FONTTYPE = (4), - OBJ_BRUSH = (2), - OBJ_PEN = (1), - OBJ_PAL = (5), - OBJ_FONT = (6), - OBJ_BITMAP = (7), - OBJ_EXTPEN = (11), - OBJ_REGION = (8), - OBJ_DC = (3), - OBJ_MEMDC = (10), - OBJ_METAFILE = (9), - OBJ_METADC = (4), - OBJ_ENHMETAFILE = (13), - OBJ_ENHMETADC = (12), - SERVICE_WIN32 = (48), - SERVICE_DRIVER = (11), - CP_INSTALLED = (1), - CP_SUPPORTED = (2), - LCID_INSTALLED = (1), - LCID_SUPPORTED = (2), - TAPE_ERASE_LONG = (0x1), - TAPE_ERASE_SHORT = (0), - SP_ERROR = -((1)), - SP_OUTOFDISK = -((4)), - SP_OUTOFMEMORY = -((5)), - SP_USERABORT = -((3)), - PHYSICALWIDTH = (110), - PHYSICALHEIGHT = (111), - PHYSICALOFFSETX = (112), - PHYSICALOFFSETY = (113), - SCALINGFACTORX = (114), - SCALINGFACTORY = (115), - QUERYESCSUPPORT = (8), - cABORTDOC = (2), - cENDDOC = (11), - GETPHYSPAGESIZE = (12), - GETPRINTINGOFFSET = (13), - GETSCALINGFACTOR = (14), - NEWFRAME = (1), - NEXTBAND = (3), - PASSTHROUGH = (19), - cSETABORTPROC = (9), - cSTARTDOC = (10), - CLRDTR = (6), - CLRRTS = (4), - SETDTR = (5), - SETRTS = (3), - SETXOFF = (1), - SETXON = (2), - SETBREAK = (8), - CLRBREAK = (9), - EWX_FORCE = (4), - EWX_LOGOFF = (0), - EWX_POWEROFF = (8), - EWX_REBOOT = (2), - EWX_SHUTDOWN = (1), - FLOODFILLBORDER = (0), - FLOODFILLSURFACE = (1), - ETO_CLIPPED = (4), - ETO_GLYPH_INDEX = (16), - ETO_OPAQUE = (2), - ETO_RTLREADING = (128), - FOREGROUND_BLUE = (1), - FOREGROUND_GREEN = (2), - FOREGROUND_RED = (4), - FOREGROUND_INTENSITY = (8), - BACKGROUND_BLUE = (16), - BACKGROUND_GREEN = (32), - BACKGROUND_RED = (64), - BACKGROUND_INTENSITY = (128), - FILE_NOTIFY_CHANGE_FILE_NAME = (1), - FILE_NOTIFY_CHANGE_DIR_NAME = (2), - FILE_NOTIFY_CHANGE_ATTRIBUTES = (4), - FILE_NOTIFY_CHANGE_SIZE = (8), - FILE_NOTIFY_CHANGE_LAST_WRITE = (16), - FILE_NOTIFY_CHANGE_SECURITY = (256), - MAP_FOLDCZONE = (16), - MAP_FOLDDIGITS = (128), - MAP_PRECOMPOSED = (32), - MAP_COMPOSITE = (64), - HC_ACTION = (0), - FORMAT_MESSAGE_ALLOCATE_BUFFER = (256), - FORMAT_MESSAGE_IGNORE_INSERTS = (512), - FORMAT_MESSAGE_FROM_STRING = (1024), - FORMAT_MESSAGE_FROM_HMODULE = (2048), - FORMAT_MESSAGE_FROM_SYSTEM = (4096), - FORMAT_MESSAGE_ARGUMENT_ARRAY = (8192), - FORMAT_MESSAGE_MAX_WIDTH_MASK = (255), - GDICOMMENT_WINDOWS_METAFILE = -((2147483647)), - GDICOMMENT_BEGINGROUP = (2), - GDICOMMENT_ENDGROUP = (3), - GDICOMMENT_MULTIFORMATS = (1073741828), - GDICOMMENT_IDENTIFIER = (1128875079), - CTRL_C_EVENT = (0), - CTRL_BREAK_EVENT = (1), - CTRL_CLOSE_EVENT = (2), - CTRL_LOGOFF_EVENT = (5), - CTRL_SHUTDOWN_EVENT = (6), - AD_COUNTERCLOCKWISE = (1), - AD_CLOCKWISE = (2), - SCS_32BIT_BINARY = (0), - SCS_DOS_BINARY = (1), - SCS_OS216_BINARY = (5), - SCS_PIF_BINARY = (3), - SCS_POSIX_BINARY = (4), - SCS_WOW_BINARY = (2), - DCB_DISABLE = (8), - DCB_ENABLE = (4), - DCB_RESET = (1), - DCB_SET = (3), - DCB_ACCUMULATE = (2), - GCP_DBCS = (1), - GCP_ERROR = (0x8000), - GCP_CLASSIN = (0x80000), - GCP_DIACRITIC = (256), - GCP_DISPLAYZWG = (0x400000), - GCP_GLYPHSHAPE = (16), - GCP_JUSTIFY = (0x10000), - GCP_JUSTIFYIN = (0x200000), - GCP_KASHIDA = (1024), - GCP_LIGATE = (32), - GCP_MAXEXTENT = (0x100000), - GCP_NEUTRALOVERRIDE = (0x2000000), - GCP_NUMERICOVERRIDE = (0x1000000), - GCP_NUMERICSLATIN = (0x4000000), - GCP_NUMERICSLOCAL = (0x8000000), - GCP_REORDER = (2), - GCP_SYMSWAPOFF = (0x800000), - GCP_USEKERNING = (8), - FLI_GLYPHS = (0x40000), - FLI_MASK = (0x103b), - GCW_ATOM = -((32)), - GCL_CBCLSEXTRA = -((20)), - GCL_CBWNDEXTRA = -((18)), - GCL_HBRBACKGROUND = -((10)), - GCL_HCURSOR = -((12)), - GCL_HICON = -((14)), - GCL_HICONSM = -((34)), - GCL_HMODULE = -((16)), - GCL_MENUNAME = -((8)), - GCL_STYLE = -((26)), - GCL_WNDPROC = -((24)), - CF_BITMAP = (2), - CF_DIB = (8), - CF_PALETTE = (9), - CF_ENHMETAFILE = (14), - CF_METAFILEPICT = (3), - CF_OEMTEXT = (7), - CF_TEXT = (1), - CF_UNICODETEXT = (13), - CF_DIF = (5), - CF_DSPBITMAP = (130), - CF_DSPENHMETAFILE = (142), - CF_DSPMETAFILEPICT = (131), - CF_DSPTEXT = (129), - CF_GDIOBJFIRST = (768), - CF_GDIOBJLAST = (1023), - CF_HDROP = (15), - CF_LOCALE = (16), - CF_OWNERDISPLAY = (128), - CF_PENDATA = (10), - CF_PRIVATEFIRST = (512), - CF_PRIVATELAST = (767), - CF_RIFF = (11), - CF_SYLK = (4), - CF_WAVE = (12), - CF_TIFF = (6), - EV_BREAK = (64), - EV_CTS = (8), - EV_DSR = (16), - EV_ERR = (128), - EV_EVENT1 = (2048), - EV_EVENT2 = (4096), - EV_PERR = (512), - EV_RING = (256), - EV_RLSD = (32), - EV_RX80FULL = (1024), - EV_RXCHAR = (1), - EV_RXFLAG = (2), - EV_TXEMPTY = (4), - MS_CTS_ON = (0x10), - MS_DSR_ON = (0x20), - MS_RING_ON = (0x40), - MS_RLSD_ON = (0x80), - MAX_COMPUTERNAME_LENGTH = (15), - ENABLE_LINE_INPUT = (2), - ENABLE_ECHO_INPUT = (4), - ENABLE_PROCESSED_INPUT = (1), - ENABLE_WINDOW_INPUT = (8), - ENABLE_MOUSE_INPUT = (16), - ENABLE_PROCESSED_OUTPUT = (1), - ENABLE_WRAP_AT_EOL_OUTPUT = (2), - CP_ACP = (0), - CP_MACCP = (2), - CP_OEMCP = (1), - CP_UTF8 = 65001, - DATE_USE_ALT_CALENDAR = (4), - DCX_WINDOW = (0x1), - DCX_CACHE = (0x2), - DCX_PARENTCLIP = (0x20), - DCX_CLIPSIBLINGS = (0x10), - DCX_CLIPCHILDREN = (0x8), - DCX_NORESETATTRS = (0x4), - DCX_LOCKWINDOWUPDATE = (0x400), - DCX_EXCLUDERGN = (0x40), - DCX_INTERSECTRGN = (0x80), - DCX_VALIDATE = (0x200000), - DRIVERVERSION = (0), - TECHNOLOGY = (2), - DT_PLOTTER = (0), - DT_RASDISPLAY = (1), - DT_RASPRINTER = (2), - DT_RASCAMERA = (3), - DT_CHARSTREAM = (4), - DT_METAFILE = (5), - DT_DISPFILE = (6), - HORZSIZE = (4), - VERTSIZE = (6), - HORZRES = (8), - VERTRES = (10), - LOGPIXELSX = (88), - LOGPIXELSY = (90), - BITSPIXEL = (12), - PLANES = (14), - NUMBRUSHES = (16), - NUMPENS = (18), - NUMFONTS = (22), - NUMCOLORS = (24), - ASPECTX = (40), - ASPECTY = (42), - ASPECTXY = (44), - PDEVICESIZE = (26), - CLIPCAPS = (36), - SIZEPALETTE = (104), - NUMRESERVED = (106), - COLORRES = (108), - VREFRESH = (116), - DESKTOPHORZRES = (118), - DESKTOPVERTRES = (117), - BLTALIGNMENT = (119), - RASTERCAPS = (38), - RC_BANDING = (2), - RC_BITBLT = (1), - RC_BITMAP64 = (8), - RC_DI_BITMAP = (128), - RC_DIBTODEV = (512), - RC_FLOODFILL = (4096), - RC_GDI20_OUTPUT = (16), - RC_PALETTE = (256), - RC_SCALING = (4), - RC_STRETCHBLT = (2048), - RC_STRETCHDIB = (8192), - CURVECAPS = (28), - CC_NONE = (0), - CC_CIRCLES = (1), - CC_PIE = (2), - CC_CHORD = (4), - CC_ELLIPSES = (8), - CC_WIDE = (16), - CC_STYLED = (32), - CC_WIDESTYLED = (64), - CC_INTERIORS = (128), - CC_ROUNDRECT = (256), - LINECAPS = (30), - LC_NONE = (0), - LC_POLYLINE = (2), - LC_MARKER = (4), - LC_POLYMARKER = (8), - LC_WIDE = (16), - LC_STYLED = (32), - LC_WIDESTYLED = (64), - LC_INTERIORS = (128), - POLYGONALCAPS = (32), - PC_NONE = (0), - PC_POLYGON = (1), - PC_RECTANGLE = (2), - PC_WINDPOLYGON = (4), - PC_SCANLINE = (8), - PC_WIDE = (16), - PC_STYLED = (32), - PC_WIDESTYLED = (64), - PC_INTERIORS = (128), - TEXTCAPS = (34), - TC_OP_CHARACTER = (1), - TC_OP_STROKE = (2), - TC_CP_STROKE = (4), - TC_CR_90 = (8), - TC_CR_ANY = (16), - TC_SF_X_YINDEP = (32), - TC_SA_DOUBLE = (64), - TC_SA_INTEGER = (128), - TC_SA_CONTIN = (256), - TC_EA_DOUBLE = (512), - TC_IA_ABLE = (1024), - TC_UA_ABLE = (2048), - TC_SO_ABLE = (4096), - TC_RA_ABLE = (8192), - TC_VA_ABLE = (16384), - TC_RESERVED = (32768), - TC_SCROLLBLT = (65536), - PC_PATHS = (512), - DRIVE_REMOVABLE = (2), - DRIVE_FIXED = (3), - DRIVE_REMOTE = (4), - DRIVE_CDROM = (5), - DRIVE_RAMDISK = (6), - DRIVE_UNKNOWN = (0), - DRIVE_NO_ROOT_DIR = (1), - EXCEPTION_ACCESS_VIOLATION = (0xc0000005), - EXCEPTION_BREAKPOINT = (0x80000003), - EXCEPTION_DATATYPE_MISALIGNMENT = (0x80000002), - EXCEPTION_SINGLE_STEP = (0x80000004), - EXCEPTION_ARRAY_BOUNDS_EXCEEDED = (0xc000008c), - EXCEPTION_FLT_DENORMAL_OPERAND = (0xc000008d), - EXCEPTION_FLT_DIVIDE_BY_ZERO = (0xc000008e), - EXCEPTION_FLT_INEXACT_RESULT = (0xc000008f), - EXCEPTION_FLT_INVALID_OPERATION = (0xc0000090), - EXCEPTION_FLT_OVERFLOW = (0xc0000091), - EXCEPTION_FLT_STACK_CHECK = (0xc0000092), - EXCEPTION_FLT_UNDERFLOW = (0xc0000093), - EXCEPTION_INT_DIVIDE_BY_ZERO = (0xc0000094), - EXCEPTION_INT_OVERFLOW = (0xc0000095), - EXCEPTION_INVALID_HANDLE = (0xc0000008), - EXCEPTION_PRIV_INSTRUCTION = (0xc0000096), - EXCEPTION_NONCONTINUABLE_EXCEPTION = (0xc0000025), - EXCEPTION_NONCONTINUABLE = (0x1), - EXCEPTION_STACK_OVERFLOW = (0xc00000fd), - EXCEPTION_INVALID_DISPOSITION = (0xc0000026), - FILE_TYPE_UNKNOWN = (0), - FILE_TYPE_DISK = (1), - FILE_TYPE_CHAR = (2), - FILE_TYPE_PIPE = (3), - GGO_BITMAP = (1), - GGO_NATIVE = (2), - GGO_METRICS = (0), - GGO_GRAY2_BITMAP = (4), - GGO_GRAY4_BITMAP = (5), - GGO_GRAY8_BITMAP = (6), - GDI_ERROR = (0xffffffff), - GM_COMPATIBLE = (1), - GM_ADVANCED = (2), - HANDLE_FLAG_INHERIT = (1), - HANDLE_FLAG_PROTECT_FROM_CLOSE = (2), -} -char* RT_ACCELERATOR = cast(char*) ((9)); -char* RT_BITMAP = cast(char*) ((2)); -char* RT_DIALOG = cast(char*) ((5)); -char* RT_FONT = cast(char*) ((8)); -char* RT_FONTDIR = cast(char*) ((7)); -char* RT_MENU = cast(char*) ((4)); -char* RT_RCDATA = cast(char*) ((10)); -char* RT_STRING = cast(char*) ((6)); -char* RT_MESSAGETABLE = cast(char*) ((11)); -char* RT_CURSOR = cast(char*) ((1)); -char* RT_GROUP_CURSOR = cast(char*) ((12)); -char* RT_ICON = cast(char*) ((3)); -char* RT_GROUP_ICON = cast(char*) ((13)); -char* RT_VERSION = cast(char*) ((16)); -char* IDC_ARROW = cast(char*) ((32512)); -char* IDC_IBEAM = cast(char*) ((32513)); -char* IDC_WAIT = cast(char*) ((32514)); -char* IDC_CROSS = cast(char*) ((32515)); -char* IDC_UPARROW = cast(char*) ((32516)); -char* IDC_SIZENWSE = cast(char*) ((32642)); -char* IDC_SIZENESW = cast(char*) ((32643)); -char* IDC_SIZEWE = cast(char*) ((32644)); -char* IDC_SIZENS = cast(char*) ((32645)); -char* IDC_SIZEALL = cast(char*) ((32646)); -char* IDC_NO = cast(char*) ((32648)); -char* IDC_APPSTARTING = cast(char*) ((32650)); -char* IDC_HELP = cast(char*) ((32651)); -char* IDI_APPLICATION = cast(char*) ((32512)); -char* IDI_HAND = cast(char*) ((32513)); -char* IDI_QUESTION = cast(char*) ((32514)); -char* IDI_EXCLAMATION = cast(char*) ((32515)); -char* IDI_ASTERISK = cast(char*) ((32516)); -char* IDI_WINLOGO = cast(char*) ((32517)); -char* IDC_SIZE = cast(char*) ((32640)); -char* IDC_ICON = cast(char*) ((32641)); -enum : DWORD { - MM_ANISOTROPIC = (8), - MM_HIENGLISH = (5), - MM_HIMETRIC = (3), - MM_ISOTROPIC = (7), - MM_LOENGLISH = (4), - MM_LOMETRIC = (2), - MM_TEXT = (1), - MM_TWIPS = (6), - GMDI_GOINTOPOPUPS = (0x2), - GMDI_USEDISABLED = (0x1), - PM_NOREMOVE = (0), - PM_REMOVE = (1), - PM_NOYIELD = (2), - PIPE_CLIENT_END = (0), - PIPE_SERVER_END = (1), - GW_HWNDNEXT = (2), - GW_HWNDPREV = (3), - GW_CHILD = (5), - GW_HWNDFIRST = (0), - GW_HWNDLAST = (1), - GW_OWNER = (4), - PT_MOVETO = (6), - PT_LINETO = (2), - PT_BEZIERTO = (4), - PT_CLOSEFIGURE = (1), - SHUTDOWN_NORETRY = (1), - QS_ALLEVENTS = (191), - QS_ALLINPUT = (255), - QS_HOTKEY = (128), - QS_INPUT = (7), - QS_KEY = (1), - QS_MOUSE = (6), - QS_MOUSEBUTTON = (4), - QS_MOUSEMOVE = (2), - QS_PAINT = (32), - QS_POSTMESSAGE = (8), - QS_SENDMESSAGE = (64), - QS_TIMER = (16), - SIF_ALL = (23), - SIF_PAGE = (2), - SIF_POS = (4), - SIF_RANGE = (1), - SIF_DISABLENOSCROLL = (8), - STD_INPUT_HANDLE = -(10), - STD_OUTPUT_HANDLE = -(11), - STD_ERROR_HANDLE = -(12), - BLACK_BRUSH = (4), - DKGRAY_BRUSH = (3), - GRAY_BRUSH = (2), - HOLLOW_BRUSH = (5), - LTGRAY_BRUSH = (1), - NULL_BRUSH = (5), - WHITE_BRUSH = (0), - BLACK_PEN = (7), - NULL_PEN = (8), - WHITE_PEN = (6), - ANSI_FIXED_FONT = (11), - ANSI_VAR_FONT = (12), - DEVICE_DEFAULT_FONT = (14), - DEFAULT_GUI_FONT = (17), - OEM_FIXED_FONT = (10), - SYSTEM_FONT = (13), - SYSTEM_FIXED_FONT = (16), - DEFAULT_PALETTE = (15), - CT_CTYPE1 = (1), - CT_CTYPE2 = (2), - CT_CTYPE3 = (4), - C1_UPPER = (1), - C1_LOWER = (2), - C1_DIGIT = (4), - C1_SPACE = (8), - C1_PUNCT = (16), - C1_CNTRL = (32), - C1_BLANK = (64), - C1_XDIGIT = (128), - C1_ALPHA = (256), - C2_LEFTTORIGHT = (1), - C2_RIGHTTOLEFT = (2), - C2_EUROPENUMBER = (3), - C2_EUROPESEPARATOR = (4), - C2_EUROPETERMINATOR = (5), - C2_ARABICNUMBER = (6), - C2_COMMONSEPARATOR = (7), - C2_BLOCKSEPARATOR = (8), - C2_SEGMENTSEPARATOR = (9), - C2_WHITESPACE = (10), - C2_OTHERNEUTRAL = (11), - C2_NOTAPPLICABLE = (0), - C3_NONSPACING = (1), - C3_DIACRITIC = (2), - C3_VOWELMARK = (4), - C3_SYMBOL = (8), - C3_KATAKANA = (16), - C3_HIRAGANA = (32), - C3_HALFWIDTH = (64), - C3_FULLWIDTH = (128), - C3_IDEOGRAPH = (256), - C3_KASHIDA = (512), - C3_ALPHA = (32768), - C3_NOTAPPLICABLE = (0), - COLOR_3DDKSHADOW = (21), - COLOR_3DFACE = (15), - COLOR_3DHILIGHT = (20), - COLOR_3DLIGHT = (22), - COLOR_BTNHILIGHT = (20), - COLOR_3DSHADOW = (16), - COLOR_ACTIVEBORDER = (10), - COLOR_ACTIVECAPTION = (2), - COLOR_APPWORKSPACE = (12), - COLOR_BACKGROUND = (1), - COLOR_DESKTOP = (1), - COLOR_BTNFACE = (15), - COLOR_BTNHIGHLIGHT = (20), - COLOR_BTNSHADOW = (16), - COLOR_BTNTEXT = (18), - COLOR_CAPTIONTEXT = (9), - COLOR_GRAYTEXT = (17), - COLOR_HIGHLIGHT = (13), - COLOR_HIGHLIGHTTEXT = (14), - COLOR_INACTIVEBORDER = (11), - COLOR_INACTIVECAPTION = (3), - COLOR_INACTIVECAPTIONTEXT = (19), - COLOR_INFOBK = (24), - COLOR_INFOTEXT = (23), - COLOR_MENU = (4), - COLOR_MENUTEXT = (7), - COLOR_SCROLLBAR = (0), - COLOR_WINDOW = (5), - COLOR_WINDOWFRAME = (6), - COLOR_WINDOWTEXT = (8), - SM_CYMIN = (29), - SM_CXMIN = (28), - SM_ARRANGE = (56), - SM_CLEANBOOT = (67), - SM_CMETRICS = (76), - SM_CMOUSEBUTTONS = (43), - SM_CXBORDER = (5), - SM_CYBORDER = (6), - SM_CXCURSOR = (13), - SM_CYCURSOR = (14), - SM_CXDLGFRAME = (7), - SM_CYDLGFRAME = (8), - SM_CXDOUBLECLK = (36), - SM_CYDOUBLECLK = (37), - SM_CXDRAG = (68), - SM_CYDRAG = (69), - SM_CXEDGE = (45), - SM_CYEDGE = (46), - SM_CXFIXEDFRAME = (7), - SM_CYFIXEDFRAME = (8), - SM_CXFRAME = (32), - SM_CYFRAME = (33), - SM_CXFULLSCREEN = (16), - SM_CYFULLSCREEN = (17), - SM_CXHSCROLL = (21), - SM_CYHSCROLL = (3), - SM_CXHTHUMB = (10), - SM_CXICON = (11), - SM_CYICON = (12), - SM_CXICONSPACING = (38), - SM_CYICONSPACING = (39), - SM_CXMAXIMIZED = (61), - SM_CYMAXIMIZED = (62), - SM_CXMAXTRACK = (59), - SM_CYMAXTRACK = (60), - SM_CXMENUCHECK = (71), - SM_CYMENUCHECK = (72), - SM_CXMENUSIZE = (54), - SM_CYMENUSIZE = (55), - SM_CXMINIMIZED = (57), - SM_CYMINIMIZED = (58), - SM_CXMINSPACING = (47), - SM_CYMINSPACING = (48), - SM_CXMINTRACK = (34), - SM_CYMINTRACK = (35), - SM_CXSCREEN = (0), - SM_CYSCREEN = (1), - SM_CXSIZE = (30), - SM_CYSIZE = (31), - SM_CXSIZEFRAME = (32), - SM_CYSIZEFRAME = (33), - SM_CXSMICON = (49), - SM_CYSMICON = (50), - SM_CXSMSIZE = (52), - SM_CYSMSIZE = (53), - SM_CXVSCROLL = (2), - SM_CYVSCROLL = (20), - SM_CYVTHUMB = (9), - SM_CYCAPTION = (4), - SM_CYKANJIWINDOW = (18), - SM_CYMENU = (15), - SM_CYSMCAPTION = (51), - SM_DBCSENABLED = (42), - SM_DEBUG = (22), - SM_MENUDROPALIGNMENT = (40), - SM_MIDEASTENABLED = (74), - SM_MOUSEPRESENT = (19), - SM_MOUSEWHEELPRESENT = (75), - SM_NETWORK = (63), - SM_PENWINDOWS = (41), - SM_SECURE = (44), - SM_SHOWSOUNDS = (70), - SM_SLOWMACHINE = (73), - SM_SWAPBUTTON = (23), - ARW_BOTTOMLEFT = (0), - ARW_BOTTOMRIGHT = (0x1), - ARW_HIDE = (0x8), - ARW_TOPLEFT = (0x2), - ARW_TOPRIGHT = (0x3), - ARW_DOWN = (0x4), - ARW_LEFT = (0), - ARW_RIGHT = (0), - ARW_UP = (0x4), - SYSPAL_NOSTATIC = (2), - SYSPAL_STATIC = (1), - SYSPAL_ERROR = (0), - GET_TAPE_MEDIA_INFORMATION = (0), - GET_TAPE_DRIVE_INFORMATION = (1), - SET_TAPE_MEDIA_INFORMATION = (0), - SET_TAPE_DRIVE_INFORMATION = (1), - TAPE_ABSOLUTE_POSITION = (0), - TAPE_LOGICAL_POSITION = (0x1), - TA_BASELINE = (24), - TA_BOTTOM = (8), - TA_TOP = (0), - TA_CENTER = (6), - TA_LEFT = (0), - TA_RIGHT = (2), - TA_RTLREADING = (256), - TA_NOUPDATECP = (0), - TA_UPDATECP = (1), - VTA_BASELINE = (24), - VTA_CENTER = (6), - THREAD_PRIORITY_ABOVE_NORMAL = (1), - THREAD_PRIORITY_BELOW_NORMAL = -((1)), - THREAD_PRIORITY_HIGHEST = (2), - THREAD_PRIORITY_IDLE = -((15)), - THREAD_PRIORITY_LOWEST = -((2)), - THREAD_PRIORITY_NORMAL = (0), - THREAD_PRIORITY_TIME_CRITICAL = (15), - THREAD_PRIORITY_ERROR_RETURN = (2147483647), - TLS_MINIMUM_AVAILABLE = (64), - TIME_NOMINUTESORSECONDS = (1), - TIME_NOSECONDS = (2), - TIME_NOTIMEMARKER = (4), - TIME_FORCE24HOURFORMAT = (8), - TIME_ZONE_ID_INVALID = -(1), - TIME_ZONE_ID_UNKNOWN = (0), - TIME_ZONE_ID_STANDARD = (1), - TIME_ZONE_ID_DAYLIGHT = (2), - UOI_FLAGS = (1), - UOI_NAME = (2), - UOI_TYPE = (3), - FS_CASE_IS_PRESERVED = (2), - FS_CASE_SENSITIVE = (1), - FS_UNICODE_STORED_ON_DISK = (4), - FS_PERSISTENT_ACLS = (8), - FS_FILE_COMPRESSION = (16), - FS_VOL_IS_COMPRESSED = (32768), - GWL_EXSTYLE = -((20)), - GWL_STYLE = -((16)), - GWL_WNDPROC = -((4)), - GWL_HINSTANCE = -((6)), - GWL_HWNDPARENT = -((8)), - GWL_ID = -((12)), - GWL_USERDATA = -((21)), - DWL_DLGPROC = (4), - DWL_MSGRESULT = (0), - DWL_USER = (8), - GMEM_FIXED = (0), - GMEM_MOVEABLE = (2), - GPTR = (64), - GHND = (66), - GMEM_DDESHARE = (8192), - GMEM_DISCARDABLE = (256), - GMEM_LOWER = (4096), - GMEM_NOCOMPACT = (16), - GMEM_NODISCARD = (32), - GMEM_NOT_BANKED = (4096), - GMEM_NOTIFY = (16384), - GMEM_SHARE = (8192), - GMEM_ZEROINIT = (64), - GMEM_DISCARDED = (16384), - GMEM_INVALID_HANDLE = (32768), - GMEM_LOCKCOUNT = (255), - HEAP_GENERATE_EXCEPTIONS = (4), - HEAP_NO_SERIALIZE = (1), - HEAP_ZERO_MEMORY = (8), - STATUS_NO_MEMORY = (0xc0000017), - STATUS_ACCESS_VIOLATION = (0xc0000005), - HEAP_REALLOC_IN_PLACE_ONLY = (16), - ILC_COLOR = (0), - ILC_COLOR4 = (4), - ILC_COLOR8 = (8), - ILC_COLOR16 = (16), - ILC_COLOR24 = (24), - ILC_COLOR32 = (32), - ILC_COLORDDB = (254), - ILC_MASK = (1), - ILC_PALETTE = (2048), - ILD_BLEND25 = (2), - ILD_BLEND50 = (4), - ILD_SELECTED = (4), - ILD_BLEND = (4), - ILD_FOCUS = (2), - ILD_MASK = (16), - ILD_NORMAL = (0), - ILD_TRANSPARENT = (1), - CLR_NONE = (0xffffffff), - CLR_DEFAULT = (0xff000000), - CLR_INVALID = (0xFFFFFFFF), - LR_LOADFROMFILE = (16), - LR_LOADMAP3DCOLORS = (4096), - LR_LOADTRANSPARENT = (32), - IME_CONFIG_GENERAL = (1), - IME_CONFIG_REGISTERWORD = (2), - IME_CONFIG_SELECTDICTIONARY = (3), - GCL_CONVERSION = (1), - GCL_REVERSECONVERSION = (2), - GCL_REVERSE_LENGTH = (3), - GGL_LEVEL = (1), - GGL_INDEX = (2), - GGL_STRING = (3), - GGL_PRIVATE = (4), - GL_LEVEL_ERROR = (2), - GL_LEVEL_FATAL = (1), - GL_LEVEL_INFORMATION = (4), - GL_LEVEL_NOGUIDELINE = (0), - GL_LEVEL_WARNING = (3), - GL_ID_CANNOTSAVE = (17), - GL_ID_NOCONVERT = (32), - GL_ID_NODICTIONARY = (16), - GL_ID_NOMODULE = (1), - GL_ID_READINGCONFLICT = (35), - GL_ID_TOOMANYSTROKE = (34), - GL_ID_TYPINGERROR = (33), - GL_ID_UNKNOWN = (0), - GL_ID_INPUTREADING = (36), - GL_ID_INPUTRADICAL = (37), - GL_ID_INPUTCODE = (38), - GL_ID_CHOOSECANDIDATE = (40), - GL_ID_REVERSECONVERSION = (41), - IGP_PROPERTY = (4), - IGP_CONVERSION = (8), - IGP_SENTENCE = (12), - IGP_UI = (16), - IGP_SETCOMPSTR = (20), - IGP_SELECT = (24), - IME_PROP_AT_CARET = (65536), - IME_PROP_SPECIAL_UI = (131072), - IME_PROP_CANDLIST_START_FROM_1 = (262144), - IME_PROP_UNICODE = (524288), - UI_CAP_2700 = (1), - UI_CAP_ROT90 = (2), - UI_CAP_ROTANY = (4), - SCS_CAP_COMPSTR = (1), - SCS_CAP_MAKEREAD = (2), - SELECT_CAP_CONVERSION = (1), - SELECT_CAP_SENTENCE = (2), - NI_CHANGECANDIDATELIST = (19), - NI_CLOSECANDIDATE = (17), - NI_COMPOSITIONSTR = (21), - NI_OPENCANDIDATE = (16), - NI_SELECTCANDIDATESTR = (18), - NI_SETCANDIDATE_PAGESIZE = (23), - NI_SETCANDIDATE_PAGESTART = (22), - CPS_CANCEL = (4), - CPS_COMPLETE = (1), - CPS_CONVERT = (2), - CPS_REVERT = (3), - SCS_SETSTR = (9), - SCS_CHANGEATTR = (18), - SCS_CHANGECLAUSE = (36), - IME_REGWORD_STYLE_EUDC = (1), - IME_REGWORD_STYLE_USER_FIRST = (0x80000000), - IME_REGWORD_STYLE_USER_LAST = -((1)), - SECURITY_DESCRIPTOR_REVISION = (1), - IS_TEXT_UNICODE_ASCII16 = (1), - IS_TEXT_UNICODE_REVERSE_ASCII16 = (16), - IS_TEXT_UNICODE_STATISTICS = (2), - IS_TEXT_UNICODE_REVERSE_STATISTICS = (32), - IS_TEXT_UNICODE_CONTROLS = (4), - IS_TEXT_UNICODE_REVERSE_CONTROLS = (64), - IS_TEXT_UNICODE_SIGNATURE = (8), - IS_TEXT_UNICODE_REVERSE_SIGNATURE = (128), - IS_TEXT_UNICODE_ILLEGAL_CHARS = (256), - IS_TEXT_UNICODE_ODD_LENGTH = (512), - IS_TEXT_UNICODE_NULL_BYTES = (4096), - IS_TEXT_UNICODE_UNICODE_MASK = (15), - IS_TEXT_UNICODE_REVERSE_MASK = (240), - IS_TEXT_UNICODE_NOT_UNICODE_MASK = (3840), - IS_TEXT_UNICODE_NOT_ASCII_MASK = (61440), - HC_GETNEXT = (1), - HC_SKIP = (2), - HC_SYSMODALOFF = (5), - HC_SYSMODALON = (4), - HC_NOREMOVE = (3), - KEYEVENTF_EXTENDEDKEY = (1), - KEYEVENTF_KEYUP = (2), - OBM_BTNCORNERS = (32758), - OBM_BTSIZE = (32761), - OBM_CHECK = (32760), - OBM_CHECKBOXES = (32759), - OBM_CLOSE = (32754), - OBM_COMBO = (32738), - OBM_DNARROW = (32752), - OBM_DNARROWD = (32742), - OBM_DNARROWI = (32736), - OBM_LFARROW = (32750), - OBM_LFARROWI = (32734), - OBM_LFARROWD = (32740), - OBM_MNARROW = (32739), - OBM_OLD_CLOSE = (32767), - OBM_OLD_DNARROW = (32764), - OBM_OLD_LFARROW = (32762), - OBM_OLD_REDUCE = (32757), - OBM_OLD_RESTORE = (32755), - OBM_OLD_RGARROW = (32763), - OBM_OLD_UPARROW = (32765), - OBM_OLD_ZOOM = (32756), - OBM_REDUCE = (32749), - OBM_REDUCED = (32746), - OBM_RESTORE = (32747), - OBM_RESTORED = (32744), - OBM_RGARROW = (32751), - OBM_RGARROWD = (32741), - OBM_RGARROWI = (32735), - OBM_SIZE = (32766), - OBM_UPARROW = (32753), - OBM_UPARROWD = (32743), - OBM_UPARROWI = (32737), - OBM_ZOOM = (32748), - OBM_ZOOMD = (32745), - DONT_RESOLVE_DLL_REFERENCES = (1), - LOAD_LIBRARY_AS_DATAFILE = (2), - LOAD_WITH_ALTERED_SEARCH_PATH = (8), - LPTR = (64), - LHND = (66), - NONZEROLHND = (2), - NONZEROLPTR = (0), - LMEM_NONZEROLHND = (2), - LMEM_NONZEROLPTR = (0), - LMEM_FIXED = (0), - LMEM_MOVEABLE = (2), - LMEM_NOCOMPACT = (16), - LMEM_NODISCARD = (32), - LMEM_ZEROINIT = (64), - LMEM_MODIFY = (128), - LMEM_LOCKCOUNT = (255), - LMEM_DISCARDABLE = (3840), - LMEM_DISCARDED = (16384), - LMEM_INVALID_HANDLE = (32768), - LOCKFILE_FAIL_IMMEDIATELY = (1), - LOCKFILE_EXCLUSIVE_LOCK = (2), - MB_USERICON = (0x80), - MB_ICONASTERISK = (0x40), - MB_ICONEXCLAMATION = (0x30), - MB_ICONWARNING = (0x30), - MB_ICONERROR = (0x10), - MB_ICONHAND = (0x10), - MB_ICONQUESTION = (0x20), - MB_OK = (0), - MB_ABORTRETRYIGNORE = (0x2), - MB_APPLMODAL = (0), - MB_DEFAULT_DESKTOP_ONLY = (0x20000), - MB_HELP = (0x4000), - MB_RIGHT = (0x80000), - MB_RTLREADING = (0x100000), - MB_TOPMOST = (0x40000), - MB_DEFBUTTON1 = (0), - MB_DEFBUTTON2 = (0x100), - MB_DEFBUTTON3 = (0x200), - MB_DEFBUTTON4 = (0x300), - MB_ICONINFORMATION = (0x40), - MB_ICONSTOP = (0x10), - MB_OKCANCEL = (0x1), - MB_RETRYCANCEL = (0x5), - MB_SERVICE_NOTIFICATION = (0x40000), - MB_SETFOREGROUND = (0x10000), - MB_SYSTEMMODAL = (0x1000), - MB_TASKMODAL = (0x2000), - MB_YESNO = (0x4), - MB_YESNOCANCEL = (0x3), - IDABORT = (3), - IDCANCEL = (2), - IDCLOSE = (8), - IDHELP = (9), - IDIGNORE = (5), - IDNO = (7), - IDOK = (1), - IDRETRY = (4), - IDYES = (6), - MSGF_DIALOGBOX = (0), - MSGF_MENU = (2), - MSGF_NEXTWINDOW = (6), - MSGF_SCROLLBAR = (5), - MSGF_MAINLOOP = (8), - MSGF_USER = (4096), - MWT_IDENTITY = (1), - MWT_LEFTMULTIPLY = (2), - MWT_RIGHTMULTIPLY = (3), - MOUSEEVENTF_ABSOLUTE = (32768), - MOUSEEVENTF_MOVE = (1), - MOUSEEVENTF_LEFTDOWN = (2), - MOUSEEVENTF_LEFTUP = (4), - MOUSEEVENTF_RIGHTDOWN = (8), - MOUSEEVENTF_RIGHTUP = (16), - MOUSEEVENTF_MIDDLEDOWN = (32), - MOUSEEVENTF_MIDDLEUP = (64), - MOVEFILE_REPLACE_EXISTING = (1), - MOVEFILE_COPY_ALLOWED = (2), - MOVEFILE_DELAY_UNTIL_REBOOT = (4), - MOVEFILE_WRITE_THROUGH = (8), - WAIT_OBJECT_0 = (0), - WAIT_ABANDONED_0 = (0x80), - WAIT_TIMEOUT = (0x102), - WAIT_IO_COMPLETION = (0xc0), - WAIT_ABANDONED = (0x80), - WAIT_FAILED = (0xffffffff), - MAXIMUM_WAIT_OBJECTS = (0x40), - MAXIMUM_SUSPEND_COUNT = (0x7f), - MB_PRECOMPOSED = (1), - MB_COMPOSITE = (2), - MB_ERR_INVALID_CHARS = (8), - MB_USEGLYPHCHARS = (4), - TOKEN_ADJUST_DEFAULT = (128), - TOKEN_ADJUST_GROUPS = (64), - TOKEN_ADJUST_PRIVILEGES = (32), - TOKEN_ALL_ACCESS = (0xf00ff), - TOKEN_ASSIGN_PRIMARY = (1), - TOKEN_DUPLICATE = (2), - TOKEN_EXECUTE = (0x20000), - TOKEN_IMPERSONATE = (4), - TOKEN_QUERY = (8), - TOKEN_QUERY_SOURCE = (16), - TOKEN_READ = (0x20008), - TOKEN_WRITE = (0x200e0), - SC_MANAGER_ALL_ACCESS = (0xf003f), - SC_MANAGER_CONNECT = (1), - SC_MANAGER_CREATE_SERVICE = (2), - SC_MANAGER_ENUMERATE_SERVICE = (4), - SC_MANAGER_LOCK = (8), - SC_MANAGER_QUERY_LOCK_STATUS = (16), - SC_MANAGER_MODIFY_BOOT_CONFIG = (32), - HWND_BROADCAST = (0xFFFF), - TAPE_FORMAT = (0x5), - TAPE_LOAD = (0), - TAPE_LOCK = (0x3), - TAPE_TENSION = (0x2), - TAPE_UNLOAD = (0x1), - TAPE_UNLOCK = (0x4), - IS_PSREBOOTSYSTEM = (3), - IS_PSRESTARTWINDOWS = (2), - PSPCB_CREATE = (2), - PSPCB_RELEASE = (1), - PURGE_TXABORT = (1), - PURGE_RXABORT = (2), - PURGE_TXCLEAR = (4), - PURGE_RXCLEAR = (8), - OWNER_SECURITY_INFORMATION = (0x1), - GROUP_SECURITY_INFORMATION = (0x2), - DACL_SECURITY_INFORMATION = (0x4), - SACL_SECURITY_INFORMATION = (0x8), - EVENTLOG_FORWARDS_READ = (4), - EVENTLOG_BACKWARDS_READ = (8), - EVENTLOG_SEEK_READ = (2), - EVENTLOG_SEQUENTIAL_READ = (1), - EVENTLOG_ERROR_TYPE = (1), - EVENTLOG_WARNING_TYPE = (2), - EVENTLOG_INFORMATION_TYPE = (4), - EVENTLOG_AUDIT_SUCCESS = (8), - EVENTLOG_AUDIT_FAILURE = (16), - RDW_ERASE = (4), - RDW_FRAME = (1024), - RDW_INTERNALPAINT = (2), - RDW_INVALIDATE = (1), - RDW_NOERASE = (32), - RDW_NOFRAME = (2048), - RDW_NOINTERNALPAINT = (16), - RDW_VALIDATE = (8), - RDW_ERASENOW = (512), - RDW_UPDATENOW = (256), - RDW_ALLCHILDREN = (128), - RDW_NOCHILDREN = (64), - HKEY_CLASSES_ROOT = (0x80000000), - HKEY_CURRENT_USER = (0x80000001), - HKEY_LOCAL_MACHINE = (0x80000002), - HKEY_USERS = (0x80000003), - HKEY_PERFORMANCE_DATA = (0x80000004), - HKEY_CURRENT_CONFIG = (0x80000005), - HKEY_DYN_DATA = (0x80000006), - REG_OPTION_VOLATILE = (0x1), - REG_OPTION_NON_VOLATILE = (0), - REG_CREATED_NEW_KEY = (0x1), - REG_OPENED_EXISTING_KEY = (0x2), - REG_BINARY = (3), - REG_DWORD = (4), - REG_DWORD_LITTLE_ENDIAN = (4), - REG_DWORD_BIG_ENDIAN = (5), - REG_EXPAND_SZ = (2), - REG_FULL_RESOURCE_DESCRIPTOR = (9), - REG_LINK = (6), - REG_MULTI_SZ = (7), - REG_NONE = (0), - REG_RESOURCE_LIST = (8), - REG_RESOURCE_REQUIREMENTS_LIST = (10), - REG_SZ = (1), - MOD_ALT = (1), - MOD_CONTROL = (2), - MOD_SHIFT = (4), - MOD_WIN = (8), - IDHOT_SNAPDESKTOP = -((2)), - IDHOT_SNAPWINDOW = -((1)), - REG_NOTIFY_CHANGE_NAME = (0x1), - REG_NOTIFY_CHANGE_ATTRIBUTES = (0x2), - REG_NOTIFY_CHANGE_LAST_SET = (0x4), - REG_NOTIFY_CHANGE_SECURITY = (0x8), - SW_ERASE = (4), - SW_INVALIDATE = (2), - SW_SCROLLCHILDREN = (1), - SMTO_ABORTIFHUNG = (2), - SMTO_BLOCK = (1), - SMTO_NORMAL = (0), - OPAQUE = (2), - TRANSPARENT = (1), - SLE_ERROR = (1), - SLE_MINORERROR = (2), - SLE_WARNING = (3), - SEM_FAILCRITICALERRORS = (1), - SEM_NOALIGNMENTFAULTEXCEPT = (4), - SEM_NOGPFAULTERRORBOX = (2), - SEM_NOOPENFILEERRORBOX = (32768), - ICM_ON = (2), - ICM_OFF = (1), - ICM_QUERY = (3), - LOCALE_ILANGUAGE = (1), - LOCALE_SLANGUAGE = (2), - LOCALE_SENGLANGUAGE = (4097), - LOCALE_SABBREVLANGNAME = (3), - LOCALE_SNATIVELANGNAME = (4), - LOCALE_ICOUNTRY = (5), - LOCALE_SCOUNTRY = (6), - LOCALE_SENGCOUNTRY = (4098), - LOCALE_SABBREVCTRYNAME = (7), - LOCALE_SNATIVECTRYNAME = (8), - LOCALE_IDEFAULTLANGUAGE = (9), - LOCALE_IDEFAULTCOUNTRY = (10), - LOCALE_IDEFAULTANSICODEPAGE = (4100), - LOCALE_IDEFAULTCODEPAGE = (11), - LOCALE_SLIST = (12), - LOCALE_IMEASURE = (13), - LOCALE_SDECIMAL = (14), - LOCALE_STHOUSAND = (15), - LOCALE_SGROUPING = (16), - LOCALE_IDIGITS = (17), - LOCALE_ILZERO = (18), - LOCALE_INEGNUMBER = (4112), - LOCALE_SCURRENCY = (20), - LOCALE_SMONDECIMALSEP = (22), - LOCALE_SMONTHOUSANDSEP = (23), - LOCALE_SMONGROUPING = (24), - LOCALE_ICURRDIGITS = (25), - LOCALE_ICURRENCY = (27), - LOCALE_INEGCURR = (28), - LOCALE_SDATE = (29), - LOCALE_STIME = (30), - LOCALE_STIMEFORMAT = (4099), - LOCALE_SSHORTDATE = (31), - LOCALE_SLONGDATE = (32), - LOCALE_IDATE = (33), - LOCALE_ILDATE = (34), - LOCALE_ITIME = (35), - LOCALE_ITLZERO = (37), - LOCALE_IDAYLZERO = (38), - LOCALE_IMONLZERO = (39), - LOCALE_S1159 = (40), - LOCALE_S2359 = (41), - LOCALE_ICALENDARTYPE = (4105), - LOCALE_IOPTIONALCALENDAR = (4107), - LOCALE_IFIRSTDAYOFWEEK = (4108), - LOCALE_IFIRSTWEEKOFYEAR = (4109), - LOCALE_SDAYNAME1 = (42), - LOCALE_SDAYNAME2 = (43), - LOCALE_SDAYNAME3 = (44), - LOCALE_SDAYNAME4 = (45), - LOCALE_SDAYNAME5 = (46), - LOCALE_SDAYNAME6 = (47), - LOCALE_SDAYNAME7 = (48), - LOCALE_SABBREVDAYNAME1 = (49), - LOCALE_SABBREVDAYNAME2 = (50), - LOCALE_SABBREVDAYNAME3 = (51), - LOCALE_SABBREVDAYNAME4 = (52), - LOCALE_SABBREVDAYNAME5 = (53), - LOCALE_SABBREVDAYNAME6 = (54), - LOCALE_SABBREVDAYNAME7 = (55), - LOCALE_SMONTHNAME1 = (56), - LOCALE_SMONTHNAME2 = (57), - LOCALE_SMONTHNAME3 = (58), - LOCALE_SMONTHNAME4 = (59), - LOCALE_SMONTHNAME5 = (60), - LOCALE_SMONTHNAME6 = (61), - LOCALE_SMONTHNAME7 = (62), - LOCALE_SMONTHNAME8 = (63), - LOCALE_SMONTHNAME9 = (64), - LOCALE_SMONTHNAME10 = (65), - LOCALE_SMONTHNAME11 = (66), - LOCALE_SMONTHNAME12 = (67), - LOCALE_SMONTHNAME13 = (4110), - LOCALE_SABBREVMONTHNAME1 = (68), - LOCALE_SABBREVMONTHNAME2 = (69), - LOCALE_SABBREVMONTHNAME3 = (70), - LOCALE_SABBREVMONTHNAME4 = (71), - LOCALE_SABBREVMONTHNAME5 = (72), - LOCALE_SABBREVMONTHNAME6 = (73), - LOCALE_SABBREVMONTHNAME7 = (74), - LOCALE_SABBREVMONTHNAME8 = (75), - LOCALE_SABBREVMONTHNAME9 = (76), - LOCALE_SABBREVMONTHNAME10 = (77), - LOCALE_SABBREVMONTHNAME11 = (78), - LOCALE_SABBREVMONTHNAME12 = (79), - LOCALE_SABBREVMONTHNAME13 = (4111), - LOCALE_SPOSITIVESIGN = (80), - LOCALE_SNEGATIVESIGN = (81), - LOCALE_IPOSSIGNPOSN = (82), - LOCALE_INEGSIGNPOSN = (83), - LOCALE_IPOSSYMPRECEDES = (84), - LOCALE_IPOSSEPBYSPACE = (85), - LOCALE_INEGSYMPRECEDES = (86), - LOCALE_INEGSEPBYSPACE = (87), - LOCALE_NOUSEROVERRIDE = (0x80000000), - CAL_ICALINTVALUE = (1), - CAL_IYEAROFFSETRANGE = (3), - CAL_SABBREVDAYNAME1 = (14), - CAL_SABBREVDAYNAME2 = (15), - CAL_SABBREVDAYNAME3 = (16), - CAL_SABBREVDAYNAME4 = (17), - CAL_SABBREVDAYNAME5 = (18), - CAL_SABBREVDAYNAME6 = (19), - CAL_SABBREVDAYNAME7 = (20), - CAL_SABBREVMONTHNAME1 = (34), - CAL_SABBREVMONTHNAME2 = (35), - CAL_SABBREVMONTHNAME3 = (36), - CAL_SABBREVMONTHNAME4 = (37), - CAL_SABBREVMONTHNAME5 = (38), - CAL_SABBREVMONTHNAME6 = (39), - CAL_SABBREVMONTHNAME7 = (40), - CAL_SABBREVMONTHNAME8 = (41), - CAL_SABBREVMONTHNAME9 = (42), - CAL_SABBREVMONTHNAME10 = (43), - CAL_SABBREVMONTHNAME11 = (44), - CAL_SABBREVMONTHNAME12 = (45), - CAL_SABBREVMONTHNAME13 = (46), - CAL_SCALNAME = (2), - CAL_SDAYNAME1 = (7), - CAL_SDAYNAME2 = (8), - CAL_SDAYNAME3 = (9), - CAL_SDAYNAME4 = (10), - CAL_SDAYNAME5 = (11), - CAL_SDAYNAME6 = (12), - CAL_SDAYNAME7 = (13), - CAL_SERASTRING = (4), - CAL_SLONGDATE = (6), - CAL_SMONTHNAME1 = (21), - CAL_SMONTHNAME2 = (22), - CAL_SMONTHNAME3 = (23), - CAL_SMONTHNAME4 = (24), - CAL_SMONTHNAME5 = (25), - CAL_SMONTHNAME6 = (26), - CAL_SMONTHNAME7 = (27), - CAL_SMONTHNAME8 = (28), - CAL_SMONTHNAME9 = (29), - CAL_SMONTHNAME10 = (30), - CAL_SMONTHNAME11 = (31), - CAL_SMONTHNAME12 = (32), - CAL_SMONTHNAME13 = (33), - CAL_SSHORTDATE = (5), - PROCESS_SET_QUOTA = (256), - BLACKONWHITE = (1), - COLORONCOLOR = (3), - HALFTONE = (4), - STRETCH_ANDSCANS = (1), - STRETCH_DELETESCANS = (3), - STRETCH_HALFTONE = (4), - STRETCH_ORSCANS = (2), - WHITEONBLACK = (2), - OCR_NORMAL = (32512), - OCR_IBEAM = (32513), - OCR_WAIT = (32514), - OCR_CROSS = (32515), - OCR_UP = (32516), - OCR_SIZE = (32640), - OCR_ICON = (32641), - OCR_SIZENWSE = (32642), - OCR_SIZENESW = (32643), - OCR_SIZEWE = (32644), - OCR_SIZENS = (32645), - OCR_SIZEALL = (32646), - OCR_NO = (32648), - OCR_APPSTARTING = (32650), - TAPE_ABSOLUTE_BLOCK = (0x1), - TAPE_LOGICAL_BLOCK = (0x2), - TAPE_REWIND = (0), - TAPE_SPACE_END_OF_DATA = (0x4), - TAPE_SPACE_FILEMARKS = (0x6), - TAPE_SPACE_RELATIVE_BLOCKS = (0x5), - TAPE_SPACE_SEQUENTIAL_FMKS = (0x7), - TAPE_SPACE_SEQUENTIAL_SMKS = (0x9), - TAPE_SPACE_SETMARKS = (0x8), - EXCEPTION_EXECUTE_HANDLER = (1), - EXCEPTION_CONTINUE_EXECUTION = -((1)), - EXCEPTION_CONTINUE_SEARCH = (0), - HWND_BOTTOM = (1), - HWND_NOTOPMOST = -(2), - HWND_TOP = (0), - HWND_TOPMOST = -(1), - SWP_DRAWFRAME = (32), - SWP_FRAMECHANGED = (32), - SWP_HIDEWINDOW = (128), - SWP_NOACTIVATE = (16), - SWP_NOCOPYBITS = (256), - SWP_NOMOVE = (2), - SWP_NOSIZE = (1), - SWP_NOREDRAW = (8), - SWP_NOZORDER = (4), - SWP_SHOWWINDOW = (64), - SWP_NOOWNERZORDER = (512), - SWP_NOREPOSITION = (512), - SWP_NOSENDCHANGING = (1024), - HSHELL_ACTIVATESHELLWINDOW = (3), - HSHELL_GETMINRECT = (5), - HSHELL_LANGUAGE = (8), - HSHELL_REDRAW = (6), - HSHELL_TASKMAN = (7), - HSHELL_WINDOWACTIVATED = (4), - HSHELL_WINDOWCREATED = (1), - HSHELL_WINDOWDESTROYED = (2), - SW_HIDE = (0), - SW_MAXIMIZE = (3), - SW_MINIMIZE = (6), - SW_NORMAL = (1), - SW_RESTORE = (9), - SW_SHOW = (5), - SW_SHOWDEFAULT = (10), - SW_SHOWMAXIMIZED = (3), - SW_SHOWMINIMIZED = (2), - SW_SHOWMINNOACTIVE = (7), - SW_SHOWNA = (8), - SW_SHOWNOACTIVATE = (4), - SW_SHOWNORMAL = (1), - WPF_RESTORETOMAXIMIZED = (2), - WPF_SETMINPOSITION = (1), - INFINITE = (0xFFFFFFFF), - SPI_GETACCESSTIMEOUT = (60), - SPI_GETANIMATION = (72), - SPI_GETBEEP = (1), - SPI_GETBORDER = (5), - SPI_GETDEFAULTINPUTLANG = (89), - SPI_GETDRAGFULLWINDOWS = (38), - SPI_GETFASTTASKSWITCH = (35), - SPI_GETFILTERKEYS = (50), - SPI_GETFONTSMOOTHING = (74), - SPI_GETGRIDGRANULARITY = (18), - SPI_GETHIGHCONTRAST = (66), - SPI_GETICONMETRICS = (45), - SPI_GETICONTITLELOGFONT = (31), - SPI_GETICONTITLEWRAP = (25), - SPI_GETKEYBOARDDELAY = (22), - SPI_GETKEYBOARDPREF = (68), - SPI_GETKEYBOARDSPEED = (10), - SPI_GETLOWPOWERACTIVE = (83), - SPI_GETLOWPOWERTIMEOUT = (79), - SPI_GETMENUDROPALIGNMENT = (27), - SPI_GETMINIMIZEDMETRICS = (43), - SPI_GETMOUSE = (3), - SPI_GETMOUSEKEYS = (54), - SPI_GETMOUSETRAILS = (94), - SPI_GETNONCLIENTMETRICS = (41), - SPI_GETPOWEROFFACTIVE = (84), - SPI_GETPOWEROFFTIMEOUT = (80), - SPI_GETSCREENREADER = (70), - SPI_GETSCREENSAVEACTIVE = (16), - SPI_GETSCREENSAVETIMEOUT = (14), - SPI_GETSERIALKEYS = (62), - SPI_GETSHOWSOUNDS = (56), - SPI_GETSOUNDSENTRY = (64), - SPI_GETSTICKYKEYS = (58), - SPI_GETTOGGLEKEYS = (52), - SPI_GETWINDOWSEXTENSION = (92), - SPI_GETWORKAREA = (48), - SPI_ICONHORIZONTALSPACING = (13), - SPI_ICONVERTICALSPACING = (24), - SPI_LANGDRIVER = (12), - SPI_SCREENSAVERRUNNING = (97), - SPI_SETACCESSTIMEOUT = (61), - SPI_SETANIMATION = (73), - SPI_SETBEEP = (2), - SPI_SETBORDER = (6), - SPI_SETDEFAULTINPUTLANG = (90), - SPI_SETDESKPATTERN = (21), - SPI_SETDESKWALLPAPER = (20), - SPI_SETDOUBLECLICKTIME = (32), - SPI_SETDOUBLECLKHEIGHT = (30), - SPI_SETDOUBLECLKWIDTH = (29), - SPI_SETDRAGFULLWINDOWS = (37), - SPI_SETDRAGHEIGHT = (77), - SPI_SETDRAGWIDTH = (76), - SPI_SETFASTTASKSWITCH = (36), - SPI_SETFILTERKEYS = (51), - SPI_SETFONTSMOOTHING = (75), - SPI_SETGRIDGRANULARITY = (19), - SPI_SETHANDHELD = (78), - SPI_SETHIGHCONTRAST = (67), - SPI_SETICONMETRICS = (46), - SPI_SETICONTITLELOGFONT = (34), - SPI_SETICONTITLEWRAP = (26), - SPI_SETKEYBOARDDELAY = (23), - SPI_SETKEYBOARDPREF = (69), - SPI_SETKEYBOARDSPEED = (11), - SPI_SETLANGTOGGLE = (91), - SPI_SETLOWPOWERACTIVE = (85), - SPI_SETLOWPOWERTIMEOUT = (81), - SPI_SETMENUDROPALIGNMENT = (28), - SPI_SETMINIMIZEDMETRICS = (44), - SPI_SETMOUSE = (4), - SPI_SETMOUSEBUTTONSWAP = (33), - SPI_SETMOUSEKEYS = (55), - SPI_SETMOUSETRAILS = (93), - SPI_SETNONCLIENTMETRICS = (42), - SPI_SETPENWINDOWS = (49), - SPI_SETPOWEROFFACTIVE = (86), - SPI_SETPOWEROFFTIMEOUT = (82), - SPI_SETSCREENREADER = (71), - SPI_SETSCREENSAVEACTIVE = (17), - SPI_SETSCREENSAVETIMEOUT = (15), - SPI_SETSERIALKEYS = (63), - SPI_SETSHOWSOUNDS = (57), - SPI_SETSOUNDSENTRY = (65), - SPI_SETSTICKYKEYS = (59), - SPI_SETTOGGLEKEYS = (53), - SPI_SETWORKAREA = (47), - SPIF_UPDATEINIFILE = (1), - SPIF_SENDWININICHANGE = (2), - SPIF_SENDCHANGE = (2), - TPM_CENTERALIGN = (0x4), - TPM_LEFTALIGN = (0), - TPM_RIGHTALIGN = (0x8), - TPM_LEFTBUTTON = (0), - TPM_RIGHTBUTTON = (0x2), - TPM_HORIZONTAL = (0), - TPM_VERTICAL = (0x40), - TCI_SRCCHARSET = (1), - TCI_SRCCODEPAGE = (2), - TCI_SRCFONTSIG = (3), - VFFF_ISSHAREDFILE = (1), - VFF_CURNEDEST = (1), - VFF_FILEINUSE = (2), - VFF_BUFFTOOSMALL = (4), - VIFF_FORCEINSTALL = (1), - VIFF_DONTDELETEOLD = (2), - VIF_TEMPFILE = (0x1), - VIF_MISMATCH = (0x2), - VIF_SRCOLD = (0x4), - VIF_DIFFLANG = (0x8), - VIF_DIFFCODEPG = (0x10), - VIF_DIFFTYPE = (0x20), - VIF_WRITEPROT = (0x40), - VIF_FILEINUSE = (0x80), - VIF_OUTOFSPACE = (0x100), - VIF_ACCESSVIOLATION = (0x200), - VIF_SHARINGVIOLATION = (0x400), - VIF_CANNOTCREATE = (0x800), - VIF_CANNOTDELETE = (0x1000), - VIF_CANNOTDELETECUR = (0x4000), - VIF_CANNOTRENAME = (0x2000), - VIF_OUTOFMEMORY = (0x8000), - VIF_CANNOTREADSRC = (0x10000), - VIF_CANNOTREADDST = (0x20000), - VIF_BUFFTOOSMALL = (0x40000), - WC_COMPOSITECHECK = (512), - WC_DISCARDNS = (16), - WC_SEPCHARS = (32), - WC_DEFAULTCHAR = (64), - HELP_COMMAND = (0x102), - HELP_CONTENTS = (0x3), - HELP___FILE__ = (0x1), - HELP___FILE__POPUP = (0x8), - HELP_FORCEFILE = (0x9), - HELP_HELPONHELP = (0x4), - HELP_INDEX = (0x3), - HELP_KEY = (0x101), - HELP_MULTIKEY = (0x201), - HELP_PARTIALKEY = (0x105), - HELP_QUIT = (0x2), - HELP_SETCONTENTS = (0x5), - HELP_SETINDEX = (0x5), - HELP___FILE__MENU = (0xa), - HELP_FINDER = (0xb), - HELP_WM_HELP = (0xc), - HELP_TCARD = (0x8000), - HELP_TCARD_DATA = (0x10), - HELP_TCARD_OTHER_CALLER = (0x11), - CONNECT_UPDATE_PROFILE = (1), - RESOURCETYPE_DISK = (1), - RESOURCETYPE_PRINT = (2), - RESOURCETYPE_ANY = (0), - RESOURCE_CONNECTED = (1), - RESOURCE_GLOBALNET = (2), - RESOURCE_REMEMBERED = (3), - RESOURCEUSAGE_CONNECTABLE = (1), - RESOURCEUSAGE_CONTAINER = (2), - WN_BAD_NETNAME = (0x43), - WN_EXTENDED_ERROR = (0x4b8), - WN_MORE_DATA = (0xea), - WN_NO_NETWORK = (0x4c6), - WN_SUCCESS = (0), - WN_ACCESS_DENIED = (0x5), - WN_BAD_PROVIDER = (0x4b4), - WN_NOT_AUTHENTICATED = (0x4dc), - UNIVERSAL_NAME_INFO_LEVEL = (1), - REMOTE_NAME_INFO_LEVEL = (2), - STILL_ACTIVE = (0x103), - SP_SERIALCOMM = (0x1), - BAUD_075 = (0x1), - BAUD_110 = (0x2), - BAUD_134_5 = (0x4), - BAUD_150 = (0x8), - BAUD_300 = (0x10), - BAUD_600 = (0x20), - BAUD_1200 = (0x40), - BAUD_1800 = (0x80), - BAUD_2400 = (0x100), - BAUD_4800 = (0x200), - BAUD_7200 = (0x400), - BAUD_9600 = (0x800), - BAUD_14400 = (0x1000), - BAUD_19200 = (0x2000), - BAUD_38400 = (0x4000), - BAUD_56K = (0x8000), - BAUD_57600 = (0x40000), - BAUD_115200 = (0x20000), - BAUD_128K = (0x10000), - BAUD_USER = (0x10000000), - PST_FAX = (0x21), - PST_LAT = (0x101), - PST_MODEM = (0x6), - PST_NETWORK_BRIDGE = (0x100), - PST_PARALLELPORT = (0x2), - PST_RS232 = (0x1), - PST_RS422 = (0x3), - PST_RS423 = (0x4), - PST_RS449 = (0x5), - PST_SCANNER = (0x22), - PST_TCPIP_TELNET = (0x102), - PST_UNSPECIFIED = (0), - PST_X25 = (0x103), - PCF_16BITMODE = (0x200), - PCF_DTRDSR = (0x1), - PCF_INTTIMEOUTS = (0x80), - PCF_PARITY_CHECK = (0x8), - PCF_RLSD = (0x4), - PCF_RTSCTS = (0x2), - PCF_SETXCHAR = (0x20), - PCF_SPECIALCHARS = (0x100), - PCF_TOTALTIMEOUTS = (0x40), - PCF_XONXOFF = (0x10), - SP_BAUD = (0x2), - SP_DATABITS = (0x4), - SP_HANDSHAKING = (0x10), - SP_PARITY = (0x1), - SP_PARITY_CHECK = (0x20), - SP_RLSD = (0x40), - SP_STOPBITS = (0x8), - DATABITS_5 = (1), - DATABITS_6 = (2), - DATABITS_7 = (4), - DATABITS_8 = (8), - DATABITS_16 = (16), - DATABITS_16X = (32), - STOPBITS_10 = (1), - STOPBITS_15 = (2), - STOPBITS_20 = (4), - PARITY_NONE = (256), - PARITY_ODD = (512), - PARITY_EVEN = (1024), - PARITY_MARK = (2048), - PARITY_SPACE = (4096), - COMMPROP_INITIALIZED = (0xe73cf52e), - CBR_110 = (110), - CBR_300 = (300), - CBR_600 = (600), - CBR_1200 = (1200), - CBR_2400 = (2400), - CBR_4800 = (4800), - CBR_9600 = (9600), - CBR_14400 = (14400), - CBR_19200 = (19200), - CBR_38400 = (38400), - CBR_56000 = (56000), - CBR_57600 = (57600), - CBR_115200 = (115200), - CBR_128000 = (128000), - CBR_256000 = (256000), - DTR_CONTROL_DISABLE = (0), - DTR_CONTROL_ENABLE = (1), - DTR_CONTROL_HANDSHAKE = (2), - RTS_CONTROL_DISABLE = (0), - RTS_CONTROL_ENABLE = (1), - RTS_CONTROL_HANDSHAKE = (2), - RTS_CONTROL_TOGGLE = (3), - EVENPARITY = (2), - MARKPARITY = (3), - NOPARITY = (0), - ODDPARITY = (1), - SPACEPARITY = (4), - ONESTOPBIT = (0), - ONE5STOPBITS = (1), - TWOSTOPBITS = (2), - CREATE_PROCESS_DEBUG_EVENT = (3), - CREATE_THREAD_DEBUG_EVENT = (2), - EXCEPTION_DEBUG_EVENT = (1), - EXIT_PROCESS_DEBUG_EVENT = (5), - EXIT_THREAD_DEBUG_EVENT = (4), - LOAD_DLL_DEBUG_EVENT = (6), - OUTPUT_DEBUG_STRING_EVENT = (8), - UNLOAD_DLL_DEBUG_EVENT = (7), - RIP_EVENT = (9), - PROCESS_HEAP_REGION = (1), - PROCESS_HEAP_UNCOMMITTED_RANGE = (2), - PROCESS_HEAP_ENTRY_BUSY = (4), - PROCESS_HEAP_ENTRY_MOVEABLE = (16), - PROCESS_HEAP_ENTRY_DDESHARE = (32), - HINSTANCE_ERROR = (32), - BACKUP_DATA = (1), - BACKUP_EA_DATA = (2), - BACKUP_SECURITY_DATA = (3), - BACKUP_ALTERNATE_DATA = (4), - BACKUP_LINK = (5), - STREAM_MODIFIED_WHEN_READ = (1), - STREAM_CONTAINS_SECURITY = (2), - STARTF_USESHOWWINDOW = (1), - STARTF_USEPOSITION = (4), - STARTF_USESIZE = (2), - STARTF_USECOUNTCHARS = (8), - STARTF_USEFILLATTRIBUTE = (16), - STARTF_RUNFULLSCREEN = (32), - STARTF_FORCEONFEEDBACK = (64), - STARTF_FORCEOFFFEEDBACK = (128), - STARTF_USESTDHANDLES = (256), - STARTF_USEHOTKEY = (512), - VER_PLATFORM_WIN32s = (0), - VER_PLATFORM_WIN32_WINDOWS = (1), - VER_PLATFORM_WIN32_NT = (2), - MAXPROPPAGES = (100), - PSP_DEFAULT = (0), - PSP_DLGINDIRECT = (1), - PSP_HASHELP = (32), - PSP_USECALLBACK = (128), - PSP_USEHICON = (2), - PSP_USEICONID = (4), - PSP_USEREFPARENT = (64), - PSP_USETITLE = (8), - PSP_RTLREADING = (16), - PSH_DEFAULT = (0), - PSH_HASHELP = (512), - PSH_MODELESS = (1024), - PSH_NOAPPLYNOW = (128), - PSH_PROPSHEETPAGE = (8), - PSH_PROPTITLE = (1), - PSH_USECALLBACK = (256), - PSH_USEHICON = (2), - PSH_USEICONID = (4), - PSH_USEPSTARTPAGE = (64), - PSH_WIZARD = (32), - PSH_RTLREADING = (2048), - PSCB_INITIALIZED = (1), - PSCB_PRECREATE = (2), - PSNRET_NOERROR = (0), - PSNRET_INVALID_NOCHANGEPAGE = (2), - PSBTN_APPLYNOW = (4), - PSBTN_BACK = (0), - PSBTN_CANCEL = (5), - PSBTN_FINISH = (2), - PSBTN_HELP = (6), - PSBTN_NEXT = (1), - PSBTN_OK = (3), - PSWIZB_BACK = (1), - PSWIZB_NEXT = (2), - PSWIZB_FINISH = (4), - PSWIZB_DISABLEDFINISH = (8), - ID_PSREBOOTSYSTEM = (3), - ID_PSRESTARTWINDOWS = (2), - WIZ_BODYCX = (184), - WIZ_BODYX = (92), - WIZ_CXBMP = (80), - WIZ_CXDLG = (276), - WIZ_CYDLG = (140), -} -char* VS_FILE_INFO = cast(char*) ((16)); -enum : DWORD { - VS_VERSION_INFO = (1), - VS_FF_DEBUG = (0x1), - VS_FF_INFOINFERRED = (0x10), - VS_FF_PATCHED = (0x4), - VS_FF_PRERELEASE = (0x2), - VS_FF_PRIVATEBUILD = (0x8), - VS_FF_SPECIALBUILD = (0x20), - VOS_UNKNOWN = (0), - VOS_DOS = (0x10000), - VOS_OS216 = (0x20000), - VOS_OS232 = (0x30000), - VOS_NT = (0x40000), - VOS_DOS_WINDOWS16 = (0x10001), - VOS_DOS_WINDOWS32 = (0x10004), - VOS_OS216_PM16 = (0x20002), - VOS_OS232_PM32 = (0x30003), - VOS_NT_WINDOWS32 = (0x40004), - VFT_UNKNOWN = (0), - VFT_APP = (0x1), - VFT_DLL = (0x2), - VFT_DRV = (0x3), - VFT_FONT = (0x4), - VFT_VXD = (0x5), - VFT_STATIC_LIB = (0x7), - VFT2_UNKNOWN = (0), - VFT2_DRV_PRINTER = (0x1), - VFT2_DRV_KEYBOARD = (0x2), - VFT2_DRV_LANGUAGE = (0x3), - VFT2_DRV_DISPLAY = (0x4), - VFT2_DRV_MOUSE = (0x5), - VFT2_DRV_NETWORK = (0x6), - VFT2_DRV_SYSTEM = (0x7), - VFT2_DRV_INSTALLABLE = (0x8), - VFT2_DRV_SOUND = (0x9), - VFT2_FONT_RASTER = (0x1), - VFT2_FONT_VECTOR = (0x2), - VFT2_FONT_TRUETYPE = (0x3), - PAN_ANY = (0), - PAN_NO_FIT = (1), - PAN_FAMILY_TEXT_DISPLAY = (2), - PAN_FAMILY_SCRIPT = (3), - PAN_FAMILY_DECORATIVE = (4), - PAN_FAMILY_PICTORIAL = (5), - PAN_SERIF_COVE = (2), - PAN_SERIF_OBTUSE_COVE = (3), - PAN_SERIF_SQUARE_COVE = (4), - PAN_SERIF_OBTUSE_SQUARE_COVE = (5), - PAN_SERIF_SQUARE = (6), - PAN_SERIF_THIN = (7), - PAN_SERIF_BONE = (8), - PAN_SERIF_EXAGGERATED = (9), - PAN_SERIF_TRIANGLE = (10), - PAN_SERIF_NORMAL_SANS = (11), - PAN_SERIF_OBTUSE_SANS = (12), - PAN_SERIF_PERP_SANS = (13), - PAN_SERIF_FLARED = (14), - PAN_SERIF_ROUNDED = (15), - PAN_WEIGHT_VERY_LIGHT = (2), - PAN_WEIGHT_LIGHT = (3), - PAN_WEIGHT_THIN = (4), - PAN_WEIGHT_BOOK = (5), - PAN_WEIGHT_MEDIUM = (6), - PAN_WEIGHT_DEMI = (7), - PAN_WEIGHT_BOLD = (8), - PAN_WEIGHT_HEAVY = (9), - PAN_WEIGHT_BLACK = (10), - PAN_WEIGHT_NORD = (11), - PAN_PROP_OLD_STYLE = (2), - PAN_PROP_MODERN = (3), - PAN_PROP_EVEN_WIDTH = (4), - PAN_PROP_EXPANDED = (5), - PAN_PROP_CONDENSED = (6), - PAN_PROP_VERY_EXPANDED = (7), - PAN_PROP_VERY_CONDENSED = (8), - PAN_PROP_MONOSPACED = (9), - PAN_CONTRAST_NONE = (2), - PAN_CONTRAST_VERY_LOW = (3), - PAN_CONTRAST_LOW = (4), - PAN_CONTRAST_MEDIUM_LOW = (5), - PAN_CONTRAST_MEDIUM = (6), - PAN_CONTRAST_MEDIUM_HIGH = (7), - PAN_CONTRAST_HIGH = (8), - PAN_CONTRAST_VERY_HIGH = (9), - PAN_STROKE_GRADUAL_DIAG = (2), - PAN_STROKE_GRADUAL_TRAN = (3), - PAN_STROKE_GRADUAL_VERT = (4), - PAN_STROKE_GRADUAL_HORZ = (5), - PAN_STROKE_RAPID_VERT = (6), - PAN_STROKE_RAPID_HORZ = (7), - PAN_STROKE_INSTANT_VERT = (8), - PAN_STRAIGHT_ARMS_HORZ = (2), - PAN_STRAIGHT_ARMS_WEDGE = (3), - PAN_STRAIGHT_ARMS_VERT = (4), - PAN_STRAIGHT_ARMS_SINGLE_SERIF = (5), - PAN_STRAIGHT_ARMS_DOUBLE_SERIF = (6), - PAN_BENT_ARMS_HORZ = (7), - PAN_BENT_ARMS_VERT = (9), - PAN_BENT_ARMS_WEDGE = (8), - PAN_BENT_ARMS_SINGLE_SERIF = (10), - PAN_BENT_ARMS_DOUBLE_SERIF = (11), - PAN_LETT_NORMAL_CONTACT = (2), - PAN_LETT_NORMAL_WEIGHTED = (3), - PAN_LETT_NORMAL_BOXED = (4), - PAN_LETT_NORMAL_FLATTENED = (5), - PAN_LETT_NORMAL_ROUNDED = (6), - PAN_LETT_NORMAL_OFF_CENTER = (7), - PAN_LETT_NORMAL_SQUARE = (8), - PAN_LETT_OBLIQUE_CONTACT = (9), - PAN_LETT_OBLIQUE_WEIGHTED = (10), - PAN_LETT_OBLIQUE_BOXED = (11), - PAN_LETT_OBLIQUE_FLATTENED = (12), - PAN_LETT_OBLIQUE_ROUNDED = (13), - PAN_LETT_OBLIQUE_OFF_CENTER = (14), - PAN_LETT_OBLIQUE_SQUARE = (15), - PAN_MIDLINE_STANDARD_TRIMMED = (2), - PAN_MIDLINE_STANDARD_POINTED = (3), - PAN_MIDLINE_STANDARD_SERIFED = (4), - PAN_MIDLINE_HIGH_TRIMMED = (5), - PAN_MIDLINE_HIGH_POINTED = (6), - PAN_MIDLINE_HIGH_SERIFED = (7), - PAN_MIDLINE_CONSTANT_TRIMMED = (8), - PAN_MIDLINE_CONSTANT_POINTED = (9), - PAN_MIDLINE_CONSTANT_SERIFED = (10), - PAN_MIDLINE_LOW_TRIMMED = (11), - PAN_MIDLINE_LOW_POINTED = (12), - PAN_MIDLINE_LOW_SERIFED = (13), - PAN_XHEIGHT_CONSTANT_SMALL = (2), - PAN_XHEIGHT_CONSTANT_STD = (3), - PAN_XHEIGHT_CONSTANT_LARGE = (4), - PAN_XHEIGHT_DUCKING_SMALL = (5), - PAN_XHEIGHT_DUCKING_STD = (6), - PAN_XHEIGHT_DUCKING_LARGE = (7), - PC_EXPLICIT = (2), - PC_NOCOLLAPSE = (4), - PC_RESERVED = (1), - BS_DIBPATTERN = (5), - BS_DIBPATTERN8X8 = (8), - BS_DIBPATTERNPT = (6), - BS_HATCHED = (2), - BS_HOLLOW = (1), - BS_NULL = (1), - BS_PATTERN = (3), - BS_PATTERN8X8 = (7), - BS_SOLID = (0), - DM_ORIENTATION = (0x1), - DM_PAPERSIZE = (0x2), - DM_PAPERLENGTH = (0x4), - DM_PAPERWIDTH = (0x8), - DM_SCALE = (0x10), - DM_COPIES = (0x100), - DM_DEFAULTSOURCE = (0x200), - DM_PRINTQUALITY = (0x400), - DM_COLOR = (0x800), - DM_DUPLEX = (0x1000), - DM_YRESOLUTION = (0x2000), - DM_TTOPTION = (0x4000), - DM_COLLATE = (0x8000), - DM_FORMNAME = (0x10000), - DM_LOGPIXELS = (0x20000), - DM_ICMMETHOD = (0x800000), - DM_ICMINTENT = (0x1000000), - DM_MEDIATYPE = (0x2000000), - DM_DITHERTYPE = (0x4000000), - DMORIENT_LANDSCAPE = (2), - DMORIENT_PORTRAIT = (1), - DMPAPER_LETTER = (1), - DMPAPER_LEGAL = (5), - DMPAPER_A4 = (9), - DMPAPER_CSHEET = (24), - DMPAPER_DSHEET = (25), - DMPAPER_ESHEET = (26), - DMPAPER_LETTERSMALL = (2), - DMPAPER_TABLOID = (3), - DMPAPER_LEDGER = (4), - DMPAPER_STATEMENT = (6), - DMPAPER_EXECUTIVE = (7), - DMPAPER_A3 = (8), - DMPAPER_A4SMALL = (10), - DMPAPER_A5 = (11), - DMPAPER_B4 = (12), - DMPAPER_B5 = (13), - DMPAPER_FOLIO = (14), - DMPAPER_QUARTO = (15), - DMPAPER_10X14 = (16), - DMPAPER_11X17 = (17), - DMPAPER_NOTE = (18), - DMPAPER_ENV_9 = (19), - DMPAPER_ENV_10 = (20), - DMPAPER_ENV_11 = (21), - DMPAPER_ENV_12 = (22), - DMPAPER_ENV_14 = (23), - DMPAPER_ENV_DL = (27), - DMPAPER_ENV_C5 = (28), - DMPAPER_ENV_C3 = (29), - DMPAPER_ENV_C4 = (30), - DMPAPER_ENV_C6 = (31), - DMPAPER_ENV_C65 = (32), - DMPAPER_ENV_B4 = (33), - DMPAPER_ENV_B5 = (34), - DMPAPER_ENV_B6 = (35), - DMPAPER_ENV_ITALY = (36), - DMPAPER_ENV_MONARCH = (37), - DMPAPER_ENV_PERSONAL = (38), - DMPAPER_FANFOLD_US = (39), - DMPAPER_FANFOLD_STD_GERMAN = (40), - DMPAPER_FANFOLD_LGL_GERMAN = (41), - DMRES_HIGH = -((4)), - DMRES_MEDIUM = -((3)), - DMRES_LOW = -((2)), - DMRES_DRAFT = -((1)), - DMCOLOR_COLOR = (2), - DMCOLOR_MONOCHROME = (1), - DMDUP_SIMPLEX = (1), - DMDUP_HORIZONTAL = (3), - DMDUP_VERTICAL = (2), - DMTT_BITMAP = (1), - DMTT_DOWNLOAD = (2), - DMTT_SUBDEV = (3), - DMCOLLATE_TRUE = (1), - DMCOLLATE_FALSE = (0), - DM_GRAYSCALE = (1), - DM_INTERLACED = (2), - DMICMMETHOD_NONE = (1), - DMICMMETHOD_SYSTEM = (2), - DMICMMETHOD_DRIVER = (3), - DMICMMETHOD_DEVICE = (4), - DMICMMETHOD_USER = (256), - DMICM_SATURATE = (1), - DMICM_CONTRAST = (2), - DMICM_COLORMETRIC = (3), - DMICM_USER = (256), - DMMEDIA_STANDARD = (1), - DMMEDIA_GLOSSY = (3), - DMMEDIA_TRANSPARENCY = (2), - DMMEDIA_USER = (256), - DMDITHER_NONE = (1), - DMDITHER_COARSE = (2), - DMDITHER_FINE = (3), - DMDITHER_LINEART = (4), - DMDITHER_GRAYSCALE = (10), - DMDITHER_USER = (256), - RDH_RECTANGLES = (1), - TT_POLYGON_TYPE = (24), - TT_PRIM_LINE = (1), - TT_PRIM_QSPLINE = (2), - GCPCLASS_ARABIC = (2), - GCPCLASS_HEBREW = (2), - GCPCLASS_LATIN = (1), - GCPCLASS_LATINNUMBER = (5), - GCPCLASS_LOCALNUMBER = (4), - GCPCLASS_LATINNUMERICSEPARATOR = (7), - GCPCLASS_LATINNUMERICTERMINATOR = (6), - GCPCLASS_NEUTRAL = (3), - GCPCLASS_NUMERICSEPARATOR = (8), - GCPCLASS_PREBOUNDLTR = (128), - GCPCLASS_PREBOUNDRTL = (64), - GCPCLASS_POSTBOUNDLTR = (32), - GCPCLASS_POSTBOUNDRTL = (16), - GCPGLYPH_LINKBEFORE = (32768), - GCPGLYPH_LINKAFTER = (16384), - TT_AVAILABLE = (1), - TT_ENABLED = (2), - CA_NEGATIVE = (1), - CA_LOG_FILTER = (2), - ILLUMINANT_DEVICE_DEFAULT = (0), - ILLUMINANT_A = (1), - ILLUMINANT_B = (2), - ILLUMINANT_C = (3), - ILLUMINANT_D50 = (4), - ILLUMINANT_D55 = (5), - ILLUMINANT_D65 = (6), - ILLUMINANT_D75 = (7), - ILLUMINANT_F2 = (8), - ILLUMINANT_TUNGSTEN = (1), - ILLUMINANT_DAYLIGHT = (3), - ILLUMINANT_FLUORESCENT = (8), - ILLUMINANT_NTSC = (3), - DI_APPBANDING = (1), - EMR_HEADER = (1), - ENHMETA_SIGNATURE = (1179469088), - ENM_CHANGE = (1), - ENM_CORRECTTEXT = (4194304), - ENM_DROPFILES = (1048576), - ENM_KEYEVENTS = (65536), - ENM_MOUSEEVENTS = (131072), - ENM_PROTECTED = (2097152), - ENM_REQUESTRESIZE = (262144), - ENM_SCROLL = (4), - ENM_SELCHANGE = (524288), - ENM_UPDATE = (2), - ENM_NONE = (0), - ES_DISABLENOSCROLL = (8192), - ES_EX_NOCALLOLEINIT = (16777216), - ES_NOIME = (524288), - ES_SAVESEL = (32768), - ES_SELFIME = (262144), - ES_SUNKEN = (16384), - ES_VERTICAL = (4194304), - ES_SELECTIONBAR = (16777216), - ECOOP_SET = (1), - ECOOP_OR = (2), - ECOOP_AND = (3), - ECOOP_XOR = (4), - ECO_AUTOWORDSELECTION = (1), - ECO_AUTOVSCROLL = (64), - ECO_AUTOHSCROLL = (128), - ECO_NOHIDESEL = (256), - ECO_READONLY = (2048), - ECO_WANTRETURN = (4096), - ECO_SAVESEL = (32768), - ECO_SELECTIONBAR = (16777216), - ECO_VERTICAL = (4194304), - SCF_WORD = (2), - SCF_SELECTION = (1), - SF_TEXT = (1), - SF_RTF = (2), - SF_RTFNOOBJS = (3), - SF_TEXTIZED = (4), - SFF_SELECTION = (32768), - SFF_PLAINRTF = (16384), - WB_CLASSIFY = (3), - WB_LEFTBREAK = (6), - WB_PREVBREAK = (6), - WB_MOVEWORDLEFT = (4), - WB_MOVEWORDPREV = (4), - WB_MOVEWORDRIGHT = (5), - WB_MOVEWORDNEXT = (5), - WB_RIGHTBREAK = (7), - WB_NEXTBREAK = (7), - PC_LEADING = (2), - PC_FOLLOWING = (1), - PC_DELIMITER = (4), - PC_OVERFLOW = (3), - WBF_WORDWRAP = (16), - WBF_WORDBREAK = (32), - WBF_OVERFLOW = (64), - WBF_LEVEL1 = (128), - WBF_LEVEL2 = (256), - WBF_CUSTOM = (512), - WBF_BREAKAFTER = (64), - WBF_BREAKLINE = (32), - WBF_ISWHITE = (16), - CFM_BOLD = (1), - CFM_COLOR = (1073741824), - CFM_FACE = (536870912), - CFM_ITALIC = (2), - CFM_OFFSET = (268435456), - CFM_PROTECTED = (16), - CFM_SIZE = (0x80000000), - CFM_STRIKEOUT = (8), - CFM_UNDERLINE = (4), - CFE_AUTOCOLOR = (1073741824), - CFE_BOLD = (1), - CFE_ITALIC = (2), - CFE_STRIKEOUT = (8), - CFE_UNDERLINE = (4), - CFE_PROTECTED = (16), - PFM_ALIGNMENT = (8), - PFM_NUMBERING = (32), - PFM_OFFSET = (4), - PFM_OFFSETINDENT = (0x80000000), - PFM_RIGHTINDENT = (2), - PFM_STARTINDENT = (1), - PFM_TABSTOPS = (16), - PFN_BULLET = (1), - PFA_LEFT = (1), - PFA_RIGHT = (2), - PFA_CENTER = (3), - SEL_EMPTY = (0), - SEL_TEXT = (1), - SEL_OBJECT = (2), - SEL_MULTICHAR = (4), - SEL_MULTIOBJECT = (8), -} -const { -char* CF_RTF = ("Rich Text Format"); -char* CF_RETEXTOBJ = ("RichEdit Text and Objects"); -} -enum : DWORD { - ODT_BUTTON = (4), - ODT_COMBOBOX = (3), - ODT_LISTBOX = (2), - ODT_LISTVIEW = (102), - ODT_MENU = (1), - ODT_STATIC = (5), - ODT_TAB = (101), - ODT_HEADER = (100), - ODA_DRAWENTIRE = (1), - ODA_FOCUS = (4), - ODA_SELECT = (2), - ODS_CHECKED = (8), - ODS_COMBOBOXEDIT = (4096), - ODS_DEFAULT = (32), - ODS_DISABLED = (4), - ODS_FOCUS = (16), - ODS_GRAYED = (2), - ODS_SELECTED = (1), -} -const { -char* ANIMATE_CLASSW = ("SysAnimate32"); -char* HOTKEY_CLASSW = ("msctls_hotkey32"); -char* PROGRESS_CLASSW = ("msctls_progress32"); -char* STATUSCLASSNAMEW = ("msctls_statusbar32"); -char* TOOLBARCLASSNAMEW = ("ToolbarWindow32"); -char* TOOLTIPS_CLASSW = ("tooltips_class32"); -char* TRACKBAR_CLASSW = ("msctls_trackbar32"); -char* UPDOWN_CLASSW = ("msctls_updown32"); -char* WC_HEADERW = ("SysHeader32"); -char* WC_LISTVIEWW = ("SysListView32"); -char* WC_TABCONTROLW = ("SysTabControl32"); -char* WC_TREEVIEWW = ("SysTreeView32"); -} -enum : DWORD { - CCS_ADJUSTABLE = (0x20), - CCS_BOTTOM = (0x3), - CCS_NODIVIDER = (0x40), - CCS_NOMOVEY = (0x2), - CCS_NOPARENTALIGN = (0x8), - CCS_NORESIZE = (0x4), - CCS_TOP = (0x1), -} -const { -char* ANIMATE_CLASSA = ("SysAnimate32"); -char* HOTKEY_CLASSA = ("msctls_hotkey32"); -char* PROGRESS_CLASSA = ("msctls_progress32"); -char* STATUSCLASSNAMEA = ("msctls_statusbar32"); -char* TOOLBARCLASSNAMEA = ("ToolbarWindow32"); -char* TOOLTIPS_CLASSA = ("tooltips_class32"); -char* TRACKBAR_CLASSA = ("msctls_trackbar32"); -char* UPDOWN_CLASSA = ("msctls_updown32"); -char* WC_HEADERA = ("SysHeader32"); -char* WC_LISTVIEWA = ("SysListView32"); -char* WC_TABCONTROLA = ("SysTabControl32"); -char* WC_TREEVIEWA = ("SysTreeView32"); -char* ANIMATE_CLASS = (ANIMATE_CLASSA); -char* HOTKEY_CLASS = (HOTKEY_CLASSA); -char* PROGRESS_CLASS = (PROGRESS_CLASSA); -char* STATUSCLASSNAME = (STATUSCLASSNAMEA); -char* TOOLBARCLASSNAME = (TOOLBARCLASSNAMEA); -char* TOOLTIPS_CLASS = (TOOLTIPS_CLASSA); -char* TRACKBAR_CLASS = (TRACKBAR_CLASSA); -char* UPDOWN_CLASS = (UPDOWN_CLASSA); -char* WC_HEADER = (WC_HEADERA); -char* WC_LISTVIEW = (WC_LISTVIEWA); -char* WC_TABCONTROL = (WC_TABCONTROLA); -char* WC_TREEVIEW = (WC_TREEVIEWA); -} -enum : DWORD { - HDS_BUTTONS = (2), - HDS_HIDDEN = (8), - HDS_HORZ = (0), - HDI_BITMAP = (16), - HDI_FORMAT = (4), - HDI_HEIGHT = (1), - HDI_LPARAM = (8), - HDI_TEXT = (2), - HDI_WIDTH = (1), - HDF_CENTER = (2), - HDF_LEFT = (0), - HDF_RIGHT = (1), - HDF_RTLREADING = (4), - HDF_BITMAP = (8192), - HDF_OWNERDRAW = (32768), - HDF_STRING = (16384), - HDF_JUSTIFYMASK = (3), - HHT_NOWHERE = (1), - HHT_ONDIVIDER = (4), - HHT_ONDIVOPEN = (8), - HHT_ONHEADER = (2), - HHT_TOLEFT = (2048), - HHT_TORIGHT = (1024), - HINST_COMMCTRL = -(1), - IDB_STD_LARGE_COLOR = (1), - IDB_STD_SMALL_COLOR = (0), - IDB_VIEW_LARGE_COLOR = (5), - IDB_VIEW_SMALL_COLOR = (4), - STD_COPY = (1), - STD_CUT = (0), - STD_DELETE = (5), - STD_FILENEW = (6), - STD_FILEOPEN = (7), - STD_FILESAVE = (8), - STD_FIND = (12), - STD_HELP = (11), - STD_PASTE = (2), - STD_PRINT = (14), - STD_PRINTPRE = (9), - STD_PROPERTIES = (10), - STD_REDOW = (4), - STD_REPLACE = (13), - STD_UNDO = (3), - VIEW_LARGEICONS = (0), - VIEW_SMALLICONS = (1), - VIEW_LIST = (2), - VIEW_DETAILS = (3), - VIEW_SORTNAME = (4), - VIEW_SORTSIZE = (5), - VIEW_SORTDATE = (6), - VIEW_SORTTYPE = (7), - TBSTYLE_ALTDRAG = (1024), - TBSTYLE_TOOLTIPS = (256), - TBSTYLE_WRAPABLE = (512), - TBSTYLE_BUTTON = (0), - TBSTYLE_CHECK = (2), - TBSTYLE_CHECKGROUP = (6), - TBSTYLE_GROUP = (4), - TBSTYLE_SEP = (1), - TBSTATE_CHECKED = (1), - TBSTATE_ENABLED = (4), - TBSTATE_HIDDEN = (8), - TBSTATE_INDETERMINATE = (16), - TBSTATE_PRESSED = (2), - TBSTATE_WRAP = (32), - TTS_ALWAYSTIP = (1), - TTS_NOPREFIX = (2), - TTF_IDISHWND = (1), - TTF_CENTERTIP = (2), - TTF_RTLREADING = (4), - TTF_SUBCLASS = (16), - TTDT_AUTOMATIC = (0), - TTDT_AUTOPOP = (2), - TTDT_INITIAL = (3), - TTDT_RESHOW = (1), - SBARS_SIZEGRIP = (256), - DL_MOVECURSOR = (3), - DL_COPYCURSOR = (2), - DL_STOPCURSOR = (1), - UDS_ALIGNLEFT = (8), - UDS_ALIGNRIGHT = (4), - UDS_ARROWKEYS = (32), - UDS_AUTOBUDDY = (16), - UDS_HORZ = (64), - UDS_NOTHOUSANDS = (128), - UDS_SETBUDDYINT = (2), - UDS_WRAP = (1), - UD_MAXVAL = (32767), - UD_MINVAL = -((32767)), - HOTKEYF_ALT = (4), - HOTKEYF_CONTROL = (2), - HOTKEYF_EXT = (8), - HOTKEYF_SHIFT = (1), - HKCOMB_A = (8), - HKCOMB_C = (4), - HKCOMB_CA = (64), - HKCOMB_NONE = (1), - HKCOMB_S = (2), - HKCOMB_SA = (32), - HKCOMB_SC = (16), - HKCOMB_SCA = (128), - TBS_HORZ = (0), - TBS_VERT = (2), - TBS_AUTOTICKS = (1), - TBS_NOTICKS = (16), - TBS_TOP = (4), - TBS_BOTTOM = (0), - TBS_LEFT = (4), - TBS_RIGHT = (0), - TBS_BOTH = (8), - TBS_ENABLESELRANGE = (32), - TBS_FIXEDLENGTH = (64), - TBS_NOTHUMB = (128), - TB_BOTTOM = (7), - TB_ENDTRACK = (8), - TB_LINEDOWN = (1), - TB_LINEUP = (0), - TB_PAGEDOWN = (3), - TB_PAGEUP = (2), - TB_THUMBPOSITION = (4), - TB_THUMBTRACK = (5), - TB_TOP = (6), - LVS_ALIGNLEFT = (2048), - LVS_ALIGNTOP = (0), - LVS_AUTOARRANGE = (256), - LVS_EDITLABELS = (512), - LVS_ICON = (0), - LVS_LIST = (3), - LVS_NOCOLUMNHEADER = (16384), - LVS_NOLABELWRAP = (128), - LVS_NOSCROLL = (8192), - LVS_NOSORTHEADER = (32768), - LVS_OWNERDRAWFIXED = (1024), - LVS_REPORT = (1), - LVS_SHAREIMAGELISTS = (64), - LVS_SHOWSELALWAYS = (8), - LVS_SINGLESEL = (4), - LVS_SMALLICON = (2), - LVS_SORTASCENDING = (16), - LVS_SORTDESCENDING = (32), - LVS_TYPESTYLEMASK = (64512), - LVSIL_NORMAL = (0), - LVSIL_SMALL = (1), - LVSIL_STATE = (2), - LVIS_CUT = (4), - LVIS_DROPHILITED = (8), - LVIS_FOCUSED = (1), - LVIS_SELECTED = (2), - LVIS_OVERLAYMASK = (3840), - LVIS_STATEIMAGEMASK = (61440), -} -const { -wchar* LPSTR_TEXTCALLBACKW = cast(LPWSTR)(-(1)); -char* LPSTR_TEXTCALLBACKA = cast(LPSTR)(-(1)); -char* LPSTR_TEXTCALLBACK = (LPSTR_TEXTCALLBACKA); -} -enum : DWORD { - LVIF_TEXT = (1), - LVIF_IMAGE = (2), - LVIF_PARAM = (4), - LVIF_STATE = (8), - LVIF_DI_SETITEM = (4096), - LVNI_ABOVE = (256), - LVNI_ALL = (0), - LVNI_BELOW = (512), - LVNI_TOLEFT = (1024), - LVNI_TORIGHT = (2048), - LVNI_CUT = (4), - LVNI_DROPHILITED = (8), - LVNI_FOCUSED = (1), - LVNI_SELECTED = (2), - LVFI_PARAM = (1), - LVFI_PARTIAL = (8), - LVFI_STRING = (2), - LVFI_WRAP = (32), - LVFI_NEARESTXY = (64), - LVHT_ABOVE = (8), - LVHT_BELOW = (16), - LVHT_NOWHERE = (1), - LVHT_ONITEMICON = (2), - LVHT_ONITEMLABEL = (4), - LVHT_ONITEMSTATEICON = (8), - LVHT_TOLEFT = (64), - LVHT_TORIGHT = (32), - LVCF_FMT = (1), - LVCF_SUBITEM = (8), - LVCF_TEXT = (4), - LVCF_WIDTH = (2), - LVCFMT_CENTER = (2), - LVCFMT_LEFT = (0), - LVCFMT_RIGHT = (1), - LVIR_BOUNDS = (0), - LVIR_ICON = (1), - LVIR_LABEL = (2), - LVIR_SELECTBOUNDS = (3), - LVA_ALIGNLEFT = (1), - LVA_ALIGNTOP = (2), - LVA_DEFAULT = (0), - LVA_SNAPTOGRID = (5), - LVSCW_AUTOSIZE = -((1)), - LVSCW_AUTOSIZE_USEHEADER = -((2)), - TVS_DISABLEDRAGDROP = (16), - TVS_EDITLABELS = (8), - TVS_HASBUTTONS = (1), - TVS_HASLINES = (2), - TVS_LINESATROOT = (4), - TVS_SHOWSELALWAYS = (32), - TVIS_BOLD = (16), - TVIS_CUT = (4), - TVIS_DROPHILITED = (8), - TVIS_EXPANDED = (32), - TVIS_EXPANDEDONCE = (64), - TVIS_FOCUSED = (1), - TVIS_OVERLAYMASK = (3840), - TVIS_SELECTED = (2), - TVIS_STATEIMAGEMASK = (61440), - TVIS_USERMASK = (61440), - TVIF_CHILDREN = (64), - TVIF_HANDLE = (16), - TVIF_IMAGE = (2), - TVIF_PARAM = (4), - TVIF_SELECTEDIMAGE = (32), - TVIF_STATE = (8), - TVIF_TEXT = (1), - I_CHILDRENCALLBACK = -((1)), - I_IMAGECALLBACK = -((1)), -} - -struct TREEITEM -{ -} - -alias TREEITEM* HTREEITEM; -alias TREEITEM TTREEITEM; -alias TREEITEM* PTREEITEM; -enum : DWORD { - TVI_ROOT = (0xFFFF0000), - TVI_FIRST = (0xFFFF0001), - TVI_LAST = (0xFFFF0002), - TVI_SORT = (0xFFFF0003), - TVHT_ABOVE = (256), - TVHT_BELOW = (512), - TVHT_NOWHERE = (1), - TVHT_ONITEM = (70), - TVHT_ONITEMBUTTON = (16), - TVHT_ONITEMICON = (2), - TVHT_ONITEMINDENT = (8), - TVHT_ONITEMLABEL = (4), - TVHT_ONITEMRIGHT = (32), - TVHT_ONITEMSTATEICON = (64), - TVHT_TOLEFT = (2048), - TVHT_TORIGHT = (1024), - TVE_COLLAPSE = (1), - TVE_COLLAPSERESET = (32768), - TVE_EXPAND = (2), - TVE_TOGGLE = (3), - TVSIL_NORMAL = (0), - TVSIL_STATE = (2), - TVGN_CARET = (9), - TVGN_CHILD = (4), - TVGN_DROPHILITE = (8), - TVGN_FIRSTVISIBLE = (5), - TVGN_NEXT = (1), - TVGN_NEXTVISIBLE = (6), - TVGN_PARENT = (3), - TVGN_PREVIOUS = (2), - TVGN_PREVIOUSVISIBLE = (7), - TVGN_ROOT = (0), - TVC_BYKEYBOARD = (2), - TVC_BYMOUSE = (1), - TVC_UNKNOWN = (0), - TCS_BUTTONS = (256), - TCS_FIXEDWIDTH = (1024), - TCS_FOCUSNEVER = (32768), - TCS_FOCUSONBUTTONDOWN = (4096), - TCS_FORCEICONLEFT = (16), - TCS_FORCELABELLEFT = (32), - TCS_MULTILINE = (512), - TCS_OWNERDRAWFIXED = (8192), - TCS_RAGGEDRIGHT = (2048), - TCS_RIGHTJUSTIFY = (0), - TCS_SINGLELINE = (0), - TCS_TABS = (0), - TCS_TOOLTIPS = (16384), - TCIF_TEXT = (1), - TCIF_IMAGE = (2), - TCIF_PARAM = (8), - TCIF_RTLREADING = (4), - TCHT_NOWHERE = (1), - TCHT_ONITEM = (6), - TCHT_ONITEMICON = (2), - TCHT_ONITEMLABEL = (4), - ACS_AUTOPLAY = (4), - ACS_CENTER = (1), - ACS_TRANSPARENT = (2), - DIALOPTION_BILLING = (64), - DIALOPTION_QUIET = (128), - DIALOPTION_DIALTONE = (256), - MDMVOLFLAG_LOW = (1), - MDMVOLFLAG_MEDIUM = (2), - MDMVOLFLAG_HIGH = (4), - MDMVOL_LOW = (0), - MDMVOL_MEDIUM = (1), - MDMVOL_HIGH = (2), - MDMSPKRFLAG_OFF = (1), - MDMSPKRFLAG_DIAL = (2), - MDMSPKRFLAG_ON = (4), - MDMSPKRFLAG_CALLSETUP = (8), - MDMSPKR_OFF = (0), - MDMSPKR_DIAL = (1), - MDMSPKR_ON = (2), - MDMSPKR_CALLSETUP = (3), - MDM_BLIND_DIAL = (512), - MDM_CCITT_OVERRIDE = (64), - MDM_CELLULAR = (8), - MDM_COMPRESSION = (1), - MDM_ERROR_CONTROL = (2), - MDM_FLOWCONTROL_HARD = (16), - MDM_FLOWCONTROL_SOFT = (32), - MDM_FORCED_EC = (4), - MDM_SPEED_ADJUST = (128), - MDM_TONE_DIAL = (256), - MDM_V23_OVERRIDE = (1024), - LANG_BULGARIAN = (2), - LANG_CHINESE = (4), - LANG_CROATIAN = (26), - LANG_CZECH = (5), - LANG_DANISH = (6), - LANG_DUTCH = (19), - LANG_ENGLISH = (9), - LANG_FINNISH = (11), - LANG_FRENCH = (12), - LANG_GERMAN = (7), - LANG_GREEK = (8), - LANG_HUNGARIAN = (14), - LANG_ICELANDIC = (15), - LANG_ITALIAN = (16), - LANG_JAPANESE = (17), - LANG_KOREAN = (18), - LANG_NEUTRAL = (0), - LANG_NORWEGIAN = (20), - LANG_POLISH = (21), - LANG_PORTUGUESE = (22), - LANG_ROMANIAN = (24), - LANG_RUSSIAN = (25), - LANG_SLOVAK = (27), - LANG_SLOVENIAN = (36), - LANG_SPANISH = (10), - LANG_SWEDISH = (29), - LANG_TURKISH = (31), - SUBLANG_CHINESE_SIMPLIFIED = (2), - SUBLANG_CHINESE_TRADITIONAL = (1), - SUBLANG_CHINESE_HONGKONG = (3), - SUBLANG_CHINESE_SINGAPORE = (4), - SUBLANG_DEFAULT = (1), - SUBLANG_DUTCH = (1), - SUBLANG_DUTCH_BELGIAN = (2), - SUBLANG_ENGLISH_AUS = (3), - SUBLANG_ENGLISH_CAN = (4), - SUBLANG_ENGLISH_EIRE = (6), - SUBLANG_ENGLISH_NZ = (5), - SUBLANG_ENGLISH_UK = (2), - SUBLANG_ENGLISH_US = (1), - SUBLANG_FRENCH = (1), - SUBLANG_FRENCH_BELGIAN = (2), - SUBLANG_FRENCH_CANADIAN = (3), - SUBLANG_FRENCH_SWISS = (4), - SUBLANG_GERMAN = (1), - SUBLANG_GERMAN_AUSTRIAN = (3), - SUBLANG_GERMAN_SWISS = (2), - SUBLANG_ITALIAN = (1), - SUBLANG_ITALIAN_SWISS = (2), - SUBLANG_NEUTRAL = (0), - SUBLANG_NORWEGIAN_BOKMAL = (1), - SUBLANG_NORWEGIAN_NYNORSK = (2), - SUBLANG_PORTUGUESE = (2), - SUBLANG_PORTUGUESE_BRAZILIAN = (1), - SUBLANG_SPANISH = (1), - SUBLANG_SPANISH_MEXICAN = (2), - SUBLANG_SPANISH_MODERN = (3), - SUBLANG_SYS_DEFAULT = (2), - NLS_VALID_LOCALE_MASK = (1048575), - SORT_DEFAULT = (0), - SORT_JAPANESE_XJIS = (0), - SORT_JAPANESE_UNICODE = (1), - SORT_CHINESE_BIG5 = (0), - SORT_CHINESE_UNICODE = (1), - SORT_KOREAN_KSC = (0), - SORT_KOREAN_UNICODE = (1), - PROCESSOR_INTEL_386 = (386), - PROCESSOR_INTEL_486 = (486), - PROCESSOR_INTEL_PENTIUM = (586), - PROCESSOR_MIPS_R4000 = (4000), - PROCESSOR_ALPHA_21064 = (21064), - COMPRESSION_FORMAT_NONE = (0), - COMPRESSION_FORMAT_DEFAULT = (1), - COMPRESSION_FORMAT_LZNT1 = (2), - TAPE_DRIVE_COMPRESSION = (131072), - TAPE_DRIVE_ECC = (65536), - TAPE_DRIVE_ERASE_BOP_ONLY = (64), - TAPE_DRIVE_ERASE_LONG = (32), - TAPE_DRIVE_ERASE_IMMEDIATE = (128), - TAPE_DRIVE_ERASE_SHORT = (16), - TAPE_DRIVE_FIXED = (1), - TAPE_DRIVE_FIXED_BLOCK = (1024), - TAPE_DRIVE_INITIATOR = (4), - TAPE_DRIVE_PADDING = (262144), - TAPE_DRIVE_GET_ABSOLUTE_BLK = (1048576), - TAPE_DRIVE_GET_LOGICAL_BLK = (2097152), - TAPE_DRIVE_REPORT_SMKS = (524288), - TAPE_DRIVE_SELECT = (2), - TAPE_DRIVE_SET_EOT_WZ_SIZE = (4194304), - TAPE_DRIVE_TAPE_CAPACITY = (256), - TAPE_DRIVE_TAPE_REMAINING = (512), - TAPE_DRIVE_VARIABLE_BLOCK = (2048), - TAPE_DRIVE_WRITE_PROTECT = (4096), - TAPE_DRIVE_ABS_BLK_IMMED = -((2147475456)), - TAPE_DRIVE_ABSOLUTE_BLK = -((2147479552)), - TAPE_DRIVE_END_OF_DATA = -((2147418112)), - TAPE_DRIVE_FILEMARKS = -((2147221504)), - TAPE_DRIVE_LOAD_UNLOAD = -((2147483647)), - TAPE_DRIVE_LOAD_UNLD_IMMED = -((2147483616)), - TAPE_DRIVE_LOCK_UNLOCK = -((2147483644)), - TAPE_DRIVE_LOCK_UNLK_IMMED = -((2147483520)), - TAPE_DRIVE_LOG_BLK_IMMED = -((2147450880)), - TAPE_DRIVE_LOGICAL_BLK = -((2147467264)), - TAPE_DRIVE_RELATIVE_BLKS = -((2147352576)), - TAPE_DRIVE_REVERSE_POSITION = -((2143289344)), - TAPE_DRIVE_REWIND_IMMEDIATE = -((2147483640)), - TAPE_DRIVE_SEQUENTIAL_FMKS = -((2146959360)), - TAPE_DRIVE_SEQUENTIAL_SMKS = -((2145386496)), - TAPE_DRIVE_SET_BLOCK_SIZE = -((2147483632)), - TAPE_DRIVE_SET_COMPRESSION = -((2147483136)), - TAPE_DRIVE_SET_ECC = -((2147483392)), - TAPE_DRIVE_SET_PADDING = -((2147482624)), - TAPE_DRIVE_SET_REPORT_SMKS = -((2147481600)), - TAPE_DRIVE_SETMARKS = -((2146435072)), - TAPE_DRIVE_SPACE_IMMEDIATE = -((2139095040)), - TAPE_DRIVE_TENSION = -((2147483646)), - TAPE_DRIVE_TENSION_IMMED = -((2147483584)), - TAPE_DRIVE_WRITE_FILEMARKS = -((2113929216)), - TAPE_DRIVE_WRITE_LONG_FMKS = -((2013265920)), - TAPE_DRIVE_WRITE_MARK_IMMED = -((1879048192)), - TAPE_DRIVE_WRITE_SETMARKS = -((2130706432)), - TAPE_DRIVE_WRITE_SHORT_FMKS = -((2080374784)), - STANDARD_RIGHTS_REQUIRED = (0xf0000), - STANDARD_RIGHTS_WRITE = (0x20000), - STANDARD_RIGHTS_READ = (0x20000), - STANDARD_RIGHTS_EXECUTE = (0x20000), - STANDARD_RIGHTS_ALL = (0x1f0000), - SPECIFIC_RIGHTS_ALL = (0xffff), - MAXIMUM_ALLOWED = (0x2000000), - GENERIC_ALL = (0x10000000), - SECURITY_NULL_RID = (0), - SECURITY_WORLD_RID = (0), - SECURITY_LOCAL_RID = (0), - SECURITY_CREATOR_OWNER_RID = (0), - SECURITY_CREATOR_GROUP_RID = (0x1), - SECURITY_DIALUP_RID = (0x1), - SECURITY_NETWORK_RID = (0x2), - SECURITY_BATCH_RID = (0x3), - SECURITY_INTERACTIVE_RID = (0x4), - SECURITY_LOGON_IDS_RID = (0x5), - SECURITY_LOGON_IDS_RID_COUNT = (0x3), - SECURITY_SERVICE_RID = (0x6), - SECURITY_LOCAL_SYSTEM_RID = (0x12), - SECURITY_BUILTIN_DOMAIN_RID = (0x20), - DOMAIN_USER_RID_ADMIN = (0x1f4), - DOMAIN_USER_RID_GUEST = (0x1f5), - DOMAIN_GROUP_RID_ADMINS = (0x200), - DOMAIN_GROUP_RID_USERS = (0x201), - DOMAIN_ALIAS_RID_ADMINS = (0x220), - DOMAIN_ALIAS_RID_USERS = (0x221), - DOMAIN_ALIAS_RID_GUESTS = (0x222), - DOMAIN_ALIAS_RID_POWER_USERS = (0x223), - DOMAIN_ALIAS_RID_ACCOUNT_OPS = (0x224), - DOMAIN_ALIAS_RID_SYSTEM_OPS = (0x225), - DOMAIN_ALIAS_RID_PRINT_OPS = (0x226), - DOMAIN_ALIAS_RID_BACKUP_OPS = (0x227), - DOMAIN_ALIAS_RID_REPLICATOR = (0x228), - SE_GROUP_MANDATORY = (0x1), - SE_GROUP_ENABLED_BY_DEFAULT = (0x2), - SE_GROUP_ENABLED = (0x4), - SE_GROUP_OWNER = (0x8), - SE_GROUP_LOGON_ID = (0xc0000000), - ACL_REVISION = (2), - ACCESS_ALLOWED_ACE_TYPE = (0x0), - ACCESS_DENIED_ACE_TYPE = (0x1), - SYSTEM_AUDIT_ACE_TYPE = (0x2), - SYSTEM_ALARM_ACE_TYPE = (0x3), - OBJECT_INHERIT_ACE = (0x1), - CONTAINER_INHERIT_ACE = (0x2), - NO_PROPAGATE_INHERIT_ACE = (0x4), - INHERIT_ONLY_ACE = (0x8), - SUCCESSFUL_ACCESS_ACE_FLAG = (0x40), - FAILED_ACCESS_ACE_FLAG = (0x80), - SECURITY_DESCRIPTOR_MIN_LENGTH = (20), - SE_OWNER_DEFAULTED = (1), - SE_GROUP_DEFAULTED = (2), - SE_DACL_PRESENT = (4), - SE_DACL_DEFAULTED = (8), - SE_SACL_PRESENT = (16), - SE_SACL_DEFAULTED = (32), - SE_SELF_RELATIVE = (32768), - SE_PRIVILEGE_ENABLED_BY_DEFAULT = (0x1), - SE_PRIVILEGE_ENABLED = (0x2), - SE_PRIVILEGE_USED_FOR_ACCESS = (0x80000000), - PRIVILEGE_SET_ALL_NECESSARY = (0x1), - OFN_ALLOWMULTISELECT = (0x200), - OFN_CREATEPROMPT = (0x2000), - OFN_ENABLEHOOK = (0x20), - OFN_ENABLETEMPLATE = (0x40), - OFN_ENABLETEMPLATEHANDLE = (0x80), - OFN_EXPLORER = (0x80000), - OFN_EXTENSIONDIFFERENT = (0x400), - OFN_FILEMUSTEXIST = (0x1000), - OFN_HIDEREADONLY = (0x4), - OFN_LONGNAMES = (0x200000), - OFN_NOCHANGEDIR = (0x8), - OFN_NODEREFERENCELINKS = (0x100000), - OFN_NOLONGNAMES = (0x40000), - OFN_NONETWORKBUTTON = (0x20000), - OFN_NOREADONLYRETURN = (0x8000), - OFN_NOTESTFILECREATE = (0x10000), - OFN_NOVALIDATE = (0x100), - OFN_OVERWRITEPROMPT = (0x2), - OFN_PATHMUSTEXIST = (0x800), - OFN_READONLY = (0x1), - OFN_SHAREAWARE = (0x4000), - OFN_SHOWHELP = (0x10), - OFN_SHAREFALLTHROUGH = (0x2), - OFN_SHARENOWARN = (0x1), - OFN_SHAREWARN = (0), - CDN_INITDONE = (0xfffffda7), - CDN_SELCHANGE = (0xfffffda6), - CDN_FOLDERCHANGE = (0xfffffda5), - CDN_SHAREVIOLATION = (0xfffffda4), - CDN_HELP = (0xfffffda3), - CDN_FILEOK = (0xfffffda2), - CDN_TYPECHANGE = (0xfffffda1), - CDM_GETFILEPATH = (0x465), - CDM_GETFOLDERIDLIST = (0x467), - CDM_GETFOLDERPATH = (0x466), - CDM_GETSPEC = (0x464), - CDM_HIDECONTROL = (0x469), - CDM_SETCONTROLTEXT = (0x468), - CDM_SETDEFEXT = (0x46a), - CC_ENABLEHOOK = (0x10), - CC_ENABLETEMPLATE = (0x20), - CC_ENABLETEMPLATEHANDLE = (0x40), - CC_FULLOPEN = (0x2), - CC_PREVENTFULLOPEN = (0x4), - CC_RGBINIT = (0x1), - CC_SHOWHELP = (0x8), - CC_SOLIDCOLOR = (0x80), - FR_DIALOGTERM = (0x40), - FR_DOWN = (0x1), - FR_ENABLEHOOK = (0x100), - FR_ENABLETEMPLATE = (0x200), - FR_ENABLETEMPLATEHANDLE = (0x2000), - FR_FINDNEXT = (0x8), - FR_HIDEUPDOWN = (0x4000), - FR_HIDEMATCHCASE = (0x8000), - FR_HIDEWHOLEWORD = (0x10000), - FR_MATCHCASE = (0x4), - FR_NOMATCHCASE = (0x800), - FR_NOUPDOWN = (0x400), - FR_NOWHOLEWORD = (0x1000), - FR_REPLACE = (0x10), - FR_REPLACEALL = (0x20), - FR_SHOWHELP = (0x80), - FR_WHOLEWORD = (0x2), - CF_APPLY = (0x200), - CF_ANSIONLY = (0x400), - CF_BOTH = (0x3), - CF_TTONLY = (0x40000), - CF_EFFECTS = (0x100), - CF_ENABLEHOOK = (0x8), - CF_ENABLETEMPLATE = (0x10), - CF_ENABLETEMPLATEHANDLE = (0x20), - CF_FIXEDPITCHONLY = (0x4000), - CF_FORCEFONTEXIST = (0x10000), - CF_INITTOLOGFONTSTRUCT = (0x40), - CF_LIMITSIZE = (0x2000), - CF_NOOEMFONTS = (0x800), - CF_NOFACESEL = (0x80000), - CF_NOSCRIPTSEL = (0x800000), - CF_NOSTYLESEL = (0x100000), - CF_NOSIZESEL = (0x200000), - CF_NOSIMULATIONS = (0x1000), - CF_NOVECTORFONTS = (0x800), - CF_NOVERTFONTS = (0x1000000), - CF_PRINTERFONTS = (0x2), - CF_SCALABLEONLY = (0x20000), - CF_SCREENFONTS = (0x1), - CF_SCRIPTSONLY = (0x400), - CF_SELECTSCRIPT = (0x400000), - CF_SHOWHELP = (0x4), - CF_USESTYLE = (0x80), - CF_WYSIWYG = (0x8000), - BOLD_FONTTYPE = (0x100), - ITALIC_FONTTYPE = (0x200), - PRINTER_FONTTYPE = (0x4000), - REGULAR_FONTTYPE = (0x400), - SCREEN_FONTTYPE = (0x2000), - SIMULATED_FONTTYPE = (0x8000), -} -const { -char* COLOROKSTRINGW = ("commdlg_ColorOK"); -char* FILEOKSTRINGW = ("commdlg_FileNameOK"); -char* FINDMSGSTRINGW = ("commdlg_FindReplace"); -char* HELPMSGSTRINGW = ("commdlg_help"); -char* LBSELCHSTRINGW = ("commdlg_LBSelChangedNotify"); -char* SETRGBSTRINGW = ("commdlg_SetRGBColor"); -char* SHAREVISTRINGW = ("commdlg_ShareViolation"); -char* COLOROKSTRINGA = ("commdlg_ColorOK"); -char* FILEOKSTRINGA = ("commdlg_FileNameOK"); -char* FINDMSGSTRINGA = ("commdlg_FindReplace"); -char* HELPMSGSTRINGA = ("commdlg_help"); -char* LBSELCHSTRINGA = ("commdlg_LBSelChangedNotify"); -char* SETRGBSTRINGA = ("commdlg_SetRGBColor"); -char* SHAREVISTRINGA = ("commdlg_ShareViolation"); -char* COLOROKSTRING = (COLOROKSTRINGA); -char* FILEOKSTRING = (FILEOKSTRINGA); -char* FINDMSGSTRING = (FINDMSGSTRINGA); -char* HELPMSGSTRING = (HELPMSGSTRINGA); -char* LBSELCHSTRING = (LBSELCHSTRINGA); -char* SETRGBSTRING = (SETRGBSTRINGA); -char* SHAREVISTRING = (SHAREVISTRINGA); -} -enum : DWORD { - CD_LBSELCHANGE = (0), - CD_LBSELADD = (2), - CD_LBSELSUB = (1), - CD_LBSELNOITEMS = -((1)), - DN_DEFAULTPRN = (1), - PD_ALLPAGES = (0), - PD_COLLATE = (16), - PD_DISABLEPRINTTOFILE = (524288), - PD_ENABLEPRINTHOOK = (4096), - PD_ENABLEPRINTTEMPLATE = (16384), - PD_ENABLEPRINTTEMPLATEHANDLE = (65536), - PD_ENABLESETUPHOOK = (8192), - PD_ENABLESETUPTEMPLATE = (32768), - PD_ENABLESETUPTEMPLATEHANDLE = (131072), - PD_HIDEPRINTTOFILE = (1048576), - PD_NOPAGENUMS = (8), - PD_NOSELECTION = (4), - PD_NOWARNING = (128), - PD_PAGENUMS = (2), - PD_PRINTSETUP = (64), - PD_PRINTTOFILE = (32), - PD_RETURNDC = (256), - PD_RETURNDEFAULT = (1024), - PD_RETURNIC = (512), - PD_SELECTION = (1), - PD_SHOWHELP = (2048), - PD_USEDEVMODECOPIES = (262144), - PD_USEDEVMODECOPIESANDCOLLATE = (262144), - PSD_DEFAULTMINMARGINS = (0), - PSD_DISABLEMARGINS = (16), - PSD_DISABLEORIENTATION = (256), - PSD_DISABLEPAGEPAINTING = (524288), - PSD_DISABLEPAPER = (512), - PSD_DISABLEPRINTER = (32), - PSD_ENABLEPAGEPAINTHOOK = (262144), - PSD_ENABLEPAGESETUPHOOK = (8192), - PSD_ENABLEPAGESETUPTEMPLATE = (32768), - PSD_ENABLEPAGESETUPTEMPLATEHANDLE = (131072), - PSD_INHUNDREDTHSOFMILLIMETERS = (8), - PSD_INTHOUSANDTHSOFINCHES = (4), - PSD_INWININIINTLMEASURE = (0), - PSD_MARGINS = (2), - PSD_MINMARGINS = (1), - PSD_NOWARNING = (128), - PSD_RETURNDEFAULT = (1024), - PSD_SHOWHELP = (2048), - SW_OTHERUNZOOM = (4), - SW_OTHERZOOM = (2), - SW_PARENTCLOSING = (1), - SW_PARENTOPENING = (3), - VK_LBUTTON = (1), - VK_RBUTTON = (2), - VK_CANCEL = (3), - VK_MBUTTON = (4), - VK_BACK = (8), - VK_TAB = (9), - VK_CLEAR = (12), - VK_RETURN = (13), - VK_SHIFT = (16), - VK_CONTROL = (17), - VK_MENU = (18), - VK_PAUSE = (19), - VK_CAPITAL = (20), - VK_ESCAPE = (27), - VK_SPACE = (32), - VK_PRIOR = (33), - VK_NEXT = (34), - VK_END = (35), - VK_HOME = (36), - VK_LEFT = (37), - VK_UP = (38), - VK_RIGHT = (39), - VK_DOWN = (40), - VK_SELECT = (41), - VK_PRINT = (42), - VK_EXECUTE = (43), - VK_SNAPSHOT = (44), - VK_INSERT = (45), - VK_DELETE = (46), - VK_HELP = (47), - VK_0 = (48), - VK_1 = (49), - VK_2 = (50), - VK_3 = (51), - VK_4 = (52), - VK_5 = (53), - VK_6 = (54), - VK_7 = (55), - VK_8 = (56), - VK_9 = (57), - VK_A = (65), - VK_B = (66), - VK_C = (67), - VK_D = (68), - VK_E = (69), - VK_F = (70), - VK_G = (71), - VK_H = (72), - VK_I = (73), - VK_J = (74), - VK_K = (75), - VK_L = (76), - VK_M = (77), - VK_N = (78), - VK_O = (79), - VK_P = (80), - VK_Q = (81), - VK_R = (82), - VK_S = (83), - VK_T = (84), - VK_U = (85), - VK_V = (86), - VK_W = (87), - VK_X = (88), - VK_Y = (89), - VK_Z = (90), - VK_NUMPAD0 = (96), - VK_NUMPAD1 = (97), - VK_NUMPAD2 = (98), - VK_NUMPAD3 = (99), - VK_NUMPAD4 = (100), - VK_NUMPAD5 = (101), - VK_NUMPAD6 = (102), - VK_NUMPAD7 = (103), - VK_NUMPAD8 = (104), - VK_NUMPAD9 = (105), - VK_MULTIPLY = (106), - VK_ADD = (107), - VK_SEPARATOR = (108), - VK_SUBTRACT = (109), - VK_DECIMAL = (110), - VK_DIVIDE = (111), - VK_F1 = (112), - VK_F2 = (113), - VK_F3 = (114), - VK_F4 = (115), - VK_F5 = (116), - VK_F6 = (117), - VK_F7 = (118), - VK_F8 = (119), - VK_F9 = (120), - VK_F10 = (121), - VK_F11 = (122), - VK_F12 = (123), - VK_F13 = (124), - VK_F14 = (125), - VK_F15 = (126), - VK_F16 = (127), - VK_F17 = (128), - VK_F18 = (129), - VK_F19 = (130), - VK_F20 = (131), - VK_F21 = (132), - VK_F22 = (133), - VK_F23 = (134), - VK_F24 = (135), - VK_NUMLOCK = (144), - VK_SCROLL = (145), - VK_LSHIFT = (160), - VK_LCONTROL = (162), - VK_LMENU = (164), - VK_RSHIFT = (161), - VK_RCONTROL = (163), - VK_RMENU = (165), - VK_PROCESSKEY = (229), - KF_ALTDOWN = (8192), - KF_DLGMODE = (2048), - KF_EXTENDED = (256), - KF_MENUMODE = (4096), - KF_REPEAT = (16384), - KF_UP = (32768), - KL_NAMELENGTH = (9), - WA_ACTIVE = (1), - WA_CLICKACTIVE = (2), - WA_INACTIVE = (0), - PWR_CRITICALRESUME = (3), - PWR_SUSPENDREQUEST = (1), - PWR_SUSPENDRESUME = (2), - PWR_FAIL = -((1)), - PWR_OK = (1), - NF_QUERY = (3), - NF_REQUERY = (4), - NFR_ANSI = (1), - NFR_UNICODE = (2), - WMSZ_BOTTOM = (6), - WMSZ_BOTTOMLEFT = (7), - WMSZ_BOTTOMRIGHT = (8), - WMSZ_LEFT = (1), - WMSZ_RIGHT = (2), - WMSZ_TOP = (3), - WMSZ_TOPLEFT = (4), - WMSZ_TOPRIGHT = (5), - MA_ACTIVATE = (1), - MA_ACTIVATEANDEAT = (2), - MA_NOACTIVATE = (3), - MA_NOACTIVATEANDEAT = (4), - SIZE_MAXHIDE = (4), - SIZE_MAXIMIZED = (2), - SIZE_MAXSHOW = (3), - SIZE_MINIMIZED = (1), - SIZE_RESTORED = (0), - WVR_ALIGNTOP = (16), - WVR_ALIGNLEFT = (32), - WVR_ALIGNBOTTOM = (64), - WVR_ALIGNRIGHT = (128), - WVR_HREDRAW = (256), - WVR_VREDRAW = (512), - WVR_REDRAW = (768), - WVR_VALIDRECTS = (1024), - HTBOTTOM = (15), - HTBOTTOMLEFT = (16), - HTBOTTOMRIGHT = (17), - HTCAPTION = (2), - HTCLIENT = (1), - HTERROR = -((2)), - HTGROWBOX = (4), - HTHSCROLL = (6), - HTLEFT = (10), - HTMENU = (5), - HTNOWHERE = (0), - HTREDUCE = (8), - HTRIGHT = (11), - HTSIZE = (4), - HTSYSMENU = (3), - HTTOP = (12), - HTTOPLEFT = (13), - HTTOPRIGHT = (14), - HTTRANSPARENT = -((1)), - HTVSCROLL = (7), - HTZOOM = (9), - MK_CONTROL = (8), - MK_LBUTTON = (1), - MK_MBUTTON = (16), - MK_RBUTTON = (2), - MK_SHIFT = (4), - CS_BYTEALIGNCLIENT = (4096), - CS_BYTEALIGNWINDOW = (8192), - CS_CLASSDC = (64), - CS_DBLCLKS = (8), - CS_GLOBALCLASS = (16384), - CS_HREDRAW = (2), - CS_KEYCVTWINDOW = (4), - CS_NOCLOSE = (512), - CS_NOKEYCVT = (256), - CS_OWNDC = (32), - CS_PARENTDC = (128), - CS_SAVEBITS = (2048), - CS_VREDRAW = (1), - DLGWINDOWEXTRA = (30), - FALT = (16), - FCONTROL = (8), - FNOINVERT = (2), - FSHIFT = (4), - FVIRTKEY = (1), - MIIM_CHECKMARKS = (8), - MIIM_DATA = (32), - MIIM_ID = (2), - MIIM_STATE = (1), - MIIM_SUBMENU = (4), - MIIM_TYPE = (16), - MFT_BITMAP = (0x4), - MFT_MENUBARBREAK = (0x20), - MFT_MENUBREAK = (0x40), - MFT_OWNERDRAW = (0x100), - MFT_RADIOCHECK = (0x200), - MFT_RIGHTJUSTIFY = (0x4000), - MFT_SEPARATOR = (0x800), - MFT_STRING = (0), - MFS_CHECKED = (0x8), - MFS_DEFAULT = (0x1000), - MFS_DISABLED = (0x3), - MFS_ENABLED = (0), - MFS_GRAYED = (0x3), - MFS_HILITE = (0x80), - MFS_UNCHECKED = (0), - MFS_UNHILITE = (0), - SERKF_AVAILABLE = (2), - SERKF_INDICATOR = (4), - SERKF_SERIALKEYSON = (1), - FKF_AVAILABLE = (2), - FKF_CLICKON = (64), - FKF_FILTERKEYSON = (1), - FKF_HOTKEYACTIVE = (4), - FKF_HOTKEYSOUND = (16), - FKF_CONFIRMHOTKEY = (8), - FKF_INDICATOR = (32), - HELPINFO_MENUITEM = (2), - HELPINFO_WINDOW = (1), - PRF_CHECKVISIBLE = (0x1), - PRF_CHILDREN = (0x10), - PRF_CLIENT = (0x4), - PRF_ERASEBKGND = (0x8), - PRF_NONCLIENT = (0x2), - PRF_OWNED = (0x20), - HWND_DESKTOP = (0), - SC_CLOSE = (61536), - SC___FILE__HELP = (61824), - SC_DEFAULT = (61792), - SC_HOTKEY = (61776), - SC_HSCROLL = (61568), - SC_KEYMENU = (61696), - SC_MAXIMIZE = (61488), - SC_ZOOM = (61488), - SC_MINIMIZE = (61472), - SC_ICON = (61472), - SC_MONITORPOWER = (61808), - SC_MOUSEMENU = (61584), - SC_MOVE = (61456), - SC_NEXTWINDOW = (61504), - SC_PREVWINDOW = (61520), - SC_RESTORE = (61728), - SC_SCREENSAVE = (61760), - SC_SIZE = (61440), - SC_TASKLIST = (61744), - SC_VSCROLL = (61552), - DC_HASDEFID = (21323), - DLGC_BUTTON = (8192), - DLGC_DEFPUSHBUTTON = (16), - DLGC_HASSETSEL = (8), - DLGC_RADIOBUTTON = (64), - DLGC_STATIC = (256), - DLGC_UNDEFPUSHBUTTON = (32), - DLGC_WANTALLKEYS = (4), - DLGC_WANTARROWS = (1), - DLGC_WANTCHARS = (128), - DLGC_WANTMESSAGE = (4), - DLGC_WANTTAB = (2), - EC_LEFTMARGIN = (1), - EC_RIGHTMARGIN = (2), - EC_USEFONTINFO = (65535), - LB_ERR = -((1)), - LB_ERRSPACE = -((2)), - LB_OKAY = (0), - CB_ERR = -((1)), - CB_ERRSPACE = -((2)), - IMC_GETCANDIDATEPOS = (7), - IMC_GETCOMPOSITIONFONT = (9), - IMC_GETCOMPOSITIONWINDOW = (11), - IMC_GETSTATUSWINDOWPOS = (15), - IMC_CLOSESTATUSWINDOW = (33), - IMC_OPENSTATUSWINDOW = (34), - IMC_SETCANDIDATEPOS = (8), - IMC_SETCOMPOSITIONFONT = (10), - IMC_SETCOMPOSITIONWINDOW = (12), - IMC_SETSTATUSWINDOWPOS = (16), - IMN_CHANGECANDIDATE = (3), - IMN_CLOSECANDIDATE = (4), - IMN_CLOSESTATUSWINDOW = (1), - IMN_GUIDELINE = (13), - IMN_OPENCANDIDATE = (5), - IMN_OPENSTATUSWINDOW = (2), - IMN_SETCANDIDATEPOS = (9), - IMN_SETCOMPOSITIONFONT = (10), - IMN_SETCOMPOSITIONWINDOW = (11), - IMN_SETCONVERSIONMODE = (6), - IMN_SETOPENSTATUS = (8), - IMN_SETSENTENCEMODE = (7), - IMN_SETSTATUSWINDOWPOS = (12), - IMN_PRIVATE = (14), - SKF_AUDIBLEFEEDBACK = (64), - SKF_AVAILABLE = (2), - SKF_CONFIRMHOTKEY = (8), - SKF_HOTKEYACTIVE = (4), - SKF_HOTKEYSOUND = (16), - SKF_INDICATOR = (32), - SKF_STICKYKEYSON = (1), - SKF_TRISTATE = (128), - SKF_TWOKEYSOFF = (256), - MKF_AVAILABLE = (2), - MKF_CONFIRMHOTKEY = (8), - MKF_HOTKEYACTIVE = (4), - MKF_HOTKEYSOUND = (16), - MKF_INDICATOR = (32), - MKF_MOUSEKEYSON = (1), - MKF_MODIFIERS = (64), - MKF_REPLACENUMBERS = (128), - SSF_AVAILABLE = (2), - SSF_SOUNDSENTRYON = (1), - SSTF_BORDER = (2), - SSTF_CHARS = (1), - SSTF_DISPLAY = (3), - SSTF_NONE = (0), - SSGF_DISPLAY = (3), - SSGF_NONE = (0), - SSWF_CUSTOM = (4), - SSWF_DISPLAY = (3), - SSWF_NONE = (0), - SSWF_TITLE = (1), - SSWF_WINDOW = (2), - ATF_ONOFFFEEDBACK = (2), - ATF_TIMEOUTON = (1), - HCF_AVAILABLE = (2), - HCF_CONFIRMHOTKEY = (8), - HCF_HIGHCONTRASTON = (1), - HCF_HOTKEYACTIVE = (4), - HCF_HOTKEYAVAILABLE = (64), - HCF_HOTKEYSOUND = (16), - HCF_INDICATOR = (32), - TKF_AVAILABLE = (2), - TKF_CONFIRMHOTKEY = (8), - TKF_HOTKEYACTIVE = (4), - TKF_HOTKEYSOUND = (16), - TKF_TOGGLEKEYSON = (1), - PP_DISPLAYERRORS = (1), - RESOURCEDISPLAYTYPE_DOMAIN = (1), - RESOURCEDISPLAYTYPE_FILE = (4), - RESOURCEDISPLAYTYPE_GENERIC = (0), - RESOURCEDISPLAYTYPE_GROUP = (5), - RESOURCEDISPLAYTYPE_SERVER = (2), - RESOURCEDISPLAYTYPE_SHARE = (3), - CAPSLOCK_ON = (128), - ENHANCED_KEY = (256), - LEFT_ALT_PRESSED = (2), - LEFT_CTRL_PRESSED = (8), - NUMLOCK_ON = (32), - RIGHT_ALT_PRESSED = (1), - RIGHT_CTRL_PRESSED = (4), - SCROLLLOCK_ON = (64), - SHIFT_PRESSED = (16), - FROM_LEFT_1ST_BUTTON_PRESSED = (1), - RIGHTMOST_BUTTON_PRESSED = (2), - FROM_LEFT_2ND_BUTTON_PRESSED = (4), - FROM_LEFT_3RD_BUTTON_PRESSED = (8), - FROM_LEFT_4TH_BUTTON_PRESSED = (16), - DOUBLE_CLICK = (2), - MOUSE_MOVED = (1), - KEY_EVENT = (1), - _MOUSE_EVENT = (2), - cMOUSE_EVENT = (2), - WINDOW_BUFFER_SIZE_EVENT = (4), - MENU_EVENT = (8), - FOCUS_EVENT = (16), - BI_RGB = (0), - BI_RLE8 = (1), - BI_RLE4 = (2), - BI_BITFIELDS = (3), - PFD_DRAW_TO_WINDOW = (0x4), - PFD_DRAW_TO_BITMAP = (0x8), - PFD_SUPPORT_GDI = (0x10), - PFD_SUPPORT_OPENGL = (0x20), - PFD_DOUBLEBUFFER = (0x1), - PFD_STEREO = (0x2), - PFD_DOUBLEBUFFER_DONTCARE = (0x40000000), - PFD_STEREO_DONTCARE = (0x80000000), - PFD_TYPE_RGBA = (0), - PFD_TYPE_COLORINDEX = (1), - PFD_MAIN_PLANE = (0), - PFD_OVERLAY_PLANE = (1), - PFD_UNDERLAY_PLANE = -((1)), - WGL_FONT_LINES = (0), - WGL_FONT_POLYGONS = (1), - PFD_GENERIC_FORMAT = (0x40), - PFD_NEED_PALETTE = (0x80), - PFD_NEED_SYSTEM_PALETTE = (0x100), - PFD_SWAP_COPY = (0x400), - PFD_SWAP_EXCHANGE = (0x200), - TMPF_FIXED_PITCH = (0x1), - TMPF_VECTOR = (0x2), - TMPF_TRUETYPE = (0x4), - TMPF_DEVICE = (0x8), - SE_ERR_SHARE = (26), - SE_ERR_ASSOCINCOMPLETE = (27), - SE_ERR_DDETIMEOUT = (28), - SE_ERR_DDEFAIL = (29), - SE_ERR_DDEBUSY = (30), - SE_ERR_NOASSOC = (31), - XCLASS_BOOL = (0x1000), - XCLASS_DATA = (0x2000), - XCLASS_FLAGS = (0x4000), - XCLASS_MASK = (0xfc00), - XCLASS_NOTIFICATION = (0x8000), - XTYPF_NOBLOCK = (0x0002), - XTYP_ADVDATA = (0x4010), - XTYP_ADVREQ = (0x2022), - XTYP_ADVSTART = (0x1030), - XTYP_ADVSTOP = (0x8040), - XTYP_CONNECT = (0x1062), - XTYP_CONNECT_CONFIRM = (0x8072), - XTYP_DISCONNECT = (0x80c2), - XTYP_EXECUTE = (0x4050), - XTYP_POKE = (0x4090), - XTYP_REQUEST = (0x20b0), - XTYP_WILDCONNECT = (0x20E2), - XTYP_REGISTER = (0x80A2), - XTYP_ERROR = (0x8002), - XTYP_XACT_COMPLETE = (0x8080), - XTYP_UNREGISTER = (0x80D2), - DMLERR_DLL_USAGE = (0x4004), - DMLERR_INVALIDPARAMETER = (0x4006), - DMLERR_NOTPROCESSED = (0x4009), - DMLERR_POSTMSG_FAILED = (0x400c), - DMLERR_SERVER_DIED = (0x400e), - DMLERR_SYS_ERROR = (0x400f), - DMLERR_BUSY = (0x4001), - DMLERR_DATAACKTIMEOUT = (0x4002), - DMLERR_ADVACKTIMEOUT = (0x4000), - DMLERR_DLL_NOT_INITIALIZED = (0x4003), - DMLERR_LOW_MEMORY = (0x4007), - DMLERR_MEMORY_ERROR = (0x4008), - DMLERR_POKEACKTIMEOUT = (0x400b), - DMLERR_NO_CONV_ESTABLISHED = (0x400a), - DMLERR_REENTRANCY = (0x400d), - DMLERR_UNFOUND_QUEUE_ID = (0x4011), - DMLERR_UNADVACKTIMEOUT = (0x4010), - DMLERR_EXECACKTIMEOUT = (0x4005), - DDE_FACK = (0x8000), - DDE_FNOTPROCESSED = (0x0000), - DNS_REGISTER = (0x0001), - DNS_UNREGISTER = (0x0002), - CP_WINANSI = (1004), - CP_WINUNICODE = (1200), - APPCLASS_STANDARD = (0x00000000), - BKMODE_LAST = (2), - CTLCOLOR_MSGBOX = (0), - CTLCOLOR_EDIT = (1), - CTLCOLOR_LISTBOX = (2), - CTLCOLOR_BTN = (3), - CTLCOLOR_DLG = (4), - CTLCOLOR_SCROLLBAR = (5), - CTLCOLOR_STATIC = (6), - CTLCOLOR_MAX = (7), - META_SETMAPMODE = (0x0103), - META_SETWINDOWORG = (0x020B), - META_SETWINDOWEXT = (0x020C), - POLYFILL_LAST = (2), - STATUS_WAIT_0 = (0x00000000), - STATUS_ABANDONED_WAIT_0 = (0x00000080), - STATUS_USER_APC = (0x000000C0), - STATUS_TIMEOUT = (0x00000102), - STATUS_PENDING = (0x00000103), - STATUS_GUARD_PAGE_VIOLATION = (0x80000001), - STATUS_DATATYPE_MISALIGNMENT = (0x80000002), - STATUS_BREAKPOINT = (0x80000003), - STATUS_SINGLE_STEP = (0x80000004), - STATUS_IN_PAGE_ERROR = (0xC0000006), - STATUS_INVALID_HANDLE = (0xC0000008), - STATUS_ILLEGAL_INSTRUCTION = (0xC000001D), - STATUS_NONCONTINUABLE_EXCEPTION = (0xC0000025), - STATUS_INVALID_DISPOSITION = (0xC0000026), - STATUS_ARRAY_BOUNDS_EXCEEDED = (0xC000008C), - STATUS_FLOAT_DENORMAL_OPERAND = (0xC000008D), - STATUS_FLOAT_DIVIDE_BY_ZERO = (0xC000008E), - STATUS_FLOAT_INEXACT_RESULT = (0xC000008F), - STATUS_FLOAT_INVALID_OPERATION = (0xC0000090), - STATUS_FLOAT_OVERFLOW = (0xC0000091), - STATUS_FLOAT_STACK_CHECK = (0xC0000092), - STATUS_FLOAT_UNDERFLOW = (0xC0000093), - STATUS_INTEGER_DIVIDE_BY_ZERO = (0xC0000094), - STATUS_INTEGER_OVERFLOW = (0xC0000095), - STATUS_PRIVILEGED_INSTRUCTION = (0xC0000096), - STATUS_STACK_OVERFLOW = (0xC00000FD), - STATUS_CONTROL_C_EXIT = (0xC000013A), - PROCESSOR_ARCHITECTURE_INTEL = (0), - PROCESSOR_ARCHITECTURE_MIPS = (1), - PROCESSOR_ARCHITECTURE_ALPHA = (2), - PROCESSOR_ARCHITECTURE_PPC = (3), - SIZEFULLSCREEN = (SIZE_MAXIMIZED), - SIZENORMAL = (SIZE_RESTORED), - SIZEICONIC = (SIZE_MINIMIZED), - SIZE_OF_80387_REGISTERS = (80), - __FILE___i386 = (0x10000), - __FILE___CONTROL = (__FILE___i386) | (1), - __FILE___INTEGER = (__FILE___i386) | (2), - __FILE___SEGMENTS = (__FILE___i386) | (4), - __FILE___FLOATING_POINT = (__FILE___i386) | (8), - __FILE___DEBUG_REGISTERS = (__FILE___i386) | (0x10), - __FILE___FULL = ((__FILE___CONTROL) | (__FILE___INTEGER)) | (__FILE___SEGMENTS), - FLAG_TRACE_BIT = (0x100), - __FILE___DEBUGGER = (__FILE___FULL) | (__FILE___FLOATING_POINT), - FILTER_TEMP_DUPLICATE_ACCOUNT = (0x0001), - FILTER_NORMAL_ACCOUNT = (0x0002), - FILTER_INTERDOMAIN_TRUST_ACCOUNT = (0x0008), - FILTER_WORKSTATION_TRUST_ACCOUNT = (0x0010), - FILTER_SERVER_TRUST_ACCOUNT = (0x0020), - LOGON32_LOGON_INTERACTIVE = (0x02), - LOGON32_LOGON_BATCH = (0x04), - LOGON32_LOGON_SERVICE = (0x05), - LOGON32_PROVIDER_DEFAULT = (0x00), - LOGON32_PROVIDER_WINNT35 = (0x01), - QID_SYNC = (0xFFFFFFFF), - IMAGE_DOS_SIGNATURE = (0x5a4d), - IMAGE_NT_SIGNATURE = (0x4550), - SEVERITY_SUCCESS = (0), - SEVERITY_ERROR = (1), - VT_EMPTY = (0), - VT_NULL = (1), - VT_I2 = (2), - VT_I4 = (3), - VT_R4 = (4), - VT_R8 = (5), - VT_BSTR = (8), - VT_ERROR = (10), - VT_BOOL = (11), - VT_UI1 = (17), - VT_BYREF = (0x4000), - VT_RESERVED = (0x8000), - FACILITY_WINDOWS = (8), - FACILITY_STORAGE = (3), - FACILITY_RPC = (1), - FACILITY_SSPI = (9), - FACILITY_WIN32 = (7), - FACILITY_CONTROL = (10), - FACILITY_NULL = (0), - FACILITY_INTERNET = (12), - FACILITY_ITF = (4), - FACILITY_DISPATCH = (2), - FACILITY_CERT = (11), - ACM_OPENW = (1127), - ACM_OPENA = (1124), - ACM_OPEN = (ACM_OPENA), - ACM_PLAY = (1125), - ACM_STOP = (1126), - ACN_START = (1), - ACN_STOP = (2), - BM_CLICK = (245), - BM_GETCHECK = (240), - BM_GETIMAGE = (246), - BM_GETSTATE = (242), - BM_SETCHECK = (241), - BM_SETIMAGE = (247), - BM_SETSTATE = (243), - BM_SETSTYLE = (244), - BN_CLICKED = (0), - BN_DBLCLK = (5), - BN_DISABLE = (4), - BN_DOUBLECLICKED = (5), - BN_HILITE = (2), - BN_KILLFOCUS = (7), - BN_PAINT = (1), - BN_PUSHED = (2), - BN_SETFOCUS = (6), - BN_UNHILITE = (3), - BN_UNPUSHED = (3), - CB_ADDSTRING = (323), - CB_DELETESTRING = (324), - CB_DIR = (325), - CB_FINDSTRING = (332), - CB_FINDSTRINGEXACT = (344), - CB_GETCOUNT = (326), - CB_GETCURSEL = (327), - CB_GETDROPPEDCONTROLRECT = (338), - CB_GETDROPPEDSTATE = (343), - CB_GETDROPPEDWIDTH = (351), - CB_GETEDITSEL = (320), - CB_GETEXTENDEDUI = (342), - CB_GETHORIZONTALEXTENT = (349), - CB_GETITEMDATA = (336), - CB_GETITEMHEIGHT = (340), - CB_GETLBTEXT = (328), - CB_GETLBTEXTLEN = (329), - CB_GETLOCALE = (346), - CB_GETTOPINDEX = (347), - CB_INITSTORAGE = (353), - CB_INSERTSTRING = (330), - CB_LIMITTEXT = (321), - CB_RESETCONTENT = (331), - CB_SELECTSTRING = (333), - CB_SETCURSEL = (334), - CB_SETDROPPEDWIDTH = (352), - CB_SETEDITSEL = (322), - CB_SETEXTENDEDUI = (341), - CB_SETHORIZONTALEXTENT = (350), - CB_SETITEMDATA = (337), - CB_SETITEMHEIGHT = (339), - CB_SETLOCALE = (345), - CB_SETTOPINDEX = (348), - CB_SHOWDROPDOWN = (335), - CBN_CLOSEUP = (8), - CBN_DBLCLK = (2), - CBN_DROPDOWN = (7), - CBN_EDITCHANGE = (5), - CBN_EDITUPDATE = (6), - CBN_ERRSPACE = -((1)), - CBN_KILLFOCUS = (4), - CBN_SELCHANGE = (1), - CBN_SELENDCANCEL = (10), - CBN_SELENDOK = (9), - CBN_SETFOCUS = (3), - DL_BEGINDRAG = (1157), - DL_CANCELDRAG = (1160), - DL_DRAGGING = (1158), - DL_DROPPED = (1159), - DM_GETDEFID = (1024), - DM_REPOSITION = (1026), - DM_SETDEFID = (1025), - EM_CANPASTE = (1074), - EM_CANUNDO = (198), - EM_CHARFROMPOS = (215), - EM_DISPLAYBAND = (1075), - EM_EMPTYUNDOBUFFER = (205), - EM_EXGETSEL = (1076), - EM_EXLIMITTEXT = (1077), - EM_EXLINEFROMCHAR = (1078), - EM_EXSETSEL = (1079), - EM_FINDTEXT = (1080), - EM_FINDTEXTEX = (1103), - EM_FINDWORDBREAK = (1100), - EM_FMTLINES = (200), - EM_FORMATRANGE = (1081), - EM_GETCHARFORMAT = (1082), - EM_GETEVENTMASK = (1083), - EM_GETFIRSTVISIBLELINE = (206), - EM_GETHANDLE = (189), - EM_GETLIMITTEXT = (213), - EM_GETLINE = (196), - EM_GETLINECOUNT = (186), - EM_GETMARGINS = (212), - EM_GETMODIFY = (184), - EM_GETIMECOLOR = (1129), - EM_GETIMEOPTIONS = (1131), - EM_GETOPTIONS = (1102), - EM_GETOLEINTERFACE = (1084), - EM_GETPARAFORMAT = (1085), - EM_GETPASSWORDCHAR = (210), - EM_GETPUNCTUATION = (1125), - EM_GETRECT = (178), - EM_GETSEL = (176), - EM_GETSELTEXT = (1086), - EM_GETTEXTRANGE = (1099), - EM_GETTHUMB = (190), - EM_GETWORDBREAKPROC = (209), - EM_GETWORDBREAKPROCEX = (1104), - EM_GETWORDWRAPMODE = (1127), - EM_HIDESELECTION = (1087), - EM_LIMITTEXT = (197), - EM_LINEFROMCHAR = (201), - EM_LINEINDEX = (187), - EM_LINELENGTH = (193), - EM_LINESCROLL = (182), - EM_PASTESPECIAL = (1088), - EM_POSFROMCHAR = (214), - EM_REPLACESEL = (194), - EM_REQUESTRESIZE = (1089), - EM_SCROLL = (181), - EM_SCROLLCARET = (183), - EM_SELECTIONTYPE = (1090), - EM_SETBKGNDCOLOR = (1091), - EM_SETCHARFORMAT = (1092), - EM_SETEVENTMASK = (1093), - EM_SETHANDLE = (188), - EM_SETIMECOLOR = (1128), - EM_SETIMEOPTIONS = (1130), - EM_SETLIMITTEXT = (197), - EM_SETMARGINS = (211), - EM_SETMODIFY = (185), - EM_SETOLECALLBACK = (1094), - EM_SETOPTIONS = (1101), - EM_SETPARAFORMAT = (1095), - EM_SETPASSWORDCHAR = (204), - EM_SETPUNCTUATION = (1124), - EM_SETREADONLY = (207), - EM_SETRECT = (179), - EM_SETRECTNP = (180), - EM_SETSEL = (177), - EM_SETTABSTOPS = (203), - EM_SETTARGETDEVICE = (1096), - EM_SETWORDBREAKPROC = (208), - EM_SETWORDBREAKPROCEX = (1105), - EM_SETWORDWRAPMODE = (1126), - EM_STREAMIN = (1097), - EM_STREAMOUT = (1098), - EM_UNDO = (199), - EN_CHANGE = (768), - EN_CORRECTTEXT = (1797), - EN_DROPFILES = (1795), - EN_ERRSPACE = (1280), - EN_HSCROLL = (1537), - EN_IMECHANGE = (1799), - EN_KILLFOCUS = (512), - EN_MAXTEXT = (1281), - EN_MSGFILTER = (1792), - EN_OLEOPFAILED = (1801), - EN_PROTECTED = (1796), - EN_REQUESTRESIZE = (1793), - EN_SAVECLIPBOARD = (1800), - EN_SELCHANGE = (1794), - EN_SETFOCUS = (256), - EN_STOPNOUNDO = (1798), - EN_UPDATE = (1024), - EN_VSCROLL = (1538), - HDM_DELETEITEM = (4610), - HDM_GETITEMW = (4619), - HDM_INSERTITEMW = (4618), - HDM_SETITEMW = (4620), - HDM_GETITEMA = (4611), - HDM_INSERTITEMA = (4609), - HDM_SETITEMA = (4612), - HDM_GETITEM = (HDM_GETITEMA), - HDM_INSERTITEM = (HDM_INSERTITEMA), - HDM_SETITEM = (HDM_SETITEMA), - HDM_GETITEMCOUNT = (4608), - HDM_HITTEST = (4614), - HDM_LAYOUT = (4613), - HDN_BEGINTRACKW = -((326)), - HDN_DIVIDERDBLCLICKW = -((325)), - HDN_ENDTRACKW = -((327)), - HDN_ITEMCHANGEDW = -((321)), - HDN_ITEMCHANGINGW = -((320)), - HDN_ITEMCLICKW = -((322)), - HDN_ITEMDBLCLICKW = -((323)), - HDN_TRACKW = -((328)), - HDN_BEGINTRACKA = -((306)), - HDN_DIVIDERDBLCLICKA = -((305)), - HDN_ENDTRACKA = -((307)), - HDN_ITEMCHANGEDA = -((301)), - HDN_ITEMCHANGINGA = -((300)), - HDN_ITEMCLICKA = -((302)), - HDN_ITEMDBLCLICKA = -((303)), - HDN_TRACKA = -((308)), - HDN_BEGINTRACK = (HDN_BEGINTRACKA), - HDN_DIVIDERDBLCLICK = (HDN_DIVIDERDBLCLICKA), - HDN_ENDTRACK = (HDN_ENDTRACKA), - HDN_ITEMCHANGED = (HDN_ITEMCHANGEDA), - HDN_ITEMCHANGING = (HDN_ITEMCHANGINGA), - HDN_ITEMCLICK = (HDN_ITEMCLICKA), - HDN_ITEMDBLCLICK = (HDN_ITEMDBLCLICKA), - HDN_TRACK = (HDN_TRACKA), - HKM_GETHOTKEY = (1026), - HKM_SETHOTKEY = (1025), - HKM_SETRULES = (1027), - LB_ADDFILE = (406), - LB_ADDSTRING = (384), - LB_DELETESTRING = (386), - LB_DIR = (397), - LB_FINDSTRING = (399), - LB_FINDSTRINGEXACT = (418), - LB_GETANCHORINDEX = (413), - LB_GETCARETINDEX = (415), - LB_GETCOUNT = (395), - LB_GETCURSEL = (392), - LB_GETHORIZONTALEXTENT = (403), - LB_GETITEMDATA = (409), - LB_GETITEMHEIGHT = (417), - LB_GETITEMRECT = (408), - LB_GETLOCALE = (422), - LB_GETSEL = (391), - LB_GETSELCOUNT = (400), - LB_GETSELITEMS = (401), - LB_GETTEXT = (393), - LB_GETTEXTLEN = (394), - LB_GETTOPINDEX = (398), - LB_INITSTORAGE = (424), - LB_INSERTSTRING = (385), - LB_ITEMFROMPOINT = (425), - LB_RESETCONTENT = (388), - LB_SELECTSTRING = (396), - LB_SELITEMRANGE = (411), - LB_SELITEMRANGEEX = (387), - LB_SETANCHORINDEX = (412), - LB_SETCARETINDEX = (414), - LB_SETCOLUMNWIDTH = (405), - LB_SETCOUNT = (423), - LB_SETCURSEL = (390), - LB_SETHORIZONTALEXTENT = (404), - LB_SETITEMDATA = (410), - LB_SETITEMHEIGHT = (416), - LB_SETLOCALE = (421), - LB_SETSEL = (389), - LB_SETTABSTOPS = (402), - LB_SETTOPINDEX = (407), - LBN_DBLCLK = (2), - LBN_ERRSPACE = -((2)), - LBN_KILLFOCUS = (5), - LBN_SELCANCEL = (3), - LBN_SELCHANGE = (1), - LBN_SETFOCUS = (4), - LVM_ARRANGE = (4118), - LVM_CREATEDRAGIMAGE = (4129), - LVM_DELETEALLITEMS = (4105), - LVM_DELETECOLUMN = (4124), - LVM_DELETEITEM = (4104), - LVM_ENSUREVISIBLE = (4115), - LVM_GETBKCOLOR = (4096), - LVM_GETCALLBACKMASK = (4106), - LVM_GETCOLUMNWIDTH = (4125), - LVM_GETCOUNTPERPAGE = (4136), - LVM_GETEDITCONTROL = (4120), - LVM_GETIMAGELIST = (4098), - LVM_EDITLABELW = (4214), - LVM_FINDITEMW = (4179), - LVM_GETCOLUMNW = (4191), - LVM_GETISEARCHSTRINGW = (4213), - LVM_GETITEMW = (4171), - LVM_GETITEMTEXTW = (4211), - LVM_GETSTRINGWIDTHW = (4183), - LVM_INSERTCOLUMNW = (4193), - LVM_INSERTITEMW = (4173), - LVM_SETCOLUMNW = (4192), - LVM_SETITEMW = (4172), - LVM_SETITEMTEXTW = (4212), - LVM_EDITLABELA = (4119), - LVM_FINDITEMA = (4109), - LVM_GETCOLUMNA = (4121), - LVM_GETISEARCHSTRINGA = (4148), - LVM_GETITEMA = (4101), - LVM_GETITEMTEXTA = (4141), - LVM_GETSTRINGWIDTHA = (4113), - LVM_INSERTCOLUMNA = (4123), - LVM_INSERTITEMA = (4103), - LVM_SETCOLUMNA = (4122), - LVM_SETITEMA = (4102), - LVM_SETITEMTEXTA = (4142), - LVM_EDITLABEL = (LVM_EDITLABELA), - LVM_FINDITEM = (LVM_FINDITEMA), - LVM_GETCOLUMN = (LVM_GETCOLUMNA), - LVM_GETISEARCHSTRING = (LVM_GETISEARCHSTRINGA), - LVM_GETITEM = (LVM_GETITEMA), - LVM_GETITEMTEXT = (LVM_GETITEMTEXTA), - LVM_GETSTRINGWIDTH = (LVM_GETSTRINGWIDTHA), - LVM_INSERTCOLUMN = (LVM_INSERTCOLUMNA), - LVM_INSERTITEM = (LVM_INSERTITEMA), - LVM_SETCOLUMN = (LVM_SETCOLUMNA), - LVM_SETITEM = (LVM_SETITEMA), - LVM_SETITEMTEXT = (LVM_SETITEMTEXTA), - LVM_GETITEMCOUNT = (4100), - LVM_GETITEMPOSITION = (4112), - LVM_GETITEMRECT = (4110), - LVM_GETITEMSPACING = (4147), - LVM_GETITEMSTATE = (4140), - LVM_GETNEXTITEM = (4108), - LVM_GETORIGIN = (4137), - LVM_GETSELECTEDCOUNT = (4146), - LVM_GETTEXTBKCOLOR = (4133), - LVM_GETTEXTCOLOR = (4131), - LVM_GETTOPINDEX = (4135), - LVM_GETVIEWRECT = (4130), - LVM_HITTEST = (4114), - LVM_REDRAWITEMS = (4117), - LVM_SCROLL = (4116), - LVM_SETBKCOLOR = (4097), - LVM_SETCALLBACKMASK = (4107), - LVM_SETCOLUMNWIDTH = (4126), - LVM_SETIMAGELIST = (4099), - LVM_SETITEMCOUNT = (4143), - LVM_SETITEMPOSITION = (4111), - LVM_SETITEMPOSITION32 = (4145), - LVM_SETITEMSTATE = (4139), - LVM_SETTEXTBKCOLOR = (4134), - LVM_SETTEXTCOLOR = (4132), - LVM_SORTITEMS = (4144), - LVM_UPDATE = (4138), - LVN_BEGINDRAG = -((109)), - LVN_BEGINRDRAG = -((111)), - LVN_COLUMNCLICK = -((108)), - LVN_DELETEALLITEMS = -((104)), - LVN_DELETEITEM = -((103)), - LVN_BEGINLABELEDITW = -((175)), - LVN_ENDLABELEDITW = -((176)), - LVN_GETDISPINFOW = -((177)), - LVN_SETDISPINFOW = -((178)), - LVN_BEGINLABELEDITA = -((105)), - LVN_ENDLABELEDITA = -((106)), - LVN_GETDISPINFOA = -((150)), - LVN_SETDISPINFOA = -((151)), - LVN_BEGINLABELEDIT = (LVN_BEGINLABELEDITA), - LVN_ENDLABELEDIT = (LVN_ENDLABELEDITA), - LVN_GETDISPINFO = (LVN_GETDISPINFOA), - LVN_SETDISPINFO = (LVN_SETDISPINFOA), - LVN_INSERTITEM = -((102)), - LVN_ITEMCHANGED = -((101)), - LVN_ITEMCHANGING = -((100)), - LVN_KEYDOWN = -((155)), - NM_CLICK = -((2)), - NM_DBLCLK = -((3)), - NM_KILLFOCUS = -((8)), - NM_OUTOFMEMORY = -((1)), - NM_RCLICK = -((5)), - NM_RDBLCLK = -((6)), - NM_RETURN = -((4)), - NM_SETFOCUS = -((7)), - PBM_DELTAPOS = (1027), - PBM_SETPOS = (1026), - PBM_SETRANGE = (1025), - PBM_SETSTEP = (1028), - PBM_STEPIT = (1029), - PSM_ADDPAGE = (1127), - PSM_APPLY = (1134), - PSM_CANCELTOCLOSE = (1131), - PSM_CHANGED = (1128), - PSM_GETTABCONTROL = (1140), - PSM_GETCURRENTPAGEHWND = (1142), - PSM_ISDIALOGMESSAGE = (1141), - PSM_PRESSBUTTON = (1137), - PSM_QUERYSIBLINGS = (1132), - PSM_REBOOTSYSTEM = (1130), - PSM_REMOVEPAGE = (1126), - PSM_RESTARTWINDOWS = (1129), - PSM_SETCURSEL = (1125), - PSM_SETCURSELID = (1138), - PSM_SETFINISHTEXTW = (1145), - PSM_SETTITLEW = (1144), - PSM_SETFINISHTEXTA = (1139), - PSM_SETTITLEA = (1135), - PSM_SETFINISHTEXT = (PSM_SETFINISHTEXTA), - PSM_SETTITLE = (PSM_SETTITLEA), - PSM_SETWIZBUTTONS = (1136), - PSM_UNCHANGED = (1133), - PSN_APPLY = -((202)), - PSN_HELP = -((205)), - PSN_KILLACTIVE = -((201)), - PSN_QUERYCANCEL = -((209)), - PSN_RESET = -((203)), - PSN_SETACTIVE = -((200)), - PSN_WIZBACK = -((206)), - PSN_WIZFINISH = -((208)), - PSN_WIZNEXT = -((207)), - SB_GETBORDERS = (1031), - SB_GETPARTS = (1030), - SB_GETRECT = (1034), - SB_GETTEXTW = (1037), - SB_GETTEXTLENGTHW = (1036), - SB_SETTEXTW = (1035), - SB_GETTEXTA = (1026), - SB_GETTEXTLENGTHA = (1027), - SB_SETTEXTA = (1025), - SB_GETTEXT = (SB_GETTEXTA), - SB_GETTEXTLENGTH = (SB_GETTEXTLENGTHA), - SB_SETTEXT = (SB_SETTEXTA), - SB_SETMINHEIGHT = (1032), - SB_SETPARTS = (1028), - SB_SIMPLE = (1033), - SBM_ENABLE_ARROWS = (228), - SBM_GETPOS = (225), - SBM_GETRANGE = (227), - SBM_GETSCROLLINFO = (234), - SBM_SETPOS = (224), - SBM_SETRANGE = (226), - SBM_SETRANGEREDRAW = (230), - SBM_SETSCROLLINFO = (233), - STM_GETICON = (369), - STM_GETIMAGE = (371), - STM_SETICON = (368), - STM_SETIMAGE = (370), - STN_CLICKED = (0), - STN_DBLCLK = (1), - STN_DISABLE = (3), - STN_ENABLE = (2), - TB_ADDBITMAP = (1043), - TB_ADDBUTTONS = (1044), - TB_AUTOSIZE = (1057), - TB_BUTTONCOUNT = (1048), - TB_BUTTONSTRUCTSIZE = (1054), - TB_CHANGEBITMAP = (1067), - TB_CHECKBUTTON = (1026), - TB_COMMANDTOINDEX = (1049), - TB_CUSTOMIZE = (1051), - TB_DELETEBUTTON = (1046), - TB_ENABLEBUTTON = (1025), - TB_GETBITMAP = (1068), - TB_GETBITMAPFLAGS = (1065), - TB_GETBUTTON = (1047), - TB_ADDSTRINGW = (1101), - TB_GETBUTTONTEXTW = (1099), - TB_SAVERESTOREW = (1100), - TB_ADDSTRINGA = (1052), - TB_GETBUTTONTEXTA = (1069), - TB_SAVERESTOREA = (1050), - TB_ADDSTRING = (TB_ADDSTRINGA), - TB_GETBUTTONTEXT = (TB_GETBUTTONTEXTA), - TB_SAVERESTORE = (TB_SAVERESTOREA), - TB_GETITEMRECT = (1053), - TB_GETROWS = (1064), - TB_GETSTATE = (1042), - TB_GETTOOLTIPS = (1059), - TB_HIDEBUTTON = (1028), - TB_INDETERMINATE = (1029), - TB_INSERTBUTTON = (1045), - TB_ISBUTTONCHECKED = (1034), - TB_ISBUTTONENABLED = (1033), - TB_ISBUTTONHIDDEN = (1036), - TB_ISBUTTONINDETERMINATE = (1037), - TB_ISBUTTONPRESSED = (1035), - TB_PRESSBUTTON = (1027), - TB_SETBITMAPSIZE = (1056), - TB_SETBUTTONSIZE = (1055), - TB_SETCMDID = (1066), - TB_SETPARENT = (1061), - TB_SETROWS = (1063), - TB_SETSTATE = (1041), - TB_SETTOOLTIPS = (1060), - TBM_CLEARSEL = (1043), - TBM_CLEARTICS = (1033), - TBM_GETCHANNELRECT = (1050), - TBM_GETLINESIZE = (1048), - TBM_GETNUMTICS = (1040), - TBM_GETPAGESIZE = (1046), - TBM_GETPOS = (1024), - TBM_GETPTICS = (1038), - TBM_GETRANGEMAX = (1026), - TBM_GETRANGEMIN = (1025), - TBM_GETSELEND = (1042), - TBM_GETSELSTART = (1041), - TBM_GETTHUMBLENGTH = (1052), - TBM_GETTHUMBRECT = (1049), - TBM_GETTIC = (1027), - TBM_GETTICPOS = (1039), - TBM_SETLINESIZE = (1047), - TBM_SETPAGESIZE = (1045), - TBM_SETPOS = (1029), - TBM_SETRANGE = (1030), - TBM_SETRANGEMAX = (1032), - TBM_SETRANGEMIN = (1031), - TBM_SETSEL = (1034), - TBM_SETSELEND = (1036), - TBM_SETSELSTART = (1035), - TBM_SETTHUMBLENGTH = (1051), - TBM_SETTIC = (1028), - TBM_SETTICFREQ = (1044), - TBN_BEGINADJUST = -((703)), - TBN_BEGINDRAG = -((701)), - TBN_CUSTHELP = -((709)), - TBN_ENDADJUST = -((704)), - TBN_ENDDRAG = -((702)), - TBN_GETBUTTONINFOW = -((720)), - TBN_GETBUTTONINFOA = -((700)), - TBN_GETBUTTONINFO = (TBN_GETBUTTONINFOA), - TBN_QUERYDELETE = -((707)), - TBN_QUERYINSERT = -((706)), - TBN_RESET = -((705)), - TBN_TOOLBARCHANGE = -((708)), - TCM_ADJUSTRECT = (4904), - TCM_DELETEALLITEMS = (4873), - TCM_DELETEITEM = (4872), - TCM_GETCURFOCUS = (4911), - TCM_GETCURSEL = (4875), - TCM_GETIMAGELIST = (4866), - TCM_GETITEMW = (4924), - TCM_INSERTITEMW = (4926), - TCM_SETITEMW = (4925), - TCM_GETITEMA = (4869), - TCM_INSERTITEMA = (4871), - TCM_SETITEMA = (4870), - TCM_GETITEM = (TCM_GETITEMA), - TCM_INSERTITEM = (TCM_INSERTITEMA), - TCM_SETITEM = (TCM_SETITEMA), - TCM_GETITEMCOUNT = (4868), - TCM_GETITEMRECT = (4874), - TCM_GETROWCOUNT = (4908), - TCM_GETTOOLTIPS = (4909), - TCM_HITTEST = (4877), - TCM_REMOVEIMAGE = (4906), - TCM_SETCURFOCUS = (4912), - TCM_SETCURSEL = (4876), - TCM_SETIMAGELIST = (4867), - TCM_SETITEMEXTRA = (4878), - TCM_SETITEMSIZE = (4905), - TCM_SETPADDING = (4907), - TCM_SETTOOLTIPS = (4910), - TCN_KEYDOWN = -((550)), - TCN_SELCHANGE = -((551)), - TCN_SELCHANGING = -((552)), - TTM_ACTIVATE = (1025), - TTM_ADDTOOLW = (1074), - TTM_DELTOOLW = (1075), - TTM_ENUMTOOLSW = (1082), - TTM_GETCURRENTTOOLW = (1083), - TTM_GETTEXTW = (1080), - TTM_GETTOOLINFOW = (1077), - TTM_HITTESTW = (1079), - TTM_NEWTOOLRECTW = (1076), - TTM_SETTOOLINFOW = (1078), - TTM_UPDATETIPTEXTW = (1081), - TTM_ADDTOOLA = (1028), - TTM_DELTOOLA = (1029), - TTM_ENUMTOOLSA = (1038), - TTM_GETCURRENTTOOLA = (1039), - TTM_GETTEXTA = (1035), - TTM_GETTOOLINFOA = (1032), - TTM_HITTESTA = (1034), - TTM_NEWTOOLRECTA = (1030), - TTM_SETTOOLINFOA = (1033), - TTM_UPDATETIPTEXTA = (1036), - TTM_ADDTOOL = (TTM_ADDTOOLA), - TTM_DELTOOL = (TTM_DELTOOLA), - TTM_ENUMTOOLS = (TTM_ENUMTOOLSA), - TTM_GETCURRENTTOOL = (TTM_GETCURRENTTOOLA), - TTM_GETTEXT = (TTM_GETTEXTA), - TTM_GETTOOLINFO = (TTM_GETTOOLINFOA), - TTM_HITTEST = (TTM_HITTESTA), - TTM_NEWTOOLRECT = (TTM_NEWTOOLRECTA), - TTM_SETTOOLINFO = (TTM_SETTOOLINFOA), - TTM_UPDATETIPTEXT = (TTM_UPDATETIPTEXTA), - TTM_GETTOOLCOUNT = (1037), - TTM_RELAYEVENT = (1031), - TTM_SETDELAYTIME = (1027), - TTM_WINDOWFROMPOINT = (1040), - TTN_NEEDTEXTW = -((530)), - TTN_NEEDTEXTA = -((520)), - TTN_NEEDTEXT = (TTN_NEEDTEXTA), - TTN_POP = -((522)), - TTN_SHOW = -((521)), - TVM_CREATEDRAGIMAGE = (4370), - TVM_DELETEITEM = (4353), - TVM_ENDEDITLABELNOW = (4374), - TVM_ENSUREVISIBLE = (4372), - TVM_EXPAND = (4354), - TVM_GETCOUNT = (4357), - TVM_GETEDITCONTROL = (4367), - TVM_GETIMAGELIST = (4360), - TVM_GETINDENT = (4358), - TVM_GETITEMRECT = (4356), - TVM_GETNEXTITEM = (4362), - TVM_GETVISIBLECOUNT = (4368), - TVM_HITTEST = (4369), - TVM_EDITLABELW = (4417), - TVM_GETISEARCHSTRINGW = (4416), - TVM_GETITEMW = (4414), - TVM_INSERTITEMW = (4402), - TVM_SETITEMW = (4415), - TVM_EDITLABELA = (4366), - TVM_GETISEARCHSTRINGA = (4375), - TVM_GETITEMA = (4364), - TVM_INSERTITEMA = (4352), - TVM_SETITEMA = (4365), - TVM_EDITLABEL = (TVM_EDITLABELA), - TVM_GETISEARCHSTRING = (TVM_GETISEARCHSTRINGA), - TVM_GETITEM = (TVM_GETITEMA), - TVM_INSERTITEM = (TVM_INSERTITEMA), - TVM_SETITEM = (TVM_SETITEMA), - TVM_SELECTITEM = (4363), - TVM_SETIMAGELIST = (4361), - TVM_SETINDENT = (4359), - TVM_SORTCHILDREN = (4371), - TVM_SORTCHILDRENCB = (4373), - TVN_KEYDOWN = -((412)), - TVN_BEGINDRAGW = -((456)), - TVN_BEGINLABELEDITW = -((459)), - TVN_BEGINRDRAGW = -((457)), - TVN_DELETEITEMW = -((458)), - TVN_ENDLABELEDITW = -((460)), - TVN_GETDISPINFOW = -((452)), - TVN_ITEMEXPANDEDW = -((455)), - TVN_ITEMEXPANDINGW = -((454)), - TVN_SELCHANGEDW = -((451)), - TVN_SELCHANGINGW = -((450)), - TVN_SETDISPINFOW = -((453)), - TVN_BEGINDRAGA = -((407)), - TVN_BEGINLABELEDITA = -((410)), - TVN_BEGINRDRAGA = -((408)), - TVN_DELETEITEMA = -((409)), - TVN_ENDLABELEDITA = -((411)), - TVN_GETDISPINFOA = -((403)), - TVN_ITEMEXPANDEDA = -((406)), - TVN_ITEMEXPANDINGA = -((405)), - TVN_SELCHANGEDA = -((402)), - TVN_SELCHANGINGA = -((401)), - TVN_SETDISPINFOA = -((404)), - TVN_BEGINDRAG = (TVN_BEGINDRAGA), - TVN_BEGINLABELEDIT = (TVN_BEGINLABELEDITA), - TVN_BEGINRDRAG = (TVN_BEGINRDRAGA), - TVN_DELETEITEM = (TVN_DELETEITEMA), - TVN_ENDLABELEDIT = (TVN_ENDLABELEDITA), - TVN_GETDISPINFO = (TVN_GETDISPINFOA), - TVN_ITEMEXPANDED = (TVN_ITEMEXPANDEDA), - TVN_ITEMEXPANDING = (TVN_ITEMEXPANDINGA), - TVN_SELCHANGED = (TVN_SELCHANGEDA), - TVN_SELCHANGING = (TVN_SELCHANGINGA), - TVN_SETDISPINFO = (TVN_SETDISPINFOA), - UDM_GETACCEL = (1132), - UDM_GETBASE = (1134), - UDM_GETBUDDY = (1130), - UDM_GETPOS = (1128), - UDM_GETRANGE = (1126), - UDM_SETACCEL = (1131), - UDM_SETBASE = (1133), - UDM_SETBUDDY = (1129), - UDM_SETPOS = (1127), - UDM_SETRANGE = (1125), - UDN_DELTAPOS = -((722)), - WM_ACTIVATE = (6), - WM_ACTIVATEAPP = (28), - WM_ASKCBFORMATNAME = (780), - WM_CANCELJOURNAL = (75), - WM_CANCELMODE = (31), - WM_CAPTURECHANGED = (533), - WM_CHANGECBCHAIN = (781), - WM_CHAR = (258), - WM_CHARTOITEM = (47), - WM_CHILDACTIVATE = (34), - WM_CHOOSEFONT_GETLOGFONT = (1025), - WM_CHOOSEFONT_SETLOGFONT = (1125), - WM_CHOOSEFONT_SETFLAGS = (1126), - WM_CLEAR = (771), - WM_CLOSE = (16), - WM_COMMAND = (273), - WM_COMPACTING = (65), - WM_COMPAREITEM = (57), - WM___FILE__MENU = (123), - WM_COPY = (769), - WM_COPYDATA = (74), - WM_CREATE = (1), - WM_CTLCOLORBTN = (309), - WM_CTLCOLORDLG = (310), - WM_CTLCOLOREDIT = (307), - WM_CTLCOLORLISTBOX = (308), - WM_CTLCOLORMSGBOX = (306), - WM_CTLCOLORSCROLLBAR = (311), - WM_CTLCOLORSTATIC = (312), - WM_CUT = (768), - WM_DEADCHAR = (259), - WM_DELETEITEM = (45), - WM_DESTROY = (2), - WM_DESTROYCLIPBOARD = (775), - WM_DEVICECHANGE = (537), - WM_DEVMODECHANGE = (27), - WM_DISPLAYCHANGE = (126), - WM_DRAWCLIPBOARD = (776), - WM_DRAWITEM = (43), - WM_DROPFILES = (563), - WM_ENABLE = (10), - WM_ENDSESSION = (22), - WM_ENTERIDLE = (289), - WM_ENTERMENULOOP = (529), - WM_ENTERSIZEMOVE = (561), - WM_ERASEBKGND = (20), - WM_EXITMENULOOP = (530), - WM_EXITSIZEMOVE = (562), - WM_FONTCHANGE = (29), - WM_GETDLGCODE = (135), - WM_GETFONT = (49), - WM_GETHOTKEY = (51), - WM_GETICON = (127), - WM_GETMINMAXINFO = (36), - WM_GETTEXT = (13), - WM_GETTEXTLENGTH = (14), - WM_HELP = (83), - WM_HOTKEY = (786), - WM_HSCROLL = (276), - WM_HSCROLLCLIPBOARD = (782), - WM_ICONERASEBKGND = (39), - WM_IME_CHAR = (646), - WM_IME_COMPOSITION = (271), - WM_IME_COMPOSITIONFULL = (644), - WM_IME_CONTROL = (643), - WM_IME_ENDCOMPOSITION = (270), - WM_IME_KEYDOWN = (656), - WM_IME_KEYUP = (657), - WM_IME_NOTIFY = (642), - WM_IME_SELECT = (645), - WM_IME_SET__FILE__ = (641), - WM_IME_STARTCOMPOSITION = (269), - WM_INITDIALOG = (272), - WM_INITMENU = (278), - WM_INITMENUPOPUP = (279), - WM_INPUTLANGCHANGE = (81), - WM_INPUTLANGCHANGEREQUEST = (80), - WM_KEYDOWN = (256), - WM_KEYUP = (257), - WM_KILLFOCUS = (8), - WM_LBUTTONDBLCLK = (515), - WM_LBUTTONDOWN = (513), - WM_LBUTTONUP = (514), - WM_MBUTTONDBLCLK = (521), - WM_MBUTTONDOWN = (519), - WM_MBUTTONUP = (520), - WM_MDIACTIVATE = (546), - WM_MDICASCADE = (551), - WM_MDICREATE = (544), - WM_MDIDESTROY = (545), - WM_MDIGETACTIVE = (553), - WM_MDIICONARRANGE = (552), - WM_MDIMAXIMIZE = (549), - WM_MDINEXT = (548), - WM_MDIREFRESHMENU = (564), - WM_MDIRESTORE = (547), - WM_MDISETMENU = (560), - WM_MDITILE = (550), - WM_MEASUREITEM = (44), - WM_MENUCHAR = (288), - WM_MENUSELECT = (287), - WM_MOUSEACTIVATE = (33), - WM_MOUSEMOVE = (512), - WM_MOUSEWHEEL = 0x020A, - WM_MOVE = (3), - WM_MOVING = (534), - WM_NCACTIVATE = (134), - WM_NCCALCSIZE = (131), - WM_NCCREATE = (129), - WM_NCDESTROY = (130), - WM_NCHITTEST = (132), - WM_NCLBUTTONDBLCLK = (163), - WM_NCLBUTTONDOWN = (161), - WM_NCLBUTTONUP = (162), - WM_NCMBUTTONDBLCLK = (169), - WM_NCMBUTTONDOWN = (167), - WM_NCMBUTTONUP = (168), - WM_NCMOUSEMOVE = (160), - WM_NCPAINT = (133), - WM_NCRBUTTONDBLCLK = (166), - WM_NCRBUTTONDOWN = (164), - WM_NCRBUTTONUP = (165), - WM_NEXTDLGCTL = (40), - WM_NOTIFY = (78), - WM_NOTIFYFORMAT = (85), - WM_NULL = (0), - WM_PAINT = (15), - WM_PAINTCLIPBOARD = (777), - WM_PAINTICON = (38), - WM_PALETTECHANGED = (785), - WM_PALETTEISCHANGING = (784), - WM_PARENTNOTIFY = (528), - WM_PASTE = (770), - WM_PENWINFIRST = (896), - WM_PENWINLAST = (911), - WM_POWER = (72), - WM_POWERBROADCAST = (536), - WM_PRINT = (791), - WM_PRINTCLIENT = (792), - WM_PSD_ENVSTAMPRECT = (1029), - WM_PSD_FULLPAGERECT = (1025), - WM_PSD_GREEKTEXTRECT = (1028), - WM_PSD_MARGINRECT = (1027), - WM_PSD_MINMARGINRECT = (1026), - WM_PSD_PAGESETUPDLG = (1024), - WM_PSD_YAFULLPAGERECT = (1030), - WM_QUERYDRAGICON = (55), - WM_QUERYENDSESSION = (17), - WM_QUERYNEWPALETTE = (783), - WM_QUERYOPEN = (19), - WM_QUEUESYNC = (35), - WM_QUIT = (18), - WM_RBUTTONDBLCLK = (518), - WM_RBUTTONDOWN = (516), - WM_RBUTTONUP = (517), - WM_RENDERALLFORMATS = (774), - WM_RENDERFORMAT = (773), - WM_SETCURSOR = (32), - WM_SETFOCUS = (7), - WM_SETFONT = (48), - WM_SETHOTKEY = (50), - WM_SETICON = (128), - WM_SETREDRAW = (11), - WM_SETTEXT = (12), - WM_SETTINGCHANGE = (26), - WM_SHOWWINDOW = (24), - WM_SIZE = (5), - WM_SIZECLIPBOARD = (779), - WM_SIZING = (532), - WM_SPOOLERSTATUS = (42), - WM_STYLECHANGED = (125), - WM_STYLECHANGING = (124), - WM_SYSCHAR = (262), - WM_SYSCOLORCHANGE = (21), - WM_SYSCOMMAND = (274), - WM_SYSDEADCHAR = (263), - WM_SYSKEYDOWN = (260), - WM_SYSKEYUP = (261), - WM_TCARD = (82), - WM_TIMECHANGE = (30), - WM_TIMER = (275), - WM_UNDO = (772), - WM_USER = (1024), - WM_USERCHANGED = (84), - WM_VKEYTOITEM = (46), - WM_VSCROLL = (277), - WM_VSCROLLCLIPBOARD = (778), - WM_WINDOWPOSCHANGED = (71), - WM_WINDOWPOSCHANGING = (70), - WM_WININICHANGE = (26), - WM_KEYFIRST = (256), - WM_KEYLAST = (264), - WM_MOUSEFIRST = (512), - WM_MOUSELAST = (521), -} -struct VA_LIST -{ -} - - -struct ABC -{ - int abcA; - UINT abcB; - int abcC; -} - -alias ABC* LPABC; -alias ABC _ABC; -alias ABC TABC; -alias ABC* PABC; - -struct ABCFLOAT -{ - FLOAT abcfA; - FLOAT abcfB; - FLOAT abcfC; -} - -alias ABCFLOAT* LPABCFLOAT; -alias ABCFLOAT _ABCFLOAT; -alias ABCFLOAT TABCFLOAT; -alias ABCFLOAT* PABCFLOAT; - -struct ACCEL -{ - ubyte fVirt; - ushort key; - ushort cmd; -} - -alias ACCEL* LPACCEL; -alias ACCEL _ACCEL; -alias ACCEL TACCEL; -alias ACCEL* PACCEL; - -struct ACE_HEADER -{ - ubyte AceType; - ubyte AceFlags; - ushort AceSize; -} - -alias ACE_HEADER _ACE_HEADER; -alias ACE_HEADER TACE_HEADER; -alias ACE_HEADER* PACE_HEADER; -alias DWORD ACCESS_MASK; -alias ACCESS_MASK REGSAM; - -struct ACCESS_ALLOWED_ACE -{ - ACE_HEADER Header; - ACCESS_MASK Mask; - DWORD SidStart; -} - -alias ACCESS_ALLOWED_ACE _ACCESS_ALLOWED_ACE; -alias ACCESS_ALLOWED_ACE TACCESS_ALLOWED_ACE; -alias ACCESS_ALLOWED_ACE* PACCESS_ALLOWED_ACE; - -struct ACCESS_DENIED_ACE -{ - ACE_HEADER Header; - ACCESS_MASK Mask; - DWORD SidStart; -} - -alias ACCESS_DENIED_ACE _ACCESS_DENIED_ACE; -alias ACCESS_DENIED_ACE TACCESS_DENIED_ACE; - -struct ACCESSTIMEOUT -{ - UINT cbSize; - DWORD dwFlags; - DWORD iTimeOutMSec; -} - -alias ACCESSTIMEOUT _ACCESSTIMEOUT; -alias ACCESSTIMEOUT TACCESSTIMEOUT; -alias ACCESSTIMEOUT* PACCESSTIMEOUT; - -struct ACL -{ - ubyte AclRevision; - ubyte Sbz1; - ushort AclSize; - ushort AceCount; - ushort Sbz2; -} - -alias ACL* PACL; -alias ACL _ACL; -alias ACL TACL; - -struct ACL_REVISION_INFORMATION -{ - DWORD AclRevision; -} - -alias ACL_REVISION_INFORMATION _ACL_REVISION_INFORMATION; -alias ACL_REVISION_INFORMATION TACLREVISIONINFORMATION; -alias ACL_REVISION_INFORMATION* PACLREVISIONINFORMATION; - -struct ACL_SIZE_INFORMATION -{ - DWORD AceCount; - DWORD AclBytesInUse; - DWORD AclBytesFree; -} - -alias ACL_SIZE_INFORMATION _ACL_SIZE_INFORMATION; -alias ACL_SIZE_INFORMATION TACLSIZEINFORMATION; -alias ACL_SIZE_INFORMATION* PACLSIZEINFORMATION; - -struct ACTION_HEADER -{ - ULONG transport_id; - USHORT action_code; - USHORT reserved; -} - -alias ACTION_HEADER _ACTION_HEADER; -alias ACTION_HEADER TACTIONHEADER; -alias ACTION_HEADER* PACTIONHEADER; - -struct ADAPTER_STATUS -{ - UCHAR[1 + 5] adapter_address; - UCHAR rev_major; - UCHAR reserved0; - UCHAR adapter_type; - UCHAR rev_minor; - ushort duration; - ushort frmr_recv; - ushort frmr_xmit; - ushort iframe_recv_err; - ushort xmit_aborts; - DWORD xmit_success; - DWORD recv_success; - ushort iframe_xmit_err; - ushort recv_buff_unavail; - ushort t1_timeouts; - ushort ti_timeouts; - DWORD reserved1; - ushort free_ncbs; - ushort max_cfg_ncbs; - ushort max_ncbs; - ushort xmit_buf_unavail; - ushort max_dgram_size; - ushort pending_sess; - ushort max_cfg_sess; - ushort max_sess; - ushort max_sess_pkt_size; - ushort name_count; -} - -alias ADAPTER_STATUS _ADAPTER_STATUS; -alias ADAPTER_STATUS TADAPTERSTATUS; -alias ADAPTER_STATUS* PADAPTERSTATUS; - -struct ADDJOB_INFO_1 -{ - LPTSTR Path; - DWORD JobId; -} - -alias ADDJOB_INFO_1 _ADDJOB_INFO_1; -alias ADDJOB_INFO_1 TADDJOB_INFO_1; -alias ADDJOB_INFO_1* PADDJOB_INFO_1; - -struct ANIMATIONINFO -{ - UINT cbSize; - int iMinAnimate; -} - -alias ANIMATIONINFO* LPANIMATIONINFO; -alias ANIMATIONINFO _ANIMATIONINFO; -alias ANIMATIONINFO TANIMATIONINFO; -alias ANIMATIONINFO* PANIMATIONINFO; - -struct RECT -{ - LONG left; - LONG top; - LONG right; - LONG bottom; -} - -alias RECT* LPRECT; -alias RECT _RECT; -alias RECT TRECT; -alias RECT* PRECT; - -struct RECTL -{ - LONG left; - LONG top; - LONG right; - LONG bottom; -} - -alias RECTL _RECTL; -alias RECTL TRECTL; -alias RECTL* PRECTL; - -struct APPBARDATA -{ - DWORD cbSize; - HWND hWnd; - UINT uCallbackMessage; - UINT uEdge; - RECT rc; - LPARAM lParam; -} - -alias APPBARDATA _APPBARDATA; -alias APPBARDATA TAPPBARDATA; -alias APPBARDATA* PAPPBARDATA; - -struct BITMAP -{ - LONG bmType; - LONG bmWidth; - LONG bmHeight; - LONG bmWidthBytes; - ushort bmPlanes; - ushort bmBitsPixel; - LPVOID bmBits; -} - -alias BITMAP* PBITMAP; -alias BITMAP* NPBITMAP; -alias BITMAP* LPBITMAP; -alias BITMAP TAGBITMAP; -alias BITMAP TBITMAP; - -struct BITMAPCOREHEADER -{ - DWORD bcSize; - ushort bcWidth; - ushort bcHeight; - ushort bcPlanes; - ushort bcBitCount; -} - -alias BITMAPCOREHEADER TAGBITMAPCOREHEADER; -alias BITMAPCOREHEADER TBITMAPCOREHEADER; -alias BITMAPCOREHEADER* PBITMAPCOREHEADER; - -struct RGBTRIPLE -{ - ubyte rgbtBlue; - ubyte rgbtGreen; - ubyte rgbtRed; -} - -alias RGBTRIPLE TAGRGBTRIPLE; -alias RGBTRIPLE TRGBTRIPLE; -alias RGBTRIPLE* PRGBTRIPLE; - -struct BITMAPCOREINFO -{ - BITMAPCOREHEADER bmciHeader; - RGBTRIPLE[1 + 0] bmciColors; -} - -alias BITMAPCOREINFO* PBITMAPCOREINFO; -alias BITMAPCOREINFO* LPBITMAPCOREINFO; -alias BITMAPCOREINFO _BITMAPCOREINFO; -alias BITMAPCOREINFO TBITMAPCOREINFO; - -struct BITMAPINFOHEADER -{ - DWORD biSize; - LONG biWidth; - LONG biHeight; - ushort biPlanes; - ushort biBitCount; - DWORD biCompression; - DWORD biSizeImage; - LONG biXPelsPerMeter; - LONG biYPelsPerMeter; - DWORD biClrUsed; - DWORD biClrImportant; -} - -alias BITMAPINFOHEADER* LPBITMAPINFOHEADER; -alias BITMAPINFOHEADER TBITMAPINFOHEADER; -alias BITMAPINFOHEADER* PBITMAPINFOHEADER; - -struct RGBQUAD -{ - ubyte rgbBlue; - ubyte rgbGreen; - ubyte rgbRed; - ubyte rgbReserved; -} - -alias RGBQUAD TAGRGBQUAD; -alias RGBQUAD TRGBQUAD; -alias RGBQUAD* PRGBQUAD; - -struct BITMAPINFO -{ - BITMAPINFOHEADER bmiHeader; - RGBQUAD[1 + 0] bmiColors; -} - -alias BITMAPINFO* LPBITMAPINFO; -alias BITMAPINFO* PBITMAPINFO; -alias BITMAPINFO TBITMAPINFO; -alias int FXPT2DOT30; -alias FXPT2DOT30* LPFXPT2DOT30; -alias FXPT2DOT30 TPFXPT2DOT30; -alias FXPT2DOT30* PPFXPT2DOT30; - -struct CIEXYZ -{ - FXPT2DOT30 ciexyzX; - FXPT2DOT30 ciexyzY; - FXPT2DOT30 ciexyzZ; -} - -alias CIEXYZ TAGCIEXYZ; -alias CIEXYZ* LPCIEXYZ; -alias CIEXYZ TPCIEXYZ; -alias CIEXYZ* PCIEXYZ; - -struct CIEXYZTRIPLE -{ - CIEXYZ ciexyzRed; - CIEXYZ ciexyzGreen; - CIEXYZ ciexyzBlue; -} - -alias CIEXYZTRIPLE TAGCIEXYZTRIPLE; -alias CIEXYZTRIPLE* LPCIEXYZTRIPLE; -alias CIEXYZTRIPLE TCIEXYZTRIPLE; -alias CIEXYZTRIPLE* PCIEXYZTRIPLE; - -struct BITMAPV4HEADER -{ - DWORD bV4Size; - LONG bV4Width; - LONG bV4Height; - ushort bV4Planes; - ushort bV4BitCount; - DWORD bV4V4Compression; - DWORD bV4SizeImage; - LONG bV4XPelsPerMeter; - LONG bV4YPelsPerMeter; - DWORD bV4ClrUsed; - DWORD bV4ClrImportant; - DWORD bV4RedMask; - DWORD bV4GreenMask; - DWORD bV4BlueMask; - DWORD bV4AlphaMask; - DWORD bV4CSType; - CIEXYZTRIPLE bV4Endpoints; - DWORD bV4GammaRed; - DWORD bV4GammaGreen; - DWORD bV4GammaBlue; -} - -alias BITMAPV4HEADER* LPBITMAPV4HEADER; -alias BITMAPV4HEADER TBITMAPV4HEADER; -alias BITMAPV4HEADER* PBITMAPV4HEADER; - -align(1) struct BITMAPFILEHEADER -{ - ushort bfType; - DWORD bfSize; - ushort bfReserved1; - ushort bfReserved2; - DWORD bfOffBits; -} - - -struct BLOB -{ - ULONG cbSize; - ubyte* pBlobData; -} - -alias BLOB _BLOB; -alias BLOB TBLOB; -alias BLOB* PBLOB; - -struct SHITEMID -{ - USHORT cb; - ubyte[1 + 0] abID; -} - -alias SHITEMID* LPSHITEMID; -alias SHITEMID* LPCSHITEMID; -alias SHITEMID _SHITEMID; -alias SHITEMID TSHITEMID; -alias SHITEMID* PSHITEMID; - -struct ITEMIDLIST -{ - SHITEMID mkid; -} - -alias ITEMIDLIST* LPITEMIDLIST; -alias ITEMIDLIST* LPCITEMIDLIST; -alias ITEMIDLIST _ITEMIDLIST; -alias ITEMIDLIST TITEMIDLIST; -alias ITEMIDLIST* PITEMIDLIST; - -struct BROWSEINFO -{ - HWND hwndOwner; - LPCITEMIDLIST pidlRoot; - LPSTR pszDisplayName; - LPCSTR lpszTitle; - UINT ulFlags; - BFFCALLBACK lpfn; - LPARAM lParam; - int iImage; -} - -alias BROWSEINFO* LPBROWSEINFO; -alias BROWSEINFO _BROWSEINFO; -alias BROWSEINFO TBROWSEINFO; -alias BROWSEINFO* PBROWSEINFO; - -struct FILETIME -{ - DWORD dwLowDateTime; - DWORD dwHighDateTime; -} - -alias FILETIME* LPFILETIME; -alias FILETIME _FILETIME; -alias FILETIME TFILETIME; -alias FILETIME* PFILETIME; - -struct BY_HANDLE_FILE_INFORMATION -{ - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD dwVolumeSerialNumber; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD nNumberOfLinks; - DWORD nFileIndexHigh; - DWORD nFileIndexLow; -} - -alias BY_HANDLE_FILE_INFORMATION* LPBY_HANDLE_FILE_INFORMATION; -alias BY_HANDLE_FILE_INFORMATION _BY_HANDLE_FILE_INFORMATION; -alias BY_HANDLE_FILE_INFORMATION TBYHANDLEFILEINFORMATION; -alias BY_HANDLE_FILE_INFORMATION* PBYHANDLEFILEINFORMATION; - -struct FIXED -{ - ushort fract; - int value; -} - -alias FIXED _FIXED; -alias FIXED TFIXED; -alias FIXED* PFIXED; - -struct POINT -{ - LONG x; - LONG y; -} - -alias POINT* LPPOINT; -alias POINT TAGPOINT; -alias POINT TPOINT; -alias POINT* PPOINT; - -struct POINTFX -{ - FIXED x; - FIXED y; -} - -alias POINTFX TAGPOINTFX; -alias POINTFX TPOINTFX; -alias POINTFX* PPOINTFX; - -struct POINTL -{ - LONG x; - LONG y; -} - -alias POINTL _POINTL; -alias POINTL TPOINTL; -alias POINTL* PPOINTL; - -struct TSMALLPOINT -{ - byte X, Y; -} - - -struct POINTS -{ - SHORT x; - SHORT y; -} - -alias POINTS TAGPOINTS; -alias POINTS TPOINTS; -alias POINTS* PPOINTS; - -struct CANDIDATEFORM -{ - DWORD dwIndex; - DWORD dwStyle; - POINT ptCurrentPos; - RECT rcArea; -} - -alias CANDIDATEFORM* LPCANDIDATEFORM; -alias CANDIDATEFORM _TAGCANDIDATEFORM; -alias CANDIDATEFORM TCANDIDATEFORM; -alias CANDIDATEFORM* PCANDIDATEFORM; - -struct CANDIDATELIST -{ - DWORD dwSize; - DWORD dwStyle; - DWORD dwCount; - DWORD dwSelection; - DWORD dwPageStart; - DWORD dwPageSize; - DWORD[1 + 0] dwOffset; -} - -alias CANDIDATELIST* LPCANDIDATELIST; -alias CANDIDATELIST _TAGCANDIDATELIST; -alias CANDIDATELIST TCANDIDATELIST; -alias CANDIDATELIST* PCANDIDATELIST; - -struct CREATESTRUCT -{ - LPVOID lpCreateParams; - HINST hInstance; - HMENU hMenu; - HWND hwndParent; - int cy; - int cx; - int y; - int x; - LONG style; - LPCTSTR lpszName; - LPCTSTR lpszClass; - DWORD dwExStyle; -} - -alias CREATESTRUCT* LPCREATESTRUCT; -alias CREATESTRUCT TAGCREATESTRUCT; -alias CREATESTRUCT TCREATESTRUCT; -alias CREATESTRUCT* PCREATESTRUCT; - -struct CBT_CREATEWND -{ - LPCREATESTRUCT lpcs; - HWND hwndInsertAfter; -} - -alias CBT_CREATEWND TAGCBT_CREATEWND; -alias CBT_CREATEWND TCBT_CREATEWND; -alias CBT_CREATEWND* PCBT_CREATEWND; - -struct CBTACTIVATESTRUCT -{ - WINBOOL fMouse; - HWND hWndActive; -} - -alias CBTACTIVATESTRUCT TAGCBTACTIVATESTRUCT; -alias CBTACTIVATESTRUCT TCBTACTIVATESTRUCT; -alias CBTACTIVATESTRUCT* PCBTACTIVATESTRUCT; - -struct CHAR_INFO -{ - - union - { - struct - { - WCHAR UnicodeChar; - ushort Attributes; - } - struct - { - char AsciiChar; - } - } -} - -alias CHAR_INFO _CHAR_INFO; -alias CHAR_INFO TCHAR_INFO; -alias CHAR_INFO* PCHAR_INFO; - -struct CHARFORMAT -{ - UINT cbSize; - DWORD dwMask; - DWORD dwEffects; - LONG yHeight; - LONG yOffset; - COLORREF crTextColor; - ubyte bCharSet; - ubyte bPitchAndFamily; - TCHAR[1 + LF_FACESIZE-1] szFaceName; -} - -alias CHARFORMAT _CHARFORMAT; -alias CHARFORMAT TCHARFORMAT; -alias CHARFORMAT* PCHARFORMAT; - -struct CHARRANGE -{ - LONG cpMin; - LONG cpMax; -} - -alias CHARRANGE _CHARRANGE; -alias CHARRANGE TCHARRANGE; -alias CHARRANGE* PCHARRANGE; - -struct CHARSET -{ - DWORD[1 + 2] aflBlock; - DWORD flLang; -} - -alias CHARSET TAGCHARSET; -alias CHARSET TCHARSET; -alias CHARSET* PCHARSET; - -struct FONTSIGNATURE -{ - DWORD[1 + 3] fsUsb; - DWORD[1 + 1] fsCsb; -} - -alias FONTSIGNATURE* LPFONTSIGNATURE; -alias FONTSIGNATURE TAGFONTSIGNATURE; -alias FONTSIGNATURE TFONTSIGNATURE; -alias FONTSIGNATURE* PFONTSIGNATURE; - -struct CHARSETINFO -{ - UINT ciCharset; - UINT ciACP; - FONTSIGNATURE fs; -} - -alias CHARSETINFO* LPCHARSETINFO; -alias CHARSETINFO TCHARSETINFO; -alias CHARSETINFO* PCHARSETINFO; - -struct TCHOOSECOLOR -{ - DWORD lStructSize; - HWND hwndOwner; - HWND hInstance; - COLORREF rgbResult; - COLORREF* lpCustColors; - DWORD Flags; - LPARAM lCustData; - LPCCHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} - -alias TCHOOSECOLOR* LPCHOOSECOLOR; -alias TCHOOSECOLOR* PCHOOSECOLOR; - -struct LOGFONT -{ - LONG lfHeight; - LONG lfWidth; - LONG lfEscapement; - LONG lfOrientation; - LONG lfWeight; - ubyte lfItalic; - ubyte lfUnderline; - ubyte lfStrikeOut; - ubyte lfCharSet; - ubyte lfOutPrecision; - ubyte lfClipPrecision; - ubyte lfQuality; - ubyte lfPitchAndFamily; - TCHAR[1 + LF_FACESIZE-1] lfFaceName; -} - -alias LOGFONT* LPLOGFONT; -alias LOGFONT TLOGFONT; -alias LOGFONT TLOGFONTA; -alias LOGFONT* PLOGFONT; - -struct LOGFONTW -{ - LONG lfHeight; - LONG lfWidth; - LONG lfEscapement; - LONG lfOrientation; - LONG lfWeight; - ubyte lfItalic; - ubyte lfUnderline; - ubyte lfStrikeOut; - ubyte lfCharSet; - ubyte lfOutPrecision; - ubyte lfClipPrecision; - ubyte lfQuality; - ubyte lfPitchAndFamily; - WCHAR lfFaceName[LF_FACESIZE]; -}; - -alias LOGFONTW* LPLOGFONTW; -alias LOGFONTW TLOGFONTW; -alias LOGFONTW TLOGFONTWA; -alias LOGFONTW* PLOGFONTW; - -struct TCHOOSEFONT -{ - DWORD lStructSize; - HWND hwndOwner; - HDC hDC; - LPLOGFONT lpLogFont; - INT iPointSize; - DWORD Flags; - DWORD rgbColors; - LPARAM lCustData; - LPCFHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; - HINST hInstance; - LPTSTR lpszStyle; - ushort nFontType; - ushort ___MISSING_ALIGNMENT__; - INT nSizeMin; - INT nSizeMax; -} - -alias TCHOOSEFONT* LPCHOOSEFONT; -alias TCHOOSEFONT* PCHOOSEFONT; - -struct CIDA -{ - UINT cidl; - UINT[1 + 0] aoffset; -} - -alias CIDA* LPIDA; -alias CIDA _IDA; -alias CIDA TIDA; -alias CIDA* PIDA; - -struct CLIENTCREATESTRUCT -{ - HANDLE hWindowMenu; - UINT idFirstChild; -} - -alias CLIENTCREATESTRUCT* LPCLIENTCREATESTRUCT; -alias CLIENTCREATESTRUCT TAGCLIENTCREATESTRUCT; -alias CLIENTCREATESTRUCT TCLIENTCREATESTRUCT; -alias CLIENTCREATESTRUCT* PCLIENTCREATESTRUCT; - -struct CMINVOKECOMMANDINFO -{ - DWORD cbSize; - DWORD fMask; - HWND hwnd; - LPCSTR lpVerb; - LPCSTR lpParameters; - LPCSTR lpDirectory; - int nShow; - DWORD dwHotKey; - HANDLE hIcon; -} - -alias CMINVOKECOMMANDINFO* LPCMINVOKECOMMANDINFO; -alias CMINVOKECOMMANDINFO _CMINVOKECOMMANDINFO; -alias CMINVOKECOMMANDINFO TCMINVOKECOMMANDINFO; -alias CMINVOKECOMMANDINFO* PCMINVOKECOMMANDINFO; - -struct COLORADJUSTMENT -{ - ushort caSize; - ushort caFlags; - ushort caIlluminantIndex; - ushort caRedGamma; - ushort caGreenGamma; - ushort caBlueGamma; - ushort caReferenceBlack; - ushort caReferenceWhite; - SHORT caContrast; - SHORT caBrightness; - SHORT caColorfulness; - SHORT caRedGreenTint; -} - -alias COLORADJUSTMENT* LPCOLORADJUSTMENT; -alias COLORADJUSTMENT TAGCOLORADJUSTMENT; -alias COLORADJUSTMENT TCOLORADJUSTMENT; -alias COLORADJUSTMENT* PCOLORADJUSTMENT; - -struct COLORMAP -{ - COLORREF from; - COLORREF _to; -} - -alias COLORMAP* LPCOLORMAP; -alias COLORMAP _COLORMAP; -alias COLORMAP TCOLORMAP; -alias COLORMAP* PCOLORMAP; - -struct DCB -{ - DWORD DCBlength; - DWORD BaudRate; - int flag0; - ushort wReserved; - ushort XonLim; - ushort XoffLim; - ubyte ByteSize; - ubyte Parity; - ubyte StopBits; - char XonChar; - char XoffChar; - char ErrorChar; - char EofChar; - char EvtChar; - ushort wReserved1; -} - -alias DCB* LPDCB; -alias DCB _DCB; -alias DCB TDCB; -alias DCB* PDCB; -enum : DWORD { - bm_DCB_fBinary = (0x1), - bp_DCB_fBinary = (0), - bm_DCB_fParity = (0x2), - bp_DCB_fParity = (1), - bm_DCB_fOutxCtsFlow = (0x4), - bp_DCB_fOutxCtsFlow = (2), - bm_DCB_fOutxDsrFlow = (0x8), - bp_DCB_fOutxDsrFlow = (3), - bm_DCB_fDtrControl = (0x30), - bp_DCB_fDtrControl = (4), - bm_DCB_fDsrSensitivity = (0x40), - bp_DCB_fDsrSensitivity = (6), - bm_DCB_fTXContinueOnXoff = (0x80), - bp_DCB_fTXContinueOnXoff = (7), - bm_DCB_fOutX = (0x100), - bp_DCB_fOutX = (8), - bm_DCB_fInX = (0x200), - bp_DCB_fInX = (9), - bm_DCB_fErrorChar = (0x400), - bp_DCB_fErrorChar = (10), - bm_DCB_fNull = (0x800), - bp_DCB_fNull = (11), - bm_DCB_fRtsControl = (0x3000), - bp_DCB_fRtsControl = (12), - bm_DCB_fAbortOnError = (0x4000), - bp_DCB_fAbortOnError = (14), - bm_DCB_fDummy2 = (0xFFFF8000), - bp_DCB_fDummy2 = (15), -} - -struct COMMCONFIG -{ - DWORD dwSize; - ushort wVersion; - ushort wReserved; - DCB dcb; - DWORD dwProviderSubType; - DWORD dwProviderOffset; - DWORD dwProviderSize; - WCHAR[1 + 0] wcProviderData; -} - -alias COMMCONFIG* LPCOMMCONFIG; -alias COMMCONFIG _COMM_CONFIG; -alias COMMCONFIG TCOMMCONFIG; -alias COMMCONFIG* PCOMMCONFIG; - -struct COMMPROP -{ - ushort wPacketLength; - ushort wPacketVersion; - DWORD dwServiceMask; - DWORD dwReserved1; - DWORD dwMaxTxQueue; - DWORD dwMaxRxQueue; - DWORD dwMaxBaud; - DWORD dwProvSubType; - DWORD dwProvCapabilities; - DWORD dwSettableParams; - DWORD dwSettableBaud; - ushort wSettableData; - ushort wSettableStopParity; - DWORD dwCurrentTxQueue; - DWORD dwCurrentRxQueue; - DWORD dwProvSpec1; - DWORD dwProvSpec2; - WCHAR[1 + 0] wcProvChar; -} - -alias COMMPROP* LPCOMMPROP; -alias COMMPROP _COMMPROP; -alias COMMPROP TCOMMPROP; -alias COMMPROP* PCOMMPROP; - -struct COMMTIMEOUTS -{ - DWORD ReadIntervalTimeout; - DWORD ReadTotalTimeoutMultiplier; - DWORD ReadTotalTimeoutConstant; - DWORD WriteTotalTimeoutMultiplier; - DWORD WriteTotalTimeoutConstant; -} - -alias COMMTIMEOUTS* LPCOMMTIMEOUTS; -alias COMMTIMEOUTS _COMMTIMEOUTS; -alias COMMTIMEOUTS TCOMMTIMEOUTS; -alias COMMTIMEOUTS* PCOMMTIMEOUTS; - -struct COMPAREITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - HWND hwndItem; - UINT itemID1; - DWORD itemData1; - UINT itemID2; - DWORD itemData2; -} - -alias COMPAREITEMSTRUCT TAGCOMPAREITEMSTRUCT; -alias COMPAREITEMSTRUCT TCOMPAREITEMSTRUCT; -alias COMPAREITEMSTRUCT* PCOMPAREITEMSTRUCT; - -struct COMPCOLOR -{ - COLORREF crText; - COLORREF crBackground; - DWORD dwEffects; -} - -alias COMPCOLOR TCOMPCOLOR; -alias COMPCOLOR* PCOMPCOLOR; - -struct COMPOSITIONFORM -{ - DWORD dwStyle; - POINT ptCurrentPos; - RECT rcArea; -} - -alias COMPOSITIONFORM* LPCOMPOSITIONFORM; -alias COMPOSITIONFORM _TAGCOMPOSITIONFORM; -alias COMPOSITIONFORM TCOMPOSITIONFORM; -alias COMPOSITIONFORM* PCOMPOSITIONFORM; - -struct COMSTAT -{ - int flag0; - DWORD cbInQue; - DWORD cbOutQue; -} - -alias COMSTAT* LPCOMSTAT; -alias COMSTAT _COMSTAT; -alias COMSTAT TCOMSTAT; -alias COMSTAT* PCOMSTAT; -enum : DWORD { - bm_COMSTAT_fCtsHold = (0x1), - bp_COMSTAT_fCtsHold = (0), - bm_COMSTAT_fDsrHold = (0x2), - bp_COMSTAT_fDsrHold = (1), - bm_COMSTAT_fRlsdHold = (0x4), - bp_COMSTAT_fRlsdHold = (2), - bm_COMSTAT_fXoffHold = (0x8), - bp_COMSTAT_fXoffHold = (3), - bm_COMSTAT_fXoffSent = (0x10), - bp_COMSTAT_fXoffSent = (4), - bm_COMSTAT_fEof = (0x20), - bp_COMSTAT_fEof = (5), - bm_COMSTAT_fTxim = (0x40), - bp_COMSTAT_fTxim = (6), - bm_COMSTAT_fReserved = (0xFFFFFF80), - bp_COMSTAT_fReserved = (7), -} -struct CONSOLE_CURSOR_INFO -{ - DWORD dwSize; - WINBOOL bVisible; -} - -alias CONSOLE_CURSOR_INFO* PCONSOLE_CURSOR_INFO; -alias CONSOLE_CURSOR_INFO _CONSOLE_CURSOR_INFO; -alias CONSOLE_CURSOR_INFO TCONSOLECURSORINFO; -alias CONSOLE_CURSOR_INFO* PCONSOLECURSORINFO; -alias CONSOLE_CURSOR_INFO TCURSORINFO; - -struct COORD -{ - SHORT X; - SHORT Y; -} - -alias COORD _COORD; -alias COORD TCOORD; -alias COORD* PCOORD; - -struct SMALL_RECT -{ - SHORT Left; - SHORT Top; - SHORT Right; - SHORT Bottom; -} - -alias SMALL_RECT _SMALL_RECT; -alias SMALL_RECT TSMALL_RECT; -alias SMALL_RECT* PSMALL_RECT; - -align(1) struct CONSOLE_SCREEN_BUFFER_INFO -{ - COORD dwSize; - COORD dwCursorPosition; - ushort wAttributes; - SMALL_RECT srWindow; - COORD dwMaximumWindowSize; -} - -alias CONSOLE_SCREEN_BUFFER_INFO* PCONSOLE_SCREEN_BUFFER_INFO; -alias CONSOLE_SCREEN_BUFFER_INFO _CONSOLE_SCREEN_BUFFER_INFO; -alias CONSOLE_SCREEN_BUFFER_INFO TCONSOLESCREENBUFFERINFO; -alias CONSOLE_SCREEN_BUFFER_INFO* PCONSOLESCREENBUFFERINFO; - -struct FLOATING_SAVE_AREA -{ - DWORD ControlWord; - DWORD StatusWord; - DWORD TagWord; - DWORD ErrorOffset; - DWORD ErrorSelector; - DWORD DataOffset; - DWORD DataSelector; - ubyte[1 + 79] RegisterArea; - DWORD Cr0NpxState; -} - -alias FLOATING_SAVE_AREA _FLOATING_SAVE_AREA; -alias FLOATING_SAVE_AREA TFLOATINGSAVEAREA; -alias FLOATING_SAVE_AREA* PFLOATINGSAVEAREA; - -enum : DWORD -{ -// -// The following flags control the contents of the CONTEXT structure. -// - CONTEXT_i386 = 0x00010000, // this assumes that i386 and - CONTEXT_i486 = 0x00010000, // i486 have identical context records - - CONTEXT_CONTROL = (CONTEXT_i386 | 0x00000001), // SS:SP, CS:IP, FLAGS, BP - CONTEXT_INTEGER = (CONTEXT_i386 | 0x00000002), // AX, BX, CX, DX, SI, DI - CONTEXT_SEGMENTS = (CONTEXT_i386 | 0x00000004), // DS, ES, FS, GS - CONTEXT_FLOATING_POINT = (CONTEXT_i386 | 0x00000008), // 387 state - CONTEXT_DEBUG_REGISTERS = (CONTEXT_i386 | 0x00000010), // DB 0-3,6,7 - - CONTEXT_FULL = (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS), -} - -struct CONTEXT -{ - DWORD ContextFlags; - DWORD Dr0; - DWORD Dr1; - DWORD Dr2; - DWORD Dr3; - DWORD Dr6; - DWORD Dr7; - FLOATING_SAVE_AREA FloatSave; - DWORD SegGs; - DWORD SegFs; - DWORD SegEs; - DWORD SegDs; - DWORD Edi; - DWORD Esi; - DWORD Ebx; - DWORD Edx; - DWORD Ecx; - DWORD Eax; - DWORD Ebp; - DWORD Eip; - DWORD SegCs; - DWORD EFlags; - DWORD Esp; - DWORD SegSs; -} - -alias CONTEXT* LPCONTEXT; -alias CONTEXT _CONTEXT; -alias CONTEXT TCONTEXT; -alias CONTEXT* PCONTEXT; - -struct LIST_ENTRY -{ - _LIST_ENTRY* Flink; - _LIST_ENTRY* Blink; -} - -alias LIST_ENTRY _LIST_ENTRY; -alias LIST_ENTRY TLISTENTRY; -alias LIST_ENTRY* PLISTENTRY; - -struct CRITICAL_SECTION_DEBUG -{ - ushort _Type; - ushort CreatorBackTraceIndex; - _CRITICAL_SECTION* CriticalSection; - LIST_ENTRY ProcessLocksList; - DWORD EntryCount; - DWORD ContentionCount; - DWORD Depth; - PVOID[1 + 4] OwnerBackTrace; -} - -alias CRITICAL_SECTION_DEBUG* LPCRITICAL_SECTION_DEBUG; -alias CRITICAL_SECTION_DEBUG PCRITICAL_SECTION_DEBUG; -alias CRITICAL_SECTION_DEBUG _CRITICAL_SECTION_DEBUG; -alias CRITICAL_SECTION_DEBUG TCRITICALSECTIONDEBUG; -alias CRITICAL_SECTION_DEBUG* PCRITICALSECTIONDEBUG; - -struct CRITICAL_SECTION -{ - PCRITICAL_SECTION_DEBUG DebugInfo; - LONG LockCount; - LONG RecursionCount; - HANDLE OwningThread; - HANDLE LockSemaphore; - DWORD Reserved; -} - -alias CRITICAL_SECTION* LPCRITICAL_SECTION; -alias CRITICAL_SECTION* PCRITICAL_SECTION; -alias CRITICAL_SECTION _CRITICAL_SECTION; -alias CRITICAL_SECTION TCRITICALSECTION; -alias CRITICAL_SECTION* PCRITICALSECTION; - -struct SECURITY_QUALITY_OF_SERVICE -{ - DWORD Length; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - WINBOOL ContextTrackingMode; - ubyte EffectiveOnly; -} - -alias SECURITY_QUALITY_OF_SERVICE* PSECURITY_QUALITY_OF_SERVICE; -alias SECURITY_QUALITY_OF_SERVICE _SECURITY_QUALITY_OF_SERVICE; -alias SECURITY_QUALITY_OF_SERVICE TSECURITYQUALITYOFSERVICE; -alias SECURITY_QUALITY_OF_SERVICE* PSECURITYQUALITYOFSERVICE; - -struct CONVCONTEXT -{ - UINT cb; - UINT wFlags; - UINT wCountryID; - int iCodePage; - DWORD dwLangID; - DWORD dwSecurity; - SECURITY_QUALITY_OF_SERVICE qos; -} - -alias CONVCONTEXT TAGCONVCONTEXT; -alias CONVCONTEXT TCONVCONTEXT; -alias CONVCONTEXT* PCONVCONTEXT; - -struct CONVINFO -{ - DWORD cb; - DWORD hUser; - HCONV hConvPartner; - HSZ hszSvcPartner; - HSZ hszServiceReq; - HSZ hszTopic; - HSZ hszItem; - UINT wFmt; - UINT wType; - UINT wStatus; - UINT wConvst; - UINT wLastError; - HCONVLIST hConvList; - CONVCONTEXT ConvCtxt; - HWND _hwnd; - HWND hwndPartner; -} - -alias CONVINFO TAGCONVINFO; -alias CONVINFO TCONVINFO; -alias CONVINFO* PCONVINFO; - -struct COPYDATASTRUCT -{ - DWORD dwData; - DWORD cbData; - PVOID lpData; -} - -alias COPYDATASTRUCT TAGCOPYDATASTRUCT; -alias COPYDATASTRUCT TCOPYDATASTRUCT; -alias COPYDATASTRUCT* PCOPYDATASTRUCT; - -struct CPINFO -{ - UINT MaxCharSize; - ubyte[1 + MAX_DEFAULTCHAR-1] DefaultChar; - ubyte[1 + MAX_LEADBYTES-1] LeadByte; -} - -alias CPINFO* LPCPINFO; -alias CPINFO _CPINFO; -alias CPINFO TCPINFO; -alias CPINFO* PCPINFO; - -struct CPLINFO -{ - int idIcon; - int idName; - int idInfo; - LONG lData; -} - -alias CPLINFO TAGCPLINFO; -alias CPLINFO TCPLINFO; -alias CPLINFO* PCPLINFO; - -struct CREATE_PROCESS_DEBUG_INFO -{ - HANDLE hFile; - HANDLE hProcess; - HANDLE hThread; - LPVOID lpBaseOfImage; - DWORD dwDebugInfoFileOffset; - DWORD nDebugInfoSize; - LPVOID lpThreadLocalBase; - LPTHREAD_START_ROUTINE lpStartAddress; - LPVOID lpImageName; - ushort fUnicode; -} - -alias CREATE_PROCESS_DEBUG_INFO _CREATE_PROCESS_DEBUG_INFO; -alias CREATE_PROCESS_DEBUG_INFO TCREATEPROCESSDEBUGINFO; -alias CREATE_PROCESS_DEBUG_INFO* PCREATEPROCESSDEBUGINFO; - -struct CREATE_THREAD_DEBUG_INFO -{ - HANDLE hThread; - LPVOID lpThreadLocalBase; - LPTHREAD_START_ROUTINE lpStartAddress; -} - -alias CREATE_THREAD_DEBUG_INFO _CREATE_THREAD_DEBUG_INFO; -alias CREATE_THREAD_DEBUG_INFO TCREATETHREADDEBUGINFO; -alias CREATE_THREAD_DEBUG_INFO* PCREATETHREADDEBUGINFO; - -struct CURRENCYFMT -{ - UINT NumDigits; - UINT LeadingZero; - UINT Grouping; - LPTSTR lpDecimalSep; - LPTSTR lpThousandSep; - UINT NegativeOrder; - UINT PositiveOrder; - LPTSTR lpCurrencySymbol; -} - -alias CURRENCYFMT _CURRENCYFMT; -alias CURRENCYFMT TCURRENCYFMT; -alias CURRENCYFMT* PCURRENCYFMT; - -struct CURSORSHAPE -{ - int xHotSpot; - int yHotSpot; - int cx; - int cy; - int cbWidth; - ubyte Planes; - ubyte BitsPixel; -} - -alias CURSORSHAPE* LPCURSORSHAPE; -alias CURSORSHAPE TAGCURSORSHAPE; -alias CURSORSHAPE TCURSORSHAPE; -alias CURSORSHAPE* PCURSORSHAPE; - -struct CWPRETSTRUCT -{ - LRESULT lResult; - LPARAM lParam; - WPARAM wParam; - DWORD message; - HWND hwnd; -} - -alias CWPRETSTRUCT TAGCWPRETSTRUCT; -alias CWPRETSTRUCT TCWPRETSTRUCT; -alias CWPRETSTRUCT* PCWPRETSTRUCT; - -struct CWPSTRUCT -{ - LPARAM lParam; - WPARAM wParam; - UINT message; - HWND hwnd; -} - -alias CWPSTRUCT TAGCWPSTRUCT; -alias CWPSTRUCT TCWPSTRUCT; -alias CWPSTRUCT* PCWPSTRUCT; - -struct DATATYPES_INFO_1 -{ - LPTSTR pName; -} - -alias DATATYPES_INFO_1 _DATATYPES_INFO_1; -alias DATATYPES_INFO_1 TDATATYPESINFO1; -alias DATATYPES_INFO_1* PDATATYPESINFO1; - -struct DDEACK -{ - ushort flag0; -} - -alias DDEACK TDDEACK; -alias DDEACK* PDDEACK; -enum : DWORD { - bm_DDEACK_bAppReturnCode = (0xFF), - bp_DDEACK_bAppReturnCode = (0), - bm_DDEACK_reserved = (0x3F00), - bp_DDEACK_reserved = (8), - bm_DDEACK_fBusy = (0x4000), - bp_DDEACK_fBusy = (14), - bm_DDEACK_fAck = (0x8000), - bp_DDEACK_fAck = (15), -} - -struct DDEADVISE -{ - ushort flag0; - int cfFormat; -} - -alias DDEADVISE TDDEADVISE; -alias DDEADVISE* PDDEADVISE; -enum : DWORD { - bm_DDEADVISE_reserved = (0x3FFF), - bp_DDEADVISE_reserved = (0), - bm_DDEADVISE_fDeferUpd = (0x4000), - bp_DDEADVISE_fDeferUpd = (14), - bm_DDEADVISE_fAckReq = (0x8000), - bp_DDEADVISE_fAckReq = (15), -} - -struct DDEDATA -{ - ushort flag0; - int cfFormat; - ubyte[1 + 0] Value; -} - -alias DDEDATA* PDDEDATA; -enum : DWORD { - bm_DDEDATA_unused = (0xFFF), - bp_DDEDATA_unused = (0), - bm_DDEDATA_fResponse = (0x1000), - bp_DDEDATA_fResponse = (12), - bm_DDEDATA_fRelease = (0x2000), - bp_DDEDATA_fRelease = (13), - bm_DDEDATA_reserved = (0x4000), - bp_DDEDATA_reserved = (14), - bm_DDEDATA_fAckReq = (0x8000), - bp_DDEDATA_fAckReq = (15), -} - -struct DDELN -{ - ushort flag0; - int cfFormat; -} - -alias DDELN TDDELN; -alias DDELN* PDDELN; -enum : DWORD { - bm_DDELN_unused = (0x1FFF), - bp_DDELN_unused = (0), - bm_DDELN_fRelease = (0x2000), - bp_DDELN_fRelease = (13), - bm_DDELN_fDeferUpd = (0x4000), - bp_DDELN_fDeferUpd = (14), - bm_DDELN_fAckReq = (0x8000), - bp_DDELN_fAckReq = (15), -} - -struct DDEML_MSG_HOOK_DATA -{ - UINT uiLo; - UINT uiHi; - DWORD cbData; - DWORD[1 + 7] Data; -} - -alias DDEML_MSG_HOOK_DATA TAGDDEML_MSG_HOOK_DATA; -alias DDEML_MSG_HOOK_DATA TDDEMLMSGHOOKDATA; -alias DDEML_MSG_HOOK_DATA* PDDEMLMSGHOOKDATA; - -struct DDEPOKE -{ - ushort flag0; - int cfFormat; - ubyte[1 + 0] Value; -} - -alias DDEPOKE TDDEPOKE; -alias DDEPOKE* PDDEPOKE; -enum : DWORD { - bm_DDEPOKE_unused = (0x1FFF), - bp_DDEPOKE_unused = (0), - bm_DDEPOKE_fRelease = (0x2000), - bp_DDEPOKE_fRelease = (13), - bm_DDEPOKE_fReserved = (0xC000), - bp_DDEPOKE_fReserved = (14), -} -struct DDEUP -{ - ushort flag0; - int cfFormat; - ubyte[1 + 0] rgb; -} - -alias DDEUP TDDEUP; -alias DDEUP* PDDEUP; - -enum : DWORD { - bm_DDEUP_unused = (0xFFF), - bp_DDEUP_unused = (0), - bm_DDEUP_fAck = (0x1000), - bp_DDEUP_fAck = (12), - bm_DDEUP_fRelease = (0x2000), - bp_DDEUP_fRelease = (13), - bm_DDEUP_fReserved = (0x4000), - bp_DDEUP_fReserved = (14), - bm_DDEUP_fAckReq = (0x8000), - bp_DDEUP_fAckReq = (15), -} - -struct EXCEPTION_RECORD -{ - DWORD ExceptionCode; - DWORD ExceptionFlags; - _EXCEPTION_RECORD* ExceptionRecord; - PVOID ExceptionAddress; - DWORD NumberParameters; - DWORD[1 + EXCEPTION_MAXIMUM_PARAMETERS-1] ExceptionInformation; -} - -alias EXCEPTION_RECORD* PEXCEPTION_RECORD; -alias EXCEPTION_RECORD _EXCEPTION_RECORD; -alias EXCEPTION_RECORD TEXCEPTIONRECORD; -alias EXCEPTION_RECORD* PEXCEPTIONRECORD; - -struct EXCEPTION_DEBUG_INFO -{ - EXCEPTION_RECORD ExceptionRecord; - DWORD dwFirstChance; -} - -alias EXCEPTION_DEBUG_INFO* PEXCEPTION_DEBUG_INFO; -alias EXCEPTION_DEBUG_INFO _EXCEPTION_DEBUG_INFO; -alias EXCEPTION_DEBUG_INFO TEXCEPTIONDEBUGINFO; -alias EXCEPTION_DEBUG_INFO* PEXCEPTIONDEBUGINFO; - -struct EXIT_PROCESS_DEBUG_INFO -{ - DWORD dwExitCode; -} - -alias EXIT_PROCESS_DEBUG_INFO _EXIT_PROCESS_DEBUG_INFO; -alias EXIT_PROCESS_DEBUG_INFO TEXITPROCESSDEBUGINFO; -alias EXIT_PROCESS_DEBUG_INFO* PEXITPROCESSDEBUGINFO; - -struct EXIT_THREAD_DEBUG_INFO -{ - DWORD dwExitCode; -} - -alias EXIT_THREAD_DEBUG_INFO _EXIT_THREAD_DEBUG_INFO; -alias EXIT_THREAD_DEBUG_INFO TEXITTHREADDEBUGINFO; -alias EXIT_THREAD_DEBUG_INFO* PEXITTHREADDEBUGINFO; - -struct LOAD_DLL_DEBUG_INFO -{ - HANDLE hFile; - LPVOID lpBaseOfDll; - DWORD dwDebugInfoFileOffset; - DWORD nDebugInfoSize; - LPVOID lpImageName; - ushort fUnicode; -} - -alias LOAD_DLL_DEBUG_INFO _LOAD_DLL_DEBUG_INFO; -alias LOAD_DLL_DEBUG_INFO TLOADDLLDEBUGINFO; -alias LOAD_DLL_DEBUG_INFO* PLOADDLLDEBUGINFO; - -struct UNLOAD_DLL_DEBUG_INFO -{ - LPVOID lpBaseOfDll; -} - -alias UNLOAD_DLL_DEBUG_INFO _UNLOAD_DLL_DEBUG_INFO; -alias UNLOAD_DLL_DEBUG_INFO TUNLOADDLLDEBUGINFO; -alias UNLOAD_DLL_DEBUG_INFO* PUNLOADDLLDEBUGINFO; - -struct OUTPUT_DEBUG_STRING_INFO -{ - LPSTR lpDebugStringData; - ushort fUnicode; - ushort nDebugStringLength; -} - -alias OUTPUT_DEBUG_STRING_INFO _OUTPUT_DEBUG_STRING_INFO; -alias OUTPUT_DEBUG_STRING_INFO TOUTPUTDEBUGSTRINGINFO; -alias OUTPUT_DEBUG_STRING_INFO* POUTPUTDEBUGSTRINGINFO; - -struct RIP_INFO -{ - DWORD dwError; - DWORD dwType; -} - -alias RIP_INFO _RIP_INFO; -alias RIP_INFO TRIPINFO; -alias RIP_INFO* PRIPINFO; - -struct DEBUG_EVENT -{ - DWORD dwDebugEventCode; - DWORD dwProcessId; - DWORD dwThreadId; - - union - { - struct - { - EXCEPTION_DEBUG_INFO Exception; - } - struct - { - CREATE_THREAD_DEBUG_INFO CreateThread; - } - struct - { - CREATE_PROCESS_DEBUG_INFO CreateProcessInfo; - } - struct - { - EXIT_THREAD_DEBUG_INFO ExitThread; - } - struct - { - EXIT_PROCESS_DEBUG_INFO ExitProcess; - } - struct - { - LOAD_DLL_DEBUG_INFO LoadDll; - } - struct - { - UNLOAD_DLL_DEBUG_INFO UnloadDll; - } - struct - { - OUTPUT_DEBUG_STRING_INFO DebugString; - } - struct - { - RIP_INFO RipInfo; - } - } -} - -alias DEBUG_EVENT* LPDEBUG_EVENT; -alias DEBUG_EVENT _DEBUG_EVENT; -alias DEBUG_EVENT TDEBUGEVENT; -alias DEBUG_EVENT* PDEBUGEVENT; - -struct DEBUGHOOKINFO -{ - DWORD idThread; - DWORD idThreadInstaller; - LPARAM lParam; - WPARAM wParam; - int code; -} - -alias DEBUGHOOKINFO TAGDEBUGHOOKINFO; -alias DEBUGHOOKINFO TDEBUGHOOKINFO; -alias DEBUGHOOKINFO* PDEBUGHOOKINFO; - -struct DELETEITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - HWND hwndItem; - UINT itemData; -} - -alias DELETEITEMSTRUCT TAGDELETEITEMSTRUCT; -alias DELETEITEMSTRUCT TDELETEITEMSTRUCT; -alias DELETEITEMSTRUCT* PDELETEITEMSTRUCT; - -struct DEV_BROADCAST_HDR -{ - ULONG dbch_size; - ULONG dbch_devicetype; - ULONG dbch_reserved; -} - -alias DEV_BROADCAST_HDR* PDEV_BROADCAST_HDR; -alias DEV_BROADCAST_HDR _DEV_BROADCAST_HDR; -alias DEV_BROADCAST_HDR TDEVBROADCASTHDR; -alias DEV_BROADCAST_HDR* PDEVBROADCASTHDR; - -struct DEV_BROADCAST_OEM -{ - ULONG dbco_size; - ULONG dbco_devicetype; - ULONG dbco_reserved; - ULONG dbco_identifier; - ULONG dbco_suppfunc; -} - -alias DEV_BROADCAST_OEM* PDEV_BROADCAST_OEM; -alias DEV_BROADCAST_OEM _DEV_BROADCAST_OEM; -alias DEV_BROADCAST_OEM TDEVBROADCASTOEM; -alias DEV_BROADCAST_OEM* PDEVBROADCASTOEM; - -struct DEV_BROADCAST_PORT -{ - ULONG dbcp_size; - ULONG dbcp_devicetype; - ULONG dbcp_reserved; - char[1 + 0] dbcp_name; -} - -alias DEV_BROADCAST_PORT* PDEV_BROADCAST_PORT; -alias DEV_BROADCAST_PORT _DEV_BROADCAST_PORT; -alias DEV_BROADCAST_PORT TDEVBROADCASTPORT; -alias DEV_BROADCAST_PORT* PDEVBROADCASTPORT; - -struct _DEV_BROADCAST_USERDEFINED -{ - _DEV_BROADCAST_HDR dbud_dbh; - char[1 + 0] dbud_szName; - ubyte[1 + 0] dbud_rgbUserDefined; -} - -alias _DEV_BROADCAST_USERDEFINED TDEVBROADCASTUSERDEFINED; -alias _DEV_BROADCAST_USERDEFINED* PDEVBROADCASTUSERDEFINED; - -struct DEV_BROADCAST_VOLUME -{ - ULONG dbcv_size; - ULONG dbcv_devicetype; - ULONG dbcv_reserved; - ULONG dbcv_unitmask; - USHORT dbcv_flags; -} - -alias DEV_BROADCAST_VOLUME* PDEV_BROADCAST_VOLUME; -alias DEV_BROADCAST_VOLUME _DEV_BROADCAST_VOLUME; -alias DEV_BROADCAST_VOLUME TDEVBROADCASTVOLUME; -alias DEV_BROADCAST_VOLUME* PDEVBROADCASTVOLUME; - -struct DEVMODE -{ - BCHAR[1 + CCHDEVICENAME-1] dmDeviceName; - ushort dmSpecVersion; - ushort dmDriverVersion; - ushort dmSize; - ushort dmDriverExtra; - DWORD dmFields; - int dmOrientation; - int dmPaperSize; - int dmPaperLength; - int dmPaperWidth; - int dmScale; - int dmCopies; - int dmDefaultSource; - int dmPrintQuality; - int dmColor; - int dmDuplex; - int dmYResolution; - int dmTTOption; - int dmCollate; - BCHAR[1 + CCHFORMNAME-1] dmFormName; - ushort dmLogPixels; - DWORD dmBitsPerPel; - DWORD dmPelsWidth; - DWORD dmPelsHeight; - DWORD dmDisplayFlags; - DWORD dmDisplayFrequency; - DWORD dmICMMethod; - DWORD dmICMIntent; - DWORD dmMediaType; - DWORD dmDitherType; - DWORD dmICCManufacturer; - DWORD dmICCModel; -} - -alias DEVMODE* LPDEVMODE; -alias DEVMODE _DEVICEMODE; -alias DEVMODE DEVICEMODE; -alias DEVMODE TDEVICEMODE; -alias DEVMODE TDEVICEMODEA; -alias DEVMODE TDEVMODE; -alias DEVMODE* PDEVMODE; - -struct DEVNAMES -{ - ushort wDriverOffset; - ushort wDeviceOffset; - ushort wOutputOffset; - ushort wDefault; -} - -alias DEVNAMES* LPDEVNAMES; -alias DEVNAMES TAGDEVNAMES; -alias DEVNAMES TDEVNAMES; -alias DEVNAMES* PDEVNAMES; - -struct DIBSECTION -{ - BITMAP dsBm; - BITMAPINFOHEADER dsBmih; - DWORD[1 + 2] dsBitfields; - HANDLE dshSection; - DWORD dsOffset; -} - -alias DIBSECTION TAGDIBSECTION; -alias DIBSECTION TDIBSECTION; -alias DIBSECTION* PDIBSECTION; - -union LARGE_INTEGER -{ - struct - { - DWORD LowPart; - LONG HighPart; - }; - struct u - { - DWORD LowPart; - LONG HighPart; - }; - LONGLONG QuadPart; -}; - -alias LARGE_INTEGER* PLARGE_INTEGER; -alias LARGE_INTEGER _LARGE_INTEGER; -alias LARGE_INTEGER TLARGEINTEGER; -alias LARGE_INTEGER* PLARGEINTEGER; - -struct DISK_GEOMETRY -{ - LARGE_INTEGER Cylinders; - MEDIA_TYPE MediaType; - DWORD TracksPerCylinder; - DWORD SectorsPerTrack; - DWORD BytesPerSector; -} - -alias DISK_GEOMETRY _DISK_GEOMETRY; -alias DISK_GEOMETRY TDISKGEOMETRY; -alias DISK_GEOMETRY* PDISKGEOMETRY; - -struct DISK_PERFORMANCE -{ - LARGE_INTEGER BytesRead; - LARGE_INTEGER BytesWritten; - LARGE_INTEGER ReadTime; - LARGE_INTEGER WriteTime; - DWORD ReadCount; - DWORD WriteCount; - DWORD QueueDepth; -} - -alias DISK_PERFORMANCE _DISK_PERFORMANCE; -alias DISK_PERFORMANCE TDISKPERFORMANCE; -alias DISK_PERFORMANCE* PDISKPERFORMANCE; - -align(1) struct DLGITEMTEMPLATE -{ - DWORD style; - DWORD dwExtendedStyle; - int x; - int y; - int cx; - int cy; - ushort id; -} - -alias DLGITEMTEMPLATE* LPDLGITEMTEMPLATE; -alias DLGITEMTEMPLATE TDLGITEMTEMPLATE; -alias DLGITEMTEMPLATE* PDLGITEMTEMPLATE; - -align(1) struct DLGTEMPLATE -{ - DWORD style; - DWORD dwExtendedStyle; - ushort cdit; - int x; - int y; - int cx; - int cy; -} - -alias DLGTEMPLATE* LPDLGTEMPLATE; -alias DLGTEMPLATE* LPCDLGTEMPLATE; -alias DLGTEMPLATE TDLGTEMPLATE; -alias DLGTEMPLATE* PDLGTEMPLATE; - -struct DOC_INFO_1 -{ - LPTSTR pDocName; - LPTSTR pOutputFile; - LPTSTR pDatatype; -} - -alias DOC_INFO_1 _DOC_INFO_1; -alias DOC_INFO_1 TDOCINFO1; -alias DOC_INFO_1* PDOCINFO1; - -struct DOC_INFO_2 -{ - LPTSTR pDocName; - LPTSTR pOutputFile; - LPTSTR pDatatype; - DWORD dwMode; - DWORD JobId; -} - -alias DOC_INFO_2 _DOC_INFO_2; -alias DOC_INFO_2 TDOCINFO2; -alias DOC_INFO_2* PDOCINFO2; - -struct DOCINFO -{ - int cbSize; - LPCTSTR lpszDocName; - LPCTSTR lpszOutput; - LPCTSTR lpszDatatype; - DWORD fwType; -} - -alias DOCINFO TDOCINFO; -alias DOCINFO TDOCINFOA; -alias DOCINFO* PDOCINFO; - -struct DRAGLISTINFO -{ - UINT uNotification; - HWND hWnd; - POINT ptCursor; -} - -alias DRAGLISTINFO* LPDRAGLISTINFO; -alias DRAGLISTINFO TDRAGLISTINFO; -alias DRAGLISTINFO* PDRAGLISTINFO; - -struct DRAWITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - UINT itemAction; - UINT itemState; - HWND hwndItem; - HDC hDC; - RECT rcItem; - DWORD itemData; -} - -alias DRAWITEMSTRUCT* LPDRAWITEMSTRUCT; -alias DRAWITEMSTRUCT TAGDRAWITEMSTRUCT; -alias DRAWITEMSTRUCT TDRAWITEMSTRUCT; -alias DRAWITEMSTRUCT* PDRAWITEMSTRUCT; - -struct DRAWTEXTPARAMS -{ - UINT cbSize; - int iTabLength; - int iLeftMargin; - int iRightMargin; - UINT uiLengthDrawn; -} - -alias DRAWTEXTPARAMS* LPDRAWTEXTPARAMS; -alias DRAWTEXTPARAMS TDRAWTEXTPARAMS; -alias DRAWTEXTPARAMS* PDRAWTEXTPARAMS; - -struct PARTITION_INFORMATION -{ - ubyte PartitionType; - ubyte BootIndicator; - ubyte RecognizedPartition; - ubyte RewritePartition; - LARGE_INTEGER StartingOffset; - LARGE_INTEGER PartitionLength; - LARGE_INTEGER HiddenSectors; -} - -alias PARTITION_INFORMATION _PARTITION_INFORMATION; -alias PARTITION_INFORMATION TPARTITIONINFORMATION; -alias PARTITION_INFORMATION* PPARTITIONINFORMATION; - -struct DRIVE_LAYOUT_INFORMATION -{ - DWORD PartitionCount; - DWORD Signature; - PARTITION_INFORMATION[1 + 0] PartitionEntry; -} - -alias DRIVE_LAYOUT_INFORMATION _DRIVE_LAYOUT_INFORMATION; -alias DRIVE_LAYOUT_INFORMATION TDRIVELAYOUTINFORMATION; -alias DRIVE_LAYOUT_INFORMATION* PDRIVELAYOUTINFORMATION; - -struct DRIVER_INFO_1 -{ - LPTSTR pName; -} - -alias DRIVER_INFO_1 _DRIVER_INFO_1; -alias DRIVER_INFO_1 TDRIVERINFO1; -alias DRIVER_INFO_1* PDRIVERINFO1; - -struct DRIVER_INFO_2 -{ - DWORD cVersion; - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDriverPath; - LPTSTR pDataFile; - LPTSTR pConfigFile; -} - -alias DRIVER_INFO_2 _DRIVER_INFO_2; -alias DRIVER_INFO_2 TDRIVERINFO2; -alias DRIVER_INFO_2* PDRIVERINFO2; - -struct DRIVER_INFO_3 -{ - DWORD cVersion; - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDriverPath; - LPTSTR pDataFile; - LPTSTR pConfigFile; - LPTSTR pHelpFile; - LPTSTR pDependentFiles; - LPTSTR pMonitorName; - LPTSTR pDefaultDataType; -} - -alias DRIVER_INFO_3 _DRIVER_INFO_3; -alias DRIVER_INFO_3 TDRIVERINFO3; -alias DRIVER_INFO_3* PDRIVERINFO3; - -struct EDITSTREAM -{ - DWORD dwCookie; - DWORD dwError; - EDITSTREAMCALLBACK pfnCallback; -} - -alias EDITSTREAM _EDITSTREAM; -alias EDITSTREAM TEDITSTREAM; -alias EDITSTREAM* PEDITSTREAM; - -struct EMR -{ - DWORD iType; - DWORD nSize; -} - -alias EMR TAGEMR; -alias EMR TEMR; -alias EMR* PEMR; - -struct EMRANGLEARC -{ - EMR emr; - POINTL ptlCenter; - DWORD nRadius; - FLOAT eStartAngle; - FLOAT eSweepAngle; -} - -alias EMRANGLEARC TAGEMRANGLEARC; -alias EMRANGLEARC TEMRANGLEARC; -alias EMRANGLEARC* PEMRANGLEARC; - -struct EMRARC -{ - EMR emr; - RECTL rclBox; - POINTL ptlStart; - POINTL ptlEnd; -} - -alias EMRARC TAGEMRARC; -alias EMRARC TEMRARC; -alias EMRARC* PEMRARC; -alias EMRARC EMRARCTO; -alias EMRARC TEMRARCTO; -alias EMRARC* PEMRARCTO; -alias EMRARC EMRCHORD; -alias EMRARC TEMRCHORD; -alias EMRARC* PEMRCHORD; -alias EMRARC EMRPIE; -alias EMRARC TEMRPIE; -alias EMRARC* PEMRPIE; - -struct XFORM -{ - FLOAT eM11; - FLOAT eM12; - FLOAT eM21; - FLOAT eM22; - FLOAT eDx; - FLOAT eDy; -} - -alias XFORM* LPXFORM; -alias XFORM _XFORM; -alias XFORM TXFORM; -alias XFORM* PXFORM; - -struct EMRBITBLT -{ - EMR emr; - RECTL rclBounds; - LONG xDest; - LONG yDest; - LONG cxDest; - LONG cyDest; - DWORD dwRop; - LONG xSrc; - LONG ySrc; - XFORM xformSrc; - COLORREF crBkColorSrc; - DWORD iUsageSrc; - DWORD offBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; -} - -alias EMRBITBLT TAGEMRBITBLT; -alias EMRBITBLT TEMRBITBLT; -alias EMRBITBLT* PEMRBITBLT; - -struct LOGBRUSH -{ - UINT lbStyle; - COLORREF lbColor; - LONG lbHatch; -} - -alias LOGBRUSH TAGLOGBRUSH; -alias LOGBRUSH TLOGBRUSH; -alias LOGBRUSH* PLOGBRUSH; - -struct EMRCREATEBRUSHINDIRECT -{ - EMR emr; - DWORD ihBrush; - LOGBRUSH lb; -} - -alias EMRCREATEBRUSHINDIRECT TAGEMRCREATEBRUSHINDIRECT; -alias EMRCREATEBRUSHINDIRECT TEMRCREATEBRUSHINDIRECT; -alias EMRCREATEBRUSHINDIRECT* PEMRCREATEBRUSHINDIRECT; -alias LONG LCSCSTYPE; -alias LONG LCSGAMUTMATCH; - -struct LOGCOLORSPACE -{ - DWORD lcsSignature; - DWORD lcsVersion; - DWORD lcsSize; - LCSCSTYPE lcsCSType; - LCSGAMUTMATCH lcsIntent; - CIEXYZTRIPLE lcsEndpoints; - DWORD lcsGammaRed; - DWORD lcsGammaGreen; - DWORD lcsGammaBlue; - TCHAR[1 + MAX_PATH-1] lcsFilename; -} - -alias LOGCOLORSPACE* LPLOGCOLORSPACE; -alias LOGCOLORSPACE TAGLOGCOLORSPACE; -alias LOGCOLORSPACE TLOGCOLORSPACE; -alias LOGCOLORSPACE TLOGCOLORSPACEA; -alias LOGCOLORSPACE* PLOGCOLORSPACE; - -struct EMRCREATECOLORSPACE -{ - EMR emr; - DWORD ihCS; - LOGCOLORSPACE lcs; -} - -alias EMRCREATECOLORSPACE TAGEMRCREATECOLORSPACE; -alias EMRCREATECOLORSPACE TEMRCREATECOLORSPACE; -alias EMRCREATECOLORSPACE* PEMRCREATECOLORSPACE; - -struct EMRCREATEDIBPATTERNBRUSHPT -{ - EMR emr; - DWORD ihBrush; - DWORD iUsage; - DWORD offBmi; - DWORD cbBmi; - DWORD offBits; - DWORD cbBits; -} - -alias EMRCREATEDIBPATTERNBRUSHPT TAGEMRCREATEDIBPATTERNBRUSHPT; -alias EMRCREATEDIBPATTERNBRUSHPT TEMRCREATEDIBPATTERNBRUSHPT; -alias EMRCREATEDIBPATTERNBRUSHPT PEMRCREATEDIBPATTERNBRUSHPT; - -struct EMRCREATEMONOBRUSH -{ - EMR emr; - DWORD ihBrush; - DWORD iUsage; - DWORD offBmi; - DWORD cbBmi; - DWORD offBits; - DWORD cbBits; -} - -alias EMRCREATEMONOBRUSH TAGEMRCREATEMONOBRUSH; -alias EMRCREATEMONOBRUSH TEMRCREATEMONOBRUSH; -alias EMRCREATEMONOBRUSH* PEMRCREATEMONOBRUSH; - -struct PALETTEENTRY -{ - ubyte peRed; - ubyte peGreen; - ubyte peBlue; - ubyte peFlags; -} - -alias PALETTEENTRY* LPPALETTEENTRY; -alias PALETTEENTRY TAGPALETTEENTRY; -alias PALETTEENTRY TPALETTEENTRY; -alias PALETTEENTRY* PPALETTEENTRY; - -struct LOGPALETTE -{ - ushort palVersion; - ushort palNumEntries; - PALETTEENTRY[1 + 0] palPalEntry; -} - -alias LOGPALETTE* LPLOGPALETTE; -alias LOGPALETTE TAGLOGPALETTE; -alias LOGPALETTE TLOGPALETTE; -alias LOGPALETTE* PLOGPALETTE; - -struct EMRCREATEPALETTE -{ - EMR emr; - DWORD ihPal; - LOGPALETTE lgpl; -} - -alias EMRCREATEPALETTE TAGEMRCREATEPALETTE; -alias EMRCREATEPALETTE TEMRCREATEPALETTE; -alias EMRCREATEPALETTE* PEMRCREATEPALETTE; - -struct LOGPEN -{ - UINT lopnStyle; - POINT lopnWidth; - COLORREF lopnColor; -} - -alias LOGPEN TAGLOGPEN; -alias LOGPEN TLOGPEN; -alias LOGPEN* PLOGPEN; - -struct EMRCREATEPEN -{ - EMR emr; - DWORD ihPen; - LOGPEN lopn; -} - -alias EMRCREATEPEN TAGEMRCREATEPEN; -alias EMRCREATEPEN TEMRCREATEPEN; -alias EMRCREATEPEN* PEMRCREATEPEN; - -struct EMRELLIPSE -{ - EMR emr; - RECTL rclBox; -} - -alias EMRELLIPSE TAGEMRELLIPSE; -alias EMRELLIPSE TEMRELLIPSE; -alias EMRELLIPSE* PEMRELLIPSE; -alias EMRELLIPSE EMRRECTANGLE; -alias EMRELLIPSE TEMRRECTANGLE; -alias EMRELLIPSE* PEMRRECTANGLE; - -struct EMREOF -{ - EMR emr; - DWORD nPalEntries; - DWORD offPalEntries; - DWORD nSizeLast; -} - -alias EMREOF TAGEMREOF; -alias EMREOF TEMREOF; -alias EMREOF* PEMREOF; - -struct EMREXCLUDECLIPRECT -{ - EMR emr; - RECTL rclClip; -} - -alias EMREXCLUDECLIPRECT TAGEMREXCLUDECLIPRECT; -alias EMREXCLUDECLIPRECT TEMREXCLUDECLIPRECT; -alias EMREXCLUDECLIPRECT* PEMREXCLUDECLIPRECT; -alias EMREXCLUDECLIPRECT EMRINTERSECTCLIPRECT; -alias EMREXCLUDECLIPRECT TEMRINTERSECTCLIPRECT; -alias EMREXCLUDECLIPRECT* PEMRINTERSECTCLIPRECT; - -struct PANOSE -{ - ubyte bFamilyType; - ubyte bSerifStyle; - ubyte bWeight; - ubyte bProportion; - ubyte bContrast; - ubyte bStrokeVariation; - ubyte bArmStyle; - ubyte bLetterform; - ubyte bMidline; - ubyte bXHeight; -} - -alias PANOSE TAGPANOSE; -alias PANOSE TPANOSE; -alias PANOSE* PPANOSE; - -struct EXTLOGFONT -{ - LOGFONT elfLogFont; - BCHAR[1 + LF_FULLFACESIZE-1] elfFullName; - BCHAR[1 + LF_FACESIZE-1] elfStyle; - DWORD elfVersion; - DWORD elfStyleSize; - DWORD elfMatch; - DWORD elfReserved; - ubyte[1 + ELF_VENDOR_SIZE-1] elfVendorId; - DWORD elfCulture; - PANOSE elfPanose; -} - -alias EXTLOGFONT TAGEXTLOGFONT; -alias EXTLOGFONT TEXTLOGFONT; -alias EXTLOGFONT* PEXTLOGFONT; - -struct EMREXTCREATEFONTINDIRECTW -{ - EMR emr; - DWORD ihFont; - EXTLOGFONT elfw; -} - -alias EMREXTCREATEFONTINDIRECTW TAGEMREXTCREATEFONTINDIRECTW; -alias EMREXTCREATEFONTINDIRECTW TEMREXTCREATEFONTINDIRECTW; -alias EMREXTCREATEFONTINDIRECTW* PEMREXTCREATEFONTINDIRECTW; - -struct EXTLOGPEN -{ - UINT elpPenStyle; - UINT elpWidth; - UINT elpBrushStyle; - COLORREF elpColor; - LONG elpHatch; - DWORD elpNumEntries; - DWORD[1 + 0] elpStyleEntry; -} - -alias EXTLOGPEN TAGEXTLOGPEN; -alias EXTLOGPEN TEXTLOGPEN; -alias EXTLOGPEN* PEXTLOGPEN; - -struct EMREXTCREATEPEN -{ - EMR emr; - DWORD ihPen; - DWORD offBmi; - DWORD cbBmi; - DWORD offBits; - DWORD cbBits; - EXTLOGPEN elp; -} - -alias EMREXTCREATEPEN TAGEMREXTCREATEPEN; -alias EMREXTCREATEPEN TEMREXTCREATEPEN; -alias EMREXTCREATEPEN* PEMREXTCREATEPEN; - -struct EMREXTFLOODFILL -{ - EMR emr; - POINTL ptlStart; - COLORREF crColor; - DWORD iMode; -} - -alias EMREXTFLOODFILL TAGEMREXTFLOODFILL; -alias EMREXTFLOODFILL TEMREXTFLOODFILL; -alias EMREXTFLOODFILL* PEMREXTFLOODFILL; - -struct EMREXTSELECTCLIPRGN -{ - EMR emr; - DWORD cbRgnData; - DWORD iMode; - ubyte[1 + 0] RgnData; -} - -alias EMREXTSELECTCLIPRGN TAGEMREXTSELECTCLIPRGN; -alias EMREXTSELECTCLIPRGN TEMREXTSELECTCLIPRGN; -alias EMREXTSELECTCLIPRGN* PEMREXTSELECTCLIPRGN; - -struct EMRTEXT -{ - POINTL ptlReference; - DWORD nChars; - DWORD offString; - DWORD fOptions; - RECTL rcl; - DWORD offDx; -} - -alias EMRTEXT TAGEMRTEXT; -alias EMRTEXT TEMRTEXT; -alias EMRTEXT* PEMRTEXT; - -struct EMREXTTEXTOUTA -{ - EMR emr; - RECTL rclBounds; - DWORD iGraphicsMode; - FLOAT exScale; - FLOAT eyScale; - EMRTEXT emrtext; -} - -alias EMREXTTEXTOUTA TAGEMREXTTEXTOUTA; -alias EMREXTTEXTOUTA TEMREXTTEXTOUTA; -alias EMREXTTEXTOUTA* PEMREXTTEXTOUTA; -alias EMREXTTEXTOUTA EMREXTTEXTOUTW; -alias EMREXTTEXTOUTA TEMREXTTEXTOUTW; -alias EMREXTTEXTOUTA* PEMREXTTEXTOUTW; - -struct EMRFILLPATH -{ - EMR emr; - RECTL rclBounds; -} - -alias EMRFILLPATH TAGEMRFILLPATH; -alias EMRFILLPATH TEMRFILLPATH; -alias EMRFILLPATH* PEMRFILLPATH; -alias EMRFILLPATH EMRSTROKEANDFILLPATH; -alias EMRFILLPATH TEMRSTROKEANDFILLPATH; -alias EMRFILLPATH* PEMRSTROKEANDFILLPATH; -alias EMRFILLPATH EMRSTROKEPATH; -alias EMRFILLPATH TEMRSTROKEPATH; -alias EMRFILLPATH* PEMRSTROKEPATH; - -struct EMRFILLRGN -{ - EMR emr; - RECTL rclBounds; - DWORD cbRgnData; - DWORD ihBrush; - ubyte[1 + 0] RgnData; -} - -alias EMRFILLRGN TAGEMRFILLRGN; -alias EMRFILLRGN TEMRFILLRGN; -alias EMRFILLRGN* PEMRFILLRGN; - -struct EMRFORMAT -{ - DWORD dSignature; - DWORD nVersion; - DWORD cbData; - DWORD offData; -} - -alias EMRFORMAT TAGEMRFORMAT; -alias EMRFORMAT TEMRFORMAT; -alias EMRFORMAT* PEMRFORMAT; - -struct SIZE -{ - LONG cx; - LONG cy; -} - -alias SIZE* LPSIZE; -alias SIZE TAGSIZE; -alias SIZE TSIZE; -alias SIZE* PSIZE; -alias SIZE SIZEL; -alias SIZE TSIZEL; -alias SIZE* PSIZEL; -alias SIZE* LPSIZEL; - -struct EMRFRAMERGN -{ - EMR emr; - RECTL rclBounds; - DWORD cbRgnData; - DWORD ihBrush; - SIZEL szlStroke; - ubyte[1 + 0] RgnData; -} - -alias EMRFRAMERGN TAGEMRFRAMERGN; -alias EMRFRAMERGN TEMRFRAMERGN; -alias EMRFRAMERGN* PEMRFRAMERGN; - -struct EMRGDICOMMENT -{ - EMR emr; - DWORD cbData; - ubyte[1 + 0] Data; -} - -alias EMRGDICOMMENT TAGEMRGDICOMMENT; -alias EMRGDICOMMENT TEMRGDICOMMENT; -alias EMRGDICOMMENT* PEMRGDICOMMENT; - -struct EMRINVERTRGN -{ - EMR emr; - RECTL rclBounds; - DWORD cbRgnData; - ubyte[1 + 0] RgnData; -} - -alias EMRINVERTRGN TAGEMRINVERTRGN; -alias EMRINVERTRGN TEMRINVERTRGN; -alias EMRINVERTRGN* PEMRINVERTRGN; -alias EMRINVERTRGN EMRPAINTRGN; -alias EMRINVERTRGN TEMRPAINTRGN; -alias EMRINVERTRGN* PEMRPAINTRGN; - -struct EMRLINETO -{ - EMR emr; - POINTL ptl; -} - -alias EMRLINETO TAGEMRLINETO; -alias EMRLINETO TEMRLINETO; -alias EMRLINETO* PEMRLINETO; -alias EMRLINETO EMRMOVETOEX; -alias EMRLINETO TEMRMOVETOEX; -alias EMRLINETO* PEMRMOVETOEX; - -struct EMRMASKBLT -{ - EMR emr; - RECTL rclBounds; - LONG xDest; - LONG yDest; - LONG cxDest; - LONG cyDest; - DWORD dwRop; - LONG xSrc; - LONG ySrc; - XFORM xformSrc; - COLORREF crBkColorSrc; - DWORD iUsageSrc; - DWORD offBmiSrc; - DWORD cbBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; - LONG xMask; - LONG yMask; - DWORD iUsageMask; - DWORD offBmiMask; - DWORD cbBmiMask; - DWORD offBitsMask; - DWORD cbBitsMask; -} - -alias EMRMASKBLT TAGEMRMASKBLT; -alias EMRMASKBLT TEMRMASKBLT; -alias EMRMASKBLT* PEMRMASKBLT; - -struct EMRMODIFYWORLDTRANSFORM -{ - EMR emr; - XFORM xform; - DWORD iMode; -} - -alias EMRMODIFYWORLDTRANSFORM TAGEMRMODIFYWORLDTRANSFORM; -alias EMRMODIFYWORLDTRANSFORM TEMRMODIFYWORLDTRANSFORM; -alias EMRMODIFYWORLDTRANSFORM PEMRMODIFYWORLDTRANSFORM; - -struct EMROFFSETCLIPRGN -{ - EMR emr; - POINTL ptlOffset; -} - -alias EMROFFSETCLIPRGN TAGEMROFFSETCLIPRGN; -alias EMROFFSETCLIPRGN TEMROFFSETCLIPRGN; -alias EMROFFSETCLIPRGN* PEMROFFSETCLIPRGN; - -struct EMRPLGBLT -{ - EMR emr; - RECTL rclBounds; - POINTL[1 + 2] aptlDest; - LONG xSrc; - LONG ySrc; - LONG cxSrc; - LONG cySrc; - XFORM xformSrc; - COLORREF crBkColorSrc; - DWORD iUsageSrc; - DWORD offBmiSrc; - DWORD cbBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; - LONG xMask; - LONG yMask; - DWORD iUsageMask; - DWORD offBmiMask; - DWORD cbBmiMask; - DWORD offBitsMask; - DWORD cbBitsMask; -} - -alias EMRPLGBLT TAGEMRPLGBLT; -alias EMRPLGBLT TEMRPLGBLT; -alias EMRPLGBLT* PEMRPLGBLT; - -struct EMRPOLYDRAW -{ - EMR emr; - RECTL rclBounds; - DWORD cptl; - POINTL[1 + 0] aptl; - ubyte[1 + 0] abTypes; -} - -alias EMRPOLYDRAW TAGEMRPOLYDRAW; -alias EMRPOLYDRAW TEMRPOLYDRAW; -alias EMRPOLYDRAW* PEMRPOLYDRAW; - -struct EMRPOLYDRAW16 -{ - EMR emr; - RECTL rclBounds; - DWORD cpts; - POINTS[1 + 0] apts; - ubyte[1 + 0] abTypes; -} - -alias EMRPOLYDRAW16 TAGEMRPOLYDRAW16; -alias EMRPOLYDRAW16 TEMRPOLYDRAW16; -alias EMRPOLYDRAW16* PEMRPOLYDRAW16; - -struct EMRPOLYLINE -{ - EMR emr; - RECTL rclBounds; - DWORD cptl; - POINTL[1 + 0] aptl; -} - -alias EMRPOLYLINE TAGEMRPOLYLINE; -alias EMRPOLYLINE TEMRPOLYLINE; -alias EMRPOLYLINE* PEMRPOLYLINE; -alias EMRPOLYLINE EMRPOLYBEZIER; -alias EMRPOLYLINE TEMRPOLYBEZIER; -alias EMRPOLYLINE* PEMRPOLYBEZIER; -alias EMRPOLYLINE EMRPOLYGON; -alias EMRPOLYLINE TEMRPOLYGON; -alias EMRPOLYLINE* PEMRPOLYGON; -alias EMRPOLYLINE EMRPOLYBEZIERTO; -alias EMRPOLYLINE TEMRPOLYBEZIERTO; -alias EMRPOLYLINE* PEMRPOLYBEZIERTO; -alias EMRPOLYLINE EMRPOLYLINETO; -alias EMRPOLYLINE TEMRPOLYLINETO; -alias EMRPOLYLINE* PEMRPOLYLINETO; - -struct EMRPOLYLINE16 -{ - EMR emr; - RECTL rclBounds; - DWORD cpts; - POINTL[1 + 0] apts; -} - -alias EMRPOLYLINE16 TAGEMRPOLYLINE16; -alias EMRPOLYLINE16 TEMRPOLYLINE16; -alias EMRPOLYLINE16* PEMRPOLYLINE16; -alias EMRPOLYLINE16 EMRPOLYBEZIER16; -alias EMRPOLYLINE16 TEMRPOLYBEZIER16; -alias EMRPOLYLINE16* PEMRPOLYBEZIER16; -alias EMRPOLYLINE16 EMRPOLYGON16; -alias EMRPOLYLINE16 TEMRPOLYGON16; -alias EMRPOLYLINE16* PEMRPOLYGON16; -alias EMRPOLYLINE16 EMRPOLYBEZIERTO16; -alias EMRPOLYLINE16 TEMRPOLYBEZIERTO16; -alias EMRPOLYLINE16* PEMRPOLYBEZIERTO16; -alias EMRPOLYLINE16 EMRPOLYLINETO16; -alias EMRPOLYLINE16 TEMRPOLYLINETO16; -alias EMRPOLYLINE16* PEMRPOLYLINETO16; - -struct EMRPOLYPOLYLINE -{ - EMR emr; - RECTL rclBounds; - DWORD nPolys; - DWORD cptl; - DWORD[1 + 0] aPolyCounts; - POINTL[1 + 0] aptl; -} - -alias EMRPOLYPOLYLINE TAGEMRPOLYPOLYLINE; -alias EMRPOLYPOLYLINE TEMRPOLYPOLYLINE; -alias EMRPOLYPOLYLINE* PEMRPOLYPOLYLINE; -alias EMRPOLYPOLYLINE EMRPOLYPOLYGON; -alias EMRPOLYPOLYLINE TEMRPOLYPOLYGON; -alias EMRPOLYPOLYLINE* PEMRPOLYPOLYGON; - -struct EMRPOLYPOLYLINE16 -{ - EMR emr; - RECTL rclBounds; - DWORD nPolys; - DWORD cpts; - DWORD[1 + 0] aPolyCounts; - POINTS[1 + 0] apts; -} - -alias EMRPOLYPOLYLINE16 TAGEMRPOLYPOLYLINE16; -alias EMRPOLYPOLYLINE16 TEMRPOLYPOLYLINE16; -alias EMRPOLYPOLYLINE16* PEMRPOLYPOLYLINE16; -alias EMRPOLYPOLYLINE16 EMRPOLYPOLYGON16; -alias EMRPOLYPOLYLINE16 TEMRPOLYPOLYGON16; -alias EMRPOLYPOLYLINE16* PEMRPOLYPOLYGON16; - -struct EMRPOLYTEXTOUTA -{ - EMR emr; - RECTL rclBounds; - DWORD iGraphicsMode; - FLOAT exScale; - FLOAT eyScale; - LONG cStrings; - EMRTEXT[1 + 0] aemrtext; -} - -alias EMRPOLYTEXTOUTA TAGEMRPOLYTEXTOUTA; -alias EMRPOLYTEXTOUTA TEMRPOLYTEXTOUTA; -alias EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTA; -alias EMRPOLYTEXTOUTA EMRPOLYTEXTOUTW; -alias EMRPOLYTEXTOUTA TEMRPOLYTEXTOUTW; -alias EMRPOLYTEXTOUTA* PEMRPOLYTEXTOUTW; - -struct EMRRESIZEPALETTE -{ - EMR emr; - DWORD ihPal; - DWORD cEntries; -} - -alias EMRRESIZEPALETTE TAGEMRRESIZEPALETTE; -alias EMRRESIZEPALETTE TEMRRESIZEPALETTE; -alias EMRRESIZEPALETTE* PEMRRESIZEPALETTE; - -struct EMRRESTOREDC -{ - EMR emr; - LONG iRelative; -} - -alias EMRRESTOREDC TAGEMRRESTOREDC; -alias EMRRESTOREDC TEMRRESTOREDC; -alias EMRRESTOREDC* PEMRRESTOREDC; - -struct EMRROUNDRECT -{ - EMR emr; - RECTL rclBox; - SIZEL szlCorner; -} - -alias EMRROUNDRECT TAGEMRROUNDRECT; -alias EMRROUNDRECT TEMRROUNDRECT; -alias EMRROUNDRECT* PEMRROUNDRECT; - -struct EMRSCALEVIEWPORTEXTEX -{ - EMR emr; - LONG xNum; - LONG xDenom; - LONG yNum; - LONG yDenom; -} - -alias EMRSCALEVIEWPORTEXTEX TAGEMRSCALEVIEWPORTEXTEX; -alias EMRSCALEVIEWPORTEXTEX TEMRSCALEVIEWPORTEXTEX; -alias EMRSCALEVIEWPORTEXTEX* PEMRSCALEVIEWPORTEXTEX; -alias EMRSCALEVIEWPORTEXTEX EMRSCALEWINDOWEXTEX; -alias EMRSCALEVIEWPORTEXTEX TEMRSCALEWINDOWEXTEX; -alias EMRSCALEVIEWPORTEXTEX* PEMRSCALEWINDOWEXTEX; - -struct EMRSELECTCOLORSPACE -{ - EMR emr; - DWORD ihCS; -} - -alias EMRSELECTCOLORSPACE TAGEMRSELECTCOLORSPACE; -alias EMRSELECTCOLORSPACE TEMRSELECTCOLORSPACE; -alias EMRSELECTCOLORSPACE* PEMRSELECTCOLORSPACE; -alias EMRSELECTCOLORSPACE EMRDELETECOLORSPACE; -alias EMRSELECTCOLORSPACE TEMRDELETECOLORSPACE; -alias EMRSELECTCOLORSPACE* PEMRDELETECOLORSPACE; - -struct EMRSELECTOBJECT -{ - EMR emr; - DWORD ihObject; -} - -alias EMRSELECTOBJECT TAGEMRSELECTOBJECT; -alias EMRSELECTOBJECT TEMRSELECTOBJECT; -alias EMRSELECTOBJECT* PEMRSELECTOBJECT; -alias EMRSELECTOBJECT EMRDELETEOBJECT; -alias EMRSELECTOBJECT TEMRDELETEOBJECT; -alias EMRSELECTOBJECT* PEMRDELETEOBJECT; - -struct EMRSELECTPALETTE -{ - EMR emr; - DWORD ihPal; -} - -alias EMRSELECTPALETTE TAGEMRSELECTPALETTE; -alias EMRSELECTPALETTE TEMRSELECTPALETTE; -alias EMRSELECTPALETTE* PEMRSELECTPALETTE; - -struct EMRSETARCDIRECTION -{ - EMR emr; - DWORD iArcDirection; -} - -alias EMRSETARCDIRECTION TAGEMRSETARCDIRECTION; -alias EMRSETARCDIRECTION TEMRSETARCDIRECTION; -alias EMRSETARCDIRECTION* PEMRSETARCDIRECTION; - -struct EMRSETBKCOLOR -{ - EMR emr; - COLORREF crColor; -} - -alias EMRSETBKCOLOR TAGEMRSETTEXTCOLOR; -alias EMRSETBKCOLOR TEMRSETBKCOLOR; -alias EMRSETBKCOLOR* PEMRSETBKCOLOR; -alias EMRSETBKCOLOR EMRSETTEXTCOLOR; -alias EMRSETBKCOLOR TEMRSETTEXTCOLOR; -alias EMRSETBKCOLOR* PEMRSETTEXTCOLOR; - -struct EMRSETCOLORADJUSTMENT -{ - EMR emr; - COLORADJUSTMENT ColorAdjustment; -} - -alias EMRSETCOLORADJUSTMENT TAGEMRSETCOLORADJUSTMENT; -alias EMRSETCOLORADJUSTMENT TEMRSETCOLORADJUSTMENT; -alias EMRSETCOLORADJUSTMENT* PEMRSETCOLORADJUSTMENT; - -struct EMRSETDIBITSTODEVICE -{ - EMR emr; - RECTL rclBounds; - LONG xDest; - LONG yDest; - LONG xSrc; - LONG ySrc; - LONG cxSrc; - LONG cySrc; - DWORD offBmiSrc; - DWORD cbBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; - DWORD iUsageSrc; - DWORD iStartScan; - DWORD cScans; -} - -alias EMRSETDIBITSTODEVICE TAGEMRSETDIBITSTODEVICE; -alias EMRSETDIBITSTODEVICE TEMRSETDIBITSTODEVICE; -alias EMRSETDIBITSTODEVICE* PEMRSETDIBITSTODEVICE; - -struct EMRSETMAPPERFLAGS -{ - EMR emr; - DWORD dwFlags; -} - -alias EMRSETMAPPERFLAGS TAGEMRSETMAPPERFLAGS; -alias EMRSETMAPPERFLAGS TEMRSETMAPPERFLAGS; -alias EMRSETMAPPERFLAGS* PEMRSETMAPPERFLAGS; - -struct EMRSETMITERLIMIT -{ - EMR emr; - FLOAT eMiterLimit; -} - -alias EMRSETMITERLIMIT TAGEMRSETMITERLIMIT; -alias EMRSETMITERLIMIT TEMRSETMITERLIMIT; -alias EMRSETMITERLIMIT* PEMRSETMITERLIMIT; - -struct EMRSETPALETTEENTRIES -{ - EMR emr; - DWORD ihPal; - DWORD iStart; - DWORD cEntries; - PALETTEENTRY[1 + 0] aPalEntries; -} - -alias EMRSETPALETTEENTRIES TAGEMRSETPALETTEENTRIES; -alias EMRSETPALETTEENTRIES TEMRSETPALETTEENTRIES; -alias EMRSETPALETTEENTRIES* PEMRSETPALETTEENTRIES; - -struct EMRSETPIXELV -{ - EMR emr; - POINTL ptlPixel; - COLORREF crColor; -} - -alias EMRSETPIXELV TAGEMRSETPIXELV; -alias EMRSETPIXELV TEMRSETPIXELV; -alias EMRSETPIXELV* PEMRSETPIXELV; - -struct EMRSETVIEWPORTEXTEX -{ - EMR emr; - SIZEL szlExtent; -} - -alias EMRSETVIEWPORTEXTEX TAGEMRSETVIEWPORTEXTEX; -alias EMRSETVIEWPORTEXTEX TEMRSETVIEWPORTEXTEX; -alias EMRSETVIEWPORTEXTEX* PEMRSETVIEWPORTEXTEX; -alias EMRSETVIEWPORTEXTEX EMRSETWINDOWEXTEX; -alias EMRSETVIEWPORTEXTEX TEMRSETWINDOWEXTEX; -alias EMRSETVIEWPORTEXTEX* PEMRSETWINDOWEXTEX; - -struct EMRSETVIEWPORTORGEX -{ - EMR emr; - POINTL ptlOrigin; -} - -alias EMRSETVIEWPORTORGEX TAGEMRSETVIEWPORTORGEX; -alias EMRSETVIEWPORTORGEX TEMRSETVIEWPORTORGEX; -alias EMRSETVIEWPORTORGEX* PEMRSETVIEWPORTORGEX; -alias EMRSETVIEWPORTORGEX EMRSETWINDOWORGEX; -alias EMRSETVIEWPORTORGEX TEMRSETWINDOWORGEX; -alias EMRSETVIEWPORTORGEX* PEMRSETWINDOWORGEX; -alias EMRSETVIEWPORTORGEX EMRSETBRUSHORGEX; -alias EMRSETVIEWPORTORGEX TEMRSETBRUSHORGEX; -alias EMRSETVIEWPORTORGEX* PEMRSETBRUSHORGEX; - -struct EMRSETWORLDTRANSFORM -{ - EMR emr; - XFORM xform; -} - -alias EMRSETWORLDTRANSFORM TAGEMRSETWORLDTRANSFORM; -alias EMRSETWORLDTRANSFORM TEMRSETWORLDTRANSFORM; -alias EMRSETWORLDTRANSFORM* PEMRSETWORLDTRANSFORM; - -struct EMRSTRETCHBLT -{ - EMR emr; - RECTL rclBounds; - LONG xDest; - LONG yDest; - LONG cxDest; - LONG cyDest; - DWORD dwRop; - LONG xSrc; - LONG ySrc; - XFORM xformSrc; - COLORREF crBkColorSrc; - DWORD iUsageSrc; - DWORD offBmiSrc; - DWORD cbBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; - LONG cxSrc; - LONG cySrc; -} - -alias EMRSTRETCHBLT TAGEMRSTRETCHBLT; -alias EMRSTRETCHBLT TEMRSTRETCHBLT; -alias EMRSTRETCHBLT* PEMRSTRETCHBLT; - -struct EMRSTRETCHDIBITS -{ - EMR emr; - RECTL rclBounds; - LONG xDest; - LONG yDest; - LONG xSrc; - LONG ySrc; - LONG cxSrc; - LONG cySrc; - DWORD offBmiSrc; - DWORD cbBmiSrc; - DWORD offBitsSrc; - DWORD cbBitsSrc; - DWORD iUsageSrc; - DWORD dwRop; - LONG cxDest; - LONG cyDest; -} - -alias EMRSTRETCHDIBITS TAGEMRSTRETCHDIBITS; -alias EMRSTRETCHDIBITS TEMRSTRETCHDIBITS; -alias EMRSTRETCHDIBITS* PEMRSTRETCHDIBITS; - -struct EMRABORTPATH -{ - EMR emr; -} - -alias EMRABORTPATH TEMRABORTPATH; -alias EMRABORTPATH* PEMRABORTPATH; -alias EMRABORTPATH TAGABORTPATH; -alias EMRABORTPATH TABORTPATH; -alias EMRABORTPATH EMRBEGINPATH; -alias EMRABORTPATH TEMRBEGINPATH; -alias EMRABORTPATH* PEMRBEGINPATH; -alias EMRABORTPATH EMRENDPATH; -alias EMRABORTPATH TEMRENDPATH; -alias EMRABORTPATH* PEMRENDPATH; -alias EMRABORTPATH EMRCLOSEFIGURE; -alias EMRABORTPATH TEMRCLOSEFIGURE; -alias EMRABORTPATH* PEMRCLOSEFIGURE; -alias EMRABORTPATH EMRFLATTENPATH; -alias EMRABORTPATH TEMRFLATTENPATH; -alias EMRABORTPATH* PEMRFLATTENPATH; -alias EMRABORTPATH EMRWIDENPATH; -alias EMRABORTPATH TEMRWIDENPATH; -alias EMRABORTPATH* PEMRWIDENPATH; -alias EMRABORTPATH EMRSETMETARGN; -alias EMRABORTPATH TEMRSETMETARGN; -alias EMRABORTPATH* PEMRSETMETARGN; -alias EMRABORTPATH EMRSAVEDC; -alias EMRABORTPATH TEMRSAVEDC; -alias EMRABORTPATH* PEMRSAVEDC; -alias EMRABORTPATH EMRREALIZEPALETTE; -alias EMRABORTPATH TEMRREALIZEPALETTE; -alias EMRABORTPATH* PEMRREALIZEPALETTE; - -struct EMRSELECTCLIPPATH -{ - EMR emr; - DWORD iMode; -} - -alias EMRSELECTCLIPPATH TAGEMRSELECTCLIPPATH; -alias EMRSELECTCLIPPATH TEMRSELECTCLIPPATH; -alias EMRSELECTCLIPPATH* PEMRSELECTCLIPPATH; -alias EMRSELECTCLIPPATH EMRSETBKMODE; -alias EMRSELECTCLIPPATH TEMRSETBKMODE; -alias EMRSELECTCLIPPATH* PEMRSETBKMODE; -alias EMRSELECTCLIPPATH EMRSETMAPMODE; -alias EMRSELECTCLIPPATH TEMRSETMAPMODE; -alias EMRSELECTCLIPPATH* PEMRSETMAPMODE; -alias EMRSELECTCLIPPATH EMRSETPOLYFILLMODE; -alias EMRSELECTCLIPPATH TEMRSETPOLYFILLMODE; -alias EMRSELECTCLIPPATH* PEMRSETPOLYFILLMODE; -alias EMRSELECTCLIPPATH EMRSETROP2; -alias EMRSELECTCLIPPATH TEMRSETROP2; -alias EMRSELECTCLIPPATH* PEMRSETROP2; -alias EMRSELECTCLIPPATH EMRSETSTRETCHBLTMODE; -alias EMRSELECTCLIPPATH TEMRSETSTRETCHBLTMODE; -alias EMRSELECTCLIPPATH* PEMRSETSTRETCHBLTMODE; -alias EMRSELECTCLIPPATH EMRSETTEXTALIGN; -alias EMRSELECTCLIPPATH TEMRSETTEXTALIGN; -alias EMRSELECTCLIPPATH* PEMRSETTEXTALIGN; -alias EMRSELECTCLIPPATH EMRENABLEICM; -alias EMRSELECTCLIPPATH TEMRENABLEICM; -alias EMRSELECTCLIPPATH* PEMRENABLEICM; - -struct NMHDR -{ - HWND hwndFrom; - UINT idFrom; - UINT code; -} - -alias NMHDR TAGNMHDR; -alias NMHDR TNMHDR; -alias NMHDR* PNMHDR; - -struct ENCORRECTTEXT -{ - NMHDR nmhdr; - CHARRANGE chrg; - ushort seltyp; -} - -alias ENCORRECTTEXT _ENCORRECTTEXT; -alias ENCORRECTTEXT TENCORRECTTEXT; -alias ENCORRECTTEXT* PENCORRECTTEXT; - -struct ENDROPFILES -{ - NMHDR nmhdr; - HANDLE hDrop; - LONG cp; - WINBOOL fProtected; -} - -alias ENDROPFILES _ENDROPFILES; -alias ENDROPFILES TENDROPFILES; -alias ENDROPFILES* PENDROPFILES; - -struct ENSAVECLIPBOARD -{ - NMHDR nmhdr; - LONG cObjectCount; - LONG cch; -} - -alias ENSAVECLIPBOARD TENSAVECLIPBOARD; -alias ENSAVECLIPBOARD* PENSAVECLIPBOARD; - -struct ENOLEOPFAILED -{ - NMHDR nmhdr; - LONG iob; - LONG lOper; - HRESULT hr; -} - -alias ENOLEOPFAILED TENOLEOPFAILED; -alias ENOLEOPFAILED* PENOLEOPFAILED; - -struct ENHMETAHEADER -{ - DWORD iType; - DWORD nSize; - RECTL rclBounds; - RECTL rclFrame; - DWORD dSignature; - DWORD nVersion; - DWORD nBytes; - DWORD nRecords; - ushort nHandles; - ushort sReserved; - DWORD nDescription; - DWORD offDescription; - DWORD nPalEntries; - SIZEL szlDevice; - SIZEL szlMillimeters; -} - -alias ENHMETAHEADER* LPENHMETAHEADER; -alias ENHMETAHEADER TAGENHMETAHEADER; -alias ENHMETAHEADER TENHMETAHEADER; -alias ENHMETAHEADER* PENHMETAHEADER; - -struct ENHMETARECORD -{ - DWORD iType; - DWORD nSize; - DWORD[1 + 0] dParm; -} - -alias ENHMETARECORD* LPENHMETARECORD; -alias ENHMETARECORD TAGENHMETARECORD; -alias ENHMETARECORD TENHMETARECORD; -alias ENHMETARECORD* PENHMETARECORD; - -struct ENPROTECTED -{ - NMHDR nmhdr; - UINT msg; - WPARAM wParam; - LPARAM lParam; - CHARRANGE chrg; -} - -alias ENPROTECTED _ENPROTECTED; -alias ENPROTECTED TENPROTECTED; -alias ENPROTECTED* PENPROTECTED; - -struct SERVICE_STATUS -{ - DWORD dwServiceType; - DWORD dwCurrentState; - DWORD dwControlsAccepted; - DWORD dwWin32ExitCode; - DWORD dwServiceSpecificExitCode; - DWORD dwCheckPoint; - DWORD dwWaitHint; -} - -alias SERVICE_STATUS* LPSERVICE_STATUS; -alias SERVICE_STATUS _SERVICE_STATUS; -alias SERVICE_STATUS TSERVICESTATUS; -alias SERVICE_STATUS* PSERVICESTATUS; - -struct ENUM_SERVICE_STATUS -{ - LPTSTR lpServiceName; - LPTSTR lpDisplayName; - SERVICE_STATUS ServiceStatus; -} - -alias ENUM_SERVICE_STATUS* LPENUM_SERVICE_STATUS; -alias ENUM_SERVICE_STATUS _ENUM_SERVICE_STATUS; -alias ENUM_SERVICE_STATUS TENUMSERVICESTATUS; -alias ENUM_SERVICE_STATUS* PENUMSERVICESTATUS; - -struct ENUMLOGFONT -{ - LOGFONT elfLogFont; - BCHAR[1 + LF_FULLFACESIZE-1] elfFullName; - BCHAR[1 + LF_FACESIZE-1] elfStyle; -} - -alias ENUMLOGFONT TAGENUMLOGFONT; -alias ENUMLOGFONT TENUMLOGFONT; -alias ENUMLOGFONT* PENUMLOGFONT; - -struct ENUMLOGFONTEX -{ - LOGFONT elfLogFont; - BCHAR[1 + LF_FULLFACESIZE-1] elfFullName; - BCHAR[1 + LF_FACESIZE-1] elfStyle; - BCHAR[1 + LF_FACESIZE-1] elfScript; -} - -alias ENUMLOGFONTEX TAGENUMLOGFONTEX; -alias ENUMLOGFONTEX TENUMLOGFONTEX; -alias ENUMLOGFONTEX* PENUMLOGFONTEX; - -struct EVENTLOGRECORD -{ - DWORD Length; - DWORD Reserved; - DWORD RecordNumber; - DWORD TimeGenerated; - DWORD TimeWritten; - DWORD EventID; - ushort EventType; - ushort NumStrings; - ushort EventCategory; - ushort ReservedFlags; - DWORD ClosingRecordNumber; - DWORD StringOffset; - DWORD UserSidLength; - DWORD UserSidOffset; - DWORD DataLength; - DWORD DataOffset; -} - -alias EVENTLOGRECORD _EVENTLOGRECORD; -alias EVENTLOGRECORD TEVENTLOGRECORD; -alias EVENTLOGRECORD* PEVENTLOGRECORD; - -struct EVENTMSG -{ - UINT message; - UINT paramL; - UINT paramH; - DWORD time; - HWND hwnd; -} - -alias EVENTMSG TAGEVENTMSG; -alias EVENTMSG TEVENTMSG; -alias EVENTMSG* PEVENTMSG; - -struct EXCEPTION_POINTERS -{ - PEXCEPTION_RECORD ExceptionRecord; - PCONTEXT ContextRecord; -} - -alias EXCEPTION_POINTERS* LPEXCEPTION_POINTERS; -alias EXCEPTION_POINTERS* PEXCEPTION_POINTERS; -alias EXCEPTION_POINTERS _EXCEPTION_POINTERS; -alias EXCEPTION_POINTERS TEXCEPTIONPOINTERS; -alias EXCEPTION_POINTERS* PEXCEPTIONPOINTERS; - -struct EXT_BUTTON -{ - ushort idCommand; - ushort idsHelp; - ushort fsStyle; -} - -alias EXT_BUTTON* LPEXT_BUTTON; -alias EXT_BUTTON _EXT_BUTTON; -alias EXT_BUTTON TEXTBUTTON; -alias EXT_BUTTON* PEXTBUTTON; - -struct FILTERKEYS -{ - UINT cbSize; - DWORD dwFlags; - DWORD iWaitMSec; - DWORD iDelayMSec; - DWORD iRepeatMSec; - DWORD iBounceMSec; -} - -alias FILTERKEYS TAGFILTERKEYS; -alias FILTERKEYS TFILTERKEYS; -alias FILTERKEYS* PFILTERKEYS; - -struct FIND_NAME_BUFFER -{ - UCHAR length; - UCHAR access_control; - UCHAR frame_control; - UCHAR[1 + 5] destination_addr; - UCHAR[1 + 5] source_addr; - UCHAR[1 + 17] routing_info; -} - -alias FIND_NAME_BUFFER _FIND_NAME_BUFFER; -alias FIND_NAME_BUFFER TFINDNAMEBUFFER; -alias FIND_NAME_BUFFER* PFINDNAMEBUFFER; - -struct FIND_NAME_HEADER -{ - ushort node_count; - UCHAR reserved; - UCHAR unique_group; -} - -alias FIND_NAME_HEADER _FIND_NAME_HEADER; -alias FIND_NAME_HEADER TFINDNAMEHEADER; -alias FIND_NAME_HEADER* PFINDNAMEHEADER; - -struct FINDREPLACE -{ - DWORD lStructSize; - HWND hwndOwner; - HINST hInstance; - DWORD Flags; - LPTSTR lpstrFindWhat; - LPTSTR lpstrReplaceWith; - ushort wFindWhatLen; - ushort wReplaceWithLen; - LPARAM lCustData; - LPFRHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} - -alias FINDREPLACE* LPFINDREPLACE; -alias FINDREPLACE TFINDREPLACE; -alias FINDREPLACE* PFINDREPLACE; - -struct TFINDTEXT -{ - CHARRANGE chrg; - LPSTR lpstrText; -} - -alias TFINDTEXT _FINDTEXT; -alias TFINDTEXT* PFINDTEXT; - -struct FINDTEXTEX -{ - CHARRANGE chrg; - LPSTR lpstrText; - CHARRANGE chrgText; -} - -alias FINDTEXTEX _FINDTEXTEX; -alias FINDTEXTEX TFINDTEXTEX; -alias FINDTEXTEX* PFINDTEXTEX; - -struct FMS_GETDRIVEINFO -{ - DWORD dwTotalSpace; - DWORD dwFreeSpace; - TCHAR[1 + 259] szPath; - TCHAR[1 + 13] szVolume; - TCHAR[1 + 127] szShare; -} - -alias FMS_GETDRIVEINFO _FMS_GETDRIVEINFO; -alias FMS_GETDRIVEINFO TFMSGETDRIVEINFO; -alias FMS_GETDRIVEINFO* PFMSGETDRIVEINFO; - -struct FMS_GETFILESEL -{ - FILETIME ftTime; - DWORD dwSize; - ubyte bAttr; - TCHAR[1 + 259] szName; -} - -alias FMS_GETFILESEL _FMS_GETFILESEL; -alias FMS_GETFILESEL TFMSGETFILESEL; -alias FMS_GETFILESEL* PFMSGETFILESEL; - -struct FMS_LOAD -{ - DWORD dwSize; - TCHAR[1 + MENU_TEXT_LEN-1] szMenuName; - HMENU hMenu; - UINT wMenuDelta; -} - -alias FMS_LOAD _FMS_LOAD; -alias FMS_LOAD TFMSLOAD; -alias FMS_LOAD* PFMSLOAD; - -struct FMS_TOOLBARLOAD -{ - DWORD dwSize; - LPEXT_BUTTON lpButtons; - ushort cButtons; - ushort cBitmaps; - ushort idBitmap; - HBITMAP hBitmap; -} - -alias FMS_TOOLBARLOAD _FMS_TOOLBARLOAD; -alias FMS_TOOLBARLOAD TFMSTOOLBARLOAD; -alias FMS_TOOLBARLOAD* PFMSTOOLBARLOAD; - -struct FOCUS_EVENT_RECORD -{ - WINBOOL bSetFocus; -} - -alias FOCUS_EVENT_RECORD _FOCUS_EVENT_RECORD; -alias FOCUS_EVENT_RECORD TFOCUSEVENTRECORD; -alias FOCUS_EVENT_RECORD* PFOCUSEVENTRECORD; - -struct FORM_INFO_1 -{ - DWORD Flags; - LPTSTR pName; - SIZEL Size; - RECTL ImageableArea; -} - -alias FORM_INFO_1 _FORM_INFO_1; -alias FORM_INFO_1 TFORMINFO1; -alias FORM_INFO_1* PFORMINFO1; - -struct FORMAT_PARAMETERS -{ - MEDIA_TYPE MediaType; - DWORD StartCylinderNumber; - DWORD EndCylinderNumber; - DWORD StartHeadNumber; - DWORD EndHeadNumber; -} - -alias FORMAT_PARAMETERS _FORMAT_PARAMETERS; -alias FORMAT_PARAMETERS TFORMATPARAMETERS; -alias FORMAT_PARAMETERS* PFORMATPARAMETERS; - -struct FORMATRANGE -{ - HDC _hdc; - HDC hdcTarget; - RECT rc; - RECT rcPage; - CHARRANGE chrg; -} - -alias FORMATRANGE _FORMATRANGE; -alias FORMATRANGE TFORMATRANGE; -alias FORMATRANGE* PFORMATRANGE; - -struct GCP_RESULTS -{ - DWORD lStructSize; - LPTSTR lpOutString; - UINT* lpOrder; - INT* lpDx; - INT* lpCaretPos; - LPTSTR lpClass; - UINT* lpGlyphs; - UINT nGlyphs; - UINT nMaxFit; -} - -alias GCP_RESULTS* LPGCP_RESULTS; -alias GCP_RESULTS TAGGCP_RESULTS; -alias GCP_RESULTS TGCPRESULTS; -alias GCP_RESULTS* PGCPRESULTS; - -struct GENERIC_MAPPING -{ - ACCESS_MASK GenericRead; - ACCESS_MASK GenericWrite; - ACCESS_MASK GenericExecute; - ACCESS_MASK GenericAll; -} - -alias GENERIC_MAPPING* PGENERIC_MAPPING; -alias GENERIC_MAPPING _GENERIC_MAPPING; -alias GENERIC_MAPPING TGENERICMAPPING; -alias GENERIC_MAPPING* PGENERICMAPPING; - -struct GLYPHMETRICS -{ - UINT gmBlackBoxX; - UINT gmBlackBoxY; - POINT gmptGlyphOrigin; - int gmCellIncX; - int gmCellIncY; -} - -alias GLYPHMETRICS* LPGLYPHMETRICS; -alias GLYPHMETRICS _GLYPHMETRICS; -alias GLYPHMETRICS TGLYPHMETRICS; -alias GLYPHMETRICS* PGLYPHMETRICS; - -struct HANDLETABLE -{ - HGDIOBJ[1 + 0] objectHandle; -} - -alias HANDLETABLE TAGHANDLETABLE; -alias HANDLETABLE THANDLETABLE; -alias HANDLETABLE* LPHANDLETABLE; - -struct HD_HITTESTINFO -{ - POINT pt; - UINT flags; - int iItem; -} - -alias HD_HITTESTINFO _HD_HITTESTINFO; -alias HD_HITTESTINFO THDHITTESTINFO; -alias HD_HITTESTINFO* PHDHITTESTINFO; - -struct HD_ITEM -{ - UINT mask; - int cxy; - LPTSTR pszText; - HBITMAP hbm; - int cchTextMax; - int fmt; - LPARAM lParam; -} - -alias HD_ITEM _HD_ITEM; -alias HD_ITEM THDITEM; -alias HD_ITEM* PHDITEM; - -struct WINDOWPOS -{ - HWND _hwnd; - HWND hwndInsertAfter; - int x; - int y; - int cx; - int cy; - UINT flags; -} - -alias WINDOWPOS* LPWINDOWPOS; -alias WINDOWPOS _WINDOWPOS; -alias WINDOWPOS TWINDOWPOS; -alias WINDOWPOS* PWINDOWPOS; - -struct HD_LAYOUT -{ - RECT* prc; - WINDOWPOS* pwpos; -} - -alias HD_LAYOUT _HD_LAYOUT; -alias HD_LAYOUT THDLAYOUT; -alias HD_LAYOUT* PHDLAYOUT; - -struct HD_NOTIFY -{ - NMHDR hdr; - int iItem; - int iButton; - HD_ITEM* pitem; -} - -alias HD_NOTIFY _HD_NOTIFY; -alias HD_NOTIFY THDNOTIFY; -alias HD_NOTIFY* PHDNOTIFY; - -struct HELPINFO -{ - UINT cbSize; - int iContextType; - int iCtrlId; - HANDLE hItemHandle; - DWORD dwContextId; - POINT MousePos; -} - -alias HELPINFO* LPHELPINFO; -alias HELPINFO TAGHELPINFO; -alias HELPINFO THELPINFO; -alias HELPINFO* PHELPINFO; - -struct HELPWININFO -{ - int wStructSize; - int x; - int y; - int dx; - int dy; - int wMax; - TCHAR[1 + 1] rgchMember; -} - -alias HELPWININFO THELPWININFO; -alias HELPWININFO* PHELPWININFO; - -struct HIGHCONTRAST -{ - UINT cbSize; - DWORD dwFlags; - LPTSTR lpszDefaultScheme; -} - -alias HIGHCONTRAST* LPHIGHCONTRAST; -alias HIGHCONTRAST TAGHIGHCONTRAST; -alias HIGHCONTRAST THIGHCONTRAST; -alias HIGHCONTRAST* PHIGHCONTRAST; - -struct HSZPAIR -{ - HSZ hszSvc; - HSZ hszTopic; -} - -alias HSZPAIR TAGHSZPAIR; -alias HSZPAIR THSZPAIR; -alias HSZPAIR* PHSZPAIR; - -struct ICONINFO -{ - WINBOOL fIcon; - DWORD xHotspot; - DWORD yHotspot; - HBITMAP hbmMask; - HBITMAP hbmColor; -} - -alias ICONINFO _ICONINFO; -alias ICONINFO TICONINFO; -alias ICONINFO* PICONINFO; - -struct ICONMETRICS -{ - UINT cbSize; - int iHorzSpacing; - int iVertSpacing; - int iTitleWrap; - LOGFONT lfFont; -} - -alias ICONMETRICS* LPICONMETRICS; -alias ICONMETRICS TAGICONMETRICS; -alias ICONMETRICS TICONMETRICS; -alias ICONMETRICS* PICONMETRICS; - -struct IMAGEINFO -{ - HBITMAP hbmImage; - HBITMAP hbmMask; - int Unused1; - int Unused2; - RECT rcImage; -} - -alias IMAGEINFO _IMAGEINFO; -alias IMAGEINFO TIMAGEINFO; -alias IMAGEINFO* PIMAGEINFO; - -align(1) struct KEY_EVENT_RECORD -{ - WINBOOL bKeyDown; - ushort wRepeatCount; - ushort wVirtualKeyCode; - ushort wVirtualScanCode; - - union - { - struct - { - WCHAR UnicodeChar; - DWORD dwControlKeyState; - } - struct - { - char AsciiChar; - } - } -} - -alias KEY_EVENT_RECORD _KEY_EVENT_RECORD; -alias KEY_EVENT_RECORD TKEYEVENTRECORD; -alias KEY_EVENT_RECORD* PKEYEVENTRECORD; - -struct MOUSE_EVENT_RECORD -{ - COORD dwMousePosition; - DWORD dwButtonState; - DWORD dwControlKeyState; - DWORD dwEventFlags; -} - -alias MOUSE_EVENT_RECORD _MOUSE_EVENT_RECORD; -alias MOUSE_EVENT_RECORD TMOUSEEVENTRECORD; -alias MOUSE_EVENT_RECORD* PMOUSEEVENTRECORD; - -struct WINDOW_BUFFER_SIZE_RECORD -{ - COORD dwSize; -} - -alias WINDOW_BUFFER_SIZE_RECORD _WINDOW_BUFFER_SIZE_RECORD; -alias WINDOW_BUFFER_SIZE_RECORD TWINDOWBUFFERSIZERECORD; -alias WINDOW_BUFFER_SIZE_RECORD* PWINDOWBUFFERSIZERECORD; - -struct MENU_EVENT_RECORD -{ - UINT dwCommandId; -} - -alias MENU_EVENT_RECORD* PMENU_EVENT_RECORD; -alias MENU_EVENT_RECORD _MENU_EVENT_RECORD; -alias MENU_EVENT_RECORD TMENUEVENTRECORD; -alias MENU_EVENT_RECORD* PMENUEVENTRECORD; - -struct INPUT_RECORD -{ - ushort EventType; - - union - { - struct - { - KEY_EVENT_RECORD KeyEvent; - } - struct - { - MOUSE_EVENT_RECORD MouseEvent; - } - struct - { - WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent; - } - struct - { - MENU_EVENT_RECORD MenuEvent; - } - struct - { - FOCUS_EVENT_RECORD FocusEvent; - } - } -} - -alias INPUT_RECORD* PINPUT_RECORD; -alias INPUT_RECORD _INPUT_RECORD; -alias INPUT_RECORD TINPUTRECORD; -alias INPUT_RECORD* PINPUTRECORD; - -struct SYSTEMTIME -{ - ushort wYear; - ushort wMonth; - ushort wDayOfWeek; - ushort wDay; - ushort wHour; - ushort wMinute; - ushort wSecond; - ushort wMilliseconds; -} - -alias SYSTEMTIME* LPSYSTEMTIME; -alias SYSTEMTIME _SYSTEMTIME; -alias SYSTEMTIME TSYSTEMTIME; -alias SYSTEMTIME* PSYSTEMTIME; - -struct JOB_INFO_1 -{ - DWORD JobId; - LPTSTR pPrinterName; - LPTSTR pMachineName; - LPTSTR pUserName; - LPTSTR pDocument; - LPTSTR pDatatype; - LPTSTR pStatus; - DWORD Status; - DWORD Priority; - DWORD Position; - DWORD TotalPages; - DWORD PagesPrinted; - SYSTEMTIME Submitted; -} - -alias JOB_INFO_1 _JOB_INFO_1; -alias JOB_INFO_1 TJOBINFO1; -alias JOB_INFO_1* PJOBINFO1; - -struct SID_IDENTIFIER_AUTHORITY -{ - ubyte[1 + 5] Value; -} - -alias SID_IDENTIFIER_AUTHORITY* LPSID_IDENTIFIER_AUTHORITY; -alias SID_IDENTIFIER_AUTHORITY* PSID_IDENTIFIER_AUTHORITY; -alias SID_IDENTIFIER_AUTHORITY _SID_IDENTIFIER_AUTHORITY; -alias SID_IDENTIFIER_AUTHORITY TSIDIDENTIFIERAUTHORITY; -alias SID_IDENTIFIER_AUTHORITY* PSIDIDENTIFIERAUTHORITY; - -struct SID -{ - ubyte Revision; - ubyte SubAuthorityCount; - SID_IDENTIFIER_AUTHORITY IdentifierAuthority; - DWORD[1 + ANYSIZE_ARRAY-1] SubAuthority; -} - -alias SID _SID; -alias SID TSID; -alias SID* PSID; -alias ushort SECURITY_DESCRIPTOR_CONTROL; -alias SECURITY_DESCRIPTOR_CONTROL* PSECURITY_DESCRIPTOR_CONTROL; -alias SECURITY_DESCRIPTOR_CONTROL TSECURITYDESCRIPTORCONTROL; -alias SECURITY_DESCRIPTOR_CONTROL* PSECURITYDESCRIPTORCONTROL; - -struct SECURITY_DESCRIPTOR -{ - ubyte Revision; - ubyte Sbz1; - SECURITY_DESCRIPTOR_CONTROL Control; - PSID Owner; - PSID Group; - PACL Sacl; - PACL Dacl; -} - -alias SECURITY_DESCRIPTOR* PSECURITY_DESCRIPTOR; -alias SECURITY_DESCRIPTOR _SECURITY_DESCRIPTOR; -alias SECURITY_DESCRIPTOR TSECURITYDESCRIPTOR; -alias SECURITY_DESCRIPTOR* PSECURITYDESCRIPTOR; - -struct JOB_INFO_2 -{ - DWORD JobId; - LPTSTR pPrinterName; - LPTSTR pMachineName; - LPTSTR pUserName; - LPTSTR pDocument; - LPTSTR pNotifyName; - LPTSTR pDatatype; - LPTSTR pPrintProcessor; - LPTSTR pParameters; - LPTSTR pDriverName; - LPDEVMODE pDevMode; - LPTSTR pStatus; - PSECURITY_DESCRIPTOR pSecurityDescriptor; - DWORD Status; - DWORD Priority; - DWORD Position; - DWORD StartTime; - DWORD UntilTime; - DWORD TotalPages; - DWORD Size; - SYSTEMTIME Submitted; - DWORD Time; - DWORD PagesPrinted; -} - -alias JOB_INFO_2 _JOB_INFO_2; -alias JOB_INFO_2 TJOBINFO2; -alias JOB_INFO_2* PJOBINFO2; - -struct KERNINGPAIR -{ - ushort wFirst; - ushort wSecond; - int iKernAmount; -} - -alias KERNINGPAIR* LPKERNINGPAIR; -alias KERNINGPAIR TAGKERNINGPAIR; -alias KERNINGPAIR TKERNINGPAIR; -alias KERNINGPAIR* PKERNINGPAIR; - -struct LANA_ENUM -{ - UCHAR length; - UCHAR[1 + MAX_LANA-1] lana; -} - -alias LANA_ENUM _LANA_ENUM; -alias LANA_ENUM TLANAENUM; -alias LANA_ENUM* PLANAENUM; - -struct LDT_ENTRY -{ - ushort LimitLow; - ushort BaseLow; - - union - { - struct - { - ubyte BaseMid; - ubyte Flags1; - ubyte Flags2; - ubyte BaseHi; - } - struct - { - int flag0; - } - } -} - -alias LDT_ENTRY* LPLDT_ENTRY; -alias LDT_ENTRY* PLDT_ENTRY; -alias LDT_ENTRY _LDT_ENTRY; -alias LDT_ENTRY TLDTENTRY; -alias LDT_ENTRY* PLDTENTRY; -enum : DWORD { - bm_LDT_ENTRY_BaseMid = (0xFF), - bp_LDT_ENTRY_BaseMid = (0), - bm_LDT_ENTRY_Type = (0x1F00), - bp_LDT_ENTRY_Type = (8), - bm_LDT_ENTRY_Dpl = (0x6000), - bp_LDT_ENTRY_Dpl = (13), - bm_LDT_ENTRY_Pres = (0x8000), - bp_LDT_ENTRY_Pres = (15), - bm_LDT_ENTRY_LimitHi = (0xF0000), - bp_LDT_ENTRY_LimitHi = (16), - bm_LDT_ENTRY_Sys = (0x100000), - bp_LDT_ENTRY_Sys = (20), - bm_LDT_ENTRY_Reserved_0 = (0x200000), - bp_LDT_ENTRY_Reserved_0 = (21), - bm_LDT_ENTRY_Default_Big = (0x400000), - bp_LDT_ENTRY_Default_Big = (22), - bm_LDT_ENTRY_Granularity = (0x800000), - bp_LDT_ENTRY_Granularity = (23), - bm_LDT_ENTRY_BaseHi = (0xFF000000), - bp_LDT_ENTRY_BaseHi = (24), -} - -struct LOCALESIGNATURE -{ - DWORD[1 + 3] lsUsb; - DWORD[1 + 1] lsCsbDefault; - DWORD[1 + 1] lsCsbSupported; -} - -alias LOCALESIGNATURE TAGLOCALESIGNATURE; -alias LOCALESIGNATURE TLOCALESIGNATURE; -alias LOCALESIGNATURE* PLOCALESIGNATURE; - -struct LOCALGROUP_MEMBERS_INFO_0 -{ - PSID lgrmi0_sid; -} - -alias LOCALGROUP_MEMBERS_INFO_0 _LOCALGROUP_MEMBERS_INFO_0; -alias LOCALGROUP_MEMBERS_INFO_0 TLOCALGROUPMEMBERSINFO0; -alias LOCALGROUP_MEMBERS_INFO_0* PLOCALGROUPMEMBERSINFO0; - -struct LOCALGROUP_MEMBERS_INFO_3 -{ - LPWSTR lgrmi3_domainandname; -} - -alias LOCALGROUP_MEMBERS_INFO_3 _LOCALGROUP_MEMBERS_INFO_3; -alias LOCALGROUP_MEMBERS_INFO_3 TLOCALGROUPMEMBERSINFO3; -alias LOCALGROUP_MEMBERS_INFO_3* PLOCALGROUPMEMBERSINFO3; -alias int FXPT16DOT16; -alias FXPT16DOT16* LPFXPT16DOT16; -alias FXPT16DOT16 TFXPT16DOT16; -alias FXPT16DOT16* PFXPT16DOT16; -alias LARGE_INTEGER LUID; -alias LUID TLUID; -alias LUID* PLUID; - -struct LUID_AND_ATTRIBUTES -{ - LUID Luid; - DWORD Attributes; -} - -alias LUID_AND_ATTRIBUTES _LUID_AND_ATTRIBUTES; -alias LUID_AND_ATTRIBUTES TLUIDANDATTRIBUTES; -alias LUID_AND_ATTRIBUTES* PLUIDANDATTRIBUTES; -alias LUID_AND_ATTRIBUTES[1 + ANYSIZE_ARRAY-1] LUID_AND_ATTRIBUTES_ARRAY; -alias LUID_AND_ATTRIBUTES_ARRAY* PLUID_AND_ATTRIBUTES_ARRAY; -alias LUID_AND_ATTRIBUTES_ARRAY TLUIDANDATTRIBUTESARRAY; -alias LUID_AND_ATTRIBUTES_ARRAY* PLUIDANDATTRIBUTESARRAY; - -struct LV_COLUMN -{ - UINT mask; - int fmt; - int cx; - LPTSTR pszText; - int cchTextMax; - int iSubItem; -} - -alias LV_COLUMN _LV_COLUMN; -alias LV_COLUMN TLVCOLUMN; -alias LV_COLUMN* PLVCOLUMN; - -struct LV_ITEM -{ - UINT mask; - int iItem; - int iSubItem; - UINT state; - UINT stateMask; - LPTSTR pszText; - int cchTextMax; - int iImage; - LPARAM lParam; -} - -alias LV_ITEM _LV_ITEM; -alias LV_ITEM TLVITEM; -alias LV_ITEM* PLVITEM; - -struct LV_DISPINFO -{ - NMHDR hdr; - LV_ITEM item; -} - -alias LV_DISPINFO TAGLV_DISPINFO; -alias LV_DISPINFO TLVDISPINFO; -alias LV_DISPINFO* PLVDISPINFO; - -struct LV_FINDINFO -{ - UINT flags; - LPCTSTR psz; - LPARAM lParam; - POINT pt; - UINT vkDirection; -} - -alias LV_FINDINFO _LV_FINDINFO; -alias LV_FINDINFO TLVFINDINFO; -alias LV_FINDINFO* PLVFINDINFO; - -struct LV_HITTESTINFO -{ - POINT pt; - UINT flags; - int iItem; -} - -alias LV_HITTESTINFO _LV_HITTESTINFO; -alias LV_HITTESTINFO TLVHITTESTINFO; -alias LV_HITTESTINFO* PLVHITTESTINFO; - -struct LV_KEYDOWN -{ - NMHDR hdr; - ushort wVKey; - UINT flags; -} - -alias LV_KEYDOWN TAGLV_KEYDOWN; -alias LV_KEYDOWN TLVKEYDOWN; -alias LV_KEYDOWN* PLVKEYDOWN; - -struct MAT2 -{ - FIXED eM11; - FIXED eM12; - FIXED eM21; - FIXED eM22; -} - -alias MAT2 _MAT2; -alias MAT2 TMAT2; -alias MAT2* PMAT2; - -struct MDICREATESTRUCT -{ - LPCTSTR szClass; - LPCTSTR szTitle; - HANDLE hOwner; - int x; - int y; - int cx; - int cy; - DWORD style; - LPARAM lParam; -} - -alias MDICREATESTRUCT* LPMDICREATESTRUCT; -alias MDICREATESTRUCT TAGMDICREATESTRUCT; -alias MDICREATESTRUCT TMDICREATESTRUCT; -alias MDICREATESTRUCT* PMDICREATESTRUCT; - -struct MEASUREITEMSTRUCT -{ - UINT CtlType; - UINT CtlID; - UINT itemID; - UINT itemWidth; - UINT itemHeight; - DWORD itemData; -} - -alias MEASUREITEMSTRUCT* LPMEASUREITEMSTRUCT; -alias MEASUREITEMSTRUCT TAGMEASUREITEMSTRUCT; -alias MEASUREITEMSTRUCT TMEASUREITEMSTRUCT; -alias MEASUREITEMSTRUCT* PMEASUREITEMSTRUCT; - -struct MEMORY_BASIC_INFORMATION -{ - PVOID BaseAddress; - PVOID AllocationBase; - DWORD AllocationProtect; - DWORD RegionSize; - DWORD State; - DWORD Protect; - DWORD _Type; -} - -alias MEMORY_BASIC_INFORMATION* PMEMORY_BASIC_INFORMATION; -alias MEMORY_BASIC_INFORMATION _MEMORY_BASIC_INFORMATION; -alias MEMORY_BASIC_INFORMATION TMEMORYBASICINFORMATION; -alias MEMORY_BASIC_INFORMATION* PMEMORYBASICINFORMATION; - -struct MEMORYSTATUS -{ - DWORD dwLength; - DWORD dwMemoryLoad; - DWORD dwTotalPhys; - DWORD dwAvailPhys; - DWORD dwTotalPageFile; - DWORD dwAvailPageFile; - DWORD dwTotalVirtual; - DWORD dwAvailVirtual; -} - -alias MEMORYSTATUS* LPMEMORYSTATUS; -alias MEMORYSTATUS _MEMORYSTATUS; -alias MEMORYSTATUS TMEMORYSTATUS; -alias MEMORYSTATUS* PMEMORYSTATUS; - -struct MENUEX_TEMPLATE_HEADER -{ - ushort wVersion; - ushort wOffset; - DWORD dwHelpId; -} - -alias MENUEX_TEMPLATE_HEADER TMENUXTEMPLATEHEADER; -alias MENUEX_TEMPLATE_HEADER* PMENUXTEMPLATEHEADER; - -struct MENUEX_TEMPLATE_ITEM -{ - DWORD dwType; - DWORD dwState; - UINT uId; - ubyte bResInfo; - WCHAR[1 + 0] szText; - DWORD dwHelpId; -} - -alias MENUEX_TEMPLATE_ITEM TMENUEXTEMPLATEITEM; -alias MENUEX_TEMPLATE_ITEM* PMENUEXTEMPLATEITEM; - -struct MENUITEMINFO -{ - UINT cbSize; - UINT fMask; - UINT fType; - UINT fState; - UINT wID; - HMENU hSubMenu; - HBITMAP hbmpChecked; - HBITMAP hbmpUnchecked; - DWORD dwItemData; - LPTSTR dwTypeData; - UINT cch; -} - -alias MENUITEMINFO* LPMENUITEMINFO; -alias MENUITEMINFO* LPCMENUITEMINFO; -alias MENUITEMINFO TAGMENUITEMINFO; -alias MENUITEMINFO TMENUITEMINFO; -alias MENUITEMINFO TMENUITEMINFOA; -alias MENUITEMINFO* PMENUITEMINFO; - -struct MENUITEMTEMPLATE -{ - ushort mtOption; - ushort mtID; - WCHAR[1 + 0] mtString; -} - -alias MENUITEMTEMPLATE TMENUITEMTEMPLATE; -alias MENUITEMTEMPLATE* PMENUITEMTEMPLATE; - -struct MENUITEMTEMPLATEHEADER -{ - ushort versionNumber; - ushort offset; -} - -alias MENUITEMTEMPLATEHEADER TMENUITEMTEMPLATEHEADER; -alias MENUITEMTEMPLATEHEADER* PMENUITEMTEMPLATEHEADER; - -struct MENUTEMPLATE -{ -} - -alias MENUTEMPLATE* LPMENUTEMPLATE; -alias MENUTEMPLATE TMENUTEMPLATE; -alias MENUTEMPLATE* PMENUTEMPLATE; - -struct METAFILEPICT -{ - LONG mm; - LONG xExt; - LONG yExt; - HMETAFILE hMF; -} - -alias METAFILEPICT* LPMETAFILEPICT; -alias METAFILEPICT TAGMETAFILEPICT; -alias METAFILEPICT TMETAFILEPICT; -alias METAFILEPICT* PMETAFILEPICT; - -align(1) struct METAHEADER -{ - ushort mtType; - ushort mtHeaderSize; - ushort mtVersion; - DWORD mtSize; - ushort mtNoObjects; - DWORD mtMaxRecord; - ushort mtNoParameters; -} - -alias METAHEADER TAGMETAHEADER; -alias METAHEADER TMETAHEADER; -alias METAHEADER* PMETAHEADER; - -struct METARECORD -{ - DWORD rdSize; - ushort rdFunction; - ushort[1 + 0] rdParm; -} - -alias METARECORD* LPMETARECORD; -alias METARECORD TAGMETARECORD; -alias METARECORD TMETARECORD; -alias METARECORD* PMETARECORD; - -struct MINIMIZEDMETRICS -{ - UINT cbSize; - int iWidth; - int iHorzGap; - int iVertGap; - int iArrange; -} - -alias MINIMIZEDMETRICS* LPMINIMIZEDMETRICS; -alias MINIMIZEDMETRICS TAGMINIMIZEDMETRICS; -alias MINIMIZEDMETRICS TMINIMIZEDMETRICS; -alias MINIMIZEDMETRICS* PMINIMIZEDMETRICS; - -struct MINMAXINFO -{ - POINT ptReserved; - POINT ptMaxSize; - POINT ptMaxPosition; - POINT ptMinTrackSize; - POINT ptMaxTrackSize; -} - -alias MINMAXINFO TAGMINMAXINFO; -alias MINMAXINFO TMINMAXINFO; -alias MINMAXINFO* PMINMAXINFO; - -struct MODEMDEVCAPS -{ - DWORD dwActualSize; - DWORD dwRequiredSize; - DWORD dwDevSpecificOffset; - DWORD dwDevSpecificSize; - DWORD dwModemProviderVersion; - DWORD dwModemManufacturerOffset; - DWORD dwModemManufacturerSize; - DWORD dwModemModelOffset; - DWORD dwModemModelSize; - DWORD dwModemVersionOffset; - DWORD dwModemVersionSize; - DWORD dwDialOptions; - DWORD dwCallSetupFailTimer; - DWORD dwInactivityTimeout; - DWORD dwSpeakerVolume; - DWORD dwSpeakerMode; - DWORD dwModemOptions; - DWORD dwMaxDTERate; - DWORD dwMaxDCERate; - ubyte[1 + 0] abVariablePortion; -} - -alias MODEMDEVCAPS* LPMODEMDEVCAPS; -alias MODEMDEVCAPS TMODEMDEVCAPS; -alias MODEMDEVCAPS* PMODEMDEVCAPS; -alias MODEMDEVCAPS MODEMDEVCAPS_TAG; - -struct MODEMSETTINGS -{ - DWORD dwActualSize; - DWORD dwRequiredSize; - DWORD dwDevSpecificOffset; - DWORD dwDevSpecificSize; - DWORD dwCallSetupFailTimer; - DWORD dwInactivityTimeout; - DWORD dwSpeakerVolume; - DWORD dwSpeakerMode; - DWORD dwPreferredModemOptions; - DWORD dwNegotiatedModemOptions; - DWORD dwNegotiatedDCERate; - ubyte[1 + 0] abVariablePortion; -} - -alias MODEMSETTINGS* LPMODEMSETTINGS; -alias MODEMSETTINGS TMODEMSETTINGS; -alias MODEMSETTINGS* PMODEMSETTINGS; -alias MODEMSETTINGS MODEMSETTINGS_TAG; - -struct MONCBSTRUCT -{ - UINT cb; - DWORD dwTime; - HANDLE hTask; - DWORD dwRet; - UINT wType; - UINT wFmt; - HCONV hConv; - HSZ hsz1; - HSZ hsz2; - HDDEDATA hData; - DWORD dwData1; - DWORD dwData2; - CONVCONTEXT cc; - DWORD cbData; - DWORD[1 + 7] Data; -} - -alias MONCBSTRUCT TAGMONCBSTRUCT; -alias MONCBSTRUCT TMONCBSTRUCT; -alias MONCBSTRUCT* PMONCBSTRUCT; - -struct MONCONVSTRUCT -{ - UINT cb; - WINBOOL fConnect; - DWORD dwTime; - HANDLE hTask; - HSZ hszSvc; - HSZ hszTopic; - HCONV hConvClient; - HCONV hConvServer; -} - -alias MONCONVSTRUCT TAGMONCONVSTRUCT; -alias MONCONVSTRUCT TMONCONVSTRUCT; -alias MONCONVSTRUCT* PMONCONVSTRUCT; - -struct MONERRSTRUCT -{ - UINT cb; - UINT wLastError; - DWORD dwTime; - HANDLE hTask; -} - -alias MONERRSTRUCT TAGMONERRSTRUCT; -alias MONERRSTRUCT TMONERRSTRUCT; -alias MONERRSTRUCT* PMONERRSTRUCT; - -struct MONHSZSTRUCT -{ - UINT cb; - WINBOOL fsAction; - DWORD dwTime; - HSZ hsz; - HANDLE hTask; - TCHAR[1 + 0] str; -} - -alias MONHSZSTRUCT TAGMONHSZSTRUCT; -alias MONHSZSTRUCT TMONHSZSTRUCT; -alias MONHSZSTRUCT* PMONHSZSTRUCT; - -struct MONITOR_INFO_1 -{ - LPTSTR pName; -} - -alias MONITOR_INFO_1 _MONITOR_INFO_1; -alias MONITOR_INFO_1 TMONITORINFO1; -alias MONITOR_INFO_1* PMONITORINFO1; - -struct MONITOR_INFO_2 -{ - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDLLName; -} - -alias MONITOR_INFO_2 _MONITOR_INFO_2; -alias MONITOR_INFO_2 TMONITORINFO2; -alias MONITOR_INFO_2* PMONITORINFO2; - -struct MONLINKSTRUCT -{ - UINT cb; - DWORD dwTime; - HANDLE hTask; - WINBOOL fEstablished; - WINBOOL fNoData; - HSZ hszSvc; - HSZ hszTopic; - HSZ hszItem; - UINT wFmt; - WINBOOL fServer; - HCONV hConvServer; - HCONV hConvClient; -} - -alias MONLINKSTRUCT TAGMONLINKSTRUCT; -alias MONLINKSTRUCT TMONLINKSTRUCT; -alias MONLINKSTRUCT* PMONLINKSTRUCT; - -struct MONMSGSTRUCT -{ - UINT cb; - HWND hwndTo; - DWORD dwTime; - HANDLE hTask; - UINT wMsg; - WPARAM wParam; - LPARAM lParam; - DDEML_MSG_HOOK_DATA dmhd; -} - -alias MONMSGSTRUCT TAGMONMSGSTRUCT; -alias MONMSGSTRUCT TMONMSGSTRUCT; -alias MONMSGSTRUCT* PMONMSGSTRUCT; - -struct MOUSEHOOKSTRUCT -{ - POINT pt; - HWND hwnd; - UINT wHitTestCode; - DWORD dwExtraInfo; -} - -alias MOUSEHOOKSTRUCT* LPMOUSEHOOKSTRUCT; -alias MOUSEHOOKSTRUCT TAGMOUSEHOOKSTRUCT; -alias MOUSEHOOKSTRUCT TMOUSEHOOKSTRUCT; -alias MOUSEHOOKSTRUCT* PMOUSEHOOKSTRUCT; - -struct MOUSEKEYS -{ - DWORD cbSize; - DWORD dwFlags; - DWORD iMaxSpeed; - DWORD iTimeToMaxSpeed; - DWORD iCtrlSpeed; - DWORD dwReserved1; - DWORD dwReserved2; -} - -alias MOUSEKEYS TMOUSEKEYS; -alias MOUSEKEYS* PMOUSEKEYS; - -struct MSG -{ - HWND hwnd; - UINT message; - WPARAM wParam; - LPARAM lParam; - DWORD time; - POINT pt; -} - -alias MSG* LPMSG; -alias MSG TAGMSG; -alias MSG TMSG; -alias MSG* PMSG; -extern(Windows){ -alias void (*MSGBOXCALLBACK)(LPHELPINFO); -} -alias MSGBOXCALLBACK TMSGBOXCALLBACK; - -struct MSGBOXPARAMS -{ - UINT cbSize; - HWND hwndOwner; - HINST hInstance; - LPCSTR lpszText; - LPCSTR lpszCaption; - DWORD dwStyle; - LPCSTR lpszIcon; - DWORD dwContextHelpId; - MSGBOXCALLBACK lpfnMsgBoxCallback; - DWORD dwLanguageId; -} - -alias MSGBOXPARAMS* LPMSGBOXPARAMS; -alias MSGBOXPARAMS TMSGBOXPARAMS; -alias MSGBOXPARAMS TMSGBOXPARAMSA; -alias MSGBOXPARAMS* PMSGBOXPARAMS; - -struct MSGFILTER -{ - NMHDR nmhdr; - UINT msg; - WPARAM wParam; - LPARAM lParam; -} - -alias MSGFILTER _MSGFILTER; -alias MSGFILTER TMSGFILTER; -alias MSGFILTER* PMSGFILTER; - -struct MULTIKEYHELP -{ - DWORD mkSize; - TCHAR mkKeylist; - TCHAR[1 + 0] szKeyphrase; -} - -alias MULTIKEYHELP TAGMULTIKEYHELP; -alias MULTIKEYHELP TMULTIKEYHELP; -alias MULTIKEYHELP* PMULTIKEYHELP; - -struct NAME_BUFFER -{ - UCHAR[1 + NCBNAMSZ-1] name; - UCHAR name_num; - UCHAR name_flags; -} - -alias NAME_BUFFER _NAME_BUFFER; -alias NAME_BUFFER TNAMEBUFFER; -alias NAME_BUFFER* PNAMEBUFFER; -alias _NCB* P_NCB; - -struct NCB -{ - UCHAR ncb_command; - UCHAR ncb_retcode; - UCHAR ncb_lsn; - UCHAR ncb_num; - PUCHAR ncb_buffer; - ushort ncb_length; - UCHAR[1 + NCBNAMSZ-1] ncb_callname; - UCHAR[1 + NCBNAMSZ-1] ncb_name; - UCHAR ncb_rto; - UCHAR ncb_sto; - POINTER ncb_post; - UCHAR ncb_lana_num; - UCHAR ncb_cmd_cplt; - UCHAR[1 + 9] ncb_reserve; - HANDLE ncb_event; -} - -alias NCB _NCB; -alias NCB TNCB; -alias NCB* PNCB; - -struct NCCALCSIZE_PARAMS -{ - RECT[1 + 2] rgrc; - PWINDOWPOS lppos; -} - -alias NCCALCSIZE_PARAMS _NCCALCSIZE_PARAMS; -alias NCCALCSIZE_PARAMS TNCCALCSIZEPARAMS; -alias NCCALCSIZE_PARAMS* PNCCALCSIZEPARAMS; - -struct NDDESHAREINFO -{ - LONG lRevision; - LPTSTR lpszShareName; - LONG lShareType; - LPTSTR lpszAppTopicList; - LONG fSharedFlag; - LONG fService; - LONG fStartAppFlag; - LONG nCmdShow; - LONG[1 + 1] qModifyId; - LONG cNumItems; - LPTSTR lpszItemList; -} - -alias NDDESHAREINFO _NDDESHAREINFO; -alias NDDESHAREINFO TNDDESHAREINFO; -alias NDDESHAREINFO* PNDDESHAREINFO; - -struct NETRESOURCE -{ - DWORD dwScope; - DWORD dwType; - DWORD dwDisplayType; - DWORD dwUsage; - LPTSTR lpLocalName; - LPTSTR lpRemoteName; - LPTSTR lpComment; - LPTSTR lpProvider; -} - -alias NETRESOURCE* LPNETRESOURCE; -alias NETRESOURCE _NETRESOURCE; -alias NETRESOURCE TNETRESOURCE; -alias NETRESOURCE TNETRESOURCEA; -alias NETRESOURCE* PNETRESOURCE; -alias NETRESOURCE* PNETRESOURCEA; - -struct NEWCPLINFO -{ - DWORD dwSize; - DWORD dwFlags; - DWORD dwHelpContext; - LONG lData; - HICON hIcon; - TCHAR[1 + 31] szName; - TCHAR[1 + 63] szInfo; - TCHAR[1 + 127] szHelpFile; -} - -alias NEWCPLINFO TAGNEWCPLINFO; -alias NEWCPLINFO TNEWCPLINFO; -alias NEWCPLINFO* PNEWCPLINFO; - -struct NEWTEXTMETRIC -{ - LONG tmHeight; - LONG tmAscent; - LONG tmDescent; - LONG tmInternalLeading; - LONG tmExternalLeading; - LONG tmAveCharWidth; - LONG tmMaxCharWidth; - LONG tmWeight; - LONG tmOverhang; - LONG tmDigitizedAspectX; - LONG tmDigitizedAspectY; - BCHAR tmFirstChar; - BCHAR tmLastChar; - BCHAR tmDefaultChar; - BCHAR tmBreakChar; - ubyte tmItalic; - ubyte tmUnderlined; - ubyte tmStruckOut; - ubyte tmPitchAndFamily; - ubyte tmCharSet; - DWORD ntmFlags; - UINT ntmSizeEM; - UINT ntmCellHeight; - UINT ntmAvgWidth; -} - -alias NEWTEXTMETRIC TAGNEWTEXTMETRIC; -alias NEWTEXTMETRIC TNEWTEXTMETRIC; -alias NEWTEXTMETRIC* PNEWTEXTMETRIC; - -struct NEWTEXTMETRICEX -{ - NEWTEXTMETRIC ntmentm; - FONTSIGNATURE ntmeFontSignature; -} - -alias NEWTEXTMETRICEX TAGNEWTEXTMETRICEX; -alias NEWTEXTMETRICEX TNEWTEXTMETRICEX; -alias NEWTEXTMETRICEX* PNEWTEXTMETRICEX; - -struct NM_LISTVIEW -{ - NMHDR hdr; - int iItem; - int iSubItem; - UINT uNewState; - UINT uOldState; - UINT uChanged; - POINT ptAction; - LPARAM lParam; -} - -alias NM_LISTVIEW TAGNM_LISTVIEW; -alias NM_LISTVIEW TNMLISTVIEW; -alias NM_LISTVIEW* PNMLISTVIEW; - -struct TV_ITEM -{ - UINT mask; - HTREEITEM hItem; - UINT state; - UINT stateMask; - LPTSTR pszText; - int cchTextMax; - int iImage; - int iSelectedImage; - int cChildren; - LPARAM lParam; -} - -alias TV_ITEM* LPTV_ITEM; -alias TV_ITEM _TV_ITEM; -alias TV_ITEM TTVITEM; -alias TV_ITEM* PTVITEM; - -struct NM_TREEVIEW -{ - NMHDR hdr; - UINT action; - TV_ITEM itemOld; - TV_ITEM itemNew; - POINT ptDrag; -} - -alias NM_TREEVIEW* LPNM_TREEVIEW; -alias NM_TREEVIEW _NM_TREEVIEW; -alias NM_TREEVIEW TNMTREEVIEW; -alias NM_TREEVIEW* PNMTREEVIEW; - -struct NM_UPDOWNW -{ - NMHDR hdr; - int iPos; - int iDelta; -} - -alias NM_UPDOWNW _NM_UPDOWN; -alias NM_UPDOWNW TNMUPDOWN; -alias NM_UPDOWNW* PNMUPDOWN; - -struct NONCLIENTMETRICS -{ - UINT cbSize; - int iBorderWidth; - int iScrollWidth; - int iScrollHeight; - int iCaptionWidth; - int iCaptionHeight; - LOGFONT lfCaptionFont; - int iSmCaptionWidth; - int iSmCaptionHeight; - LOGFONT lfSmCaptionFont; - int iMenuWidth; - int iMenuHeight; - LOGFONT lfMenuFont; - LOGFONT lfStatusFont; - LOGFONT lfMessageFont; -} - -alias NONCLIENTMETRICS* LPNONCLIENTMETRICS; -alias NONCLIENTMETRICS TAGNONCLIENTMETRICS; -alias NONCLIENTMETRICS TNONCLIENTMETRICS; -alias NONCLIENTMETRICS* PNONCLIENTMETRICS; - -struct SERVICE_ADDRESS -{ - DWORD dwAddressType; - DWORD dwAddressFlags; - DWORD dwAddressLength; - DWORD dwPrincipalLength; - ubyte* lpAddress; - ubyte* lpPrincipal; -} - -alias SERVICE_ADDRESS _SERVICE_ADDRESS; -alias SERVICE_ADDRESS TSERVICEADDRESS; -alias SERVICE_ADDRESS* PSERVICEADDRESS; - -struct SERVICE_ADDRESSES -{ - DWORD dwAddressCount; - SERVICE_ADDRESS[1 + 0] Addresses; -} - -alias SERVICE_ADDRESSES* LPSERVICE_ADDRESSES; -alias SERVICE_ADDRESSES _SERVICE_ADDRESSES; -alias SERVICE_ADDRESSES TSERVICEADDRESSES; -alias SERVICE_ADDRESSES* PSERVICEADDRESSES; - -align(1) struct __GUID -{ - - union - { - struct - { - uint Data1; - ushort Data2; - ushort Data3; - ubyte[1 + 7] Data4; - } - struct - { - uint D1; - ushort D2; - ushort D3; - ubyte[1 + 7] D4; - } - } -} - -alias __GUID* LPGUID; -alias __GUID _GUID; -alias __GUID TGUID; -alias __GUID* PGUID; -alias __GUID __CLSID; -alias __CLSID* LPCLSID; -alias __CLSID TCLSID; -alias __CLSID* PCLSID; - -struct SERVICE_INFO -{ - LPGUID lpServiceType; - LPTSTR lpServiceName; - LPTSTR lpComment; - LPTSTR lpLocale; - DWORD dwDisplayHint; - DWORD dwVersion; - DWORD dwTime; - LPTSTR lpMachineName; - LPSERVICE_ADDRESSES lpServiceAddress; - BLOB ServiceSpecificInfo; -} - -alias SERVICE_INFO _SERVICE_INFO; -alias SERVICE_INFO TSERVICEINFO; -alias SERVICE_INFO* PSERVICEINFO; - -struct NS_SERVICE_INFO -{ - DWORD dwNameSpace; - SERVICE_INFO ServiceInfo; -} - -alias NS_SERVICE_INFO _NS_SERVICE_INFO; -alias NS_SERVICE_INFO TNSSERVICEINFO; -alias NS_SERVICE_INFO* PNSSERVICEINFO; - -struct NUMBERFMT -{ - UINT NumDigits; - UINT LeadingZero; - UINT Grouping; - LPTSTR lpDecimalSep; - LPTSTR lpThousandSep; - UINT NegativeOrder; -} - -alias NUMBERFMT _NUMBERFMT; -alias NUMBERFMT TNUMBERFMT; -alias NUMBERFMT* PNUMBERFMT; - -struct OFSTRUCT -{ - ubyte cBytes; - ubyte fFixedDisk; - ushort nErrCode; - ushort Reserved1; - ushort Reserved2; - char[1 + OFS_MAXPATHNAME-1] szPathName; -} - -alias OFSTRUCT* LPOFSTRUCT; -alias OFSTRUCT _OFSTRUCT; -alias OFSTRUCT TOFSTRUCT; -alias OFSTRUCT* POFSTRUCT; - -struct OPENFILENAME -{ - DWORD lStructSize; - HWND hwndOwner; - HINST hInstance; - LPCTSTR lpstrFilter; - LPTSTR lpstrCustomFilter; - DWORD nMaxCustFilter; - DWORD nFilterIndex; - LPTSTR lpstrFile; - DWORD nMaxFile; - LPTSTR lpstrFileTitle; - DWORD nMaxFileTitle; - LPCTSTR lpstrInitialDir; - LPCTSTR lpstrTitle; - DWORD Flags; - ushort nFileOffset; - ushort nFileExtension; - LPCTSTR lpstrDefExt; - DWORD lCustData; - LPOFNHOOKPROC lpfnHook; - LPCTSTR lpTemplateName; -} - -alias OPENFILENAME* LPOPENFILENAME; -alias OPENFILENAME TOPENFILENAME; -alias OPENFILENAME* POPENFILENAME; -alias OPENFILENAME TAGOFN; -alias OPENFILENAME TOFN; -alias OPENFILENAME* POFN; - -struct OFNOTIFY -{ - NMHDR hdr; - LPOPENFILENAME lpOFN; - LPTSTR pszFile; -} - -alias OFNOTIFY* LPOFNOTIFY; -alias OFNOTIFY _OFNOTIFY; -alias OFNOTIFY TOFNOTIFY; -alias OFNOTIFY* POFNOTIFY; - -struct OSVERSIONINFO -{ - DWORD dwOSVersionInfoSize; - DWORD dwMajorVersion; - DWORD dwMinorVersion; - DWORD dwBuildNumber; - DWORD dwPlatformId; - TCHAR[1 + 127] szCSDVersion; -} - -alias OSVERSIONINFO* LPOSVERSIONINFO; -alias OSVERSIONINFO _OSVERSIONINFO; -alias OSVERSIONINFO TOSVERSIONINFO; -alias OSVERSIONINFO* POSVERSIONINFO; - -struct TEXTMETRIC -{ - LONG tmHeight; - LONG tmAscent; - LONG tmDescent; - LONG tmInternalLeading; - LONG tmExternalLeading; - LONG tmAveCharWidth; - LONG tmMaxCharWidth; - LONG tmWeight; - LONG tmOverhang; - LONG tmDigitizedAspectX; - LONG tmDigitizedAspectY; - BCHAR tmFirstChar; - BCHAR tmLastChar; - BCHAR tmDefaultChar; - BCHAR tmBreakChar; - ubyte tmItalic; - ubyte tmUnderlined; - ubyte tmStruckOut; - ubyte tmPitchAndFamily; - ubyte tmCharSet; -} - -alias TEXTMETRIC* LPTEXTMETRIC; -alias TEXTMETRIC TAGTEXTMETRIC; -alias TEXTMETRIC TTEXTMETRIC; -alias TEXTMETRIC* PTEXTMETRIC; - -struct OUTLINETEXTMETRIC -{ - UINT otmSize; - TEXTMETRIC otmTextMetrics; - ubyte otmFiller; - PANOSE otmPanoseNumber; - UINT otmfsSelection; - UINT otmfsType; - int otmsCharSlopeRise; - int otmsCharSlopeRun; - int otmItalicAngle; - UINT otmEMSquare; - int otmAscent; - int otmDescent; - UINT otmLineGap; - UINT otmsCapEmHeight; - UINT otmsXHeight; - RECT otmrcFontBox; - int otmMacAscent; - int otmMacDescent; - UINT otmMacLineGap; - UINT otmusMinimumPPEM; - POINT otmptSubscriptSize; - POINT otmptSubscriptOffset; - POINT otmptSuperscriptSize; - POINT otmptSuperscriptOffset; - UINT otmsStrikeoutSize; - int otmsStrikeoutPosition; - int otmsUnderscoreSize; - int otmsUnderscorePosition; - PSTR otmpFamilyName; - PSTR otmpFaceName; - PSTR otmpStyleName; - PSTR otmpFullName; -} - -alias OUTLINETEXTMETRIC* LPOUTLINETEXTMETRIC; -alias OUTLINETEXTMETRIC _OUTLINETEXTMETRIC; -alias OUTLINETEXTMETRIC TOUTLINETEXTMETRIC; -alias OUTLINETEXTMETRIC* POUTLINETEXTMETRIC; - -struct OVERLAPPED -{ - DWORD Internal; - DWORD InternalHigh; - DWORD Offset; - DWORD OffsetHigh; - HANDLE hEvent; -} - -alias OVERLAPPED* LPOVERLAPPED; -alias OVERLAPPED _OVERLAPPED; -alias OVERLAPPED TOVERLAPPED; -alias OVERLAPPED* POVERLAPPED; - -struct TPAGESETUPDLG -{ - DWORD lStructSize; - HWND hwndOwner; - HGLOBAL hDevMode; - HGLOBAL hDevNames; - DWORD Flags; - POINT ptPaperSize; - RECT rtMinMargin; - RECT rtMargin; - HINST hInstance; - LPARAM lCustData; - LPPAGESETUPHOOK lpfnPageSetupHook; - LPPAGEPAINTHOOK lpfnPagePaintHook; - LPCTSTR lpPageSetupTemplateName; - HGLOBAL hPageSetupTemplate; -} - -alias TPAGESETUPDLG* LPPAGESETUPDLG; -alias TPAGESETUPDLG* PPAGESETUPDLG; -alias TPAGESETUPDLG TAGPSD; -alias TPAGESETUPDLG TPSD; -alias TPAGESETUPDLG* PPSD; - -struct PAINTSTRUCT -{ - HDC hdc; - WINBOOL fErase; - RECT rcPaint; - WINBOOL fRestore; - WINBOOL fIncUpdate; - ubyte[1 + 31] rgbReserved; -} - -alias PAINTSTRUCT* LPPAINTSTRUCT; -alias PAINTSTRUCT TAGPAINTSTRUCT; -alias PAINTSTRUCT TPAINTSTRUCT; -alias PAINTSTRUCT* PPAINTSTRUCT; - -struct PARAFORMAT -{ - UINT cbSize; - DWORD dwMask; - ushort wNumbering; - ushort wReserved; - LONG dxStartIndent; - LONG dxRightIndent; - LONG dxOffset; - ushort wAlignment; - SHORT cTabCount; - LONG[1 + MAX_TAB_STOPS-1] rgxTabs; -} - -alias PARAFORMAT _PARAFORMAT; -alias PARAFORMAT TPARAFORMAT; -alias PARAFORMAT* PPARAFORMAT; - -struct PERF_COUNTER_BLOCK -{ - DWORD ByteLength; -} - -alias PERF_COUNTER_BLOCK _PERF_COUNTER_BLOCK; -alias PERF_COUNTER_BLOCK TPERFCOUNTERBLOCK; -alias PERF_COUNTER_BLOCK* PPERFCOUNTERBLOCK; - -struct PERF_COUNTER_DEFINITION -{ - DWORD ByteLength; - DWORD CounterNameTitleIndex; - LPWSTR CounterNameTitle; - DWORD CounterHelpTitleIndex; - LPWSTR CounterHelpTitle; - DWORD DefaultScale; - DWORD DetailLevel; - DWORD CounterType; - DWORD CounterSize; - DWORD CounterOffset; -} - -alias PERF_COUNTER_DEFINITION _PERF_COUNTER_DEFINITION; -alias PERF_COUNTER_DEFINITION TPERFCOUNTERDEFINITION; -alias PERF_COUNTER_DEFINITION* PPERFCOUNTERDEFINITION; - -struct PERF_DATA_BLOCK -{ - WCHAR[1 + 3] Signature; - DWORD LittleEndian; - DWORD Version; - DWORD Revision; - DWORD TotalByteLength; - DWORD HeaderLength; - DWORD NumObjectTypes; - DWORD DefaultObject; - SYSTEMTIME SystemTime; - LARGE_INTEGER PerfTime; - LARGE_INTEGER PerfFreq; - LARGE_INTEGER PerfTime100nSec; - DWORD SystemNameLength; - DWORD SystemNameOffset; -} - -alias PERF_DATA_BLOCK _PERF_DATA_BLOCK; -alias PERF_DATA_BLOCK TPERFDATABLOCK; -alias PERF_DATA_BLOCK* PPERFDATABLOCK; - -struct PERF_INSTANCE_DEFINITION -{ - DWORD ByteLength; - DWORD ParentObjectTitleIndex; - DWORD ParentObjectInstance; - DWORD UniqueID; - DWORD NameOffset; - DWORD NameLength; -} - -alias PERF_INSTANCE_DEFINITION _PERF_INSTANCE_DEFINITION; -alias PERF_INSTANCE_DEFINITION TPERFINSTANCEDEFINITION; -alias PERF_INSTANCE_DEFINITION PPERFINSTANCEDEFINITION; - -struct PERF_OBJECT_TYPE -{ - DWORD TotalByteLength; - DWORD DefinitionLength; - DWORD HeaderLength; - DWORD ObjectNameTitleIndex; - LPWSTR ObjectNameTitle; - DWORD ObjectHelpTitleIndex; - LPWSTR ObjectHelpTitle; - DWORD DetailLevel; - DWORD NumCounters; - DWORD DefaultCounter; - DWORD NumInstances; - DWORD CodePage; - LARGE_INTEGER PerfTime; - LARGE_INTEGER PerfFreq; -} - -alias PERF_OBJECT_TYPE _PERF_OBJECT_TYPE; -alias PERF_OBJECT_TYPE TPERFOBJECTTYPE; -alias PERF_OBJECT_TYPE* PPERFOBJECTTYPE; - -struct POLYTEXT -{ - int x; - int y; - UINT n; - LPCTSTR lpstr; - UINT uiFlags; - RECT rcl; - int* pdx; -} - -alias POLYTEXT _POLYTEXT; -alias POLYTEXT TPOLYTEXT; -alias POLYTEXT* PPOLYTEXT; - -struct PORT_INFO_1 -{ - LPTSTR pName; -} - -alias PORT_INFO_1 _PORT_INFO_1; -alias PORT_INFO_1 TPORTINFO1; -alias PORT_INFO_1* PPORTINFO1; - -struct PORT_INFO_2 -{ - LPSTR pPortName; - LPSTR pMonitorName; - LPSTR pDescription; - DWORD fPortType; - DWORD Reserved; -} - -alias PORT_INFO_2 _PORT_INFO_2; -alias PORT_INFO_2 TPORTINFO2; -alias PORT_INFO_2* PPORTINFO2; - -struct PREVENT_MEDIA_REMOVAL -{ - ubyte PreventMediaRemoval; -} - -alias PREVENT_MEDIA_REMOVAL _PREVENT_MEDIA_REMOVAL; -alias PREVENT_MEDIA_REMOVAL TPREVENTMEDIAREMOVAL; -alias PREVENT_MEDIA_REMOVAL* PPREVENTMEDIAREMOVAL; - -align(1) struct TPRINTDLG -{ - DWORD lStructSize; - HWND hwndOwner; - HANDLE hDevMode; - HANDLE hDevNames; - HDC hDC; - DWORD Flags; - ushort nFromPage; - ushort nToPage; - ushort nMinPage; - ushort nMaxPage; - ushort nCopies; - HINST hInstance; - DWORD lCustData; - LPPRINTHOOKPROC lpfnPrintHook; - LPSETUPHOOKPROC lpfnSetupHook; - LPCTSTR lpPrintTemplateName; - LPCTSTR lpSetupTemplateName; - HANDLE hPrintTemplate; - HANDLE hSetupTemplate; -} - -alias TPRINTDLG* LPPRINTDLG; -alias TPRINTDLG* PPRINTDLG; -alias TPRINTDLG TAGPD; -alias TPRINTDLG TPD; -alias TPRINTDLG* PPD; - -struct PRINTER_DEFAULTS -{ - LPTSTR pDatatype; - LPDEVMODE pDevMode; - ACCESS_MASK DesiredAccess; -} - -alias PRINTER_DEFAULTS _PRINTER_DEFAULTS; -alias PRINTER_DEFAULTS TPRINTERDEFAULTS; -alias PRINTER_DEFAULTS* PPRINTERDEFAULTS; - -struct PRINTER_INFO_1 -{ - DWORD Flags; - LPTSTR pDescription; - LPTSTR pName; - LPTSTR pComment; -} - -alias PRINTER_INFO_1* LPPRINTER_INFO_1; -alias PRINTER_INFO_1* PPRINTER_INFO_1; -alias PRINTER_INFO_1 _PRINTER_INFO_1; -alias PRINTER_INFO_1 TPRINTERINFO1; -alias PRINTER_INFO_1* PPRINTERINFO1; - -struct PRINTER_INFO_2 -{ - LPTSTR pServerName; - LPTSTR pPrinterName; - LPTSTR pShareName; - LPTSTR pPortName; - LPTSTR pDriverName; - LPTSTR pComment; - LPTSTR pLocation; - LPDEVMODE pDevMode; - LPTSTR pSepFile; - LPTSTR pPrintProcessor; - LPTSTR pDatatype; - LPTSTR pParameters; - PSECURITY_DESCRIPTOR pSecurityDescriptor; - DWORD Attributes; - DWORD Priority; - DWORD DefaultPriority; - DWORD StartTime; - DWORD UntilTime; - DWORD Status; - DWORD cJobs; - DWORD AveragePPM; -} - -alias PRINTER_INFO_2 _PRINTER_INFO_2; -alias PRINTER_INFO_2 TPRINTERINFO2; -alias PRINTER_INFO_2* PPRINTERINFO2; - -struct PRINTER_INFO_3 -{ - PSECURITY_DESCRIPTOR pSecurityDescriptor; -} - -alias PRINTER_INFO_3 _PRINTER_INFO_3; -alias PRINTER_INFO_3 TPRINTERINFO3; -alias PRINTER_INFO_3* PPRINTERINFO3; - -struct PRINTER_INFO_4 -{ - LPTSTR pPrinterName; - LPTSTR pServerName; - DWORD Attributes; -} - -alias PRINTER_INFO_4 _PRINTER_INFO_4; -alias PRINTER_INFO_4 TPRINTERINFO4; -alias PRINTER_INFO_4* PPRINTERINFO4; - -struct PRINTER_INFO_5 -{ - LPTSTR pPrinterName; - LPTSTR pPortName; - DWORD Attributes; - DWORD DeviceNotSelectedTimeout; - DWORD TransmissionRetryTimeout; -} - -alias PRINTER_INFO_5 _PRINTER_INFO_5; -alias PRINTER_INFO_5 TPRINTERINFO5; -alias PRINTER_INFO_5* PPRINTERINFO5; - -struct PRINTER_NOTIFY_INFO_DATA -{ - ushort _Type; - ushort Field; - DWORD Reserved; - DWORD Id; - - union - { - struct - { - DWORD[1 + 1] adwData; - } - struct - { - DWORD cbBuf; - LPVOID pBuf; - } - } -} - -alias PRINTER_NOTIFY_INFO_DATA _PRINTER_NOTIFY_INFO_DATA; -alias PRINTER_NOTIFY_INFO_DATA TPRINTERNOTIFYINFODATA; -alias PRINTER_NOTIFY_INFO_DATA* PPRINTERNOTIFYINFODATA; - -struct PRINTER_NOTIFY_INFO -{ - DWORD Version; - DWORD Flags; - DWORD Count; - PRINTER_NOTIFY_INFO_DATA[1 + 0] aData; -} - -alias PRINTER_NOTIFY_INFO _PRINTER_NOTIFY_INFO; -alias PRINTER_NOTIFY_INFO TPRINTERNOTIFYINFO; -alias PRINTER_NOTIFY_INFO* PPRINTERNOTIFYINFO; - -struct PRINTER_NOTIFY_OPTIONS_TYPE -{ - ushort _Type; - ushort Reserved0; - DWORD Reserved1; - DWORD Reserved2; - DWORD Count; - PWORD pFields; -} - -alias PRINTER_NOTIFY_OPTIONS_TYPE* PPRINTER_NOTIFY_OPTIONS_TYPE; -alias PRINTER_NOTIFY_OPTIONS_TYPE _PRINTER_NOTIFY_OPTIONS_TYPE; -alias PRINTER_NOTIFY_OPTIONS_TYPE TPRINTERNOTIFYOPTIONSTYPE; -alias PRINTER_NOTIFY_OPTIONS_TYPE* PPRINTERNOTIFYOPTIONSTYPE; - -struct PRINTER_NOTIFY_OPTIONS -{ - DWORD Version; - DWORD Flags; - DWORD Count; - PPRINTER_NOTIFY_OPTIONS_TYPE pTypes; -} - -alias PRINTER_NOTIFY_OPTIONS _PRINTER_NOTIFY_OPTIONS; -alias PRINTER_NOTIFY_OPTIONS TPRINTERNOTIFYOPTIONS; -alias PRINTER_NOTIFY_OPTIONS* PPRINTERNOTIFYOPTIONS; - -struct PRINTPROCESSOR_INFO_1 -{ - LPTSTR pName; -} - -alias PRINTPROCESSOR_INFO_1 _PRINTPROCESSOR_INFO_1; -alias PRINTPROCESSOR_INFO_1 TPRINTPROCESSORINFO1; -alias PRINTPROCESSOR_INFO_1* PPRINTPROCESSORINFO1; - -struct PRIVILEGE_SET -{ - DWORD PrivilegeCount; - DWORD Control; - LUID_AND_ATTRIBUTES[1 + ANYSIZE_ARRAY-1] Privilege; -} - -alias PRIVILEGE_SET* LPPRIVILEGE_SET; -alias PRIVILEGE_SET* PPRIVILEGE_SET; -alias PRIVILEGE_SET _PRIVILEGE_SET; -alias PRIVILEGE_SET TPRIVILEGESET; -alias PRIVILEGE_SET* PPRIVILEGESET; - -struct PROCESS_HEAPENTRY -{ - PVOID lpData; - DWORD cbData; - ubyte cbOverhead; - ubyte iRegionIndex; - ushort wFlags; - DWORD dwCommittedSize; - DWORD dwUnCommittedSize; - LPVOID lpFirstBlock; - LPVOID lpLastBlock; - HANDLE hMem; -} - -alias PROCESS_HEAPENTRY* LPPROCESS_HEAP_ENTRY; -alias PROCESS_HEAPENTRY _PROCESS_HEAP_ENTRY; -alias PROCESS_HEAPENTRY TPROCESSHEAPENTRY; -alias PROCESS_HEAPENTRY* PPROCESSHEAPENTRY; - -struct PROCESS_INFORMATION -{ - HANDLE hProcess; - HANDLE hThread; - DWORD dwProcessId; - DWORD dwThreadId; -} - -alias PROCESS_INFORMATION* LPPROCESS_INFORMATION; -alias PROCESS_INFORMATION _PROCESS_INFORMATION; -alias PROCESS_INFORMATION TPROCESSINFORMATION; -alias PROCESS_INFORMATION* PPROCESSINFORMATION; -extern(Windows){alias UINT (*LPFNPSPCALLBACK)(HWND, UINT, LPVOID);} -alias LPFNPSPCALLBACK TFNPSPCALLBACK; - -struct PROPSHEETPAGE_U1 -{ - - union - { - struct - { - LPCTSTR pszTemplate; - } - struct - { - LPCDLGTEMPLATE pResource; - } - } -} - - -struct PROPSHEETPAGE_U2 -{ - - union - { - struct - { - HICON hIcon; - } - struct - { - LPCTSTR pszIcon; - } - } -} - - -struct PROPSHEETPAGE -{ - DWORD dwSize; - DWORD dwFlags; - HINST hInstance; - PROPSHEETPAGE_U1 u1; - PROPSHEETPAGE_U2 u2; - LPCTSTR pszTitle; - DLGPROC pfnDlgProc; - LPARAM lParam; - LPFNPSPCALLBACK pfnCallback; - UINT* pcRefParent; -} - -alias PROPSHEETPAGE* LPPROPSHEETPAGE; -alias PROPSHEETPAGE* LPCPROPSHEETPAGE; -alias PROPSHEETPAGE _PROPSHEETPAGE; -alias PROPSHEETPAGE TPROPSHEETPAGE; -alias PROPSHEETPAGE* PPROPSHEETPAGE; - -struct EMPTYRECORD -{ -} - -alias EMPTYRECORD* HPROPSHEETPAGE; - -struct PROPSHEETHEADER_U1 -{ - - union - { - struct - { - HICON hIcon; - } - struct - { - LPCTSTR pszIcon; - } - } -} - - -struct PROPSHEETHEADER_U2 -{ - - union - { - struct - { - UINT nStartPage; - } - struct - { - LPCTSTR pStartPage; - } - } -} - - -struct PROPSHEETHEADER_U3 -{ - - union - { - struct - { - LPCPROPSHEETPAGE ppsp; - } - struct - { - HPROPSHEETPAGE* phpage; - } - } -} - - -struct PROPSHEETHEADER -{ - DWORD dwSize; - DWORD dwFlags; - HWND hwndParent; - HINST hInstance; - PROPSHEETHEADER_U1 u1; - LPCTSTR pszCaption; - UINT nPages; - PROPSHEETHEADER_U2 u2; - PROPSHEETHEADER_U3 u3; - PFNPROPSHEETCALLBACK pfnCallback; -} - -alias PROPSHEETHEADER* LPPROPSHEETHEADER; -alias PROPSHEETHEADER* LPCPROPSHEETHEADER; -alias PROPSHEETHEADER _PROPSHEETHEADER; -alias PROPSHEETHEADER TPROPSHEETHEADER; -alias PROPSHEETHEADER* PPROPSHEETHEADER; -extern(Windows){ -alias WINBOOL (*LPFNADDPROPSHEETPAGE)(HPROPSHEETPAGE, LPARAM); -alias WINBOOL (*LPFNADDPROPSHEETPAGES)(LPVOID, LPFNADDPROPSHEETPAGE, LPARAM); -} -alias LPFNADDPROPSHEETPAGE TFNADDPROPSHEETPAGE; -alias LPFNADDPROPSHEETPAGES TFNADDPROPSHEETPAGES; - -struct PROTOCOL_INFO -{ - DWORD dwServiceFlags; - INT iAddressFamily; - INT iMaxSockAddr; - INT iMinSockAddr; - INT iSocketType; - INT iProtocol; - DWORD dwMessageSize; - LPTSTR lpProtocol; -} - -alias PROTOCOL_INFO _PROTOCOL_INFO; -alias PROTOCOL_INFO TPROTOCOLINFO; -alias PROTOCOL_INFO* PPROTOCOLINFO; - -struct PROVIDOR_INFO_1 -{ - LPTSTR pName; - LPTSTR pEnvironment; - LPTSTR pDLLName; -} - -alias PROVIDOR_INFO_1 _PROVIDOR_INFO_1; -alias PROVIDOR_INFO_1 TPROVIDORINFO1; -alias PROVIDOR_INFO_1* PPROVIDORINFO1; - -struct PSHNOTIFY -{ - NMHDR hdr; - LPARAM lParam; -} - -alias PSHNOTIFY* LPPSHNOTIFY; -alias PSHNOTIFY _PSHNOTIFY; -alias PSHNOTIFY TPSHNOTIFY; -alias PSHNOTIFY* PPSHNOTIFY; - -struct PUNCTUATION -{ - UINT iSize; - LPSTR szPunctuation; -} - -alias PUNCTUATION _PUNCTUATION; -alias PUNCTUATION TPUNCTUATION; -alias PUNCTUATION* PPUNCTUATION; - -struct QUERY_SERVICE_CONFIG -{ - DWORD dwServiceType; - DWORD dwStartType; - DWORD dwErrorControl; - LPTSTR lpBinaryPathName; - LPTSTR lpLoadOrderGroup; - DWORD dwTagId; - LPTSTR lpDependencies; - LPTSTR lpServiceStartName; - LPTSTR lpDisplayName; -} - -alias QUERY_SERVICE_CONFIG* LPQUERY_SERVICE_CONFIG; -alias QUERY_SERVICE_CONFIG _QUERY_SERVICE_CONFIG; -alias QUERY_SERVICE_CONFIG TQUERYSERVICECONFIG; -alias QUERY_SERVICE_CONFIG* PQUERYSERVICECONFIG; - -struct QUERY_SERVICE_LOCK_STATUS -{ - DWORD fIsLocked; - LPTSTR lpLockOwner; - DWORD dwLockDuration; -} - -alias QUERY_SERVICE_LOCK_STATUS* LPQUERY_SERVICE_LOCK_STATUS; -alias QUERY_SERVICE_LOCK_STATUS _QUERY_SERVICE_LOCK_STATUS; -alias QUERY_SERVICE_LOCK_STATUS TQUERYSERVICELOCKSTATUS; -alias QUERY_SERVICE_LOCK_STATUS* PQUERYSERVICELOCKSTATUS; - -struct RASAMB -{ - DWORD dwSize; - DWORD dwError; - TCHAR[1 + NETBIOS_NAME_LEN+1-1] szNetBiosError; - ubyte bLana; -} - -alias RASAMB _RASAMB; -alias RASAMB TRASAMB; -alias RASAMB* PRASAMB; - -struct RASCONN -{ - DWORD dwSize; - HRASCONN hrasconn; - TCHAR[1 + RAS_MaxEntryName+1-1] szEntryName; - char[1 + RAS_MaxDeviceType+1-1] szDeviceType; - char[1 + RAS_MaxDeviceName+1-1] szDeviceName; -} - -alias RASCONN _RASCONN; -alias RASCONN TRASCONN; -alias RASCONN* PRASCONN; - -struct RASCONNSTATUS -{ - DWORD dwSize; - RASCONNSTATE rasconnstate; - DWORD dwError; - TCHAR[1 + RAS_MaxDeviceType+1-1] szDeviceType; - TCHAR[1 + RAS_MaxDeviceName+1-1] szDeviceName; -} - -alias RASCONNSTATUS _RASCONNSTATUS; -alias RASCONNSTATUS TRASCONNSTATUS; -alias RASCONNSTATUS* PRASCONNSTATUS; - -struct RASDIALEXTENSIONS -{ - DWORD dwSize; - DWORD dwfOptions; - HWND hwndParent; - DWORD reserved; -} - -alias RASDIALEXTENSIONS _RASDIALEXTENSIONS; -alias RASDIALEXTENSIONS TRASDIALEXTENSIONS; -alias RASDIALEXTENSIONS* PRASDIALEXTENSIONS; - -struct RASDIALPARAMS -{ - DWORD dwSize; - TCHAR[1 + RAS_MaxEntryName+1-1] szEntryName; - TCHAR[1 + RAS_MaxPhoneNumber+1-1] szPhoneNumber; - TCHAR[1 + (RAS_MaxCallbackNumber+1)-1] szCallbackNumber; - TCHAR[1 + (UNLEN+1)-1] szUserName; - TCHAR[1 + (PWLEN+1)-1] szPassword; - TCHAR[1 + (DNLEN+1)-1] szDomain; -} - -alias RASDIALPARAMS _RASDIALPARAMS; -alias RASDIALPARAMS TRASDIALPARAMS; -alias RASDIALPARAMS* PRASDIALPARAMS; - -struct RASENTRYNAME -{ - DWORD dwSize; - TCHAR[1 + (RAS_MaxEntryName+1)-1] szEntryName; -} - -alias RASENTRYNAME _RASENTRYNAME; -alias RASENTRYNAME TRASENTRYNAME; -alias RASENTRYNAME* PRASENTRYNAME; - -struct RASPPPIP -{ - DWORD dwSize; - DWORD dwError; - TCHAR[1 + (RAS_MaxIpAddress+1)-1] szIpAddress; -} - -alias RASPPPIP _RASPPPIP; -alias RASPPPIP TRASPPPIP; -alias RASPPPIP* PRASPPPIP; - -struct RASPPPIPX -{ - DWORD dwSize; - DWORD dwError; - TCHAR[1 + (RAS_MaxIpxAddress+1)-1] szIpxAddress; -} - -alias RASPPPIPX _RASPPPIPX; -alias RASPPPIPX TRASPPPIPX; -alias RASPPPIPX* PRASPPPIPX; - -struct RASPPPNBF -{ - DWORD dwSize; - DWORD dwError; - DWORD dwNetBiosError; - TCHAR[1 + (NETBIOS_NAME_LEN+1)-1] szNetBiosError; - TCHAR[1 + (NETBIOS_NAME_LEN+1)-1] szWorkstationName; - ubyte bLana; -} - -alias RASPPPNBF _RASPPPNBF; -alias RASPPPNBF TRASPPPNBF; -alias RASPPPNBF* PRASPPPNBF; - -struct RASTERIZER_STATUS -{ - int nSize; - int wFlags; - int nLanguageID; -} - -alias RASTERIZER_STATUS* LPRASTERIZER_STATUS; -alias RASTERIZER_STATUS _RASTERIZER_STATUS; -alias RASTERIZER_STATUS TRASTERIZERSTATUS; -alias RASTERIZER_STATUS* PRASTERIZERSTATUS; - -struct REASSIGN_BLOCKS -{ - ushort Reserved; - ushort Count; - DWORD[1 + 0] BlockNumber; -} - -alias REASSIGN_BLOCKS _REASSIGN_BLOCKS; -alias REASSIGN_BLOCKS TREASSIGNBLOCKS; -alias REASSIGN_BLOCKS* PREASSIGNBLOCKS; - -struct REMOTE_NAME_INFO -{ - LPTSTR lpUniversalName; - LPTSTR lpConnectionName; - LPTSTR lpRemainingPath; -} - -alias REMOTE_NAME_INFO _REMOTE_NAME_INFO; -alias REMOTE_NAME_INFO TREMOTENAMEINFO; -alias REMOTE_NAME_INFO* PREMOTENAMEINFO; - -struct REPASTESPECIAL -{ - DWORD dwAspect; - DWORD dwParam; -} - -alias REPASTESPECIAL _REPASTESPECIAL; -alias REPASTESPECIAL TREPASTESPECIAL; -alias REPASTESPECIAL* PREPASTESPECIAL; - -struct REQRESIZE -{ - NMHDR nmhdr; - RECT rc; -} - -alias REQRESIZE _REQRESIZE; -alias REQRESIZE TREQRESIZE; -alias REQRESIZE* PREQRESIZE; - -struct RGNDATAHEADER -{ - DWORD dwSize; - DWORD iType; - DWORD nCount; - DWORD nRgnSize; - RECT rcBound; -} - -alias RGNDATAHEADER _RGNDATAHEADER; -alias RGNDATAHEADER TRGNDATAHEADER; -alias RGNDATAHEADER* PRGNDATAHEADER; - -struct RGNDATA -{ - RGNDATAHEADER rdh; - char[1 + 0] Buffer; -} - -alias RGNDATA* LPRGNDATA; -alias RGNDATA _RGNDATA; -alias RGNDATA TRGNDATA; -alias RGNDATA* PRGNDATA; - -struct SCROLLINFO -{ - UINT cbSize; - UINT fMask; - int nMin; - int nMax; - UINT nPage; - int nPos; - int nTrackPos; -} - -alias SCROLLINFO* LPSCROLLINFO; -alias SCROLLINFO* LPCSCROLLINFO; -alias SCROLLINFO TAGSCROLLINFO; -alias SCROLLINFO TSCROLLINFO; -alias SCROLLINFO* PSCROLLINFO; - -struct SECURITY_ATTRIBUTES -{ - DWORD nLength; - LPVOID lpSecurityDescriptor; - WINBOOL bInheritHandle; -} - -alias SECURITY_ATTRIBUTES* LPSECURITY_ATTRIBUTES; -alias SECURITY_ATTRIBUTES _SECURITY_ATTRIBUTES; -alias SECURITY_ATTRIBUTES TSECURITYATTRIBUTES; -alias SECURITY_ATTRIBUTES* PSECURITYATTRIBUTES; -alias DWORD SECURITY_INFORMATION; -alias SECURITY_INFORMATION* PSECURITY_INFORMATION; -alias SECURITY_INFORMATION TSECURITYINFORMATION; -alias SECURITY_INFORMATION* PSECURITYINFORMATION; - -struct SELCHANGE -{ - NMHDR nmhdr; - CHARRANGE chrg; - ushort seltyp; -} - -alias SELCHANGE _SELCHANGE; -alias SELCHANGE TSELCHANGE; -alias SELCHANGE* PSELCHANGE; - -struct SERIALKEYS -{ - DWORD cbSize; - DWORD dwFlags; - LPSTR lpszActivePort; - LPSTR lpszPort; - DWORD iBaudRate; - DWORD iPortState; -} - -alias SERIALKEYS* LPSERIALKEYS; -alias SERIALKEYS TAGSERIALKEYS; -alias SERIALKEYS TSERIALKEYS; -alias SERIALKEYS* PSERIALKEYS; - -struct SERVICE_TABLE_ENTRY -{ - LPTSTR lpServiceName; - LPSERVICE_MAIN_FUNCTION lpServiceProc; -} - -alias SERVICE_TABLE_ENTRY* LPSERVICE_TABLE_ENTRY; -alias SERVICE_TABLE_ENTRY _SERVICE_TABLE_ENTRY; -alias SERVICE_TABLE_ENTRY TSERVICETABLEENTRY; -alias SERVICE_TABLE_ENTRY* PSERVICETABLEENTRY; - -struct SERVICE_TYPE_VALUE_ABS -{ - DWORD dwNameSpace; - DWORD dwValueType; - DWORD dwValueSize; - LPTSTR lpValueName; - PVOID lpValue; -} - -alias SERVICE_TYPE_VALUE_ABS _SERVICE_TYPE_VALUE_ABS; -alias SERVICE_TYPE_VALUE_ABS TSERVICETYPEVALUEABS; -alias SERVICE_TYPE_VALUE_ABS* PSERVICETYPEVALUEABS; - -struct SERVICE_TYPE_INFO_ABS -{ - LPTSTR lpTypeName; - DWORD dwValueCount; - SERVICE_TYPE_VALUE_ABS[1 + 0] Values; -} - -alias SERVICE_TYPE_INFO_ABS _SERVICE_TYPE_INFO_ABS; -alias SERVICE_TYPE_INFO_ABS TSERVICETYPEINFOABS; -alias SERVICE_TYPE_INFO_ABS* PSERVICETYPEINFOABS; - -struct SESSION_BUFFER -{ - UCHAR lsn; - UCHAR state; - UCHAR[1 + NCBNAMSZ-1] local_name; - UCHAR[1 + NCBNAMSZ-1] remote_name; - UCHAR rcvs_outstanding; - UCHAR sends_outstanding; -} - -alias SESSION_BUFFER _SESSION_BUFFER; -alias SESSION_BUFFER TSESSIONBUFFER; -alias SESSION_BUFFER* PSESSIONBUFFER; - -struct SESSION_HEADER -{ - UCHAR sess_name; - UCHAR num_sess; - UCHAR rcv_dg_outstanding; - UCHAR rcv_any_outstanding; -} - -alias SESSION_HEADER _SESSION_HEADER; -alias SESSION_HEADER TSESSIONHEADER; -alias SESSION_HEADER* PSESSIONHEADER; - -struct SET_PARTITION_INFORMATION -{ - ubyte PartitionType; -} - -alias SET_PARTITION_INFORMATION _SET_PARTITION_INFORMATION; -alias SET_PARTITION_INFORMATION TSETPARTITIONINFORMATION; -alias SET_PARTITION_INFORMATION* PSETPARTITIONINFORMATION; -alias int SHCONTF; -enum { SHCONTF_FOLDERS = 32, SHCONTF_NONFOLDERS = 64, SHCONTF_INCLUDEHIDDEN = 128, }; -alias SHCONTF TAGSHCONTF; -alias SHCONTF TSHCONTF; - -struct SHFILEINFO -{ - HICON hIcon; - int iIcon; - DWORD dwAttributes; - char[1 + MAX_PATH-1] szDisplayName; - char[1 + 79] szTypeName; -} - -alias SHFILEINFO _SHFILEINFO; -alias SHFILEINFO TSHFILEINFO; -alias SHFILEINFO* PSHFILEINFO; -alias ushort FILEOP_FLAGS; -alias FILEOP_FLAGS TFILEOPFLAGS; -alias FILEOP_FLAGS* PFILEOPFLAGS; - -struct SHFILEOPSTRUCT -{ - HWND hwnd; - UINT wFunc; - LPCSTR pFrom; - LPCSTR pTo; - FILEOP_FLAGS fFlags; - WINBOOL fAnyOperationsAborted; - LPVOID hNameMappings; - LPCSTR lpszProgressTitle; -} - -alias SHFILEOPSTRUCT* LPSHFILEOPSTRUCT; -alias SHFILEOPSTRUCT _SHFILEOPSTRUCT; -alias SHFILEOPSTRUCT TSHFILEOPSTRUCT; -alias SHFILEOPSTRUCT* PSHFILEOPSTRUCT; -alias int SHGNO; -enum { SHGDN_NORMAL = 0, SHGDN_INFOLDER = 1, SHGDN_FORPARSING = 0x8000, }; -alias SHGNO TAGSHGDN; -alias SHGNO TSHGDN; - -struct SHNAMEMAPPING -{ - LPSTR pszOldPath; - LPSTR pszNewPath; - int cchOldPath; - int cchNewPath; -} - -alias SHNAMEMAPPING* LPSHNAMEMAPPING; -alias SHNAMEMAPPING _SHNAMEMAPPING; -alias SHNAMEMAPPING TSHNAMEMAPPING; -alias SHNAMEMAPPING* PSHNAMEMAPPING; - -struct SID_AND_ATTRIBUTES -{ - PSID Sid; - DWORD Attributes; -} - -alias SID_AND_ATTRIBUTES _SID_AND_ATTRIBUTES; -alias SID_AND_ATTRIBUTES TSIDANDATTRIBUTES; -alias SID_AND_ATTRIBUTES* PSIDANDATTRIBUTES; -alias SID_AND_ATTRIBUTES[1 + ANYSIZE_ARRAY-1] SID_AND_ATTRIBUTES_ARRAY; -alias SID_AND_ATTRIBUTES_ARRAY* PSID_AND_ATTRIBUTES_ARRAY; -alias SID_AND_ATTRIBUTES_ARRAY TSIDANDATTRIBUTESARRAY; -alias SID_AND_ATTRIBUTES_ARRAY* PSIDANDATTRIBUTESARRAY; - -struct SINGLE_LIST_ENTRY -{ - _SINGLE_LIST_ENTRY* Next; -} - -alias SINGLE_LIST_ENTRY _SINGLE_LIST_ENTRY; -alias SINGLE_LIST_ENTRY TSINGLELISTENTRY; -alias SINGLE_LIST_ENTRY* PSINGLELISTENTRY; - -struct SOUNDSENTRY -{ - UINT cbSize; - DWORD dwFlags; - DWORD iFSTextEffect; - DWORD iFSTextEffectMSec; - DWORD iFSTextEffectColorBits; - DWORD iFSGrafEffect; - DWORD iFSGrafEffectMSec; - DWORD iFSGrafEffectColor; - DWORD iWindowsEffect; - DWORD iWindowsEffectMSec; - LPTSTR lpszWindowsEffectDLL; - DWORD iWindowsEffectOrdinal; -} - -alias SOUNDSENTRY* LPSOUNDSENTRY; -alias SOUNDSENTRY TAGSOUNDSENTRY; -alias SOUNDSENTRY TSOUNDSENTRY; -alias SOUNDSENTRY* PSOUNDSENTRY; - -struct STARTUPINFO -{ - DWORD cb; - LPTSTR lpReserved; - LPTSTR lpDesktop; - LPTSTR lpTitle; - DWORD dwX; - DWORD dwY; - DWORD dwXSize; - DWORD dwYSize; - DWORD dwXCountChars; - DWORD dwYCountChars; - DWORD dwFillAttribute; - DWORD dwFlags; - ushort wShowWindow; - ushort cbReserved2; - LPBYTE lpReserved2; - HANDLE hStdInput; - HANDLE hStdOutput; - HANDLE hStdError; -} - -alias STARTUPINFO* LPSTARTUPINFO; -alias STARTUPINFO _STARTUPINFO; -alias STARTUPINFO TSTARTUPINFO; -alias STARTUPINFO* PSTARTUPINFO; - -struct STICKYKEYS -{ - DWORD cbSize; - DWORD dwFlags; -} - -alias STICKYKEYS* LPSTICKYKEYS; -alias STICKYKEYS TAGSTICKYKEYS; -alias STICKYKEYS TSTICKYKEYS; -alias STICKYKEYS* PSTICKYKEYS; - -struct STRRET -{ - UINT uType; - - union - { - struct - { - LPWSTR pOleStr; - } - struct - { - UINT uOffset; - } - struct - { - char[1 + MAX_PATH-1] cStr; - } - } -} - -alias STRRET* LPSTRRET; -alias STRRET _STRRET; -alias STRRET TSTRRET; -alias STRRET* PSTRRET; - -struct STYLEBUF -{ - DWORD dwStyle; - char[1 + 31] szDescription; -} - -alias STYLEBUF* LPSTYLEBUF; -alias STYLEBUF _TAGSTYLEBUF; -alias STYLEBUF TSTYLEBUF; -alias STYLEBUF* PSTYLEBUF; - -struct STYLESTRUCT -{ - DWORD styleOld; - DWORD styleNew; -} - -alias STYLESTRUCT* LPSTYLESTRUCT; -alias STYLESTRUCT TAGSTYLESTRUCT; -alias STYLESTRUCT TSTYLESTRUCT; -alias STYLESTRUCT* PSTYLESTRUCT; - -struct SYSTEM_AUDIT_ACE -{ - ACE_HEADER Header; - ACCESS_MASK Mask; - DWORD SidStart; -} - -alias SYSTEM_AUDIT_ACE _SYSTEM_AUDIT_ACE; -alias SYSTEM_AUDIT_ACE TSYSTEMAUDITACE; -alias SYSTEM_AUDIT_ACE* PSYSTEMAUDITACE; - -struct SYSTEM_INFO_U -{ - - union - { - struct - { - DWORD dwOemId; - } - struct - { - ushort wProcessorArchitecture; - ushort wReserved; - } - } -} - - -struct SYSTEM_INFO -{ - SYSTEM_INFO_U u; - DWORD dwPageSize; - LPVOID lpMinimumApplicationAddress; - LPVOID lpMaximumApplicationAddress; - DWORD dwActiveProcessorMask; - DWORD dwNumberOfProcessors; - DWORD dwProcessorType; - DWORD dwAllocationGranularity; - ushort wProcessorLevel; - ushort wProcessorRevision; -} - -alias SYSTEM_INFO* LPSYSTEM_INFO; -alias SYSTEM_INFO _SYSTEM_INFO; -alias SYSTEM_INFO TSYSTEMINFO; -alias SYSTEM_INFO* PSYSTEMINFO; - -struct SYSTEM_POWER_STATUS -{ - ubyte ACLineStatus; - ubyte BatteryFlag; - ubyte BatteryLifePercent; - ubyte Reserved1; - DWORD BatteryLifeTime; - DWORD BatteryFullLifeTime; -} - -alias SYSTEM_POWER_STATUS _SYSTEM_POWER_STATUS; -alias SYSTEM_POWER_STATUS TSYSTEMPOWERSTATUS; -alias SYSTEM_POWER_STATUS* PSYSTEMPOWERSTATUS; -alias EMPTYRECORD* LPSYSTEM_POWER_STATUS; - -struct TAPE_ERASE -{ - ULONG _Type; -} - -alias TAPE_ERASE _TAPE_ERASE; -alias TAPE_ERASE TTAPEERASE; -alias TAPE_ERASE* PTAPEERASE; - -struct TAPE_GET_DRIVE_PARAMETERS -{ - ubyte ECC; - ubyte Compression; - ubyte DataPadding; - ubyte ReportSetmarks; - ULONG DefaultBlockSize; - ULONG MaximumBlockSize; - ULONG MinimumBlockSize; - ULONG MaximumPartitionCount; - ULONG FeaturesLow; - ULONG FeaturesHigh; - ULONG EOTWarningZoneSize; -} - -alias TAPE_GET_DRIVE_PARAMETERS _TAPE_GET_DRIVE_PARAMETERS; -alias TAPE_GET_DRIVE_PARAMETERS TTAPEGETDRIVEPARAMETERS; -alias TAPE_GET_DRIVE_PARAMETERS* PTAPEGETDRIVEPARAMETERS; - -struct TAPE_GET_MEDIA_PARAMETERS -{ - LARGE_INTEGER Capacity; - LARGE_INTEGER Remaining; - DWORD BlockSize; - DWORD PartitionCount; - ubyte WriteProtected; -} - -alias TAPE_GET_MEDIA_PARAMETERS _TAPE_GET_MEDIA_PARAMETERS; -alias TAPE_GET_MEDIA_PARAMETERS TTAPEGETMEDIAPARAMETERS; -alias TAPE_GET_MEDIA_PARAMETERS* PTAPEGETMEDIAPARAMETERS; - -struct TAPE_GET_POSITION -{ - ULONG _Type; - ULONG Partition; - ULONG OffsetLow; - ULONG OffsetHigh; -} - -alias TAPE_GET_POSITION _TAPE_GET_POSITION; -alias TAPE_GET_POSITION TTAPEGETPOSITION; -alias TAPE_GET_POSITION* PTAPEGETPOSITION; - -struct TAPE_PREPARE -{ - ULONG Operation; -} - -alias TAPE_PREPARE _TAPE_PREPARE; -alias TAPE_PREPARE TTAPEPREPARE; -alias TAPE_PREPARE* PTAPEPREPARE; - -struct TAPE_SET_DRIVE_PARAMETERS -{ - ubyte ECC; - ubyte Compression; - ubyte DataPadding; - ubyte ReportSetmarks; - ULONG EOTWarningZoneSize; -} - -alias TAPE_SET_DRIVE_PARAMETERS _TAPE_SET_DRIVE_PARAMETERS; -alias TAPE_SET_DRIVE_PARAMETERS TTAPESETDRIVEPARAMETERS; -alias TAPE_SET_DRIVE_PARAMETERS* PTAPESETDRIVEPARAMETERS; - -struct TAPE_SET_MEDIA_PARAMETERS -{ - ULONG BlockSize; -} - -alias TAPE_SET_MEDIA_PARAMETERS _TAPE_SET_MEDIA_PARAMETERS; -alias TAPE_SET_MEDIA_PARAMETERS TTAPESETMEDIAPARAMETERS; -alias TAPE_SET_MEDIA_PARAMETERS* PTAPESETMEDIAPARAMETERS; - -struct TAPE_SET_POSITION -{ - ULONG Method; - ULONG Partition; - ULONG OffsetLow; - ULONG OffsetHigh; -} - -alias TAPE_SET_POSITION _TAPE_SET_POSITION; -alias TAPE_SET_POSITION TTAPESETPOSITION; -alias TAPE_SET_POSITION* PTAPESETPOSITION; - -struct TAPE_WRITE_MARKS -{ - ULONG _Type; - ULONG Count; -} - -alias TAPE_WRITE_MARKS _TAPE_WRITE_MARKS; -alias TAPE_WRITE_MARKS TTAPEWRITEMARKS; -alias TAPE_WRITE_MARKS* PTAPEWRITEMARKS; - -struct TBADDBITMAP -{ - HINST hInst; - UINT nID; -} - -alias TBADDBITMAP* LPTBADDBITMAP; -alias TBADDBITMAP TTBADDBITMAP; -alias TBADDBITMAP* PTBADDBITMAP; - -struct TBBUTTON -{ - int iBitmap; - int idCommand; - ubyte fsState; - ubyte fsStyle; - DWORD dwData; - int iString; -} - -alias TBBUTTON* LPTBBUTTON; -alias TBBUTTON* LPCTBBUTTON; -alias TBBUTTON _TBBUTTON; -alias TBBUTTON TTBBUTTON; -alias TBBUTTON* PTBBUTTON; - -struct TBNOTIFY -{ - NMHDR hdr; - int iItem; - TBBUTTON tbButton; - int cchText; - LPTSTR pszText; -} - -alias TBNOTIFY* LPTBNOTIFY; -alias TBNOTIFY TTBNOTIFY; -alias TBNOTIFY* PTBNOTIFY; - -struct TBSAVEPARAMS -{ - HKEY hkr; - LPCTSTR pszSubKey; - LPCTSTR pszValueName; -} - -alias TBSAVEPARAMS TTBSAVEPARAMS; -alias TBSAVEPARAMS* PTBSAVEPARAMS; - -struct TC_HITTESTINFO -{ - POINT pt; - UINT flags; -} - -alias TC_HITTESTINFO _TC_HITTESTINFO; -alias TC_HITTESTINFO TTCHITTESTINFO; -alias TC_HITTESTINFO* PTCHITTESTINFO; - -struct TC_ITEM -{ - UINT mask; - UINT lpReserved1; - UINT lpReserved2; - LPTSTR pszText; - int cchTextMax; - int iImage; - LPARAM lParam; -} - -alias TC_ITEM _TC_ITEM; -alias TC_ITEM TTCITEM; -alias TC_ITEM* PTCITEM; - -struct TC_ITEMHEADER -{ - UINT mask; - UINT lpReserved1; - UINT lpReserved2; - LPTSTR pszText; - int cchTextMax; - int iImage; -} - -alias TC_ITEMHEADER _TC_ITEMHEADER; -alias TC_ITEMHEADER TTCITEMHEADER; -alias TC_ITEMHEADER* PTCITEMHEADER; - -struct TC_KEYDOWN -{ - NMHDR hdr; - ushort wVKey; - UINT flags; -} - -alias TC_KEYDOWN _TC_KEYDOWN; -alias TC_KEYDOWN TTCKEYDOWN; -alias TC_KEYDOWN* PTCKEYDOWN; - -struct TEXTRANGE -{ - CHARRANGE chrg; - LPSTR lpstrText; -} - -alias TEXTRANGE _TEXTRANGE; -alias TEXTRANGE TTEXTRANGE; -alias TEXTRANGE* PTEXTRANGE; - -struct TIME_ZONE_INFORMATION -{ - LONG Bias; - WCHAR[1 + 31] StandardName; - SYSTEMTIME StandardDate; - LONG StandardBias; - WCHAR[1 + 31] DaylightName; - SYSTEMTIME DaylightDate; - LONG DaylightBias; -} - -alias TIME_ZONE_INFORMATION* LPTIME_ZONE_INFORMATION; -alias TIME_ZONE_INFORMATION _TIME_ZONE_INFORMATION; -alias TIME_ZONE_INFORMATION TTIMEZONEINFORMATION; -alias TIME_ZONE_INFORMATION* PTIMEZONEINFORMATION; - -struct TOGGLEKEYS -{ - DWORD cbSize; - DWORD dwFlags; -} - -alias TOGGLEKEYS TAGTOGGLEKEYS; -alias TOGGLEKEYS TTOGGLEKEYS; -alias TOGGLEKEYS* PTOGGLEKEYS; - -struct TOKEN_SOURCE -{ - char[1 + 7] SourceName; - LUID SourceIdentifier; -} - -alias TOKEN_SOURCE _TOKEN_SOURCE; -alias TOKEN_SOURCE TTOKENSOURCE; -alias TOKEN_SOURCE* PTOKENSOURCE; - -struct TOKEN_CONTROL -{ - LUID TokenId; - LUID AuthenticationId; - LUID ModifiedId; - TOKEN_SOURCE TokenSource; -} - -alias TOKEN_CONTROL _TOKEN_CONTROL; -alias TOKEN_CONTROL TTOKENCONTROL; -alias TOKEN_CONTROL* PTOKENCONTROL; - -struct TOKEN_DEFAULT_DACL -{ - PACL DefaultDacl; -} - -alias TOKEN_DEFAULT_DACL _TOKEN_DEFAULT_DACL; -alias TOKEN_DEFAULT_DACL TTOKENDEFAULTDACL; -alias TOKEN_DEFAULT_DACL* PTOKENDEFAULTDACL; - -struct TOKEN_GROUPS -{ - DWORD GroupCount; - SID_AND_ATTRIBUTES[1 + ANYSIZE_ARRAY-1] Groups; -} - -alias TOKEN_GROUPS* PTOKEN_GROUPS; -alias TOKEN_GROUPS* LPTOKEN_GROUPS; -alias TOKEN_GROUPS _TOKEN_GROUPS; -alias TOKEN_GROUPS TTOKENGROUPS; -alias TOKEN_GROUPS* PTOKENGROUPS; - -struct TOKEN_OWNER -{ - PSID Owner; -} - -alias TOKEN_OWNER _TOKEN_OWNER; -alias TOKEN_OWNER TTOKENOWNER; -alias TOKEN_OWNER* PTOKENOWNER; - -struct TOKEN_PRIMARY_GROUP -{ - PSID PrimaryGroup; -} - -alias TOKEN_PRIMARY_GROUP _TOKEN_PRIMARY_GROUP; -alias TOKEN_PRIMARY_GROUP TTOKENPRIMARYGROUP; -alias TOKEN_PRIMARY_GROUP* PTOKENPRIMARYGROUP; - -struct TOKEN_PRIVILEGES -{ - DWORD PrivilegeCount; - LUID_AND_ATTRIBUTES[1 + ANYSIZE_ARRAY-1] Privileges; -} - -alias TOKEN_PRIVILEGES* PTOKEN_PRIVILEGES; -alias TOKEN_PRIVILEGES* LPTOKEN_PRIVILEGES; -alias TOKEN_PRIVILEGES _TOKEN_PRIVILEGES; -alias TOKEN_PRIVILEGES TTOKENPRIVILEGES; -alias TOKEN_PRIVILEGES* PTOKENPRIVILEGES; - -struct TOKEN_STATISTICS -{ - LUID TokenId; - LUID AuthenticationId; - LARGE_INTEGER ExpirationTime; - TOKEN_TYPE TokenType; - SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; - DWORD DynamicCharged; - DWORD DynamicAvailable; - DWORD GroupCount; - DWORD PrivilegeCount; - LUID ModifiedId; -} - -alias TOKEN_STATISTICS _TOKEN_STATISTICS; -alias TOKEN_STATISTICS TTOKENSTATISTICS; -alias TOKEN_STATISTICS* PTOKENSTATISTICS; - -struct TOKEN_USER -{ - SID_AND_ATTRIBUTES User; -} - -alias TOKEN_USER _TOKEN_USER; -alias TOKEN_USER TTOKENUSER; -alias TOKEN_USER* PTOKENUSER; - -struct TOOLINFO -{ - UINT cbSize; - UINT uFlags; - HWND hwnd; - UINT uId; - RECT rect; - HINST hinst; - LPTSTR lpszText; -} - -alias TOOLINFO* LPTOOLINFO; -alias TOOLINFO TTOOLINFO; -alias TOOLINFO* PTOOLINFO; - -struct TOOLTIPTEXT -{ - NMHDR hdr; - LPTSTR lpszText; - char[1 + 79] szText; - HINST hinst; - UINT uFlags; -} - -alias TOOLTIPTEXT* LPTOOLTIPTEXT; -alias TOOLTIPTEXT TTOOLTIPTEXT; -alias TOOLTIPTEXT* PTOOLTIPTEXT; - -struct TPMPARAMS -{ - UINT cbSize; - RECT rcExclude; -} - -alias TPMPARAMS* LPTPMPARAMS; -alias TPMPARAMS TAGTPMPARAMS; -alias TPMPARAMS TTPMPARAMS; -alias TPMPARAMS* PTPMPARAMS; - -struct TRANSMIT_FILE_BUFFERS -{ - PVOID Head; - DWORD HeadLength; - PVOID Tail; - DWORD TailLength; -} - -alias TRANSMIT_FILE_BUFFERS _TRANSMIT_FILE_BUFFERS; -alias TRANSMIT_FILE_BUFFERS TTRANSMITFILEBUFFERS; -alias TRANSMIT_FILE_BUFFERS* PTRANSMITFILEBUFFERS; - -struct TTHITTESTINFO -{ - HWND hwnd; - POINT pt; - TOOLINFO ti; -} - -alias TTHITTESTINFO* LPHITTESTINFO; -alias TTHITTESTINFO _TT_HITTESTINFO; -alias TTHITTESTINFO TTTHITTESTINFO; -alias TTHITTESTINFO* PTTHITTESTINFO; - -struct TTPOLYCURVE -{ - ushort wType; - ushort cpfx; - POINTFX[1 + 0] apfx; -} - -alias TTPOLYCURVE* LPTTPOLYCURVE; -alias TTPOLYCURVE TAGTTPOLYCURVE; -alias TTPOLYCURVE TTTPOLYCURVE; -alias TTPOLYCURVE* PTTPOLYCURVE; - -struct TTPOLYGONHEADER -{ - DWORD cb; - DWORD dwType; - POINTFX pfxStart; -} - -alias TTPOLYGONHEADER* LPTTPOLYGONHEADER; -alias TTPOLYGONHEADER _TTPOLYGONHEADER; -alias TTPOLYGONHEADER TTTPOLYGONHEADER; -alias TTPOLYGONHEADER* PTTPOLYGONHEADER; - -struct TV_DISPINFO -{ - NMHDR hdr; - TV_ITEM item; -} - -alias TV_DISPINFO _TV_DISPINFO; -alias TV_DISPINFO TTVDISPINFO; -alias TV_DISPINFO* PTVDISPINFO; - -struct TV_HITTESTINFO -{ - POINT pt; - UINT flags; - HTREEITEM hItem; -} - -alias TV_HITTESTINFO* LPTV_HITTESTINFO; -alias TV_HITTESTINFO _TVHITTESTINFO; -alias TV_HITTESTINFO TTVHITTESTINFO; -alias TV_HITTESTINFO* PTVHITTESTINFO; - -struct TV_INSERTSTRUCT -{ - HTREEITEM hParent; - HTREEITEM hInsertAfter; - TV_ITEM item; -} - -alias TV_INSERTSTRUCT* LPTV_INSERTSTRUCT; -alias TV_INSERTSTRUCT _TV_INSERTSTRUCT; -alias TV_INSERTSTRUCT TTVINSERTSTRUCT; -alias TV_INSERTSTRUCT* PTVINSERTSTRUCT; - -struct TV_KEYDOWN -{ - NMHDR hdr; - ushort wVKey; - UINT flags; -} - -alias TV_KEYDOWN _TV_KEYDOWN; -alias TV_KEYDOWN TTVKEYDOWN; -alias TV_KEYDOWN* PTVKEYDOWN; - -struct TV_SORTCB -{ - HTREEITEM hParent; - PFNTVCOMPARE lpfnCompare; - LPARAM lParam; -} - -alias TV_SORTCB* LPTV_SORTCB; -alias TV_SORTCB _TV_SORTCB; -alias TV_SORTCB TTVSORTCB; -alias TV_SORTCB* PTVSORTCB; - -struct UDACCEL -{ - UINT nSec; - UINT nInc; -} - -alias UDACCEL TUDACCEL; -alias UDACCEL* PUDACCEL; - -struct ULARGE_INTEGER -{ - DWORD LowPart; - DWORD HighPart; -} - -alias ULARGE_INTEGER* PULARGE_INTEGER; -alias ULARGE_INTEGER _ULARGE_INTEGER; -alias ULARGE_INTEGER TULARGEINTEGER; -alias ULARGE_INTEGER* PULARGEINTEGER; - -struct UNIVERSAL_NAME_INFO -{ - LPTSTR lpUniversalName; -} - -alias UNIVERSAL_NAME_INFO _UNIVERSAL_NAME_INFO; -alias UNIVERSAL_NAME_INFO TUNIVERSALNAMEINFO; -alias UNIVERSAL_NAME_INFO* PUNIVERSALNAMEINFO; - -struct USEROBJECTFLAGS -{ - WINBOOL fInherit; - WINBOOL fReserved; - DWORD dwFlags; -} - -alias USEROBJECTFLAGS TAGUSEROBJECTFLAGS; -alias USEROBJECTFLAGS TUSEROBJECTFLAGS; -alias USEROBJECTFLAGS* PUSEROBJECTFLAGS; - -struct VALENT -{ - LPTSTR ve_valuename; - DWORD ve_valuelen; - DWORD ve_valueptr; - DWORD ve_type; -} - -alias VALENT TVALENT; -alias VALENT* PVALENT; -alias VALENT VALUE_ENT; -alias VALENT TVALUE_ENT; -alias VALENT* PVALUE_ENT; - -struct VERIFY_INFORMATION -{ - LARGE_INTEGER StartingOffset; - DWORD Length; -} - -alias VERIFY_INFORMATION _VERIFY_INFORMATION; -alias VERIFY_INFORMATION TVERIFYINFORMATION; -alias VERIFY_INFORMATION* PVERIFYINFORMATION; - -struct VS_FIXEDFILEINFO -{ - DWORD dwSignature; - DWORD dwStrucVersion; - DWORD dwFileVersionMS; - DWORD dwFileVersionLS; - DWORD dwProductVersionMS; - DWORD dwProductVersionLS; - DWORD dwFileFlagsMask; - DWORD dwFileFlags; - DWORD dwFileOS; - DWORD dwFileType; - DWORD dwFileSubtype; - DWORD dwFileDateMS; - DWORD dwFileDateLS; -} - -alias VS_FIXEDFILEINFO _VS_FIXEDFILEINFO; -alias VS_FIXEDFILEINFO TVSFIXEDFILEINFO; -alias VS_FIXEDFILEINFO* PVSFIXEDFILEINFO; - -struct WIN32_FIND_DATA -{ - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD dwReserved0; - DWORD dwReserved1; - TCHAR[1 + MAX_PATH-1] cFileName; - TCHAR[1 + 13] cAlternateFileName; -} - -alias WIN32_FIND_DATA* LPWIN32_FIND_DATA; -alias WIN32_FIND_DATA* PWIN32_FIND_DATA; -alias WIN32_FIND_DATA _WIN32_FIND_DATA; -alias WIN32_FIND_DATA TWIN32FINDDATA; -alias WIN32_FIND_DATA TWIN32FINDDATAA; -alias WIN32_FIND_DATA* PWIN32FINDDATA; - -struct WIN32_FIND_DATAW { - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; - DWORD dwReserved0; - DWORD dwReserved1; - WCHAR cFileName[MAX_PATH]; - WCHAR cAlternateFileName[14]; -} - -alias WIN32_FIND_DATAW* LPWIN32_FIND_DATAW; -alias WIN32_FIND_DATAW* PWIN32_FIND_DATAW; - -struct WIN32_FILE_ATTRIBUTE_DATA { - DWORD dwFileAttributes; - FILETIME ftCreationTime; - FILETIME ftLastAccessTime; - FILETIME ftLastWriteTime; - DWORD nFileSizeHigh; - DWORD nFileSizeLow; -} - -enum { - GetFileInfoLevelStandard, - GetFileInfoLevelMax -} - -struct WIN32_STREAM_ID -{ - DWORD dwStreamId; - DWORD dwStreamAttributes; - LARGE_INTEGER Size; - DWORD dwStreamNameSize; - WCHAR* cStreamName; -} - -alias WIN32_STREAM_ID _WIN32_STREAM_ID; -alias WIN32_STREAM_ID TWIN32STREAMID; -alias WIN32_STREAM_ID* PWIN32STREAMID; - -struct WINDOWPLACEMENT -{ - UINT length; - UINT flags; - UINT showCmd; - POINT ptMinPosition; - POINT ptMaxPosition; - RECT rcNormalPosition; -} - -alias WINDOWPLACEMENT _WINDOWPLACEMENT; -alias WINDOWPLACEMENT TWINDOWPLACEMENT; -alias WINDOWPLACEMENT* PWINDOWPLACEMENT; - -struct WNDCLASS -{ - UINT style; - WNDPROC lpfnWndProc; - int cbClsExtra; - int cbWndExtra; - HANDLE hInstance; - HICON hIcon; - HCURSOR hCursor; - HBRUSH hbrBackground; - LPCTSTR lpszMenuName; - LPCTSTR lpszClassName; -} - -alias WNDCLASS* LPWNDCLASS; -alias WNDCLASS _WNDCLASS; -alias WNDCLASS TWNDCLASS; -alias WNDCLASS TWNDCLASSA; -alias WNDCLASS* PWNDCLASS; - -struct WNDCLASSEX -{ - UINT cbSize; - UINT style; - WNDPROC lpfnWndProc; - int cbClsExtra; - int cbWndExtra; - HANDLE hInstance; - HICON hIcon; - HCURSOR hCursor; - HBRUSH hbrBackground; - LPCTSTR lpszMenuName; - LPCTSTR lpszClassName; - HANDLE hIconSm; -} - -alias WNDCLASSEX* LPWNDCLASSEX; -alias WNDCLASSEX _WNDCLASSEX; -alias WNDCLASSEX TWNDCLASSEX; -alias WNDCLASSEX TWNDCLASSEXA; -alias WNDCLASSEX* PWNDCLASSEX; - -struct CONNECTDLGSTRUCT -{ - DWORD cbStructure; - HWND hwndOwner; - LPNETRESOURCE lpConnRes; - DWORD dwFlags; - DWORD dwDevNum; -} - -alias CONNECTDLGSTRUCT* LPCONNECTDLGSTRUCT; -alias CONNECTDLGSTRUCT _CONNECTDLGSTRUCT; -alias CONNECTDLGSTRUCT TCONNECTDLGSTRUCT; -alias CONNECTDLGSTRUCT* PCONNECTDLGSTRUCT; - -struct DISCDLGSTRUCT -{ - DWORD cbStructure; - HWND hwndOwner; - LPTSTR lpLocalName; - LPTSTR lpRemoteName; - DWORD dwFlags; -} - -alias DISCDLGSTRUCT* LPDISCDLGSTRUCT; -alias DISCDLGSTRUCT _DISCDLGSTRUCT; -alias DISCDLGSTRUCT TDISCDLGSTRUCT; -alias DISCDLGSTRUCT TDISCDLGSTRUCTA; -alias DISCDLGSTRUCT* PDISCDLGSTRUCT; - -struct NETINFOSTRUCT -{ - DWORD cbStructure; - DWORD dwProviderVersion; - DWORD dwStatus; - DWORD dwCharacteristics; - DWORD dwHandle; - ushort wNetType; - DWORD dwPrinters; - DWORD dwDrives; -} - -alias NETINFOSTRUCT* LPNETINFOSTRUCT; -alias NETINFOSTRUCT _NETINFOSTRUCT; -alias NETINFOSTRUCT TNETINFOSTRUCT; -alias NETINFOSTRUCT* PNETINFOSTRUCT; - -struct NETCONNECTINFOSTRUCT -{ - DWORD cbStructure; - DWORD dwFlags; - DWORD dwSpeed; - DWORD dwDelay; - DWORD dwOptDataSize; -} - -alias NETCONNECTINFOSTRUCT* LPNETCONNECTINFOSTRUCT; -alias NETCONNECTINFOSTRUCT _NETCONNECTINFOSTRUCT; -alias NETCONNECTINFOSTRUCT TNETCONNECTINFOSTRUCT; -alias NETCONNECTINFOSTRUCT* PNETCONNECTINFOSTRUCT; -extern(Windows){ -alias int (*ENUMMETAFILEPROC)(HDC, HANDLETABLE, METARECORD, int, LPARAM); -alias int (*ENHMETAFILEPROC)(HDC, HANDLETABLE, ENHMETARECORD, int, LPARAM); -alias int (*ENUMFONTSPROC)(LPLOGFONT, LPTEXTMETRIC, DWORD, LPARAM); -alias int (*FONTENUMPROC)(ENUMLOGFONT*, NEWTEXTMETRIC*, int, LPARAM); -alias int (*FONTENUMEXPROC)(ENUMLOGFONTEX*, NEWTEXTMETRICEX*, int, LPARAM); -alias void (*LPOVERLAPPED_COMPLETION_ROUTINE)(DWORD, DWORD); -} - -struct POINTFLOAT -{ - FLOAT x; - FLOAT y; -} - -alias POINTFLOAT _POINTFLOAT; -alias POINTFLOAT TPOINTFLOAT; -alias POINTFLOAT* PPOINTFLOAT; - -struct GLYPHMETRICSFLOAT -{ - FLOAT gmfBlackBoxX; - FLOAT gmfBlackBoxY; - POINTFLOAT gmfptGlyphOrigin; - FLOAT gmfCellIncX; - FLOAT gmfCellIncY; -} - -alias GLYPHMETRICSFLOAT* LPGLYPHMETRICSFLOAT; -alias GLYPHMETRICSFLOAT _GLYPHMETRICSFLOAT; -alias GLYPHMETRICSFLOAT TGLYPHMETRICSFLOAT; -alias GLYPHMETRICSFLOAT* PGLYPHMETRICSFLOAT; - -struct LAYERPLANEDESCRIPTOR -{ - ushort nSize; - ushort nVersion; - DWORD dwFlags; - ubyte iPixelType; - ubyte cColorBits; - ubyte cRedBits; - ubyte cRedShift; - ubyte cGreenBits; - ubyte cGreenShift; - ubyte cBlueBits; - ubyte cBlueShift; - ubyte cAlphaBits; - ubyte cAlphaShift; - ubyte cAccumBits; - ubyte cAccumRedBits; - ubyte cAccumGreenBits; - ubyte cAccumBlueBits; - ubyte cAccumAlphaBits; - ubyte cDepthBits; - ubyte cStencilBits; - ubyte cAuxBuffers; - ubyte iLayerPlane; - ubyte bReserved; - COLORREF crTransparent; -} - -alias LAYERPLANEDESCRIPTOR* LPLAYERPLANEDESCRIPTOR; -alias LAYERPLANEDESCRIPTOR TAGLAYERPLANEDESCRIPTOR; -alias LAYERPLANEDESCRIPTOR TLAYERPLANEDESCRIPTOR; -alias LAYERPLANEDESCRIPTOR* PLAYERPLANEDESCRIPTOR; - -struct PIXELFORMATDESCRIPTOR -{ - ushort nSize; - ushort nVersion; - DWORD dwFlags; - ubyte iPixelType; - ubyte cColorBits; - ubyte cRedBits; - ubyte cRedShift; - ubyte cGreenBits; - ubyte cGreenShift; - ubyte cBlueBits; - ubyte cBlueShift; - ubyte cAlphaBits; - ubyte cAlphaShift; - ubyte cAccumBits; - ubyte cAccumRedBits; - ubyte cAccumGreenBits; - ubyte cAccumBlueBits; - ubyte cAccumAlphaBits; - ubyte cDepthBits; - ubyte cStencilBits; - ubyte cAuxBuffers; - ubyte iLayerType; - ubyte bReserved; - DWORD dwLayerMask; - DWORD dwVisibleMask; - DWORD dwDamageMask; -} - -alias PIXELFORMATDESCRIPTOR* LPPIXELFORMATDESCRIPTOR; -alias PIXELFORMATDESCRIPTOR TAGPIXELFORMATDESCRIPTOR; -alias PIXELFORMATDESCRIPTOR TPIXELFORMATDESCRIPTOR; -alias PIXELFORMATDESCRIPTOR* PPIXELFORMATDESCRIPTOR; - -struct USER_INFO_2 -{ - LPWSTR usri2_name; - LPWSTR usri2_password; - DWORD usri2_password_age; - DWORD usri2_priv; - LPWSTR usri2_home_dir; - LPWSTR usri2_comment; - DWORD usri2_flags; - LPWSTR usri2_script_path; - DWORD usri2_auth_flags; - LPWSTR usri2_full_name; - LPWSTR usri2_usr_comment; - LPWSTR usri2_parms; - LPWSTR usri2_workstations; - DWORD usri2_last_logon; - DWORD usri2_last_logoff; - DWORD usri2_acct_expires; - DWORD usri2_max_storage; - DWORD usri2_units_per_week; - PBYTE usri2_logon_hours; - DWORD usri2_bad_pw_count; - DWORD usri2_num_logons; - LPWSTR usri2_logon_server; - DWORD usri2_country_code; - DWORD usri2_code_page; -} - -alias USER_INFO_2* PUSER_INFO_2; -alias USER_INFO_2* LPUSER_INFO_2; -alias USER_INFO_2 TUSERINFO2; -alias USER_INFO_2* PUSERINFO2; - -struct USER_INFO_0 -{ - LPWSTR usri0_name; -} - -alias USER_INFO_0* PUSER_INFO_0; -alias USER_INFO_0* LPUSER_INFO_0; -alias USER_INFO_0 TUSERINFO0; -alias USER_INFO_0* PUSERINFO0; - -struct USER_INFO_3 -{ - LPWSTR usri3_name; - LPWSTR usri3_password; - DWORD usri3_password_age; - DWORD usri3_priv; - LPWSTR usri3_home_dir; - LPWSTR usri3_comment; - DWORD usri3_flags; - LPWSTR usri3_script_path; - DWORD usri3_auth_flags; - LPWSTR usri3_full_name; - LPWSTR usri3_usr_comment; - LPWSTR usri3_parms; - LPWSTR usri3_workstations; - DWORD usri3_last_logon; - DWORD usri3_last_logoff; - DWORD usri3_acct_expires; - DWORD usri3_max_storage; - DWORD usri3_units_per_week; - PBYTE usri3_logon_hours; - DWORD usri3_bad_pw_count; - DWORD usri3_num_logons; - LPWSTR usri3_logon_server; - DWORD usri3_country_code; - DWORD usri3_code_page; - DWORD usri3_user_id; - DWORD usri3_primary_group_id; - LPWSTR usri3_profile; - LPWSTR usri3_home_dir_drive; - DWORD usri3_password_expired; -} - -alias USER_INFO_3* PUSER_INFO_3; -alias USER_INFO_3* LPUSER_INFO_3; -alias USER_INFO_3 TUSERINFO3; -alias USER_INFO_3* PUSERINFO3; - -struct GROUP_INFO_2 -{ - LPWSTR grpi2_name; - LPWSTR grpi2_comment; - DWORD grpi2_group_id; - DWORD grpi2_attributes; -} - -alias GROUP_INFO_2* PGROUP_INFO_2; -alias GROUP_INFO_2 TGROUPINFO2; -alias GROUP_INFO_2* PGROUPINFO2; - -struct LOCALGROUP_INFO_0 -{ - LPWSTR lgrpi0_name; -} - -alias LOCALGROUP_INFO_0* PLOCALGROUP_INFO_0; -alias LOCALGROUP_INFO_0* LPLOCALGROUP_INFO_0; -alias LOCALGROUP_INFO_0 TLOCALGROUPINFO0; -alias LOCALGROUP_INFO_0* PLOCALGROUPINFO0; - -struct IMAGE_DOS_HEADER -{ - ushort e_magic; - ushort e_cblp; - ushort e_cp; - ushort e_crlc; - ushort e_cparhdr; - ushort e_minalloc; - ushort e_maxalloc; - ushort e_ss; - ushort e_sp; - ushort e_csum; - ushort e_ip; - ushort e_cs; - ushort e_lfarlc; - ushort e_ovno; - ushort[1 + 3] e_res; - ushort e_oemid; - ushort e_oeminfo; - ushort[1 + 9] e_res2; - LONG e_lfanew; -} - -alias IMAGE_DOS_HEADER* PIMAGE_DOS_HEADER; -alias IMAGE_DOS_HEADER TIMAGEDOSHEADER; -alias IMAGE_DOS_HEADER* PIMAGEDOSHEADER; -alias ushort TVARTYPE; -alias TVARIANT* PVARIANT; - -struct TVARIANT -{ - TVARTYPE vt; - ushort wReserved1; - ushort wReserved2; - ushort wReserved3; - - union - { - struct - { - ubyte bVal; - } - struct - { - byte iVal; - } - struct - { - int lVal; - } - struct - { - float fltVal; - } - struct - { - double dblVal; - } - struct - { - ushort vbool; - } - struct - { - HRESULT scode; - } - struct - { - ubyte* pbVal; - } - struct - { - byte* piVal; - } - struct - { - int* plVal; - } - struct - { - float* pfltVal; - } - struct - { - double* pdblVal; - } - struct - { - ushort* pbool; - } - struct - { - HRESULT* pscode; - } - struct - { - POINTER byRef; - } - } -} - -alias TVARIANT VARIANT; -alias int MMRESULT; -alias TWAVEFORMATEX* PWAVEFORMATEX; - -align(1) struct TWAVEFORMATEX -{ - ushort wFormatTag; - ushort nChannels; - DWORD nSamplesPerSec; - DWORD nAvgBytesPerSec; - ushort nBlockAlign; - ushort wBitsPerSample; - ushort cbSize; -} - -alias CRITICAL_SECTION TRTLCRITICALSECTION; -alias PCRITICAL_SECTION PRTLCRITICALSECTION; -alias PGUID PIID; -alias TGUID TIID; -alias HANDLE THANDLE; -alias TSMALLRECT* PSMALLRECT; -alias SMALL_RECT TSMALLRECT; -alias TCHARINFO* PCHARINFO; -alias _CHAR_INFO TCHARINFO; -alias POINTER TFARPROC; -alias POINTER TFNDLGPROC; -alias POINTER TFNTHREADSTARTROUTINE; - -struct _OBJECT_TYPE_LIST -{ - ushort Level; - ushort Sbz; - PGUID ObjectType; -} - -alias _OBJECT_TYPE_LIST TOBJECTTYPELIST; -alias TOBJECTTYPELIST* POBJECTTYPELIST; -alias _OBJECT_TYPE_LIST OBJECT_TYPE_LIST; -alias DWORD AUDIT_EVENT_TYPE; - -align(1) struct _BLENDFUNCTION -{ - ubyte BlendOp; - ubyte BlendFlags; - ubyte SourceConstantAlpha; - ubyte AlphaFormat; -} - -alias _BLENDFUNCTION TBLENDFUNCTION; -alias TBLENDFUNCTION* PBLENDFUNCTION; -alias _BLENDFUNCTION BLENDFUNCTION; - -alias HANDLE HMONITOR; - -struct tagMONITORINFOEX -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; - TCHAR szDevice[CCHDEVICENAME]; -} -alias tagMONITORINFOEX MONITORINFOEX; -alias MONITORINFOEX* LPMONITORINFOEX; - -struct tagMONITORINFO -{ - DWORD cbSize; - RECT rcMonitor; - RECT rcWork; - DWORD dwFlags; -} -alias tagMONITORINFO MONITORINFO; -alias MONITORINFO* LPMONITORINFO; - -struct WINDOWINFO -{ - DWORD cbSize; - RECT rcWindow; - RECT rcClient; - DWORD dwStyle; - DWORD dwExStyle; - DWORD dwWindowStatus; - UINT cxWindowBorders; - UINT cyWindowBorders; - ATOM atomWindowType; - short wCreatorVersion; -}; -alias WINDOWINFO* PWINDOWINFO; -alias WINDOWINFO* LPWINDOWINFO; - -/* -int S_OK = (0x00000000); -int S_FALSE = (0x00000001); -int NOERROR = (0); -int E_UNEXPECTED = (DWORD)((0x8000FFFF)); -int E_NOTIMPL = (DWORD)((0x80004001)); -int E_OUTOFMEMORY = (DWORD)((0x8007000E)); -int E_INVALIDARG = (DWORD)((0x80070057)); -int E_NOINTERFACE = (DWORD)((0x80004002)); -int E_POINTER = (DWORD)((0x80004003)); -int E_HANDLE = (DWORD)((0x80070006)); -int E_ABORT = (DWORD)((0x80004004)); -int E_FAIL = (DWORD)((0x80004005)); -int E_ACCESSDENIED = (DWORD)((0x80070005)); -int E_PENDING = (DWORD)((0x8000000A)); -int CO_E_INIT_TLS = (DWORD)((0x80004006)); -int CO_E_INIT_MEMORY_ALLOCATOR = (DWORD)((0x80004008)); -int CO_E_INIT_CLASS_CACHE = (DWORD)((0x80004009)); -int CO_E_INIT_RPC_CHANNEL = (DWORD)((0x8000400A)); -int CO_E_INIT_TLS_SET_CHANNEL_CONTROL = (DWORD)((0x8000400B)); -int CO_E_INIT_TLS_CHANNEL_CONTROL = (DWORD)((0x8000400C)); -int CO_E_INIT_UNACCEPTED_USER_ALLOCATOR = (DWORD)((0x8000400D)); -int CO_E_INIT_SCM_MUTEX_EXISTS = (DWORD)((0x8000400E)); -int CO_E_INIT_SCM_FILE_MAPPING_EXISTS = (DWORD)((0x8000400F)); -int CO_E_INIT_SCM_MAP_VIEW_OF_FILE = (DWORD)((0x80004010)); -int CO_E_INIT_SCM_EXEC_FAILURE = (DWORD)((0x80004011)); -int CO_E_INIT_ONLY_SINGLE_THREADED = (DWORD)((0x80004012)); -int CO_E_CANT_REMOTE = (DWORD)((0x80004013)); -int CO_E_BAD_SERVER_NAME = (DWORD)((0x80004014)); -int CO_E_WRONG_SERVER_IDENTITY = (DWORD)((0x80004015)); -int CO_E_OLE1DDE_DISABLED = (DWORD)((0x80004016)); -int CO_E_RUNAS_SYNTAX = (DWORD)((0x80004017)); -int CO_E_CREATEPROCESS_FAILURE = (DWORD)((0x80004018)); -int CO_E_RUNAS_CREATEPROCESS_FAILURE = (DWORD)((0x80004019)); -int CO_E_RUNAS_LOGON_FAILURE = (DWORD)((0x8000401A)); -int CO_E_LAUNCH_PERMSSION_DENIED = (DWORD)((0x8000401B)); -int CO_E_START_SERVICE_FAILURE = (DWORD)((0x8000401C)); -int CO_E_REMOTE_COMMUNICATION_FAILURE = (DWORD)((0x8000401D)); -int CO_E_SERVER_START_TIMEOUT = (DWORD)((0x8000401E)); -int CO_E_CLSREG_INCONSISTENT = (DWORD)((0x8000401F)); -int CO_E_IIDREG_INCONSISTENT = (DWORD)((0x80004020)); -int CO_E_NOT_SUPPORTED = (DWORD)((0x80004021)); -int CO_E_FIRST = (DWORD)((0x800401F0)); -int CO_E_LAST = (DWORD)((0x800401FF)); -int CO_S_FIRST = (0x401F0); -int CO_E_NOTINITIALIZED = (DWORD)((0x800401F0)); -int CO_E_ALREADYINITIALIZED = (DWORD)((0x800401F1)); -int CO_E_CANTDETERMINECLASS = (DWORD)((0x800401F2)); -int CO_E_CLASSSTRING = (DWORD)((0x800401F3)); -int CO_E_IIDSTRING = (DWORD)((0x800401F4)); -int CO_E_APPNOTFOUND = (DWORD)((0x800401F5)); -int CO_E_APPSINGLEUSE = (DWORD)((0x800401F6)); -int CO_E_ERRORINAPP = (DWORD)((0x800401F7)); -int CO_E_DLLNOTFOUND = (DWORD)((0x800401F8)); -int CO_E_ERRORINDLL = (DWORD)((0x800401F9)); -int CO_E_WRONGOSFORAPP = (DWORD)((0x800401FA)); -int CO_E_OBJNOTREG = (DWORD)((0x800401FB)); -int CO_E_OBJISREG = (DWORD)((0x800401FC)); -int CO_E_OBJNOTCONNECTED = (DWORD)((0x800401FD)); -int CO_E_APPDIDNTREG = (DWORD)((0x800401FE)); -int CO_E_RELEASED = (DWORD)((0x800401FF)); -*/ \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/sys/win32/UserGdi.di --- a/tango/tango/sys/win32/UserGdi.di Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1748 +0,0 @@ -module tango.sys.win32.UserGdi; - -/* - Module: Windows Functions - Author: Trevor Parscal -*/ - -/+ Imports +/ -public -{ - import tango.sys.win32.Types; -} - -/+ Functions +/ -extern(Windows) -{ - BOOL GetWindowInfo(HWND, PWINDOWINFO); - BOOL EnumDisplayMonitors(HDC, RECT*, MONITORENUMPROC, LPARAM); - BOOL GetMonitorInfoA(HMONITOR, LPMONITORINFO); - WINBOOL GetBinaryTypeA(LPCSTR, LPDWORD); - DWORD GetShortPathNameA(LPCSTR, LPSTR, DWORD); - LPSTR GetEnvironmentStringsA(); - WINBOOL FreeEnvironmentStringsA(LPSTR); - DWORD FormatMessageA(DWORD, LPCVOID, DWORD, DWORD, LPSTR, DWORD, VA_LIST*); - HANDLE CreateMailslotA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - int lstrcmpA(LPCSTR, LPCSTR); - int lstrcmpiA(LPCSTR, LPCSTR); - LPSTR lstrcpynA(LPSTR, LPCSTR, int); - LPSTR lstrcpyA(LPSTR, LPCSTR); - LPSTR lstrcatA(LPSTR, LPCSTR); - int lstrlenA(LPCSTR); - HANDLE CreateMutexA(LPSECURITY_ATTRIBUTES, WINBOOL, LPCSTR); - HANDLE OpenMutexA(DWORD, WINBOOL, LPCSTR); - HANDLE CreateEventA(LPSECURITY_ATTRIBUTES, WINBOOL, WINBOOL, LPCSTR); - HANDLE OpenEventA(DWORD, WINBOOL, LPCSTR); - HANDLE CreateSemaphoreA(LPSECURITY_ATTRIBUTES, LONG, LONG, LPCSTR); - HANDLE OpenSemaphoreA(DWORD, WINBOOL, LPCSTR); - HANDLE CreateFileMappingA(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCSTR); - HANDLE OpenFileMappingA(DWORD, WINBOOL, LPCSTR); - DWORD GetLogicalDriveStringsA(DWORD, LPSTR); - HINST LoadLibraryA(LPCSTR); - HINST LoadLibraryExA(LPCSTR, HANDLE, DWORD); - DWORD GetModuleFileNameA(HINST, LPSTR, DWORD); - HMODULE GetModuleHandleA(LPCSTR); - void FatalAppExitA(UINT); - LPSTR GetCommandLineA(); - DWORD GetEnvironmentVariableA(LPCSTR, LPSTR, DWORD); - WINBOOL SetEnvironmentVariableA(LPCSTR, LPCSTR); - DWORD ExpandEnvironmentStringsA(LPCSTR, LPSTR, DWORD); - void OutputDebugStringA(LPCSTR); - HRSRC FindResourceA(HINST, LPCSTR, LPCSTR); - HRSRC FindResourceExA(HINST, LPCSTR, LPCSTR, ushort); - WINBOOL EnumResourceTypesA(HINST, ENUMRESTYPEPROC, LONG); - WINBOOL EnumResourceNamesA(HINST, LPCSTR, ENUMRESNAMEPROC, LONG); - WINBOOL EnumResourceLanguagesA(HINST, LPCSTR, LPCSTR, ENUMRESLANGPROC, LONG); - HANDLE BeginUpdateResourceA(LPCSTR, WINBOOL); - WINBOOL UpdateResourceA(HANDLE, LPCSTR, LPCSTR, ushort, LPVOID, DWORD); - WINBOOL EndUpdateResourceA(HANDLE, WINBOOL); - ATOM GlobalAddAtomA(LPCSTR); - ATOM GlobalFindAtomA(LPCSTR); - UINT GlobalGetAtomNameA(ATOM, LPSTR, int); - ATOM AddAtomA(LPCSTR); - ATOM FindAtomA(LPCSTR); - UINT GetAtomNameA(ATOM, LPSTR, int); - UINT GetProfileIntA(LPCSTR, LPCSTR, INT); - DWORD GetProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPSTR, DWORD); - WINBOOL WriteProfileStringA(LPCSTR, LPCSTR, LPCSTR); - DWORD GetProfileSectionA(LPCSTR, LPSTR, DWORD); - WINBOOL WriteProfileSectionA(LPCSTR, LPCSTR); - UINT GetPrivateProfileIntA(LPCSTR, LPCSTR, INT, LPCSTR); - DWORD GetPrivateProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPSTR, DWORD, LPCSTR); - WINBOOL WritePrivateProfileStringA(LPCSTR, LPCSTR, LPCSTR, LPCSTR); - DWORD GetPrivateProfileSectionA(LPCSTR, LPSTR, DWORD, LPCSTR); - WINBOOL WritePrivateProfileSectionA(LPCSTR, LPCSTR, LPCSTR); - UINT GetDriveTypeA(LPCSTR); - UINT GetSystemDirectoryA(LPSTR, UINT); - DWORD GetTempPathA(DWORD, LPSTR); - UINT GetTempFileNameA(LPCSTR, LPCSTR, UINT, LPSTR); - UINT GetWindowsDirectoryA(LPSTR, UINT); - WINBOOL SetCurrentDirectoryA(LPCSTR); - DWORD GetCurrentDirectoryA(DWORD, LPSTR); - WINBOOL GetDiskFreeSpaceA(LPCSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL CreateDirectoryA(LPCSTR, LPSECURITY_ATTRIBUTES); - WINBOOL CreateDirectoryExA(LPCSTR, LPCSTR, LPSECURITY_ATTRIBUTES); - WINBOOL RemoveDirectoryA(LPCSTR); - DWORD GetFullPathNameA(LPCSTR, DWORD, LPSTR, LPSTR*); - WINBOOL DefineDosDeviceA(DWORD, LPCSTR, LPCSTR); - DWORD QueryDosDeviceA(LPCSTR, LPSTR, DWORD); - HANDLE CreateFileA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); - WINBOOL SetFileAttributesA(LPCSTR, DWORD); - DWORD GetFileAttributesA(LPCSTR); - BOOL GetFileAttributesExA(LPCSTR, DWORD, WIN32_FILE_ATTRIBUTE_DATA*); - DWORD GetCompressedFileSizeA(LPCSTR, LPDWORD); - WINBOOL DeleteFileA(LPCSTR); - DWORD SearchPathA(LPCSTR, LPCSTR, LPCSTR, DWORD, LPSTR, LPSTR); - WINBOOL CopyFileA(LPCSTR, LPCSTR, WINBOOL); - WINBOOL MoveFileA(LPCSTR, LPCSTR); - WINBOOL MoveFileExA(LPCSTR, LPCSTR, DWORD); - HANDLE CreateNamedPipeA(LPCSTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - WINBOOL GetNamedPipeHandleStateA(HANDLE, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPSTR, DWORD); - WINBOOL CallNamedPipeA(LPCSTR, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, DWORD); - WINBOOL WaitNamedPipeA(LPCSTR, DWORD); - WINBOOL SetVolumeLabelA(LPCSTR, LPCSTR); - WINBOOL GetVolumeInformationA(LPCSTR, LPSTR, DWORD, LPDWORD, LPDWORD, LPDWORD, LPSTR, DWORD); - WINBOOL ClearEventLogA(HANDLE, LPCSTR); - WINBOOL BackupEventLogA(HANDLE, LPCSTR); - HANDLE OpenEventLogA(LPCSTR, LPCSTR); - HANDLE RegisterEventSourceA(LPCSTR, LPCSTR); - HANDLE OpenBackupEventLogA(LPCSTR, LPCSTR); - WINBOOL ReadEventLogA(HANDLE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD); - WINBOOL ReportEventA(HANDLE, ushort, ushort, DWORD, PSID, ushort, DWORD, LPCSTR*, LPVOID); - WINBOOL AccessCheckAndAuditAlarmA(LPCSTR, LPVOID, LPSTR, LPSTR, PSECURITY_DESCRIPTOR, DWORD, PGENERIC_MAPPING, WINBOOL, LPDWORD, LPBOOL, LPBOOL); - WINBOOL ObjectOpenAuditAlarmA(LPCSTR, LPVOID, LPSTR, LPSTR, PSECURITY_DESCRIPTOR, HANDLE, DWORD, DWORD, PPRIVILEGE_SET, WINBOOL, WINBOOL, LPBOOL); - WINBOOL ObjectPrivilegeAuditAlarmA(LPCSTR, LPVOID, HANDLE, DWORD, PPRIVILEGE_SET, WINBOOL); - WINBOOL ObjectCloseAuditAlarmA(LPCSTR, LPVOID, WINBOOL); - WINBOOL PrivilegedServiceAuditAlarmA(LPCSTR, LPCSTR, HANDLE, PPRIVILEGE_SET, WINBOOL); - WINBOOL SetFileSecurityA(LPCSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - WINBOOL GetFileSecurityA(LPCSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD); - HANDLE FindFirstChangeNotificationA(LPCSTR, WINBOOL, DWORD); - WINBOOL IsBadStringPtrA(LPCSTR, UINT); - WINBOOL LookupAccountSidA(LPCSTR, PSID, LPSTR, LPDWORD, LPSTR, LPDWORD, PSID_NAME_USE); - WINBOOL LookupAccountNameA(LPCSTR, LPCSTR, PSID, LPDWORD, LPSTR, LPDWORD, PSID_NAME_USE); - WINBOOL LookupPrivilegeValueA(LPCSTR, LPCSTR, PLUID); - WINBOOL LookupPrivilegeNameA(LPCSTR, PLUID, LPSTR, LPDWORD); - WINBOOL LookupPrivilegeDisplayNameA(LPCSTR, LPCSTR, LPSTR, LPDWORD, LPDWORD); - WINBOOL BuildCommDCBA(LPCSTR, LPDCB); - WINBOOL BuildCommDCBAndTimeoutsA(LPCSTR, LPDCB, LPCOMMTIMEOUTS); - WINBOOL CommConfigDialogA(LPCSTR, HWND, LPCOMMCONFIG); - WINBOOL GetDefaultCommConfigA(LPCSTR, LPCOMMCONFIG, LPDWORD); - WINBOOL SetDefaultCommConfigA(LPCSTR, LPCOMMCONFIG, DWORD); - WINBOOL GetComputerNameA(LPSTR, LPDWORD); - WINBOOL SetComputerNameA(LPCSTR); - WINBOOL GetUserNameA(LPSTR, LPDWORD); - int wvsprintfA(LPSTR, LPCSTR, VA_LIST*); - HKL LoadKeyboardLayoutA(LPCSTR, UINT); - WINBOOL GetKeyboardLayoutNameA(LPSTR); - HDESK CreateDesktopA(LPSTR, LPSTR, LPDEVMODE, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - HDESK OpenDesktopA(LPSTR, DWORD, WINBOOL, DWORD); - WINBOOL EnumDesktopsA(HWINSTA, DESKTOPENUMPROC, LPARAM); - HWINSTA CreateWindowStationA(LPSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - HWINSTA OpenWindowStationA(LPSTR, WINBOOL, DWORD); - WINBOOL EnumWindowStationsA(ENUMWINDOWSTATIONPROC, LPARAM); - WINBOOL GetUserObjectInformationA(HANDLE, int, PVOID, DWORD, LPDWORD); - WINBOOL SetUserObjectInformationA(HANDLE, int, PVOID, DWORD); - UINT RegisterWindowMessageA(LPCSTR); - WINBOOL GetMessageA(LPMSG, HWND, UINT, UINT); - LONG DispatchMessageA(LPMSG); - WINBOOL PeekMessageA(LPMSG, HWND, UINT, UINT, UINT); - LRESULT SendMessageA(HWND, UINT, WPARAM, LPARAM); - LRESULT SendMessageTimeoutA(HWND, UINT, WPARAM, LPARAM, UINT, UINT, LPDWORD); - WINBOOL SendNotifyMessageA(HWND, UINT, WPARAM, LPARAM); - WINBOOL SendMessageCallbackA(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD); - WINBOOL PostMessageA(HWND, UINT, WPARAM, LPARAM); - WINBOOL PostThreadMessageA(DWORD, UINT, WPARAM, LPARAM); - LRESULT DefWindowProcA(HWND, UINT, WPARAM, LPARAM); - LRESULT CallWindowProcA(WNDPROC, HWND, UINT, WPARAM, LPARAM); - ATOM RegisterClassA(LPWNDCLASS); - WINBOOL UnregisterClassA(LPCSTR, HINST); - WINBOOL GetClassInfoA(HINST, LPCSTR, LPWNDCLASS); - ATOM RegisterClassExA(LPWNDCLASSEX); - WINBOOL GetClassInfoExA(HINST, LPCSTR, LPWNDCLASSEX); - HWND CreateWindowExA(DWORD, LPCSTR, LPCSTR, DWORD, int, int, int, int, HWND, HMENU, HINST, LPVOID); - HWND CreateDialogParamA(HINST, LPCSTR, HWND, DLGPROC, LPARAM); - HWND CreateDialogIndirectParamA(HINST, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); - int DialogBoxParamA(HINST, LPCSTR, HWND, DLGPROC, LPARAM); - int DialogBoxIndirectParamA(HINST, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); - WINBOOL SetDlgItemTextA(HWND, int, LPCSTR); - UINT GetDlgItemTextA(HWND, int, LPSTR, int); - LONG SendDlgItemMessageA(HWND, int, UINT, WPARAM, LPARAM); - LRESULT DefDlgProcA(HWND, UINT, WPARAM, LPARAM); - WINBOOL CallMsgFilterA(LPMSG, int); - UINT RegisterClipboardFormatA(LPCSTR); - int GetClipboardFormatNameA(UINT, LPSTR, int); - WINBOOL CharToOemA(LPCSTR, LPSTR); - WINBOOL OemToCharA(LPCSTR, LPSTR); - WINBOOL CharToOemBuffA(LPCSTR, LPSTR, DWORD); - WINBOOL OemToCharBuffA(LPCSTR, LPSTR, DWORD); - LPSTR CharUpperA(LPSTR); - DWORD CharUpperBuffA(LPSTR, DWORD); - LPSTR CharLowerA(LPSTR); - DWORD CharLowerBuffA(LPSTR, DWORD); - LPSTR CharNextA(LPCSTR); - LPSTR CharPrevA(LPCSTR, LPCSTR); - WINBOOL IsCharAlphaA(char); - WINBOOL IsCharAlphaNumericA(char); - WINBOOL IsCharUpperA(char); - WINBOOL IsCharLowerA(char); - int GetKeyNameTextA(LONG, LPSTR, int); - SHORT VkKeyScanA(char); - SHORT VkKeyScanExA(char, HKL); - UINT MapVirtualKeyA(UINT, UINT); - UINT MapVirtualKeyExA(UINT, UINT, HKL); - HACCEL LoadAcceleratorsA(HINST, LPCSTR); - HACCEL CreateAcceleratorTableA(LPACCEL, int); - int CopyAcceleratorTableA(HACCEL, LPACCEL, int); - int TranslateAcceleratorA(HWND, HACCEL, LPMSG); - HMENU LoadMenuA(HINST, LPCSTR); - HMENU LoadMenuIndirectA(LPMENUTEMPLATE); - WINBOOL ChangeMenuA(HMENU, UINT, LPCSTR, UINT, UINT); - int GetMenuStringA(HMENU, UINT, LPSTR, int, UINT); - WINBOOL InsertMenuA(HMENU, UINT, UINT, UINT, LPCSTR); - WINBOOL AppendMenuA(HMENU, UINT, UINT, LPCSTR); - WINBOOL ModifyMenuA(HMENU, UINT, UINT, UINT, LPCSTR); - WINBOOL InsertMenuItemA(HMENU, UINT, WINBOOL, LPCMENUITEMINFO); - WINBOOL GetMenuItemInfoA(HMENU, UINT, WINBOOL, LPMENUITEMINFO); - WINBOOL SetMenuItemInfoA(HMENU, UINT, WINBOOL, LPCMENUITEMINFO); - int DrawTextA(HDC, LPCSTR, int, LPRECT, UINT); - int DrawTextExA(HDC, LPSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); - WINBOOL GrayStringA(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int); - WINBOOL DrawStateA(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); - LONG TabbedTextOutA(HDC, int, int, LPCSTR, int, int, LPINT, int); - DWORD GetTabbedTextExtentA(HDC, LPCSTR, int, int, LPINT); - WINBOOL SetPropA(HWND, LPCSTR, HANDLE); - HANDLE GetPropA(HWND, LPCSTR); - HANDLE RemovePropA(HWND, LPCSTR); - int EnumPropsExA(HWND, PROPENUMPROCEX, LPARAM); - int EnumPropsA(HWND, PROPENUMPROC); - WINBOOL SetWindowTextA(HWND, LPCSTR); - int GetWindowTextA(HWND, LPSTR, int); - int GetWindowTextLengthA(HWND); - int MessageBoxA(HWND, LPCSTR, LPCSTR, UINT); - int MessageBoxExA(HWND, LPCSTR, LPCSTR, UINT, ushort); - int MessageBoxIndirectA(LPMSGBOXPARAMS); - LONG GetWindowLongA(HWND, int); - LONG SetWindowLongA(HWND, int, LONG); - DWORD GetClassLongA(HWND, int); - DWORD SetClassLongA(HWND, int, LONG); - HWND FindWindowA(LPCSTR, LPCSTR); - HWND FindWindowExA(HWND, HWND, LPCSTR, LPCSTR); - int GetClassNameA(HWND, LPSTR, int); - HHOOK SetWindowsHookExA(int, HOOKPROC, HINST, DWORD); - HBITMAP LoadBitmapA(HINST, LPCSTR); - HCURSOR LoadCursorA(HINST, LPCSTR); - HCURSOR LoadCursorFromFileA(LPCSTR); - HICON LoadIconA(HINST, LPCSTR); - HANDLE LoadImageA(HINST, LPCSTR, UINT, int, int, UINT); - int LoadStringA(HINST, UINT, LPSTR, int); - WINBOOL IsDialogMessageA(HWND, LPMSG); - int DlgDirListA(HWND, LPSTR, int, int, UINT); - WINBOOL DlgDirSelectExA(HWND, LPSTR, int, int); - int DlgDirListComboBoxA(HWND, LPSTR, int, int, UINT); - WINBOOL DlgDirSelectComboBoxExA(HWND, LPSTR, int, int); - LRESULT DefFrameProcA(HWND, HWND, UINT, WPARAM, LPARAM); - LRESULT DefMDIChildProcA(HWND, UINT, WPARAM, LPARAM); - HWND CreateMDIWindowA(LPSTR, LPSTR, DWORD, int, int, int, int, HWND, HINST, LPARAM); - WINBOOL WinHelpA(HWND, LPCSTR, UINT, DWORD); - LONG ChangeDisplaySettingsA(LPDEVMODE, DWORD); - WINBOOL EnumDisplaySettingsA(LPCSTR, DWORD, LPDEVMODE); - WINBOOL SystemParametersInfoA(UINT, UINT, PVOID, UINT); - int AddFontResourceA(LPCSTR); - HMETAFILE CopyMetaFileA(HMETAFILE, LPCSTR); - HFONT CreateFontIndirectA(LPLOGFONT); - HDC CreateICA(LPCSTR, LPCSTR, LPCSTR, LPDEVMODE); - HDC CreateMetaFileA(LPCSTR); - WINBOOL CreateScalableFontResourceA(DWORD, LPCSTR, LPCSTR, LPCSTR); - int EnumFontFamiliesExA(HDC, LPLOGFONT, FONTENUMEXPROC, LPARAM, DWORD); - int EnumFontFamiliesA(HDC, LPCSTR, FONTENUMPROC, LPARAM); - int EnumFontsA(HDC, LPCSTR, ENUMFONTSPROC, LPARAM); - WINBOOL GetCharWidthA(HDC, UINT, UINT, LPINT); - WINBOOL GetCharWidth32A(HDC, UINT, UINT, LPINT); - WINBOOL GetCharWidthFloatA(HDC, UINT, UINT, PFLOAT); - WINBOOL GetCharABCWidthsA(HDC, UINT, UINT, LPABC); - WINBOOL GetCharABCWidthsFloatA(HDC, UINT, UINT, LPABCFLOAT); - DWORD GetGlyphOutlineA(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, PMAT2); - HMETAFILE GetMetaFileA(LPCSTR); - UINT GetOutlineTextMetricsA(HDC, UINT, LPOUTLINETEXTMETRIC); - WINBOOL GetTextExtentPointA(HDC, LPCSTR, int, LPSIZE); - WINBOOL GetTextExtentPoint32A(HDC, LPCSTR, int, LPSIZE); - WINBOOL GetTextExtentExPointA(HDC, LPCSTR, int, int, LPINT, LPINT, LPSIZE); - DWORD GetCharacterPlacementA(HDC, LPCSTR, int, int, LPGCP_RESULTS, DWORD); - HDC ResetDCA(HDC, LPDEVMODE); - WINBOOL RemoveFontResourceA(LPCSTR); - HENHMETAFILE CopyEnhMetaFileA(HENHMETAFILE, LPCSTR); - HDC CreateEnhMetaFileA(HDC, LPCSTR, LPRECT, LPCSTR); - HENHMETAFILE GetEnhMetaFileA(LPCSTR); - UINT GetEnhMetaFileDescriptionA(HENHMETAFILE, UINT, LPSTR); - WINBOOL GetTextMetricsA(HDC, LPTEXTMETRIC); - int StartDocA(HDC, PDOCINFO); - int GetObjectA(HGDIOBJ, int, LPVOID); - WINBOOL TextOutA(HDC, int, int, LPCSTR, int); - WINBOOL ExtTextOutA(HDC, int, int, UINT, LPRECT, LPCSTR, UINT, LPINT); - WINBOOL PolyTextOutA(HDC, PPOLYTEXT, int); - int GetTextFaceA(HDC, int, LPSTR); - DWORD GetKerningPairsA(HDC, DWORD, LPKERNINGPAIR); - HCOLORSPACE CreateColorSpaceA(LPLOGCOLORSPACE); - WINBOOL GetLogColorSpaceA(HCOLORSPACE, LPLOGCOLORSPACE, DWORD); - WINBOOL GetICMProfileA(HDC, DWORD, LPSTR); - WINBOOL SetICMProfileA(HDC, LPSTR); - WINBOOL UpdateICMRegKeyA(DWORD, DWORD, LPSTR, UINT); - int EnumICMProfilesA(HDC, ICMENUMPROC, LPARAM); - int PropertySheetA(LPCPROPSHEETHEADER); - HIMAGELIST ImageList_LoadImageA(HINST, LPCSTR, int, int, COLORREF, UINT, UINT); - HWND CreateStatusWindowA(LONG, LPCSTR, HWND, UINT); - void DrawStatusTextA(HDC, LPRECT, LPCSTR); - WINBOOL GetOpenFileNameA(LPOPENFILENAME); - WINBOOL GetSaveFileNameA(LPOPENFILENAME); - int GetFileTitleA(LPCSTR, LPSTR, ushort); - WINBOOL ChooseColorA(LPCHOOSECOLOR); - HWND FindTextA(LPFINDREPLACE); - HWND ReplaceTextA(LPFINDREPLACE); - WINBOOL ChooseFontA(LPCHOOSEFONT); - WINBOOL PrintDlgA(LPPRINTDLG); - WINBOOL PageSetupDlgA(LPPAGESETUPDLG); - WINBOOL CreateProcessA(LPCSTR, LPSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, WINBOOL, DWORD, LPVOID, LPCSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); - void GetStartupInfoA(LPSTARTUPINFO); - HANDLE FindFirstFileA(LPCSTR, LPWIN32_FIND_DATA); - WINBOOL FindNextFileA(HANDLE, LPWIN32_FIND_DATA); - WINBOOL GetVersionExA(LPOSVERSIONINFO); - HDC CreateDCA(LPCSTR, LPCSTR, LPCSTR, PDEVMODE); - DWORD VerInstallFileA(DWORD, LPSTR, LPSTR, LPSTR, LPSTR, LPSTR, LPSTR, PUINT); - DWORD GetFileVersionInfoSizeA(LPSTR, LPDWORD); - WINBOOL GetFileVersionInfoA(LPSTR, DWORD, DWORD, LPVOID); - DWORD VerLanguageNameA(DWORD, LPSTR, DWORD); - WINBOOL VerQueryValueA(LPVOID, LPSTR, LPVOID, PUINT); - DWORD VerFindFileA(DWORD, LPSTR, LPSTR, LPSTR, LPSTR, PUINT, LPSTR, PUINT); - LONG RegConnectRegistryA(LPSTR, HKEY, PHKEY); - LONG RegCreateKeyA(HKEY, LPCSTR, PHKEY); - LONG RegCreateKeyExA(HKEY, LPCSTR, DWORD, LPSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); - LONG RegDeleteKeyA(HKEY, LPCSTR); - LONG RegDeleteValueA(HKEY, LPCSTR); - LONG RegEnumKeyA(HKEY, DWORD, LPSTR, DWORD); - LONG RegEnumKeyExA(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPSTR, LPDWORD, PFILETIME); - LONG RegEnumValueA(HKEY, DWORD, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); - LONG RegLoadKeyA(HKEY, LPCSTR, LPCSTR); - LONG RegOpenKeyA(HKEY, LPCSTR, PHKEY); - LONG RegOpenKeyExA(HKEY, LPCSTR, DWORD, REGSAM, PHKEY); - LONG RegQueryInfoKeyA(HKEY, LPSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, PFILETIME); - LONG RegQueryValueA(HKEY, LPCSTR, LPSTR, PLONG); - LONG RegQueryMultipleValuesA(HKEY, PVALENT, DWORD, LPSTR, LPDWORD); - LONG RegQueryValueExA(HKEY, LPCSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); - LONG RegReplaceKeyA(HKEY, LPCSTR, LPCSTR, LPCSTR); - LONG RegRestoreKeyA(HKEY, LPCSTR, DWORD); - LONG RegSaveKeyA(HKEY, LPCSTR, LPSECURITY_ATTRIBUTES); - LONG RegSetValueA(HKEY, LPCSTR, DWORD, LPCSTR, DWORD); - LONG RegSetValueExA(HKEY, LPCSTR, DWORD, DWORD, LPBYTE, DWORD); - LONG RegUnLoadKeyA(HKEY, LPCSTR); - WINBOOL InitiateSystemShutdownA(LPSTR, LPSTR, DWORD, WINBOOL, WINBOOL); - WINBOOL AbortSystemShutdownA(LPSTR); - int CompareStringA(LCID, DWORD, LPCSTR, int, LPCSTR, int); - int LCMapStringA(LCID, DWORD, LPCSTR, int, LPSTR, int); - int GetLocaleInfoA(LCID, LCTYPE, LPSTR, int); - WINBOOL SetLocaleInfoA(LCID, LCTYPE, LPCSTR); - int GetTimeFormatA(LCID, DWORD, LPSYSTEMTIME, LPCSTR, LPSTR, int); - int GetDateFormatA(LCID, DWORD, LPSYSTEMTIME, LPCSTR, LPSTR, int); - int GetNumberFormatA(LCID, DWORD, LPCSTR, PNUMBERFMT, LPSTR, int); - int GetCurrencyFormatA(LCID, DWORD, LPCSTR, PCURRENCYFMT, LPSTR, int); - WINBOOL EnumCalendarInfoA(CALINFO_ENUMPROC, LCID, CALID, CALTYPE); - WINBOOL EnumTimeFormatsA(TIMEFMT_ENUMPROC, LCID, DWORD); - WINBOOL EnumDateFormatsA(DATEFMT_ENUMPROC, LCID, DWORD); - WINBOOL GetStringTypeExA(LCID, DWORD, LPCSTR, int, LPWORD); - WINBOOL GetStringTypeA(LCID, DWORD, LPCSTR, int, LPWORD); - int FoldStringA(DWORD, LPCSTR, int, LPSTR, int); - WINBOOL EnumSystemLocalesA(LOCALE_ENUMPROC, DWORD); - WINBOOL EnumSystemCodePagesA(CODEPAGE_ENUMPROC, DWORD); - WINBOOL PeekConsoleInputA(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL ReadConsoleInputA(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL WriteConsoleInputA(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL ReadConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); - WINBOOL WriteConsoleOutputA(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); - WINBOOL ReadConsoleOutputCharacterA(HANDLE, LPSTR, DWORD, COORD, LPDWORD); - WINBOOL WriteConsoleOutputCharacterA(HANDLE, LPCSTR, DWORD, COORD, LPDWORD); - WINBOOL FillConsoleOutputCharacterA(HANDLE, char, DWORD, COORD, LPDWORD); - WINBOOL ScrollConsoleScreenBufferA(HANDLE, PSMALL_RECT, PSMALL_RECT, COORD, PCHAR_INFO); - DWORD GetConsoleTitleA(LPSTR, DWORD); - WINBOOL SetConsoleTitleA(LPCSTR); - WINBOOL ReadConsoleA(HANDLE, LPVOID, DWORD, LPDWORD, LPVOID); - WINBOOL WriteConsoleA(HANDLE, POINTER, DWORD, LPDWORD, LPVOID); - DWORD WNetAddConnectionA(LPCSTR, LPCSTR, LPCSTR); - DWORD WNetAddConnection2A(LPNETRESOURCE, LPCSTR, LPCSTR, DWORD); - DWORD WNetAddConnection3A(HWND, LPNETRESOURCE, LPCSTR, LPCSTR, DWORD); - DWORD WNetCancelConnectionA(LPCSTR, WINBOOL); - DWORD WNetCancelConnection2A(LPCSTR, DWORD, WINBOOL); - DWORD WNetGetConnectionA(LPCSTR, LPSTR, LPDWORD); - DWORD WNetUseConnectionA(HWND, LPNETRESOURCE, LPCSTR, LPCSTR, DWORD, LPSTR, LPDWORD, LPDWORD); - DWORD WNetSetConnectionA(LPCSTR, DWORD, LPVOID); - DWORD WNetConnectionDialog1A(LPCONNECTDLGSTRUCT); - DWORD WNetDisconnectDialog1A(LPDISCDLGSTRUCT); - DWORD WNetOpenEnumA(DWORD, DWORD, DWORD, LPNETRESOURCE, LPHANDLE); - DWORD WNetEnumResourceA(HANDLE, LPDWORD, LPVOID, LPDWORD); - DWORD WNetGetUniversalNameA(LPCSTR, DWORD, LPVOID, LPDWORD); - DWORD WNetGetUserA(LPCSTR, LPSTR, LPDWORD); - DWORD WNetGetProviderNameA(DWORD, LPSTR, LPDWORD); - DWORD WNetGetNetworkInformationA(LPCSTR, LPNETINFOSTRUCT); - DWORD WNetGetLastErrorA(LPDWORD, LPSTR, DWORD, LPSTR, DWORD); - DWORD MultinetGetConnectionPerformanceA(LPNETRESOURCE, LPNETCONNECTINFOSTRUCT); - WINBOOL ChangeServiceConfigA(SC_HANDLE, DWORD, DWORD, DWORD, LPCSTR, LPCSTR, LPDWORD, LPCSTR, LPCSTR, LPCSTR, LPCSTR); - SC_HANDLE CreateServiceA(SC_HANDLE, LPCSTR, LPCSTR, DWORD, DWORD, DWORD, DWORD, LPCSTR, LPCSTR, LPDWORD, LPCSTR, LPCSTR, LPCSTR); - WINBOOL EnumDependentServicesA(SC_HANDLE, DWORD, LPENUM_SERVICE_STATUS, DWORD, LPDWORD, LPDWORD); - WINBOOL EnumServicesStatusA(SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUS, DWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL GetServiceKeyNameA(SC_HANDLE, LPCSTR, LPSTR, LPDWORD); - WINBOOL GetServiceDisplayNameA(SC_HANDLE, LPCSTR, LPSTR, LPDWORD); - SC_HANDLE OpenSCManagerA(LPCSTR, LPCSTR, DWORD); - SC_HANDLE OpenServiceA(SC_HANDLE, LPCSTR, DWORD); - WINBOOL QueryServiceConfigA(SC_HANDLE, LPQUERY_SERVICE_CONFIG, DWORD, LPDWORD); - WINBOOL QueryServiceLockStatusA(SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUS, DWORD, LPDWORD); - SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerA(LPCSTR, LPHANDLER_FUNCTION); - WINBOOL StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRY); - WINBOOL StartServiceA(SC_HANDLE, DWORD, LPCSTR); - uint DragQueryFileA(HDROP, uint, PCHAR, uint); - HICON ExtractAssociatedIconA(HINST, PCHAR, LPWORD); - HICON ExtractIconA(HINST, PCHAR, uint); - HINST FindExecutableA(PCHAR, PCHAR, PCHAR); - int ShellAboutA(HWND, PCHAR, PCHAR, HICON); - HINST ShellExecuteA(HWND, PCHAR, PCHAR, PCHAR, PCHAR, int); - HSZ DdeCreateStringHandleA(DWORD, PCHAR, int); - UINT DdeInitializeA(LPDWORD, PFNCALLBACK, DWORD, DWORD); - DWORD DdeQueryStringA(DWORD, HSZ, PCHAR, DWORD, int); - WINBOOL LogonUserA(LPSTR, LPSTR, LPSTR, DWORD, DWORD, PHANDLE); - WINBOOL CreateProcessAsUserA(HANDLE, LPCTSTR, LPTSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, WINBOOL, DWORD, LPVOID, LPCTSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); - WINBOOL GetBinaryTypeW(LPCWSTR, LPDWORD); - DWORD GetShortPathNameW(LPCWSTR, LPWSTR, DWORD); - LPWSTR GetEnvironmentStringsW(); - WINBOOL FreeEnvironmentStringsW(LPWSTR); - DWORD FormatMessageW(DWORD, LPCVOID, DWORD, DWORD, LPWSTR, DWORD, VA_LIST*); - HANDLE CreateMailslotW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - int lstrcmpW(LPCWSTR, LPCWSTR); - int lstrcmpiW(LPCWSTR, LPCWSTR); - LPWSTR lstrcpynW(LPWSTR, LPCWSTR, int); - LPWSTR lstrcpyW(LPWSTR, LPCWSTR); - LPWSTR lstrcatW(LPWSTR, LPCWSTR); - int lstrlenW(LPCWSTR); - HANDLE CreateMutexW(LPSECURITY_ATTRIBUTES, WINBOOL, LPCWSTR); - HANDLE OpenMutexW(DWORD, WINBOOL, LPCWSTR); - HANDLE CreateEventW(LPSECURITY_ATTRIBUTES, WINBOOL, WINBOOL, LPCWSTR); - HANDLE OpenEventW(DWORD, WINBOOL, LPCWSTR); - HANDLE CreateSemaphoreW(LPSECURITY_ATTRIBUTES, LONG, LONG, LPCWSTR); - HANDLE OpenSemaphoreW(DWORD, WINBOOL, LPCWSTR); - HANDLE CreateFileMappingW(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, DWORD, DWORD, LPCWSTR); - HANDLE OpenFileMappingW(DWORD, WINBOOL, LPCWSTR); - DWORD GetLogicalDriveStringsW(DWORD, LPWSTR); - HINST LoadLibraryW(LPCWSTR); - HINST LoadLibraryExW(LPCWSTR, HANDLE, DWORD); - DWORD GetModuleFileNameW(HINST, LPWSTR, DWORD); - HMODULE GetModuleHandleW(LPCWSTR); - void FatalAppExitW(UINT); - LPWSTR GetCommandLineW(); - DWORD GetEnvironmentVariableW(LPCWSTR, LPWSTR, DWORD); - WINBOOL SetEnvironmentVariableW(LPCWSTR, LPCWSTR); - DWORD ExpandEnvironmentStringsW(LPCWSTR, LPWSTR, DWORD); - void OutputDebugStringW(LPCWSTR); - HRSRC FindResourceW(HINST, LPCWSTR, LPCWSTR); - HRSRC FindResourceExW(HINST, LPCWSTR, LPCWSTR, ushort); - WINBOOL EnumResourceTypesW(HINST, ENUMRESTYPEPROC, LONG); - WINBOOL EnumResourceNamesW(HINST, LPCWSTR, ENUMRESNAMEPROC, LONG); - WINBOOL EnumResourceLanguagesW(HINST, LPCWSTR, LPCWSTR, ENUMRESLANGPROC, LONG); - HANDLE BeginUpdateResourceW(LPCWSTR, WINBOOL); - WINBOOL UpdateResourceW(HANDLE, LPCWSTR, LPCWSTR, ushort, LPVOID, DWORD); - WINBOOL EndUpdateResourceW(HANDLE, WINBOOL); - ATOM GlobalAddAtomW(LPCWSTR); - ATOM GlobalFindAtomW(LPCWSTR); - UINT GlobalGetAtomNameW(ATOM, LPWSTR, int); - ATOM AddAtomW(LPCWSTR); - ATOM FindAtomW(LPCWSTR); - UINT GetAtomNameW(ATOM, LPWSTR, int); - UINT GetProfileIntW(LPCWSTR, LPCWSTR, INT); - DWORD GetProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, DWORD); - WINBOOL WriteProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR); - DWORD GetProfileSectionW(LPCWSTR, LPWSTR, DWORD); - WINBOOL WriteProfileSectionW(LPCWSTR, LPCWSTR); - UINT GetPrivateProfileIntW(LPCWSTR, LPCWSTR, INT, LPCWSTR); - DWORD GetPrivateProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPWSTR, DWORD, LPCWSTR); - WINBOOL WritePrivateProfileStringW(LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR); - DWORD GetPrivateProfileSectionW(LPCWSTR, LPWSTR, DWORD, LPCWSTR); - WINBOOL WritePrivateProfileSectionW(LPCWSTR, LPCWSTR, LPCWSTR); - UINT GetDriveTypeW(LPCWSTR); - UINT GetSystemDirectoryW(LPWSTR, UINT); - DWORD GetTempPathW(DWORD, LPWSTR); - UINT GetTempFileNameW(LPCWSTR, LPCWSTR, UINT, LPWSTR); - UINT GetWindowsDirectoryW(LPWSTR, UINT); - WINBOOL SetCurrentDirectoryW(LPCWSTR); - DWORD GetCurrentDirectoryW(DWORD, LPWSTR); - WINBOOL GetDiskFreeSpaceW(LPCWSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL CreateDirectoryW(LPCWSTR, LPSECURITY_ATTRIBUTES); - WINBOOL CreateDirectoryExW(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES); - WINBOOL RemoveDirectoryW(LPCWSTR); - DWORD GetFullPathNameW(LPCWSTR, DWORD, LPWSTR, LPWSTR*); - WINBOOL DefineDosDeviceW(DWORD, LPCWSTR, LPCWSTR); - DWORD QueryDosDeviceW(LPCWSTR, LPWSTR, DWORD); - HANDLE CreateFileW(LPCWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE); - WINBOOL SetFileAttributesW(LPCWSTR, DWORD); - DWORD GetFileAttributesW(LPCWSTR); - BOOL GetFileAttributesExW(LPCWSTR, DWORD, WIN32_FILE_ATTRIBUTE_DATA*); - DWORD GetCompressedFileSizeW(LPCWSTR, LPDWORD); - WINBOOL DeleteFileW(LPCWSTR); - DWORD SearchPathW(LPCWSTR, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPWSTR); - WINBOOL CopyFileW(LPCWSTR, LPCWSTR, WINBOOL); - WINBOOL MoveFileW(LPCWSTR, LPCWSTR); - WINBOOL MoveFileExW(LPCWSTR, LPCWSTR, DWORD); - HANDLE CreateNamedPipeW(LPCWSTR, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - WINBOOL GetNamedPipeHandleStateW(HANDLE, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPWSTR, DWORD); - WINBOOL CallNamedPipeW(LPCWSTR, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, DWORD); - WINBOOL WaitNamedPipeW(LPCWSTR, DWORD); - WINBOOL SetVolumeLabelW(LPCWSTR, LPCWSTR); - WINBOOL GetVolumeInformationW(LPCWSTR, LPWSTR, DWORD, LPDWORD, LPDWORD, LPDWORD, LPWSTR, DWORD); - WINBOOL ClearEventLogW(HANDLE, LPCWSTR); - WINBOOL BackupEventLogW(HANDLE, LPCWSTR); - HANDLE OpenEventLogW(LPCWSTR, LPCWSTR); - HANDLE RegisterEventSourceW(LPCWSTR, LPCWSTR); - HANDLE OpenBackupEventLogW(LPCWSTR, LPCWSTR); - WINBOOL ReadEventLogW(HANDLE, DWORD, DWORD, LPVOID, DWORD, LPDWORD, LPDWORD); - WINBOOL ReportEventW(HANDLE, ushort, ushort, DWORD, PSID, ushort, DWORD, LPCWSTR*, LPVOID); - WINBOOL AccessCheckAndAuditAlarmW(LPCWSTR, LPVOID, LPWSTR, LPWSTR, PSECURITY_DESCRIPTOR, DWORD, PGENERIC_MAPPING, WINBOOL, LPDWORD, LPBOOL, LPBOOL); - WINBOOL ObjectOpenAuditAlarmW(LPCWSTR, LPVOID, LPWSTR, LPWSTR, PSECURITY_DESCRIPTOR, HANDLE, DWORD, DWORD, PPRIVILEGE_SET, WINBOOL, WINBOOL, LPBOOL); - WINBOOL ObjectPrivilegeAuditAlarmW(LPCWSTR, LPVOID, HANDLE, DWORD, PPRIVILEGE_SET, WINBOOL); - WINBOOL ObjectCloseAuditAlarmW(LPCWSTR, LPVOID, WINBOOL); - WINBOOL PrivilegedServiceAuditAlarmW(LPCWSTR, LPCWSTR, HANDLE, PPRIVILEGE_SET, WINBOOL); - WINBOOL SetFileSecurityW(LPCWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - WINBOOL GetFileSecurityW(LPCWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD); - HANDLE FindFirstChangeNotificationW(LPCWSTR, WINBOOL, DWORD); - WINBOOL IsBadStringPtrW(LPCWSTR, UINT); - WINBOOL LookupAccountSidW(LPCWSTR, PSID, LPWSTR, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE); - WINBOOL LookupAccountNameW(LPCWSTR, LPCWSTR, PSID, LPDWORD, LPWSTR, LPDWORD, PSID_NAME_USE); - WINBOOL LookupPrivilegeValueW(LPCWSTR, LPCWSTR, PLUID); - WINBOOL LookupPrivilegeNameW(LPCWSTR, PLUID, LPWSTR, LPDWORD); - WINBOOL LookupPrivilegeDisplayNameW(LPCWSTR, LPCWSTR, LPWSTR, LPDWORD, LPDWORD); - WINBOOL BuildCommDCBW(LPCWSTR, LPDCB); - WINBOOL BuildCommDCBAndTimeoutsW(LPCWSTR, LPDCB, LPCOMMTIMEOUTS); - WINBOOL CommConfigDialogW(LPCWSTR, HWND, LPCOMMCONFIG); - WINBOOL GetDefaultCommConfigW(LPCWSTR, LPCOMMCONFIG, LPDWORD); - WINBOOL SetDefaultCommConfigW(LPCWSTR, LPCOMMCONFIG, DWORD); - WINBOOL GetComputerNameW(LPWSTR, LPDWORD); - WINBOOL SetComputerNameW(LPCWSTR); - WINBOOL GetUserNameW(LPWSTR, LPDWORD); - int wvsprintfW(LPWSTR, LPCWSTR, VA_LIST*); - HKL LoadKeyboardLayoutW(LPCWSTR, UINT); - WINBOOL GetKeyboardLayoutNameW(LPWSTR); - HDESK CreateDesktopW(LPWSTR, LPWSTR, LPDEVMODE, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - HDESK OpenDesktopW(LPWSTR, DWORD, WINBOOL, DWORD); - WINBOOL EnumDesktopsW(HWINSTA, DESKTOPENUMPROC, LPARAM); - HWINSTA CreateWindowStationW(LPWSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES); - HWINSTA OpenWindowStationW(LPWSTR, WINBOOL, DWORD); - WINBOOL EnumWindowStationsW(ENUMWINDOWSTATIONPROC, LPARAM); - WINBOOL GetUserObjectInformationW(HANDLE, int, PVOID, DWORD, LPDWORD); - WINBOOL SetUserObjectInformationW(HANDLE, int, PVOID, DWORD); - UINT RegisterWindowMessageW(LPCWSTR); - WINBOOL GetMessageW(LPMSG, HWND, UINT, UINT); - LONG DispatchMessageW(LPMSG); - WINBOOL PeekMessageW(LPMSG, HWND, UINT, UINT, UINT); - LRESULT SendMessageW(HWND, UINT, WPARAM, LPARAM); - LRESULT SendMessageTimeoutW(HWND, UINT, WPARAM, LPARAM, UINT, UINT, LPDWORD); - WINBOOL SendNotifyMessageW(HWND, UINT, WPARAM, LPARAM); - WINBOOL SendMessageCallbackW(HWND, UINT, WPARAM, LPARAM, SENDASYNCPROC, DWORD); - WINBOOL PostMessageW(HWND, UINT, WPARAM, LPARAM); - WINBOOL PostThreadMessageW(DWORD, UINT, WPARAM, LPARAM); - LRESULT DefWindowProcW(HWND, UINT, WPARAM, LPARAM); - LRESULT CallWindowProcW(WNDPROC, HWND, UINT, WPARAM, LPARAM); - ATOM RegisterClassW(LPWNDCLASS); - WINBOOL UnregisterClassW(LPCWSTR, HINST); - WINBOOL GetClassInfoW(HINST, LPCWSTR, LPWNDCLASS); - ATOM RegisterClassExW(LPWNDCLASSEX); - WINBOOL GetClassInfoExW(HINST, LPCWSTR, LPWNDCLASSEX); - HWND CreateWindowExW(DWORD, LPCWSTR, LPCWSTR, DWORD, int, int, int, int, HWND, HMENU, HINST, LPVOID); - HWND CreateDialogParamW(HINST, LPCWSTR, HWND, DLGPROC, LPARAM); - HWND CreateDialogIndirectParamW(HINST, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); - int DialogBoxParamW(HINST, LPCWSTR, HWND, DLGPROC, LPARAM); - int DialogBoxIndirectParamW(HINST, LPCDLGTEMPLATE, HWND, DLGPROC, LPARAM); - WINBOOL SetDlgItemTextW(HWND, int, LPCWSTR); - UINT GetDlgItemTextW(HWND, int, LPWSTR, int); - LONG SendDlgItemMessageW(HWND, int, UINT, WPARAM, LPARAM); - LRESULT DefDlgProcW(HWND, UINT, WPARAM, LPARAM); - WINBOOL CallMsgFilterW(LPMSG, int); - UINT RegisterClipboardFormatW(LPCWSTR); - int GetClipboardFormatNameW(UINT, LPWSTR, int); - WINBOOL CharToOemW(LPCWSTR, LPSTR); - WINBOOL OemToCharW(LPCSTR, LPWSTR); - WINBOOL CharToOemBuffW(LPCWSTR, LPSTR, DWORD); - WINBOOL OemToCharBuffW(LPCSTR, LPWSTR, DWORD); - LPWSTR CharUpperW(LPWSTR); - DWORD CharUpperBuffW(LPWSTR, DWORD); - LPWSTR CharLowerW(LPWSTR); - DWORD CharLowerBuffW(LPWSTR, DWORD); - LPWSTR CharNextW(LPCWSTR); - LPWSTR CharPrevW(LPCWSTR, LPCWSTR); - WINBOOL IsCharAlphaW(WCHAR); - WINBOOL IsCharAlphaNumericW(WCHAR); - WINBOOL IsCharUpperW(WCHAR); - WINBOOL IsCharLowerW(WCHAR); - int GetKeyNameTextW(LONG, LPWSTR, int); - SHORT VkKeyScanW(WCHAR); - SHORT VkKeyScanExW(WCHAR, HKL); - UINT MapVirtualKeyW(UINT, UINT); - UINT MapVirtualKeyExW(UINT, UINT, HKL); - HACCEL LoadAcceleratorsW(HINST, LPCWSTR); - HACCEL CreateAcceleratorTableW(LPACCEL, int); - int CopyAcceleratorTableW(HACCEL, LPACCEL, int); - int TranslateAcceleratorW(HWND, HACCEL, LPMSG); - HMENU LoadMenuW(HINST, LPCWSTR); - HMENU LoadMenuIndirectW(LPMENUTEMPLATE); - WINBOOL ChangeMenuW(HMENU, UINT, LPCWSTR, UINT, UINT); - int GetMenuStringW(HMENU, UINT, LPWSTR, int, UINT); - WINBOOL InsertMenuW(HMENU, UINT, UINT, UINT, LPCWSTR); - WINBOOL AppendMenuW(HMENU, UINT, UINT, LPCWSTR); - WINBOOL ModifyMenuW(HMENU, UINT, UINT, UINT, LPCWSTR); - WINBOOL InsertMenuItemW(HMENU, UINT, WINBOOL, LPCMENUITEMINFO); - WINBOOL GetMenuItemInfoW(HMENU, UINT, WINBOOL, LPMENUITEMINFO); - WINBOOL SetMenuItemInfoW(HMENU, UINT, WINBOOL, LPCMENUITEMINFO); - int DrawTextW(HDC, LPCWSTR, int, LPRECT, UINT); - int DrawTextExW(HDC, LPWSTR, int, LPRECT, UINT, LPDRAWTEXTPARAMS); - WINBOOL GrayStringW(HDC, HBRUSH, GRAYSTRINGPROC, LPARAM, int, int, int, int, int); - WINBOOL DrawStateW(HDC, HBRUSH, DRAWSTATEPROC, LPARAM, WPARAM, int, int, int, int, UINT); - LONG TabbedTextOutW(HDC, int, int, LPCWSTR, int, int, LPINT, int); - DWORD GetTabbedTextExtentW(HDC, LPCWSTR, int, int, LPINT); - WINBOOL SetPropW(HWND, LPCWSTR, HANDLE); - HANDLE GetPropW(HWND, LPCWSTR); - HANDLE RemovePropW(HWND, LPCWSTR); - int EnumPropsExW(HWND, PROPENUMPROCEX, LPARAM); - int EnumPropsW(HWND, PROPENUMPROC); - WINBOOL SetWindowTextW(HWND, LPCWSTR); - int GetWindowTextW(HWND, LPWSTR, int); - int GetWindowTextLengthW(HWND); - int MessageBoxW(HWND, LPCWSTR, LPCWSTR, UINT); - int MessageBoxExW(HWND, LPCWSTR, LPCWSTR, UINT, ushort); - int MessageBoxIndirectW(LPMSGBOXPARAMS); - LONG GetWindowLongW(HWND, int); - LONG SetWindowLongW(HWND, int, LONG); - DWORD GetClassLongW(HWND, int); - DWORD SetClassLongW(HWND, int, LONG); - HWND FindWindowW(LPCWSTR, LPCWSTR); - HWND FindWindowExW(HWND, HWND, LPCWSTR, LPCWSTR); - int GetClassNameW(HWND, LPWSTR, int); - HHOOK SetWindowsHookExW(int, HOOKPROC, HINST, DWORD); - HBITMAP LoadBitmapW(HINST, LPCWSTR); - HCURSOR LoadCursorW(HINST, LPCWSTR); - HCURSOR LoadCursorFromFileW(LPCWSTR); - HICON LoadIconW(HINST, LPCWSTR); - HANDLE LoadImageW(HINST, LPCWSTR, UINT, int, int, UINT); - int LoadStringW(HINST, UINT, LPWSTR, int); - WINBOOL IsDialogMessageW(HWND, LPMSG); - int DlgDirListW(HWND, LPWSTR, int, int, UINT); - WINBOOL DlgDirSelectExW(HWND, LPWSTR, int, int); - int DlgDirListComboBoxW(HWND, LPWSTR, int, int, UINT); - WINBOOL DlgDirSelectComboBoxExW(HWND, LPWSTR, int, int); - LRESULT DefFrameProcW(HWND, HWND, UINT, WPARAM, LPARAM); - LRESULT DefMDIChildProcW(HWND, UINT, WPARAM, LPARAM); - HWND CreateMDIWindowW(LPWSTR, LPWSTR, DWORD, int, int, int, int, HWND, HINST, LPARAM); - WINBOOL WinHelpW(HWND, LPCWSTR, UINT, DWORD); - LONG ChangeDisplaySettingsW(LPDEVMODE, DWORD); - WINBOOL EnumDisplaySettingsW(LPCWSTR, DWORD, LPDEVMODE); - WINBOOL SystemParametersInfoW(UINT, UINT, PVOID, UINT); - int AddFontResourceW(LPCWSTR); - HMETAFILE CopyMetaFileW(HMETAFILE, LPCWSTR); - HFONT CreateFontIndirectW(PLOGFONT); - HFONT CreateFontW(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCWSTR); - HDC CreateICW(LPCWSTR, LPCWSTR, LPCWSTR, LPDEVMODE); - HDC CreateMetaFileW(LPCWSTR); - WINBOOL CreateScalableFontResourceW(DWORD, LPCWSTR, LPCWSTR, LPCWSTR); - int EnumFontFamiliesExW(HDC, LPLOGFONT, FONTENUMEXPROC, LPARAM, DWORD); - int EnumFontFamiliesW(HDC, LPCWSTR, FONTENUMPROC, LPARAM); - int EnumFontsW(HDC, LPCWSTR, ENUMFONTSPROC, LPARAM); - WINBOOL GetCharWidthW(HDC, UINT, UINT, LPINT); - WINBOOL GetCharWidth32W(HDC, UINT, UINT, LPINT); - WINBOOL GetCharWidthFloatW(HDC, UINT, UINT, PFLOAT); - WINBOOL GetCharABCWidthsW(HDC, UINT, UINT, LPABC); - WINBOOL GetCharABCWidthsFloatW(HDC, UINT, UINT, LPABCFLOAT); - DWORD GetGlyphOutlineW(HDC, UINT, UINT, LPGLYPHMETRICS, DWORD, LPVOID, PMAT2); - HMETAFILE GetMetaFileW(LPCWSTR); - UINT GetOutlineTextMetricsW(HDC, UINT, LPOUTLINETEXTMETRIC); - WINBOOL GetTextExtentPointW(HDC, LPCWSTR, int, LPSIZE); - WINBOOL GetTextExtentPoint32W(HDC, LPCWSTR, int, LPSIZE); - WINBOOL GetTextExtentExPointW(HDC, LPCWSTR, int, int, LPINT, LPINT, LPSIZE); - DWORD GetCharacterPlacementW(HDC, LPCWSTR, int, int, LPGCP_RESULTS, DWORD); - HDC ResetDCW(HDC, LPDEVMODE); - WINBOOL RemoveFontResourceW(LPCWSTR); - HENHMETAFILE CopyEnhMetaFileW(HENHMETAFILE, LPCWSTR); - HDC CreateEnhMetaFileW(HDC, LPCWSTR, LPRECT, LPCWSTR); - HENHMETAFILE GetEnhMetaFileW(LPCWSTR); - UINT GetEnhMetaFileDescriptionW(HENHMETAFILE, UINT, LPWSTR); - WINBOOL GetTextMetricsW(HDC, LPTEXTMETRIC); - int StartDocW(HDC, PDOCINFO); - int GetObjectW(HGDIOBJ, int, LPVOID); - WINBOOL TextOutW(HDC, int, int, LPCWSTR, int); - WINBOOL ExtTextOutW(HDC, int, int, UINT, LPRECT, LPCWSTR, UINT, LPINT); - WINBOOL PolyTextOutW(HDC, PPOLYTEXT, int); - int GetTextFaceW(HDC, int, LPWSTR); - DWORD GetKerningPairsW(HDC, DWORD, LPKERNINGPAIR); - WINBOOL GetLogColorSpaceW(HCOLORSPACE, LPLOGCOLORSPACE, DWORD); - HCOLORSPACE CreateColorSpaceW(LPLOGCOLORSPACE); - WINBOOL GetICMProfileW(HDC, DWORD, LPWSTR); - WINBOOL SetICMProfileW(HDC, LPWSTR); - WINBOOL UpdateICMRegKeyW(DWORD, DWORD, LPWSTR, UINT); - int EnumICMProfilesW(HDC, ICMENUMPROC, LPARAM); - HPROPSHEETPAGE CreatePropertySheetPageW(LPCPROPSHEETPAGE); - int PropertySheetW(LPCPROPSHEETHEADER); - HIMAGELIST ImageList_LoadImageW(HINST, LPCWSTR, int, int, COLORREF, UINT, UINT); - HWND CreateStatusWindowW(LONG, LPCWSTR, HWND, UINT); - void DrawStatusTextW(HDC, LPRECT, LPCWSTR); - WINBOOL GetOpenFileNameW(LPOPENFILENAME); - WINBOOL GetSaveFileNameW(LPOPENFILENAME); - int GetFileTitleW(LPCWSTR, LPWSTR, ushort); - WINBOOL ChooseColorW(LPCHOOSECOLOR); - HWND ReplaceTextW(LPFINDREPLACE); - WINBOOL ChooseFontW(LPCHOOSEFONT); - HWND FindTextW(LPFINDREPLACE); - WINBOOL PrintDlgW(LPPRINTDLG); - WINBOOL PageSetupDlgW(LPPAGESETUPDLG); - WINBOOL CreateProcessW(LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, WINBOOL, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); - void GetStartupInfoW(LPSTARTUPINFO); - HANDLE FindFirstFileW(LPCWSTR, LPWIN32_FIND_DATAW); - WINBOOL FindNextFileW(HANDLE, LPWIN32_FIND_DATAW); - WINBOOL GetVersionExW(LPOSVERSIONINFO); - HDC CreateDCW(LPCWSTR, LPCWSTR, LPCWSTR, PDEVMODE); - HFONT CreateFontA(int, int, int, int, int, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, LPCSTR); - DWORD VerInstallFileW(DWORD, LPWSTR, LPWSTR, LPWSTR, LPWSTR, LPWSTR, LPWSTR, PUINT); - DWORD GetFileVersionInfoSizeW(LPWSTR, LPDWORD); - WINBOOL GetFileVersionInfoW(LPWSTR, DWORD, DWORD, LPVOID); - DWORD VerLanguageNameW(DWORD, LPWSTR, DWORD); - WINBOOL VerQueryValueW(LPVOID, LPWSTR, LPVOID, PUINT); - DWORD VerFindFileW(DWORD, LPWSTR, LPWSTR, LPWSTR, LPWSTR, PUINT, LPWSTR, PUINT); - LONG RegSetValueExW(HKEY, LPCWSTR, DWORD, DWORD, LPBYTE, DWORD); - LONG RegUnLoadKeyW(HKEY, LPCWSTR); - WINBOOL InitiateSystemShutdownW(LPWSTR, LPWSTR, DWORD, WINBOOL, WINBOOL); - WINBOOL AbortSystemShutdownW(LPWSTR); - LONG RegRestoreKeyW(HKEY, LPCWSTR, DWORD); - LONG RegSaveKeyW(HKEY, LPCWSTR, LPSECURITY_ATTRIBUTES); - LONG RegSetValueW(HKEY, LPCWSTR, DWORD, LPCWSTR, DWORD); - LONG RegQueryValueW(HKEY, LPCWSTR, LPWSTR, PLONG); - LONG RegQueryMultipleValuesW(HKEY, PVALENT, DWORD, LPWSTR, LPDWORD); - LONG RegQueryValueExW(HKEY, LPCWSTR, LPDWORD, LPDWORD, LPBYTE, LPDWORD); - LONG RegReplaceKeyW(HKEY, LPCWSTR, LPCWSTR, LPCWSTR); - LONG RegConnectRegistryW(LPWSTR, HKEY, PHKEY); - LONG RegCreateKeyW(HKEY, LPCWSTR, PHKEY); - LONG RegCreateKeyExW(HKEY, LPCWSTR, DWORD, LPWSTR, DWORD, REGSAM, LPSECURITY_ATTRIBUTES, PHKEY, LPDWORD); - LONG RegDeleteKeyW(HKEY, LPCWSTR); - LONG RegDeleteValueW(HKEY, LPCWSTR); - LONG RegEnumKeyW(HKEY, DWORD, LPWSTR, DWORD); - LONG RegEnumKeyExW(HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPWSTR, LPDWORD, PFILETIME); - LONG RegEnumValueW(HKEY, DWORD, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPBYTE, LPDWORD); - LONG RegLoadKeyW(HKEY, LPCWSTR, LPCWSTR); - LONG RegOpenKeyW(HKEY, LPCWSTR, PHKEY); - LONG RegOpenKeyExW(HKEY, LPCWSTR, DWORD, REGSAM, PHKEY); - LONG RegQueryInfoKeyW(HKEY, LPWSTR, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, LPDWORD, PFILETIME); - int CompareStringW(LCID, DWORD, LPCWSTR, int, LPCWSTR, int); - int LCMapStringW(LCID, DWORD, LPCWSTR, int, LPWSTR, int); - int GetLocaleInfoW(LCID, LCTYPE, LPWSTR, int); - WINBOOL SetLocaleInfoW(LCID, LCTYPE, LPCWSTR); - int GetTimeFormatW(LCID, DWORD, LPSYSTEMTIME, LPCWSTR, LPWSTR, int); - int GetDateFormatW(LCID, DWORD, LPSYSTEMTIME, LPCWSTR, LPWSTR, int); - int GetNumberFormatW(LCID, DWORD, LPCWSTR, PNUMBERFMT, LPWSTR, int); - int GetCurrencyFormatW(LCID, DWORD, LPCWSTR, PCURRENCYFMT, LPWSTR, int); - WINBOOL EnumCalendarInfoW(CALINFO_ENUMPROC, LCID, CALID, CALTYPE); - WINBOOL EnumTimeFormatsW(TIMEFMT_ENUMPROC, LCID, DWORD); - WINBOOL EnumDateFormatsW(DATEFMT_ENUMPROC, LCID, DWORD); - WINBOOL GetStringTypeExW(LCID, DWORD, LPCWSTR, int, LPWORD); - WINBOOL GetStringTypeW(DWORD, LPCWSTR, int, LPWORD); - int FoldStringW(DWORD, LPCWSTR, int, LPWSTR, int); - WINBOOL EnumSystemLocalesW(LOCALE_ENUMPROC, DWORD); - WINBOOL EnumSystemCodePagesW(CODEPAGE_ENUMPROC, DWORD); - WINBOOL PeekConsoleInputW(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL ReadConsoleInputW(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL WriteConsoleInputW(HANDLE, PINPUTRECORD, DWORD, LPDWORD); - WINBOOL ReadConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); - WINBOOL WriteConsoleOutputW(HANDLE, PCHAR_INFO, COORD, COORD, PSMALL_RECT); - WINBOOL ReadConsoleOutputCharacterW(HANDLE, LPWSTR, DWORD, COORD, LPDWORD); - WINBOOL WriteConsoleOutputCharacterW(HANDLE, LPCWSTR, DWORD, COORD, LPDWORD); - WINBOOL FillConsoleOutputCharacterW(HANDLE, WCHAR, DWORD, COORD, LPDWORD); - WINBOOL ScrollConsoleScreenBufferW(HANDLE, PSMALL_RECT, PSMALL_RECT, COORD, PCHAR_INFO); - DWORD GetConsoleTitleW(LPWSTR, DWORD); - WINBOOL SetConsoleTitleW(LPCWSTR); - WINBOOL ReadConsoleW(HANDLE, LPVOID, DWORD, LPDWORD, LPVOID); - WINBOOL WriteConsoleW(HANDLE, POINTER, DWORD, LPDWORD, LPVOID); - DWORD WNetAddConnectionW(LPCWSTR, LPCWSTR, LPCWSTR); - DWORD WNetAddConnection2W(LPNETRESOURCE, LPCWSTR, LPCWSTR, DWORD); - DWORD WNetAddConnection3W(HWND, LPNETRESOURCE, LPCWSTR, LPCWSTR, DWORD); - DWORD WNetCancelConnectionW(LPCWSTR, WINBOOL); - DWORD WNetCancelConnection2W(LPCWSTR, DWORD, WINBOOL); - DWORD WNetGetConnectionW(LPCWSTR, LPWSTR, LPDWORD); - DWORD WNetUseConnectionW(HWND, LPNETRESOURCE, LPCWSTR, LPCWSTR, DWORD, LPWSTR, LPDWORD, LPDWORD); - DWORD WNetSetConnectionW(LPCWSTR, DWORD, LPVOID); - DWORD WNetConnectionDialog1W(LPCONNECTDLGSTRUCT); - DWORD WNetDisconnectDialog1W(LPDISCDLGSTRUCT); - DWORD WNetOpenEnumW(DWORD, DWORD, DWORD, LPNETRESOURCE, LPHANDLE); - DWORD WNetEnumResourceW(HANDLE, LPDWORD, LPVOID, LPDWORD); - DWORD WNetGetUniversalNameW(LPCWSTR, DWORD, LPVOID, LPDWORD); - DWORD WNetGetUserW(LPCWSTR, LPWSTR, LPDWORD); - DWORD WNetGetProviderNameW(DWORD, LPWSTR, LPDWORD); - DWORD WNetGetNetworkInformationW(LPCWSTR, LPNETINFOSTRUCT); - DWORD WNetGetLastErrorW(LPDWORD, LPWSTR, DWORD, LPWSTR, DWORD); - DWORD MultinetGetConnectionPerformanceW(LPNETRESOURCE, LPNETCONNECTINFOSTRUCT); - WINBOOL ChangeServiceConfigW(SC_HANDLE, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR); - SC_HANDLE CreateServiceW(SC_HANDLE, LPCWSTR, LPCWSTR, DWORD, DWORD, DWORD, DWORD, LPCWSTR, LPCWSTR, LPDWORD, LPCWSTR, LPCWSTR, LPCWSTR); - WINBOOL EnumDependentServicesW(SC_HANDLE, DWORD, LPENUM_SERVICE_STATUS, DWORD, LPDWORD, LPDWORD); - WINBOOL EnumServicesStatusW(SC_HANDLE, DWORD, DWORD, LPENUM_SERVICE_STATUS, DWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL GetServiceKeyNameW(SC_HANDLE, LPCWSTR, LPWSTR, LPDWORD); - WINBOOL GetServiceDisplayNameW(SC_HANDLE, LPCWSTR, LPWSTR, LPDWORD); - SC_HANDLE OpenSCManagerW(LPCWSTR, LPCWSTR, DWORD); - SC_HANDLE OpenServiceW(SC_HANDLE, LPCWSTR, DWORD); - WINBOOL QueryServiceConfigW(SC_HANDLE, LPQUERY_SERVICE_CONFIG, DWORD, LPDWORD); - WINBOOL QueryServiceLockStatusW(SC_HANDLE, LPQUERY_SERVICE_LOCK_STATUS, DWORD, LPDWORD); - SERVICE_STATUS_HANDLE RegisterServiceCtrlHandlerW(LPCWSTR, LPHANDLER_FUNCTION); - WINBOOL StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRY); - WINBOOL StartServiceW(SC_HANDLE, DWORD, LPCWSTR); - uint DragQueryFileW(HDROP, uint, LPCWSTR, uint); - HICON ExtractAssociatedIconW(HINST, LPCWSTR, LPWORD); - HICON ExtractIconW(HINST, LPCWSTR, uint); - HINST FindExecutableW(LPCWSTR, LPCWSTR, LPCWSTR); - int ShellAboutW(HWND, LPCWSTR, LPCWSTR, HICON); - HINST ShellExecuteW(HWND, LPCWSTR, LPCWSTR, LPCWSTR, LPCWSTR, int); - HSZ DdeCreateStringHandleW(DWORD, LPCWSTR, int); - UINT DdeInitializeW(LPDWORD, PFNCALLBACK, DWORD, DWORD); - DWORD DdeQueryStringW(DWORD, HSZ, LPCWSTR, DWORD, int); - WINBOOL LogonUserW(LPWSTR, LPWSTR, LPWSTR, DWORD, DWORD, PHANDLE); - WINBOOL CreateProcessAsUserW(HANDLE, LPCWSTR, LPWSTR, LPSECURITY_ATTRIBUTES, LPSECURITY_ATTRIBUTES, WINBOOL, DWORD, LPVOID, LPCWSTR, LPSTARTUPINFO, LPPROCESS_INFORMATION); - WINBOOL AccessCheck(PSECURITY_DESCRIPTOR, HANDLE, DWORD, PGENERIC_MAPPING, PPRIVILEGE_SET, LPDWORD, LPDWORD, LPBOOL); - LONG InterlockedIncrement(LPLONG); - LONG InterlockedDecrement(LPLONG); - LONG InterlockedExchange(LPLONG, LONG); - WINBOOL FreeResource(HGLOBAL); - LPVOID LockResource(HGLOBAL); - WINBOOL FreeLibrary(HINST); - void FreeLibraryAndExitThread(HMODULE, DWORD); - WINBOOL DisableThreadLibraryCalls(HMODULE); - FARPROC GetProcAddress(HINST, LPCSTR); - DWORD GetVersion(); - HGLOBAL GlobalAlloc(UINT, DWORD); - HGLOBAL GlobalReAlloc(HGLOBAL, DWORD, UINT); - DWORD GlobalSize(HGLOBAL); - UINT GlobalFlags(HGLOBAL); - LPVOID GlobalLock(HGLOBAL); - HGLOBAL GlobalHandle(LPCVOID); - WINBOOL GlobalUnlock(HGLOBAL); - HGLOBAL GlobalFree(HGLOBAL); - UINT GlobalCompact(DWORD); - void GlobalFix(HGLOBAL); - void GlobalUnfix(HGLOBAL); - LPVOID GlobalWire(HGLOBAL); - WINBOOL GlobalUnWire(HGLOBAL); - void GlobalMemoryStatus(LPMEMORYSTATUS); - HLOCAL LocalAlloc(UINT, UINT); - HLOCAL LocalReAlloc(HLOCAL, UINT, UINT); - LPVOID LocalLock(HLOCAL); - HLOCAL LocalHandle(LPCVOID); - WINBOOL LocalUnlock(HLOCAL); - UINT LocalSize(HLOCAL); - UINT LocalFlags(HLOCAL); - HLOCAL LocalFree(HLOCAL); - UINT LocalShrink(HLOCAL, UINT); - UINT LocalCompact(UINT); - WINBOOL FlushInstructionCache(HANDLE, LPCVOID, DWORD); - LPVOID VirtualAlloc(LPVOID, DWORD, DWORD, DWORD); - WINBOOL VirtualFree(LPVOID, DWORD, DWORD); - WINBOOL VirtualProtect(LPVOID, DWORD, DWORD, PDWORD); - DWORD VirtualQuery(LPCVOID, PMEMORY_BASIC_INFORMATION, DWORD); - WINBOOL VirtualProtectEx(HANDLE, LPVOID, DWORD, DWORD, PDWORD); - DWORD VirtualQueryEx(HANDLE, LPCVOID, PMEMORY_BASIC_INFORMATION, DWORD); - HANDLE HeapCreate(DWORD, DWORD, DWORD); - WINBOOL HeapDestroy(HANDLE); - LPVOID HeapAlloc(HANDLE, DWORD, DWORD); - LPVOID HeapReAlloc(HANDLE, DWORD, LPVOID, DWORD); - WINBOOL HeapFree(HANDLE, DWORD, LPVOID); - DWORD HeapSize(HANDLE, DWORD, LPCVOID); - WINBOOL HeapValidate(HANDLE, DWORD, LPCVOID); - UINT HeapCompact(HANDLE, DWORD); - HANDLE GetProcessHeap(); - DWORD GetProcessHeaps(DWORD, PHANDLE); - WINBOOL HeapLock(HANDLE); - WINBOOL HeapUnlock(HANDLE); - WINBOOL HeapWalk(HANDLE, LPPROCESS_HEAP_ENTRY); - WINBOOL GetProcessAffinityMask(HANDLE, LPDWORD, LPDWORD); - WINBOOL GetProcessTimes(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME); - WINBOOL GetProcessWorkingSetSize(HANDLE, LPDWORD, LPDWORD); - WINBOOL SetProcessWorkingSetSize(HANDLE, DWORD, DWORD); - HANDLE OpenProcess(DWORD, WINBOOL, DWORD); - HANDLE GetCurrentProcess(); - DWORD GetCurrentProcessId(); - void ExitProcess(UINT); - WINBOOL TerminateProcess(HANDLE, UINT); - WINBOOL GetExitCodeProcess(HANDLE, LPDWORD); - void FatalExit(int); - void RaiseException(DWORD, DWORD, DWORD); - LONG UnhandledExceptionFilter(EMPTYRECORD*); - HANDLE CreateRemoteThread(HANDLE, LPSECURITY_ATTRIBUTES, DWORD, LPTHREAD_START_ROUTINE, LPVOID, DWORD, LPDWORD); - HANDLE GetCurrentThread(); - DWORD GetCurrentThreadId(); - DWORD SetThreadAffinityMask(HANDLE, DWORD); - WINBOOL SetThreadPriority(HANDLE, int); - int GetThreadPriority(HANDLE); - WINBOOL GetThreadTimes(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME, LPFILETIME); - void ExitThread(DWORD); - WINBOOL TerminateThread(HANDLE, DWORD); - WINBOOL GetExitCodeThread(HANDLE, LPDWORD); - WINBOOL GetThreadSelectorEntry(HANDLE, DWORD, LPLDT_ENTRY); - DWORD GetLastError(); - void SetLastError(DWORD); - HANDLE CreateIoCompletionPort(HANDLE, HANDLE, DWORD, DWORD); - UINT SetErrorMode(UINT); - WINBOOL ReadProcessMemory(HANDLE, LPCVOID, LPVOID, DWORD, LPDWORD); - WINBOOL WriteProcessMemory(HANDLE, LPVOID, LPVOID, DWORD, LPDWORD); - WINBOOL GetThreadContext(HANDLE, LPCONTEXT); - DWORD SuspendThread(HANDLE); - DWORD ResumeThread(HANDLE); - void DebugBreak(); - WINBOOL WaitForDebugEvent(LPDEBUG_EVENT, DWORD); - WINBOOL ContinueDebugEvent(DWORD, DWORD, DWORD); - WINBOOL DebugActiveProcess(DWORD); - void InitializeCriticalSection(LPCRITICAL_SECTION); - void EnterCriticalSection(LPCRITICAL_SECTION); - WINBOOL TryEnterCriticalSection(LPCRITICAL_SECTION); - void LeaveCriticalSection(LPCRITICAL_SECTION); - void DeleteCriticalSection(LPCRITICAL_SECTION); - WINBOOL SetEvent(HANDLE); - WINBOOL ResetEvent(HANDLE); - WINBOOL PulseEvent(HANDLE); - WINBOOL ReleaseSemaphore(HANDLE, LONG, LPLONG); - WINBOOL ReleaseMutex(HANDLE); - DWORD WaitForSingleObject(HANDLE, DWORD); - DWORD WaitForMultipleObjects(DWORD, HANDLE*, WINBOOL, DWORD); - void Sleep(DWORD); - HGLOBAL LoadResource(HINST, HRSRC); - DWORD SizeofResource(HINST, HRSRC); - ATOM GlobalDeleteAtom(ATOM); - WINBOOL InitAtomTable(DWORD); - ATOM DeleteAtom(ATOM); - UINT SetHandleCount(UINT); - DWORD GetLogicalDrives(); - WINBOOL LockFile(HANDLE, DWORD, DWORD, DWORD, DWORD); - WINBOOL UnlockFile(HANDLE, DWORD, DWORD, DWORD, DWORD); - WINBOOL LockFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPOVERLAPPED); - WINBOOL UnlockFileEx(HANDLE, DWORD, DWORD, DWORD, LPOVERLAPPED); - WINBOOL GetFileInformationByHandle(HANDLE, LPBY_HANDLE_FILE_INFORMATION); - DWORD GetFileType(HANDLE); - DWORD GetFileSize(HANDLE, LPDWORD); - HANDLE GetStdHandle(DWORD); - WINBOOL SetStdHandle(DWORD, HANDLE); - WINBOOL FlushFileBuffers(HANDLE); - WINBOOL DeviceIoControl(HANDLE, DWORD, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); - WINBOOL SetEndOfFile(HANDLE); - DWORD SetFilePointer(HANDLE, LONG, PLONG, DWORD); - WINBOOL FindClose(HANDLE); - WINBOOL GetFileTime(HANDLE, LPFILETIME, LPFILETIME, LPFILETIME); - WINBOOL SetFileTime(HANDLE, FILETIME*, FILETIME*, FILETIME*); - WINBOOL CloseHandle(HANDLE); - WINBOOL DuplicateHandle(HANDLE, HANDLE, HANDLE, LPHANDLE, DWORD, WINBOOL, DWORD); - WINBOOL GetHandleInformation(HANDLE, LPDWORD); - WINBOOL SetHandleInformation(HANDLE, DWORD, DWORD); - DWORD LoadModule(LPCSTR, LPVOID); - UINT WinExec(LPCSTR, UINT); - WINBOOL ClearCommBreak(HANDLE); - WINBOOL ClearCommError(HANDLE, LPDWORD, LPCOMSTAT); - WINBOOL SetupComm(HANDLE, DWORD, DWORD); - WINBOOL EscapeCommFunction(HANDLE, DWORD); - WINBOOL GetCommConfig(HANDLE, LPCOMMCONFIG, LPDWORD); - WINBOOL GetCommProperties(HANDLE, LPCOMMPROP); - WINBOOL GetCommModemStatus(HANDLE, PDWORD); - WINBOOL GetCommState(HANDLE, PDCB); - WINBOOL GetCommTimeouts(HANDLE, PCOMMTIMEOUTS); - WINBOOL PurgeComm(HANDLE, DWORD); - WINBOOL SetCommBreak(HANDLE); - WINBOOL SetCommConfig(HANDLE, LPCOMMCONFIG, DWORD); - WINBOOL SetCommMask(HANDLE, DWORD); - WINBOOL SetCommState(HANDLE, TDCB*); - WINBOOL SetCommTimeouts(HANDLE, TCOMMTIMEOUTS*); - WINBOOL TransmitCommChar(HANDLE, char); - WINBOOL WaitCommEvent(HANDLE, LPDWORD, LPOVERLAPPED); - DWORD SetTapePosition(HANDLE, DWORD, DWORD, DWORD, DWORD, WINBOOL); - DWORD GetTapePosition(HANDLE, DWORD, LPDWORD, LPDWORD, LPDWORD); - DWORD PrepareTape(HANDLE, DWORD, WINBOOL); - DWORD EraseTape(HANDLE, DWORD, WINBOOL); - DWORD CreateTapePartition(HANDLE, DWORD, DWORD, DWORD); - DWORD WriteTapemark(HANDLE, DWORD, DWORD, WINBOOL); - DWORD GetTapeStatus(HANDLE); - DWORD GetTapeParameters(HANDLE, DWORD, LPDWORD, LPVOID); - DWORD SetTapeParameters(HANDLE, DWORD, LPVOID); - WINBOOL Beep(DWORD, DWORD); - int MulDiv(int, int, int); - void GetSystemTime(LPSYSTEMTIME); - void GetSystemTimeAsFileTime(FILETIME*); - WINBOOL SetSystemTime(SYSTEMTIME*); - void GetLocalTime(LPSYSTEMTIME); - WINBOOL SetLocalTime(SYSTEMTIME*); - void GetSystemInfo(LPSYSTEM_INFO); - WINBOOL SystemTimeToTzSpecificLocalTime(LPTIME_ZONE_INFORMATION, LPSYSTEMTIME, LPSYSTEMTIME); - DWORD GetTimeZoneInformation(LPTIME_ZONE_INFORMATION); - WINBOOL SetTimeZoneInformation(TIME_ZONE_INFORMATION*); - WINBOOL SystemTimeToFileTime(SYSTEMTIME*, LPFILETIME); - WINBOOL FileTimeToLocalFileTime(FILETIME*, LPFILETIME); - WINBOOL LocalFileTimeToFileTime(FILETIME*, LPFILETIME); - WINBOOL FileTimeToSystemTime(FILETIME*, LPSYSTEMTIME); - LONG CompareFileTime(FILETIME*, FILETIME*); - WINBOOL FileTimeToDosDateTime(FILETIME*, LPWORD, LPWORD); - WINBOOL DosDateTimeToFileTime(ushort, ushort, LPFILETIME); - DWORD GetTickCount(); - WINBOOL SetSystemTimeAdjustment(DWORD, WINBOOL); - WINBOOL GetSystemTimeAdjustment(PDWORD, PDWORD, PWINBOOL); - WINBOOL CreatePipe(PHANDLE, PHANDLE, LPSECURITY_ATTRIBUTES, DWORD); - WINBOOL ConnectNamedPipe(HANDLE, LPOVERLAPPED); - WINBOOL DisconnectNamedPipe(HANDLE); - WINBOOL SetNamedPipeHandleState(HANDLE, LPDWORD, LPDWORD, LPDWORD); - WINBOOL GetNamedPipeInfo(HANDLE, LPDWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL PeekNamedPipe(HANDLE, LPVOID, DWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL TransactNamedPipe(HANDLE, LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPOVERLAPPED); - WINBOOL GetMailslotInfo(HANDLE, LPDWORD, LPDWORD, LPDWORD, LPDWORD); - WINBOOL SetMailslotInfo(HANDLE, DWORD); - LPVOID MapViewOfFile(HANDLE, DWORD, DWORD, DWORD, DWORD); - WINBOOL FlushViewOfFile(LPCVOID, DWORD); - WINBOOL UnmapViewOfFile(LPVOID); - HFILE OpenFile(LPCSTR, LPOFSTRUCT, UINT); - HFILE _lopen(LPCSTR, int); - HFILE _lcreat(LPCSTR, int); - UINT _lread(HFILE, LPVOID, UINT); - UINT _lwrite(HFILE, LPCSTR, UINT); - int _hread(HFILE, LPVOID, int); - int _hwrite(HFILE, LPCSTR, int); - HFILE _lclose(HFILE); - LONG _llseek(HFILE, LONG, int); - WINBOOL IsTextUnicode(LPVOID, int, LPINT); - DWORD TlsAlloc(); - LPVOID TlsGetValue(DWORD); - WINBOOL TlsSetValue(DWORD, LPVOID); - WINBOOL TlsFree(DWORD); - DWORD SleepEx(DWORD, WINBOOL); - DWORD WaitForSingleObjectEx(HANDLE, DWORD, WINBOOL); - DWORD WaitForMultipleObjectsEx(DWORD, HANDLE*, WINBOOL, DWORD, WINBOOL); - WINBOOL ReadFileEx(HANDLE, LPVOID, DWORD, LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE); - WINBOOL WriteFileEx(HANDLE, LPCVOID, DWORD, LPOVERLAPPED, LPOVERLAPPED_COMPLETION_ROUTINE); - WINBOOL BackupRead(HANDLE, LPBYTE, DWORD, LPDWORD, WINBOOL, WINBOOL, LPVOID*); - WINBOOL BackupSeek(HANDLE, DWORD, DWORD, LPDWORD, LPDWORD, LPVOID*); - WINBOOL BackupWrite(HANDLE, LPBYTE, DWORD, LPDWORD, WINBOOL, WINBOOL, LPVOID*); - WINBOOL SetProcessShutdownParameters(DWORD, DWORD); - WINBOOL GetProcessShutdownParameters(LPDWORD, LPDWORD); - void SetFileApisToOEM(); - void SetFileApisToANSI(); - WINBOOL AreFileApisANSI(); - WINBOOL CloseEventLog(HANDLE); - WINBOOL DeregisterEventSource(HANDLE); - WINBOOL NotifyChangeEventLog(HANDLE, HANDLE); - WINBOOL GetNumberOfEventLogRecords(HANDLE, PDWORD); - WINBOOL GetOldestEventLogRecord(HANDLE, PDWORD); - WINBOOL DuplicateToken(HANDLE, SECURITY_IMPERSONATION_LEVEL, PHANDLE); - WINBOOL GetKernelObjectSecurity(HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD); - WINBOOL ImpersonateNamedPipeClient(HANDLE); - WINBOOL ImpersonateLoggedOnUser(HANDLE); - WINBOOL ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL); - WINBOOL RevertToSelf(); - WINBOOL SetThreadToken(PHANDLE, HANDLE); - WINBOOL OpenProcessToken(HANDLE, DWORD, PHANDLE); - WINBOOL OpenThreadToken(HANDLE, DWORD, WINBOOL, PHANDLE); - WINBOOL GetTokenInformation(HANDLE, TOKEN_INFORMATION_CLASS, LPVOID, DWORD, PDWORD); - WINBOOL SetTokenInformation(HANDLE, TOKEN_INFORMATION_CLASS, LPVOID, DWORD); - WINBOOL AdjustTokenPrivileges(HANDLE, WINBOOL, PTOKEN_PRIVILEGES, DWORD, PTOKEN_PRIVILEGES, PDWORD); - WINBOOL AdjustTokenGroups(HANDLE, WINBOOL, PTOKEN_GROUPS, DWORD, PTOKEN_GROUPS, PDWORD); - WINBOOL PrivilegeCheck(HANDLE, PPRIVILEGE_SET, LPBOOL); - WINBOOL IsValidSid(PSID); - WINBOOL EqualSid(PSID, PSID); - WINBOOL EqualPrefixSid(PSID, PSID); - DWORD GetSidLengthRequired(UCHAR); - WINBOOL AllocateAndInitializeSid(PSID_IDENTIFIER_AUTHORITY, ubyte, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, DWORD, PSID*); - PVOID FreeSid(PSID); - WINBOOL InitializeSid(PSID, PSID_IDENTIFIER_AUTHORITY, ubyte); - PSID_IDENTIFIER_AUTHORITY GetSidIdentifierAuthority(PSID); - PDWORD GetSidSubAuthority(PSID, DWORD); - PUCHAR GetSidSubAuthorityCount(PSID); - DWORD GetLengthSid(PSID); - WINBOOL CopySid(DWORD, PSID, PSID); - WINBOOL AreAllAccessesGranted(DWORD, DWORD); - WINBOOL AreAnyAccessesGranted(DWORD, DWORD); - void MapGenericMask(PDWORD); - WINBOOL IsValidAcl(PACL); - WINBOOL InitializeAcl(PACL, DWORD, DWORD); - WINBOOL GetAclInformation(PACL, LPVOID, DWORD, ACL_INFORMATION_CLASS); - WINBOOL SetAclInformation(PACL, LPVOID, DWORD, ACL_INFORMATION_CLASS); - WINBOOL AddAce(PACL, DWORD, DWORD, LPVOID, DWORD); - WINBOOL DeleteAce(PACL, DWORD); - WINBOOL GetAce(PACL, DWORD, LPVOID*); - WINBOOL AddAccessAllowedAce(PACL, DWORD, DWORD, PSID); - WINBOOL AddAccessDeniedAce(PACL, DWORD, DWORD, PSID); - WINBOOL AddAuditAccessAce(PACL, DWORD, DWORD, PSID, WINBOOL, WINBOOL); - WINBOOL FindFirstFreeAce(PACL, LPVOID*); - WINBOOL InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR, DWORD); - WINBOOL IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR); - DWORD GetSecurityDescriptorLength(PSECURITY_DESCRIPTOR); - WINBOOL GetSecurityDescriptorControl(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR_CONTROL, LPDWORD); - WINBOOL SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR, WINBOOL, PACL, WINBOOL); - WINBOOL GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR, LPBOOL, PACL*, LPBOOL); - WINBOOL SetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR, WINBOOL, PACL, WINBOOL); - WINBOOL GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR, LPBOOL, PACL*, LPBOOL); - WINBOOL SetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR, PSID, WINBOOL); - WINBOOL GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR, PSID*, LPBOOL); - WINBOOL SetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR, PSID, WINBOOL); - WINBOOL GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR, PSID*, LPBOOL); - WINBOOL CreatePrivateObjectSecurity(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR*, WINBOOL, HANDLE, PGENERIC_MAPPING); - WINBOOL SetPrivateObjectSecurity(SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR*, PGENERIC_MAPPING, HANDLE); - WINBOOL GetPrivateObjectSecurity(PSECURITY_DESCRIPTOR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, PDWORD); - WINBOOL DestroyPrivateObjectSecurity(PSECURITY_DESCRIPTOR); - WINBOOL MakeSelfRelativeSD(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, LPDWORD); - WINBOOL MakeAbsoluteSD(PSECURITY_DESCRIPTOR, PSECURITY_DESCRIPTOR, LPDWORD, PACL, LPDWORD, PACL, LPDWORD, PSID, LPDWORD, PSID, LPDWORD); - WINBOOL SetKernelObjectSecurity(HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - WINBOOL FindNextChangeNotification(HANDLE); - WINBOOL FindCloseChangeNotification(HANDLE); - WINBOOL VirtualLock(LPVOID, DWORD); - WINBOOL VirtualUnlock(LPVOID, DWORD); - LPVOID MapViewOfFileEx(HANDLE, DWORD, DWORD, DWORD, DWORD, LPVOID); - WINBOOL SetPriorityClass(HANDLE, DWORD); - DWORD GetPriorityClass(HANDLE); - WINBOOL IsBadReadPtr(POINTER, UINT); - WINBOOL IsBadWritePtr(LPVOID, UINT); - WINBOOL IsBadHugeReadPtr(POINTER, UINT); - WINBOOL IsBadHugeWritePtr(LPVOID, UINT); - WINBOOL IsBadCodePtr(FARPROC); - WINBOOL AllocateLocallyUniqueId(PLUID); - WINBOOL QueryPerformanceCounter(PLARGE_INTEGER); - WINBOOL QueryPerformanceFrequency(PLARGE_INTEGER); - WINBOOL ActivateKeyboardLayout(HKL, UINT); - WINBOOL UnloadKeyboardLayout(HKL); - int GetKeyboardLayoutList(int, HKL*); - HKL GetKeyboardLayout(DWORD); - HDESK OpenInputDesktop(DWORD, WINBOOL, DWORD); - WINBOOL EnumDesktopWindows(HDESK, ENUMWINDOWSPROC, LPARAM); - WINBOOL SwitchDesktop(HDESK); - WINBOOL SetThreadDesktop(HDESK); - WINBOOL CloseDesktop(HDESK); - HDESK GetThreadDesktop(DWORD); - WINBOOL CloseWindowStation(HWINSTA); - WINBOOL SetProcessWindowStation(HWINSTA); - HWINSTA GetProcessWindowStation(); - WINBOOL SetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - WINBOOL GetUserObjectSecurity(HANDLE, PSECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD); - WINBOOL TranslateMessage(LPMSG); - WINBOOL SetMessageQueue(int); - WINBOOL RegisterHotKey(HWND, int, UINT, UINT); - WINBOOL UnregisterHotKey(HWND, int); - WINBOOL ExitWindowsEx(UINT, DWORD); - WINBOOL SwapMouseButton(WINBOOL); - DWORD GetMessagePos(); - LONG GetMessageTime(); - LONG GetMessageExtraInfo(); - LPARAM SetMessageExtraInfo(LPARAM); - int BroadcastSystemMessage(DWORD, LPDWORD, UINT, WPARAM, LPARAM); - WINBOOL AttachThreadInput(DWORD, DWORD, WINBOOL); - WINBOOL ReplyMessage(LRESULT); - WINBOOL WaitMessage(); - DWORD WaitForInputIdle(HANDLE, DWORD); - void PostQuitMessage(int); - WINBOOL InSendMessage(); - UINT GetDoubleClickTime(); - WINBOOL SetDoubleClickTime(UINT); - WINBOOL IsWindow(HWND); - WINBOOL IsMenu(HMENU); - WINBOOL IsChild(HWND, HWND); - WINBOOL DestroyWindow(HWND); - WINBOOL ShowWindow(HWND, int); - WINBOOL ShowWindowAsync(HWND, int); - WINBOOL FlashWindow(HWND, WINBOOL); - WINBOOL ShowOwnedPopups(HWND, WINBOOL); - WINBOOL OpenIcon(HWND); - WINBOOL CloseWindow(HWND); - WINBOOL MoveWindow(HWND, int, int, int, int, WINBOOL); - WINBOOL SetWindowPos(HWND, HWND, int, int, int, int, UINT); - WINBOOL GetWindowPlacement(HWND, WINDOWPLACEMENT*); - WINBOOL SetWindowPlacement(HWND, WINDOWPLACEMENT*); - HDWP BeginDeferWindowPos(int); - HDWP DeferWindowPos(HDWP, HWND, HWND, int, int, int, int, UINT); - WINBOOL EndDeferWindowPos(HDWP); - WINBOOL IsWindowVisible(HWND); - WINBOOL IsIconic(HWND); - WINBOOL AnyPopup(); - WINBOOL BringWindowToTop(HWND); - WINBOOL IsZoomed(HWND); - WINBOOL EndDialog(HWND, int); - HWND GetDlgItem(HWND, int); - WINBOOL SetDlgItemInt(HWND, int, UINT, WINBOOL); - UINT GetDlgItemInt(HWND, int, WINBOOL*, WINBOOL); - WINBOOL CheckDlgButton(HWND, int, UINT); - WINBOOL CheckRadioButton(HWND, int, int, int); - UINT IsDlgButtonChecked(HWND, int); - HWND GetNextDlgGroupItem(HWND, HWND, WINBOOL); - HWND GetNextDlgTabItem(HWND, HWND, WINBOOL); - int GetDlgCtrlID(HWND); - int GetDialogBaseUnits(); - WINBOOL OpenClipboard(HWND); - WINBOOL CloseClipboard(); - HWND GetClipboardOwner(); - HWND SetClipboardViewer(HWND); - HWND GetClipboardViewer(); - WINBOOL ChangeClipboardChain(HWND, HWND); - HANDLE SetClipboardData(UINT, HANDLE); - HANDLE GetClipboardData(UINT); - int CountClipboardFormats(); - UINT EnumClipboardFormats(UINT); - WINBOOL EmptyClipboard(); - WINBOOL IsClipboardFormatAvailable(UINT); - int GetPriorityClipboardFormat(UINT*, int); - HWND GetOpenClipboardWindow(); - LPSTR CharNextExA(ushort, LPCSTR, DWORD); - LPSTR CharPrevExA(ushort, LPCSTR, LPCSTR, DWORD); - HWND SetFocus(HWND); - HWND GetActiveWindow(); - HWND GetFocus(); - UINT GetKBCodePage(); - SHORT GetKeyState(int); - SHORT GetAsyncKeyState(int); - WINBOOL GetKeyboardState(PBYTE); - WINBOOL SetKeyboardState(LPBYTE); - int GetKeyboardType(int); - int ToAscii(UINT, UINT, PBYTE, LPWORD, UINT); - int ToAsciiEx(UINT, UINT, PBYTE, LPWORD, UINT, HKL); - int ToUnicode(UINT, UINT, PBYTE, LPWSTR, int, UINT); - DWORD OemKeyScan(ushort); - void keybd_event(ubyte, ubyte, DWORD); - void mouse_event(DWORD, DWORD, DWORD, DWORD); - WINBOOL GetInputState(); - DWORD GetQueueStatus(UINT); - HWND GetCapture(); - HWND SetCapture(HWND); - WINBOOL ReleaseCapture(); - DWORD MsgWaitForMultipleObjects(DWORD, LPHANDLE, WINBOOL, DWORD, DWORD); - UINT SetTimer(HWND, UINT, UINT, TIMERPROC); - WINBOOL KillTimer(HWND, UINT); - WINBOOL IsWindowUnicode(HWND); - WINBOOL EnableWindow(HWND, WINBOOL); - WINBOOL IsWindowEnabled(HWND); - WINBOOL DestroyAcceleratorTable(HACCEL); - int GetSystemMetrics(int); - HMENU GetMenu(HWND); - WINBOOL SetMenu(HWND, HMENU); - WINBOOL HiliteMenuItem(HWND, HMENU, UINT, UINT); - UINT GetMenuState(HMENU, UINT, UINT); - WINBOOL DrawMenuBar(HWND); - HMENU GetSystemMenu(HWND, WINBOOL); - HMENU CreateMenu(); - HMENU CreatePopupMenu(); - WINBOOL DestroyMenu(HMENU); - DWORD CheckMenuItem(HMENU, UINT, UINT); - WINBOOL EnableMenuItem(HMENU, UINT, UINT); - HMENU GetSubMenu(HMENU, int); - UINT GetMenuItemID(HMENU, int); - int GetMenuItemCount(HMENU); - WINBOOL RemoveMenu(HMENU, UINT, UINT); - WINBOOL DeleteMenu(HMENU, UINT, UINT); - WINBOOL SetMenuItemBitmaps(HMENU, UINT, UINT, HBITMAP, HBITMAP); - LONG GetMenuCheckMarkDimensions(); - WINBOOL TrackPopupMenu(HMENU, UINT, int, int, int, HWND, RECT*); - UINT GetMenuDefaultItem(HMENU, UINT, UINT); - WINBOOL SetMenuDefaultItem(HMENU, UINT, UINT); - WINBOOL GetMenuItemRect(HWND, HMENU, UINT, LPRECT); - int MenuItemFromPoint(HWND, HMENU, POINT); - DWORD DragObject(HWND, HWND, UINT, DWORD, HCURSOR); - WINBOOL DragDetect(HWND, POINT); - WINBOOL DrawIcon(HDC, int, int, HICON); - WINBOOL UpdateWindow(HWND); - HWND SetActiveWindow(HWND); - HWND GetForegroundWindow(); - WINBOOL PaintDesktop(HDC); - WINBOOL SetForegroundWindow(HWND); - HWND WindowFromDC(HDC); - HDC GetDC(HWND); - HDC GetDCEx(HWND, HRGN, DWORD); - HDC GetWindowDC(HWND); - int ReleaseDC(HWND, HDC); - HDC BeginPaint(HWND, LPPAINTSTRUCT); - WINBOOL EndPaint(HWND, LPPAINTSTRUCT); - WINBOOL GetUpdateRect(HWND, LPRECT, WINBOOL); - int GetUpdateRgn(HWND, HRGN, WINBOOL); - int SetWindowRgn(HWND, HRGN, WINBOOL); - int GetWindowRgn(HWND, HRGN); - int ExcludeUpdateRgn(HDC, HWND); - WINBOOL InvalidateRect(HWND, RECT*, WINBOOL); - WINBOOL ValidateRect(HWND, RECT*); - WINBOOL InvalidateRgn(HWND, HRGN, WINBOOL); - WINBOOL ValidateRgn(HWND, HRGN); - WINBOOL RedrawWindow(HWND, RECT*, HRGN, UINT); - WINBOOL LockWindowUpdate(HWND); - WINBOOL ScrollWindow(HWND, int, int, RECT*, RECT*); - WINBOOL ScrollDC(HDC, int, int, RECT*, RECT*, HRGN, LPRECT); - int ScrollWindowEx(HWND, int, int, RECT*, RECT*, HRGN, LPRECT, UINT); - int SetScrollPos(HWND, int, int, WINBOOL); - int GetScrollPos(HWND, int); - WINBOOL SetScrollRange(HWND, int, int, int, WINBOOL); - WINBOOL GetScrollRange(HWND, int, LPINT, LPINT); - WINBOOL ShowScrollBar(HWND, int, WINBOOL); - WINBOOL EnableScrollBar(HWND, UINT, UINT); - WINBOOL GetClientRect(HWND, LPRECT); - WINBOOL GetWindowRect(HWND, LPRECT); - WINBOOL AdjustWindowRect(LPRECT, DWORD, WINBOOL); - WINBOOL AdjustWindowRectEx(LPRECT, DWORD, WINBOOL, DWORD); - WINBOOL SetWindowContextHelpId(HWND, DWORD); - DWORD GetWindowContextHelpId(HWND); - WINBOOL SetMenuContextHelpId(HMENU, DWORD); - DWORD GetMenuContextHelpId(HMENU); - WINBOOL MessageBeep(UINT); - int ShowCursor(WINBOOL); - WINBOOL SetCursorPos(int, int); - HCURSOR SetCursor(HCURSOR); - WINBOOL GetCursorPos(LPPOINT); - WINBOOL ClipCursor(RECT*); - WINBOOL GetClipCursor(LPRECT); - HCURSOR GetCursor(); - WINBOOL CreateCaret(HWND, HBITMAP, int, int); - UINT GetCaretBlinkTime(); - WINBOOL SetCaretBlinkTime(UINT); - WINBOOL DestroyCaret(); - WINBOOL HideCaret(HWND); - WINBOOL ShowCaret(HWND); - WINBOOL SetCaretPos(int, int); - WINBOOL GetCaretPos(LPPOINT); - WINBOOL ClientToScreen(HWND, LPPOINT); - WINBOOL ScreenToClient(HWND, LPPOINT); - int MapWindowPoints(HWND, HWND, LPPOINT, UINT); - HWND WindowFromPoint(POINT); - HWND ChildWindowFromPoint(HWND, POINT); - DWORD GetSysColor(int); - HBRUSH GetSysColorBrush(int); - WINBOOL SetSysColors(int, WINT*, COLORREF*); - WINBOOL DrawFocusRect(HDC, RECT*); - int FillRect(HDC, RECT*, HBRUSH); - int FrameRect(HDC, RECT*, HBRUSH); - WINBOOL InvertRect(HDC, RECT*); - WINBOOL SetRect(LPRECT, int, int, int, int); - WINBOOL SetRectEmpty(LPRECT); - WINBOOL CopyRect(LPRECT, RECT*); - WINBOOL InflateRect(LPRECT, int, int); - WINBOOL IntersectRect(LPRECT, RECT*, RECT*); - WINBOOL UnionRect(LPRECT, RECT*, RECT*); - WINBOOL SubtractRect(LPRECT, RECT*, RECT*); - WINBOOL OffsetRect(LPRECT, int, int); - WINBOOL IsRectEmpty(RECT*); - WINBOOL EqualRect(RECT*, RECT*); - WINBOOL PtInRect(RECT*, POINT); - ushort GetWindowWord(HWND, int); - ushort SetWindowWord(HWND, int, ushort); - ushort GetClassWord(HWND, int); - ushort SetClassWord(HWND, int, ushort); - HWND GetDesktopWindow(); - HWND GetParent(HWND); - HWND SetParent(HWND, HWND); - WINBOOL EnumChildWindows(HWND, ENUMWINDOWSPROC, LPARAM); - WINBOOL EnumWindows(ENUMWINDOWSPROC, LPARAM); - WINBOOL EnumThreadWindows(DWORD, ENUMWINDOWSPROC, LPARAM); - HWND GetTopWindow(HWND); - DWORD GetWindowThreadProcessId(HWND, LPDWORD); - HWND GetLastActivePopup(HWND); - HWND GetWindow(HWND, UINT); - WINBOOL UnhookWindowsHook(int, HOOKPROC); - WINBOOL UnhookWindowsHookEx(HHOOK); - LRESULT CallNextHookEx(HHOOK, int, WPARAM, LPARAM); - WINBOOL CheckMenuRadioItem(HMENU, UINT, UINT, UINT, UINT); - HCURSOR CreateCursor(HINST, int, int, int, int, POINTER, POINTER); - WINBOOL DestroyCursor(HCURSOR); - WINBOOL SetSystemCursor(HCURSOR, DWORD); - HICON CreateIcon(HINST, int, int, ubyte, ubyte, ubyte*, ubyte*); - WINBOOL DestroyIcon(HICON); - int LookupIconIdFromDirectory(PBYTE, WINBOOL); - int LookupIconIdFromDirectoryEx(PBYTE, WINBOOL, int, int, UINT); - HICON CreateIconFromResource(PBYTE, DWORD, WINBOOL, DWORD); - HICON CreateIconFromResourceEx(PBYTE, DWORD, WINBOOL, DWORD, int, int, UINT); - HICON CopyImage(HANDLE, UINT, int, int, UINT); - HICON CreateIconIndirect(PICONINFO); - HICON CopyIcon(HICON); - WINBOOL GetIconInfo(HICON, PICONINFO); - WINBOOL MapDialogRect(HWND, LPRECT); - int SetScrollInfo(HWND, int, LPCSCROLLINFO, WINBOOL); - WINBOOL GetScrollInfo(HWND, int, LPSCROLLINFO); - WINBOOL TranslateMDISysAccel(HWND, LPMSG); - UINT ArrangeIconicWindows(HWND); - ushort TileWindows(HWND, UINT, RECT*, UINT, HWND*); - ushort CascadeWindows(HWND, UINT, RECT*, UINT, HWND*); - void SetLastErrorEx(DWORD); - void SetDebugErrorLevel(DWORD); - WINBOOL DrawEdge(HDC, LPRECT, UINT, UINT); - WINBOOL DrawFrameControl(HDC, LPRECT, UINT, UINT); - WINBOOL DrawCaption(HWND, HDC, RECT*, UINT); - WINBOOL DrawAnimatedRects(HWND, int, RECT*, RECT*); - WINBOOL TrackPopupMenuEx(HMENU, UINT, int, int, HWND, LPTPMPARAMS); - HWND ChildWindowFromPointEx(HWND, POINT, UINT); - WINBOOL DrawIconEx(HDC, int, int, HICON, int, int, UINT, HBRUSH, UINT); - WINBOOL AnimatePalette(HPALETTE, UINT, UINT, PALETTEENTRY*); - WINBOOL Arc(HDC, int, int, int, int, int, int, int, int); - WINBOOL BitBlt(HDC, int, int, int, int, HDC, int, int, DWORD); - WINBOOL CancelDC(HDC); - WINBOOL Chord(HDC, int, int, int, int, int, int, int, int); - HMETAFILE CloseMetaFile(HDC); - int CombineRgn(HRGN, HRGN, HRGN, int); - HBITMAP CreateBitmap(int, int, UINT, UINT, POINTER); - HBITMAP CreateBitmapIndirect(BITMAP*); - HBRUSH CreateBrushIndirect(LOGBRUSH*); - HBITMAP CreateCompatibleBitmap(HDC, int, int); - HBITMAP CreateDiscardableBitmap(HDC, int, int); - HDC CreateCompatibleDC(HDC); - HBITMAP CreateDIBitmap(HDC, BITMAPINFOHEADER*, DWORD, POINTER, BITMAPINFO*, UINT); - HBRUSH CreateDIBPatternBrush(HGLOBAL, UINT); - HBRUSH CreateDIBPatternBrushPt(POINTER, UINT); - HRGN CreateEllipticRgn(int, int, int, int); - HRGN CreateEllipticRgnIndirect(RECT*); - HBRUSH CreateHatchBrush(int, COLORREF); - HPALETTE CreatePalette(LOGPALETTE*); - HPEN CreatePen(int, int, COLORREF); - HPEN CreatePenIndirect(LOGPEN*); - HRGN CreatePolyPolygonRgn(POINT*, WINT*, int, int); - HBRUSH CreatePatternBrush(HBITMAP); - HRGN CreateRectRgn(int, int, int, int); - HRGN CreateRectRgnIndirect(RECT*); - HRGN CreateRoundRectRgn(int, int, int, int, int, int); - HBRUSH CreateSolidBrush(COLORREF); - WINBOOL DeleteDC(HDC); - WINBOOL DeleteMetaFile(HMETAFILE); - WINBOOL DeleteObject(HGDIOBJ); - int DrawEscape(HDC, int, int, LPCSTR); - WINBOOL Ellipse(HDC, int, int, int, int); - int EnumObjects(HDC, int, ENUMOBJECTSPROC, LPARAM); - WINBOOL EqualRgn(HRGN, HRGN); - int Escape(HDC, int, int, LPCSTR, LPVOID); - int ExtEscape(HDC, int, int, LPCSTR, int, LPSTR); - int ExcludeClipRect(HDC, int, int, int, int); - HRGN ExtCreateRegion(XFORM*, DWORD, RGNDATA*); - WINBOOL ExtFloodFill(HDC, int, int, COLORREF, UINT); - WINBOOL FillRgn(HDC, HRGN, HBRUSH); - WINBOOL FloodFill(HDC, int, int, COLORREF); - WINBOOL FrameRgn(HDC, HRGN, HBRUSH, int, int); - int GetROP2(HDC); - WINBOOL GetAspectRatioFilterEx(HDC, LPSIZE); - COLORREF GetBkColor(HDC); - int GetBkMode(HDC); - LONG GetBitmapBits(HBITMAP, LONG, LPVOID); - WINBOOL GetBitmapDimensionEx(HBITMAP, LPSIZE); - UINT GetBoundsRect(HDC, LPRECT, UINT); - WINBOOL GetBrushOrgEx(HDC, LPPOINT); - int GetClipBox(HDC, LPRECT); - int GetClipRgn(HDC, HRGN); - int GetMetaRgn(HDC, HRGN); - HGDIOBJ GetCurrentObject(HDC, UINT); - WINBOOL GetCurrentPositionEx(HDC, LPPOINT); - int GetDeviceCaps(HDC, int); - int GetDIBits(HDC, HBITMAP, UINT, UINT, LPVOID, LPBITMAPINFO, UINT); - DWORD GetFontData(HDC, DWORD, DWORD, LPVOID, DWORD); - int GetGraphicsMode(HDC); - int GetMapMode(HDC); - UINT GetMetaFileBitsEx(HMETAFILE, UINT, LPVOID); - COLORREF GetNearestColor(HDC, COLORREF); - UINT GetNearestPaletteIndex(HPALETTE, COLORREF); - DWORD GetObjectType(HGDIOBJ); - UINT GetPaletteEntries(HPALETTE, UINT, UINT, LPPALETTEENTRY); - COLORREF GetPixel(HDC, int, int); - int GetPixelFormat(HDC); - int GetPolyFillMode(HDC); - WINBOOL GetRasterizerCaps(LPRASTERIZER_STATUS, UINT); - DWORD GetRegionData(HRGN, DWORD, LPRGNDATA); - int GetRgnBox(HRGN, LPRECT); - HGDIOBJ GetStockObject(int); - int GetStretchBltMode(HDC); - UINT GetSystemPaletteEntries(HDC, UINT, UINT, LPPALETTEENTRY); - UINT GetSystemPaletteUse(HDC); - int GetTextCharacterExtra(HDC); - UINT GetTextAlign(HDC); - COLORREF GetTextColor(HDC); - int GetTextCharset(HDC); - int GetTextCharsetInfo(HDC, LPFONTSIGNATURE, DWORD); - WINBOOL TranslateCharsetInfo(DWORD*, LPCHARSETINFO, DWORD); - DWORD GetFontLanguageInfo(HDC); - WINBOOL GetViewportExtEx(HDC, LPSIZE); - WINBOOL GetViewportOrgEx(HDC, LPPOINT); - WINBOOL GetWindowExtEx(HDC, LPSIZE); - WINBOOL GetWindowOrgEx(HDC, LPPOINT); - int IntersectClipRect(HDC, int, int, int, int); - WINBOOL InvertRgn(HDC, HRGN); - WINBOOL LineDDA(int, int, int, int, LINEDDAPROC, LPARAM); - WINBOOL LineTo(HDC, int, int); - WINBOOL MaskBlt(HDC, int, int, int, int, HDC, int, int, HBITMAP, int, int, DWORD); - WINBOOL PlgBlt(HDC, POINT*, HDC, int, int, int, int, HBITMAP, int, int); - int OffsetClipRgn(HDC, int, int); - int OffsetRgn(HRGN, int, int); - WINBOOL PatBlt(HDC, int, int, int, int, DWORD); - WINBOOL Pie(HDC, int, int, int, int, int, int, int, int); - WINBOOL PlayMetaFile(HDC, HMETAFILE); - WINBOOL PaintRgn(HDC, HRGN); - WINBOOL PolyPolygon(HDC, POINT*, WINT*, int); - WINBOOL PtInRegion(HRGN, int, int); - WINBOOL PtVisible(HDC, int, int); - WINBOOL RectInRegion(HRGN, RECT*); - WINBOOL RectVisible(HDC, RECT*); - WINBOOL Rectangle(HDC, int, int, int, int); - WINBOOL RestoreDC(HDC, int); - UINT RealizePalette(HDC); - WINBOOL RoundRect(HDC, int, int, int, int, int, int); - WINBOOL ResizePalette(HPALETTE, UINT); - int SaveDC(HDC); - int SelectClipRgn(HDC, HRGN); - int ExtSelectClipRgn(HDC, HRGN, int); - int SetMetaRgn(HDC); - HGDIOBJ SelectObject(HDC, HGDIOBJ); - HPALETTE SelectPalette(HDC, HPALETTE, WINBOOL); - COLORREF SetBkColor(HDC, COLORREF); - int SetBkMode(HDC, int); - LONG SetBitmapBits(HBITMAP, DWORD, POINTER); - UINT SetBoundsRect(HDC, RECT*, UINT); - int SetDIBits(HDC, HBITMAP, UINT, UINT, POINTER, PBITMAPINFO, UINT); - int SetDIBitsToDevice(HDC, int, int, DWORD, DWORD, int, int, UINT, UINT, POINTER, BITMAPINFO*, UINT); - DWORD SetMapperFlags(HDC, DWORD); - int SetGraphicsMode(HDC, int); - int SetMapMode(HDC, int); - HMETAFILE SetMetaFileBitsEx(UINT, ubyte*); - UINT SetPaletteEntries(HPALETTE, UINT, UINT, PALETTEENTRY*); - COLORREF SetPixel(HDC, int, int, COLORREF); - WINBOOL SetPixelV(HDC, int, int, COLORREF); - int SetPolyFillMode(HDC, int); - WINBOOL StretchBlt(HDC, int, int, int, int, HDC, int, int, int, int, DWORD); - WINBOOL SetRectRgn(HRGN, int, int, int, int); - int StretchDIBits(HDC, int, int, int, int, int, int, int, int, POINTER, BITMAPINFO*, UINT, DWORD); - int SetROP2(HDC, int); - int SetStretchBltMode(HDC, int); - UINT SetSystemPaletteUse(HDC, UINT); - int SetTextCharacterExtra(HDC, int); - COLORREF SetTextColor(HDC, COLORREF); - UINT SetTextAlign(HDC, UINT); - WINBOOL SetTextJustification(HDC, int, int); - WINBOOL UpdateColors(HDC); - WINBOOL PlayMetaFileRecord(HDC, LPHANDLETABLE, LPMETARECORD, UINT); - WINBOOL EnumMetaFile(HDC, HMETAFILE, ENUMMETAFILEPROC, LPARAM); - HENHMETAFILE CloseEnhMetaFile(HDC); - WINBOOL DeleteEnhMetaFile(HENHMETAFILE); - WINBOOL EnumEnhMetaFile(HDC, HENHMETAFILE, ENHMETAFILEPROC, LPVOID, RECT*); - UINT GetEnhMetaFileHeader(HENHMETAFILE, UINT, LPENHMETAHEADER); - UINT GetEnhMetaFilePaletteEntries(HENHMETAFILE, UINT, LPPALETTEENTRY); - UINT GetWinMetaFileBits(HENHMETAFILE, UINT, LPBYTE, WINT, HDC); - WINBOOL PlayEnhMetaFile(HDC, HENHMETAFILE, RECT*); - WINBOOL PlayEnhMetaFileRecord(HDC, LPHANDLETABLE, ENHMETARECORD*, UINT); - HENHMETAFILE SetEnhMetaFileBits(UINT, ubyte*); - HENHMETAFILE SetWinMetaFileBits(UINT, ubyte*, HDC, METAFILEPICT*); - WINBOOL GdiComment(HDC, UINT, ubyte*); - WINBOOL AngleArc(HDC, int, int, DWORD, FLOAT, FLOAT); - WINBOOL PolyPolyline(HDC, POINT*, DWORD*, DWORD); - WINBOOL GetWorldTransform(HDC, LPXFORM); - WINBOOL SetWorldTransform(HDC, XFORM*); - WINBOOL ModifyWorldTransform(HDC, XFORM*, DWORD); - WINBOOL CombineTransform(LPXFORM, XFORM*, XFORM*); - HBITMAP CreateDIBSection(HDC, BITMAPINFO*, UINT, POINTER*, HANDLE, DWORD); - UINT GetDIBColorTable(HDC, UINT, UINT, RGBQUAD*); - UINT SetDIBColorTable(HDC, UINT, UINT, RGBQUAD*); - WINBOOL SetColorAdjustment(HDC, COLORADJUSTMENT*); - WINBOOL GetColorAdjustment(HDC, LPCOLORADJUSTMENT); - HPALETTE CreateHalftonePalette(HDC); - int EndDoc(HDC); - int StartPage(HDC); - int EndPage(HDC); - int AbortDoc(HDC); - int SetAbortProc(HDC, TABORTPROC); - WINBOOL ArcTo(HDC, int, int, int, int, int, int, int, int); - WINBOOL BeginPath(HDC); - WINBOOL CloseFigure(HDC); - WINBOOL EndPath(HDC); - WINBOOL FillPath(HDC); - WINBOOL FlattenPath(HDC); - int GetPath(HDC, LPPOINT, LPBYTE, int); - HRGN PathToRegion(HDC); - WINBOOL PolyDraw(HDC, POINT*, ubyte*, int); - WINBOOL SelectClipPath(HDC, int); - int SetArcDirection(HDC, int); - WINBOOL SetMiterLimit(HDC, FLOAT, PFLOAT); - WINBOOL StrokeAndFillPath(HDC); - WINBOOL StrokePath(HDC); - WINBOOL WidenPath(HDC); - HPEN ExtCreatePen(DWORD, DWORD, LOGBRUSH*, DWORD, DWORD*); - WINBOOL GetMiterLimit(HDC, PFLOAT); - int GetArcDirection(HDC); - WINBOOL MoveToEx(HDC, int, int, LPPOINT); - HRGN CreatePolygonRgn(POINT*, int, int); - WINBOOL DPtoLP(HDC, LPPOINT, int); - WINBOOL LPtoDP(HDC, LPPOINT, int); - WINBOOL Polygon(HDC, POINT*, int); - WINBOOL Polyline(HDC, POINT*, int); - WINBOOL PolyBezier(HDC, POINT*, DWORD); - WINBOOL PolyBezierTo(HDC, POINT*, DWORD); - WINBOOL PolylineTo(HDC, POINT*, DWORD); - WINBOOL SetViewportExtEx(HDC, int, int, LPSIZE); - WINBOOL SetViewportOrgEx(HDC, int, int, LPPOINT); - WINBOOL SetWindowExtEx(HDC, int, int, LPSIZE); - WINBOOL SetWindowOrgEx(HDC, int, int, LPPOINT); - WINBOOL OffsetViewportOrgEx(HDC, int, int, LPPOINT); - WINBOOL OffsetWindowOrgEx(HDC, int, int, LPPOINT); - WINBOOL ScaleViewportExtEx(HDC, int, int, int, int, LPSIZE); - WINBOOL ScaleWindowExtEx(HDC, int, int, int, int, LPSIZE); - WINBOOL SetBitmapDimensionEx(HBITMAP, int, int, LPSIZE); - WINBOOL SetBrushOrgEx(HDC, int, int, LPPOINT); - WINBOOL GetDCOrgEx(HDC, LPPOINT); - WINBOOL FixBrushOrgEx(HDC, int, int, LPPOINT); - WINBOOL UnrealizeObject(HGDIOBJ); - WINBOOL GdiFlush(); - DWORD GdiSetBatchLimit(DWORD); - DWORD GdiGetBatchLimit(); - int SetICMMode(HDC, int); - WINBOOL CheckColorsInGamut(HDC, LPVOID, LPVOID, DWORD); - HANDLE GetColorSpace(HDC); - WINBOOL SetColorSpace(HDC, HCOLORSPACE); - WINBOOL DeleteColorSpace(HCOLORSPACE); - WINBOOL GetDeviceGammaRamp(HDC, LPVOID); - WINBOOL SetDeviceGammaRamp(HDC, LPVOID); - WINBOOL ColorMatchToTarget(HDC, HDC, DWORD); - HPROPSHEETPAGE CreatePropertySheetPageA(LPCPROPSHEETPAGE); - WINBOOL DestroyPropertySheetPage(HPROPSHEETPAGE); - void InitCommonControls(); - HIMAGELIST ImageList_Create(int, int, UINT, int, int); - WINBOOL ImageList_Destroy(HIMAGELIST); - int ImageList_GetImageCount(HIMAGELIST); - int ImageList_Add(HIMAGELIST, HBITMAP, HBITMAP); - int ImageList_ReplaceIcon(HIMAGELIST, int, HICON); - COLORREF ImageList_SetBkColor(HIMAGELIST, COLORREF); - COLORREF ImageList_GetBkColor(HIMAGELIST); - WINBOOL ImageList_SetOverlayImage(HIMAGELIST, int, int); - WINBOOL ImageList_Draw(HIMAGELIST, int, HDC, int, int, UINT); - WINBOOL ImageList_Replace(HIMAGELIST, int, HBITMAP, HBITMAP); - int ImageList_AddMasked(HIMAGELIST, HBITMAP, COLORREF); - WINBOOL ImageList_DrawEx(HIMAGELIST, int, HDC, int, int, int, int, COLORREF, COLORREF, UINT); - WINBOOL ImageList_Remove(HIMAGELIST, int); - HICON ImageList_GetIcon(HIMAGELIST, int, UINT); - WINBOOL ImageList_BeginDrag(HIMAGELIST, int, int, int); - void ImageList_EndDrag(); - WINBOOL ImageList_DragEnter(HWND, int, int); - WINBOOL ImageList_DragLeave(HWND); - WINBOOL ImageList_DragMove(int, int); - WINBOOL ImageList_SetDragCursorImage(HIMAGELIST, int, int, int); - WINBOOL ImageList_DragShowNolock(WINBOOL); - HIMAGELIST ImageList_GetDragImage(POINT*, POINT*); - WINBOOL ImageList_GetIconSize(HIMAGELIST, int*, int*); - WINBOOL ImageList_SetIconSize(HIMAGELIST, int, int); - WINBOOL ImageList_GetImageInfo(HIMAGELIST, int, IMAGEINFO*); - HIMAGELIST ImageList_Merge(HIMAGELIST, int, HIMAGELIST, int, int, int); - HWND CreateToolbarEx(HWND, DWORD, UINT, int, HINST, UINT, LPCTBBUTTON, int, int, int, int, int, UINT); - HBITMAP CreateMappedBitmap(HINST, int, UINT, LPCOLORMAP, int); - void MenuHelp(UINT, WPARAM, LPARAM, HMENU, HINST, HWND); - WINBOOL ShowHideMenuCtl(HWND, UINT, LPINT); - void GetEffectiveClientRect(HWND, LPRECT); - WINBOOL MakeDragList(HWND); - void DrawInsert(HWND, HWND); - int LBItemFromPt(HWND, POINT, WINBOOL); - HWND CreateUpDownControl(DWORD, int, int, int, int, HWND, int, HINST, HWND, int, int, int); - LONG RegCloseKey(HKEY); - LONG RegSetKeySecurity(HKEY, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - LONG RegFlushKey(HKEY); - LONG RegGetKeySecurity(HKEY, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, LPDWORD); - LONG RegNotifyChangeKeyValue(HKEY, WINBOOL, DWORD, HANDLE, WINBOOL); - WINBOOL IsValidCodePage(UINT); - UINT GetACP(); - UINT GetOEMCP(); - WINBOOL GetCPInfo(UINT, LPCPINFO); - WINBOOL IsDBCSLeadByte(ubyte); - WINBOOL IsDBCSLeadByteEx(UINT, ubyte); - int MultiByteToWideChar(UINT, DWORD, LPCSTR, int, LPWSTR, int); - int WideCharToMultiByte(UINT, DWORD, LPCWSTR, int, LPSTR, int, LPCSTR, LPBOOL); - WINBOOL IsValidLocale(LCID, DWORD); - LCID ConvertDefaultLocale(LCID); - LCID GetThreadLocale(); - WINBOOL SetThreadLocale(LCID); - LANGID GetSystemDefaultLangID(); - LANGID GetUserDefaultLangID(); - LCID GetSystemDefaultLCID(); - LCID GetUserDefaultLCID(); - WINBOOL ReadConsoleOutputAttribute(HANDLE, LPWORD, DWORD, COORD, LPDWORD); - WINBOOL WriteConsoleOutputAttribute(HANDLE, ushort*, DWORD, COORD, LPDWORD); - WINBOOL FillConsoleOutputAttribute(HANDLE, ushort, DWORD, COORD, LPDWORD); - WINBOOL GetConsoleMode(HANDLE, LPDWORD); - WINBOOL GetNumberOfConsoleInputEvents(HANDLE, PDWORD); - WINBOOL GetConsoleScreenBufferInfo(HANDLE, PCONSOLE_SCREEN_BUFFER_INFO); - COORD GetLargestConsoleWindowSize(HANDLE); - WINBOOL GetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO); - WINBOOL GetNumberOfConsoleMouseButtons(LPDWORD); - WINBOOL SetConsoleMode(HANDLE, DWORD); - WINBOOL SetConsoleActiveScreenBuffer(HANDLE); - WINBOOL FlushConsoleInputBuffer(HANDLE); - WINBOOL SetConsoleScreenBufferSize(HANDLE, COORD); - WINBOOL SetConsoleCursorPosition(HANDLE, COORD); - WINBOOL SetConsoleCursorInfo(HANDLE, PCONSOLE_CURSOR_INFO); - WINBOOL SetConsoleWindowInfo(HANDLE, WINBOOL, SMALL_RECT*); - WINBOOL SetConsoleTextAttribute(HANDLE, ushort); - WINBOOL SetConsoleCtrlHandler(PHANDLER_ROUTINE, WINBOOL); - WINBOOL GenerateConsoleCtrlEvent(DWORD, DWORD); - WINBOOL AllocConsole(); - WINBOOL FreeConsole(); - HANDLE CreateConsoleScreenBuffer(DWORD, DWORD, SECURITY_ATTRIBUTES*, DWORD, LPVOID); - UINT GetConsoleCP(); - WINBOOL SetConsoleCP(UINT); - UINT GetConsoleOutputCP(); - WINBOOL SetConsoleOutputCP(UINT); - DWORD WNetConnectionDialog(HWND, DWORD); - DWORD WNetDisconnectDialog(HWND, DWORD); - DWORD WNetCloseEnum(HANDLE); - WINBOOL CloseServiceHandle(SC_HANDLE); - WINBOOL ControlService(SC_HANDLE, DWORD, LPSERVICE_STATUS); - WINBOOL DeleteService(SC_HANDLE); - SC_LOCK LockServiceDatabase(SC_HANDLE); - WINBOOL NotifyBootConfigStatus(WINBOOL); - WINBOOL QueryServiceObjectSecurity(SC_HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, DWORD, LPDWORD); - WINBOOL QueryServiceStatus(SC_HANDLE, LPSERVICE_STATUS); - WINBOOL SetServiceObjectSecurity(SC_HANDLE, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR); - WINBOOL SetServiceStatus(SERVICE_STATUS_HANDLE, LPSERVICE_STATUS); - WINBOOL UnlockServiceDatabase(SC_LOCK); - int ChoosePixelFormat(HDC, PIXELFORMATDESCRIPTOR*); - int DescribePixelFormat(HDC, int, UINT, LPPIXELFORMATDESCRIPTOR); - WINBOOL SetPixelFormat(HDC, int, PPIXELFORMATDESCRIPTOR); - WINBOOL SwapBuffers(HDC); - WINBOOL DragQueryPoint(HDROP, LPPOINT); - void DragFinish(HDROP); - void DragAcceptFiles(HWND, BOOL); - HICON DuplicateIcon(HINST, HICON); - BOOL DdeAbandonTransaction(DWORD, HCONV, DWORD); - PBYTE DdeAccessData(HDDEDATA, PDWORD); - HDDEDATA DdeAddData(HDDEDATA, PBYTE, DWORD, DWORD); - HDDEDATA DdeClientTransaction(PBYTE, DWORD, HCONV, HSZ, UINT, UINT, DWORD, PDWORD); - int DdeCmpStringHandles(HSZ, HSZ); - HCONV DdeConnect(DWORD, HSZ, HSZ, CONVCONTEXT*); - HCONVLIST DdeConnectList(DWORD, HSZ, HSZ, HCONVLIST, PCONVCONTEXT); - HDDEDATA DdeCreateDataHandle(DWORD, LPBYTE, DWORD, DWORD, HSZ, UINT, UINT); - WINBOOL DdeDisconnect(HCONV); - BOOL DdeDisconnectList(HCONVLIST); - BOOL DdeEnableCallback(DWORD, HCONV, UINT); - WINBOOL DdeFreeDataHandle(HDDEDATA); - WINBOOL DdeFreeStringHandle(DWORD, HSZ); - DWORD DdeGetData(HDDEDATA, ubyte*, DWORD, DWORD); - UINT DdeGetLastError(DWORD); - BOOL DdeImpersonateClient(HCONV); - BOOL DdeKeepStringHandle(DWORD, HSZ); - HDDEDATA DdeNameService(DWORD, HSZ, HSZ, UINT); - WINBOOL DdePostAdvise(DWORD, HSZ, HSZ); - UINT DdeQueryConvInfo(HCONV, DWORD, PCONVINFO); - HCONV DdeQueryNextServer(HCONVLIST, HCONV); - HCONV DdeReconnect(HCONV); - BOOL DdeSetUserHandle(HCONV, DWORD, DWORD); - BOOL DdeUnaccessData(HDDEDATA); - WINBOOL DdeUninitialize(DWORD); - void SHAddToRecentDocs(UINT); - LPITEMIDLIST SHBrowseForFolder(LPBROWSEINFO); - void SHChangeNotify(LONG, UINT, LPCVOID); - int SHFileOperation(LPSHFILEOPSTRUCT); - void SHFreeNameMappings(HANDLE); - DWORD SHGetFileInfo(LPCTSTR, DWORD, SHFILEINFO*, UINT, UINT); - WINBOOL SHGetPathFromIDList(LPCITEMIDLIST, LPTSTR); - HRESULT SHGetSpecialFolderLocation(HWND, int, LPITEMIDLIST*); - THANDLE CreateThread(POINTER, DWORD, TFNTHREADSTARTROUTINE, POINTER, DWORD, DWORD*); - BOOL DdeSetQualityOfService(HWND, TSECURITYQUALITYOFSERVICE*, PSECURITYQUALITYOFSERVICE); - BOOL GetCommMask(THANDLE, DWORD*); - BOOL GetDiskFreeSpaceExA(LPCSTR, void*, void*, PLARGEINTEGER); - BOOL GetDiskFreeSpaceExW(LPWSTR, void*, void*, PLARGEINTEGER); - DWORD GetKerningPairs(HDC, DWORD, void*); - BOOL GetOverlappedResult(THANDLE, TOVERLAPPED*, DWORD*, BOOL); - BOOL GetQueuedCompletionStatus(THANDLE, DWORD*, DWORD*, POVERLAPPED*, DWORD); - BOOL GetSystemPowerStatus(TSYSTEMPOWERSTATUS*); - BOOL ReadFile(THANDLE, void*, DWORD, DWORD*, POVERLAPPED); - BOOL SetThreadContext(THANDLE, TCONTEXT*); - BOOL wglDescribeLayerPlane(HDC, int, int, uint, TLAYERPLANEDESCRIPTOR*); - int wglGetLayerPaletteEntries(HDC, int, int, int, void*); - int wglSetLayerPaletteEntries(HDC, int, int, int, void*); - DWORD WNetGetResourceParentA(PNETRESOURCEA, POINTER, DWORD*); - BOOL WriteFile(THANDLE, void*, DWORD, DWORD*, POVERLAPPED); - - BOOL CancelWaitableTimer(HANDLE hTimer); - HANDLE OpenWaitableTimerA(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCSTR lpTimerName); - HANDLE OpenWaitableTimerW(DWORD dwDesiredAccess, BOOL bInheritHandle, LPCWSTR lpTimerName); - HANDLE CreateWaitableTimerA(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCSTR lpTimerName); - HANDLE CreateWaitableTimerW(LPSECURITY_ATTRIBUTES lpTimerAttributes, BOOL bManualReset, LPCWSTR lpTimerName); - BOOL SetWaitableTimer(HANDLE hTimer, LARGE_INTEGER* pDueTime, LONG lPeriod, PTIMERAPCROUTINE pfnCompletionRoutine, LPVOID lpArgToCompletionRoutine, BOOL fResume); -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Ascii.d --- a/tango/tango/text/Ascii.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,141 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Dec 2006: Initial release - - author: Kris - - - Placeholder for a selection of ASCII utilities. These generally will - not work with utf8, and cannot be easily extended to utf16 or utf32 - -*******************************************************************************/ - -module tango.text.Ascii; - -version (Win32) - { - private extern (C) int memicmp (char *, char *, uint); - private extern (C) int memcmp (char *, char *, uint); - } - -version (Posix) - { - private extern (C) int memcmp (char *, char *, uint); - private extern (C) int strncasecmp (char *, char*, uint); - private alias strncasecmp memicmp; - } - -/****************************************************************************** - - Convert to lowercase. Returns the converted content in dst, - performing an in-place conversion if dst is null - -******************************************************************************/ - -char[] toLower (char[] src, char[] dst = null) -{ - if (dst.ptr) - { - assert (dst.length >= src.length); - dst[0 .. src.length] = src [0 .. $]; - } - else - dst = src; - - foreach (inout c; dst) - if (c>= 'A' && c <= 'Z') - c = c + 32; - return dst [0 .. src.length]; -} - -/****************************************************************************** - - Convert to uppercase. Returns the converted content in dst, - performing an in-place conversion if dst is null - -******************************************************************************/ - -char[] toUpper (char[] src, char[] dst = null) -{ - if (dst.ptr) - { - assert (dst.length >= src.length); - dst[0 .. src.length] = src [0 .. $]; - } - else - dst = src; - - foreach (inout c; dst) - if (c>= 'a' && c <= 'z') - c = c - 32; - return dst[0 .. src.length]; -} - -/****************************************************************************** - - Compare two char[] ignoring case. Returns 0 if equal - -******************************************************************************/ - -int icompare (char[] s1, char[] s2) -{ - auto len = s1.length; - if (s2.length < len) - len = s2.length; - - auto result = memicmp (s1.ptr, s2.ptr, len); - - if (result is 0) - result = s1.length - s2.length; - return result; -} - - -/****************************************************************************** - - Compare two char[] with case. Returns 0 if equal - -******************************************************************************/ - -int compare (char[] s1, char[] s2) -{ - auto len = s1.length; - if (s2.length < len) - len = s2.length; - - auto result = memcmp (s1.ptr, s2.ptr, len); - - if (result is 0) - result = s1.length - s2.length; - return result; -} - - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ -// void main(){} - - unittest - { - char[20] tmp; - - assert (toLower("1bac", tmp) == "1bac"); - assert (toLower("1BAC", tmp) == "1bac"); - assert (toUpper("1bac", tmp) == "1BAC"); - assert (toUpper("1BAC", tmp) == "1BAC"); - assert (icompare ("ABC", "abc") is 0); - assert (icompare ("abc", "abc") is 0); - assert (icompare ("abcd", "abc") > 0); - assert (icompare ("abc", "abcd") < 0); - assert (icompare ("ACC", "abc") > 0); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Properties.d --- a/tango/tango/text/Properties.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,150 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.text.Properties; - -private import tango.io.Buffer, - tango.io.FilePath, - tango.io.FileConst, - tango.io.FileConduit; - -private import Text = tango.text.Util; - -private import tango.text.stream.LineIterator; - -/******************************************************************************* - - Provides load facilities for a properties file. That is, a file - or other medium containing lines of text with a name=value layout. - -*******************************************************************************/ - -class Properties(T) -{ - /*********************************************************************** - - Load properties from the named file, and pass each of them - to the provided delegate. - - ***********************************************************************/ - - static void load (FilePath path, void delegate (T[] name, T[] value) dg) - { - auto fc = new FileConduit (path); - scope (exit) - fc.close; - - load (fc, dg); - } - - /*********************************************************************** - - Load properties from the provided buffer, and pass them to - the specified delegate. - - We use an iterator to sweep text lines, and extract lValue - and rValue pairs from each one, The expected file format is - as follows: - - --- - x = y - abc = 123 - x.y.z = this is a single property - - # this is a comment line - --- - - ***********************************************************************/ - - static void load (InputStream stream, void delegate (T[] name, T[] value) dg) - { - foreach (line; new LineIterator!(T) (stream)) - { - auto text = Text.trim (line); - - // comments require '#' as the first non-whitespace char - if (text.length && (text[0] != '#')) - { - // find the '=' char - auto i = Text.locate (text, '='); - - // ignore if not found ... - if (i < text.length) - dg (Text.trim (text[0 .. i]), Text.trim (text[i+1 .. $])); - } - } - } - - /*********************************************************************** - - Write properties to the provided filepath - - ***********************************************************************/ - - static void save (FilePath path, T[][T[]] properties) - { - auto fc = new FileConduit (path, FileConduit.WriteCreate); - scope (exit) - fc.close; - save (fc, properties); - } - - /*********************************************************************** - - Write properties to the provided stream - - ***********************************************************************/ - - static void save (OutputStream stream, T[][T[]] properties) - { - const T[] equals = " = "; - version (Win32) - const T[] NL = "\r\n"; - version (Posix) - const T[] NL = "\n"; - - auto b = cast(Buffered) stream; - auto emit = b ? b.buffer : new Buffer (stream.conduit); - foreach (key, value; properties) - emit (key) (equals) (value) (NL); - emit.flush; - } -} - - -debug (Properties) -{ - import tango.io.Buffer; - import tango.io.Console; - - void main() - { - char[][char[]] aa; - aa ["foo"] = "something"; - aa ["bar"] = "something else"; - aa ["wumpus"] = ""; - - // write associative-array to a buffer; could use a file - auto props = new Properties!(char); - auto buffer = new Buffer (256); - props.save (buffer, aa); - - // reset and repopulate AA from the buffer - aa = null; - props.load (buffer, (char[] name, char[] value){aa[name] = value;}); - - // display result - foreach (name, value; aa) - Cout (name) (" = ") (value).newline; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Regex.d --- a/tango/tango/text/Regex.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3697 +0,0 @@ - -// Regular Expressions - -/* - * Copyright (C) 2000-2005 by Digital Mars, www.digitalmars.com - * Written by Walter Bright - * - * This software is provided 'as-is', without any express or implied - * warranty. In no event will the authors be held liable for any damages - * arising from the use of this software. - * - * Permission is granted to anyone to use this software for any purpose, - * including commercial applications, and to alter it and redistribute it - * freely, subject to the following restrictions: - * - * o The origin of this software must not be misrepresented; you must not - * claim that you wrote the original software. If you use this software - * in a product, an acknowledgment in the product documentation would be - * appreciated but is not required. - * o Altered source versions must be plainly marked as such, and must not - * be misrepresented as being the original software. - * o This notice may not be removed or altered from any source - * distribution. - */ - -/* - * Modified by Sean Kelly for use with Tango. - */ - -/********************************************** - * $(LINK2 http://www.digitalmars.com/ctg/regular.html, Regular expressions) - * are a powerful method of string pattern matching. - * The regular expression - * language used is the same as that commonly used, however, some of the very - * advanced forms may behave slightly differently. - * - * In the following guide, $(I pattern)[] refers to a - * $(LINK2 http://www.digitalmars.com/ctg/regular.html, regular expression). - * The $(I attributes)[] refers to - a string controlling the interpretation - of the regular expression. - It consists of a sequence of one or more - of the following characters: - - - - $(TR $(TH Attribute) $(TH Action)) - - $(TD $(B g)) - $(TD global; repeat over the whole input string) - - - $(TD $(B i)) - $(TD case insensitive) - - - $(TD $(B m)) - $(TD treat as multiple lines separated by newlines) - -
Attribute Characters
- * - * The $(I format)[] string has the formatting characters: - * - * - - $(TR $(TH Format) $(TH Replaced With)) - $(TR - $(TD $(B $$)) $(TD $) - ) - $(TR - $(TD $(B $&)) $(TD The matched substring.) - ) - $(TR - $(TD $(B $`)) $(TD The portion of string that precedes the matched substring.) - ) - $(TR - $(TD $(B $')) $(TD The portion of string that follows the matched substring.) - ) - $(TR - $(TD $(B $(DOLLAR))$(I n)) $(TD The $(I n)th capture, where $(I n) - is a single digit 1-9 - and $$(I n) is not followed by a decimal digit.) - ) - $(TR - $(TD $(B $(DOLLAR))$(I nn)) $(TD The $(I nn)th capture, where $(I nn) - is a two-digit decimal - number 01-99. - If $(I nn)th capture is undefined or more than the number - of parenthesized subexpressions, use the empty - string instead.) - ) -
Formatting Characters
- - * Any other $ are left as is. - * - * References: - * $(LINK2 http://en.wikipedia.org/wiki/Regular_expressions, Wikipedia) - * Macros: - * WIKI = StdRegexp - * DOLLAR = $ - */ - -/* - Escape sequences: - - \nnn starts out a 1, 2 or 3 digit octal sequence, - where n is an octal digit. If nnn is larger than - 0377, then the 3rd digit is not part of the sequence - and is not consumed. - For maximal portability, use exactly 3 digits. - - \xXX starts out a 1 or 2 digit hex sequence. X - is a hex character. If the first character after the \x - is not a hex character, the value of the sequence is 'x' - and the XX are not consumed. - For maximal portability, use exactly 2 digits. - - \uUUUU is a unicode sequence. There are exactly - 4 hex characters after the \u, if any are not, then - the value of the sequence is 'u', and the UUUU are not - consumed. - - Character classes: - - [a-b], where a is greater than b, will produce - an error. - - References: - - http://www.unicode.org/unicode/reports/tr18/ - */ - -module tango.text.Regex; - -//debug = Regex; - -private -{ - import tango.stdc.string; - import tango.stdc.stdio; - import tango.stdc.ctype; - import tango.stdc.stdlib; // for alloca - - import tango.core.BitArray; - import tango.core.Vararg; -} - -/** Regular expression to extract an _email address */ -const char[] email = - r"[a-zA-Z]([.]?([[a-zA-Z0-9_]-]+)*)?@([[a-zA-Z0-9_]\-_]+\.)+[a-zA-Z]{2,6}"; - -/** Regular expression to extract a _url */ -const char[] url = r"(([h|H][t|T]|[f|F])[t|T][p|P]([s|S]?)\:\/\/|~/|/)?([\w]+:\w+@)?(([a-zA-Z]{1}([\w\-]+\.)+([\w]{2,5}))(:[\d]{1,5})?)?((/?\w+/)+|/?)(\w+\.[\w]{3,4})?([,]\w+)*((\?\w+=\w+)?(&\w+=\w+)*([,]\w*)*)?"; - -/************************************ - * One of these gets thrown on compilation errors - */ - -class RegexException : Exception -{ - this(char[] msg) - { - super(msg); - } -} - -struct regmatch_t -{ - int rm_so; // index of start of match - int rm_eo; // index past end of match -} - -private alias char rchar; // so we can make a wchar version - -/****************************************************** - * Search string for matches with regular expression - * pattern with attributes. - * Replace each match with string generated from format. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * format = Replacement string format. - * attributes = Regular expression attributes. - * Returns: - * the resulting string - * Example: - * Replace the letters 'a' with the letters 'ZZ'. - * --- - * s = "Strap a rocket engine on a chicken." - * sub(s, "a", "ZZ") // result: StrZZp a rocket engine on a chicken. - * sub(s, "a", "ZZ", "g") // result: StrZZp ZZ rocket engine on ZZ chicken. - * --- - * The replacement format can reference the matches using - * the $&, $$, $', $`, $0 .. $99 notation: - * --- - * sub(s, "[ar]", "[$&]", "g") // result: St[r][a]p [a] [r]ocket engine on [a] chi - * --- - */ - -char[] sub(char[] string, char[] pattern, char[] format, char[] attributes = null) -{ - auto r = new Regex(pattern, attributes); - auto result = r.replace(string, format); - delete r; - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.sub.unittest\n"); - - char[] r = sub("hello", "ll", "ss"); - assert(r == "hesso"); - } -} - -/******************************************************* - * Search string for matches with regular expression - * pattern with attributes. - * Pass each match to delegate dg. - * Replace each match with the return value from dg. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * dg = Delegate - * attributes = Regular expression attributes. - * Returns: the resulting string. - * Example: - * Capitalize the letters 'a' and 'r': - * --- - * s = "Strap a rocket engine on a chicken."; - * sub(s, "[ar]", - * delegate char[] (Regex m) - * { - * return toupper(m.match(0)); - * }, - * "g"); // result: StRAp A Rocket engine on A chicken. - * --- - */ - -char[] sub(char[] string, char[] pattern, char[] delegate(Regex) dg, char[] attributes = null) -{ - auto r = new Regex(pattern, attributes); - rchar[] result; - int lastindex; - int offset; - - result = string; - lastindex = 0; - offset = 0; - while (r.test(string, lastindex)) - { - int so = r.pmatch[0].rm_so; - int eo = r.pmatch[0].rm_eo; - - rchar[] replacement = dg(r); -/+ - + TODO: Add std.string.replace so this may be used. - + - // Optimize by using std.string.replace if possible - Dave Fladebo - rchar[] slice = result[offset + so .. offset + eo]; - if (r.attributes & Regex.REA.global && // global, so replace all - !(r.attributes & Regex.REA.ignoreCase) && // not ignoring case - !(r.attributes & Regex.REA.multiline) && // not multiline - pattern == slice) // simple pattern (exact match, no special characters) - { - debug(Regex) - printf("pattern: %.*s, slice: %.*s, replacement: %.*s\n", - cast(int) pattern.length, pattern.ptr, - cast(int) (eo-so), result.ptr + offset, - cast(int) replacement.length, replacement.ptr); - result = std.string.replace(result,slice,replacement); - break; - } -+/ - result = replaceSlice(result, result[offset + so .. offset + eo], replacement); - - if (r.attributes & Regex.REA.global) - { - offset += replacement.length - (eo - so); - - if (lastindex == eo) - lastindex++; // always consume some source - else - lastindex = eo; - } - else - break; - } - delete r; - - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.sub.unittest\n"); - - char[] foo(Regex r) { return "ss"; } - - char[] r = sub("hello", "ll", delegate char[](Regex r) { return "ss"; }); - assert(r == "hesso"); - } -} - - -/************************************************* - * Search string[] for first match with pattern[] with attributes[]. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * attributes = Regular expression attributes. - * Returns: - * index into string[] of match if found, -1 if no match. - * Example: - * --- - * auto s = "abcabcabab"; - * tango.text.Regex.find(s, "b"); // match, returns 1 - * tango.text.Regex.find(s, "f"); // no match, returns -1 - * --- - */ - -int find(rchar[] string, char[] pattern, char[] attributes = null) -{ - int i = -1; - - auto r = new Regex(pattern, attributes); - if (r.test(string)) - { - i = r.pmatch[0].rm_so; - } - delete r; - return i; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.find.unittest\n"); - - int i; - i = find("xabcy", "abc"); - assert(i == 1); - i = find("cba", "abc"); - assert(i == -1); - } -} - - - -/************************************************* - * Search string[] for last match with pattern[] with attributes[]. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * attributes = Regular expression attributes. - * Returns: - * index into string[] of match if found, -1 if no match. - * Example: - * --- - * auto s = "abcabcabab"; - * tango.text.Regex.find(s, "b"); // match, returns 9 - * tango.text.Regex.find(s, "f"); // no match, returns -1 - * --- - */ - -int rfind(rchar[] string, char[] pattern, char[] attributes = null) -{ - int i = -1; - int lastindex = 0; - - auto r = new Regex(pattern, attributes); - while (r.test(string, lastindex)) - { int eo = r.pmatch[0].rm_eo; - i = r.pmatch[0].rm_so; - if (lastindex == eo) - lastindex++; // always consume some source - else - lastindex = eo; - } - delete r; - return i; -} - -debug( UnitTest ) -{ - unittest - { - int i; - - debug(Regex) printf("Regex.rfind.unittest\n"); - i = rfind("abcdefcdef", "c"); - assert(i == 6); - i = rfind("abcdefcdef", "cd"); - assert(i == 6); - i = rfind("abcdefcdef", "x"); - assert(i == -1); - i = rfind("abcdefcdef", "xy"); - assert(i == -1); - i = rfind("abcdefcdef", ""); - assert(i == 10); - } -} - - -/******************************************** - * Split string[] into an array of strings, using the regular - * expression pattern[] with attributes[] as the separator. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * attributes = Regular expression attributes. - * Returns: - * array of slices into string[] - * Example: - * --- - * foreach (s; split("abcabcabab", "C.", "i")) - * { - * writefln("s = '%s'", s); - * } - * // Prints: - * // s = 'ab' - * // s = 'b' - * // s = 'bab' - * --- - */ - -char[][] split(char[] string, char[] pattern, char[] attributes = null) -{ - auto r = new Regex(pattern, attributes); - auto result = r.split(string); - delete r; - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.split.unittest()\n"); - char[][] result; - - result = split("ab", "a*"); - assert(result.length == 2); - assert(result[0] == ""); - assert(result[1] == "b"); - } -} - -/**************************************************** - * Search string[] for first match with pattern[] with attributes[]. - * Params: - * string = String to search. - * pattern = Regular expression pattern. - * attributes = Regular expression attributes. - * Returns: - * corresponding Regex if found, null if not. - * Example: - * --- - * import tango.stdc.stdio; - * import tango.text.Regex; - * - * void main() - * { - * if (auto m = tango.text.Regex.search("abcdef", "c")) - * { - * writefln("%s[%s]%s", m.pre, m.match(0), m.post); - * } - * } - * // Prints: - * // ab[c]def - * --- - */ - -Regex search(char[] string, char[] pattern, char[] attributes = null) -{ - auto r = new Regex(pattern, attributes); - - if (r.test(string)) - { - } - else - { delete r; - r = null; - } - return r; -} - -/* ********************************* Regex ******************************** */ - -/***************************** - * Regex is a class to handle regular expressions. - * - * It is the core foundation for adding powerful string pattern matching - * capabilities to programs like grep, text editors, awk, sed, etc. - */ -class Regex -{ - /***** - * Construct a Regex object. Compile pattern - * with attributes into - * an internal form for fast execution. - * Params: - * pattern = regular expression - * attributes = _attributes - * Throws: RegexException if there are any compilation errors. - * Example: - * Declare two variables and assign to them a Regex object: - * --- - * auto r = new Regex("pattern"); - * auto s = new Regex(r"p[1-5]\s*"); - * --- - */ - public this(rchar[] pattern, rchar[] attributes = null) - { - pmatch = (&gmatch)[0 .. 1]; - compile(pattern, attributes); - } - - /***** - * Generate instance of Regex. - * Params: - * pattern = regular expression - * attributes = _attributes - * Throws: RegexException if there are any compilation errors. - * Example: - * Declare two variables and assign to them a Regex object: - * --- - * auto r = Regex("pattern"); - * auto s = Regex(r"p[1-5]\s*"); - */ - public static Regex opCall(rchar[] pattern, rchar[] attributes = null) - { - return new Regex(pattern, attributes); - } - - /************************************ - * Set up for start of foreach loop. - * Returns: - * search() returns instance of Regex set up to _search string[]. - * Example: - * --- - * import tango.stdc.stdio; - * import tango.text.Regex; - * - * void main() - * { - * foreach(m; Regex("ab").search("abcabcabab")) - * { - * writefln("%s[%s]%s", m.pre, m.match(0), m.post); - * } - * } - * // Prints: - * // [ab]cabcabab - * // abc[ab]cabab - * // abcabc[ab]ab - * // abcabcab[ab] - * --- - */ - - public Regex search(rchar[] string) - { - input = string; - pmatch[0].rm_eo = 0; - return this; - } - - /** ditto */ - public int opApply(int delegate(inout Regex) dg) - { - int result; - Regex r = this; - - while (test()) - { - result = dg(r); - if (result) - break; - } - - return result; - } - - /****************** - * Retrieve match n. - * - * n==0 means the matched substring, n>0 means the - * n'th parenthesized subexpression. - * if n is larger than the number of parenthesized subexpressions, - * null is returned. - */ - public char[] match(size_t n) - { - if (n >= pmatch.length) - return null; - else - { size_t rm_so, rm_eo; - rm_so = pmatch[n].rm_so; - rm_eo = pmatch[n].rm_eo; - if (rm_so == rm_eo) - return null; - return input[rm_so .. rm_eo]; - } - } - - /******************* - * Return the slice of the input that precedes the matched substring. - */ - public char[] pre() - { - return input[0 .. pmatch[0].rm_so]; - } - - /******************* - * Return the slice of the input that follows the matched substring. - */ - public char[] post() - { - return input[pmatch[0].rm_eo .. $]; - } - - uint re_nsub; // number of parenthesized subexpression matches - regmatch_t[] pmatch; // array [re_nsub + 1] - - rchar[] input; // the string to search - - // per instance: - - rchar[] pattern; // source text of the regular expression - - rchar[] flags; // source text of the attributes parameter - - int errors; - - uint attributes; - - enum REA - { - global = 1, // has the g attribute - ignoreCase = 2, // has the i attribute - multiline = 4, // if treat as multiple lines separated - // by newlines, or as a single line - dotmatchlf = 8, // if . matches \n - } - - -private: - size_t src; // current source index in input[] - size_t src_start; // starting index for match in input[] - size_t p; // position of parser in pattern[] - regmatch_t gmatch; // match for the entire regular expression - // (serves as storage for pmatch[0]) - - ubyte[] program; // pattern[] compiled into regular expression program - OutBuffer buf; - - - - -/******************************************/ - -// Opcodes - -enum : ubyte -{ - REend, // end of program - REchar, // single character - REichar, // single character, case insensitive - REdchar, // single UCS character - REidchar, // single wide character, case insensitive - REanychar, // any character - REanystar, // ".*" - REstring, // string of characters - REistring, // string of characters, case insensitive - REtestbit, // any in bitmap, non-consuming - REbit, // any in the bit map - REnotbit, // any not in the bit map - RErange, // any in the string - REnotrange, // any not in the string - REor, // a | b - REplus, // 1 or more - REstar, // 0 or more - REquest, // 0 or 1 - REnm, // n..m - REnmq, // n..m, non-greedy version - REbol, // beginning of line - REeol, // end of line - REparen, // parenthesized subexpression - REgoto, // goto offset - - REwordboundary, - REnotwordboundary, - REdigit, - REnotdigit, - REspace, - REnotspace, - REword, - REnotword, - REbackref, -} - -// BUG: should this include '$'? -private int isword(dchar c) { return isalnum(c) || c == '_'; } - -private uint inf = ~0u; - -/* ******************************** - * Throws RegexException on error - */ - -public void compile(rchar[] pattern, rchar[] attributes) -{ - //printf("Regex.compile('%.*s', '%.*s')\n", pattern, attributes); - - this.attributes = 0; - foreach (rchar c; attributes) - { REA att; - - switch (c) - { - case 'g': att = REA.global; break; - case 'i': att = REA.ignoreCase; break; - case 'm': att = REA.multiline; break; - default: - error("unrecognized attribute"); - return; - } - if (this.attributes & att) - { error("redundant attribute"); - return; - } - this.attributes |= att; - } - - input = null; - - this.pattern = pattern; - this.flags = attributes; - - uint oldre_nsub = re_nsub; - re_nsub = 0; - errors = 0; - - buf = new OutBuffer(); - buf.reserve(pattern.length * 8); - p = 0; - parseRegexp(); - if (p < pattern.length) - { error("unmatched ')'"); - } - optimize(); - program = buf.data; - buf.data = null; - delete buf; - - if (re_nsub > oldre_nsub) - { - if (pmatch.ptr is &gmatch) - pmatch = null; - pmatch.length = re_nsub + 1; - } - pmatch[0].rm_so = 0; - pmatch[0].rm_eo = 0; -} - -/******************************************** - * Split string[] into an array of strings, using the regular - * expression as the separator. - * Returns: - * array of slices into string[] - */ - -public rchar[][] split(rchar[] string) -{ - debug(Regex) printf("Regex.split()\n"); - - rchar[][] result; - - if (string.length) - { - int p = 0; - int q; - for (q = p; q != string.length;) - { - if (test(string, q)) - { int e; - - q = pmatch[0].rm_so; - e = pmatch[0].rm_eo; - if (e != p) - { - result ~= string[p .. q]; - for (int i = 1; i < pmatch.length; i++) - { - int so = pmatch[i].rm_so; - int eo = pmatch[i].rm_eo; - if (so == eo) - { so = 0; // -1 gives array bounds error - eo = 0; - } - result ~= string[so .. eo]; - } - q = p = e; - continue; - } - } - q++; - } - result ~= string[p .. string.length]; - } - else if (!test(string)) - result ~= string; - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.split.unittest()\n"); - - auto r = new Regex("a*?", null); - rchar[][] result; - rchar[] j; - int i; - - result = r.split("ab"); - - assert(result.length == 2); - i = cmp(result[0], "a"); - assert(i == 0); - i = cmp(result[1], "b"); - assert(i == 0); - - r = new Regex("a*", null); - result = r.split("ab"); - assert(result.length == 2); - i = cmp(result[0], ""); - assert(i == 0); - i = cmp(result[1], "b"); - assert(i == 0); - - r = new Regex("<(\\/)?([^<>]+)>", null); - result = r.split("afontbarhello"); - - for (i = 0; i < result.length; i++) - { - //debug(Regex) printf("result[%d] = '%.*s'\n", i, result[i]); - } - - j = join(result, ","); - //printf("j = '%.*s'\n", j); - i = cmp(j, "a,,b,font,/,b,bar,,TAG,hello,/,TAG,"); - assert(i == 0); - - r = new Regex("a[bc]", null); - result = r.match("123ab"); - j = join(result, ","); - i = cmp(j, "ab"); - assert(i == 0); - - result = r.match("ac"); - j = join(result, ","); - i = cmp(j, "ac"); - assert(i == 0); - } -} - -/************************************************* - * Search string[] for match with regular expression. - * Returns: - * index of match if successful, -1 if not found - */ - -public int find(rchar[] string) -{ - int i; - - i = test(string); - if (i) - i = pmatch[0].rm_so; - else - i = -1; // no match - return i; -} - -//deprecated alias find search; - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.find.unittest()\n"); - - int i; - Regex r = new Regex("abc", null); - i = r.find("xabcy"); - assert(i == 1); - i = r.find("cba"); - assert(i == -1); - } -} - - -/************************************************* - * Search string[] for match. - * Returns: - * If global attribute, return same value as exec(string). - * If not global attribute, return array of all matches. - */ - -public rchar[][] match(rchar[] string) -{ - rchar[][] result; - - if (attributes & REA.global) - { - int lastindex = 0; - - while (test(string, lastindex)) - { int eo = pmatch[0].rm_eo; - - result ~= input[pmatch[0].rm_so .. eo]; - if (lastindex == eo) - lastindex++; // always consume some source - else - lastindex = eo; - } - } - else - { - result = exec(string); - } - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.match.unittest()\n"); - - int i; - rchar[][] result; - rchar[] j; - Regex r; - - r = new Regex("a[bc]", null); - result = r.match("1ab2ac3"); - j = join(result, ","); - i = cmp(j, "ab"); - assert(i == 0); - - r = new Regex("a[bc]", "g"); - result = r.match("1ab2ac3"); - j = join(result, ","); - i = cmp(j, "ab,ac"); - assert(i == 0); - } -} - -/************************************************* - * Find regular expression matches in string[]. Replace those matches - * with a new _string composed of format[] merged with the result of the - * matches. - * If global, replace all matches. Otherwise, replace first match. - * Returns: the new _string - */ - -public rchar[] replace(rchar[] string, rchar[] format) -{ - rchar[] result; - int lastindex; - int offset; - - result = string; - lastindex = 0; - offset = 0; - for (;;) - { - if (!test(string, lastindex)) - break; - - int so = pmatch[0].rm_so; - int eo = pmatch[0].rm_eo; - - rchar[] replacement = replace(format); -/+ - + TODO: Add std.string.replace so this may be used. - + - // Optimize by using std.string.replace if possible - Dave Fladebo - rchar[] slice = result[offset + so .. offset + eo]; - if (attributes & REA.global && // global, so replace all - !(attributes & REA.ignoreCase) && // not ignoring case - !(attributes & REA.multiline) && // not multiline - pattern == slice && // simple pattern (exact match, no special characters) - format == replacement) // simple format, not $ formats - { - debug(Regex) - printf("pattern: %.*s, slice: %.*s, format: %.*s, replacement: %.*s\n", - cast(int) pattern.length, pattern.ptr, - cast(int) (eo-so), result.ptr + offset, - cast(int) format.length, format.ptr, - cast(int) replacement.length, replacement.ptr); - result = std.string.replace(result,slice,replacement); - break; - } -+/ - result = replaceSlice(result, result[offset + so .. offset + eo], replacement); - - if (attributes & REA.global) - { - offset += replacement.length - (eo - so); - - if (lastindex == eo) - lastindex++; // always consume some source - else - lastindex = eo; - } - else - break; - } - - return result; -} - -debug( UnitTest ) -{ - unittest - { - debug(Regex) printf("Regex.replace.unittest()\n"); - - int i; - rchar[] result; - Regex r; - - r = new Regex("a[bc]", "g"); - result = r.replace("1ab2ac3", "x$&y"); - i = cmp(result, "1xaby2xacy3"); - assert(i == 0); - } -} - -/************************************************* - * Search string[] for match. - * Returns: - * array of slices into string[] representing matches - */ - -public rchar[][] exec(rchar[] string) -{ - debug(Regex) printf("Regex.exec(string = '%.*s')\n", - cast(int) string.length, string.ptr); - input = string; - pmatch[0].rm_so = 0; - pmatch[0].rm_eo = 0; - return exec(); -} - -/************************************************* - * Pick up where last exec(string) or exec() left off, - * searching string[] for next match. - * Returns: - * array of slices into string[] representing matches - */ - -public rchar[][] exec() -{ - if (!test()) - return null; - - auto result = new rchar[][pmatch.length]; - for (int i = 0; i < pmatch.length; i++) - { - if (pmatch[i].rm_so == pmatch[i].rm_eo) - result[i] = null; - else - result[i] = input[pmatch[i].rm_so .. pmatch[i].rm_eo]; - } - - return result; -} - -/************************************************ - * Search string[] for match. - * Returns: 0 for no match, !=0 for match - */ - -public int test(rchar[] string) -{ - return test(string, 0 /*pmatch[0].rm_eo*/); -} - -/************************************************ - * Pick up where last test(string) or test() left off, and search again. - * Returns: 0 for no match, !=0 for match - */ - -public int test() -{ - return test(input, pmatch[0].rm_eo); -} - -/************************************************ - * Test string[] starting at startindex against regular expression. - * Returns: 0 for no match, !=0 for match - */ - -public int test(char[] string, int startindex) -{ - char firstc; - uint si; - - input = string; - debug (Regex) printf("Regex.test(input[] = '%.*s', startindex = %d)\n", input, startindex); - pmatch[0].rm_so = 0; - pmatch[0].rm_eo = 0; - if (startindex < 0 || startindex > input.length) - { - return 0; // fail - } - //debug(Regex) printProgram(program); - - // First character optimization - firstc = 0; - if (program[0] == REchar) - { - firstc = program[1]; - if (attributes & REA.ignoreCase && isalpha(firstc)) - firstc = 0; - } - - for (si = startindex; ; si++) - { - if (firstc) - { - if (si == input.length) - break; // no match - if (input[si] != firstc) - { - si++; - if (!chr(si, firstc)) // if first character not found - break; // no match - } - } - for (int i = 0; i < re_nsub + 1; i++) - { - pmatch[i].rm_so = -1; - pmatch[i].rm_eo = -1; - } - src_start = src = si; - if (trymatch(0, program.length)) - { - pmatch[0].rm_so = si; - pmatch[0].rm_eo = src; - //debug(Regex) printf("start = %d, end = %d\n", gmatch.rm_so, gmatch.rm_eo); - return 1; - } - // If possible match must start at beginning, we are done - if (program[0] == REbol || program[0] == REanystar) - { - if (attributes & REA.multiline) - { - // Scan for the next \n - if (!chr(si, '\n')) - break; // no match if '\n' not found - } - else - break; - } - if (si == input.length) - break; - //debug(Regex) printf("Starting new try: '%.*s'\n", input[si + 1 .. input.length]); - } - return 0; // no match -} - -int chr(inout uint si, rchar c) -{ - for (; si < input.length; si++) - { - if (input[si] == c) - return 1; - } - return 0; -} - - -void printProgram(ubyte[] prog) -{ - debug(Regex) - { - uint pc; - uint len; - uint n; - uint m; - ushort *pu; - uint *puint; - ubyte[] s; - - printf("printProgram()\n"); - for (pc = 0; pc < prog.length; ) - { - printf("%3d: ", pc); - - //printf("prog[pc] = %d, REchar = %d, REnmq = %d\n", prog[pc], REchar, REnmq); - switch (prog[pc]) - { - case REchar: - printf("\tREchar '%c'\n", prog[pc + 1]); - pc += 1 + char.sizeof; - break; - - case REichar: - printf("\tREichar '%c'\n", prog[pc + 1]); - pc += 1 + char.sizeof; - break; - - case REdchar: - printf("\tREdchar '%c'\n", *cast(dchar *)&prog[pc + 1]); - pc += 1 + dchar.sizeof; - break; - - case REidchar: - printf("\tREidchar '%c'\n", *cast(dchar *)&prog[pc + 1]); - pc += 1 + dchar.sizeof; - break; - - case REanychar: - printf("\tREanychar\n"); - pc++; - break; - - case REstring: - len = *cast(uint *)&prog[pc + 1]; - s = (&prog[pc + 1 + uint.sizeof])[0 .. len]; - printf("\tREstring x%x, '%.*s'\n", len, - cast(int) s.length, s.ptr); - pc += 1 + uint.sizeof + len * rchar.sizeof; - break; - - case REistring: - len = *cast(uint *)&prog[pc + 1]; - s = (&prog[pc + 1 + uint.sizeof])[0 .. len]; - printf("\tREistring x%x, '%.*s'\n", len, - cast(int) s.length, s.ptr); - pc += 1 + uint.sizeof + len * rchar.sizeof; - break; - - case REtestbit: - pu = cast(ushort *)&prog[pc + 1]; - printf("\tREtestbit %d, %d\n", pu[0], pu[1]); - len = pu[1]; - pc += 1 + 2 * ushort.sizeof + len; - break; - - case REbit: - pu = cast(ushort *)&prog[pc + 1]; - len = pu[1]; - printf("\tREbit cmax=%02x, len=%d:", pu[0], len); - for (n = 0; n < len; n++) - printf(" %02x", prog[pc + 1 + 2 * ushort.sizeof + n]); - printf("\n"); - pc += 1 + 2 * ushort.sizeof + len; - break; - - case REnotbit: - pu = cast(ushort *)&prog[pc + 1]; - printf("\tREnotbit %d, %d\n", pu[0], pu[1]); - len = pu[1]; - pc += 1 + 2 * ushort.sizeof + len; - break; - - case RErange: - len = *cast(uint *)&prog[pc + 1]; - printf("\tRErange %d\n", len); - // BUG: REAignoreCase? - pc += 1 + uint.sizeof + len; - break; - - case REnotrange: - len = *cast(uint *)&prog[pc + 1]; - printf("\tREnotrange %d\n", len); - // BUG: REAignoreCase? - pc += 1 + uint.sizeof + len; - break; - - case REbol: - printf("\tREbol\n"); - pc++; - break; - - case REeol: - printf("\tREeol\n"); - pc++; - break; - - case REor: - len = *cast(uint *)&prog[pc + 1]; - printf("\tREor %d, pc=>%d\n", len, pc + 1 + uint.sizeof + len); - pc += 1 + uint.sizeof; - break; - - case REgoto: - len = *cast(uint *)&prog[pc + 1]; - printf("\tREgoto %d, pc=>%d\n", len, pc + 1 + uint.sizeof + len); - pc += 1 + uint.sizeof; - break; - - case REanystar: - printf("\tREanystar\n"); - pc++; - break; - - case REnm: - case REnmq: - // len, n, m, () - puint = cast(uint *)&prog[pc + 1]; - len = puint[0]; - n = puint[1]; - m = puint[2]; - printf("\tREnm%s len=%d, n=%u, m=%u, pc=>%d\n", - (prog[pc] == REnmq) ? cast(char*)"q" : cast(char*)" ", - len, n, m, pc + 1 + uint.sizeof * 3 + len); - pc += 1 + uint.sizeof * 3; - break; - - case REparen: - // len, n, () - puint = cast(uint *)&prog[pc + 1]; - len = puint[0]; - n = puint[1]; - printf("\tREparen len=%d n=%d, pc=>%d\n", len, n, pc + 1 + uint.sizeof * 2 + len); - pc += 1 + uint.sizeof * 2; - break; - - case REend: - printf("\tREend\n"); - return; - - case REwordboundary: - printf("\tREwordboundary\n"); - pc++; - break; - - case REnotwordboundary: - printf("\tREnotwordboundary\n"); - pc++; - break; - - case REdigit: - printf("\tREdigit\n"); - pc++; - break; - - case REnotdigit: - printf("\tREnotdigit\n"); - pc++; - break; - - case REspace: - printf("\tREspace\n"); - pc++; - break; - - case REnotspace: - printf("\tREnotspace\n"); - pc++; - break; - - case REword: - printf("\tREword\n"); - pc++; - break; - - case REnotword: - printf("\tREnotword\n"); - pc++; - break; - - case REbackref: - printf("\tREbackref %d\n", prog[1]); - pc += 2; - break; - - default: - assert(0); - } - } - } -} - - -/************************************************** - * Match input against a section of the program[]. - * Returns: - * 1 if successful match - * 0 no match - */ - -int trymatch(int pc, int pcend) -{ int srcsave; - uint len; - uint n; - uint m; - uint count; - uint pop; - uint ss; - regmatch_t *psave; - uint c1; - uint c2; - ushort* pu; - uint* puint; - - debug(Regex) - { - char[] s = input[src .. input.length]; - printf("Regex.trymatch(pc = %d, src = '%.*s', pcend = %d)\n", - pc, cast(int) s.length, s.ptr, pcend); - } - srcsave = src; - psave = null; - for (;;) - { - if (pc == pcend) // if done matching - { debug(regex) printf("\tprogend\n"); - return 1; - } - - //printf("\top = %d\n", program[pc]); - switch (program[pc]) - { - case REchar: - if (src == input.length) - goto Lnomatch; - debug(Regex) printf("\tREchar '%c', src = '%c'\n", program[pc + 1], input[src]); - if (program[pc + 1] != input[src]) - goto Lnomatch; - src++; - pc += 1 + char.sizeof; - break; - - case REichar: - if (src == input.length) - goto Lnomatch; - debug(Regex) printf("\tREichar '%c', src = '%c'\n", program[pc + 1], input[src]); - c1 = program[pc + 1]; - c2 = input[src]; - if (c1 != c2) - { - if (islower(cast(rchar)c2)) - c2 = toupper(cast(rchar)c2); - else - goto Lnomatch; - if (c1 != c2) - goto Lnomatch; - } - src++; - pc += 1 + char.sizeof; - break; - - case REdchar: - debug(Regex) printf("\tREdchar '%c', src = '%c'\n", *(cast(dchar *)&program[pc + 1]), input[src]); - if (src == input.length) - goto Lnomatch; - if (*(cast(dchar *)&program[pc + 1]) != input[src]) - goto Lnomatch; - src++; - pc += 1 + dchar.sizeof; - break; - - case REidchar: - debug(Regex) printf("\tREidchar '%c', src = '%c'\n", *(cast(dchar *)&program[pc + 1]), input[src]); - if (src == input.length) - goto Lnomatch; - c1 = *(cast(dchar *)&program[pc + 1]); - c2 = input[src]; - if (c1 != c2) - { - if (islower(cast(rchar)c2)) - c2 = toupper(cast(rchar)c2); - else - goto Lnomatch; - if (c1 != c2) - goto Lnomatch; - } - src++; - pc += 1 + dchar.sizeof; - break; - - case REanychar: - debug(Regex) printf("\tREanychar\n"); - if (src == input.length) - goto Lnomatch; - if (!(attributes & REA.dotmatchlf) && input[src] == cast(rchar)'\n') - goto Lnomatch; - src++; - pc++; - break; - - case REstring: - len = *cast(uint *)&program[pc + 1]; - debug(Regex) - { - char[] s = (&program[pc + 1 + uint.sizeof])[0 .. len]; - printf("\tREstring x%x, '%.*s'\n", len, - cast(int) s.length, s.ptr); - } - if (src + len > input.length) - goto Lnomatch; - if (memcmp(&program[pc + 1 + uint.sizeof], &input[src], len * rchar.sizeof)) - goto Lnomatch; - src += len; - pc += 1 + uint.sizeof + len * rchar.sizeof; - break; - - case REistring: - len = *cast(uint *)&program[pc + 1]; - debug(Regex) - { - char[] s = (&program[pc + 1 + uint.sizeof])[0 .. len]; - printf("\tREistring x%x, '%.*s'\n", len, - cast(int) s.length, s.ptr); - } - if (src + len > input.length) - goto Lnomatch; - version (Win32) - { - if (memicmp(cast(char*)&program[pc + 1 + uint.sizeof], &input[src], len * rchar.sizeof)) - goto Lnomatch; - } - else - { - if (icmp((cast(char*)&program[pc + 1 + uint.sizeof])[0..len], - input[src .. src + len])) - goto Lnomatch; - } - src += len; - pc += 1 + uint.sizeof + len * rchar.sizeof; - break; - - case REtestbit: - pu = (cast(ushort *)&program[pc + 1]); - debug(Regex) printf("\tREtestbit %d, %d, '%c', x%02x\n", - pu[0], pu[1], input[src], input[src]); - if (src == input.length) - goto Lnomatch; - len = pu[1]; - c1 = input[src]; - //printf("[x%02x]=x%02x, x%02x\n", c1 >> 3, ((&program[pc + 1 + 4])[c1 >> 3] ), (1 << (c1 & 7))); - if (c1 <= pu[0] && - !((&(program[pc + 1 + 4]))[c1 >> 3] & (1 << (c1 & 7)))) - goto Lnomatch; - pc += 1 + 2 * ushort.sizeof + len; - break; - - case REbit: - pu = (cast(ushort *)&program[pc + 1]); - debug(Regex) printf("\tREbit %d, %d, '%c'\n", - pu[0], pu[1], input[src]); - if (src == input.length) - goto Lnomatch; - len = pu[1]; - c1 = input[src]; - if (c1 > pu[0]) - goto Lnomatch; - if (!((&program[pc + 1 + 4])[c1 >> 3] & (1 << (c1 & 7)))) - goto Lnomatch; - src++; - pc += 1 + 2 * ushort.sizeof + len; - break; - - case REnotbit: - pu = (cast(ushort *)&program[pc + 1]); - debug(Regex) printf("\tREnotbit %d, %d, '%c'\n", - pu[0], pu[1], input[src]); - if (src == input.length) - goto Lnomatch; - len = pu[1]; - c1 = input[src]; - if (c1 <= pu[0] && - ((&program[pc + 1 + 4])[c1 >> 3] & (1 << (c1 & 7)))) - goto Lnomatch; - src++; - pc += 1 + 2 * ushort.sizeof + len; - break; - - case RErange: - len = *cast(uint *)&program[pc + 1]; - debug(Regex) printf("\tRErange %d\n", len); - if (src == input.length) - goto Lnomatch; - // BUG: REA.ignoreCase? - if (memchr(cast(char*)&program[pc + 1 + uint.sizeof], input[src], len) == null) - goto Lnomatch; - src++; - pc += 1 + uint.sizeof + len; - break; - - case REnotrange: - len = *cast(uint *)&program[pc + 1]; - debug(Regex) printf("\tREnotrange %d\n", len); - if (src == input.length) - goto Lnomatch; - // BUG: REA.ignoreCase? - if (memchr(cast(char*)&program[pc + 1 + uint.sizeof], input[src], len) != null) - goto Lnomatch; - src++; - pc += 1 + uint.sizeof + len; - break; - - case REbol: - debug(Regex) printf("\tREbol\n"); - if (src == 0) - { - } - else if (attributes & REA.multiline) - { - if (input[src - 1] != '\n') - goto Lnomatch; - } - else - goto Lnomatch; - pc++; - break; - - case REeol: - debug(Regex) printf("\tREeol\n"); - if (src == input.length) - { - } - else if (attributes & REA.multiline && input[src] == '\n') - src++; - else - goto Lnomatch; - pc++; - break; - - case REor: - len = (cast(uint *)&program[pc + 1])[0]; - debug(Regex) printf("\tREor %d\n", len); - pop = pc + 1 + uint.sizeof; - ss = src; - if (trymatch(pop, pcend)) - { - if (pcend != program.length) - { int s; - - s = src; - if (trymatch(pcend, program.length)) - { debug(Regex) printf("\tfirst operand matched\n"); - src = s; - return 1; - } - else - { - // If second branch doesn't match to end, take first anyway - src = ss; - if (!trymatch(pop + len, program.length)) - { - debug(Regex) printf("\tfirst operand matched\n"); - src = s; - return 1; - } - } - src = ss; - } - else - { debug(Regex) printf("\tfirst operand matched\n"); - return 1; - } - } - pc = pop + len; // proceed with 2nd branch - break; - - case REgoto: - debug(Regex) printf("\tREgoto\n"); - len = (cast(uint *)&program[pc + 1])[0]; - pc += 1 + uint.sizeof + len; - break; - - case REanystar: - debug(Regex) printf("\tREanystar\n"); - pc++; - for (;;) - { int s1; - int s2; - - s1 = src; - if (src == input.length) - break; - if (!(attributes & REA.dotmatchlf) && input[src] == '\n') - break; - src++; - s2 = src; - - // If no match after consumption, but it - // did match before, then no match - if (!trymatch(pc, program.length)) - { - src = s1; - // BUG: should we save/restore pmatch[]? - if (trymatch(pc, program.length)) - { - src = s1; // no match - break; - } - } - src = s2; - } - break; - - case REnm: - case REnmq: - // len, n, m, () - puint = cast(uint *)&program[pc + 1]; - len = puint[0]; - n = puint[1]; - m = puint[2]; - debug(Regex) printf("\tREnm%s len=%d, n=%u, m=%u\n", (program[pc] == REnmq) ? cast(char*)"q" : cast(char*)"", len, n, m); - pop = pc + 1 + uint.sizeof * 3; - for (count = 0; count < n; count++) - { - if (!trymatch(pop, pop + len)) - goto Lnomatch; - } - if (!psave && count < m) - { - //version (Win32) - psave = cast(regmatch_t *)alloca((re_nsub + 1) * regmatch_t.sizeof); - //else - //psave = new regmatch_t[re_nsub + 1]; - } - if (program[pc] == REnmq) // if minimal munch - { - for (; count < m; count++) - { int s1; - - memcpy(psave, pmatch.ptr, (re_nsub + 1) * regmatch_t.sizeof); - s1 = src; - - if (trymatch(pop + len, program.length)) - { - src = s1; - memcpy(pmatch.ptr, psave, (re_nsub + 1) * regmatch_t.sizeof); - break; - } - - if (!trymatch(pop, pop + len)) - { debug(Regex) printf("\tdoesn't match subexpression\n"); - break; - } - - // If source is not consumed, don't - // infinite loop on the match - if (s1 == src) - { debug(Regex) printf("\tsource is not consumed\n"); - break; - } - } - } - else // maximal munch - { - for (; count < m; count++) - { int s1; - int s2; - - memcpy(psave, pmatch.ptr, (re_nsub + 1) * regmatch_t.sizeof); - s1 = src; - if (!trymatch(pop, pop + len)) - { debug(Regex) printf("\tdoesn't match subexpression\n"); - break; - } - s2 = src; - - // If source is not consumed, don't - // infinite loop on the match - if (s1 == s2) - { debug(Regex) printf("\tsource is not consumed\n"); - break; - } - - // If no match after consumption, but it - // did match before, then no match - if (!trymatch(pop + len, program.length)) - { - src = s1; - if (trymatch(pop + len, program.length)) - { - src = s1; // no match - memcpy(pmatch.ptr, psave, (re_nsub + 1) * regmatch_t.sizeof); - break; - } - } - src = s2; - } - } - debug(Regex) printf("\tREnm len=%d, n=%u, m=%u, DONE count=%d\n", len, n, m, count); - pc = pop + len; - break; - - case REparen: - // len, () - debug(Regex) printf("\tREparen\n"); - puint = cast(uint *)&program[pc + 1]; - len = puint[0]; - n = puint[1]; - pop = pc + 1 + uint.sizeof * 2; - ss = src; - if (!trymatch(pop, pop + len)) - goto Lnomatch; - pmatch[n + 1].rm_so = ss; - pmatch[n + 1].rm_eo = src; - pc = pop + len; - break; - - case REend: - debug(Regex) printf("\tREend\n"); - return 1; // successful match - - case REwordboundary: - debug(Regex) printf("\tREwordboundary\n"); - if (src > 0 && src < input.length) - { - c1 = input[src - 1]; - c2 = input[src]; - if (!( - (isword(cast(rchar)c1) && !isword(cast(rchar)c2)) || - (!isword(cast(rchar)c1) && isword(cast(rchar)c2)) - ) - ) - goto Lnomatch; - } - pc++; - break; - - case REnotwordboundary: - debug(Regex) printf("\tREnotwordboundary\n"); - if (src == 0 || src == input.length) - goto Lnomatch; - c1 = input[src - 1]; - c2 = input[src]; - if ( - (isword(cast(rchar)c1) && !isword(cast(rchar)c2)) || - (!isword(cast(rchar)c1) && isword(cast(rchar)c2)) - ) - goto Lnomatch; - pc++; - break; - - case REdigit: - debug(Regex) printf("\tREdigit\n"); - if (src == input.length) - goto Lnomatch; - if (!isdigit(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REnotdigit: - debug(Regex) printf("\tREnotdigit\n"); - if (src == input.length) - goto Lnomatch; - if (isdigit(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REspace: - debug(Regex) printf("\tREspace\n"); - if (src == input.length) - goto Lnomatch; - if (!isspace(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REnotspace: - debug(Regex) printf("\tREnotspace\n"); - if (src == input.length) - goto Lnomatch; - if (isspace(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REword: - debug(Regex) printf("\tREword\n"); - if (src == input.length) - goto Lnomatch; - if (!isword(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REnotword: - debug(Regex) printf("\tREnotword\n"); - if (src == input.length) - goto Lnomatch; - if (isword(input[src])) - goto Lnomatch; - src++; - pc++; - break; - - case REbackref: - { - n = program[pc + 1]; - debug(Regex) printf("\tREbackref %d\n", n); - - int so = pmatch[n + 1].rm_so; - int eo = pmatch[n + 1].rm_eo; - len = eo - so; - if (src + len > input.length) - goto Lnomatch; - else if (attributes & REA.ignoreCase) - { - if (icmp(input[src .. src + len], input[so .. eo])) - goto Lnomatch; - } - else if (memcmp(&input[src], &input[so], len * rchar.sizeof)) - goto Lnomatch; - src += len; - pc += 2; - break; - } - - default: - assert(0); - } - } - -Lnomatch: - debug(Regex) printf("\tnomatch pc=%d\n", pc); - src = srcsave; - return 0; -} - -/* =================== Compiler ================== */ - -int parseRegexp() -{ uint offset; - uint gotooffset; - uint len1; - uint len2; - - //printf("parseRegexp() '%.*s'\n", pattern[p .. pattern.length]); - offset = buf.offset; - for (;;) - { - assert(p <= pattern.length); - if (p == pattern.length) - { buf.write(REend); - return 1; - } - switch (pattern[p]) - { - case ')': - return 1; - - case '|': - p++; - gotooffset = buf.offset; - buf.write(REgoto); - buf.write(cast(uint)0); - len1 = buf.offset - offset; - buf.spread(offset, 1 + uint.sizeof); - gotooffset += 1 + uint.sizeof; - parseRegexp(); - len2 = buf.offset - (gotooffset + 1 + uint.sizeof); - buf.data[offset] = REor; - (cast(uint *)&buf.data[offset + 1])[0] = len1; - (cast(uint *)&buf.data[gotooffset + 1])[0] = len2; - break; - - default: - parsePiece(); - break; - } - } - assert(0); -} - -int parsePiece() -{ uint offset; - uint len; - uint n; - uint m; - ubyte op; - int plength = pattern.length; - - //printf("parsePiece() '%.*s'\n", pattern[p .. pattern.length]); - offset = buf.offset; - parseAtom(); - if (p == plength) - return 1; - switch (pattern[p]) - { - case '*': - // Special optimization: replace .* with REanystar - if (buf.offset - offset == 1 && - buf.data[offset] == REanychar && - p + 1 < plength && - pattern[p + 1] != '?') - { - buf.data[offset] = REanystar; - p++; - break; - } - - n = 0; - m = inf; - goto Lnm; - - case '+': - n = 1; - m = inf; - goto Lnm; - - case '?': - n = 0; - m = 1; - goto Lnm; - - case '{': // {n} {n,} {n,m} - p++; - if (p == plength || !isdigit(pattern[p])) - goto Lerr; - n = 0; - do - { - // BUG: handle overflow - n = n * 10 + pattern[p] - '0'; - p++; - if (p == plength) - goto Lerr; - } while (isdigit(pattern[p])); - if (pattern[p] == '}') // {n} - { m = n; - goto Lnm; - } - if (pattern[p] != ',') - goto Lerr; - p++; - if (p == plength) - goto Lerr; - if (pattern[p] == /*{*/ '}') // {n,} - { m = inf; - goto Lnm; - } - if (!isdigit(pattern[p])) - goto Lerr; - m = 0; // {n,m} - do - { - // BUG: handle overflow - m = m * 10 + pattern[p] - '0'; - p++; - if (p == plength) - goto Lerr; - } while (isdigit(pattern[p])); - if (pattern[p] != /*{*/ '}') - goto Lerr; - goto Lnm; - - Lnm: - p++; - op = REnm; - if (p < plength && pattern[p] == '?') - { op = REnmq; // minimal munch version - p++; - } - len = buf.offset - offset; - buf.spread(offset, 1 + uint.sizeof * 3); - buf.data[offset] = op; - uint* puint = cast(uint *)&buf.data[offset + 1]; - puint[0] = len; - puint[1] = n; - puint[2] = m; - break; - - default: - break; - } - return 1; - -Lerr: - error("badly formed {n,m}"); - assert(0); -} - -int parseAtom() -{ ubyte op; - uint offset; - rchar c; - - //printf("parseAtom() '%.*s'\n", pattern[p .. pattern.length]); - if (p < pattern.length) - { - c = pattern[p]; - switch (c) - { - case '*': - case '+': - case '?': - error("*+? not allowed in atom"); - p++; - return 0; - - case '(': - p++; - buf.write(REparen); - offset = buf.offset; - buf.write(cast(uint)0); // reserve space for length - buf.write(re_nsub); - re_nsub++; - parseRegexp(); - *cast(uint *)&buf.data[offset] = - buf.offset - (offset + uint.sizeof * 2); - if (p == pattern.length || pattern[p] != ')') - { - error("')' expected"); - return 0; - } - p++; - break; - - case '[': - if (!parseRange()) - return 0; - break; - - case '.': - p++; - buf.write(REanychar); - break; - - case '^': - p++; - buf.write(REbol); - break; - - case '$': - p++; - buf.write(REeol); - break; - - case '\\': - p++; - if (p == pattern.length) - { error("no character past '\\'"); - return 0; - } - c = pattern[p]; - switch (c) - { - case 'b': op = REwordboundary; goto Lop; - case 'B': op = REnotwordboundary; goto Lop; - case 'd': op = REdigit; goto Lop; - case 'D': op = REnotdigit; goto Lop; - case 's': op = REspace; goto Lop; - case 'S': op = REnotspace; goto Lop; - case 'w': op = REword; goto Lop; - case 'W': op = REnotword; goto Lop; - - Lop: - buf.write(op); - p++; - break; - - case 'f': - case 'n': - case 'r': - case 't': - case 'v': - case 'c': - case 'x': - case 'u': - case '0': - c = cast(char)escape(); - goto Lbyte; - - case '1': case '2': case '3': - case '4': case '5': case '6': - case '7': case '8': case '9': - c -= '1'; - if (c < re_nsub) - { buf.write(REbackref); - buf.write(cast(ubyte)c); - } - else - { error("no matching back reference"); - return 0; - } - p++; - break; - - default: - p++; - goto Lbyte; - } - break; - - default: - p++; - Lbyte: - op = REchar; - if (attributes & REA.ignoreCase) - { - if (isalpha(c)) - { - op = REichar; - c = cast(char)toupper(c); - } - } - if (op == REchar && c <= 0xFF) - { - // Look ahead and see if we can make this into - // an REstring - int q; - int len; - - for (q = p; q < pattern.length; ++q) - { rchar qc = pattern[q]; - - switch (qc) - { - case '{': - case '*': - case '+': - case '?': - if (q == p) - goto Lchar; - q--; - break; - - case '(': case ')': - case '|': - case '[': case ']': - case '.': case '^': - case '$': case '\\': - case '}': - break; - - default: - continue; - } - break; - } - len = q - p; - if (len > 0) - { - debug(Regex) printf("writing string len %d, c = '%c', pattern[p] = '%c'\n", len+1, c, pattern[p]); - buf.reserve(5 + (1 + len) * rchar.sizeof); - buf.write((attributes & REA.ignoreCase) ? REistring : REstring); - buf.write(len + 1); - buf.write(c); - buf.write(pattern[p .. p + len]); - p = q; - break; - } - } - if (c >= 0x80) - { - // Convert to dchar opcode - op = (op == REchar) ? REdchar : REidchar; - buf.write(op); - buf.write(c); - } - else - { - Lchar: - debug(Regex) printf("It's an REchar '%c'\n", c); - buf.write(op); - buf.write(cast(char)c); - } - break; - } - } - return 1; -} - -private: -class Range -{ - uint maxc; - uint maxb; - OutBuffer buf; - ubyte* base; - BitArray bits; - - this(OutBuffer buf) - { - this.buf = buf; - if (buf.data.length) - this.base = &buf.data[buf.offset]; - } - - void setbitmax(uint u) - { uint b; - - //printf("setbitmax(x%x), maxc = x%x\n", u, maxc); - if (u > maxc) - { - maxc = u; - b = u / 8; - if (b >= maxb) - { uint u2; - - u2 = base ? base - &buf.data[0] : 0; - buf.fill0(b - maxb + 1); - base = &buf.data[u2]; - maxb = b + 1; - //bits = (cast(bit*)this.base)[0 .. maxc + 1]; - bits.ptr = cast(uint*)this.base; - } - bits.len = maxc + 1; - } - } - - void setbit2(uint u) - { - setbitmax(u + 1); - //printf("setbit2 [x%02x] |= x%02x\n", u >> 3, 1 << (u & 7)); - bits[u] = 1; - } - -} - -int parseRange() -{ ubyte op; - int c; - int c2; - uint i; - uint cmax; - uint offset; - - cmax = 0x7F; - p++; - op = REbit; - if (p == pattern.length) - goto Lerr; - if (pattern[p] == '^') - { p++; - op = REnotbit; - if (p == pattern.length) - goto Lerr; - } - buf.write(op); - offset = buf.offset; - buf.write(cast(uint)0); // reserve space for length - buf.reserve(128 / 8); - auto r = new Range(buf); - if (op == REnotbit) - r.setbit2(0); - switch (pattern[p]) - { - case ']': - case '-': - c = pattern[p]; - p++; - r.setbit2(c); - break; - - default: - break; - } - - enum RS { start, rliteral, dash }; - RS rs; - - rs = RS.start; - for (;;) - { - if (p == pattern.length) - goto Lerr; - switch (pattern[p]) - { - case ']': - switch (rs) - { case RS.dash: - r.setbit2('-'); - case RS.rliteral: - r.setbit2(c); - break; - case RS.start: - break; - default: - assert(0); - } - p++; - break; - - case '\\': - p++; - r.setbitmax(cmax); - if (p == pattern.length) - goto Lerr; - switch (pattern[p]) - { - case 'd': - for (i = '0'; i <= '9'; i++) - r.bits[i] = 1; - goto Lrs; - - case 'D': - for (i = 1; i < '0'; i++) - r.bits[i] = 1; - for (i = '9' + 1; i <= cmax; i++) - r.bits[i] = 1; - goto Lrs; - - case 's': - for (i = 0; i <= cmax; i++) - if (isspace(i)) - r.bits[i] = 1; - goto Lrs; - - case 'S': - for (i = 1; i <= cmax; i++) - if (!isspace(i)) - r.bits[i] = 1; - goto Lrs; - - case 'w': - for (i = 0; i <= cmax; i++) - if (isword(cast(rchar)i)) - r.bits[i] = 1; - goto Lrs; - - case 'W': - for (i = 1; i <= cmax; i++) - if (!isword(cast(rchar)i)) - r.bits[i] = 1; - goto Lrs; - - Lrs: - switch (rs) - { case RS.dash: - r.setbit2('-'); - case RS.rliteral: - r.setbit2(c); - break; - default: - break; - } - rs = RS.start; - continue; - - default: - break; - } - c2 = escape(); - goto Lrange; - - case '-': - p++; - if (rs == RS.start) - goto Lrange; - else if (rs == RS.rliteral) - rs = RS.dash; - else if (rs == RS.dash) - { - r.setbit2(c); - r.setbit2('-'); - rs = RS.start; - } - continue; - - default: - c2 = pattern[p]; - p++; - Lrange: - switch (rs) - { case RS.rliteral: - r.setbit2(c); - case RS.start: - c = c2; - rs = RS.rliteral; - break; - - case RS.dash: - if (c > c2) - { error("inverted range in character class"); - return 0; - } - r.setbitmax(c2); - //printf("c = %x, c2 = %x\n",c,c2); - for (; c <= c2; c++) - r.bits[c] = 1; - rs = RS.start; - break; - - default: - assert(0); - } - continue; - } - break; - } - if (attributes & REA.ignoreCase) - { - // BUG: what about dchar? - r.setbitmax(0x7F); - for (c = 'a'; c <= 'z'; c++) - { - if (r.bits[c]) - r.bits[c + 'A' - 'a'] = 1; - else if (r.bits[c + 'A' - 'a']) - r.bits[c] = 1; - } - } - //printf("maxc = %d, maxb = %d\n",r.maxc,r.maxb); - (cast(ushort *)&buf.data[offset])[0] = cast(ushort)r.maxc; - (cast(ushort *)&buf.data[offset])[1] = cast(ushort)r.maxb; - return 1; - -Lerr: - error("invalid range"); - return 0; -} - -void error(char[] msg) -{ - errors++; - debug(Regex) printf("error: %.*s\n", cast(int) msg.length, msg.ptr); -//assert(0); -//*(char*)0=0; - throw new RegexException(msg); -} - -// p is following the \ char -int escape() -in -{ - assert(p < pattern.length); -} -body -{ int c; - int i; - rchar tc; - - c = pattern[p]; // none of the cases are multibyte - switch (c) - { - case 'b': c = '\b'; break; - case 'f': c = '\f'; break; - case 'n': c = '\n'; break; - case 'r': c = '\r'; break; - case 't': c = '\t'; break; - case 'v': c = '\v'; break; - - // BUG: Perl does \a and \e too, should we? - - case 'c': - ++p; - if (p == pattern.length) - goto Lretc; - c = pattern[p]; - // Note: we are deliberately not allowing dchar letters - if (!(('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z'))) - { - Lcerr: - error("letter expected following \\c"); - return 0; - } - c &= 0x1F; - break; - - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - c -= '0'; - for (i = 0; i < 2; i++) - { - p++; - if (p == pattern.length) - goto Lretc; - tc = pattern[p]; - if ('0' <= tc && tc <= '7') - { c = c * 8 + (tc - '0'); - // Treat overflow as if last - // digit was not an octal digit - if (c >= 0xFF) - { c >>= 3; - return c; - } - } - else - return c; - } - break; - - case 'x': - c = 0; - for (i = 0; i < 2; i++) - { - p++; - if (p == pattern.length) - goto Lretc; - tc = pattern[p]; - if ('0' <= tc && tc <= '9') - c = c * 16 + (tc - '0'); - else if ('a' <= tc && tc <= 'f') - c = c * 16 + (tc - 'a' + 10); - else if ('A' <= tc && tc <= 'F') - c = c * 16 + (tc - 'A' + 10); - else if (i == 0) // if no hex digits after \x - { - // Not a valid \xXX sequence - return 'x'; - } - else - return c; - } - break; - - case 'u': - c = 0; - for (i = 0; i < 4; i++) - { - p++; - if (p == pattern.length) - goto Lretc; - tc = pattern[p]; - if ('0' <= tc && tc <= '9') - c = c * 16 + (tc - '0'); - else if ('a' <= tc && tc <= 'f') - c = c * 16 + (tc - 'a' + 10); - else if ('A' <= tc && tc <= 'F') - c = c * 16 + (tc - 'A' + 10); - else - { - // Not a valid \uXXXX sequence - p -= i; - return 'u'; - } - } - break; - - default: - break; - } - p++; -Lretc: - return c; -} - -/* ==================== optimizer ======================= */ - -void optimize() -{ ubyte[] prog; - - debug(Regex) printf("Regex.optimize()\n"); - prog = buf.toBytes(); - for (size_t i = 0; 1;) - { - //printf("\tprog[%d] = %d, %d\n", i, prog[i], REstring); - switch (prog[i]) - { - case REend: - case REanychar: - case REanystar: - case REbackref: - case REeol: - case REchar: - case REichar: - case REdchar: - case REidchar: - case REstring: - case REistring: - case REtestbit: - case REbit: - case REnotbit: - case RErange: - case REnotrange: - case REwordboundary: - case REnotwordboundary: - case REdigit: - case REnotdigit: - case REspace: - case REnotspace: - case REword: - case REnotword: - return; - - case REbol: - i++; - continue; - - case REor: - case REnm: - case REnmq: - case REparen: - case REgoto: - { - auto bitbuf = new OutBuffer; - auto r = new Range(bitbuf); - uint offset; - - offset = i; - if (starrchars(r, prog[i .. prog.length])) - { - debug(Regex) printf("\tfilter built\n"); - buf.spread(offset, 1 + 4 + r.maxb); - buf.data[offset] = REtestbit; - (cast(ushort *)&buf.data[offset + 1])[0] = cast(ushort)r.maxc; - (cast(ushort *)&buf.data[offset + 1])[1] = cast(ushort)r.maxb; - i = offset + 1 + 4; - buf.data[i .. i + r.maxb] = r.base[0 .. r.maxb]; - } - return; - } - default: - assert(0); - } - } -} - -///////////////////////////////////////// -// OR the leading character bits into r. -// Limit the character range from 0..7F, -// trymatch() will allow through anything over maxc. -// Return 1 if success, 0 if we can't build a filter or -// if there is no point to one. - -int starrchars(Range r, ubyte[] prog) -{ rchar c; - uint maxc; - uint maxb; - uint len; - uint b; - uint n; - uint m; - ubyte* pop; - - //printf("Regex.starrchars(prog = %p, progend = %p)\n", prog, progend); - for (size_t i = 0; i < prog.length;) - { - switch (prog[i]) - { - case REchar: - c = prog[i + 1]; - if (c <= 0x7F) - r.setbit2(c); - return 1; - - case REichar: - c = prog[i + 1]; - if (c <= 0x7F) - { r.setbit2(c); - r.setbit2(tolower(cast(rchar)c)); - } - return 1; - - case REdchar: - case REidchar: - return 1; - - case REanychar: - return 0; // no point - - case REstring: - len = *cast(uint *)&prog[i + 1]; - assert(len); - c = *cast(rchar *)&prog[i + 1 + uint.sizeof]; - debug(Regex) printf("\tREstring %d, '%c'\n", len, c); - if (c <= 0x7F) - r.setbit2(c); - return 1; - - case REistring: - len = *cast(uint *)&prog[i + 1]; - assert(len); - c = *cast(rchar *)&prog[i + 1 + uint.sizeof]; - debug(Regex) printf("\tREistring %d, '%c'\n", len, c); - if (c <= 0x7F) - { r.setbit2(toupper(cast(rchar)c)); - r.setbit2(tolower(cast(rchar)c)); - } - return 1; - - case REtestbit: - case REbit: - maxc = (cast(ushort *)&prog[i + 1])[0]; - maxb = (cast(ushort *)&prog[i + 1])[1]; - if (maxc <= 0x7F) - r.setbitmax(maxc); - else - maxb = r.maxb; - for (b = 0; b < maxb; b++) - r.base[b] |= prog[i + 1 + 4 + b]; - return 1; - - case REnotbit: - maxc = (cast(ushort *)&prog[i + 1])[0]; - maxb = (cast(ushort *)&prog[i + 1])[1]; - if (maxc <= 0x7F) - r.setbitmax(maxc); - else - maxb = r.maxb; - for (b = 0; b < maxb; b++) - r.base[b] |= ~prog[i + 1 + 4 + b]; - return 1; - - case REbol: - case REeol: - return 0; - - case REor: - len = (cast(uint *)&prog[i + 1])[0]; - return starrchars(r, prog[i + 1 + uint.sizeof .. prog.length]) && - starrchars(r, prog[i + 1 + uint.sizeof + len .. prog.length]); - - case REgoto: - len = (cast(uint *)&prog[i + 1])[0]; - i += 1 + uint.sizeof + len; - break; - - case REanystar: - return 0; - - case REnm: - case REnmq: - // len, n, m, () - len = (cast(uint *)&prog[i + 1])[0]; - n = (cast(uint *)&prog[i + 1])[1]; - m = (cast(uint *)&prog[i + 1])[2]; - pop = &prog[i + 1 + uint.sizeof * 3]; - if (!starrchars(r, pop[0 .. len])) - return 0; - if (n) - return 1; - i += 1 + uint.sizeof * 3 + len; - break; - - case REparen: - // len, () - len = (cast(uint *)&prog[i + 1])[0]; - n = (cast(uint *)&prog[i + 1])[1]; - pop = &prog[0] + i + 1 + uint.sizeof * 2; - return starrchars(r, pop[0 .. len]); - - case REend: - return 0; - - case REwordboundary: - case REnotwordboundary: - return 0; - - case REdigit: - r.setbitmax('9'); - for (c = '0'; c <= '9'; c++) - r.bits[c] = 1; - return 1; - - case REnotdigit: - r.setbitmax(0x7F); - for (c = 0; c <= '0'; c++) - r.bits[c] = 1; - for (c = '9' + 1; c <= r.maxc; c++) - r.bits[c] = 1; - return 1; - - case REspace: - r.setbitmax(0x7F); - for (c = 0; c <= r.maxc; c++) - if (isspace(c)) - r.bits[c] = 1; - return 1; - - case REnotspace: - r.setbitmax(0x7F); - for (c = 0; c <= r.maxc; c++) - if (!isspace(c)) - r.bits[c] = 1; - return 1; - - case REword: - r.setbitmax(0x7F); - for (c = 0; c <= r.maxc; c++) - if (isword(cast(rchar)c)) - r.bits[c] = 1; - return 1; - - case REnotword: - r.setbitmax(0x7F); - for (c = 0; c <= r.maxc; c++) - if (!isword(cast(rchar)c)) - r.bits[c] = 1; - return 1; - - case REbackref: - return 0; - - default: - assert(0); - } - } - return 1; -} - -/* ==================== replace ======================= */ - -/*********************** - * After a match is found with test(), this function - * will take the match results and, using the format - * string, generate and return a new string. - */ - -public rchar[] replace(rchar[] format) -{ - return replace3(format, input, pmatch[0 .. re_nsub + 1]); -} - -// Static version that doesn't require a Regex object to be created - -public static rchar[] replace3(rchar[] format, rchar[] input, regmatch_t[] pmatch) -{ - rchar[] result; - uint c2; - int rm_so; - int rm_eo; - int i; - -// printf("replace3(format = '%.*s', input = '%.*s')\n", format, input); - result.length = format.length; - result.length = 0; - for (size_t f = 0; f < format.length; f++) - { - auto c = format[f]; - L1: - if (c != '$') - { - result ~= c; - continue; - } - ++f; - if (f == format.length) - { - result ~= '$'; - break; - } - c = format[f]; - switch (c) - { - case '&': - rm_so = pmatch[0].rm_so; - rm_eo = pmatch[0].rm_eo; - goto Lstring; - - case '`': - rm_so = 0; - rm_eo = pmatch[0].rm_so; - goto Lstring; - - case '\'': - rm_so = pmatch[0].rm_eo; - rm_eo = input.length; - goto Lstring; - - case '0': case '1': case '2': case '3': case '4': - case '5': case '6': case '7': case '8': case '9': - i = c - '0'; - if (f + 1 == format.length) - { - if (i == 0) - { - result ~= '$'; - result ~= c; - continue; - } - } - else - { - c2 = format[f + 1]; - if (c2 >= '0' && c2 <= '9') - { i = (c - '0') * 10 + (c2 - '0'); - f++; - } - if (i == 0) - { - result ~= '$'; - result ~= c; - c = cast(char)c2; - goto L1; - } - } - - if (i < pmatch.length) - { rm_so = pmatch[i].rm_so; - rm_eo = pmatch[i].rm_eo; - goto Lstring; - } - break; - - Lstring: - if (rm_so != rm_eo) - result ~= input[rm_so .. rm_eo]; - break; - - default: - result ~= '$'; - result ~= c; - break; - } - } - return result; -} - -/************************************ - * Like replace(char[] format), but uses old style formatting: - - - - - - - -
Format - Description -
& - replace with the match -
\n - replace with the nth parenthesized match, n is 1..9 -
\c - replace with char c. -
- */ - -public rchar[] replaceOld(rchar[] format) -{ - rchar[] result; - -//printf("replace: this = %p so = %d, eo = %d\n", this, pmatch[0].rm_so, pmatch[0].rm_eo); -//printf("3input = '%.*s'\n", input); - result.length = format.length; - result.length = 0; - for (size_t i; i < format.length; i++) - { - auto c = format[i]; - switch (c) - { - case '&': -//printf("match = '%.*s'\n", input[pmatch[0].rm_so .. pmatch[0].rm_eo]); - result ~= input[pmatch[0].rm_so .. pmatch[0].rm_eo]; - break; - - case '\\': - if (i + 1 < format.length) - { - c = format[++i]; - if (c >= '1' && c <= '9') - { uint j; - - j = c - '0'; - if (j <= re_nsub && pmatch[j].rm_so != pmatch[j].rm_eo) - result ~= input[pmatch[j].rm_so .. pmatch[j].rm_eo]; - break; - } - } - result ~= c; - break; - - default: - result ~= c; - break; - } - } - return result; -} - -} - -debug( UnitTest ) -{ - unittest - { // Created and placed in public domain by Don Clugston - - auto m = search("aBC r s", `bc\x20r[\40]s`, "i"); - assert(m.pre=="a"); - assert(m.match(0)=="BC r s"); - auto m2 = search("7xxyxxx", `^\d([a-z]{2})\D\1`); - assert(m2.match(0)=="7xxyxx"); - // Just check the parsing. - auto m3 = search("dcbxx", `ca|b[\d\]\D\s\S\w-\W]`); - auto m4 = search("xy", `[^\ca-\xFa\r\n\b\f\t\v\0123]{2,485}$`); - auto m5 = search("xxx", `^^\r\n\b{13,}\f{4}\t\v\u02aF3a\w\W`); - auto m6 = search("xxy", `.*y`); - assert(m6.match(0)=="xxy"); - auto m7 = search("QWDEfGH", "(ca|b|defg)+", "i"); - assert(m7.match(0)=="DEfG"); - auto m8 = search("dcbxx", `a?\B\s\S`); - auto m9 = search("dcbxx", `[-w]`); - auto m10 = search("dcbsfd", `aB[c-fW]dB|\d|\D|\u012356|\w|\W|\s|\S`, "i"); - auto m11 = search("dcbsfd", `[]a-]`); - m.replaceOld(`a&b\1c`); - m.replace(`a$&b$'$1c`); - } -} - -// -// NOTE: This code is being included temporarily until Regex can be modified -// so as not to require it. -// -private -{ - import tango.core.Memory; // for OutBuffer - extern (C) int memicmp(char *, char *, uint); - - - /********************************** - * Compare two strings. cmp is case sensitive, icmp is case insensitive. - * Returns: - * - *
< 0 s1 < s2 - *
= 0 s1 == s2 - *
> 0 s1 > s2 - *
- */ - int cmp(char[] s1, char[] s2) - { - size_t len = s1.length; - int result; - - //printf("cmp('%.*s', '%.*s')\n", s1, s2); - if (s2.length < len) - len = s2.length; - result = memcmp(s1.ptr, s2.ptr, len); - if (result == 0) - result = cast(int)s1.length - cast(int)s2.length; - return result; - } - - /********************************* - * ditto - */ - int icmp(char[] s1, char[] s2) - { - size_t len = s1.length; - int result; - - if (s2.length < len) - len = s2.length; - version (Win32) - { - result = memicmp(s1.ptr, s2.ptr, len); - } - version (linux) - { - for (size_t i = 0; i < len; i++) - { - if (s1[i] != s2[i]) - { - char c1 = s1[i]; - char c2 = s2[i]; - - if (c1 >= 'A' && c1 <= 'Z') - c1 += cast(int)'a' - cast(int)'A'; - if (c2 >= 'A' && c2 <= 'Z') - c2 += cast(int)'a' - cast(int)'A'; - result = cast(int)c1 - cast(int)c2; - if (result) - break; - } - } - } - if (result == 0) - result = cast(int)s1.length - cast(int)s2.length; - return result; - } - - debug( UnitTest ) - { - unittest - { - int result; - - debug(string) printf("string.cmp.unittest\n"); - result = cmp("abc", "abc"); - assert(result == 0); - result = cmp(null, null); - assert(result == 0); - result = cmp("", ""); - assert(result == 0); - result = cmp("abc", "abcd"); - assert(result < 0); - result = cmp("abcd", "abc"); - assert(result > 0); - result = cmp("abc", "abd"); - assert(result < 0); - result = cmp("bbc", "abc"); - assert(result > 0); - } - } - - /********************************* - * Convert array of chars s[] to a C-style 0 terminated string. - */ - char* toStringz(char[] s) - in - { - } - out (result) - { - if (result) - { assert(strlen(result) == s.length); - assert(memcmp(result, s.ptr, s.length) == 0); - } - } - body - { - char[] copy; - - if (s.length == 0) - return ""; - - /+ Unfortunately, this isn't reliable. - We could make this work if string literals are put - in read-only memory and we test if s[] is pointing into - that. - - /* Peek past end of s[], if it's 0, no conversion necessary. - * Note that the compiler will put a 0 past the end of static - * strings, and the storage allocator will put a 0 past the end - * of newly allocated char[]'s. - */ - char* p = &s[0] + s.length; - if (*p == 0) - return s; - +/ - - // Need to make a copy - copy = new char[s.length + 1]; - copy[0..s.length] = s; - copy[s.length] = 0; - return copy.ptr; - } - - debug( UnitTest ) - { - unittest - { - debug(string) printf("string.toStringz.unittest\n"); - - char* p = toStringz("foo"); - assert(strlen(p) == 3); - char foo[] = "abbzxyzzy"; - p = toStringz(foo[3..5]); - assert(strlen(p) == 2); - - char[] test = ""; - p = toStringz(test); - assert(*p == 0); - } - } - - /***************************** - * Return a _string that is string[] with slice[] replaced by replacement[]. - */ - char[] replaceSlice(char[] string, char[] slice, char[] replacement) - in - { - // Verify that slice[] really is a slice of string[] - int so = cast(char*)slice - cast(char*)string; - assert(so >= 0); - //printf("string.length = %d, so = %d, slice.length = %d\n", string.length, so, slice.length); - assert(string.length >= so + slice.length); - } - body - { - char[] result; - int so = cast(char*)slice - cast(char*)string; - - result.length = string.length - slice.length + replacement.length; - - result[0 .. so] = string[0 .. so]; - result[so .. so + replacement.length] = replacement; - result[so + replacement.length .. result.length] = string[so + slice.length .. string.length]; - - return result; - } - - debug( UnitTest ) - { - unittest - { - debug(string) printf("string.replaceSlice.unittest\n"); - - char[] string = "hello"; - char[] slice = string[2 .. 4]; - - char[] r = replaceSlice(string, slice, "bar"); - int i; - i = cmp(r, "hebaro"); - assert(i == 0); - } - } - - // NOTE: join is used for unittests only! - - /******************************************** - * Concatenate all the strings in words[] together into one - * string; use sep[] as the separator. - */ - char[] join(char[][] words, char[] sep) - { - size_t len; - uint seplen; - uint i; - uint j; - char[] result; - - if (words.length) - { - len = 0; - for (i = 0; i < words.length; i++) - len += words[i].length; - - seplen = sep.length; - len += (words.length - 1) * seplen; - - result = new char[len]; - - i = 0; - while (true) - { - uint wlen = words[i].length; - - result[j .. j + wlen] = words[i]; - j += wlen; - i++; - if (i >= words.length) - break; - result[j .. j + seplen] = sep; - j += seplen; - } - assert(j == len); - } - return result; - } - - debug( UnitTest ) - { - unittest - { - debug(string) printf("string.join.unittest\n"); - - char[] word1 = "peter"; - char[] word2 = "paul"; - char[] word3 = "jerry"; - char[][3] words; - char[] r; - int i; - - words[0] = word1; - words[1] = word2; - words[2] = word3; - r = join(words, ","); - i = cmp(r, "peter,paul,jerry"); - assert(i == 0); - } - } - - /********************************************* - * OutBuffer provides a way to build up an array of bytes out - * of raw data. It is useful for things like preparing an - * array of bytes to write out to a file. - * OutBuffer's byte order is the format native to the computer. - * To control the byte order (endianness), use a class derived - * from OutBuffer. - */ - - class OutBuffer - { - ubyte data[]; - uint offset; - - invariant - { - //printf("this = %p, offset = %x, data.length = %u\n", this, offset, data.length); - assert(offset <= data.length); - } - - this() - { - //printf("in OutBuffer constructor\n"); - } - - /********************************* - * Convert to array of bytes. - */ - - ubyte[] toBytes() { return data[0 .. offset]; } - - /*********************************** - * Preallocate nbytes more to the size of the internal buffer. - * - * This is a - * speed optimization, a good guess at the maximum size of the resulting - * buffer will improve performance by eliminating reallocations and copying. - */ - - - void reserve(uint nbytes) - in - { - assert(offset + nbytes >= offset); - } - out - { - assert(offset + nbytes <= data.length); - assert(data.length <= GC.sizeOf(data.ptr)); - } - body - { - //c.stdio.printf("OutBuffer.reserve: length = %d, offset = %d, nbytes = %d\n", data.length, offset, nbytes); - if (data.length < offset + nbytes) - { - data.length = (offset + nbytes) * 2; - GC.clrAttr(data.ptr, GC.BlkAttr.NO_SCAN); - } - } - - /************************************* - * Append data to the internal buffer. - */ - - void write(ubyte[] bytes) - { - reserve(bytes.length); - data[offset .. offset + bytes.length] = bytes; - offset += bytes.length; - } - - void write(ubyte b) /// ditto - { - reserve(ubyte.sizeof); - this.data[offset] = b; - offset += ubyte.sizeof; - } - - void write(byte b) { write(cast(ubyte)b); } /// ditto - void write(char c) { write(cast(ubyte)c); } /// ditto - - void write(ushort w) /// ditto - { - reserve(ushort.sizeof); - *cast(ushort *)&data[offset] = w; - offset += ushort.sizeof; - } - - void write(short s) { write(cast(ushort)s); } /// ditto - - void write(wchar c) /// ditto - { - reserve(wchar.sizeof); - *cast(wchar *)&data[offset] = c; - offset += wchar.sizeof; - } - - void write(uint w) /// ditto - { - reserve(uint.sizeof); - *cast(uint *)&data[offset] = w; - offset += uint.sizeof; - } - - void write(int i) { write(cast(uint)i); } /// ditto - - void write(ulong l) /// ditto - { - reserve(ulong.sizeof); - *cast(ulong *)&data[offset] = l; - offset += ulong.sizeof; - } - - void write(long l) { write(cast(ulong)l); } /// ditto - - void write(float f) /// ditto - { - reserve(float.sizeof); - *cast(float *)&data[offset] = f; - offset += float.sizeof; - } - - void write(double f) /// ditto - { - reserve(double.sizeof); - *cast(double *)&data[offset] = f; - offset += double.sizeof; - } - - void write(real f) /// ditto - { - reserve(real.sizeof); - *cast(real *)&data[offset] = f; - offset += real.sizeof; - } - - void write(char[] s) /// ditto - { - write(cast(ubyte[])s); - } - - void write(OutBuffer buf) /// ditto - { - write(buf.toBytes()); - } - - /**************************************** - * Append nbytes of 0 to the internal buffer. - */ - - void fill0(uint nbytes) - { - reserve(nbytes); - data[offset .. offset + nbytes] = 0; - offset += nbytes; - } - - /********************************** - * 0-fill to align on power of 2 boundary. - */ - - void alignSize(uint alignsize) - in - { - assert(alignsize && (alignsize & (alignsize - 1)) == 0); - } - out - { - assert((offset & (alignsize - 1)) == 0); - } - body - { uint nbytes; - - nbytes = offset & (alignsize - 1); - if (nbytes) - fill0(alignsize - nbytes); - } - - /**************************************** - * Optimize common special case alignSize(2) - */ - - void align2() - { - if (offset & 1) - write(cast(byte)0); - } - - /**************************************** - * Optimize common special case alignSize(4) - */ - - void align4() - { - if (offset & 3) - { uint nbytes = (4 - offset) & 3; - fill0(nbytes); - } - } - - /************************************** - * Convert internal buffer to array of chars. - */ - - char[] toString() - { - //printf("OutBuffer.toString()\n"); - return cast(char[])data[0 .. offset]; - } - - /***************************************** - * Append output of C's vprintf() to internal buffer. - */ - - void vprintf(char[] format, va_list args) - { - char[128] buffer; - char* p; - char* f; - uint psize; - int count; - - f = toStringz(format); - p = buffer.ptr; - psize = buffer.length; - for (;;) - { - version(Win32) - { - count = _vsnprintf(p,psize,f,args); - if (count != -1) - break; - psize *= 2; - p = cast(char *) alloca(psize); // buffer too small, try again with larger size - } - version(linux) - { - count = vsnprintf(p,psize,f,args); - if (count == -1) - psize *= 2; - else if (count >= psize) - psize = count + 1; - else - break; - /+ - if (p != buffer) - c.stdlib.free(p); - p = (char *) c.stdlib.malloc(psize); // buffer too small, try again with larger size - +/ - p = cast(char *) alloca(psize); // buffer too small, try again with larger size - } - } - write(p[0 .. count]); - /+ - version (linux) - { - if (p != buffer) - c.stdlib.free(p); - } - +/ - } - - /***************************************** - * Append output of C's printf() to internal buffer. - */ - - void printf(char[] format, ...) - { - va_list ap; - ap = cast(va_list)&format; - ap += format.sizeof; - vprintf(format, ap); - } - - /***************************************** - * At offset index into buffer, create nbytes of space by shifting upwards - * all data past index. - */ - - void spread(uint index, uint nbytes) - in - { - assert(index <= offset); - } - body - { - reserve(nbytes); - - // This is an overlapping copy - should use memmove() - for (uint i = offset; i > index; ) - { - --i; - data[i + nbytes] = data[i]; - } - offset += nbytes; - } - } - - debug( UnitTest ) - { - unittest - { - //printf("Starting OutBuffer test\n"); - - OutBuffer buf = new OutBuffer(); - - //printf("buf = %p\n", buf); - //printf("buf.offset = %x\n", buf.offset); - assert(buf.offset == 0); - buf.write("hello"); - buf.write(cast(byte)0x20); - buf.write("world"); - buf.printf(" %d", 6); - //printf("buf = '%.*s'\n", buf.toString()); - assert(cmp(buf.toString(), "hello world 6") == 0); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Text.d --- a/tango/tango/text/Text.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1396 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Kris - - - _Text is a class for storing and manipulating Unicode characters. - - _Text maintains a current "selection", controlled via the mark(), - select() and selectPrior() methods. Each of append(), prepend(), - replace() and remove() operate with respect to the selection. The - select() methods operate with respect to the current selection - also, providing a means of iterating across matched patterns. To - set a selection across the entire content, use the mark() method - with no arguments. - - Indexes and lengths of content always count code units, not code - points. This is similar to traditional ascii string handling, yet - indexing is rarely used in practice due to the selection idiom: - substring indexing is generally implied as opposed to manipulated - directly. This allows for a more streamlined model with regard to - surrogates. - - Strings support a range of functionality, from insert and removal - to utf encoding and decoding. There is also an immutable subset - called TextView, intended to simplify life in a multi-threaded - environment. However, TextView must expose the raw content as - needed and thus immutability depends to an extent upon so-called - "honour" of a callee. D does not enable immutability enforcement - at this time, but this class will be modified to support such a - feature when it arrives - via the slice() method. - - The class is templated for use with char[], wchar[], and dchar[], - and should migrate across encodings seamlessly. In particular, all - functions in tango.text.Util are compatible with _Text content in - any of the supported encodings. In future, this class will become - the principal gateway to the extensive ICU unicode library. - - Note that several common text operations can be constructed through - combining tango.text._Text with tango.text.Util e.g. lines of text - can be processed thusly: - --- - auto source = new Text!(char)("one\ntwo\nthree"); - - foreach (line; Util.lines(source.slice)) - // do something with line - --- - - Substituting patterns within text can be implemented simply and - rather efficiently: - --- - auto dst = new Text!(char); - - foreach (element; Util.patterns ("all cows eat grass", "eat", "chew")) - dst.append (element); - --- - - Speaking a bit like Yoda might be accomplished as follows: - --- - auto dst = new Text!(char); - - foreach (element; Util.delims ("all cows eat grass", " ")) - dst.prepend (element); - --- - - Below is an overview of the API and class hierarchy: - --- - class Text(T) : TextView!(T) - { - // set or reset the content - Text set (T[] chars, bool mutable=true); - Text set (TextView other, bool mutable=true); - - // retreive currently selected text - T[] selection (); - - // get the index and length of the current selection - Span selectionSpan (); - - // mark a selection - Text select (int start=0, int length=int.max); - - // move the selection around - bool select (T c); - bool select (T[] pattern); - bool select (TextView other); - bool selectPrior (T c); - bool selectPrior (T[] pattern); - bool selectPrior (TextView other); - - // append behind current selection - Text append (TextView other); - Text append (T[] text); - Text append (T chr, int count=1); - Text append (int value, options); - Text append (long value, options); - Text append (double value, options); - - // transcode behind current selection - Text encode (char[]); - Text encode (wchar[]); - Text encode (dchar[]); - - // insert before current selection - Text prepend (T[] text); - Text prepend (TextView other); - Text prepend (T chr, int count=1); - - // replace current selection - Text replace (T chr); - Text replace (T[] text); - Text replace (TextView other); - - // remove current selection - Text remove (); - - // clear content - Text clear (); - - // trim leading and trailing whitespace - Text trim (); - - // trim leading and trailing chr instances - Text strip (T chr); - - // truncate at point, or current selection - Text truncate (int point = int.max); - - // reserve some space for inserts/additions - Text reserve (int extra); - } - - class TextView(T) : UniText - { - // hash content - hash_t toHash (); - - // return length of content - uint length (); - - // compare content - bool equals (T[] text); - bool equals (TextView other); - bool ends (T[] text); - bool ends (TextView other); - bool starts (T[] text); - bool starts (TextView other); - int compare (T[] text); - int compare (TextView other); - int opEquals (Object other); - int opCmp (Object other); - - // copy content - T[] copy (T[] dst); - - // return content - T[] slice (); - - // return data type - typeinfo encoding (); - - // replace the comparison algorithm - Comparator comparator (Comparator other); - } - - class UniText - { - // convert content - abstract char[] toString (char[] dst = null); - abstract wchar[] toString16 (wchar[] dst = null); - abstract dchar[] toString32 (dchar[] dst = null); - } - --- - -*******************************************************************************/ - -module tango.text.Text; - -private import Util = tango.text.Util; - -private import Utf = tango.text.convert.Utf; - -private import Float = tango.text.convert.Float; - -private import Integer = tango.text.convert.Integer; - -/******************************************************************************* - -*******************************************************************************/ - -private extern (C) void memmove (void* dst, void* src, uint bytes); - - -/******************************************************************************* - - The mutable Text class actually implements the full API, whereas - the superclasses are purely abstract (could be interfaces instead). - -*******************************************************************************/ - -class Text(T) : TextView!(T) -{ - public alias set opAssign; - public alias append opCatAssign; - private alias TextView!(T) TextViewT; - - private T[] content; - private bool mutable; - private Comparator comparator_; - private uint selectPoint, - selectLength, - contentLength; - - /*********************************************************************** - - Selection span - - ***********************************************************************/ - - public struct Span - { - uint begin, /// index of selection point - length; /// length of selection - } - - /*********************************************************************** - - Create an empty Text with the specified available - space - - ***********************************************************************/ - - this (uint space = 0) - { - content.length = space; - this.comparator_ = &simpleComparator; - } - - /*********************************************************************** - - Create a Text upon the provided content. If said - content is immutable (read-only) then you might consider - setting the 'copy' parameter to false. Doing so will - avoid allocating heap-space for the content until it is - modified via Text methods. This can be useful when - wrapping an array "temporarily" with a stack-based Text - - ***********************************************************************/ - - this (T[] content, bool copy = true) - { - set (content, copy); - this.comparator_ = &simpleComparator; - } - - /*********************************************************************** - - Create a Text via the content of another. If said - content is immutable (read-only) then you might consider - setting the 'copy' parameter to false. Doing so will avoid - allocating heap-space for the content until it is modified - via Text methods. This can be useful when wrapping an array - temporarily with a stack-based Text - - ***********************************************************************/ - - this (TextViewT other, bool copy = true) - { - this (other.slice, copy); - } - - /*********************************************************************** - - Set the content to the provided array. Parameter 'copy' - specifies whether the given array is likely to change. If - not, the array is aliased until such time it is altered via - this class. This can be useful when wrapping an array - "temporarily" with a stack-based Text - - ***********************************************************************/ - - final Text set (T[] chars, bool copy = true) - { - if ((this.mutable = copy) is true) - content = chars.dup; - else - content = chars; - - return select (0, contentLength = chars.length); - } - - /*********************************************************************** - - Replace the content of this Text. If the new content - is immutable (read-only) then you might consider setting the - 'copy' parameter to false. Doing so will avoid allocating - heap-space for the content until it is modified via one of - these methods. This can be useful when wrapping an array - "temporarily" with a stack-based Text - - ***********************************************************************/ - - final Text set (TextViewT other, bool copy = true) - { - return set (other.slice, copy); - } - - /*********************************************************************** - - Explicitly set the current selection - - ***********************************************************************/ - - final Text select (int start=0, int length=int.max) - { - pinIndices (start, length); - selectPoint = start; - selectLength = length; - return this; - } - - /*********************************************************************** - - Return the currently selected content - - ***********************************************************************/ - - final T[] selection () - { - return slice [selectPoint .. selectPoint+selectLength]; - } - - /*********************************************************************** - - Return the index and length of the current selection - - ***********************************************************************/ - - final Span selectionSpan () - { - Span span; - span.begin = selectPoint; - span.length = selectLength; - return span; - } - - /*********************************************************************** - - Find and select the next occurrence of a BMP code point - in a string. Returns true if found, false otherwise - - ***********************************************************************/ - - final bool select (T c) - { - auto s = slice(); - auto x = Util.locate (s, c, selectPoint); - if (x < s.length) - { - select (x, 1); - return true; - } - return false; - } - - /*********************************************************************** - - Find and select the next substring occurrence. Returns - true if found, false otherwise - - ***********************************************************************/ - - final bool select (TextViewT other) - { - return select (other.slice); - } - - /*********************************************************************** - - Find and select the next substring occurrence. Returns - true if found, false otherwise - - ***********************************************************************/ - - final bool select (T[] chars) - { - auto s = slice(); - auto x = Util.locatePattern (s, chars, selectPoint); - if (x < s.length) - { - select (x, chars.length); - return true; - } - return false; - } - - /*********************************************************************** - - Find and select a prior occurrence of a BMP code point - in a string. Returns true if found, false otherwise - - ***********************************************************************/ - - final bool selectPrior (T c) - { - auto s = slice(); - auto x = Util.locatePrior (s, c, selectPoint); - if (x < s.length) - { - select (x, 1); - return true; - } - return false; - } - - /*********************************************************************** - - Find and select a prior substring occurrence. Returns - true if found, false otherwise - - ***********************************************************************/ - - final bool selectPrior (TextViewT other) - { - return selectPrior (other.slice); - } - - /*********************************************************************** - - Find and select a prior substring occurrence. Returns - true if found, false otherwise - - ***********************************************************************/ - - final bool selectPrior (T[] chars) - { - auto s = slice(); - auto x = Util.locatePatternPrior (s, chars, selectPoint); - if (x < s.length) - { - select (x, chars.length); - return true; - } - return false; - } - - /*********************************************************************** - - Append text to this Text - - ***********************************************************************/ - - final Text append (TextViewT other) - { - return append (other.slice); - } - - /*********************************************************************** - - Append text to this Text - - ***********************************************************************/ - - final Text append (T[] chars) - { - return append (chars.ptr, chars.length); - } - - /*********************************************************************** - - Append a count of characters to this Text - - ***********************************************************************/ - - final Text append (T chr, int count=1) - { - uint point = selectPoint + selectLength; - expand (point, count); - return set (chr, point, count); - } - - /*********************************************************************** - - Append an integer to this Text - - ***********************************************************************/ - - final Text append (int v, Integer.Style fmt=Integer.Style.Signed) - { - return append (cast(long) v, fmt); - } - - /*********************************************************************** - - Append a long to this Text - - ***********************************************************************/ - - final Text append (long v, Integer.Style fmt=Integer.Style.Signed) - { - T[64] tmp = void; - return append (Integer.format(tmp, v, fmt)); - } - - /*********************************************************************** - - Append a double to this Text - - ***********************************************************************/ - - final Text append (double v, uint decimals=2, int e=10) - { - T[64] tmp = void; - return append (Float.format(tmp, v, decimals, e)); - } - - /*********************************************************************** - - Insert characters into this Text - - ***********************************************************************/ - - final Text prepend (T chr, int count=1) - { - expand (selectPoint, count); - return set (chr, selectPoint, count); - } - - /*********************************************************************** - - Insert text into this Text - - ***********************************************************************/ - - final Text prepend (T[] other) - { - expand (selectPoint, other.length); - content[selectPoint..selectPoint+other.length] = other; - return this; - } - - /*********************************************************************** - - Insert another Text into this Text - - ***********************************************************************/ - - final Text prepend (TextViewT other) - { - return prepend (other.slice); - } - - /*********************************************************************** - - Append encoded text at the current selection point. The text - is converted as necessary to the appropritate utf encoding. - - ***********************************************************************/ - - final Text encode (char[] s) - { - T[1024] tmp = void; - - static if (is (T == char)) - return append(s); - - static if (is (T == wchar)) - return append (Utf.toString16(s, tmp)); - - static if (is (T == dchar)) - return append (Utf.toString32(s, tmp)); - } - - /// ditto - final Text encode (wchar[] s) - { - T[1024] tmp = void; - - static if (is (T == char)) - return append (Utf.toString(s, tmp)); - - static if (is (T == wchar)) - return append (s); - - static if (is (T == dchar)) - return append (Utf.toString32(s, tmp)); - } - - /// ditto - final Text encode (dchar[] s) - { - T[1024] tmp = void; - - static if (is (T == char)) - return append (Utf.toString(s, tmp)); - - static if (is (T == wchar)) - return append (Utf.toString16(s, tmp)); - - static if (is (T == dchar)) - return append (s); - } - - /// ditto - final Text encode (Object o) - { - return encode (o.toString); - } - - /*********************************************************************** - - Replace a section of this Text with the specified - character - - ***********************************************************************/ - - final Text replace (T chr) - { - return set (chr, selectPoint, selectLength); - } - - /*********************************************************************** - - Replace a section of this Text with the specified - array - - ***********************************************************************/ - - final Text replace (T[] chars) - { - int chunk = chars.length - selectLength; - if (chunk >= 0) - expand (selectPoint, chunk); - else - remove (selectPoint, -chunk); - - content [selectPoint .. selectPoint+chars.length] = chars; - return select (selectPoint, chars.length); - } - - /*********************************************************************** - - Replace a section of this Text with another - - ***********************************************************************/ - - final Text replace (TextViewT other) - { - return replace (other.slice); - } - - /*********************************************************************** - - Remove the selection from this Text and reset the - selection to zero length - - ***********************************************************************/ - - final Text remove () - { - remove (selectPoint, selectLength); - return select (selectPoint, 0); - } - - /*********************************************************************** - - Remove the selection from this Text - - ***********************************************************************/ - - private Text remove (int start, int count) - { - pinIndices (start, count); - if (count > 0) - { - if (! mutable) - realloc (); - - uint i = start + count; - memmove (content.ptr+start, content.ptr+i, (contentLength-i) * T.sizeof); - contentLength -= count; - } - return this; - } - - /*********************************************************************** - - Truncate this string at an optional index. Default behaviour - is to truncate at the current append point. Current selection - is moved to the truncation point, with length 0 - - ***********************************************************************/ - - final Text truncate (int index = int.max) - { - if (index is int.max) - index = selectPoint + selectLength; - - pinIndex (index); - return select (contentLength = index, 0); - } - - /*********************************************************************** - - Clear the string content - - ***********************************************************************/ - - final Text clear () - { - return select (contentLength = 0, 0); - } - - /*********************************************************************** - - Remove leading and trailing whitespace from this Text, - and reset the selection to the trimmed content - - ***********************************************************************/ - - final Text trim () - { - content = Util.trim (slice); - select (0, contentLength = content.length); - return this; - } - - /*********************************************************************** - - Remove leading and trailing matches from this Text, - and reset the selection to the stripped content - - ***********************************************************************/ - - final Text strip (T matches) - { - content = Util.strip (slice, matches); - select (0, contentLength = content.length); - return this; - } - - /*********************************************************************** - - Reserve some extra room - - ***********************************************************************/ - - final Text reserve (uint extra) - { - realloc (extra); - return this; - } - - - - /* ======================== TextView methods ======================== */ - - - - /*********************************************************************** - - Get the encoding type - - ***********************************************************************/ - - final TypeInfo encoding() - { - return typeid(T); - } - - /*********************************************************************** - - Set the comparator delegate. Where other is null, we behave - as a getter only - - ***********************************************************************/ - - final Comparator comparator (Comparator other) - { - auto tmp = comparator_; - if (other) - comparator_ = other; - return tmp; - } - - /*********************************************************************** - - Hash this Text - - ***********************************************************************/ - - override hash_t toHash () - { - return Util.jhash (cast(ubyte*) content.ptr, contentLength * T.sizeof); - } - - /*********************************************************************** - - Return the length of the valid content - - ***********************************************************************/ - - final uint length () - { - return contentLength; - } - - /*********************************************************************** - - Is this Text equal to another? - - ***********************************************************************/ - - final bool equals (TextViewT other) - { - if (other is this) - return true; - return equals (other.slice); - } - - /*********************************************************************** - - Is this Text equal to the provided text? - - ***********************************************************************/ - - final bool equals (T[] other) - { - if (other.length == contentLength) - return Util.matching (other.ptr, content.ptr, contentLength); - return false; - } - - /*********************************************************************** - - Does this Text end with another? - - ***********************************************************************/ - - final bool ends (TextViewT other) - { - return ends (other.slice); - } - - /*********************************************************************** - - Does this Text end with the specified string? - - ***********************************************************************/ - - final bool ends (T[] chars) - { - if (chars.length <= contentLength) - return Util.matching (content.ptr+(contentLength-chars.length), chars.ptr, chars.length); - return false; - } - - /*********************************************************************** - - Does this Text start with another? - - ***********************************************************************/ - - final bool starts (TextViewT other) - { - return starts (other.slice); - } - - /*********************************************************************** - - Does this Text start with the specified string? - - ***********************************************************************/ - - final bool starts (T[] chars) - { - if (chars.length <= contentLength) - return Util.matching (content.ptr, chars.ptr, chars.length); - return false; - } - - /*********************************************************************** - - Compare this Text start with another. Returns 0 if the - content matches, less than zero if this Text is "less" - than the other, or greater than zero where this Text - is "bigger". - - ***********************************************************************/ - - final int compare (TextViewT other) - { - if (other is this) - return 0; - - return compare (other.slice); - } - - /*********************************************************************** - - Compare this Text start with an array. Returns 0 if the - content matches, less than zero if this Text is "less" - than the other, or greater than zero where this Text - is "bigger". - - ***********************************************************************/ - - final int compare (T[] chars) - { - return comparator_ (slice, chars); - } - - /*********************************************************************** - - Return content from this Text - - A slice of dst is returned, representing a copy of the - content. The slice is clipped to the minimum of either - the length of the provided array, or the length of the - content minus the stipulated start point - - ***********************************************************************/ - - final T[] copy (T[] dst) - { - uint i = contentLength; - if (i > dst.length) - i = dst.length; - - return dst [0 .. i] = content [0 .. i]; - } - - /*********************************************************************** - - Return an alias to the content of this TextView. Note - that you are bound by honour to leave this content wholly - unmolested. D surely needs some way to enforce immutability - upon array references - - ***********************************************************************/ - - final T[] slice () - { - return content [0 .. contentLength]; - } - - /*********************************************************************** - - Convert to the UniText types. The optional argument - dst will be resized as required to house the conversion. - To minimize heap allocation during subsequent conversions, - apply the following pattern: - --- - _Text string; - - wchar[] buffer; - wchar[] result = string.utf16 (buffer); - - if (result.length > buffer.length) - buffer = result; - --- - You can also provide a buffer from the stack, but the output - will be moved to the heap if said buffer is not large enough - - ***********************************************************************/ - - final char[] toString (char[] dst = null) - { - static if (is (T == char)) - return slice(); - - static if (is (T == wchar)) - return Utf.toString (slice, dst); - - static if (is (T == dchar)) - return Utf.toString (slice, dst); - } - - /// ditto - final wchar[] toString16 (wchar[] dst = null) - { - static if (is (T == char)) - return Utf.toString16 (slice, dst); - - static if (is (T == wchar)) - return slice; - - static if (is (T == dchar)) - return Utf.toString16 (slice, dst); - } - - /// ditto - final dchar[] toString32 (dchar[] dst = null) - { - static if (is (T == char)) - return Utf.toString32 (slice, dst); - - static if (is (T == wchar)) - return Utf.toString32 (slice, dst); - - static if (is (T == dchar)) - return slice; - } - - /*********************************************************************** - - Compare this Text to another. We compare against other - Strings only. Literals and other objects are not supported - - ***********************************************************************/ - - override int opCmp (Object o) - { - auto other = cast (TextViewT) o; - - if (other is null) - return -1; - - return compare (other); - } - - /*********************************************************************** - - Is this Text equal to the text of something else? - - ***********************************************************************/ - - override int opEquals (Object o) - { - auto other = cast (TextViewT) o; - - if (other) - return equals (other); - - // this can become expensive ... - char[1024] tmp = void; - return this.toString(tmp) == o.toString; - } - - /// ditto - final int opEquals (T[] s) - { - return slice == s; - } - - /*********************************************************************** - - Pin the given index to a valid position. - - ***********************************************************************/ - - private void pinIndex (inout int x) - { - if (x > contentLength) - x = contentLength; - } - - /*********************************************************************** - - Pin the given index and length to a valid position. - - ***********************************************************************/ - - private void pinIndices (inout int start, inout int length) - { - if (start > contentLength) - start = contentLength; - - if (length > (contentLength - start)) - length = contentLength - start; - } - - /*********************************************************************** - - Compare two arrays. Returns 0 if the content matches, less - than zero if A is "less" than B, or greater than zero where - A is "bigger". Where the substrings match, the shorter is - considered "less". - - ***********************************************************************/ - - private int simpleComparator (T[] a, T[] b) - { - uint i = a.length; - if (b.length < i) - i = b.length; - - for (int j, k; j < i; ++j) - if ((k = a[j] - b[j]) != 0) - return k; - - return a.length - b.length; - } - - /*********************************************************************** - - Make room available to insert or append something - - ***********************************************************************/ - - private void expand (uint index, uint count) - { - if (!mutable || (contentLength + count) > content.length) - realloc (count); - - memmove (content.ptr+index+count, content.ptr+index, (contentLength - index) * T.sizeof); - selectLength += count; - contentLength += count; - } - - /*********************************************************************** - - Replace a section of this Text with the specified - character - - ***********************************************************************/ - - private Text set (T chr, uint start, uint count) - { - content [start..start+count] = chr; - return this; - } - - /*********************************************************************** - - Allocate memory due to a change in the content. We handle - the distinction between mutable and immutable here. - - ***********************************************************************/ - - private void realloc (uint count = 0) - { - uint size = (content.length + count + 127) & ~127; - - if (mutable) - content.length = size; - else - { - mutable = true; - T[] x = content; - content = new T[size]; - if (contentLength) - content[0..contentLength] = x; - } - } - - /*********************************************************************** - - Internal method to support Text appending - - ***********************************************************************/ - - private Text append (T* chars, uint count) - { - uint point = selectPoint + selectLength; - expand (point, count); - content[point .. point+count] = chars[0 .. count]; - return this; - } -} - - - -/******************************************************************************* - - Immutable string - -*******************************************************************************/ - -class TextView(T) : UniText -{ - public typedef int delegate (T[] a, T[] b) Comparator; - - /*********************************************************************** - - Return the length of the valid content - - ***********************************************************************/ - - abstract uint length (); - - /*********************************************************************** - - Is this Text equal to another? - - ***********************************************************************/ - - abstract bool equals (TextView other); - - /*********************************************************************** - - Is this Text equal to the the provided text? - - ***********************************************************************/ - - abstract bool equals (T[] other); - - /*********************************************************************** - - Does this Text end with another? - - ***********************************************************************/ - - abstract bool ends (TextView other); - - /*********************************************************************** - - Does this Text end with the specified string? - - ***********************************************************************/ - - abstract bool ends (T[] chars); - - /*********************************************************************** - - Does this Text start with another? - - ***********************************************************************/ - - abstract bool starts (TextView other); - - /*********************************************************************** - - Does this Text start with the specified string? - - ***********************************************************************/ - - abstract bool starts (T[] chars); - - /*********************************************************************** - - Compare this Text start with another. Returns 0 if the - content matches, less than zero if this Text is "less" - than the other, or greater than zero where this Text - is "bigger". - - ***********************************************************************/ - - abstract int compare (TextView other); - - /*********************************************************************** - - Compare this Text start with an array. Returns 0 if the - content matches, less than zero if this Text is "less" - than the other, or greater than zero where this Text - is "bigger". - - ***********************************************************************/ - - abstract int compare (T[] chars); - - /*********************************************************************** - - Return content from this Text. A slice of dst is - returned, representing a copy of the content. The - slice is clipped to the minimum of either the length - of the provided array, or the length of the content - minus the stipulated start point - - ***********************************************************************/ - - abstract T[] copy (T[] dst); - - /*********************************************************************** - - Compare this Text to another - - ***********************************************************************/ - - abstract int opCmp (Object o); - - /*********************************************************************** - - Is this Text equal to another? - - ***********************************************************************/ - - abstract int opEquals (Object other); - - /*********************************************************************** - - Is this Text equal to another? - - ***********************************************************************/ - - abstract int opEquals (T[] other); - - /*********************************************************************** - - Get the encoding type - - ***********************************************************************/ - - abstract TypeInfo encoding(); - - /*********************************************************************** - - Set the comparator delegate - - ***********************************************************************/ - - abstract Comparator comparator (Comparator other); - - /*********************************************************************** - - Hash this Text - - ***********************************************************************/ - - abstract hash_t toHash (); - - /*********************************************************************** - - Return an alias to the content of this TextView. Note - that you are bound by honour to leave this content wholly - unmolested. D surely needs some way to enforce immutability - upon array references - - ***********************************************************************/ - - abstract T[] slice (); -} - - -/******************************************************************************* - - A string abstraction that converts to anything - -*******************************************************************************/ - -class UniText -{ - abstract char[] toString (char[] dst = null); - - abstract wchar[] toString16 (wchar[] dst = null); - - abstract dchar[] toString32 (dchar[] dst = null); - - abstract TypeInfo encoding(); -} - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - //void main() {} - unittest - { - auto s = new Text!(char); - s = "hello"; - - s.select ("hello"); - assert (s.selection == "hello"); - s.replace ("1"); - assert (s.selection == "1"); - assert (s == "1"); - - assert (s.clear == ""); - - assert (s.append(12345) == "12345"); - assert (s.selection == "12345"); - - //s.append ("fubar"); - s ~= "fubar"; - assert (s.selection == "12345fubar"); - assert (s.select('5')); - assert (s.selection == "5"); - assert (s.remove == "1234fubar"); - assert (s.select("fubar")); - assert (s.selection == "fubar"); - assert (s.select("wumpus") is false); - assert (s.selection == "fubar"); - - assert (s.clear.append(1.2345, 4) == "1.2345"); - - assert (s.clear.append(0xf0, Integer.Style.Binary) == "11110000"); - - assert (s.clear.encode("one"d).toString == "one"); - - assert (Util.splitLines(s.clear.append("a\nb").slice).length is 2); - - assert (s.select.replace("almost ") == "almost "); - foreach (element; Util.patterns ("all cows eat grass", "eat", "chew")) - s.append (element); - assert (s.selection == "almost all cows chew grass"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Unicode.d --- a/tango/tango/text/Unicode.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,821 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Peter Triller. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Sept 2007 - - authors: Peter - - Provides case mapping Functions for Unicode Strings. As of now it is - only 99 % complete, because it does not take into account Conditional - case mappings. This means the Greek Letter Sigma will not be correctly - case mapped at the end of a Word, and the Locales Lithuanian, Turkish - and Azeri are not taken into account during Case Mappings. This means - all in all around 12 Characters will not be mapped correctly under - some circumstances. - - ICU4j also does not handle these cases at the moment. - - Unittests are written against output from ICU4j - - This Module tries to minimize Memory allocation and usage. You can - always pass the output buffer that should be used to the case mapping - function, which will be resized if necessary. - -*******************************************************************************/ - -module tango.text.Unicode; - -private import tango.text.UnicodeData; -private import tango.text.convert.Utf; - - - -/** - * Converts an Utf8 String to Upper case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -deprecated char[] blockToUpper(char[] input, char[] output = null, dchar[] working = null) { - - // ?? How much preallocation ?? This is worst case allocation - if (working is null) - working.length = input.length; - - uint produced = 0; - uint ate; - uint oprod = 0; - foreach(dchar ch; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (ch in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (ch in specialCaseData); - debug { - assert(s !is null); - } - if((*s).upperCaseMapping !is null) { - // To speed up, use worst case for memory prealocation - // since the length of an UpperCaseMapping list is at most 4 - // Make sure no relocation is made in the toString Method - // better allocation algorithm ? - int len = (*s).upperCaseMapping.length; - if(produced + len >= working.length) - working.length = working.length + working.length / 2 + len; - oprod = produced; - produced += len; - working[oprod..produced] = (*s).upperCaseMapping; - continue; - } - } - // Make sure no relocation is made in the toString Method - if(produced + 1 >= output.length) - working.length = working.length + working.length / 2 + 1; - working[produced++] = d is null ? ch:(*d).simpleUpperCaseMapping; - } - return toString(working[0..produced],output); -} - - - -/** - * Converts an Utf8 String to Upper case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -char[] toUpper(char[] input, char[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (ch in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (ch in specialCaseData); - debug { - assert(s !is null); - } - if((*s).upperCaseMapping !is null) { - // To speed up, use worst case for memory prealocation - // since the length of an UpperCaseMapping list is at most 4 - // Make sure no relocation is made in the toString Method - // better allocation algorithm ? - if(produced + (*s).upperCaseMapping.length * 4 >= output.length) - output.length = output.length + output.length / 2 + (*s).upperCaseMapping.length * 4; - char[] res = toString((*s).upperCaseMapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).upperCaseMapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - } - // Make sure no relocation is made in the toString Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 4; - buf[0] = d is null ? ch:(*d).simpleUpperCaseMapping; - char[] res = toString(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - - -/** - * Converts an Utf16 String to Upper case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -wchar[] toUpper(wchar[] input, wchar[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (ch in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (ch in specialCaseData); - debug { - assert(s !is null); - } - if((*s).upperCaseMapping !is null) { - // To speed up, use worst case for memory prealocation - // Make sure no relocation is made in the toString16 Method - // better allocation algorithm ? - if(produced + (*s).upperCaseMapping.length * 2 >= output.length) - output.length = output.length + output.length / 2 + (*s).upperCaseMapping.length * 3; - wchar[] res = toString16((*s).upperCaseMapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).upperCaseMapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - } - // Make sure no relocation is made in the toString16 Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 3; - buf[0] = d is null ? ch:(*d).simpleUpperCaseMapping; - wchar[] res = toString16(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - -/** - * Converts an Utf32 String to Upper case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -dchar[] toUpper(dchar[] input, dchar[] output = null) { - - // assume most common case: String stays the same length - if (input.length > output.length) - output.length = input.length; - - uint produced = 0; - if (input.length) - foreach(dchar orig; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (orig in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (orig in specialCaseData); - debug { - assert(s !is null); - } - if((*s).upperCaseMapping !is null) { - // Better resize strategy ??? - if(produced + (*s).upperCaseMapping.length > output.length) - output.length = output.length + output.length / 2 + (*s).upperCaseMapping.length; - foreach(ch; (*s).upperCaseMapping) { - output[produced++] = ch; - } - } - continue; - } - if(produced >= output.length) - output.length = output.length + output.length / 2; - output[produced++] = d is null ? orig:(*d).simpleUpperCaseMapping; - } - return output[0..produced]; -} - - -/** - * Converts an Utf8 String to Lower case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -char[] toLower(char[] input, char[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (ch in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (ch in specialCaseData); - debug { - assert(s !is null); - } - if((*s).lowerCaseMapping !is null) { - // To speed up, use worst case for memory prealocation - // since the length of an LowerCaseMapping list is at most 4 - // Make sure no relocation is made in the toString Method - // better allocation algorithm ? - if(produced + (*s).lowerCaseMapping.length * 4 >= output.length) - output.length = output.length + output.length / 2 + (*s).lowerCaseMapping.length * 4; - char[] res = toString((*s).lowerCaseMapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).lowerCaseMapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - } - // Make sure no relocation is made in the toString Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 4; - buf[0] = d is null ? ch:(*d).simpleLowerCaseMapping; - char[] res = toString(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - - -/** - * Converts an Utf16 String to Lower case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -wchar[] toLower(wchar[] input, wchar[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (ch in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (ch in specialCaseData); - debug { - assert(s !is null); - } - if((*s).lowerCaseMapping !is null) { - // To speed up, use worst case for memory prealocation - // Make sure no relocation is made in the toString16 Method - // better allocation algorithm ? - if(produced + (*s).lowerCaseMapping.length * 2 >= output.length) - output.length = output.length + output.length / 2 + (*s).lowerCaseMapping.length * 3; - wchar[] res = toString16((*s).lowerCaseMapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).lowerCaseMapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - } - // Make sure no relocation is made in the toString16 Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 3; - buf[0] = d is null ? ch:(*d).simpleLowerCaseMapping; - wchar[] res = toString16(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - - -/** - * Converts an Utf32 String to Lower case - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -dchar[] toLower(dchar[] input, dchar[] output = null) { - - // assume most common case: String stays the same length - if (input.length > output.length) - output.length = input.length; - - uint produced = 0; - if (input.length) - foreach(dchar orig; input) { - // TODO Conditional Case Mapping - UnicodeData **d = (orig in unicodeData); - if(d !is null && ((*d).generalCategory & UnicodeData.GeneralCategory.SpecialMapping)) { - SpecialCaseData **s = (orig in specialCaseData); - debug { - assert(s !is null); - } - if((*s).lowerCaseMapping !is null) { - // Better resize strategy ??? - if(produced + (*s).lowerCaseMapping.length > output.length) - output.length = output.length + output.length / 2 + (*s).lowerCaseMapping.length; - foreach(ch; (*s).lowerCaseMapping) { - output[produced++] = ch; - } - } - continue; - } - if(produced >= output.length) - output.length = output.length + output.length / 2; - output[produced++] = d is null ? orig:(*d).simpleLowerCaseMapping; - } - return output[0..produced]; -} - -/** - * Converts an Utf8 String to Folding case - * Folding case is used for case insensitive comparsions. - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -char[] toFold(char[] input, char[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - FoldingCaseData **s = (ch in foldingCaseData); - if(s !is null) { - // To speed up, use worst case for memory prealocation - // since the length of an UpperCaseMapping list is at most 4 - // Make sure no relocation is made in the toString Method - // better allocation algorithm ? - if(produced + (*s).mapping.length * 4 >= output.length) - output.length = output.length + output.length / 2 + (*s).mapping.length * 4; - char[] res = toString((*s).mapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).mapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - // Make sure no relocation is made in the toString Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 4; - buf[0] = ch; - char[] res = toString(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - -/** - * Converts an Utf16 String to Folding case - * Folding case is used for case insensitive comparsions. - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -wchar[] toFold(wchar[] input, wchar[] output = null) { - - dchar[1] buf; - // assume most common case: String stays the same length - if (output.length < input.length) - output.length = input.length; - - uint produced = 0; - uint ate; - foreach(dchar ch; input) { - FoldingCaseData **s = (ch in foldingCaseData); - if(s !is null) { - // To speed up, use worst case for memory prealocation - // Make sure no relocation is made in the toString16 Method - // better allocation algorithm ? - if(produced + (*s).mapping.length * 2 >= output.length) - output.length = output.length + output.length / 2 + (*s).mapping.length * 3; - wchar[] res = toString16((*s).mapping, output[produced..output.length], &ate); - debug { - assert(ate == (*s).mapping.length); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - continue; - } - // Make sure no relocation is made in the toString16 Method - if(produced + 4 >= output.length) - output.length = output.length + output.length / 2 + 3; - buf[0] = ch; - wchar[] res = toString16(buf, output[produced..output.length], &ate); - debug { - assert(ate == 1); - assert(res.ptr == output[produced..output.length].ptr); - } - produced += res.length; - } - return output[0..produced]; -} - -/** - * Converts an Utf32 String to Folding case - * Folding case is used for case insensitive comparsions. - * - * Params: - * input = String to be case mapped - * output = this output buffer will be used unless too small - * Returns: the case mapped string - */ -dchar[] toFold(dchar[] input, dchar[] output = null) { - - // assume most common case: String stays the same length - if (input.length > output.length) - output.length = input.length; - - uint produced = 0; - if (input.length) - foreach(dchar orig; input) { - FoldingCaseData **d = (orig in foldingCaseData); - if(d !is null ) { - // Better resize strategy ??? - if(produced + (*d).mapping.length > output.length) - output.length = output.length + output.length / 2 + (*d).mapping.length; - foreach(ch; (*d).mapping) { - output[produced++] = ch; - } - continue; - } - if(produced >= output.length) - output.length = output.length + output.length / 2; - output[produced++] = orig; - } - return output[0..produced]; -} - - -/** - * Determines if a character is a digit. It returns true for decimal - * digits only. - * - * Params: - * ch = the character to be inspected - */ -bool isDigit(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & UnicodeData.GeneralCategory.Nd); -} - - -/** - * Determines if a character is a letter. - * - * Params: - * ch = the character to be inspected - */ -bool isLetter(int ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & - ( UnicodeData.GeneralCategory.Lu - | UnicodeData.GeneralCategory.Ll - | UnicodeData.GeneralCategory.Lt - | UnicodeData.GeneralCategory.Lm - | UnicodeData.GeneralCategory.Lo)); -} - -/** - * Determines if a character is a letter or a - * decimal digit. - * - * Params: - * ch = the character to be inspected - */ -bool isLetterOrDigit(int ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & - ( UnicodeData.GeneralCategory.Lu - | UnicodeData.GeneralCategory.Ll - | UnicodeData.GeneralCategory.Lt - | UnicodeData.GeneralCategory.Lm - | UnicodeData.GeneralCategory.Lo - | UnicodeData.GeneralCategory.Nd)); -} - -/** - * Determines if a character is a lower case letter. - * Params: - * ch = the character to be inspected - */ -bool isLower(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & UnicodeData.GeneralCategory.Ll); -} - -/** - * Determines if a character is a title case letter. - * In case of combined letters, only the first is upper and the second is lower. - * Some of these special characters can be found in the croatian and greek language. - * See_Also: http://en.wikipedia.org/wiki/Capitalization - * Params: - * ch = the character to be inspected - */ -bool isTitle(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & UnicodeData.GeneralCategory.Lt); -} - -/** - * Determines if a character is a upper case letter. - * Params: - * ch = the character to be inspected - */ -bool isUpper(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & UnicodeData.GeneralCategory.Lu); -} - -/** - * Determines if a character is a Whitespace character. - * Whitespace characters are characters in the - * General Catetories Zs, Zl, Zp without the No Break - * spaces plus the control characters out of the ASCII - * range, that are used as spaces: - * TAB VT LF FF CR FS GS RS US NL - * - * WARNING: look at isSpace, maybe that function does - * more what you expect. - * - * Params: - * ch = the character to be inspected - */ -bool isWhitespace(dchar ch) { - if((ch >= 0x0009 && ch <= 0x000D) || (ch >= 0x001C && ch <= 0x001F)) - return true; - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & - ( UnicodeData.GeneralCategory.Zs - | UnicodeData.GeneralCategory.Zl - | UnicodeData.GeneralCategory.Zp)) - && ch != 0x00A0 // NBSP - && ch != 0x202F // NARROW NBSP - && ch != 0xFEFF; // ZERO WIDTH NBSP -} - -/** - * Detemines if a character is a Space character as - * specified in the Unicode Standart. - * - * WARNING: look at isWhitepace, maybe that function does - * more what you expect. - * - * Params: - * ch = the character to be inspected - */ -bool isSpace(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & - ( UnicodeData.GeneralCategory.Zs - | UnicodeData.GeneralCategory.Zl - | UnicodeData.GeneralCategory.Zp)); -} - - -/** - * Detemines if a character is a printable character as - * specified in the Unicode Standart. - * - * - * WARNING: look at isWhitepace, maybe that function does - * more what you expect. - * - * Params: - * ch = the character to be inspected - */ -bool isPrintable(dchar ch) { - UnicodeData **d = (ch in unicodeData); - return (d !is null) && ((*d).generalCategory & - ( UnicodeData.GeneralCategory.Cn - | UnicodeData.GeneralCategory.Cc - | UnicodeData.GeneralCategory.Cf - | UnicodeData.GeneralCategory.Co - | UnicodeData.GeneralCategory.Cs)); -} - -debug ( UnicodeTest ): - void main() {} - -debug (UnitTest) { - -unittest { - - - // 1) No Buffer passed, no resize, no SpecialCase - - char[] testString1utf8 = "\u00E4\u00F6\u00FC"; - wchar[] testString1utf16 = "\u00E4\u00F6\u00FC"; - dchar[] testString1utf32 = "\u00E4\u00F6\u00FC"; - char[] refString1utf8 = "\u00C4\u00D6\u00DC"; - wchar[] refString1utf16 = "\u00C4\u00D6\u00DC"; - dchar[] refString1utf32 = "\u00C4\u00D6\u00DC"; - char[] resultString1utf8 = toUpper(testString1utf8); - assert(resultString1utf8 == refString1utf8); - wchar[] resultString1utf16 = toUpper(testString1utf16); - assert(resultString1utf16 == refString1utf16); - dchar[] resultString1utf32 = toUpper(testString1utf32); - assert(resultString1utf32 == refString1utf32); - - // 2) Buffer passed, no resize, no SpecialCase - char[60] buffer1utf8; - wchar[30] buffer1utf16; - dchar[30] buffer1utf32; - resultString1utf8 = toUpper(testString1utf8,buffer1utf8); - assert(resultString1utf8.ptr == buffer1utf8.ptr); - assert(resultString1utf8 == refString1utf8); - resultString1utf16 = toUpper(testString1utf16,buffer1utf16); - assert(resultString1utf16.ptr == buffer1utf16.ptr); - assert(resultString1utf16 == refString1utf16); - resultString1utf32 = toUpper(testString1utf32,buffer1utf32); - assert(resultString1utf32.ptr == buffer1utf32.ptr); - assert(resultString1utf32 == refString1utf32); - - // 3/ Buffer passed, resize necessary, no Special case - - char[5] buffer2utf8; - wchar[2] buffer2utf16; - dchar[2] buffer2utf32; - resultString1utf8 = toUpper(testString1utf8,buffer2utf8); - assert(resultString1utf8.ptr != buffer2utf8.ptr); - assert(resultString1utf8 == refString1utf8); - resultString1utf16 = toUpper(testString1utf16,buffer2utf16); - assert(resultString1utf16.ptr != buffer2utf16.ptr); - assert(resultString1utf16 == refString1utf16); - resultString1utf32 = toUpper(testString1utf32,buffer2utf32); - assert(resultString1utf32.ptr != buffer2utf32.ptr); - assert(resultString1utf32 == refString1utf32); - - // 4) Buffer passed, resize necessary, extensive SpecialCase - - - char[] testString2utf8 = "\uFB03\uFB04\uFB05"; - wchar[] testString2utf16 = "\uFB03\uFB04\uFB05"; - dchar[] testString2utf32 = "\uFB03\uFB04\uFB05"; - char[] refString2utf8 = "\u0046\u0046\u0049\u0046\u0046\u004C\u0053\u0054"; - wchar[] refString2utf16 = "\u0046\u0046\u0049\u0046\u0046\u004C\u0053\u0054"; - dchar[] refString2utf32 = "\u0046\u0046\u0049\u0046\u0046\u004C\u0053\u0054"; - resultString1utf8 = toUpper(testString2utf8,buffer2utf8); - assert(resultString1utf8.ptr != buffer2utf8.ptr); - assert(resultString1utf8 == refString2utf8); - resultString1utf16 = toUpper(testString2utf16,buffer2utf16); - assert(resultString1utf16.ptr != buffer2utf16.ptr); - assert(resultString1utf16 == refString2utf16); - resultString1utf32 = toUpper(testString2utf32,buffer2utf32); - assert(resultString1utf32.ptr != buffer2utf32.ptr); - assert(resultString1utf32 == refString2utf32); - -} - - -unittest { - - - // 1) No Buffer passed, no resize, no SpecialCase - - char[] testString1utf8 = "\u00C4\u00D6\u00DC"; - wchar[] testString1utf16 = "\u00C4\u00D6\u00DC"; - dchar[] testString1utf32 = "\u00C4\u00D6\u00DC"; - char[] refString1utf8 = "\u00E4\u00F6\u00FC"; - wchar[] refString1utf16 = "\u00E4\u00F6\u00FC"; - dchar[] refString1utf32 = "\u00E4\u00F6\u00FC"; - char[] resultString1utf8 = toLower(testString1utf8); - assert(resultString1utf8 == refString1utf8); - wchar[] resultString1utf16 = toLower(testString1utf16); - assert(resultString1utf16 == refString1utf16); - dchar[] resultString1utf32 = toLower(testString1utf32); - assert(resultString1utf32 == refString1utf32); - - // 2) Buffer passed, no resize, no SpecialCase - char[60] buffer1utf8; - wchar[30] buffer1utf16; - dchar[30] buffer1utf32; - resultString1utf8 = toLower(testString1utf8,buffer1utf8); - assert(resultString1utf8.ptr == buffer1utf8.ptr); - assert(resultString1utf8 == refString1utf8); - resultString1utf16 = toLower(testString1utf16,buffer1utf16); - assert(resultString1utf16.ptr == buffer1utf16.ptr); - assert(resultString1utf16 == refString1utf16); - resultString1utf32 = toLower(testString1utf32,buffer1utf32); - assert(resultString1utf32.ptr == buffer1utf32.ptr); - assert(resultString1utf32 == refString1utf32); - - // 3/ Buffer passed, resize necessary, no Special case - - char[5] buffer2utf8; - wchar[2] buffer2utf16; - dchar[2] buffer2utf32; - resultString1utf8 = toLower(testString1utf8,buffer2utf8); - assert(resultString1utf8.ptr != buffer2utf8.ptr); - assert(resultString1utf8 == refString1utf8); - resultString1utf16 = toLower(testString1utf16,buffer2utf16); - assert(resultString1utf16.ptr != buffer2utf16.ptr); - assert(resultString1utf16 == refString1utf16); - resultString1utf32 = toLower(testString1utf32,buffer2utf32); - assert(resultString1utf32.ptr != buffer2utf32.ptr); - assert(resultString1utf32 == refString1utf32); - - // 4) Buffer passed, resize necessary, extensive SpecialCase - - char[] testString2utf8 = "\u0130\u0130\u0130"; - wchar[] testString2utf16 = "\u0130\u0130\u0130"; - dchar[] testString2utf32 = "\u0130\u0130\u0130"; - char[] refString2utf8 = "\u0069\u0307\u0069\u0307\u0069\u0307"; - wchar[] refString2utf16 = "\u0069\u0307\u0069\u0307\u0069\u0307"; - dchar[] refString2utf32 = "\u0069\u0307\u0069\u0307\u0069\u0307"; - resultString1utf8 = toLower(testString2utf8,buffer2utf8); - assert(resultString1utf8.ptr != buffer2utf8.ptr); - assert(resultString1utf8 == refString2utf8); - resultString1utf16 = toLower(testString2utf16,buffer2utf16); - assert(resultString1utf16.ptr != buffer2utf16.ptr); - assert(resultString1utf16 == refString2utf16); - resultString1utf32 = toLower(testString2utf32,buffer2utf32); - assert(resultString1utf32.ptr != buffer2utf32.ptr); - assert(resultString1utf32 == refString2utf32); -} - -unittest { - char[] testString1utf8 = "?!Mädchen \u0390\u0390,;"; - char[] testString2utf8 = "?!MÄDCHEN \u03B9\u0308\u0301\u03B9\u0308\u0301,;"; - assert(toFold(testString1utf8) == toFold(testString2utf8)); - wchar[] testString1utf16 = "?!Mädchen \u0390\u0390,;";; - wchar[] testString2utf16 = "?!MÄDCHEN \u03B9\u0308\u0301\u03B9\u0308\u0301,;"; - assert(toFold(testString1utf16) == toFold(testString2utf16)); - wchar[] testString1utf32 = "?!Mädchen \u0390\u0390,;"; - wchar[] testString2utf32 = "?!MÄDCHEN \u03B9\u0308\u0301\u03B9\u0308\u0301,;"; - assert(toFold(testString1utf32) == toFold(testString2utf32)); -} - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/UnicodeData.d --- a/tango/tango/text/UnicodeData.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111183 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Peter Triller. All rights reserved - - license: BSD style: 513 545 544 513 0LICENSE) - - version: Initial release: Sept 2007 - - authors: Peter - - Contains the Unicode Data files converted to structs and simple - accessor functions. This file is generated by a Perl script. All - necessary changes should be made in the script, not in this file. - -*******************************************************************************/ - -module tango.text.UnicodeData; - -struct UnicodeData { - - enum GeneralCategory { - Lu = 1, // Letter, Uppercase - Ll = 1 << 1, // Letter, Lowercase - Lt = 1 << 2, // Letter, Titlecase - Lm = 1 << 3, // Letter, Modifier - Lo = 1 << 4, // Letter, Other - Mn = 1 << 5, // Mark, Nonspacing - Mc = 1 << 6, // Mark, Spacing Combining - Me = 1 << 7, // Mark, Enclosing - Nd = 1 << 8, // Number, Decimal Digit - Nl = 1 << 9, // Number, Letter - No = 1 << 10, // Number, Other - Pc = 1 << 11, // Punctuation, Connector - Pd = 1 << 12, // Punctuation, Dash - Ps = 1 << 13, // Punctuation, Open - Pe = 1 << 14, // Punctuation, Close - Pi = 1 << 15, // Punctuation, Initial quote (may behave like Ps or Pe depending on usage) - Pf = 1 << 16, // Punctuation, Final quote (may behave like Ps or Pe depending on usage) - Po = 1 << 17, // Punctuation, Other - Sm = 1 << 18, // Symbol, Math - Sc = 1 << 19, // Symbol, Currency - Sk = 1 << 20, // Symbol, Modifier - So = 1 << 21, // Symbol, Other - Zs = 1 << 22, // Separator, Space - Zl = 1 << 23, // Separator, Line - Zp = 1 << 24, // Separator, Paragraph - Cc = 1 << 25, // Other, Control - Cf = 1 << 26, // Other, Format - Cs = 1 << 27, // Other, Surrogate - Co = 1 << 28, // Other, Private Use - Cn = 1 << 29, // Other, Not Assigned (no characters in the file have this property) - SpecialMapping = 1 << 30 // Special Bit for detection of specialMappings - } - - - enum BidiClass { - L, // Left-to-Right - LRE, // Left-to-Right Embedding - LRO, // Left-to-Right Override - R, // Right-to-Left - AL, // Right-to-Left Arabic - RLE, // Right-to-Left Embedding - RLO, // Right-to-Left Override - PDF, // Pop Directional Format - EN, // European Number - ES, // European Number Separator - ET, // European Number Terminator - AN, // Arabic Number - CS, // Common Number Separator - NSM, // Non-Spacing Mark - BN, // Boundary Neutral - B, // Paragraph Separator - S, // Segment Separator - WS, // Whitespace - ON // Other Neutrals - } - - enum DecompositionType { - None, // Custom type signaling no Decomposition - Font, // A font variant (e.g. a blackletter form). - NoBreak, // A no-break version of a space or hyphen. - Initial, // An initial presentation form (Arabic). - Medial, // A medial presentation form (Arabic). - Final, // A final presentation form (Arabic). - Isolated, // An isolated presentation form (Arabic). - Circle, // An encircled form. - Super, // A superscript form. - Sub, // A subscript form. - Vertical, // A vertical layout presentation form. - Wide, // A wide (or zenkaku) compatibility character. - Narrow, // A narrow (or hankaku) compatibility character. - Small, // A small variant form (CNS compatibility). - Square, // A CJK squared font variant. - Fraction, // A vulgar fraction form. - Compat // Otherwise unspecified compatibility character. - } - - enum BidiMirrored { - Y, // Yes - N // No - } - - dchar code; - -// char[] name; - - GeneralCategory generalCategory; - -// short canonicalCombiningClass; - - //TODO the defaults are not yet set correctly - -// BidiClass bidiClass; - - //TODO end - -// DecompositionType decompositionType; - -// dchar[] decompositionMapping; - - - // TODO Check handling - -// int numeric_1; - -// int numeric_2; - -// double numeric_3; - - // TODO end - -// BidiMirrored bidiMirrored; - -// char[] unicode1Name; - -// char [] isoComment; - - dchar simpleUpperCaseMapping; - - dchar simpleLowerCaseMapping; - - dchar simpleTitleCaseMapping; - -} - -struct SpecialCaseData { - - dchar code; - - dchar[] upperCaseMapping; - - dchar[] lowerCaseMapping; - - dchar[] titleCaseMapping; - -} - -struct FoldingCaseData { - - dchar code; - - dchar[] mapping; - -} - -UnicodeData *unicodeData[dchar]; - -SpecialCaseData *specialCaseData[dchar]; - -FoldingCaseData *foldingCaseData[dchar]; - -private { - UnicodeData internalUnicodeData[] = [ - { code:0x0000 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0000 - ,simpleLowerCaseMapping:0x0000 - ,simpleTitleCaseMapping:0x0000 - }, - { code:0x0001 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0001 - ,simpleLowerCaseMapping:0x0001 - ,simpleTitleCaseMapping:0x0001 - }, - { code:0x0002 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0002 - ,simpleLowerCaseMapping:0x0002 - ,simpleTitleCaseMapping:0x0002 - }, - { code:0x0003 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0003 - ,simpleLowerCaseMapping:0x0003 - ,simpleTitleCaseMapping:0x0003 - }, - { code:0x0004 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0004 - ,simpleLowerCaseMapping:0x0004 - ,simpleTitleCaseMapping:0x0004 - }, - { code:0x0005 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0005 - ,simpleLowerCaseMapping:0x0005 - ,simpleTitleCaseMapping:0x0005 - }, - { code:0x0006 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0006 - ,simpleLowerCaseMapping:0x0006 - ,simpleTitleCaseMapping:0x0006 - }, - { code:0x0007 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0007 - ,simpleLowerCaseMapping:0x0007 - ,simpleTitleCaseMapping:0x0007 - }, - { code:0x0008 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0008 - ,simpleLowerCaseMapping:0x0008 - ,simpleTitleCaseMapping:0x0008 - }, - { code:0x0009 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0009 - ,simpleLowerCaseMapping:0x0009 - ,simpleTitleCaseMapping:0x0009 - }, - { code:0x000A - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000A - ,simpleLowerCaseMapping:0x000A - ,simpleTitleCaseMapping:0x000A - }, - { code:0x000B - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000B - ,simpleLowerCaseMapping:0x000B - ,simpleTitleCaseMapping:0x000B - }, - { code:0x000C - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000C - ,simpleLowerCaseMapping:0x000C - ,simpleTitleCaseMapping:0x000C - }, - { code:0x000D - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000D - ,simpleLowerCaseMapping:0x000D - ,simpleTitleCaseMapping:0x000D - }, - { code:0x000E - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000E - ,simpleLowerCaseMapping:0x000E - ,simpleTitleCaseMapping:0x000E - }, - { code:0x000F - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x000F - ,simpleLowerCaseMapping:0x000F - ,simpleTitleCaseMapping:0x000F - }, - { code:0x0010 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0010 - ,simpleLowerCaseMapping:0x0010 - ,simpleTitleCaseMapping:0x0010 - }, - { code:0x0011 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0011 - ,simpleLowerCaseMapping:0x0011 - ,simpleTitleCaseMapping:0x0011 - }, - { code:0x0012 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0012 - ,simpleLowerCaseMapping:0x0012 - ,simpleTitleCaseMapping:0x0012 - }, - { code:0x0013 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0013 - ,simpleLowerCaseMapping:0x0013 - ,simpleTitleCaseMapping:0x0013 - }, - { code:0x0014 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0014 - ,simpleLowerCaseMapping:0x0014 - ,simpleTitleCaseMapping:0x0014 - }, - { code:0x0015 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0015 - ,simpleLowerCaseMapping:0x0015 - ,simpleTitleCaseMapping:0x0015 - }, - { code:0x0016 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0016 - ,simpleLowerCaseMapping:0x0016 - ,simpleTitleCaseMapping:0x0016 - }, - { code:0x0017 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0017 - ,simpleLowerCaseMapping:0x0017 - ,simpleTitleCaseMapping:0x0017 - }, - { code:0x0018 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0018 - ,simpleLowerCaseMapping:0x0018 - ,simpleTitleCaseMapping:0x0018 - }, - { code:0x0019 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0019 - ,simpleLowerCaseMapping:0x0019 - ,simpleTitleCaseMapping:0x0019 - }, - { code:0x001A - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001A - ,simpleLowerCaseMapping:0x001A - ,simpleTitleCaseMapping:0x001A - }, - { code:0x001B - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001B - ,simpleLowerCaseMapping:0x001B - ,simpleTitleCaseMapping:0x001B - }, - { code:0x001C - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001C - ,simpleLowerCaseMapping:0x001C - ,simpleTitleCaseMapping:0x001C - }, - { code:0x001D - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001D - ,simpleLowerCaseMapping:0x001D - ,simpleTitleCaseMapping:0x001D - }, - { code:0x001E - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001E - ,simpleLowerCaseMapping:0x001E - ,simpleTitleCaseMapping:0x001E - }, - { code:0x001F - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x001F - ,simpleLowerCaseMapping:0x001F - ,simpleTitleCaseMapping:0x001F - }, - { code:0x0020 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x0020 - ,simpleLowerCaseMapping:0x0020 - ,simpleTitleCaseMapping:0x0020 - }, - { code:0x0021 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0021 - ,simpleLowerCaseMapping:0x0021 - ,simpleTitleCaseMapping:0x0021 - }, - { code:0x0022 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0022 - ,simpleLowerCaseMapping:0x0022 - ,simpleTitleCaseMapping:0x0022 - }, - { code:0x0023 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0023 - ,simpleLowerCaseMapping:0x0023 - ,simpleTitleCaseMapping:0x0023 - }, - { code:0x0024 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x0024 - ,simpleLowerCaseMapping:0x0024 - ,simpleTitleCaseMapping:0x0024 - }, - { code:0x0025 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0025 - ,simpleLowerCaseMapping:0x0025 - ,simpleTitleCaseMapping:0x0025 - }, - { code:0x0026 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0026 - ,simpleLowerCaseMapping:0x0026 - ,simpleTitleCaseMapping:0x0026 - }, - { code:0x0027 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0027 - ,simpleLowerCaseMapping:0x0027 - ,simpleTitleCaseMapping:0x0027 - }, - { code:0x0028 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x0028 - ,simpleLowerCaseMapping:0x0028 - ,simpleTitleCaseMapping:0x0028 - }, - { code:0x0029 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x0029 - ,simpleLowerCaseMapping:0x0029 - ,simpleTitleCaseMapping:0x0029 - }, - { code:0x002A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x002A - ,simpleLowerCaseMapping:0x002A - ,simpleTitleCaseMapping:0x002A - }, - { code:0x002B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x002B - ,simpleLowerCaseMapping:0x002B - ,simpleTitleCaseMapping:0x002B - }, - { code:0x002C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x002C - ,simpleLowerCaseMapping:0x002C - ,simpleTitleCaseMapping:0x002C - }, - { code:0x002D - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x002D - ,simpleLowerCaseMapping:0x002D - ,simpleTitleCaseMapping:0x002D - }, - { code:0x002E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x002E - ,simpleLowerCaseMapping:0x002E - ,simpleTitleCaseMapping:0x002E - }, - { code:0x002F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x002F - ,simpleLowerCaseMapping:0x002F - ,simpleTitleCaseMapping:0x002F - }, - { code:0x0030 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0030 - ,simpleLowerCaseMapping:0x0030 - ,simpleTitleCaseMapping:0x0030 - }, - { code:0x0031 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0031 - ,simpleLowerCaseMapping:0x0031 - ,simpleTitleCaseMapping:0x0031 - }, - { code:0x0032 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0032 - ,simpleLowerCaseMapping:0x0032 - ,simpleTitleCaseMapping:0x0032 - }, - { code:0x0033 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0033 - ,simpleLowerCaseMapping:0x0033 - ,simpleTitleCaseMapping:0x0033 - }, - { code:0x0034 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0034 - ,simpleLowerCaseMapping:0x0034 - ,simpleTitleCaseMapping:0x0034 - }, - { code:0x0035 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0035 - ,simpleLowerCaseMapping:0x0035 - ,simpleTitleCaseMapping:0x0035 - }, - { code:0x0036 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0036 - ,simpleLowerCaseMapping:0x0036 - ,simpleTitleCaseMapping:0x0036 - }, - { code:0x0037 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0037 - ,simpleLowerCaseMapping:0x0037 - ,simpleTitleCaseMapping:0x0037 - }, - { code:0x0038 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0038 - ,simpleLowerCaseMapping:0x0038 - ,simpleTitleCaseMapping:0x0038 - }, - { code:0x0039 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0039 - ,simpleLowerCaseMapping:0x0039 - ,simpleTitleCaseMapping:0x0039 - }, - { code:0x003A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x003A - ,simpleLowerCaseMapping:0x003A - ,simpleTitleCaseMapping:0x003A - }, - { code:0x003B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x003B - ,simpleLowerCaseMapping:0x003B - ,simpleTitleCaseMapping:0x003B - }, - { code:0x003C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x003C - ,simpleLowerCaseMapping:0x003C - ,simpleTitleCaseMapping:0x003C - }, - { code:0x003D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x003D - ,simpleLowerCaseMapping:0x003D - ,simpleTitleCaseMapping:0x003D - }, - { code:0x003E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x003E - ,simpleLowerCaseMapping:0x003E - ,simpleTitleCaseMapping:0x003E - }, - { code:0x003F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x003F - ,simpleLowerCaseMapping:0x003F - ,simpleTitleCaseMapping:0x003F - }, - { code:0x0040 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0040 - ,simpleLowerCaseMapping:0x0040 - ,simpleTitleCaseMapping:0x0040 - }, - { code:0x0041 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0041 - ,simpleLowerCaseMapping:0x0061 - ,simpleTitleCaseMapping:0x0041 - }, - { code:0x0042 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0042 - ,simpleLowerCaseMapping:0x0062 - ,simpleTitleCaseMapping:0x0042 - }, - { code:0x0043 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0043 - ,simpleLowerCaseMapping:0x0063 - ,simpleTitleCaseMapping:0x0043 - }, - { code:0x0044 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0044 - ,simpleLowerCaseMapping:0x0064 - ,simpleTitleCaseMapping:0x0044 - }, - { code:0x0045 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0045 - ,simpleLowerCaseMapping:0x0065 - ,simpleTitleCaseMapping:0x0045 - }, - { code:0x0046 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0046 - ,simpleLowerCaseMapping:0x0066 - ,simpleTitleCaseMapping:0x0046 - }, - { code:0x0047 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0047 - ,simpleLowerCaseMapping:0x0067 - ,simpleTitleCaseMapping:0x0047 - }, - { code:0x0048 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0048 - ,simpleLowerCaseMapping:0x0068 - ,simpleTitleCaseMapping:0x0048 - }, - { code:0x0049 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0049 - ,simpleLowerCaseMapping:0x0069 - ,simpleTitleCaseMapping:0x0049 - }, - { code:0x004A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004A - ,simpleLowerCaseMapping:0x006A - ,simpleTitleCaseMapping:0x004A - }, - { code:0x004B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004B - ,simpleLowerCaseMapping:0x006B - ,simpleTitleCaseMapping:0x004B - }, - { code:0x004C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004C - ,simpleLowerCaseMapping:0x006C - ,simpleTitleCaseMapping:0x004C - }, - { code:0x004D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004D - ,simpleLowerCaseMapping:0x006D - ,simpleTitleCaseMapping:0x004D - }, - { code:0x004E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004E - ,simpleLowerCaseMapping:0x006E - ,simpleTitleCaseMapping:0x004E - }, - { code:0x004F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x004F - ,simpleLowerCaseMapping:0x006F - ,simpleTitleCaseMapping:0x004F - }, - { code:0x0050 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0050 - ,simpleLowerCaseMapping:0x0070 - ,simpleTitleCaseMapping:0x0050 - }, - { code:0x0051 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0051 - ,simpleLowerCaseMapping:0x0071 - ,simpleTitleCaseMapping:0x0051 - }, - { code:0x0052 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0052 - ,simpleLowerCaseMapping:0x0072 - ,simpleTitleCaseMapping:0x0052 - }, - { code:0x0053 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0053 - ,simpleLowerCaseMapping:0x0073 - ,simpleTitleCaseMapping:0x0053 - }, - { code:0x0054 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0054 - ,simpleLowerCaseMapping:0x0074 - ,simpleTitleCaseMapping:0x0054 - }, - { code:0x0055 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0055 - ,simpleLowerCaseMapping:0x0075 - ,simpleTitleCaseMapping:0x0055 - }, - { code:0x0056 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0056 - ,simpleLowerCaseMapping:0x0076 - ,simpleTitleCaseMapping:0x0056 - }, - { code:0x0057 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0057 - ,simpleLowerCaseMapping:0x0077 - ,simpleTitleCaseMapping:0x0057 - }, - { code:0x0058 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0058 - ,simpleLowerCaseMapping:0x0078 - ,simpleTitleCaseMapping:0x0058 - }, - { code:0x0059 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0059 - ,simpleLowerCaseMapping:0x0079 - ,simpleTitleCaseMapping:0x0059 - }, - { code:0x005A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x005A - ,simpleLowerCaseMapping:0x007A - ,simpleTitleCaseMapping:0x005A - }, - { code:0x005B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x005B - ,simpleLowerCaseMapping:0x005B - ,simpleTitleCaseMapping:0x005B - }, - { code:0x005C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x005C - ,simpleLowerCaseMapping:0x005C - ,simpleTitleCaseMapping:0x005C - }, - { code:0x005D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x005D - ,simpleLowerCaseMapping:0x005D - ,simpleTitleCaseMapping:0x005D - }, - { code:0x005E - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x005E - ,simpleLowerCaseMapping:0x005E - ,simpleTitleCaseMapping:0x005E - }, - { code:0x005F - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0x005F - ,simpleLowerCaseMapping:0x005F - ,simpleTitleCaseMapping:0x005F - }, - { code:0x0060 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x0060 - ,simpleLowerCaseMapping:0x0060 - ,simpleTitleCaseMapping:0x0060 - }, - { code:0x0061 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0041 - ,simpleLowerCaseMapping:0x0061 - ,simpleTitleCaseMapping:0x0041 - }, - { code:0x0062 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0042 - ,simpleLowerCaseMapping:0x0062 - ,simpleTitleCaseMapping:0x0042 - }, - { code:0x0063 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0043 - ,simpleLowerCaseMapping:0x0063 - ,simpleTitleCaseMapping:0x0043 - }, - { code:0x0064 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0044 - ,simpleLowerCaseMapping:0x0064 - ,simpleTitleCaseMapping:0x0044 - }, - { code:0x0065 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0045 - ,simpleLowerCaseMapping:0x0065 - ,simpleTitleCaseMapping:0x0045 - }, - { code:0x0066 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0046 - ,simpleLowerCaseMapping:0x0066 - ,simpleTitleCaseMapping:0x0046 - }, - { code:0x0067 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0047 - ,simpleLowerCaseMapping:0x0067 - ,simpleTitleCaseMapping:0x0047 - }, - { code:0x0068 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0048 - ,simpleLowerCaseMapping:0x0068 - ,simpleTitleCaseMapping:0x0048 - }, - { code:0x0069 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0049 - ,simpleLowerCaseMapping:0x0069 - ,simpleTitleCaseMapping:0x0049 - }, - { code:0x006A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004A - ,simpleLowerCaseMapping:0x006A - ,simpleTitleCaseMapping:0x004A - }, - { code:0x006B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004B - ,simpleLowerCaseMapping:0x006B - ,simpleTitleCaseMapping:0x004B - }, - { code:0x006C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004C - ,simpleLowerCaseMapping:0x006C - ,simpleTitleCaseMapping:0x004C - }, - { code:0x006D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004D - ,simpleLowerCaseMapping:0x006D - ,simpleTitleCaseMapping:0x004D - }, - { code:0x006E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004E - ,simpleLowerCaseMapping:0x006E - ,simpleTitleCaseMapping:0x004E - }, - { code:0x006F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x004F - ,simpleLowerCaseMapping:0x006F - ,simpleTitleCaseMapping:0x004F - }, - { code:0x0070 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0050 - ,simpleLowerCaseMapping:0x0070 - ,simpleTitleCaseMapping:0x0050 - }, - { code:0x0071 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0051 - ,simpleLowerCaseMapping:0x0071 - ,simpleTitleCaseMapping:0x0051 - }, - { code:0x0072 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0052 - ,simpleLowerCaseMapping:0x0072 - ,simpleTitleCaseMapping:0x0052 - }, - { code:0x0073 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0053 - ,simpleLowerCaseMapping:0x0073 - ,simpleTitleCaseMapping:0x0053 - }, - { code:0x0074 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0054 - ,simpleLowerCaseMapping:0x0074 - ,simpleTitleCaseMapping:0x0054 - }, - { code:0x0075 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0055 - ,simpleLowerCaseMapping:0x0075 - ,simpleTitleCaseMapping:0x0055 - }, - { code:0x0076 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0056 - ,simpleLowerCaseMapping:0x0076 - ,simpleTitleCaseMapping:0x0056 - }, - { code:0x0077 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0057 - ,simpleLowerCaseMapping:0x0077 - ,simpleTitleCaseMapping:0x0057 - }, - { code:0x0078 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0058 - ,simpleLowerCaseMapping:0x0078 - ,simpleTitleCaseMapping:0x0058 - }, - { code:0x0079 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0059 - ,simpleLowerCaseMapping:0x0079 - ,simpleTitleCaseMapping:0x0059 - }, - { code:0x007A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x005A - ,simpleLowerCaseMapping:0x007A - ,simpleTitleCaseMapping:0x005A - }, - { code:0x007B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x007B - ,simpleLowerCaseMapping:0x007B - ,simpleTitleCaseMapping:0x007B - }, - { code:0x007C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x007C - ,simpleLowerCaseMapping:0x007C - ,simpleTitleCaseMapping:0x007C - }, - { code:0x007D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x007D - ,simpleLowerCaseMapping:0x007D - ,simpleTitleCaseMapping:0x007D - }, - { code:0x007E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x007E - ,simpleLowerCaseMapping:0x007E - ,simpleTitleCaseMapping:0x007E - }, - { code:0x007F - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x007F - ,simpleLowerCaseMapping:0x007F - ,simpleTitleCaseMapping:0x007F - }, - { code:0x0080 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0080 - ,simpleLowerCaseMapping:0x0080 - ,simpleTitleCaseMapping:0x0080 - }, - { code:0x0081 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0081 - ,simpleLowerCaseMapping:0x0081 - ,simpleTitleCaseMapping:0x0081 - }, - { code:0x0082 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0082 - ,simpleLowerCaseMapping:0x0082 - ,simpleTitleCaseMapping:0x0082 - }, - { code:0x0083 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0083 - ,simpleLowerCaseMapping:0x0083 - ,simpleTitleCaseMapping:0x0083 - }, - { code:0x0084 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0084 - ,simpleLowerCaseMapping:0x0084 - ,simpleTitleCaseMapping:0x0084 - }, - { code:0x0085 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0085 - ,simpleLowerCaseMapping:0x0085 - ,simpleTitleCaseMapping:0x0085 - }, - { code:0x0086 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0086 - ,simpleLowerCaseMapping:0x0086 - ,simpleTitleCaseMapping:0x0086 - }, - { code:0x0087 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0087 - ,simpleLowerCaseMapping:0x0087 - ,simpleTitleCaseMapping:0x0087 - }, - { code:0x0088 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0088 - ,simpleLowerCaseMapping:0x0088 - ,simpleTitleCaseMapping:0x0088 - }, - { code:0x0089 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0089 - ,simpleLowerCaseMapping:0x0089 - ,simpleTitleCaseMapping:0x0089 - }, - { code:0x008A - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008A - ,simpleLowerCaseMapping:0x008A - ,simpleTitleCaseMapping:0x008A - }, - { code:0x008B - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008B - ,simpleLowerCaseMapping:0x008B - ,simpleTitleCaseMapping:0x008B - }, - { code:0x008C - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008C - ,simpleLowerCaseMapping:0x008C - ,simpleTitleCaseMapping:0x008C - }, - { code:0x008D - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008D - ,simpleLowerCaseMapping:0x008D - ,simpleTitleCaseMapping:0x008D - }, - { code:0x008E - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008E - ,simpleLowerCaseMapping:0x008E - ,simpleTitleCaseMapping:0x008E - }, - { code:0x008F - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x008F - ,simpleLowerCaseMapping:0x008F - ,simpleTitleCaseMapping:0x008F - }, - { code:0x0090 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0090 - ,simpleLowerCaseMapping:0x0090 - ,simpleTitleCaseMapping:0x0090 - }, - { code:0x0091 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0091 - ,simpleLowerCaseMapping:0x0091 - ,simpleTitleCaseMapping:0x0091 - }, - { code:0x0092 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0092 - ,simpleLowerCaseMapping:0x0092 - ,simpleTitleCaseMapping:0x0092 - }, - { code:0x0093 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0093 - ,simpleLowerCaseMapping:0x0093 - ,simpleTitleCaseMapping:0x0093 - }, - { code:0x0094 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0094 - ,simpleLowerCaseMapping:0x0094 - ,simpleTitleCaseMapping:0x0094 - }, - { code:0x0095 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0095 - ,simpleLowerCaseMapping:0x0095 - ,simpleTitleCaseMapping:0x0095 - }, - { code:0x0096 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0096 - ,simpleLowerCaseMapping:0x0096 - ,simpleTitleCaseMapping:0x0096 - }, - { code:0x0097 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0097 - ,simpleLowerCaseMapping:0x0097 - ,simpleTitleCaseMapping:0x0097 - }, - { code:0x0098 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0098 - ,simpleLowerCaseMapping:0x0098 - ,simpleTitleCaseMapping:0x0098 - }, - { code:0x0099 - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x0099 - ,simpleLowerCaseMapping:0x0099 - ,simpleTitleCaseMapping:0x0099 - }, - { code:0x009A - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009A - ,simpleLowerCaseMapping:0x009A - ,simpleTitleCaseMapping:0x009A - }, - { code:0x009B - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009B - ,simpleLowerCaseMapping:0x009B - ,simpleTitleCaseMapping:0x009B - }, - { code:0x009C - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009C - ,simpleLowerCaseMapping:0x009C - ,simpleTitleCaseMapping:0x009C - }, - { code:0x009D - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009D - ,simpleLowerCaseMapping:0x009D - ,simpleTitleCaseMapping:0x009D - }, - { code:0x009E - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009E - ,simpleLowerCaseMapping:0x009E - ,simpleTitleCaseMapping:0x009E - }, - { code:0x009F - ,generalCategory:UnicodeData.GeneralCategory.Cc - ,simpleUpperCaseMapping:0x009F - ,simpleLowerCaseMapping:0x009F - ,simpleTitleCaseMapping:0x009F - }, - { code:0x00A0 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x00A0 - ,simpleLowerCaseMapping:0x00A0 - ,simpleTitleCaseMapping:0x00A0 - }, - { code:0x00A1 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x00A1 - ,simpleLowerCaseMapping:0x00A1 - ,simpleTitleCaseMapping:0x00A1 - }, - { code:0x00A2 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x00A2 - ,simpleLowerCaseMapping:0x00A2 - ,simpleTitleCaseMapping:0x00A2 - }, - { code:0x00A3 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x00A3 - ,simpleLowerCaseMapping:0x00A3 - ,simpleTitleCaseMapping:0x00A3 - }, - { code:0x00A4 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x00A4 - ,simpleLowerCaseMapping:0x00A4 - ,simpleTitleCaseMapping:0x00A4 - }, - { code:0x00A5 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x00A5 - ,simpleLowerCaseMapping:0x00A5 - ,simpleTitleCaseMapping:0x00A5 - }, - { code:0x00A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00A6 - ,simpleLowerCaseMapping:0x00A6 - ,simpleTitleCaseMapping:0x00A6 - }, - { code:0x00A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00A7 - ,simpleLowerCaseMapping:0x00A7 - ,simpleTitleCaseMapping:0x00A7 - }, - { code:0x00A8 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x00A8 - ,simpleLowerCaseMapping:0x00A8 - ,simpleTitleCaseMapping:0x00A8 - }, - { code:0x00A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00A9 - ,simpleLowerCaseMapping:0x00A9 - ,simpleTitleCaseMapping:0x00A9 - }, - { code:0x00AA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00AA - ,simpleLowerCaseMapping:0x00AA - ,simpleTitleCaseMapping:0x00AA - }, - { code:0x00AB - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x00AB - ,simpleLowerCaseMapping:0x00AB - ,simpleTitleCaseMapping:0x00AB - }, - { code:0x00AC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x00AC - ,simpleLowerCaseMapping:0x00AC - ,simpleTitleCaseMapping:0x00AC - }, - { code:0x00AD - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x00AD - ,simpleLowerCaseMapping:0x00AD - ,simpleTitleCaseMapping:0x00AD - }, - { code:0x00AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00AE - ,simpleLowerCaseMapping:0x00AE - ,simpleTitleCaseMapping:0x00AE - }, - { code:0x00AF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x00AF - ,simpleLowerCaseMapping:0x00AF - ,simpleTitleCaseMapping:0x00AF - }, - { code:0x00B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00B0 - ,simpleLowerCaseMapping:0x00B0 - ,simpleTitleCaseMapping:0x00B0 - }, - { code:0x00B1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x00B1 - ,simpleLowerCaseMapping:0x00B1 - ,simpleTitleCaseMapping:0x00B1 - }, - { code:0x00B2 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00B2 - ,simpleLowerCaseMapping:0x00B2 - ,simpleTitleCaseMapping:0x00B2 - }, - { code:0x00B3 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00B3 - ,simpleLowerCaseMapping:0x00B3 - ,simpleTitleCaseMapping:0x00B3 - }, - { code:0x00B4 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x00B4 - ,simpleLowerCaseMapping:0x00B4 - ,simpleTitleCaseMapping:0x00B4 - }, - { code:0x00B5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039C - ,simpleLowerCaseMapping:0x00B5 - ,simpleTitleCaseMapping:0x039C - }, - { code:0x00B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x00B6 - ,simpleLowerCaseMapping:0x00B6 - ,simpleTitleCaseMapping:0x00B6 - }, - { code:0x00B7 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x00B7 - ,simpleLowerCaseMapping:0x00B7 - ,simpleTitleCaseMapping:0x00B7 - }, - { code:0x00B8 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x00B8 - ,simpleLowerCaseMapping:0x00B8 - ,simpleTitleCaseMapping:0x00B8 - }, - { code:0x00B9 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00B9 - ,simpleLowerCaseMapping:0x00B9 - ,simpleTitleCaseMapping:0x00B9 - }, - { code:0x00BA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00BA - ,simpleLowerCaseMapping:0x00BA - ,simpleTitleCaseMapping:0x00BA - }, - { code:0x00BB - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x00BB - ,simpleLowerCaseMapping:0x00BB - ,simpleTitleCaseMapping:0x00BB - }, - { code:0x00BC - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00BC - ,simpleLowerCaseMapping:0x00BC - ,simpleTitleCaseMapping:0x00BC - }, - { code:0x00BD - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00BD - ,simpleLowerCaseMapping:0x00BD - ,simpleTitleCaseMapping:0x00BD - }, - { code:0x00BE - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x00BE - ,simpleLowerCaseMapping:0x00BE - ,simpleTitleCaseMapping:0x00BE - }, - { code:0x00BF - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x00BF - ,simpleLowerCaseMapping:0x00BF - ,simpleTitleCaseMapping:0x00BF - }, - { code:0x00C0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C0 - ,simpleLowerCaseMapping:0x00E0 - ,simpleTitleCaseMapping:0x00C0 - }, - { code:0x00C1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C1 - ,simpleLowerCaseMapping:0x00E1 - ,simpleTitleCaseMapping:0x00C1 - }, - { code:0x00C2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C2 - ,simpleLowerCaseMapping:0x00E2 - ,simpleTitleCaseMapping:0x00C2 - }, - { code:0x00C3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C3 - ,simpleLowerCaseMapping:0x00E3 - ,simpleTitleCaseMapping:0x00C3 - }, - { code:0x00C4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C4 - ,simpleLowerCaseMapping:0x00E4 - ,simpleTitleCaseMapping:0x00C4 - }, - { code:0x00C5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C5 - ,simpleLowerCaseMapping:0x00E5 - ,simpleTitleCaseMapping:0x00C5 - }, - { code:0x00C6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C6 - ,simpleLowerCaseMapping:0x00E6 - ,simpleTitleCaseMapping:0x00C6 - }, - { code:0x00C7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C7 - ,simpleLowerCaseMapping:0x00E7 - ,simpleTitleCaseMapping:0x00C7 - }, - { code:0x00C8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C8 - ,simpleLowerCaseMapping:0x00E8 - ,simpleTitleCaseMapping:0x00C8 - }, - { code:0x00C9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00C9 - ,simpleLowerCaseMapping:0x00E9 - ,simpleTitleCaseMapping:0x00C9 - }, - { code:0x00CA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CA - ,simpleLowerCaseMapping:0x00EA - ,simpleTitleCaseMapping:0x00CA - }, - { code:0x00CB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CB - ,simpleLowerCaseMapping:0x00EB - ,simpleTitleCaseMapping:0x00CB - }, - { code:0x00CC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CC - ,simpleLowerCaseMapping:0x00EC - ,simpleTitleCaseMapping:0x00CC - }, - { code:0x00CD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CD - ,simpleLowerCaseMapping:0x00ED - ,simpleTitleCaseMapping:0x00CD - }, - { code:0x00CE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CE - ,simpleLowerCaseMapping:0x00EE - ,simpleTitleCaseMapping:0x00CE - }, - { code:0x00CF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00CF - ,simpleLowerCaseMapping:0x00EF - ,simpleTitleCaseMapping:0x00CF - }, - { code:0x00D0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D0 - ,simpleLowerCaseMapping:0x00F0 - ,simpleTitleCaseMapping:0x00D0 - }, - { code:0x00D1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D1 - ,simpleLowerCaseMapping:0x00F1 - ,simpleTitleCaseMapping:0x00D1 - }, - { code:0x00D2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D2 - ,simpleLowerCaseMapping:0x00F2 - ,simpleTitleCaseMapping:0x00D2 - }, - { code:0x00D3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D3 - ,simpleLowerCaseMapping:0x00F3 - ,simpleTitleCaseMapping:0x00D3 - }, - { code:0x00D4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D4 - ,simpleLowerCaseMapping:0x00F4 - ,simpleTitleCaseMapping:0x00D4 - }, - { code:0x00D5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D5 - ,simpleLowerCaseMapping:0x00F5 - ,simpleTitleCaseMapping:0x00D5 - }, - { code:0x00D6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D6 - ,simpleLowerCaseMapping:0x00F6 - ,simpleTitleCaseMapping:0x00D6 - }, - { code:0x00D7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x00D7 - ,simpleLowerCaseMapping:0x00D7 - ,simpleTitleCaseMapping:0x00D7 - }, - { code:0x00D8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D8 - ,simpleLowerCaseMapping:0x00F8 - ,simpleTitleCaseMapping:0x00D8 - }, - { code:0x00D9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00D9 - ,simpleLowerCaseMapping:0x00F9 - ,simpleTitleCaseMapping:0x00D9 - }, - { code:0x00DA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00DA - ,simpleLowerCaseMapping:0x00FA - ,simpleTitleCaseMapping:0x00DA - }, - { code:0x00DB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00DB - ,simpleLowerCaseMapping:0x00FB - ,simpleTitleCaseMapping:0x00DB - }, - { code:0x00DC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00DC - ,simpleLowerCaseMapping:0x00FC - ,simpleTitleCaseMapping:0x00DC - }, - { code:0x00DD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00DD - ,simpleLowerCaseMapping:0x00FD - ,simpleTitleCaseMapping:0x00DD - }, - { code:0x00DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x00DE - ,simpleLowerCaseMapping:0x00FE - ,simpleTitleCaseMapping:0x00DE - }, - { code:0x00DF - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x00DF - ,simpleLowerCaseMapping:0x00DF - ,simpleTitleCaseMapping:0x00DF - }, - { code:0x00E0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C0 - ,simpleLowerCaseMapping:0x00E0 - ,simpleTitleCaseMapping:0x00C0 - }, - { code:0x00E1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C1 - ,simpleLowerCaseMapping:0x00E1 - ,simpleTitleCaseMapping:0x00C1 - }, - { code:0x00E2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C2 - ,simpleLowerCaseMapping:0x00E2 - ,simpleTitleCaseMapping:0x00C2 - }, - { code:0x00E3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C3 - ,simpleLowerCaseMapping:0x00E3 - ,simpleTitleCaseMapping:0x00C3 - }, - { code:0x00E4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C4 - ,simpleLowerCaseMapping:0x00E4 - ,simpleTitleCaseMapping:0x00C4 - }, - { code:0x00E5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C5 - ,simpleLowerCaseMapping:0x00E5 - ,simpleTitleCaseMapping:0x00C5 - }, - { code:0x00E6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C6 - ,simpleLowerCaseMapping:0x00E6 - ,simpleTitleCaseMapping:0x00C6 - }, - { code:0x00E7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C7 - ,simpleLowerCaseMapping:0x00E7 - ,simpleTitleCaseMapping:0x00C7 - }, - { code:0x00E8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C8 - ,simpleLowerCaseMapping:0x00E8 - ,simpleTitleCaseMapping:0x00C8 - }, - { code:0x00E9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00C9 - ,simpleLowerCaseMapping:0x00E9 - ,simpleTitleCaseMapping:0x00C9 - }, - { code:0x00EA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CA - ,simpleLowerCaseMapping:0x00EA - ,simpleTitleCaseMapping:0x00CA - }, - { code:0x00EB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CB - ,simpleLowerCaseMapping:0x00EB - ,simpleTitleCaseMapping:0x00CB - }, - { code:0x00EC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CC - ,simpleLowerCaseMapping:0x00EC - ,simpleTitleCaseMapping:0x00CC - }, - { code:0x00ED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CD - ,simpleLowerCaseMapping:0x00ED - ,simpleTitleCaseMapping:0x00CD - }, - { code:0x00EE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CE - ,simpleLowerCaseMapping:0x00EE - ,simpleTitleCaseMapping:0x00CE - }, - { code:0x00EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00CF - ,simpleLowerCaseMapping:0x00EF - ,simpleTitleCaseMapping:0x00CF - }, - { code:0x00F0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D0 - ,simpleLowerCaseMapping:0x00F0 - ,simpleTitleCaseMapping:0x00D0 - }, - { code:0x00F1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D1 - ,simpleLowerCaseMapping:0x00F1 - ,simpleTitleCaseMapping:0x00D1 - }, - { code:0x00F2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D2 - ,simpleLowerCaseMapping:0x00F2 - ,simpleTitleCaseMapping:0x00D2 - }, - { code:0x00F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D3 - ,simpleLowerCaseMapping:0x00F3 - ,simpleTitleCaseMapping:0x00D3 - }, - { code:0x00F4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D4 - ,simpleLowerCaseMapping:0x00F4 - ,simpleTitleCaseMapping:0x00D4 - }, - { code:0x00F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D5 - ,simpleLowerCaseMapping:0x00F5 - ,simpleTitleCaseMapping:0x00D5 - }, - { code:0x00F6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D6 - ,simpleLowerCaseMapping:0x00F6 - ,simpleTitleCaseMapping:0x00D6 - }, - { code:0x00F7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x00F7 - ,simpleLowerCaseMapping:0x00F7 - ,simpleTitleCaseMapping:0x00F7 - }, - { code:0x00F8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D8 - ,simpleLowerCaseMapping:0x00F8 - ,simpleTitleCaseMapping:0x00D8 - }, - { code:0x00F9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00D9 - ,simpleLowerCaseMapping:0x00F9 - ,simpleTitleCaseMapping:0x00D9 - }, - { code:0x00FA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00DA - ,simpleLowerCaseMapping:0x00FA - ,simpleTitleCaseMapping:0x00DA - }, - { code:0x00FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00DB - ,simpleLowerCaseMapping:0x00FB - ,simpleTitleCaseMapping:0x00DB - }, - { code:0x00FC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00DC - ,simpleLowerCaseMapping:0x00FC - ,simpleTitleCaseMapping:0x00DC - }, - { code:0x00FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00DD - ,simpleLowerCaseMapping:0x00FD - ,simpleTitleCaseMapping:0x00DD - }, - { code:0x00FE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x00DE - ,simpleLowerCaseMapping:0x00FE - ,simpleTitleCaseMapping:0x00DE - }, - { code:0x00FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0178 - ,simpleLowerCaseMapping:0x00FF - ,simpleTitleCaseMapping:0x0178 - }, - { code:0x0100 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0100 - ,simpleLowerCaseMapping:0x0101 - ,simpleTitleCaseMapping:0x0100 - }, - { code:0x0101 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0100 - ,simpleLowerCaseMapping:0x0101 - ,simpleTitleCaseMapping:0x0100 - }, - { code:0x0102 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0102 - ,simpleLowerCaseMapping:0x0103 - ,simpleTitleCaseMapping:0x0102 - }, - { code:0x0103 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0102 - ,simpleLowerCaseMapping:0x0103 - ,simpleTitleCaseMapping:0x0102 - }, - { code:0x0104 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0104 - ,simpleLowerCaseMapping:0x0105 - ,simpleTitleCaseMapping:0x0104 - }, - { code:0x0105 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0104 - ,simpleLowerCaseMapping:0x0105 - ,simpleTitleCaseMapping:0x0104 - }, - { code:0x0106 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0106 - ,simpleLowerCaseMapping:0x0107 - ,simpleTitleCaseMapping:0x0106 - }, - { code:0x0107 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0106 - ,simpleLowerCaseMapping:0x0107 - ,simpleTitleCaseMapping:0x0106 - }, - { code:0x0108 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0108 - ,simpleLowerCaseMapping:0x0109 - ,simpleTitleCaseMapping:0x0108 - }, - { code:0x0109 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0108 - ,simpleLowerCaseMapping:0x0109 - ,simpleTitleCaseMapping:0x0108 - }, - { code:0x010A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x010A - ,simpleLowerCaseMapping:0x010B - ,simpleTitleCaseMapping:0x010A - }, - { code:0x010B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x010A - ,simpleLowerCaseMapping:0x010B - ,simpleTitleCaseMapping:0x010A - }, - { code:0x010C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x010C - ,simpleLowerCaseMapping:0x010D - ,simpleTitleCaseMapping:0x010C - }, - { code:0x010D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x010C - ,simpleLowerCaseMapping:0x010D - ,simpleTitleCaseMapping:0x010C - }, - { code:0x010E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x010E - ,simpleLowerCaseMapping:0x010F - ,simpleTitleCaseMapping:0x010E - }, - { code:0x010F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x010E - ,simpleLowerCaseMapping:0x010F - ,simpleTitleCaseMapping:0x010E - }, - { code:0x0110 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0110 - ,simpleLowerCaseMapping:0x0111 - ,simpleTitleCaseMapping:0x0110 - }, - { code:0x0111 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0110 - ,simpleLowerCaseMapping:0x0111 - ,simpleTitleCaseMapping:0x0110 - }, - { code:0x0112 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0112 - ,simpleLowerCaseMapping:0x0113 - ,simpleTitleCaseMapping:0x0112 - }, - { code:0x0113 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0112 - ,simpleLowerCaseMapping:0x0113 - ,simpleTitleCaseMapping:0x0112 - }, - { code:0x0114 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0114 - ,simpleLowerCaseMapping:0x0115 - ,simpleTitleCaseMapping:0x0114 - }, - { code:0x0115 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0114 - ,simpleLowerCaseMapping:0x0115 - ,simpleTitleCaseMapping:0x0114 - }, - { code:0x0116 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0116 - ,simpleLowerCaseMapping:0x0117 - ,simpleTitleCaseMapping:0x0116 - }, - { code:0x0117 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0116 - ,simpleLowerCaseMapping:0x0117 - ,simpleTitleCaseMapping:0x0116 - }, - { code:0x0118 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0118 - ,simpleLowerCaseMapping:0x0119 - ,simpleTitleCaseMapping:0x0118 - }, - { code:0x0119 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0118 - ,simpleLowerCaseMapping:0x0119 - ,simpleTitleCaseMapping:0x0118 - }, - { code:0x011A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x011A - ,simpleLowerCaseMapping:0x011B - ,simpleTitleCaseMapping:0x011A - }, - { code:0x011B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x011A - ,simpleLowerCaseMapping:0x011B - ,simpleTitleCaseMapping:0x011A - }, - { code:0x011C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x011C - ,simpleLowerCaseMapping:0x011D - ,simpleTitleCaseMapping:0x011C - }, - { code:0x011D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x011C - ,simpleLowerCaseMapping:0x011D - ,simpleTitleCaseMapping:0x011C - }, - { code:0x011E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x011E - ,simpleLowerCaseMapping:0x011F - ,simpleTitleCaseMapping:0x011E - }, - { code:0x011F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x011E - ,simpleLowerCaseMapping:0x011F - ,simpleTitleCaseMapping:0x011E - }, - { code:0x0120 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0120 - ,simpleLowerCaseMapping:0x0121 - ,simpleTitleCaseMapping:0x0120 - }, - { code:0x0121 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0120 - ,simpleLowerCaseMapping:0x0121 - ,simpleTitleCaseMapping:0x0120 - }, - { code:0x0122 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0122 - ,simpleLowerCaseMapping:0x0123 - ,simpleTitleCaseMapping:0x0122 - }, - { code:0x0123 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0122 - ,simpleLowerCaseMapping:0x0123 - ,simpleTitleCaseMapping:0x0122 - }, - { code:0x0124 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0124 - ,simpleLowerCaseMapping:0x0125 - ,simpleTitleCaseMapping:0x0124 - }, - { code:0x0125 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0124 - ,simpleLowerCaseMapping:0x0125 - ,simpleTitleCaseMapping:0x0124 - }, - { code:0x0126 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0126 - ,simpleLowerCaseMapping:0x0127 - ,simpleTitleCaseMapping:0x0126 - }, - { code:0x0127 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0126 - ,simpleLowerCaseMapping:0x0127 - ,simpleTitleCaseMapping:0x0126 - }, - { code:0x0128 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0128 - ,simpleLowerCaseMapping:0x0129 - ,simpleTitleCaseMapping:0x0128 - }, - { code:0x0129 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0128 - ,simpleLowerCaseMapping:0x0129 - ,simpleTitleCaseMapping:0x0128 - }, - { code:0x012A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x012A - ,simpleLowerCaseMapping:0x012B - ,simpleTitleCaseMapping:0x012A - }, - { code:0x012B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x012A - ,simpleLowerCaseMapping:0x012B - ,simpleTitleCaseMapping:0x012A - }, - { code:0x012C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x012C - ,simpleLowerCaseMapping:0x012D - ,simpleTitleCaseMapping:0x012C - }, - { code:0x012D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x012C - ,simpleLowerCaseMapping:0x012D - ,simpleTitleCaseMapping:0x012C - }, - { code:0x012E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x012E - ,simpleLowerCaseMapping:0x012F - ,simpleTitleCaseMapping:0x012E - }, - { code:0x012F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x012E - ,simpleLowerCaseMapping:0x012F - ,simpleTitleCaseMapping:0x012E - }, - { code:0x0130 - ,generalCategory:UnicodeData.GeneralCategory.Lu | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x0130 - ,simpleLowerCaseMapping:0x0069 - ,simpleTitleCaseMapping:0x0130 - }, - { code:0x0131 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0049 - ,simpleLowerCaseMapping:0x0131 - ,simpleTitleCaseMapping:0x0049 - }, - { code:0x0132 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0132 - ,simpleLowerCaseMapping:0x0133 - ,simpleTitleCaseMapping:0x0132 - }, - { code:0x0133 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0132 - ,simpleLowerCaseMapping:0x0133 - ,simpleTitleCaseMapping:0x0132 - }, - { code:0x0134 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0134 - ,simpleLowerCaseMapping:0x0135 - ,simpleTitleCaseMapping:0x0134 - }, - { code:0x0135 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0134 - ,simpleLowerCaseMapping:0x0135 - ,simpleTitleCaseMapping:0x0134 - }, - { code:0x0136 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0136 - ,simpleLowerCaseMapping:0x0137 - ,simpleTitleCaseMapping:0x0136 - }, - { code:0x0137 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0136 - ,simpleLowerCaseMapping:0x0137 - ,simpleTitleCaseMapping:0x0136 - }, - { code:0x0138 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0138 - ,simpleLowerCaseMapping:0x0138 - ,simpleTitleCaseMapping:0x0138 - }, - { code:0x0139 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0139 - ,simpleLowerCaseMapping:0x013A - ,simpleTitleCaseMapping:0x0139 - }, - { code:0x013A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0139 - ,simpleLowerCaseMapping:0x013A - ,simpleTitleCaseMapping:0x0139 - }, - { code:0x013B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x013B - ,simpleLowerCaseMapping:0x013C - ,simpleTitleCaseMapping:0x013B - }, - { code:0x013C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x013B - ,simpleLowerCaseMapping:0x013C - ,simpleTitleCaseMapping:0x013B - }, - { code:0x013D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x013D - ,simpleLowerCaseMapping:0x013E - ,simpleTitleCaseMapping:0x013D - }, - { code:0x013E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x013D - ,simpleLowerCaseMapping:0x013E - ,simpleTitleCaseMapping:0x013D - }, - { code:0x013F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x013F - ,simpleLowerCaseMapping:0x0140 - ,simpleTitleCaseMapping:0x013F - }, - { code:0x0140 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x013F - ,simpleLowerCaseMapping:0x0140 - ,simpleTitleCaseMapping:0x013F - }, - { code:0x0141 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0141 - ,simpleLowerCaseMapping:0x0142 - ,simpleTitleCaseMapping:0x0141 - }, - { code:0x0142 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0141 - ,simpleLowerCaseMapping:0x0142 - ,simpleTitleCaseMapping:0x0141 - }, - { code:0x0143 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0143 - ,simpleLowerCaseMapping:0x0144 - ,simpleTitleCaseMapping:0x0143 - }, - { code:0x0144 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0143 - ,simpleLowerCaseMapping:0x0144 - ,simpleTitleCaseMapping:0x0143 - }, - { code:0x0145 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0145 - ,simpleLowerCaseMapping:0x0146 - ,simpleTitleCaseMapping:0x0145 - }, - { code:0x0146 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0145 - ,simpleLowerCaseMapping:0x0146 - ,simpleTitleCaseMapping:0x0145 - }, - { code:0x0147 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0147 - ,simpleLowerCaseMapping:0x0148 - ,simpleTitleCaseMapping:0x0147 - }, - { code:0x0148 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0147 - ,simpleLowerCaseMapping:0x0148 - ,simpleTitleCaseMapping:0x0147 - }, - { code:0x0149 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x0149 - ,simpleLowerCaseMapping:0x0149 - ,simpleTitleCaseMapping:0x0149 - }, - { code:0x014A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x014A - ,simpleLowerCaseMapping:0x014B - ,simpleTitleCaseMapping:0x014A - }, - { code:0x014B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x014A - ,simpleLowerCaseMapping:0x014B - ,simpleTitleCaseMapping:0x014A - }, - { code:0x014C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x014C - ,simpleLowerCaseMapping:0x014D - ,simpleTitleCaseMapping:0x014C - }, - { code:0x014D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x014C - ,simpleLowerCaseMapping:0x014D - ,simpleTitleCaseMapping:0x014C - }, - { code:0x014E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x014E - ,simpleLowerCaseMapping:0x014F - ,simpleTitleCaseMapping:0x014E - }, - { code:0x014F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x014E - ,simpleLowerCaseMapping:0x014F - ,simpleTitleCaseMapping:0x014E - }, - { code:0x0150 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0150 - ,simpleLowerCaseMapping:0x0151 - ,simpleTitleCaseMapping:0x0150 - }, - { code:0x0151 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0150 - ,simpleLowerCaseMapping:0x0151 - ,simpleTitleCaseMapping:0x0150 - }, - { code:0x0152 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0152 - ,simpleLowerCaseMapping:0x0153 - ,simpleTitleCaseMapping:0x0152 - }, - { code:0x0153 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0152 - ,simpleLowerCaseMapping:0x0153 - ,simpleTitleCaseMapping:0x0152 - }, - { code:0x0154 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0154 - ,simpleLowerCaseMapping:0x0155 - ,simpleTitleCaseMapping:0x0154 - }, - { code:0x0155 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0154 - ,simpleLowerCaseMapping:0x0155 - ,simpleTitleCaseMapping:0x0154 - }, - { code:0x0156 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0156 - ,simpleLowerCaseMapping:0x0157 - ,simpleTitleCaseMapping:0x0156 - }, - { code:0x0157 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0156 - ,simpleLowerCaseMapping:0x0157 - ,simpleTitleCaseMapping:0x0156 - }, - { code:0x0158 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0158 - ,simpleLowerCaseMapping:0x0159 - ,simpleTitleCaseMapping:0x0158 - }, - { code:0x0159 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0158 - ,simpleLowerCaseMapping:0x0159 - ,simpleTitleCaseMapping:0x0158 - }, - { code:0x015A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x015A - ,simpleLowerCaseMapping:0x015B - ,simpleTitleCaseMapping:0x015A - }, - { code:0x015B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x015A - ,simpleLowerCaseMapping:0x015B - ,simpleTitleCaseMapping:0x015A - }, - { code:0x015C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x015C - ,simpleLowerCaseMapping:0x015D - ,simpleTitleCaseMapping:0x015C - }, - { code:0x015D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x015C - ,simpleLowerCaseMapping:0x015D - ,simpleTitleCaseMapping:0x015C - }, - { code:0x015E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x015E - ,simpleLowerCaseMapping:0x015F - ,simpleTitleCaseMapping:0x015E - }, - { code:0x015F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x015E - ,simpleLowerCaseMapping:0x015F - ,simpleTitleCaseMapping:0x015E - }, - { code:0x0160 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0160 - ,simpleLowerCaseMapping:0x0161 - ,simpleTitleCaseMapping:0x0160 - }, - { code:0x0161 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0160 - ,simpleLowerCaseMapping:0x0161 - ,simpleTitleCaseMapping:0x0160 - }, - { code:0x0162 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0162 - ,simpleLowerCaseMapping:0x0163 - ,simpleTitleCaseMapping:0x0162 - }, - { code:0x0163 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0162 - ,simpleLowerCaseMapping:0x0163 - ,simpleTitleCaseMapping:0x0162 - }, - { code:0x0164 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0164 - ,simpleLowerCaseMapping:0x0165 - ,simpleTitleCaseMapping:0x0164 - }, - { code:0x0165 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0164 - ,simpleLowerCaseMapping:0x0165 - ,simpleTitleCaseMapping:0x0164 - }, - { code:0x0166 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0166 - ,simpleLowerCaseMapping:0x0167 - ,simpleTitleCaseMapping:0x0166 - }, - { code:0x0167 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0166 - ,simpleLowerCaseMapping:0x0167 - ,simpleTitleCaseMapping:0x0166 - }, - { code:0x0168 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0168 - ,simpleLowerCaseMapping:0x0169 - ,simpleTitleCaseMapping:0x0168 - }, - { code:0x0169 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0168 - ,simpleLowerCaseMapping:0x0169 - ,simpleTitleCaseMapping:0x0168 - }, - { code:0x016A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x016A - ,simpleLowerCaseMapping:0x016B - ,simpleTitleCaseMapping:0x016A - }, - { code:0x016B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x016A - ,simpleLowerCaseMapping:0x016B - ,simpleTitleCaseMapping:0x016A - }, - { code:0x016C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x016C - ,simpleLowerCaseMapping:0x016D - ,simpleTitleCaseMapping:0x016C - }, - { code:0x016D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x016C - ,simpleLowerCaseMapping:0x016D - ,simpleTitleCaseMapping:0x016C - }, - { code:0x016E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x016E - ,simpleLowerCaseMapping:0x016F - ,simpleTitleCaseMapping:0x016E - }, - { code:0x016F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x016E - ,simpleLowerCaseMapping:0x016F - ,simpleTitleCaseMapping:0x016E - }, - { code:0x0170 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0170 - ,simpleLowerCaseMapping:0x0171 - ,simpleTitleCaseMapping:0x0170 - }, - { code:0x0171 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0170 - ,simpleLowerCaseMapping:0x0171 - ,simpleTitleCaseMapping:0x0170 - }, - { code:0x0172 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0172 - ,simpleLowerCaseMapping:0x0173 - ,simpleTitleCaseMapping:0x0172 - }, - { code:0x0173 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0172 - ,simpleLowerCaseMapping:0x0173 - ,simpleTitleCaseMapping:0x0172 - }, - { code:0x0174 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0174 - ,simpleLowerCaseMapping:0x0175 - ,simpleTitleCaseMapping:0x0174 - }, - { code:0x0175 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0174 - ,simpleLowerCaseMapping:0x0175 - ,simpleTitleCaseMapping:0x0174 - }, - { code:0x0176 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0176 - ,simpleLowerCaseMapping:0x0177 - ,simpleTitleCaseMapping:0x0176 - }, - { code:0x0177 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0176 - ,simpleLowerCaseMapping:0x0177 - ,simpleTitleCaseMapping:0x0176 - }, - { code:0x0178 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0178 - ,simpleLowerCaseMapping:0x00FF - ,simpleTitleCaseMapping:0x0178 - }, - { code:0x0179 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0179 - ,simpleLowerCaseMapping:0x017A - ,simpleTitleCaseMapping:0x0179 - }, - { code:0x017A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0179 - ,simpleLowerCaseMapping:0x017A - ,simpleTitleCaseMapping:0x0179 - }, - { code:0x017B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x017B - ,simpleLowerCaseMapping:0x017C - ,simpleTitleCaseMapping:0x017B - }, - { code:0x017C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x017B - ,simpleLowerCaseMapping:0x017C - ,simpleTitleCaseMapping:0x017B - }, - { code:0x017D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x017D - ,simpleLowerCaseMapping:0x017E - ,simpleTitleCaseMapping:0x017D - }, - { code:0x017E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x017D - ,simpleLowerCaseMapping:0x017E - ,simpleTitleCaseMapping:0x017D - }, - { code:0x017F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0053 - ,simpleLowerCaseMapping:0x017F - ,simpleTitleCaseMapping:0x0053 - }, - { code:0x0180 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0243 - ,simpleLowerCaseMapping:0x0180 - ,simpleTitleCaseMapping:0x0243 - }, - { code:0x0181 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0181 - ,simpleLowerCaseMapping:0x0253 - ,simpleTitleCaseMapping:0x0181 - }, - { code:0x0182 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0182 - ,simpleLowerCaseMapping:0x0183 - ,simpleTitleCaseMapping:0x0182 - }, - { code:0x0183 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0182 - ,simpleLowerCaseMapping:0x0183 - ,simpleTitleCaseMapping:0x0182 - }, - { code:0x0184 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0184 - ,simpleLowerCaseMapping:0x0185 - ,simpleTitleCaseMapping:0x0184 - }, - { code:0x0185 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0184 - ,simpleLowerCaseMapping:0x0185 - ,simpleTitleCaseMapping:0x0184 - }, - { code:0x0186 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0186 - ,simpleLowerCaseMapping:0x0254 - ,simpleTitleCaseMapping:0x0186 - }, - { code:0x0187 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0187 - ,simpleLowerCaseMapping:0x0188 - ,simpleTitleCaseMapping:0x0187 - }, - { code:0x0188 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0187 - ,simpleLowerCaseMapping:0x0188 - ,simpleTitleCaseMapping:0x0187 - }, - { code:0x0189 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0189 - ,simpleLowerCaseMapping:0x0256 - ,simpleTitleCaseMapping:0x0189 - }, - { code:0x018A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x018A - ,simpleLowerCaseMapping:0x0257 - ,simpleTitleCaseMapping:0x018A - }, - { code:0x018B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x018B - ,simpleLowerCaseMapping:0x018C - ,simpleTitleCaseMapping:0x018B - }, - { code:0x018C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x018B - ,simpleLowerCaseMapping:0x018C - ,simpleTitleCaseMapping:0x018B - }, - { code:0x018D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x018D - ,simpleLowerCaseMapping:0x018D - ,simpleTitleCaseMapping:0x018D - }, - { code:0x018E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x018E - ,simpleLowerCaseMapping:0x01DD - ,simpleTitleCaseMapping:0x018E - }, - { code:0x018F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x018F - ,simpleLowerCaseMapping:0x0259 - ,simpleTitleCaseMapping:0x018F - }, - { code:0x0190 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0190 - ,simpleLowerCaseMapping:0x025B - ,simpleTitleCaseMapping:0x0190 - }, - { code:0x0191 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0191 - ,simpleLowerCaseMapping:0x0192 - ,simpleTitleCaseMapping:0x0191 - }, - { code:0x0192 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0191 - ,simpleLowerCaseMapping:0x0192 - ,simpleTitleCaseMapping:0x0191 - }, - { code:0x0193 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0193 - ,simpleLowerCaseMapping:0x0260 - ,simpleTitleCaseMapping:0x0193 - }, - { code:0x0194 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0194 - ,simpleLowerCaseMapping:0x0263 - ,simpleTitleCaseMapping:0x0194 - }, - { code:0x0195 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01F6 - ,simpleLowerCaseMapping:0x0195 - ,simpleTitleCaseMapping:0x01F6 - }, - { code:0x0196 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0196 - ,simpleLowerCaseMapping:0x0269 - ,simpleTitleCaseMapping:0x0196 - }, - { code:0x0197 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0197 - ,simpleLowerCaseMapping:0x0268 - ,simpleTitleCaseMapping:0x0197 - }, - { code:0x0198 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0198 - ,simpleLowerCaseMapping:0x0199 - ,simpleTitleCaseMapping:0x0198 - }, - { code:0x0199 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0198 - ,simpleLowerCaseMapping:0x0199 - ,simpleTitleCaseMapping:0x0198 - }, - { code:0x019A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x023D - ,simpleLowerCaseMapping:0x019A - ,simpleTitleCaseMapping:0x023D - }, - { code:0x019B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x019B - ,simpleLowerCaseMapping:0x019B - ,simpleTitleCaseMapping:0x019B - }, - { code:0x019C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x019C - ,simpleLowerCaseMapping:0x026F - ,simpleTitleCaseMapping:0x019C - }, - { code:0x019D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x019D - ,simpleLowerCaseMapping:0x0272 - ,simpleTitleCaseMapping:0x019D - }, - { code:0x019E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0220 - ,simpleLowerCaseMapping:0x019E - ,simpleTitleCaseMapping:0x0220 - }, - { code:0x019F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x019F - ,simpleLowerCaseMapping:0x0275 - ,simpleTitleCaseMapping:0x019F - }, - { code:0x01A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A0 - ,simpleLowerCaseMapping:0x01A1 - ,simpleTitleCaseMapping:0x01A0 - }, - { code:0x01A1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A0 - ,simpleLowerCaseMapping:0x01A1 - ,simpleTitleCaseMapping:0x01A0 - }, - { code:0x01A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A2 - ,simpleLowerCaseMapping:0x01A3 - ,simpleTitleCaseMapping:0x01A2 - }, - { code:0x01A3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A2 - ,simpleLowerCaseMapping:0x01A3 - ,simpleTitleCaseMapping:0x01A2 - }, - { code:0x01A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A4 - ,simpleLowerCaseMapping:0x01A5 - ,simpleTitleCaseMapping:0x01A4 - }, - { code:0x01A5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A4 - ,simpleLowerCaseMapping:0x01A5 - ,simpleTitleCaseMapping:0x01A4 - }, - { code:0x01A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A6 - ,simpleLowerCaseMapping:0x0280 - ,simpleTitleCaseMapping:0x01A6 - }, - { code:0x01A7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A7 - ,simpleLowerCaseMapping:0x01A8 - ,simpleTitleCaseMapping:0x01A7 - }, - { code:0x01A8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A7 - ,simpleLowerCaseMapping:0x01A8 - ,simpleTitleCaseMapping:0x01A7 - }, - { code:0x01A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01A9 - ,simpleLowerCaseMapping:0x0283 - ,simpleTitleCaseMapping:0x01A9 - }, - { code:0x01AA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01AA - ,simpleLowerCaseMapping:0x01AA - ,simpleTitleCaseMapping:0x01AA - }, - { code:0x01AB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01AB - ,simpleLowerCaseMapping:0x01AB - ,simpleTitleCaseMapping:0x01AB - }, - { code:0x01AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01AC - ,simpleLowerCaseMapping:0x01AD - ,simpleTitleCaseMapping:0x01AC - }, - { code:0x01AD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01AC - ,simpleLowerCaseMapping:0x01AD - ,simpleTitleCaseMapping:0x01AC - }, - { code:0x01AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01AE - ,simpleLowerCaseMapping:0x0288 - ,simpleTitleCaseMapping:0x01AE - }, - { code:0x01AF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01AF - ,simpleLowerCaseMapping:0x01B0 - ,simpleTitleCaseMapping:0x01AF - }, - { code:0x01B0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01AF - ,simpleLowerCaseMapping:0x01B0 - ,simpleTitleCaseMapping:0x01AF - }, - { code:0x01B1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B1 - ,simpleLowerCaseMapping:0x028A - ,simpleTitleCaseMapping:0x01B1 - }, - { code:0x01B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B2 - ,simpleLowerCaseMapping:0x028B - ,simpleTitleCaseMapping:0x01B2 - }, - { code:0x01B3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B3 - ,simpleLowerCaseMapping:0x01B4 - ,simpleTitleCaseMapping:0x01B3 - }, - { code:0x01B4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B3 - ,simpleLowerCaseMapping:0x01B4 - ,simpleTitleCaseMapping:0x01B3 - }, - { code:0x01B5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B5 - ,simpleLowerCaseMapping:0x01B6 - ,simpleTitleCaseMapping:0x01B5 - }, - { code:0x01B6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B5 - ,simpleLowerCaseMapping:0x01B6 - ,simpleTitleCaseMapping:0x01B5 - }, - { code:0x01B7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B7 - ,simpleLowerCaseMapping:0x0292 - ,simpleTitleCaseMapping:0x01B7 - }, - { code:0x01B8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01B8 - ,simpleLowerCaseMapping:0x01B9 - ,simpleTitleCaseMapping:0x01B8 - }, - { code:0x01B9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B8 - ,simpleLowerCaseMapping:0x01B9 - ,simpleTitleCaseMapping:0x01B8 - }, - { code:0x01BA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01BA - ,simpleLowerCaseMapping:0x01BA - ,simpleTitleCaseMapping:0x01BA - }, - { code:0x01BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x01BB - ,simpleLowerCaseMapping:0x01BB - ,simpleTitleCaseMapping:0x01BB - }, - { code:0x01BC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01BC - ,simpleLowerCaseMapping:0x01BD - ,simpleTitleCaseMapping:0x01BC - }, - { code:0x01BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01BC - ,simpleLowerCaseMapping:0x01BD - ,simpleTitleCaseMapping:0x01BC - }, - { code:0x01BE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01BE - ,simpleLowerCaseMapping:0x01BE - ,simpleTitleCaseMapping:0x01BE - }, - { code:0x01BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01F7 - ,simpleLowerCaseMapping:0x01BF - ,simpleTitleCaseMapping:0x01F7 - }, - { code:0x01C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x01C0 - ,simpleLowerCaseMapping:0x01C0 - ,simpleTitleCaseMapping:0x01C0 - }, - { code:0x01C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x01C1 - ,simpleLowerCaseMapping:0x01C1 - ,simpleTitleCaseMapping:0x01C1 - }, - { code:0x01C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x01C2 - ,simpleLowerCaseMapping:0x01C2 - ,simpleTitleCaseMapping:0x01C2 - }, - { code:0x01C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x01C3 - ,simpleLowerCaseMapping:0x01C3 - ,simpleTitleCaseMapping:0x01C3 - }, - { code:0x01C4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01C4 - ,simpleLowerCaseMapping:0x01C6 - ,simpleTitleCaseMapping:0x01C5 - }, - { code:0x01C5 - ,generalCategory:UnicodeData.GeneralCategory.Lt - ,simpleUpperCaseMapping:0x01C4 - ,simpleLowerCaseMapping:0x01C6 - ,simpleTitleCaseMapping:0x01C5 - }, - { code:0x01C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01C4 - ,simpleLowerCaseMapping:0x01C6 - ,simpleTitleCaseMapping:0x01C5 - }, - { code:0x01C7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01C7 - ,simpleLowerCaseMapping:0x01C9 - ,simpleTitleCaseMapping:0x01C8 - }, - { code:0x01C8 - ,generalCategory:UnicodeData.GeneralCategory.Lt - ,simpleUpperCaseMapping:0x01C7 - ,simpleLowerCaseMapping:0x01C9 - ,simpleTitleCaseMapping:0x01C8 - }, - { code:0x01C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01C7 - ,simpleLowerCaseMapping:0x01C9 - ,simpleTitleCaseMapping:0x01C8 - }, - { code:0x01CA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01CA - ,simpleLowerCaseMapping:0x01CC - ,simpleTitleCaseMapping:0x01CB - }, - { code:0x01CB - ,generalCategory:UnicodeData.GeneralCategory.Lt - ,simpleUpperCaseMapping:0x01CA - ,simpleLowerCaseMapping:0x01CC - ,simpleTitleCaseMapping:0x01CB - }, - { code:0x01CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01CA - ,simpleLowerCaseMapping:0x01CC - ,simpleTitleCaseMapping:0x01CB - }, - { code:0x01CD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01CD - ,simpleLowerCaseMapping:0x01CE - ,simpleTitleCaseMapping:0x01CD - }, - { code:0x01CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01CD - ,simpleLowerCaseMapping:0x01CE - ,simpleTitleCaseMapping:0x01CD - }, - { code:0x01CF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01CF - ,simpleLowerCaseMapping:0x01D0 - ,simpleTitleCaseMapping:0x01CF - }, - { code:0x01D0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01CF - ,simpleLowerCaseMapping:0x01D0 - ,simpleTitleCaseMapping:0x01CF - }, - { code:0x01D1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01D1 - ,simpleLowerCaseMapping:0x01D2 - ,simpleTitleCaseMapping:0x01D1 - }, - { code:0x01D2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01D1 - ,simpleLowerCaseMapping:0x01D2 - ,simpleTitleCaseMapping:0x01D1 - }, - { code:0x01D3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01D3 - ,simpleLowerCaseMapping:0x01D4 - ,simpleTitleCaseMapping:0x01D3 - }, - { code:0x01D4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01D3 - ,simpleLowerCaseMapping:0x01D4 - ,simpleTitleCaseMapping:0x01D3 - }, - { code:0x01D5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01D5 - ,simpleLowerCaseMapping:0x01D6 - ,simpleTitleCaseMapping:0x01D5 - }, - { code:0x01D6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01D5 - ,simpleLowerCaseMapping:0x01D6 - ,simpleTitleCaseMapping:0x01D5 - }, - { code:0x01D7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01D7 - ,simpleLowerCaseMapping:0x01D8 - ,simpleTitleCaseMapping:0x01D7 - }, - { code:0x01D8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01D7 - ,simpleLowerCaseMapping:0x01D8 - ,simpleTitleCaseMapping:0x01D7 - }, - { code:0x01D9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01D9 - ,simpleLowerCaseMapping:0x01DA - ,simpleTitleCaseMapping:0x01D9 - }, - { code:0x01DA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01D9 - ,simpleLowerCaseMapping:0x01DA - ,simpleTitleCaseMapping:0x01D9 - }, - { code:0x01DB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01DB - ,simpleLowerCaseMapping:0x01DC - ,simpleTitleCaseMapping:0x01DB - }, - { code:0x01DC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01DB - ,simpleLowerCaseMapping:0x01DC - ,simpleTitleCaseMapping:0x01DB - }, - { code:0x01DD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x018E - ,simpleLowerCaseMapping:0x01DD - ,simpleTitleCaseMapping:0x018E - }, - { code:0x01DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01DE - ,simpleLowerCaseMapping:0x01DF - ,simpleTitleCaseMapping:0x01DE - }, - { code:0x01DF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01DE - ,simpleLowerCaseMapping:0x01DF - ,simpleTitleCaseMapping:0x01DE - }, - { code:0x01E0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01E0 - ,simpleLowerCaseMapping:0x01E1 - ,simpleTitleCaseMapping:0x01E0 - }, - { code:0x01E1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01E0 - ,simpleLowerCaseMapping:0x01E1 - ,simpleTitleCaseMapping:0x01E0 - }, - { code:0x01E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01E2 - ,simpleLowerCaseMapping:0x01E3 - ,simpleTitleCaseMapping:0x01E2 - }, - { code:0x01E3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01E2 - ,simpleLowerCaseMapping:0x01E3 - ,simpleTitleCaseMapping:0x01E2 - }, - { code:0x01E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01E4 - ,simpleLowerCaseMapping:0x01E5 - ,simpleTitleCaseMapping:0x01E4 - }, - { code:0x01E5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01E4 - ,simpleLowerCaseMapping:0x01E5 - ,simpleTitleCaseMapping:0x01E4 - }, - { code:0x01E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01E6 - ,simpleLowerCaseMapping:0x01E7 - ,simpleTitleCaseMapping:0x01E6 - }, - { code:0x01E7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01E6 - ,simpleLowerCaseMapping:0x01E7 - ,simpleTitleCaseMapping:0x01E6 - }, - { code:0x01E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01E8 - ,simpleLowerCaseMapping:0x01E9 - ,simpleTitleCaseMapping:0x01E8 - }, - { code:0x01E9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01E8 - ,simpleLowerCaseMapping:0x01E9 - ,simpleTitleCaseMapping:0x01E8 - }, - { code:0x01EA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01EA - ,simpleLowerCaseMapping:0x01EB - ,simpleTitleCaseMapping:0x01EA - }, - { code:0x01EB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01EA - ,simpleLowerCaseMapping:0x01EB - ,simpleTitleCaseMapping:0x01EA - }, - { code:0x01EC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01EC - ,simpleLowerCaseMapping:0x01ED - ,simpleTitleCaseMapping:0x01EC - }, - { code:0x01ED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01EC - ,simpleLowerCaseMapping:0x01ED - ,simpleTitleCaseMapping:0x01EC - }, - { code:0x01EE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01EE - ,simpleLowerCaseMapping:0x01EF - ,simpleTitleCaseMapping:0x01EE - }, - { code:0x01EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01EE - ,simpleLowerCaseMapping:0x01EF - ,simpleTitleCaseMapping:0x01EE - }, - { code:0x01F0 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x01F0 - ,simpleLowerCaseMapping:0x01F0 - ,simpleTitleCaseMapping:0x01F0 - }, - { code:0x01F1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01F1 - ,simpleLowerCaseMapping:0x01F3 - ,simpleTitleCaseMapping:0x01F2 - }, - { code:0x01F2 - ,generalCategory:UnicodeData.GeneralCategory.Lt - ,simpleUpperCaseMapping:0x01F1 - ,simpleLowerCaseMapping:0x01F3 - ,simpleTitleCaseMapping:0x01F2 - }, - { code:0x01F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01F1 - ,simpleLowerCaseMapping:0x01F3 - ,simpleTitleCaseMapping:0x01F2 - }, - { code:0x01F4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01F4 - ,simpleLowerCaseMapping:0x01F5 - ,simpleTitleCaseMapping:0x01F4 - }, - { code:0x01F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01F4 - ,simpleLowerCaseMapping:0x01F5 - ,simpleTitleCaseMapping:0x01F4 - }, - { code:0x01F6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01F6 - ,simpleLowerCaseMapping:0x0195 - ,simpleTitleCaseMapping:0x01F6 - }, - { code:0x01F7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01F7 - ,simpleLowerCaseMapping:0x01BF - ,simpleTitleCaseMapping:0x01F7 - }, - { code:0x01F8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01F8 - ,simpleLowerCaseMapping:0x01F9 - ,simpleTitleCaseMapping:0x01F8 - }, - { code:0x01F9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01F8 - ,simpleLowerCaseMapping:0x01F9 - ,simpleTitleCaseMapping:0x01F8 - }, - { code:0x01FA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01FA - ,simpleLowerCaseMapping:0x01FB - ,simpleTitleCaseMapping:0x01FA - }, - { code:0x01FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01FA - ,simpleLowerCaseMapping:0x01FB - ,simpleTitleCaseMapping:0x01FA - }, - { code:0x01FC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01FC - ,simpleLowerCaseMapping:0x01FD - ,simpleTitleCaseMapping:0x01FC - }, - { code:0x01FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01FC - ,simpleLowerCaseMapping:0x01FD - ,simpleTitleCaseMapping:0x01FC - }, - { code:0x01FE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x01FE - ,simpleLowerCaseMapping:0x01FF - ,simpleTitleCaseMapping:0x01FE - }, - { code:0x01FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01FE - ,simpleLowerCaseMapping:0x01FF - ,simpleTitleCaseMapping:0x01FE - }, - { code:0x0200 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0200 - ,simpleLowerCaseMapping:0x0201 - ,simpleTitleCaseMapping:0x0200 - }, - { code:0x0201 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0200 - ,simpleLowerCaseMapping:0x0201 - ,simpleTitleCaseMapping:0x0200 - }, - { code:0x0202 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0202 - ,simpleLowerCaseMapping:0x0203 - ,simpleTitleCaseMapping:0x0202 - }, - { code:0x0203 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0202 - ,simpleLowerCaseMapping:0x0203 - ,simpleTitleCaseMapping:0x0202 - }, - { code:0x0204 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0204 - ,simpleLowerCaseMapping:0x0205 - ,simpleTitleCaseMapping:0x0204 - }, - { code:0x0205 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0204 - ,simpleLowerCaseMapping:0x0205 - ,simpleTitleCaseMapping:0x0204 - }, - { code:0x0206 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0206 - ,simpleLowerCaseMapping:0x0207 - ,simpleTitleCaseMapping:0x0206 - }, - { code:0x0207 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0206 - ,simpleLowerCaseMapping:0x0207 - ,simpleTitleCaseMapping:0x0206 - }, - { code:0x0208 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0208 - ,simpleLowerCaseMapping:0x0209 - ,simpleTitleCaseMapping:0x0208 - }, - { code:0x0209 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0208 - ,simpleLowerCaseMapping:0x0209 - ,simpleTitleCaseMapping:0x0208 - }, - { code:0x020A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x020A - ,simpleLowerCaseMapping:0x020B - ,simpleTitleCaseMapping:0x020A - }, - { code:0x020B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x020A - ,simpleLowerCaseMapping:0x020B - ,simpleTitleCaseMapping:0x020A - }, - { code:0x020C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x020C - ,simpleLowerCaseMapping:0x020D - ,simpleTitleCaseMapping:0x020C - }, - { code:0x020D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x020C - ,simpleLowerCaseMapping:0x020D - ,simpleTitleCaseMapping:0x020C - }, - { code:0x020E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x020E - ,simpleLowerCaseMapping:0x020F - ,simpleTitleCaseMapping:0x020E - }, - { code:0x020F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x020E - ,simpleLowerCaseMapping:0x020F - ,simpleTitleCaseMapping:0x020E - }, - { code:0x0210 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0210 - ,simpleLowerCaseMapping:0x0211 - ,simpleTitleCaseMapping:0x0210 - }, - { code:0x0211 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0210 - ,simpleLowerCaseMapping:0x0211 - ,simpleTitleCaseMapping:0x0210 - }, - { code:0x0212 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0212 - ,simpleLowerCaseMapping:0x0213 - ,simpleTitleCaseMapping:0x0212 - }, - { code:0x0213 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0212 - ,simpleLowerCaseMapping:0x0213 - ,simpleTitleCaseMapping:0x0212 - }, - { code:0x0214 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0214 - ,simpleLowerCaseMapping:0x0215 - ,simpleTitleCaseMapping:0x0214 - }, - { code:0x0215 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0214 - ,simpleLowerCaseMapping:0x0215 - ,simpleTitleCaseMapping:0x0214 - }, - { code:0x0216 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0216 - ,simpleLowerCaseMapping:0x0217 - ,simpleTitleCaseMapping:0x0216 - }, - { code:0x0217 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0216 - ,simpleLowerCaseMapping:0x0217 - ,simpleTitleCaseMapping:0x0216 - }, - { code:0x0218 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0218 - ,simpleLowerCaseMapping:0x0219 - ,simpleTitleCaseMapping:0x0218 - }, - { code:0x0219 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0218 - ,simpleLowerCaseMapping:0x0219 - ,simpleTitleCaseMapping:0x0218 - }, - { code:0x021A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x021A - ,simpleLowerCaseMapping:0x021B - ,simpleTitleCaseMapping:0x021A - }, - { code:0x021B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x021A - ,simpleLowerCaseMapping:0x021B - ,simpleTitleCaseMapping:0x021A - }, - { code:0x021C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x021C - ,simpleLowerCaseMapping:0x021D - ,simpleTitleCaseMapping:0x021C - }, - { code:0x021D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x021C - ,simpleLowerCaseMapping:0x021D - ,simpleTitleCaseMapping:0x021C - }, - { code:0x021E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x021E - ,simpleLowerCaseMapping:0x021F - ,simpleTitleCaseMapping:0x021E - }, - { code:0x021F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x021E - ,simpleLowerCaseMapping:0x021F - ,simpleTitleCaseMapping:0x021E - }, - { code:0x0220 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0220 - ,simpleLowerCaseMapping:0x019E - ,simpleTitleCaseMapping:0x0220 - }, - { code:0x0221 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0221 - ,simpleLowerCaseMapping:0x0221 - ,simpleTitleCaseMapping:0x0221 - }, - { code:0x0222 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0222 - ,simpleLowerCaseMapping:0x0223 - ,simpleTitleCaseMapping:0x0222 - }, - { code:0x0223 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0222 - ,simpleLowerCaseMapping:0x0223 - ,simpleTitleCaseMapping:0x0222 - }, - { code:0x0224 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0224 - ,simpleLowerCaseMapping:0x0225 - ,simpleTitleCaseMapping:0x0224 - }, - { code:0x0225 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0224 - ,simpleLowerCaseMapping:0x0225 - ,simpleTitleCaseMapping:0x0224 - }, - { code:0x0226 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0226 - ,simpleLowerCaseMapping:0x0227 - ,simpleTitleCaseMapping:0x0226 - }, - { code:0x0227 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0226 - ,simpleLowerCaseMapping:0x0227 - ,simpleTitleCaseMapping:0x0226 - }, - { code:0x0228 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0228 - ,simpleLowerCaseMapping:0x0229 - ,simpleTitleCaseMapping:0x0228 - }, - { code:0x0229 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0228 - ,simpleLowerCaseMapping:0x0229 - ,simpleTitleCaseMapping:0x0228 - }, - { code:0x022A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x022A - ,simpleLowerCaseMapping:0x022B - ,simpleTitleCaseMapping:0x022A - }, - { code:0x022B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x022A - ,simpleLowerCaseMapping:0x022B - ,simpleTitleCaseMapping:0x022A - }, - { code:0x022C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x022C - ,simpleLowerCaseMapping:0x022D - ,simpleTitleCaseMapping:0x022C - }, - { code:0x022D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x022C - ,simpleLowerCaseMapping:0x022D - ,simpleTitleCaseMapping:0x022C - }, - { code:0x022E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x022E - ,simpleLowerCaseMapping:0x022F - ,simpleTitleCaseMapping:0x022E - }, - { code:0x022F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x022E - ,simpleLowerCaseMapping:0x022F - ,simpleTitleCaseMapping:0x022E - }, - { code:0x0230 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0230 - ,simpleLowerCaseMapping:0x0231 - ,simpleTitleCaseMapping:0x0230 - }, - { code:0x0231 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0230 - ,simpleLowerCaseMapping:0x0231 - ,simpleTitleCaseMapping:0x0230 - }, - { code:0x0232 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0232 - ,simpleLowerCaseMapping:0x0233 - ,simpleTitleCaseMapping:0x0232 - }, - { code:0x0233 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0232 - ,simpleLowerCaseMapping:0x0233 - ,simpleTitleCaseMapping:0x0232 - }, - { code:0x0234 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0234 - ,simpleLowerCaseMapping:0x0234 - ,simpleTitleCaseMapping:0x0234 - }, - { code:0x0235 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0235 - ,simpleLowerCaseMapping:0x0235 - ,simpleTitleCaseMapping:0x0235 - }, - { code:0x0236 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0236 - ,simpleLowerCaseMapping:0x0236 - ,simpleTitleCaseMapping:0x0236 - }, - { code:0x0237 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0237 - ,simpleLowerCaseMapping:0x0237 - ,simpleTitleCaseMapping:0x0237 - }, - { code:0x0238 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0238 - ,simpleLowerCaseMapping:0x0238 - ,simpleTitleCaseMapping:0x0238 - }, - { code:0x0239 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0239 - ,simpleLowerCaseMapping:0x0239 - ,simpleTitleCaseMapping:0x0239 - }, - { code:0x023A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x023A - ,simpleLowerCaseMapping:0x2C65 - ,simpleTitleCaseMapping:0x023A - }, - { code:0x023B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x023B - ,simpleLowerCaseMapping:0x023C - ,simpleTitleCaseMapping:0x023B - }, - { code:0x023C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x023B - ,simpleLowerCaseMapping:0x023C - ,simpleTitleCaseMapping:0x023B - }, - { code:0x023D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x023D - ,simpleLowerCaseMapping:0x019A - ,simpleTitleCaseMapping:0x023D - }, - { code:0x023E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x023E - ,simpleLowerCaseMapping:0x2C66 - ,simpleTitleCaseMapping:0x023E - }, - { code:0x023F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x023F - ,simpleLowerCaseMapping:0x023F - ,simpleTitleCaseMapping:0x023F - }, - { code:0x0240 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0240 - ,simpleLowerCaseMapping:0x0240 - ,simpleTitleCaseMapping:0x0240 - }, - { code:0x0241 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0241 - ,simpleLowerCaseMapping:0x0242 - ,simpleTitleCaseMapping:0x0241 - }, - { code:0x0242 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0241 - ,simpleLowerCaseMapping:0x0242 - ,simpleTitleCaseMapping:0x0241 - }, - { code:0x0243 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0243 - ,simpleLowerCaseMapping:0x0180 - ,simpleTitleCaseMapping:0x0243 - }, - { code:0x0244 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0244 - ,simpleLowerCaseMapping:0x0289 - ,simpleTitleCaseMapping:0x0244 - }, - { code:0x0245 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0245 - ,simpleLowerCaseMapping:0x028C - ,simpleTitleCaseMapping:0x0245 - }, - { code:0x0246 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0246 - ,simpleLowerCaseMapping:0x0247 - ,simpleTitleCaseMapping:0x0246 - }, - { code:0x0247 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0246 - ,simpleLowerCaseMapping:0x0247 - ,simpleTitleCaseMapping:0x0246 - }, - { code:0x0248 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0248 - ,simpleLowerCaseMapping:0x0249 - ,simpleTitleCaseMapping:0x0248 - }, - { code:0x0249 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0248 - ,simpleLowerCaseMapping:0x0249 - ,simpleTitleCaseMapping:0x0248 - }, - { code:0x024A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x024A - ,simpleLowerCaseMapping:0x024B - ,simpleTitleCaseMapping:0x024A - }, - { code:0x024B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x024A - ,simpleLowerCaseMapping:0x024B - ,simpleTitleCaseMapping:0x024A - }, - { code:0x024C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x024C - ,simpleLowerCaseMapping:0x024D - ,simpleTitleCaseMapping:0x024C - }, - { code:0x024D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x024C - ,simpleLowerCaseMapping:0x024D - ,simpleTitleCaseMapping:0x024C - }, - { code:0x024E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x024E - ,simpleLowerCaseMapping:0x024F - ,simpleTitleCaseMapping:0x024E - }, - { code:0x024F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x024E - ,simpleLowerCaseMapping:0x024F - ,simpleTitleCaseMapping:0x024E - }, - { code:0x0250 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0250 - ,simpleLowerCaseMapping:0x0250 - ,simpleTitleCaseMapping:0x0250 - }, - { code:0x0251 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0251 - ,simpleLowerCaseMapping:0x0251 - ,simpleTitleCaseMapping:0x0251 - }, - { code:0x0252 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0252 - ,simpleLowerCaseMapping:0x0252 - ,simpleTitleCaseMapping:0x0252 - }, - { code:0x0253 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0181 - ,simpleLowerCaseMapping:0x0253 - ,simpleTitleCaseMapping:0x0181 - }, - { code:0x0254 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0186 - ,simpleLowerCaseMapping:0x0254 - ,simpleTitleCaseMapping:0x0186 - }, - { code:0x0255 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0255 - ,simpleLowerCaseMapping:0x0255 - ,simpleTitleCaseMapping:0x0255 - }, - { code:0x0256 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0189 - ,simpleLowerCaseMapping:0x0256 - ,simpleTitleCaseMapping:0x0189 - }, - { code:0x0257 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x018A - ,simpleLowerCaseMapping:0x0257 - ,simpleTitleCaseMapping:0x018A - }, - { code:0x0258 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0258 - ,simpleLowerCaseMapping:0x0258 - ,simpleTitleCaseMapping:0x0258 - }, - { code:0x0259 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x018F - ,simpleLowerCaseMapping:0x0259 - ,simpleTitleCaseMapping:0x018F - }, - { code:0x025A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x025A - ,simpleLowerCaseMapping:0x025A - ,simpleTitleCaseMapping:0x025A - }, - { code:0x025B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0190 - ,simpleLowerCaseMapping:0x025B - ,simpleTitleCaseMapping:0x0190 - }, - { code:0x025C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x025C - ,simpleLowerCaseMapping:0x025C - ,simpleTitleCaseMapping:0x025C - }, - { code:0x025D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x025D - ,simpleLowerCaseMapping:0x025D - ,simpleTitleCaseMapping:0x025D - }, - { code:0x025E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x025E - ,simpleLowerCaseMapping:0x025E - ,simpleTitleCaseMapping:0x025E - }, - { code:0x025F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x025F - ,simpleLowerCaseMapping:0x025F - ,simpleTitleCaseMapping:0x025F - }, - { code:0x0260 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0193 - ,simpleLowerCaseMapping:0x0260 - ,simpleTitleCaseMapping:0x0193 - }, - { code:0x0261 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0261 - ,simpleLowerCaseMapping:0x0261 - ,simpleTitleCaseMapping:0x0261 - }, - { code:0x0262 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0262 - ,simpleLowerCaseMapping:0x0262 - ,simpleTitleCaseMapping:0x0262 - }, - { code:0x0263 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0194 - ,simpleLowerCaseMapping:0x0263 - ,simpleTitleCaseMapping:0x0194 - }, - { code:0x0264 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0264 - ,simpleLowerCaseMapping:0x0264 - ,simpleTitleCaseMapping:0x0264 - }, - { code:0x0265 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0265 - ,simpleLowerCaseMapping:0x0265 - ,simpleTitleCaseMapping:0x0265 - }, - { code:0x0266 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0266 - ,simpleLowerCaseMapping:0x0266 - ,simpleTitleCaseMapping:0x0266 - }, - { code:0x0267 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0267 - ,simpleLowerCaseMapping:0x0267 - ,simpleTitleCaseMapping:0x0267 - }, - { code:0x0268 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0197 - ,simpleLowerCaseMapping:0x0268 - ,simpleTitleCaseMapping:0x0197 - }, - { code:0x0269 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0196 - ,simpleLowerCaseMapping:0x0269 - ,simpleTitleCaseMapping:0x0196 - }, - { code:0x026A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x026A - ,simpleLowerCaseMapping:0x026A - ,simpleTitleCaseMapping:0x026A - }, - { code:0x026B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C62 - ,simpleLowerCaseMapping:0x026B - ,simpleTitleCaseMapping:0x2C62 - }, - { code:0x026C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x026C - ,simpleLowerCaseMapping:0x026C - ,simpleTitleCaseMapping:0x026C - }, - { code:0x026D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x026D - ,simpleLowerCaseMapping:0x026D - ,simpleTitleCaseMapping:0x026D - }, - { code:0x026E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x026E - ,simpleLowerCaseMapping:0x026E - ,simpleTitleCaseMapping:0x026E - }, - { code:0x026F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x019C - ,simpleLowerCaseMapping:0x026F - ,simpleTitleCaseMapping:0x019C - }, - { code:0x0270 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0270 - ,simpleLowerCaseMapping:0x0270 - ,simpleTitleCaseMapping:0x0270 - }, - { code:0x0271 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0271 - ,simpleLowerCaseMapping:0x0271 - ,simpleTitleCaseMapping:0x0271 - }, - { code:0x0272 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x019D - ,simpleLowerCaseMapping:0x0272 - ,simpleTitleCaseMapping:0x019D - }, - { code:0x0273 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0273 - ,simpleLowerCaseMapping:0x0273 - ,simpleTitleCaseMapping:0x0273 - }, - { code:0x0274 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0274 - ,simpleLowerCaseMapping:0x0274 - ,simpleTitleCaseMapping:0x0274 - }, - { code:0x0275 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x019F - ,simpleLowerCaseMapping:0x0275 - ,simpleTitleCaseMapping:0x019F - }, - { code:0x0276 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0276 - ,simpleLowerCaseMapping:0x0276 - ,simpleTitleCaseMapping:0x0276 - }, - { code:0x0277 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0277 - ,simpleLowerCaseMapping:0x0277 - ,simpleTitleCaseMapping:0x0277 - }, - { code:0x0278 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0278 - ,simpleLowerCaseMapping:0x0278 - ,simpleTitleCaseMapping:0x0278 - }, - { code:0x0279 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0279 - ,simpleLowerCaseMapping:0x0279 - ,simpleTitleCaseMapping:0x0279 - }, - { code:0x027A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x027A - ,simpleLowerCaseMapping:0x027A - ,simpleTitleCaseMapping:0x027A - }, - { code:0x027B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x027B - ,simpleLowerCaseMapping:0x027B - ,simpleTitleCaseMapping:0x027B - }, - { code:0x027C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x027C - ,simpleLowerCaseMapping:0x027C - ,simpleTitleCaseMapping:0x027C - }, - { code:0x027D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C64 - ,simpleLowerCaseMapping:0x027D - ,simpleTitleCaseMapping:0x2C64 - }, - { code:0x027E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x027E - ,simpleLowerCaseMapping:0x027E - ,simpleTitleCaseMapping:0x027E - }, - { code:0x027F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x027F - ,simpleLowerCaseMapping:0x027F - ,simpleTitleCaseMapping:0x027F - }, - { code:0x0280 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A6 - ,simpleLowerCaseMapping:0x0280 - ,simpleTitleCaseMapping:0x01A6 - }, - { code:0x0281 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0281 - ,simpleLowerCaseMapping:0x0281 - ,simpleTitleCaseMapping:0x0281 - }, - { code:0x0282 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0282 - ,simpleLowerCaseMapping:0x0282 - ,simpleTitleCaseMapping:0x0282 - }, - { code:0x0283 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01A9 - ,simpleLowerCaseMapping:0x0283 - ,simpleTitleCaseMapping:0x01A9 - }, - { code:0x0284 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0284 - ,simpleLowerCaseMapping:0x0284 - ,simpleTitleCaseMapping:0x0284 - }, - { code:0x0285 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0285 - ,simpleLowerCaseMapping:0x0285 - ,simpleTitleCaseMapping:0x0285 - }, - { code:0x0286 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0286 - ,simpleLowerCaseMapping:0x0286 - ,simpleTitleCaseMapping:0x0286 - }, - { code:0x0287 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0287 - ,simpleLowerCaseMapping:0x0287 - ,simpleTitleCaseMapping:0x0287 - }, - { code:0x0288 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01AE - ,simpleLowerCaseMapping:0x0288 - ,simpleTitleCaseMapping:0x01AE - }, - { code:0x0289 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0244 - ,simpleLowerCaseMapping:0x0289 - ,simpleTitleCaseMapping:0x0244 - }, - { code:0x028A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B1 - ,simpleLowerCaseMapping:0x028A - ,simpleTitleCaseMapping:0x01B1 - }, - { code:0x028B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B2 - ,simpleLowerCaseMapping:0x028B - ,simpleTitleCaseMapping:0x01B2 - }, - { code:0x028C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0245 - ,simpleLowerCaseMapping:0x028C - ,simpleTitleCaseMapping:0x0245 - }, - { code:0x028D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x028D - ,simpleLowerCaseMapping:0x028D - ,simpleTitleCaseMapping:0x028D - }, - { code:0x028E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x028E - ,simpleLowerCaseMapping:0x028E - ,simpleTitleCaseMapping:0x028E - }, - { code:0x028F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x028F - ,simpleLowerCaseMapping:0x028F - ,simpleTitleCaseMapping:0x028F - }, - { code:0x0290 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0290 - ,simpleLowerCaseMapping:0x0290 - ,simpleTitleCaseMapping:0x0290 - }, - { code:0x0291 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0291 - ,simpleLowerCaseMapping:0x0291 - ,simpleTitleCaseMapping:0x0291 - }, - { code:0x0292 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x01B7 - ,simpleLowerCaseMapping:0x0292 - ,simpleTitleCaseMapping:0x01B7 - }, - { code:0x0293 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0293 - ,simpleLowerCaseMapping:0x0293 - ,simpleTitleCaseMapping:0x0293 - }, - { code:0x0294 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0294 - ,simpleLowerCaseMapping:0x0294 - ,simpleTitleCaseMapping:0x0294 - }, - { code:0x0295 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0295 - ,simpleLowerCaseMapping:0x0295 - ,simpleTitleCaseMapping:0x0295 - }, - { code:0x0296 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0296 - ,simpleLowerCaseMapping:0x0296 - ,simpleTitleCaseMapping:0x0296 - }, - { code:0x0297 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0297 - ,simpleLowerCaseMapping:0x0297 - ,simpleTitleCaseMapping:0x0297 - }, - { code:0x0298 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0298 - ,simpleLowerCaseMapping:0x0298 - ,simpleTitleCaseMapping:0x0298 - }, - { code:0x0299 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0299 - ,simpleLowerCaseMapping:0x0299 - ,simpleTitleCaseMapping:0x0299 - }, - { code:0x029A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029A - ,simpleLowerCaseMapping:0x029A - ,simpleTitleCaseMapping:0x029A - }, - { code:0x029B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029B - ,simpleLowerCaseMapping:0x029B - ,simpleTitleCaseMapping:0x029B - }, - { code:0x029C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029C - ,simpleLowerCaseMapping:0x029C - ,simpleTitleCaseMapping:0x029C - }, - { code:0x029D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029D - ,simpleLowerCaseMapping:0x029D - ,simpleTitleCaseMapping:0x029D - }, - { code:0x029E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029E - ,simpleLowerCaseMapping:0x029E - ,simpleTitleCaseMapping:0x029E - }, - { code:0x029F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x029F - ,simpleLowerCaseMapping:0x029F - ,simpleTitleCaseMapping:0x029F - }, - { code:0x02A0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A0 - ,simpleLowerCaseMapping:0x02A0 - ,simpleTitleCaseMapping:0x02A0 - }, - { code:0x02A1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A1 - ,simpleLowerCaseMapping:0x02A1 - ,simpleTitleCaseMapping:0x02A1 - }, - { code:0x02A2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A2 - ,simpleLowerCaseMapping:0x02A2 - ,simpleTitleCaseMapping:0x02A2 - }, - { code:0x02A3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A3 - ,simpleLowerCaseMapping:0x02A3 - ,simpleTitleCaseMapping:0x02A3 - }, - { code:0x02A4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A4 - ,simpleLowerCaseMapping:0x02A4 - ,simpleTitleCaseMapping:0x02A4 - }, - { code:0x02A5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A5 - ,simpleLowerCaseMapping:0x02A5 - ,simpleTitleCaseMapping:0x02A5 - }, - { code:0x02A6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A6 - ,simpleLowerCaseMapping:0x02A6 - ,simpleTitleCaseMapping:0x02A6 - }, - { code:0x02A7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A7 - ,simpleLowerCaseMapping:0x02A7 - ,simpleTitleCaseMapping:0x02A7 - }, - { code:0x02A8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A8 - ,simpleLowerCaseMapping:0x02A8 - ,simpleTitleCaseMapping:0x02A8 - }, - { code:0x02A9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02A9 - ,simpleLowerCaseMapping:0x02A9 - ,simpleTitleCaseMapping:0x02A9 - }, - { code:0x02AA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AA - ,simpleLowerCaseMapping:0x02AA - ,simpleTitleCaseMapping:0x02AA - }, - { code:0x02AB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AB - ,simpleLowerCaseMapping:0x02AB - ,simpleTitleCaseMapping:0x02AB - }, - { code:0x02AC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AC - ,simpleLowerCaseMapping:0x02AC - ,simpleTitleCaseMapping:0x02AC - }, - { code:0x02AD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AD - ,simpleLowerCaseMapping:0x02AD - ,simpleTitleCaseMapping:0x02AD - }, - { code:0x02AE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AE - ,simpleLowerCaseMapping:0x02AE - ,simpleTitleCaseMapping:0x02AE - }, - { code:0x02AF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x02AF - ,simpleLowerCaseMapping:0x02AF - ,simpleTitleCaseMapping:0x02AF - }, - { code:0x02B0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B0 - ,simpleLowerCaseMapping:0x02B0 - ,simpleTitleCaseMapping:0x02B0 - }, - { code:0x02B1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B1 - ,simpleLowerCaseMapping:0x02B1 - ,simpleTitleCaseMapping:0x02B1 - }, - { code:0x02B2 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B2 - ,simpleLowerCaseMapping:0x02B2 - ,simpleTitleCaseMapping:0x02B2 - }, - { code:0x02B3 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B3 - ,simpleLowerCaseMapping:0x02B3 - ,simpleTitleCaseMapping:0x02B3 - }, - { code:0x02B4 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B4 - ,simpleLowerCaseMapping:0x02B4 - ,simpleTitleCaseMapping:0x02B4 - }, - { code:0x02B5 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B5 - ,simpleLowerCaseMapping:0x02B5 - ,simpleTitleCaseMapping:0x02B5 - }, - { code:0x02B6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B6 - ,simpleLowerCaseMapping:0x02B6 - ,simpleTitleCaseMapping:0x02B6 - }, - { code:0x02B7 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B7 - ,simpleLowerCaseMapping:0x02B7 - ,simpleTitleCaseMapping:0x02B7 - }, - { code:0x02B8 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B8 - ,simpleLowerCaseMapping:0x02B8 - ,simpleTitleCaseMapping:0x02B8 - }, - { code:0x02B9 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02B9 - ,simpleLowerCaseMapping:0x02B9 - ,simpleTitleCaseMapping:0x02B9 - }, - { code:0x02BA - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BA - ,simpleLowerCaseMapping:0x02BA - ,simpleTitleCaseMapping:0x02BA - }, - { code:0x02BB - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BB - ,simpleLowerCaseMapping:0x02BB - ,simpleTitleCaseMapping:0x02BB - }, - { code:0x02BC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BC - ,simpleLowerCaseMapping:0x02BC - ,simpleTitleCaseMapping:0x02BC - }, - { code:0x02BD - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BD - ,simpleLowerCaseMapping:0x02BD - ,simpleTitleCaseMapping:0x02BD - }, - { code:0x02BE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BE - ,simpleLowerCaseMapping:0x02BE - ,simpleTitleCaseMapping:0x02BE - }, - { code:0x02BF - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02BF - ,simpleLowerCaseMapping:0x02BF - ,simpleTitleCaseMapping:0x02BF - }, - { code:0x02C0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C0 - ,simpleLowerCaseMapping:0x02C0 - ,simpleTitleCaseMapping:0x02C0 - }, - { code:0x02C1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C1 - ,simpleLowerCaseMapping:0x02C1 - ,simpleTitleCaseMapping:0x02C1 - }, - { code:0x02C2 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02C2 - ,simpleLowerCaseMapping:0x02C2 - ,simpleTitleCaseMapping:0x02C2 - }, - { code:0x02C3 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02C3 - ,simpleLowerCaseMapping:0x02C3 - ,simpleTitleCaseMapping:0x02C3 - }, - { code:0x02C4 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02C4 - ,simpleLowerCaseMapping:0x02C4 - ,simpleTitleCaseMapping:0x02C4 - }, - { code:0x02C5 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02C5 - ,simpleLowerCaseMapping:0x02C5 - ,simpleTitleCaseMapping:0x02C5 - }, - { code:0x02C6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C6 - ,simpleLowerCaseMapping:0x02C6 - ,simpleTitleCaseMapping:0x02C6 - }, - { code:0x02C7 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C7 - ,simpleLowerCaseMapping:0x02C7 - ,simpleTitleCaseMapping:0x02C7 - }, - { code:0x02C8 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C8 - ,simpleLowerCaseMapping:0x02C8 - ,simpleTitleCaseMapping:0x02C8 - }, - { code:0x02C9 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02C9 - ,simpleLowerCaseMapping:0x02C9 - ,simpleTitleCaseMapping:0x02C9 - }, - { code:0x02CA - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CA - ,simpleLowerCaseMapping:0x02CA - ,simpleTitleCaseMapping:0x02CA - }, - { code:0x02CB - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CB - ,simpleLowerCaseMapping:0x02CB - ,simpleTitleCaseMapping:0x02CB - }, - { code:0x02CC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CC - ,simpleLowerCaseMapping:0x02CC - ,simpleTitleCaseMapping:0x02CC - }, - { code:0x02CD - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CD - ,simpleLowerCaseMapping:0x02CD - ,simpleTitleCaseMapping:0x02CD - }, - { code:0x02CE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CE - ,simpleLowerCaseMapping:0x02CE - ,simpleTitleCaseMapping:0x02CE - }, - { code:0x02CF - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02CF - ,simpleLowerCaseMapping:0x02CF - ,simpleTitleCaseMapping:0x02CF - }, - { code:0x02D0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02D0 - ,simpleLowerCaseMapping:0x02D0 - ,simpleTitleCaseMapping:0x02D0 - }, - { code:0x02D1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02D1 - ,simpleLowerCaseMapping:0x02D1 - ,simpleTitleCaseMapping:0x02D1 - }, - { code:0x02D2 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D2 - ,simpleLowerCaseMapping:0x02D2 - ,simpleTitleCaseMapping:0x02D2 - }, - { code:0x02D3 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D3 - ,simpleLowerCaseMapping:0x02D3 - ,simpleTitleCaseMapping:0x02D3 - }, - { code:0x02D4 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D4 - ,simpleLowerCaseMapping:0x02D4 - ,simpleTitleCaseMapping:0x02D4 - }, - { code:0x02D5 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D5 - ,simpleLowerCaseMapping:0x02D5 - ,simpleTitleCaseMapping:0x02D5 - }, - { code:0x02D6 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D6 - ,simpleLowerCaseMapping:0x02D6 - ,simpleTitleCaseMapping:0x02D6 - }, - { code:0x02D7 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D7 - ,simpleLowerCaseMapping:0x02D7 - ,simpleTitleCaseMapping:0x02D7 - }, - { code:0x02D8 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D8 - ,simpleLowerCaseMapping:0x02D8 - ,simpleTitleCaseMapping:0x02D8 - }, - { code:0x02D9 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02D9 - ,simpleLowerCaseMapping:0x02D9 - ,simpleTitleCaseMapping:0x02D9 - }, - { code:0x02DA - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DA - ,simpleLowerCaseMapping:0x02DA - ,simpleTitleCaseMapping:0x02DA - }, - { code:0x02DB - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DB - ,simpleLowerCaseMapping:0x02DB - ,simpleTitleCaseMapping:0x02DB - }, - { code:0x02DC - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DC - ,simpleLowerCaseMapping:0x02DC - ,simpleTitleCaseMapping:0x02DC - }, - { code:0x02DD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DD - ,simpleLowerCaseMapping:0x02DD - ,simpleTitleCaseMapping:0x02DD - }, - { code:0x02DE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DE - ,simpleLowerCaseMapping:0x02DE - ,simpleTitleCaseMapping:0x02DE - }, - { code:0x02DF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02DF - ,simpleLowerCaseMapping:0x02DF - ,simpleTitleCaseMapping:0x02DF - }, - { code:0x02E0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02E0 - ,simpleLowerCaseMapping:0x02E0 - ,simpleTitleCaseMapping:0x02E0 - }, - { code:0x02E1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02E1 - ,simpleLowerCaseMapping:0x02E1 - ,simpleTitleCaseMapping:0x02E1 - }, - { code:0x02E2 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02E2 - ,simpleLowerCaseMapping:0x02E2 - ,simpleTitleCaseMapping:0x02E2 - }, - { code:0x02E3 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02E3 - ,simpleLowerCaseMapping:0x02E3 - ,simpleTitleCaseMapping:0x02E3 - }, - { code:0x02E4 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02E4 - ,simpleLowerCaseMapping:0x02E4 - ,simpleTitleCaseMapping:0x02E4 - }, - { code:0x02E5 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02E5 - ,simpleLowerCaseMapping:0x02E5 - ,simpleTitleCaseMapping:0x02E5 - }, - { code:0x02E6 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02E6 - ,simpleLowerCaseMapping:0x02E6 - ,simpleTitleCaseMapping:0x02E6 - }, - { code:0x02E7 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02E7 - ,simpleLowerCaseMapping:0x02E7 - ,simpleTitleCaseMapping:0x02E7 - }, - { code:0x02E8 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02E8 - ,simpleLowerCaseMapping:0x02E8 - ,simpleTitleCaseMapping:0x02E8 - }, - { code:0x02E9 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02E9 - ,simpleLowerCaseMapping:0x02E9 - ,simpleTitleCaseMapping:0x02E9 - }, - { code:0x02EA - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02EA - ,simpleLowerCaseMapping:0x02EA - ,simpleTitleCaseMapping:0x02EA - }, - { code:0x02EB - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02EB - ,simpleLowerCaseMapping:0x02EB - ,simpleTitleCaseMapping:0x02EB - }, - { code:0x02EC - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02EC - ,simpleLowerCaseMapping:0x02EC - ,simpleTitleCaseMapping:0x02EC - }, - { code:0x02ED - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02ED - ,simpleLowerCaseMapping:0x02ED - ,simpleTitleCaseMapping:0x02ED - }, - { code:0x02EE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x02EE - ,simpleLowerCaseMapping:0x02EE - ,simpleTitleCaseMapping:0x02EE - }, - { code:0x02EF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02EF - ,simpleLowerCaseMapping:0x02EF - ,simpleTitleCaseMapping:0x02EF - }, - { code:0x02F0 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F0 - ,simpleLowerCaseMapping:0x02F0 - ,simpleTitleCaseMapping:0x02F0 - }, - { code:0x02F1 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F1 - ,simpleLowerCaseMapping:0x02F1 - ,simpleTitleCaseMapping:0x02F1 - }, - { code:0x02F2 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F2 - ,simpleLowerCaseMapping:0x02F2 - ,simpleTitleCaseMapping:0x02F2 - }, - { code:0x02F3 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F3 - ,simpleLowerCaseMapping:0x02F3 - ,simpleTitleCaseMapping:0x02F3 - }, - { code:0x02F4 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F4 - ,simpleLowerCaseMapping:0x02F4 - ,simpleTitleCaseMapping:0x02F4 - }, - { code:0x02F5 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F5 - ,simpleLowerCaseMapping:0x02F5 - ,simpleTitleCaseMapping:0x02F5 - }, - { code:0x02F6 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F6 - ,simpleLowerCaseMapping:0x02F6 - ,simpleTitleCaseMapping:0x02F6 - }, - { code:0x02F7 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F7 - ,simpleLowerCaseMapping:0x02F7 - ,simpleTitleCaseMapping:0x02F7 - }, - { code:0x02F8 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F8 - ,simpleLowerCaseMapping:0x02F8 - ,simpleTitleCaseMapping:0x02F8 - }, - { code:0x02F9 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02F9 - ,simpleLowerCaseMapping:0x02F9 - ,simpleTitleCaseMapping:0x02F9 - }, - { code:0x02FA - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FA - ,simpleLowerCaseMapping:0x02FA - ,simpleTitleCaseMapping:0x02FA - }, - { code:0x02FB - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FB - ,simpleLowerCaseMapping:0x02FB - ,simpleTitleCaseMapping:0x02FB - }, - { code:0x02FC - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FC - ,simpleLowerCaseMapping:0x02FC - ,simpleTitleCaseMapping:0x02FC - }, - { code:0x02FD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FD - ,simpleLowerCaseMapping:0x02FD - ,simpleTitleCaseMapping:0x02FD - }, - { code:0x02FE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FE - ,simpleLowerCaseMapping:0x02FE - ,simpleTitleCaseMapping:0x02FE - }, - { code:0x02FF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x02FF - ,simpleLowerCaseMapping:0x02FF - ,simpleTitleCaseMapping:0x02FF - }, - { code:0x0300 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0300 - ,simpleLowerCaseMapping:0x0300 - ,simpleTitleCaseMapping:0x0300 - }, - { code:0x0301 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0301 - ,simpleLowerCaseMapping:0x0301 - ,simpleTitleCaseMapping:0x0301 - }, - { code:0x0302 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0302 - ,simpleLowerCaseMapping:0x0302 - ,simpleTitleCaseMapping:0x0302 - }, - { code:0x0303 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0303 - ,simpleLowerCaseMapping:0x0303 - ,simpleTitleCaseMapping:0x0303 - }, - { code:0x0304 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0304 - ,simpleLowerCaseMapping:0x0304 - ,simpleTitleCaseMapping:0x0304 - }, - { code:0x0305 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0305 - ,simpleLowerCaseMapping:0x0305 - ,simpleTitleCaseMapping:0x0305 - }, - { code:0x0306 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0306 - ,simpleLowerCaseMapping:0x0306 - ,simpleTitleCaseMapping:0x0306 - }, - { code:0x0307 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0307 - ,simpleLowerCaseMapping:0x0307 - ,simpleTitleCaseMapping:0x0307 - }, - { code:0x0308 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0308 - ,simpleLowerCaseMapping:0x0308 - ,simpleTitleCaseMapping:0x0308 - }, - { code:0x0309 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0309 - ,simpleLowerCaseMapping:0x0309 - ,simpleTitleCaseMapping:0x0309 - }, - { code:0x030A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030A - ,simpleLowerCaseMapping:0x030A - ,simpleTitleCaseMapping:0x030A - }, - { code:0x030B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030B - ,simpleLowerCaseMapping:0x030B - ,simpleTitleCaseMapping:0x030B - }, - { code:0x030C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030C - ,simpleLowerCaseMapping:0x030C - ,simpleTitleCaseMapping:0x030C - }, - { code:0x030D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030D - ,simpleLowerCaseMapping:0x030D - ,simpleTitleCaseMapping:0x030D - }, - { code:0x030E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030E - ,simpleLowerCaseMapping:0x030E - ,simpleTitleCaseMapping:0x030E - }, - { code:0x030F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x030F - ,simpleLowerCaseMapping:0x030F - ,simpleTitleCaseMapping:0x030F - }, - { code:0x0310 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0310 - ,simpleLowerCaseMapping:0x0310 - ,simpleTitleCaseMapping:0x0310 - }, - { code:0x0311 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0311 - ,simpleLowerCaseMapping:0x0311 - ,simpleTitleCaseMapping:0x0311 - }, - { code:0x0312 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0312 - ,simpleLowerCaseMapping:0x0312 - ,simpleTitleCaseMapping:0x0312 - }, - { code:0x0313 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0313 - ,simpleLowerCaseMapping:0x0313 - ,simpleTitleCaseMapping:0x0313 - }, - { code:0x0314 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0314 - ,simpleLowerCaseMapping:0x0314 - ,simpleTitleCaseMapping:0x0314 - }, - { code:0x0315 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0315 - ,simpleLowerCaseMapping:0x0315 - ,simpleTitleCaseMapping:0x0315 - }, - { code:0x0316 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0316 - ,simpleLowerCaseMapping:0x0316 - ,simpleTitleCaseMapping:0x0316 - }, - { code:0x0317 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0317 - ,simpleLowerCaseMapping:0x0317 - ,simpleTitleCaseMapping:0x0317 - }, - { code:0x0318 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0318 - ,simpleLowerCaseMapping:0x0318 - ,simpleTitleCaseMapping:0x0318 - }, - { code:0x0319 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0319 - ,simpleLowerCaseMapping:0x0319 - ,simpleTitleCaseMapping:0x0319 - }, - { code:0x031A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031A - ,simpleLowerCaseMapping:0x031A - ,simpleTitleCaseMapping:0x031A - }, - { code:0x031B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031B - ,simpleLowerCaseMapping:0x031B - ,simpleTitleCaseMapping:0x031B - }, - { code:0x031C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031C - ,simpleLowerCaseMapping:0x031C - ,simpleTitleCaseMapping:0x031C - }, - { code:0x031D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031D - ,simpleLowerCaseMapping:0x031D - ,simpleTitleCaseMapping:0x031D - }, - { code:0x031E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031E - ,simpleLowerCaseMapping:0x031E - ,simpleTitleCaseMapping:0x031E - }, - { code:0x031F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x031F - ,simpleLowerCaseMapping:0x031F - ,simpleTitleCaseMapping:0x031F - }, - { code:0x0320 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0320 - ,simpleLowerCaseMapping:0x0320 - ,simpleTitleCaseMapping:0x0320 - }, - { code:0x0321 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0321 - ,simpleLowerCaseMapping:0x0321 - ,simpleTitleCaseMapping:0x0321 - }, - { code:0x0322 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0322 - ,simpleLowerCaseMapping:0x0322 - ,simpleTitleCaseMapping:0x0322 - }, - { code:0x0323 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0323 - ,simpleLowerCaseMapping:0x0323 - ,simpleTitleCaseMapping:0x0323 - }, - { code:0x0324 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0324 - ,simpleLowerCaseMapping:0x0324 - ,simpleTitleCaseMapping:0x0324 - }, - { code:0x0325 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0325 - ,simpleLowerCaseMapping:0x0325 - ,simpleTitleCaseMapping:0x0325 - }, - { code:0x0326 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0326 - ,simpleLowerCaseMapping:0x0326 - ,simpleTitleCaseMapping:0x0326 - }, - { code:0x0327 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0327 - ,simpleLowerCaseMapping:0x0327 - ,simpleTitleCaseMapping:0x0327 - }, - { code:0x0328 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0328 - ,simpleLowerCaseMapping:0x0328 - ,simpleTitleCaseMapping:0x0328 - }, - { code:0x0329 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0329 - ,simpleLowerCaseMapping:0x0329 - ,simpleTitleCaseMapping:0x0329 - }, - { code:0x032A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032A - ,simpleLowerCaseMapping:0x032A - ,simpleTitleCaseMapping:0x032A - }, - { code:0x032B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032B - ,simpleLowerCaseMapping:0x032B - ,simpleTitleCaseMapping:0x032B - }, - { code:0x032C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032C - ,simpleLowerCaseMapping:0x032C - ,simpleTitleCaseMapping:0x032C - }, - { code:0x032D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032D - ,simpleLowerCaseMapping:0x032D - ,simpleTitleCaseMapping:0x032D - }, - { code:0x032E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032E - ,simpleLowerCaseMapping:0x032E - ,simpleTitleCaseMapping:0x032E - }, - { code:0x032F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x032F - ,simpleLowerCaseMapping:0x032F - ,simpleTitleCaseMapping:0x032F - }, - { code:0x0330 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0330 - ,simpleLowerCaseMapping:0x0330 - ,simpleTitleCaseMapping:0x0330 - }, - { code:0x0331 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0331 - ,simpleLowerCaseMapping:0x0331 - ,simpleTitleCaseMapping:0x0331 - }, - { code:0x0332 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0332 - ,simpleLowerCaseMapping:0x0332 - ,simpleTitleCaseMapping:0x0332 - }, - { code:0x0333 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0333 - ,simpleLowerCaseMapping:0x0333 - ,simpleTitleCaseMapping:0x0333 - }, - { code:0x0334 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0334 - ,simpleLowerCaseMapping:0x0334 - ,simpleTitleCaseMapping:0x0334 - }, - { code:0x0335 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0335 - ,simpleLowerCaseMapping:0x0335 - ,simpleTitleCaseMapping:0x0335 - }, - { code:0x0336 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0336 - ,simpleLowerCaseMapping:0x0336 - ,simpleTitleCaseMapping:0x0336 - }, - { code:0x0337 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0337 - ,simpleLowerCaseMapping:0x0337 - ,simpleTitleCaseMapping:0x0337 - }, - { code:0x0338 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0338 - ,simpleLowerCaseMapping:0x0338 - ,simpleTitleCaseMapping:0x0338 - }, - { code:0x0339 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0339 - ,simpleLowerCaseMapping:0x0339 - ,simpleTitleCaseMapping:0x0339 - }, - { code:0x033A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033A - ,simpleLowerCaseMapping:0x033A - ,simpleTitleCaseMapping:0x033A - }, - { code:0x033B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033B - ,simpleLowerCaseMapping:0x033B - ,simpleTitleCaseMapping:0x033B - }, - { code:0x033C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033C - ,simpleLowerCaseMapping:0x033C - ,simpleTitleCaseMapping:0x033C - }, - { code:0x033D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033D - ,simpleLowerCaseMapping:0x033D - ,simpleTitleCaseMapping:0x033D - }, - { code:0x033E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033E - ,simpleLowerCaseMapping:0x033E - ,simpleTitleCaseMapping:0x033E - }, - { code:0x033F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x033F - ,simpleLowerCaseMapping:0x033F - ,simpleTitleCaseMapping:0x033F - }, - { code:0x0340 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0340 - ,simpleLowerCaseMapping:0x0340 - ,simpleTitleCaseMapping:0x0340 - }, - { code:0x0341 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0341 - ,simpleLowerCaseMapping:0x0341 - ,simpleTitleCaseMapping:0x0341 - }, - { code:0x0342 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0342 - ,simpleLowerCaseMapping:0x0342 - ,simpleTitleCaseMapping:0x0342 - }, - { code:0x0343 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0343 - ,simpleLowerCaseMapping:0x0343 - ,simpleTitleCaseMapping:0x0343 - }, - { code:0x0344 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0344 - ,simpleLowerCaseMapping:0x0344 - ,simpleTitleCaseMapping:0x0344 - }, - { code:0x0345 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0399 - ,simpleLowerCaseMapping:0x0345 - ,simpleTitleCaseMapping:0x0399 - }, - { code:0x0346 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0346 - ,simpleLowerCaseMapping:0x0346 - ,simpleTitleCaseMapping:0x0346 - }, - { code:0x0347 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0347 - ,simpleLowerCaseMapping:0x0347 - ,simpleTitleCaseMapping:0x0347 - }, - { code:0x0348 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0348 - ,simpleLowerCaseMapping:0x0348 - ,simpleTitleCaseMapping:0x0348 - }, - { code:0x0349 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0349 - ,simpleLowerCaseMapping:0x0349 - ,simpleTitleCaseMapping:0x0349 - }, - { code:0x034A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034A - ,simpleLowerCaseMapping:0x034A - ,simpleTitleCaseMapping:0x034A - }, - { code:0x034B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034B - ,simpleLowerCaseMapping:0x034B - ,simpleTitleCaseMapping:0x034B - }, - { code:0x034C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034C - ,simpleLowerCaseMapping:0x034C - ,simpleTitleCaseMapping:0x034C - }, - { code:0x034D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034D - ,simpleLowerCaseMapping:0x034D - ,simpleTitleCaseMapping:0x034D - }, - { code:0x034E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034E - ,simpleLowerCaseMapping:0x034E - ,simpleTitleCaseMapping:0x034E - }, - { code:0x034F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x034F - ,simpleLowerCaseMapping:0x034F - ,simpleTitleCaseMapping:0x034F - }, - { code:0x0350 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0350 - ,simpleLowerCaseMapping:0x0350 - ,simpleTitleCaseMapping:0x0350 - }, - { code:0x0351 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0351 - ,simpleLowerCaseMapping:0x0351 - ,simpleTitleCaseMapping:0x0351 - }, - { code:0x0352 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0352 - ,simpleLowerCaseMapping:0x0352 - ,simpleTitleCaseMapping:0x0352 - }, - { code:0x0353 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0353 - ,simpleLowerCaseMapping:0x0353 - ,simpleTitleCaseMapping:0x0353 - }, - { code:0x0354 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0354 - ,simpleLowerCaseMapping:0x0354 - ,simpleTitleCaseMapping:0x0354 - }, - { code:0x0355 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0355 - ,simpleLowerCaseMapping:0x0355 - ,simpleTitleCaseMapping:0x0355 - }, - { code:0x0356 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0356 - ,simpleLowerCaseMapping:0x0356 - ,simpleTitleCaseMapping:0x0356 - }, - { code:0x0357 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0357 - ,simpleLowerCaseMapping:0x0357 - ,simpleTitleCaseMapping:0x0357 - }, - { code:0x0358 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0358 - ,simpleLowerCaseMapping:0x0358 - ,simpleTitleCaseMapping:0x0358 - }, - { code:0x0359 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0359 - ,simpleLowerCaseMapping:0x0359 - ,simpleTitleCaseMapping:0x0359 - }, - { code:0x035A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035A - ,simpleLowerCaseMapping:0x035A - ,simpleTitleCaseMapping:0x035A - }, - { code:0x035B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035B - ,simpleLowerCaseMapping:0x035B - ,simpleTitleCaseMapping:0x035B - }, - { code:0x035C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035C - ,simpleLowerCaseMapping:0x035C - ,simpleTitleCaseMapping:0x035C - }, - { code:0x035D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035D - ,simpleLowerCaseMapping:0x035D - ,simpleTitleCaseMapping:0x035D - }, - { code:0x035E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035E - ,simpleLowerCaseMapping:0x035E - ,simpleTitleCaseMapping:0x035E - }, - { code:0x035F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x035F - ,simpleLowerCaseMapping:0x035F - ,simpleTitleCaseMapping:0x035F - }, - { code:0x0360 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0360 - ,simpleLowerCaseMapping:0x0360 - ,simpleTitleCaseMapping:0x0360 - }, - { code:0x0361 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0361 - ,simpleLowerCaseMapping:0x0361 - ,simpleTitleCaseMapping:0x0361 - }, - { code:0x0362 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0362 - ,simpleLowerCaseMapping:0x0362 - ,simpleTitleCaseMapping:0x0362 - }, - { code:0x0363 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0363 - ,simpleLowerCaseMapping:0x0363 - ,simpleTitleCaseMapping:0x0363 - }, - { code:0x0364 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0364 - ,simpleLowerCaseMapping:0x0364 - ,simpleTitleCaseMapping:0x0364 - }, - { code:0x0365 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0365 - ,simpleLowerCaseMapping:0x0365 - ,simpleTitleCaseMapping:0x0365 - }, - { code:0x0366 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0366 - ,simpleLowerCaseMapping:0x0366 - ,simpleTitleCaseMapping:0x0366 - }, - { code:0x0367 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0367 - ,simpleLowerCaseMapping:0x0367 - ,simpleTitleCaseMapping:0x0367 - }, - { code:0x0368 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0368 - ,simpleLowerCaseMapping:0x0368 - ,simpleTitleCaseMapping:0x0368 - }, - { code:0x0369 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0369 - ,simpleLowerCaseMapping:0x0369 - ,simpleTitleCaseMapping:0x0369 - }, - { code:0x036A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036A - ,simpleLowerCaseMapping:0x036A - ,simpleTitleCaseMapping:0x036A - }, - { code:0x036B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036B - ,simpleLowerCaseMapping:0x036B - ,simpleTitleCaseMapping:0x036B - }, - { code:0x036C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036C - ,simpleLowerCaseMapping:0x036C - ,simpleTitleCaseMapping:0x036C - }, - { code:0x036D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036D - ,simpleLowerCaseMapping:0x036D - ,simpleTitleCaseMapping:0x036D - }, - { code:0x036E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036E - ,simpleLowerCaseMapping:0x036E - ,simpleTitleCaseMapping:0x036E - }, - { code:0x036F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x036F - ,simpleLowerCaseMapping:0x036F - ,simpleTitleCaseMapping:0x036F - }, - { code:0x0374 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x0374 - ,simpleLowerCaseMapping:0x0374 - ,simpleTitleCaseMapping:0x0374 - }, - { code:0x0375 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x0375 - ,simpleLowerCaseMapping:0x0375 - ,simpleTitleCaseMapping:0x0375 - }, - { code:0x037A - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x037A - ,simpleLowerCaseMapping:0x037A - ,simpleTitleCaseMapping:0x037A - }, - { code:0x037B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03FD - ,simpleLowerCaseMapping:0x037B - ,simpleTitleCaseMapping:0x03FD - }, - { code:0x037C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03FE - ,simpleLowerCaseMapping:0x037C - ,simpleTitleCaseMapping:0x03FE - }, - { code:0x037D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03FF - ,simpleLowerCaseMapping:0x037D - ,simpleTitleCaseMapping:0x03FF - }, - { code:0x037E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x037E - ,simpleLowerCaseMapping:0x037E - ,simpleTitleCaseMapping:0x037E - }, - { code:0x0384 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x0384 - ,simpleLowerCaseMapping:0x0384 - ,simpleTitleCaseMapping:0x0384 - }, - { code:0x0385 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x0385 - ,simpleLowerCaseMapping:0x0385 - ,simpleTitleCaseMapping:0x0385 - }, - { code:0x0386 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0386 - ,simpleLowerCaseMapping:0x03AC - ,simpleTitleCaseMapping:0x0386 - }, - { code:0x0387 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0387 - ,simpleLowerCaseMapping:0x0387 - ,simpleTitleCaseMapping:0x0387 - }, - { code:0x0388 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0388 - ,simpleLowerCaseMapping:0x03AD - ,simpleTitleCaseMapping:0x0388 - }, - { code:0x0389 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0389 - ,simpleLowerCaseMapping:0x03AE - ,simpleTitleCaseMapping:0x0389 - }, - { code:0x038A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x038A - ,simpleLowerCaseMapping:0x03AF - ,simpleTitleCaseMapping:0x038A - }, - { code:0x038C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x038C - ,simpleLowerCaseMapping:0x03CC - ,simpleTitleCaseMapping:0x038C - }, - { code:0x038E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x038E - ,simpleLowerCaseMapping:0x03CD - ,simpleTitleCaseMapping:0x038E - }, - { code:0x038F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x038F - ,simpleLowerCaseMapping:0x03CE - ,simpleTitleCaseMapping:0x038F - }, - { code:0x0390 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x0390 - ,simpleLowerCaseMapping:0x0390 - ,simpleTitleCaseMapping:0x0390 - }, - { code:0x0391 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0391 - ,simpleLowerCaseMapping:0x03B1 - ,simpleTitleCaseMapping:0x0391 - }, - { code:0x0392 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0392 - ,simpleLowerCaseMapping:0x03B2 - ,simpleTitleCaseMapping:0x0392 - }, - { code:0x0393 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0393 - ,simpleLowerCaseMapping:0x03B3 - ,simpleTitleCaseMapping:0x0393 - }, - { code:0x0394 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0394 - ,simpleLowerCaseMapping:0x03B4 - ,simpleTitleCaseMapping:0x0394 - }, - { code:0x0395 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0395 - ,simpleLowerCaseMapping:0x03B5 - ,simpleTitleCaseMapping:0x0395 - }, - { code:0x0396 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0396 - ,simpleLowerCaseMapping:0x03B6 - ,simpleTitleCaseMapping:0x0396 - }, - { code:0x0397 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0397 - ,simpleLowerCaseMapping:0x03B7 - ,simpleTitleCaseMapping:0x0397 - }, - { code:0x0398 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0398 - ,simpleLowerCaseMapping:0x03B8 - ,simpleTitleCaseMapping:0x0398 - }, - { code:0x0399 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0399 - ,simpleLowerCaseMapping:0x03B9 - ,simpleTitleCaseMapping:0x0399 - }, - { code:0x039A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039A - ,simpleLowerCaseMapping:0x03BA - ,simpleTitleCaseMapping:0x039A - }, - { code:0x039B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039B - ,simpleLowerCaseMapping:0x03BB - ,simpleTitleCaseMapping:0x039B - }, - { code:0x039C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039C - ,simpleLowerCaseMapping:0x03BC - ,simpleTitleCaseMapping:0x039C - }, - { code:0x039D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039D - ,simpleLowerCaseMapping:0x03BD - ,simpleTitleCaseMapping:0x039D - }, - { code:0x039E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039E - ,simpleLowerCaseMapping:0x03BE - ,simpleTitleCaseMapping:0x039E - }, - { code:0x039F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x039F - ,simpleLowerCaseMapping:0x03BF - ,simpleTitleCaseMapping:0x039F - }, - { code:0x03A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A0 - ,simpleLowerCaseMapping:0x03C0 - ,simpleTitleCaseMapping:0x03A0 - }, - { code:0x03A1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A1 - ,simpleLowerCaseMapping:0x03C1 - ,simpleTitleCaseMapping:0x03A1 - }, - { code:0x03A3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A3 - ,simpleLowerCaseMapping:0x03C3 - ,simpleTitleCaseMapping:0x03A3 - }, - { code:0x03A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A4 - ,simpleLowerCaseMapping:0x03C4 - ,simpleTitleCaseMapping:0x03A4 - }, - { code:0x03A5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A5 - ,simpleLowerCaseMapping:0x03C5 - ,simpleTitleCaseMapping:0x03A5 - }, - { code:0x03A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A6 - ,simpleLowerCaseMapping:0x03C6 - ,simpleTitleCaseMapping:0x03A6 - }, - { code:0x03A7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A7 - ,simpleLowerCaseMapping:0x03C7 - ,simpleTitleCaseMapping:0x03A7 - }, - { code:0x03A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A8 - ,simpleLowerCaseMapping:0x03C8 - ,simpleTitleCaseMapping:0x03A8 - }, - { code:0x03A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03A9 - ,simpleLowerCaseMapping:0x03C9 - ,simpleTitleCaseMapping:0x03A9 - }, - { code:0x03AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03AA - ,simpleLowerCaseMapping:0x03CA - ,simpleTitleCaseMapping:0x03AA - }, - { code:0x03AB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03AB - ,simpleLowerCaseMapping:0x03CB - ,simpleTitleCaseMapping:0x03AB - }, - { code:0x03AC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0386 - ,simpleLowerCaseMapping:0x03AC - ,simpleTitleCaseMapping:0x0386 - }, - { code:0x03AD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0388 - ,simpleLowerCaseMapping:0x03AD - ,simpleTitleCaseMapping:0x0388 - }, - { code:0x03AE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0389 - ,simpleLowerCaseMapping:0x03AE - ,simpleTitleCaseMapping:0x0389 - }, - { code:0x03AF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x038A - ,simpleLowerCaseMapping:0x03AF - ,simpleTitleCaseMapping:0x038A - }, - { code:0x03B0 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x03B0 - ,simpleLowerCaseMapping:0x03B0 - ,simpleTitleCaseMapping:0x03B0 - }, - { code:0x03B1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0391 - ,simpleLowerCaseMapping:0x03B1 - ,simpleTitleCaseMapping:0x0391 - }, - { code:0x03B2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0392 - ,simpleLowerCaseMapping:0x03B2 - ,simpleTitleCaseMapping:0x0392 - }, - { code:0x03B3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0393 - ,simpleLowerCaseMapping:0x03B3 - ,simpleTitleCaseMapping:0x0393 - }, - { code:0x03B4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0394 - ,simpleLowerCaseMapping:0x03B4 - ,simpleTitleCaseMapping:0x0394 - }, - { code:0x03B5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0395 - ,simpleLowerCaseMapping:0x03B5 - ,simpleTitleCaseMapping:0x0395 - }, - { code:0x03B6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0396 - ,simpleLowerCaseMapping:0x03B6 - ,simpleTitleCaseMapping:0x0396 - }, - { code:0x03B7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0397 - ,simpleLowerCaseMapping:0x03B7 - ,simpleTitleCaseMapping:0x0397 - }, - { code:0x03B8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0398 - ,simpleLowerCaseMapping:0x03B8 - ,simpleTitleCaseMapping:0x0398 - }, - { code:0x03B9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0399 - ,simpleLowerCaseMapping:0x03B9 - ,simpleTitleCaseMapping:0x0399 - }, - { code:0x03BA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039A - ,simpleLowerCaseMapping:0x03BA - ,simpleTitleCaseMapping:0x039A - }, - { code:0x03BB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039B - ,simpleLowerCaseMapping:0x03BB - ,simpleTitleCaseMapping:0x039B - }, - { code:0x03BC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039C - ,simpleLowerCaseMapping:0x03BC - ,simpleTitleCaseMapping:0x039C - }, - { code:0x03BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039D - ,simpleLowerCaseMapping:0x03BD - ,simpleTitleCaseMapping:0x039D - }, - { code:0x03BE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039E - ,simpleLowerCaseMapping:0x03BE - ,simpleTitleCaseMapping:0x039E - }, - { code:0x03BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039F - ,simpleLowerCaseMapping:0x03BF - ,simpleTitleCaseMapping:0x039F - }, - { code:0x03C0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A0 - ,simpleLowerCaseMapping:0x03C0 - ,simpleTitleCaseMapping:0x03A0 - }, - { code:0x03C1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A1 - ,simpleLowerCaseMapping:0x03C1 - ,simpleTitleCaseMapping:0x03A1 - }, - { code:0x03C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A3 - ,simpleLowerCaseMapping:0x03C2 - ,simpleTitleCaseMapping:0x03A3 - }, - { code:0x03C3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A3 - ,simpleLowerCaseMapping:0x03C3 - ,simpleTitleCaseMapping:0x03A3 - }, - { code:0x03C4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A4 - ,simpleLowerCaseMapping:0x03C4 - ,simpleTitleCaseMapping:0x03A4 - }, - { code:0x03C5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A5 - ,simpleLowerCaseMapping:0x03C5 - ,simpleTitleCaseMapping:0x03A5 - }, - { code:0x03C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A6 - ,simpleLowerCaseMapping:0x03C6 - ,simpleTitleCaseMapping:0x03A6 - }, - { code:0x03C7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A7 - ,simpleLowerCaseMapping:0x03C7 - ,simpleTitleCaseMapping:0x03A7 - }, - { code:0x03C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A8 - ,simpleLowerCaseMapping:0x03C8 - ,simpleTitleCaseMapping:0x03A8 - }, - { code:0x03C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A9 - ,simpleLowerCaseMapping:0x03C9 - ,simpleTitleCaseMapping:0x03A9 - }, - { code:0x03CA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03AA - ,simpleLowerCaseMapping:0x03CA - ,simpleTitleCaseMapping:0x03AA - }, - { code:0x03CB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03AB - ,simpleLowerCaseMapping:0x03CB - ,simpleTitleCaseMapping:0x03AB - }, - { code:0x03CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x038C - ,simpleLowerCaseMapping:0x03CC - ,simpleTitleCaseMapping:0x038C - }, - { code:0x03CD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x038E - ,simpleLowerCaseMapping:0x03CD - ,simpleTitleCaseMapping:0x038E - }, - { code:0x03CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x038F - ,simpleLowerCaseMapping:0x03CE - ,simpleTitleCaseMapping:0x038F - }, - { code:0x03D0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0392 - ,simpleLowerCaseMapping:0x03D0 - ,simpleTitleCaseMapping:0x0392 - }, - { code:0x03D1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0398 - ,simpleLowerCaseMapping:0x03D1 - ,simpleTitleCaseMapping:0x0398 - }, - { code:0x03D2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03D2 - ,simpleLowerCaseMapping:0x03D2 - ,simpleTitleCaseMapping:0x03D2 - }, - { code:0x03D3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03D3 - ,simpleLowerCaseMapping:0x03D3 - ,simpleTitleCaseMapping:0x03D3 - }, - { code:0x03D4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03D4 - ,simpleLowerCaseMapping:0x03D4 - ,simpleTitleCaseMapping:0x03D4 - }, - { code:0x03D5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A6 - ,simpleLowerCaseMapping:0x03D5 - ,simpleTitleCaseMapping:0x03A6 - }, - { code:0x03D6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A0 - ,simpleLowerCaseMapping:0x03D6 - ,simpleTitleCaseMapping:0x03A0 - }, - { code:0x03D7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03D7 - ,simpleLowerCaseMapping:0x03D7 - ,simpleTitleCaseMapping:0x03D7 - }, - { code:0x03D8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03D8 - ,simpleLowerCaseMapping:0x03D9 - ,simpleTitleCaseMapping:0x03D8 - }, - { code:0x03D9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03D8 - ,simpleLowerCaseMapping:0x03D9 - ,simpleTitleCaseMapping:0x03D8 - }, - { code:0x03DA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03DA - ,simpleLowerCaseMapping:0x03DB - ,simpleTitleCaseMapping:0x03DA - }, - { code:0x03DB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03DA - ,simpleLowerCaseMapping:0x03DB - ,simpleTitleCaseMapping:0x03DA - }, - { code:0x03DC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03DC - ,simpleLowerCaseMapping:0x03DD - ,simpleTitleCaseMapping:0x03DC - }, - { code:0x03DD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03DC - ,simpleLowerCaseMapping:0x03DD - ,simpleTitleCaseMapping:0x03DC - }, - { code:0x03DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03DE - ,simpleLowerCaseMapping:0x03DF - ,simpleTitleCaseMapping:0x03DE - }, - { code:0x03DF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03DE - ,simpleLowerCaseMapping:0x03DF - ,simpleTitleCaseMapping:0x03DE - }, - { code:0x03E0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03E0 - ,simpleLowerCaseMapping:0x03E1 - ,simpleTitleCaseMapping:0x03E0 - }, - { code:0x03E1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03E0 - ,simpleLowerCaseMapping:0x03E1 - ,simpleTitleCaseMapping:0x03E0 - }, - { code:0x03E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03E2 - ,simpleLowerCaseMapping:0x03E3 - ,simpleTitleCaseMapping:0x03E2 - }, - { code:0x03E3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03E2 - ,simpleLowerCaseMapping:0x03E3 - ,simpleTitleCaseMapping:0x03E2 - }, - { code:0x03E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03E4 - ,simpleLowerCaseMapping:0x03E5 - ,simpleTitleCaseMapping:0x03E4 - }, - { code:0x03E5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03E4 - ,simpleLowerCaseMapping:0x03E5 - ,simpleTitleCaseMapping:0x03E4 - }, - { code:0x03E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03E6 - ,simpleLowerCaseMapping:0x03E7 - ,simpleTitleCaseMapping:0x03E6 - }, - { code:0x03E7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03E6 - ,simpleLowerCaseMapping:0x03E7 - ,simpleTitleCaseMapping:0x03E6 - }, - { code:0x03E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03E8 - ,simpleLowerCaseMapping:0x03E9 - ,simpleTitleCaseMapping:0x03E8 - }, - { code:0x03E9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03E8 - ,simpleLowerCaseMapping:0x03E9 - ,simpleTitleCaseMapping:0x03E8 - }, - { code:0x03EA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03EA - ,simpleLowerCaseMapping:0x03EB - ,simpleTitleCaseMapping:0x03EA - }, - { code:0x03EB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03EA - ,simpleLowerCaseMapping:0x03EB - ,simpleTitleCaseMapping:0x03EA - }, - { code:0x03EC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03EC - ,simpleLowerCaseMapping:0x03ED - ,simpleTitleCaseMapping:0x03EC - }, - { code:0x03ED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03EC - ,simpleLowerCaseMapping:0x03ED - ,simpleTitleCaseMapping:0x03EC - }, - { code:0x03EE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03EE - ,simpleLowerCaseMapping:0x03EF - ,simpleTitleCaseMapping:0x03EE - }, - { code:0x03EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03EE - ,simpleLowerCaseMapping:0x03EF - ,simpleTitleCaseMapping:0x03EE - }, - { code:0x03F0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x039A - ,simpleLowerCaseMapping:0x03F0 - ,simpleTitleCaseMapping:0x039A - }, - { code:0x03F1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03A1 - ,simpleLowerCaseMapping:0x03F1 - ,simpleTitleCaseMapping:0x03A1 - }, - { code:0x03F2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03F9 - ,simpleLowerCaseMapping:0x03F2 - ,simpleTitleCaseMapping:0x03F9 - }, - { code:0x03F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03F3 - ,simpleLowerCaseMapping:0x03F3 - ,simpleTitleCaseMapping:0x03F3 - }, - { code:0x03F4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03F4 - ,simpleLowerCaseMapping:0x03B8 - ,simpleTitleCaseMapping:0x03F4 - }, - { code:0x03F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0395 - ,simpleLowerCaseMapping:0x03F5 - ,simpleTitleCaseMapping:0x0395 - }, - { code:0x03F6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x03F6 - ,simpleLowerCaseMapping:0x03F6 - ,simpleTitleCaseMapping:0x03F6 - }, - { code:0x03F7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03F7 - ,simpleLowerCaseMapping:0x03F8 - ,simpleTitleCaseMapping:0x03F7 - }, - { code:0x03F8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03F7 - ,simpleLowerCaseMapping:0x03F8 - ,simpleTitleCaseMapping:0x03F7 - }, - { code:0x03F9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03F9 - ,simpleLowerCaseMapping:0x03F2 - ,simpleTitleCaseMapping:0x03F9 - }, - { code:0x03FA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03FA - ,simpleLowerCaseMapping:0x03FB - ,simpleTitleCaseMapping:0x03FA - }, - { code:0x03FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03FA - ,simpleLowerCaseMapping:0x03FB - ,simpleTitleCaseMapping:0x03FA - }, - { code:0x03FC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x03FC - ,simpleLowerCaseMapping:0x03FC - ,simpleTitleCaseMapping:0x03FC - }, - { code:0x03FD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03FD - ,simpleLowerCaseMapping:0x037B - ,simpleTitleCaseMapping:0x03FD - }, - { code:0x03FE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03FE - ,simpleLowerCaseMapping:0x037C - ,simpleTitleCaseMapping:0x03FE - }, - { code:0x03FF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x03FF - ,simpleLowerCaseMapping:0x037D - ,simpleTitleCaseMapping:0x03FF - }, - { code:0x0400 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0400 - ,simpleLowerCaseMapping:0x0450 - ,simpleTitleCaseMapping:0x0400 - }, - { code:0x0401 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0401 - ,simpleLowerCaseMapping:0x0451 - ,simpleTitleCaseMapping:0x0401 - }, - { code:0x0402 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0402 - ,simpleLowerCaseMapping:0x0452 - ,simpleTitleCaseMapping:0x0402 - }, - { code:0x0403 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0403 - ,simpleLowerCaseMapping:0x0453 - ,simpleTitleCaseMapping:0x0403 - }, - { code:0x0404 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0404 - ,simpleLowerCaseMapping:0x0454 - ,simpleTitleCaseMapping:0x0404 - }, - { code:0x0405 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0405 - ,simpleLowerCaseMapping:0x0455 - ,simpleTitleCaseMapping:0x0405 - }, - { code:0x0406 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0406 - ,simpleLowerCaseMapping:0x0456 - ,simpleTitleCaseMapping:0x0406 - }, - { code:0x0407 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0407 - ,simpleLowerCaseMapping:0x0457 - ,simpleTitleCaseMapping:0x0407 - }, - { code:0x0408 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0408 - ,simpleLowerCaseMapping:0x0458 - ,simpleTitleCaseMapping:0x0408 - }, - { code:0x0409 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0409 - ,simpleLowerCaseMapping:0x0459 - ,simpleTitleCaseMapping:0x0409 - }, - { code:0x040A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040A - ,simpleLowerCaseMapping:0x045A - ,simpleTitleCaseMapping:0x040A - }, - { code:0x040B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040B - ,simpleLowerCaseMapping:0x045B - ,simpleTitleCaseMapping:0x040B - }, - { code:0x040C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040C - ,simpleLowerCaseMapping:0x045C - ,simpleTitleCaseMapping:0x040C - }, - { code:0x040D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040D - ,simpleLowerCaseMapping:0x045D - ,simpleTitleCaseMapping:0x040D - }, - { code:0x040E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040E - ,simpleLowerCaseMapping:0x045E - ,simpleTitleCaseMapping:0x040E - }, - { code:0x040F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x040F - ,simpleLowerCaseMapping:0x045F - ,simpleTitleCaseMapping:0x040F - }, - { code:0x0410 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0410 - ,simpleLowerCaseMapping:0x0430 - ,simpleTitleCaseMapping:0x0410 - }, - { code:0x0411 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0411 - ,simpleLowerCaseMapping:0x0431 - ,simpleTitleCaseMapping:0x0411 - }, - { code:0x0412 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0412 - ,simpleLowerCaseMapping:0x0432 - ,simpleTitleCaseMapping:0x0412 - }, - { code:0x0413 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0413 - ,simpleLowerCaseMapping:0x0433 - ,simpleTitleCaseMapping:0x0413 - }, - { code:0x0414 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0414 - ,simpleLowerCaseMapping:0x0434 - ,simpleTitleCaseMapping:0x0414 - }, - { code:0x0415 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0415 - ,simpleLowerCaseMapping:0x0435 - ,simpleTitleCaseMapping:0x0415 - }, - { code:0x0416 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0416 - ,simpleLowerCaseMapping:0x0436 - ,simpleTitleCaseMapping:0x0416 - }, - { code:0x0417 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0417 - ,simpleLowerCaseMapping:0x0437 - ,simpleTitleCaseMapping:0x0417 - }, - { code:0x0418 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0418 - ,simpleLowerCaseMapping:0x0438 - ,simpleTitleCaseMapping:0x0418 - }, - { code:0x0419 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0419 - ,simpleLowerCaseMapping:0x0439 - ,simpleTitleCaseMapping:0x0419 - }, - { code:0x041A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041A - ,simpleLowerCaseMapping:0x043A - ,simpleTitleCaseMapping:0x041A - }, - { code:0x041B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041B - ,simpleLowerCaseMapping:0x043B - ,simpleTitleCaseMapping:0x041B - }, - { code:0x041C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041C - ,simpleLowerCaseMapping:0x043C - ,simpleTitleCaseMapping:0x041C - }, - { code:0x041D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041D - ,simpleLowerCaseMapping:0x043D - ,simpleTitleCaseMapping:0x041D - }, - { code:0x041E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041E - ,simpleLowerCaseMapping:0x043E - ,simpleTitleCaseMapping:0x041E - }, - { code:0x041F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x041F - ,simpleLowerCaseMapping:0x043F - ,simpleTitleCaseMapping:0x041F - }, - { code:0x0420 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0420 - ,simpleLowerCaseMapping:0x0440 - ,simpleTitleCaseMapping:0x0420 - }, - { code:0x0421 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0421 - ,simpleLowerCaseMapping:0x0441 - ,simpleTitleCaseMapping:0x0421 - }, - { code:0x0422 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0422 - ,simpleLowerCaseMapping:0x0442 - ,simpleTitleCaseMapping:0x0422 - }, - { code:0x0423 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0423 - ,simpleLowerCaseMapping:0x0443 - ,simpleTitleCaseMapping:0x0423 - }, - { code:0x0424 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0424 - ,simpleLowerCaseMapping:0x0444 - ,simpleTitleCaseMapping:0x0424 - }, - { code:0x0425 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0425 - ,simpleLowerCaseMapping:0x0445 - ,simpleTitleCaseMapping:0x0425 - }, - { code:0x0426 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0426 - ,simpleLowerCaseMapping:0x0446 - ,simpleTitleCaseMapping:0x0426 - }, - { code:0x0427 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0427 - ,simpleLowerCaseMapping:0x0447 - ,simpleTitleCaseMapping:0x0427 - }, - { code:0x0428 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0428 - ,simpleLowerCaseMapping:0x0448 - ,simpleTitleCaseMapping:0x0428 - }, - { code:0x0429 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0429 - ,simpleLowerCaseMapping:0x0449 - ,simpleTitleCaseMapping:0x0429 - }, - { code:0x042A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042A - ,simpleLowerCaseMapping:0x044A - ,simpleTitleCaseMapping:0x042A - }, - { code:0x042B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042B - ,simpleLowerCaseMapping:0x044B - ,simpleTitleCaseMapping:0x042B - }, - { code:0x042C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042C - ,simpleLowerCaseMapping:0x044C - ,simpleTitleCaseMapping:0x042C - }, - { code:0x042D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042D - ,simpleLowerCaseMapping:0x044D - ,simpleTitleCaseMapping:0x042D - }, - { code:0x042E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042E - ,simpleLowerCaseMapping:0x044E - ,simpleTitleCaseMapping:0x042E - }, - { code:0x042F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x042F - ,simpleLowerCaseMapping:0x044F - ,simpleTitleCaseMapping:0x042F - }, - { code:0x0430 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0410 - ,simpleLowerCaseMapping:0x0430 - ,simpleTitleCaseMapping:0x0410 - }, - { code:0x0431 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0411 - ,simpleLowerCaseMapping:0x0431 - ,simpleTitleCaseMapping:0x0411 - }, - { code:0x0432 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0412 - ,simpleLowerCaseMapping:0x0432 - ,simpleTitleCaseMapping:0x0412 - }, - { code:0x0433 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0413 - ,simpleLowerCaseMapping:0x0433 - ,simpleTitleCaseMapping:0x0413 - }, - { code:0x0434 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0414 - ,simpleLowerCaseMapping:0x0434 - ,simpleTitleCaseMapping:0x0414 - }, - { code:0x0435 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0415 - ,simpleLowerCaseMapping:0x0435 - ,simpleTitleCaseMapping:0x0415 - }, - { code:0x0436 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0416 - ,simpleLowerCaseMapping:0x0436 - ,simpleTitleCaseMapping:0x0416 - }, - { code:0x0437 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0417 - ,simpleLowerCaseMapping:0x0437 - ,simpleTitleCaseMapping:0x0417 - }, - { code:0x0438 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0418 - ,simpleLowerCaseMapping:0x0438 - ,simpleTitleCaseMapping:0x0418 - }, - { code:0x0439 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0419 - ,simpleLowerCaseMapping:0x0439 - ,simpleTitleCaseMapping:0x0419 - }, - { code:0x043A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041A - ,simpleLowerCaseMapping:0x043A - ,simpleTitleCaseMapping:0x041A - }, - { code:0x043B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041B - ,simpleLowerCaseMapping:0x043B - ,simpleTitleCaseMapping:0x041B - }, - { code:0x043C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041C - ,simpleLowerCaseMapping:0x043C - ,simpleTitleCaseMapping:0x041C - }, - { code:0x043D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041D - ,simpleLowerCaseMapping:0x043D - ,simpleTitleCaseMapping:0x041D - }, - { code:0x043E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041E - ,simpleLowerCaseMapping:0x043E - ,simpleTitleCaseMapping:0x041E - }, - { code:0x043F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x041F - ,simpleLowerCaseMapping:0x043F - ,simpleTitleCaseMapping:0x041F - }, - { code:0x0440 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0420 - ,simpleLowerCaseMapping:0x0440 - ,simpleTitleCaseMapping:0x0420 - }, - { code:0x0441 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0421 - ,simpleLowerCaseMapping:0x0441 - ,simpleTitleCaseMapping:0x0421 - }, - { code:0x0442 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0422 - ,simpleLowerCaseMapping:0x0442 - ,simpleTitleCaseMapping:0x0422 - }, - { code:0x0443 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0423 - ,simpleLowerCaseMapping:0x0443 - ,simpleTitleCaseMapping:0x0423 - }, - { code:0x0444 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0424 - ,simpleLowerCaseMapping:0x0444 - ,simpleTitleCaseMapping:0x0424 - }, - { code:0x0445 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0425 - ,simpleLowerCaseMapping:0x0445 - ,simpleTitleCaseMapping:0x0425 - }, - { code:0x0446 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0426 - ,simpleLowerCaseMapping:0x0446 - ,simpleTitleCaseMapping:0x0426 - }, - { code:0x0447 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0427 - ,simpleLowerCaseMapping:0x0447 - ,simpleTitleCaseMapping:0x0427 - }, - { code:0x0448 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0428 - ,simpleLowerCaseMapping:0x0448 - ,simpleTitleCaseMapping:0x0428 - }, - { code:0x0449 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0429 - ,simpleLowerCaseMapping:0x0449 - ,simpleTitleCaseMapping:0x0429 - }, - { code:0x044A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042A - ,simpleLowerCaseMapping:0x044A - ,simpleTitleCaseMapping:0x042A - }, - { code:0x044B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042B - ,simpleLowerCaseMapping:0x044B - ,simpleTitleCaseMapping:0x042B - }, - { code:0x044C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042C - ,simpleLowerCaseMapping:0x044C - ,simpleTitleCaseMapping:0x042C - }, - { code:0x044D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042D - ,simpleLowerCaseMapping:0x044D - ,simpleTitleCaseMapping:0x042D - }, - { code:0x044E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042E - ,simpleLowerCaseMapping:0x044E - ,simpleTitleCaseMapping:0x042E - }, - { code:0x044F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x042F - ,simpleLowerCaseMapping:0x044F - ,simpleTitleCaseMapping:0x042F - }, - { code:0x0450 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0400 - ,simpleLowerCaseMapping:0x0450 - ,simpleTitleCaseMapping:0x0400 - }, - { code:0x0451 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0401 - ,simpleLowerCaseMapping:0x0451 - ,simpleTitleCaseMapping:0x0401 - }, - { code:0x0452 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0402 - ,simpleLowerCaseMapping:0x0452 - ,simpleTitleCaseMapping:0x0402 - }, - { code:0x0453 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0403 - ,simpleLowerCaseMapping:0x0453 - ,simpleTitleCaseMapping:0x0403 - }, - { code:0x0454 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0404 - ,simpleLowerCaseMapping:0x0454 - ,simpleTitleCaseMapping:0x0404 - }, - { code:0x0455 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0405 - ,simpleLowerCaseMapping:0x0455 - ,simpleTitleCaseMapping:0x0405 - }, - { code:0x0456 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0406 - ,simpleLowerCaseMapping:0x0456 - ,simpleTitleCaseMapping:0x0406 - }, - { code:0x0457 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0407 - ,simpleLowerCaseMapping:0x0457 - ,simpleTitleCaseMapping:0x0407 - }, - { code:0x0458 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0408 - ,simpleLowerCaseMapping:0x0458 - ,simpleTitleCaseMapping:0x0408 - }, - { code:0x0459 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0409 - ,simpleLowerCaseMapping:0x0459 - ,simpleTitleCaseMapping:0x0409 - }, - { code:0x045A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040A - ,simpleLowerCaseMapping:0x045A - ,simpleTitleCaseMapping:0x040A - }, - { code:0x045B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040B - ,simpleLowerCaseMapping:0x045B - ,simpleTitleCaseMapping:0x040B - }, - { code:0x045C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040C - ,simpleLowerCaseMapping:0x045C - ,simpleTitleCaseMapping:0x040C - }, - { code:0x045D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040D - ,simpleLowerCaseMapping:0x045D - ,simpleTitleCaseMapping:0x040D - }, - { code:0x045E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040E - ,simpleLowerCaseMapping:0x045E - ,simpleTitleCaseMapping:0x040E - }, - { code:0x045F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x040F - ,simpleLowerCaseMapping:0x045F - ,simpleTitleCaseMapping:0x040F - }, - { code:0x0460 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0460 - ,simpleLowerCaseMapping:0x0461 - ,simpleTitleCaseMapping:0x0460 - }, - { code:0x0461 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0460 - ,simpleLowerCaseMapping:0x0461 - ,simpleTitleCaseMapping:0x0460 - }, - { code:0x0462 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0462 - ,simpleLowerCaseMapping:0x0463 - ,simpleTitleCaseMapping:0x0462 - }, - { code:0x0463 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0462 - ,simpleLowerCaseMapping:0x0463 - ,simpleTitleCaseMapping:0x0462 - }, - { code:0x0464 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0464 - ,simpleLowerCaseMapping:0x0465 - ,simpleTitleCaseMapping:0x0464 - }, - { code:0x0465 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0464 - ,simpleLowerCaseMapping:0x0465 - ,simpleTitleCaseMapping:0x0464 - }, - { code:0x0466 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0466 - ,simpleLowerCaseMapping:0x0467 - ,simpleTitleCaseMapping:0x0466 - }, - { code:0x0467 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0466 - ,simpleLowerCaseMapping:0x0467 - ,simpleTitleCaseMapping:0x0466 - }, - { code:0x0468 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0468 - ,simpleLowerCaseMapping:0x0469 - ,simpleTitleCaseMapping:0x0468 - }, - { code:0x0469 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0468 - ,simpleLowerCaseMapping:0x0469 - ,simpleTitleCaseMapping:0x0468 - }, - { code:0x046A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x046A - ,simpleLowerCaseMapping:0x046B - ,simpleTitleCaseMapping:0x046A - }, - { code:0x046B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x046A - ,simpleLowerCaseMapping:0x046B - ,simpleTitleCaseMapping:0x046A - }, - { code:0x046C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x046C - ,simpleLowerCaseMapping:0x046D - ,simpleTitleCaseMapping:0x046C - }, - { code:0x046D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x046C - ,simpleLowerCaseMapping:0x046D - ,simpleTitleCaseMapping:0x046C - }, - { code:0x046E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x046E - ,simpleLowerCaseMapping:0x046F - ,simpleTitleCaseMapping:0x046E - }, - { code:0x046F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x046E - ,simpleLowerCaseMapping:0x046F - ,simpleTitleCaseMapping:0x046E - }, - { code:0x0470 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0470 - ,simpleLowerCaseMapping:0x0471 - ,simpleTitleCaseMapping:0x0470 - }, - { code:0x0471 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0470 - ,simpleLowerCaseMapping:0x0471 - ,simpleTitleCaseMapping:0x0470 - }, - { code:0x0472 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0472 - ,simpleLowerCaseMapping:0x0473 - ,simpleTitleCaseMapping:0x0472 - }, - { code:0x0473 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0472 - ,simpleLowerCaseMapping:0x0473 - ,simpleTitleCaseMapping:0x0472 - }, - { code:0x0474 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0474 - ,simpleLowerCaseMapping:0x0475 - ,simpleTitleCaseMapping:0x0474 - }, - { code:0x0475 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0474 - ,simpleLowerCaseMapping:0x0475 - ,simpleTitleCaseMapping:0x0474 - }, - { code:0x0476 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0476 - ,simpleLowerCaseMapping:0x0477 - ,simpleTitleCaseMapping:0x0476 - }, - { code:0x0477 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0476 - ,simpleLowerCaseMapping:0x0477 - ,simpleTitleCaseMapping:0x0476 - }, - { code:0x0478 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0478 - ,simpleLowerCaseMapping:0x0479 - ,simpleTitleCaseMapping:0x0478 - }, - { code:0x0479 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0478 - ,simpleLowerCaseMapping:0x0479 - ,simpleTitleCaseMapping:0x0478 - }, - { code:0x047A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x047A - ,simpleLowerCaseMapping:0x047B - ,simpleTitleCaseMapping:0x047A - }, - { code:0x047B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x047A - ,simpleLowerCaseMapping:0x047B - ,simpleTitleCaseMapping:0x047A - }, - { code:0x047C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x047C - ,simpleLowerCaseMapping:0x047D - ,simpleTitleCaseMapping:0x047C - }, - { code:0x047D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x047C - ,simpleLowerCaseMapping:0x047D - ,simpleTitleCaseMapping:0x047C - }, - { code:0x047E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x047E - ,simpleLowerCaseMapping:0x047F - ,simpleTitleCaseMapping:0x047E - }, - { code:0x047F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x047E - ,simpleLowerCaseMapping:0x047F - ,simpleTitleCaseMapping:0x047E - }, - { code:0x0480 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0480 - ,simpleLowerCaseMapping:0x0481 - ,simpleTitleCaseMapping:0x0480 - }, - { code:0x0481 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0480 - ,simpleLowerCaseMapping:0x0481 - ,simpleTitleCaseMapping:0x0480 - }, - { code:0x0482 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0482 - ,simpleLowerCaseMapping:0x0482 - ,simpleTitleCaseMapping:0x0482 - }, - { code:0x0483 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0483 - ,simpleLowerCaseMapping:0x0483 - ,simpleTitleCaseMapping:0x0483 - }, - { code:0x0484 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0484 - ,simpleLowerCaseMapping:0x0484 - ,simpleTitleCaseMapping:0x0484 - }, - { code:0x0485 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0485 - ,simpleLowerCaseMapping:0x0485 - ,simpleTitleCaseMapping:0x0485 - }, - { code:0x0486 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0486 - ,simpleLowerCaseMapping:0x0486 - ,simpleTitleCaseMapping:0x0486 - }, - { code:0x0488 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x0488 - ,simpleLowerCaseMapping:0x0488 - ,simpleTitleCaseMapping:0x0488 - }, - { code:0x0489 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x0489 - ,simpleLowerCaseMapping:0x0489 - ,simpleTitleCaseMapping:0x0489 - }, - { code:0x048A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x048A - ,simpleLowerCaseMapping:0x048B - ,simpleTitleCaseMapping:0x048A - }, - { code:0x048B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x048A - ,simpleLowerCaseMapping:0x048B - ,simpleTitleCaseMapping:0x048A - }, - { code:0x048C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x048C - ,simpleLowerCaseMapping:0x048D - ,simpleTitleCaseMapping:0x048C - }, - { code:0x048D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x048C - ,simpleLowerCaseMapping:0x048D - ,simpleTitleCaseMapping:0x048C - }, - { code:0x048E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x048E - ,simpleLowerCaseMapping:0x048F - ,simpleTitleCaseMapping:0x048E - }, - { code:0x048F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x048E - ,simpleLowerCaseMapping:0x048F - ,simpleTitleCaseMapping:0x048E - }, - { code:0x0490 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0490 - ,simpleLowerCaseMapping:0x0491 - ,simpleTitleCaseMapping:0x0490 - }, - { code:0x0491 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0490 - ,simpleLowerCaseMapping:0x0491 - ,simpleTitleCaseMapping:0x0490 - }, - { code:0x0492 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0492 - ,simpleLowerCaseMapping:0x0493 - ,simpleTitleCaseMapping:0x0492 - }, - { code:0x0493 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0492 - ,simpleLowerCaseMapping:0x0493 - ,simpleTitleCaseMapping:0x0492 - }, - { code:0x0494 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0494 - ,simpleLowerCaseMapping:0x0495 - ,simpleTitleCaseMapping:0x0494 - }, - { code:0x0495 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0494 - ,simpleLowerCaseMapping:0x0495 - ,simpleTitleCaseMapping:0x0494 - }, - { code:0x0496 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0496 - ,simpleLowerCaseMapping:0x0497 - ,simpleTitleCaseMapping:0x0496 - }, - { code:0x0497 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0496 - ,simpleLowerCaseMapping:0x0497 - ,simpleTitleCaseMapping:0x0496 - }, - { code:0x0498 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0498 - ,simpleLowerCaseMapping:0x0499 - ,simpleTitleCaseMapping:0x0498 - }, - { code:0x0499 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0498 - ,simpleLowerCaseMapping:0x0499 - ,simpleTitleCaseMapping:0x0498 - }, - { code:0x049A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x049A - ,simpleLowerCaseMapping:0x049B - ,simpleTitleCaseMapping:0x049A - }, - { code:0x049B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x049A - ,simpleLowerCaseMapping:0x049B - ,simpleTitleCaseMapping:0x049A - }, - { code:0x049C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x049C - ,simpleLowerCaseMapping:0x049D - ,simpleTitleCaseMapping:0x049C - }, - { code:0x049D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x049C - ,simpleLowerCaseMapping:0x049D - ,simpleTitleCaseMapping:0x049C - }, - { code:0x049E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x049E - ,simpleLowerCaseMapping:0x049F - ,simpleTitleCaseMapping:0x049E - }, - { code:0x049F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x049E - ,simpleLowerCaseMapping:0x049F - ,simpleTitleCaseMapping:0x049E - }, - { code:0x04A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04A0 - ,simpleLowerCaseMapping:0x04A1 - ,simpleTitleCaseMapping:0x04A0 - }, - { code:0x04A1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04A0 - ,simpleLowerCaseMapping:0x04A1 - ,simpleTitleCaseMapping:0x04A0 - }, - { code:0x04A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04A2 - ,simpleLowerCaseMapping:0x04A3 - ,simpleTitleCaseMapping:0x04A2 - }, - { code:0x04A3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04A2 - ,simpleLowerCaseMapping:0x04A3 - ,simpleTitleCaseMapping:0x04A2 - }, - { code:0x04A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04A4 - ,simpleLowerCaseMapping:0x04A5 - ,simpleTitleCaseMapping:0x04A4 - }, - { code:0x04A5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04A4 - ,simpleLowerCaseMapping:0x04A5 - ,simpleTitleCaseMapping:0x04A4 - }, - { code:0x04A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04A6 - ,simpleLowerCaseMapping:0x04A7 - ,simpleTitleCaseMapping:0x04A6 - }, - { code:0x04A7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04A6 - ,simpleLowerCaseMapping:0x04A7 - ,simpleTitleCaseMapping:0x04A6 - }, - { code:0x04A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04A8 - ,simpleLowerCaseMapping:0x04A9 - ,simpleTitleCaseMapping:0x04A8 - }, - { code:0x04A9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04A8 - ,simpleLowerCaseMapping:0x04A9 - ,simpleTitleCaseMapping:0x04A8 - }, - { code:0x04AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04AA - ,simpleLowerCaseMapping:0x04AB - ,simpleTitleCaseMapping:0x04AA - }, - { code:0x04AB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04AA - ,simpleLowerCaseMapping:0x04AB - ,simpleTitleCaseMapping:0x04AA - }, - { code:0x04AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04AC - ,simpleLowerCaseMapping:0x04AD - ,simpleTitleCaseMapping:0x04AC - }, - { code:0x04AD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04AC - ,simpleLowerCaseMapping:0x04AD - ,simpleTitleCaseMapping:0x04AC - }, - { code:0x04AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04AE - ,simpleLowerCaseMapping:0x04AF - ,simpleTitleCaseMapping:0x04AE - }, - { code:0x04AF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04AE - ,simpleLowerCaseMapping:0x04AF - ,simpleTitleCaseMapping:0x04AE - }, - { code:0x04B0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04B0 - ,simpleLowerCaseMapping:0x04B1 - ,simpleTitleCaseMapping:0x04B0 - }, - { code:0x04B1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04B0 - ,simpleLowerCaseMapping:0x04B1 - ,simpleTitleCaseMapping:0x04B0 - }, - { code:0x04B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04B2 - ,simpleLowerCaseMapping:0x04B3 - ,simpleTitleCaseMapping:0x04B2 - }, - { code:0x04B3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04B2 - ,simpleLowerCaseMapping:0x04B3 - ,simpleTitleCaseMapping:0x04B2 - }, - { code:0x04B4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04B4 - ,simpleLowerCaseMapping:0x04B5 - ,simpleTitleCaseMapping:0x04B4 - }, - { code:0x04B5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04B4 - ,simpleLowerCaseMapping:0x04B5 - ,simpleTitleCaseMapping:0x04B4 - }, - { code:0x04B6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04B6 - ,simpleLowerCaseMapping:0x04B7 - ,simpleTitleCaseMapping:0x04B6 - }, - { code:0x04B7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04B6 - ,simpleLowerCaseMapping:0x04B7 - ,simpleTitleCaseMapping:0x04B6 - }, - { code:0x04B8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04B8 - ,simpleLowerCaseMapping:0x04B9 - ,simpleTitleCaseMapping:0x04B8 - }, - { code:0x04B9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04B8 - ,simpleLowerCaseMapping:0x04B9 - ,simpleTitleCaseMapping:0x04B8 - }, - { code:0x04BA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04BA - ,simpleLowerCaseMapping:0x04BB - ,simpleTitleCaseMapping:0x04BA - }, - { code:0x04BB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04BA - ,simpleLowerCaseMapping:0x04BB - ,simpleTitleCaseMapping:0x04BA - }, - { code:0x04BC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04BC - ,simpleLowerCaseMapping:0x04BD - ,simpleTitleCaseMapping:0x04BC - }, - { code:0x04BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04BC - ,simpleLowerCaseMapping:0x04BD - ,simpleTitleCaseMapping:0x04BC - }, - { code:0x04BE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04BE - ,simpleLowerCaseMapping:0x04BF - ,simpleTitleCaseMapping:0x04BE - }, - { code:0x04BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04BE - ,simpleLowerCaseMapping:0x04BF - ,simpleTitleCaseMapping:0x04BE - }, - { code:0x04C0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C0 - ,simpleLowerCaseMapping:0x04CF - ,simpleTitleCaseMapping:0x04C0 - }, - { code:0x04C1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C1 - ,simpleLowerCaseMapping:0x04C2 - ,simpleTitleCaseMapping:0x04C1 - }, - { code:0x04C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C1 - ,simpleLowerCaseMapping:0x04C2 - ,simpleTitleCaseMapping:0x04C1 - }, - { code:0x04C3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C3 - ,simpleLowerCaseMapping:0x04C4 - ,simpleTitleCaseMapping:0x04C3 - }, - { code:0x04C4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C3 - ,simpleLowerCaseMapping:0x04C4 - ,simpleTitleCaseMapping:0x04C3 - }, - { code:0x04C5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C5 - ,simpleLowerCaseMapping:0x04C6 - ,simpleTitleCaseMapping:0x04C5 - }, - { code:0x04C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C5 - ,simpleLowerCaseMapping:0x04C6 - ,simpleTitleCaseMapping:0x04C5 - }, - { code:0x04C7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C7 - ,simpleLowerCaseMapping:0x04C8 - ,simpleTitleCaseMapping:0x04C7 - }, - { code:0x04C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C7 - ,simpleLowerCaseMapping:0x04C8 - ,simpleTitleCaseMapping:0x04C7 - }, - { code:0x04C9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04C9 - ,simpleLowerCaseMapping:0x04CA - ,simpleTitleCaseMapping:0x04C9 - }, - { code:0x04CA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C9 - ,simpleLowerCaseMapping:0x04CA - ,simpleTitleCaseMapping:0x04C9 - }, - { code:0x04CB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04CB - ,simpleLowerCaseMapping:0x04CC - ,simpleTitleCaseMapping:0x04CB - }, - { code:0x04CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04CB - ,simpleLowerCaseMapping:0x04CC - ,simpleTitleCaseMapping:0x04CB - }, - { code:0x04CD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04CD - ,simpleLowerCaseMapping:0x04CE - ,simpleTitleCaseMapping:0x04CD - }, - { code:0x04CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04CD - ,simpleLowerCaseMapping:0x04CE - ,simpleTitleCaseMapping:0x04CD - }, - { code:0x04CF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04C0 - ,simpleLowerCaseMapping:0x04CF - ,simpleTitleCaseMapping:0x04C0 - }, - { code:0x04D0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04D0 - ,simpleLowerCaseMapping:0x04D1 - ,simpleTitleCaseMapping:0x04D0 - }, - { code:0x04D1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04D0 - ,simpleLowerCaseMapping:0x04D1 - ,simpleTitleCaseMapping:0x04D0 - }, - { code:0x04D2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04D2 - ,simpleLowerCaseMapping:0x04D3 - ,simpleTitleCaseMapping:0x04D2 - }, - { code:0x04D3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04D2 - ,simpleLowerCaseMapping:0x04D3 - ,simpleTitleCaseMapping:0x04D2 - }, - { code:0x04D4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04D4 - ,simpleLowerCaseMapping:0x04D5 - ,simpleTitleCaseMapping:0x04D4 - }, - { code:0x04D5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04D4 - ,simpleLowerCaseMapping:0x04D5 - ,simpleTitleCaseMapping:0x04D4 - }, - { code:0x04D6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04D6 - ,simpleLowerCaseMapping:0x04D7 - ,simpleTitleCaseMapping:0x04D6 - }, - { code:0x04D7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04D6 - ,simpleLowerCaseMapping:0x04D7 - ,simpleTitleCaseMapping:0x04D6 - }, - { code:0x04D8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04D8 - ,simpleLowerCaseMapping:0x04D9 - ,simpleTitleCaseMapping:0x04D8 - }, - { code:0x04D9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04D8 - ,simpleLowerCaseMapping:0x04D9 - ,simpleTitleCaseMapping:0x04D8 - }, - { code:0x04DA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04DA - ,simpleLowerCaseMapping:0x04DB - ,simpleTitleCaseMapping:0x04DA - }, - { code:0x04DB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04DA - ,simpleLowerCaseMapping:0x04DB - ,simpleTitleCaseMapping:0x04DA - }, - { code:0x04DC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04DC - ,simpleLowerCaseMapping:0x04DD - ,simpleTitleCaseMapping:0x04DC - }, - { code:0x04DD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04DC - ,simpleLowerCaseMapping:0x04DD - ,simpleTitleCaseMapping:0x04DC - }, - { code:0x04DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04DE - ,simpleLowerCaseMapping:0x04DF - ,simpleTitleCaseMapping:0x04DE - }, - { code:0x04DF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04DE - ,simpleLowerCaseMapping:0x04DF - ,simpleTitleCaseMapping:0x04DE - }, - { code:0x04E0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04E0 - ,simpleLowerCaseMapping:0x04E1 - ,simpleTitleCaseMapping:0x04E0 - }, - { code:0x04E1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04E0 - ,simpleLowerCaseMapping:0x04E1 - ,simpleTitleCaseMapping:0x04E0 - }, - { code:0x04E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04E2 - ,simpleLowerCaseMapping:0x04E3 - ,simpleTitleCaseMapping:0x04E2 - }, - { code:0x04E3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04E2 - ,simpleLowerCaseMapping:0x04E3 - ,simpleTitleCaseMapping:0x04E2 - }, - { code:0x04E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04E4 - ,simpleLowerCaseMapping:0x04E5 - ,simpleTitleCaseMapping:0x04E4 - }, - { code:0x04E5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04E4 - ,simpleLowerCaseMapping:0x04E5 - ,simpleTitleCaseMapping:0x04E4 - }, - { code:0x04E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04E6 - ,simpleLowerCaseMapping:0x04E7 - ,simpleTitleCaseMapping:0x04E6 - }, - { code:0x04E7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04E6 - ,simpleLowerCaseMapping:0x04E7 - ,simpleTitleCaseMapping:0x04E6 - }, - { code:0x04E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04E8 - ,simpleLowerCaseMapping:0x04E9 - ,simpleTitleCaseMapping:0x04E8 - }, - { code:0x04E9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04E8 - ,simpleLowerCaseMapping:0x04E9 - ,simpleTitleCaseMapping:0x04E8 - }, - { code:0x04EA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04EA - ,simpleLowerCaseMapping:0x04EB - ,simpleTitleCaseMapping:0x04EA - }, - { code:0x04EB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04EA - ,simpleLowerCaseMapping:0x04EB - ,simpleTitleCaseMapping:0x04EA - }, - { code:0x04EC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04EC - ,simpleLowerCaseMapping:0x04ED - ,simpleTitleCaseMapping:0x04EC - }, - { code:0x04ED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04EC - ,simpleLowerCaseMapping:0x04ED - ,simpleTitleCaseMapping:0x04EC - }, - { code:0x04EE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04EE - ,simpleLowerCaseMapping:0x04EF - ,simpleTitleCaseMapping:0x04EE - }, - { code:0x04EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04EE - ,simpleLowerCaseMapping:0x04EF - ,simpleTitleCaseMapping:0x04EE - }, - { code:0x04F0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04F0 - ,simpleLowerCaseMapping:0x04F1 - ,simpleTitleCaseMapping:0x04F0 - }, - { code:0x04F1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04F0 - ,simpleLowerCaseMapping:0x04F1 - ,simpleTitleCaseMapping:0x04F0 - }, - { code:0x04F2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04F2 - ,simpleLowerCaseMapping:0x04F3 - ,simpleTitleCaseMapping:0x04F2 - }, - { code:0x04F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04F2 - ,simpleLowerCaseMapping:0x04F3 - ,simpleTitleCaseMapping:0x04F2 - }, - { code:0x04F4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04F4 - ,simpleLowerCaseMapping:0x04F5 - ,simpleTitleCaseMapping:0x04F4 - }, - { code:0x04F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04F4 - ,simpleLowerCaseMapping:0x04F5 - ,simpleTitleCaseMapping:0x04F4 - }, - { code:0x04F6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04F6 - ,simpleLowerCaseMapping:0x04F7 - ,simpleTitleCaseMapping:0x04F6 - }, - { code:0x04F7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04F6 - ,simpleLowerCaseMapping:0x04F7 - ,simpleTitleCaseMapping:0x04F6 - }, - { code:0x04F8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04F8 - ,simpleLowerCaseMapping:0x04F9 - ,simpleTitleCaseMapping:0x04F8 - }, - { code:0x04F9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04F8 - ,simpleLowerCaseMapping:0x04F9 - ,simpleTitleCaseMapping:0x04F8 - }, - { code:0x04FA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04FA - ,simpleLowerCaseMapping:0x04FB - ,simpleTitleCaseMapping:0x04FA - }, - { code:0x04FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04FA - ,simpleLowerCaseMapping:0x04FB - ,simpleTitleCaseMapping:0x04FA - }, - { code:0x04FC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04FC - ,simpleLowerCaseMapping:0x04FD - ,simpleTitleCaseMapping:0x04FC - }, - { code:0x04FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04FC - ,simpleLowerCaseMapping:0x04FD - ,simpleTitleCaseMapping:0x04FC - }, - { code:0x04FE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x04FE - ,simpleLowerCaseMapping:0x04FF - ,simpleTitleCaseMapping:0x04FE - }, - { code:0x04FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x04FE - ,simpleLowerCaseMapping:0x04FF - ,simpleTitleCaseMapping:0x04FE - }, - { code:0x0500 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0500 - ,simpleLowerCaseMapping:0x0501 - ,simpleTitleCaseMapping:0x0500 - }, - { code:0x0501 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0500 - ,simpleLowerCaseMapping:0x0501 - ,simpleTitleCaseMapping:0x0500 - }, - { code:0x0502 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0502 - ,simpleLowerCaseMapping:0x0503 - ,simpleTitleCaseMapping:0x0502 - }, - { code:0x0503 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0502 - ,simpleLowerCaseMapping:0x0503 - ,simpleTitleCaseMapping:0x0502 - }, - { code:0x0504 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0504 - ,simpleLowerCaseMapping:0x0505 - ,simpleTitleCaseMapping:0x0504 - }, - { code:0x0505 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0504 - ,simpleLowerCaseMapping:0x0505 - ,simpleTitleCaseMapping:0x0504 - }, - { code:0x0506 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0506 - ,simpleLowerCaseMapping:0x0507 - ,simpleTitleCaseMapping:0x0506 - }, - { code:0x0507 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0506 - ,simpleLowerCaseMapping:0x0507 - ,simpleTitleCaseMapping:0x0506 - }, - { code:0x0508 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0508 - ,simpleLowerCaseMapping:0x0509 - ,simpleTitleCaseMapping:0x0508 - }, - { code:0x0509 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0508 - ,simpleLowerCaseMapping:0x0509 - ,simpleTitleCaseMapping:0x0508 - }, - { code:0x050A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x050A - ,simpleLowerCaseMapping:0x050B - ,simpleTitleCaseMapping:0x050A - }, - { code:0x050B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x050A - ,simpleLowerCaseMapping:0x050B - ,simpleTitleCaseMapping:0x050A - }, - { code:0x050C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x050C - ,simpleLowerCaseMapping:0x050D - ,simpleTitleCaseMapping:0x050C - }, - { code:0x050D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x050C - ,simpleLowerCaseMapping:0x050D - ,simpleTitleCaseMapping:0x050C - }, - { code:0x050E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x050E - ,simpleLowerCaseMapping:0x050F - ,simpleTitleCaseMapping:0x050E - }, - { code:0x050F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x050E - ,simpleLowerCaseMapping:0x050F - ,simpleTitleCaseMapping:0x050E - }, - { code:0x0510 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0510 - ,simpleLowerCaseMapping:0x0511 - ,simpleTitleCaseMapping:0x0510 - }, - { code:0x0511 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0510 - ,simpleLowerCaseMapping:0x0511 - ,simpleTitleCaseMapping:0x0510 - }, - { code:0x0512 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0512 - ,simpleLowerCaseMapping:0x0513 - ,simpleTitleCaseMapping:0x0512 - }, - { code:0x0513 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0512 - ,simpleLowerCaseMapping:0x0513 - ,simpleTitleCaseMapping:0x0512 - }, - { code:0x0531 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0531 - ,simpleLowerCaseMapping:0x0561 - ,simpleTitleCaseMapping:0x0531 - }, - { code:0x0532 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0532 - ,simpleLowerCaseMapping:0x0562 - ,simpleTitleCaseMapping:0x0532 - }, - { code:0x0533 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0533 - ,simpleLowerCaseMapping:0x0563 - ,simpleTitleCaseMapping:0x0533 - }, - { code:0x0534 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0534 - ,simpleLowerCaseMapping:0x0564 - ,simpleTitleCaseMapping:0x0534 - }, - { code:0x0535 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0535 - ,simpleLowerCaseMapping:0x0565 - ,simpleTitleCaseMapping:0x0535 - }, - { code:0x0536 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0536 - ,simpleLowerCaseMapping:0x0566 - ,simpleTitleCaseMapping:0x0536 - }, - { code:0x0537 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0537 - ,simpleLowerCaseMapping:0x0567 - ,simpleTitleCaseMapping:0x0537 - }, - { code:0x0538 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0538 - ,simpleLowerCaseMapping:0x0568 - ,simpleTitleCaseMapping:0x0538 - }, - { code:0x0539 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0539 - ,simpleLowerCaseMapping:0x0569 - ,simpleTitleCaseMapping:0x0539 - }, - { code:0x053A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053A - ,simpleLowerCaseMapping:0x056A - ,simpleTitleCaseMapping:0x053A - }, - { code:0x053B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053B - ,simpleLowerCaseMapping:0x056B - ,simpleTitleCaseMapping:0x053B - }, - { code:0x053C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053C - ,simpleLowerCaseMapping:0x056C - ,simpleTitleCaseMapping:0x053C - }, - { code:0x053D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053D - ,simpleLowerCaseMapping:0x056D - ,simpleTitleCaseMapping:0x053D - }, - { code:0x053E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053E - ,simpleLowerCaseMapping:0x056E - ,simpleTitleCaseMapping:0x053E - }, - { code:0x053F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x053F - ,simpleLowerCaseMapping:0x056F - ,simpleTitleCaseMapping:0x053F - }, - { code:0x0540 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0540 - ,simpleLowerCaseMapping:0x0570 - ,simpleTitleCaseMapping:0x0540 - }, - { code:0x0541 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0541 - ,simpleLowerCaseMapping:0x0571 - ,simpleTitleCaseMapping:0x0541 - }, - { code:0x0542 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0542 - ,simpleLowerCaseMapping:0x0572 - ,simpleTitleCaseMapping:0x0542 - }, - { code:0x0543 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0543 - ,simpleLowerCaseMapping:0x0573 - ,simpleTitleCaseMapping:0x0543 - }, - { code:0x0544 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0544 - ,simpleLowerCaseMapping:0x0574 - ,simpleTitleCaseMapping:0x0544 - }, - { code:0x0545 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0545 - ,simpleLowerCaseMapping:0x0575 - ,simpleTitleCaseMapping:0x0545 - }, - { code:0x0546 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0546 - ,simpleLowerCaseMapping:0x0576 - ,simpleTitleCaseMapping:0x0546 - }, - { code:0x0547 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0547 - ,simpleLowerCaseMapping:0x0577 - ,simpleTitleCaseMapping:0x0547 - }, - { code:0x0548 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0548 - ,simpleLowerCaseMapping:0x0578 - ,simpleTitleCaseMapping:0x0548 - }, - { code:0x0549 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0549 - ,simpleLowerCaseMapping:0x0579 - ,simpleTitleCaseMapping:0x0549 - }, - { code:0x054A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054A - ,simpleLowerCaseMapping:0x057A - ,simpleTitleCaseMapping:0x054A - }, - { code:0x054B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054B - ,simpleLowerCaseMapping:0x057B - ,simpleTitleCaseMapping:0x054B - }, - { code:0x054C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054C - ,simpleLowerCaseMapping:0x057C - ,simpleTitleCaseMapping:0x054C - }, - { code:0x054D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054D - ,simpleLowerCaseMapping:0x057D - ,simpleTitleCaseMapping:0x054D - }, - { code:0x054E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054E - ,simpleLowerCaseMapping:0x057E - ,simpleTitleCaseMapping:0x054E - }, - { code:0x054F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x054F - ,simpleLowerCaseMapping:0x057F - ,simpleTitleCaseMapping:0x054F - }, - { code:0x0550 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0550 - ,simpleLowerCaseMapping:0x0580 - ,simpleTitleCaseMapping:0x0550 - }, - { code:0x0551 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0551 - ,simpleLowerCaseMapping:0x0581 - ,simpleTitleCaseMapping:0x0551 - }, - { code:0x0552 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0552 - ,simpleLowerCaseMapping:0x0582 - ,simpleTitleCaseMapping:0x0552 - }, - { code:0x0553 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0553 - ,simpleLowerCaseMapping:0x0583 - ,simpleTitleCaseMapping:0x0553 - }, - { code:0x0554 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0554 - ,simpleLowerCaseMapping:0x0584 - ,simpleTitleCaseMapping:0x0554 - }, - { code:0x0555 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0555 - ,simpleLowerCaseMapping:0x0585 - ,simpleTitleCaseMapping:0x0555 - }, - { code:0x0556 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x0556 - ,simpleLowerCaseMapping:0x0586 - ,simpleTitleCaseMapping:0x0556 - }, - { code:0x0559 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x0559 - ,simpleLowerCaseMapping:0x0559 - ,simpleTitleCaseMapping:0x0559 - }, - { code:0x055A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055A - ,simpleLowerCaseMapping:0x055A - ,simpleTitleCaseMapping:0x055A - }, - { code:0x055B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055B - ,simpleLowerCaseMapping:0x055B - ,simpleTitleCaseMapping:0x055B - }, - { code:0x055C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055C - ,simpleLowerCaseMapping:0x055C - ,simpleTitleCaseMapping:0x055C - }, - { code:0x055D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055D - ,simpleLowerCaseMapping:0x055D - ,simpleTitleCaseMapping:0x055D - }, - { code:0x055E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055E - ,simpleLowerCaseMapping:0x055E - ,simpleTitleCaseMapping:0x055E - }, - { code:0x055F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x055F - ,simpleLowerCaseMapping:0x055F - ,simpleTitleCaseMapping:0x055F - }, - { code:0x0561 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0531 - ,simpleLowerCaseMapping:0x0561 - ,simpleTitleCaseMapping:0x0531 - }, - { code:0x0562 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0532 - ,simpleLowerCaseMapping:0x0562 - ,simpleTitleCaseMapping:0x0532 - }, - { code:0x0563 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0533 - ,simpleLowerCaseMapping:0x0563 - ,simpleTitleCaseMapping:0x0533 - }, - { code:0x0564 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0534 - ,simpleLowerCaseMapping:0x0564 - ,simpleTitleCaseMapping:0x0534 - }, - { code:0x0565 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0535 - ,simpleLowerCaseMapping:0x0565 - ,simpleTitleCaseMapping:0x0535 - }, - { code:0x0566 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0536 - ,simpleLowerCaseMapping:0x0566 - ,simpleTitleCaseMapping:0x0536 - }, - { code:0x0567 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0537 - ,simpleLowerCaseMapping:0x0567 - ,simpleTitleCaseMapping:0x0537 - }, - { code:0x0568 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0538 - ,simpleLowerCaseMapping:0x0568 - ,simpleTitleCaseMapping:0x0538 - }, - { code:0x0569 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0539 - ,simpleLowerCaseMapping:0x0569 - ,simpleTitleCaseMapping:0x0539 - }, - { code:0x056A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053A - ,simpleLowerCaseMapping:0x056A - ,simpleTitleCaseMapping:0x053A - }, - { code:0x056B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053B - ,simpleLowerCaseMapping:0x056B - ,simpleTitleCaseMapping:0x053B - }, - { code:0x056C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053C - ,simpleLowerCaseMapping:0x056C - ,simpleTitleCaseMapping:0x053C - }, - { code:0x056D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053D - ,simpleLowerCaseMapping:0x056D - ,simpleTitleCaseMapping:0x053D - }, - { code:0x056E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053E - ,simpleLowerCaseMapping:0x056E - ,simpleTitleCaseMapping:0x053E - }, - { code:0x056F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x053F - ,simpleLowerCaseMapping:0x056F - ,simpleTitleCaseMapping:0x053F - }, - { code:0x0570 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0540 - ,simpleLowerCaseMapping:0x0570 - ,simpleTitleCaseMapping:0x0540 - }, - { code:0x0571 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0541 - ,simpleLowerCaseMapping:0x0571 - ,simpleTitleCaseMapping:0x0541 - }, - { code:0x0572 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0542 - ,simpleLowerCaseMapping:0x0572 - ,simpleTitleCaseMapping:0x0542 - }, - { code:0x0573 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0543 - ,simpleLowerCaseMapping:0x0573 - ,simpleTitleCaseMapping:0x0543 - }, - { code:0x0574 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0544 - ,simpleLowerCaseMapping:0x0574 - ,simpleTitleCaseMapping:0x0544 - }, - { code:0x0575 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0545 - ,simpleLowerCaseMapping:0x0575 - ,simpleTitleCaseMapping:0x0545 - }, - { code:0x0576 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0546 - ,simpleLowerCaseMapping:0x0576 - ,simpleTitleCaseMapping:0x0546 - }, - { code:0x0577 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0547 - ,simpleLowerCaseMapping:0x0577 - ,simpleTitleCaseMapping:0x0547 - }, - { code:0x0578 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0548 - ,simpleLowerCaseMapping:0x0578 - ,simpleTitleCaseMapping:0x0548 - }, - { code:0x0579 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0549 - ,simpleLowerCaseMapping:0x0579 - ,simpleTitleCaseMapping:0x0549 - }, - { code:0x057A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054A - ,simpleLowerCaseMapping:0x057A - ,simpleTitleCaseMapping:0x054A - }, - { code:0x057B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054B - ,simpleLowerCaseMapping:0x057B - ,simpleTitleCaseMapping:0x054B - }, - { code:0x057C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054C - ,simpleLowerCaseMapping:0x057C - ,simpleTitleCaseMapping:0x054C - }, - { code:0x057D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054D - ,simpleLowerCaseMapping:0x057D - ,simpleTitleCaseMapping:0x054D - }, - { code:0x057E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054E - ,simpleLowerCaseMapping:0x057E - ,simpleTitleCaseMapping:0x054E - }, - { code:0x057F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x054F - ,simpleLowerCaseMapping:0x057F - ,simpleTitleCaseMapping:0x054F - }, - { code:0x0580 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0550 - ,simpleLowerCaseMapping:0x0580 - ,simpleTitleCaseMapping:0x0550 - }, - { code:0x0581 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0551 - ,simpleLowerCaseMapping:0x0581 - ,simpleTitleCaseMapping:0x0551 - }, - { code:0x0582 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0552 - ,simpleLowerCaseMapping:0x0582 - ,simpleTitleCaseMapping:0x0552 - }, - { code:0x0583 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0553 - ,simpleLowerCaseMapping:0x0583 - ,simpleTitleCaseMapping:0x0553 - }, - { code:0x0584 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0554 - ,simpleLowerCaseMapping:0x0584 - ,simpleTitleCaseMapping:0x0554 - }, - { code:0x0585 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0555 - ,simpleLowerCaseMapping:0x0585 - ,simpleTitleCaseMapping:0x0555 - }, - { code:0x0586 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0556 - ,simpleLowerCaseMapping:0x0586 - ,simpleTitleCaseMapping:0x0556 - }, - { code:0x0587 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x0587 - ,simpleLowerCaseMapping:0x0587 - ,simpleTitleCaseMapping:0x0587 - }, - { code:0x0589 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0589 - ,simpleLowerCaseMapping:0x0589 - ,simpleTitleCaseMapping:0x0589 - }, - { code:0x058A - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x058A - ,simpleLowerCaseMapping:0x058A - ,simpleTitleCaseMapping:0x058A - }, - { code:0x0591 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0591 - ,simpleLowerCaseMapping:0x0591 - ,simpleTitleCaseMapping:0x0591 - }, - { code:0x0592 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0592 - ,simpleLowerCaseMapping:0x0592 - ,simpleTitleCaseMapping:0x0592 - }, - { code:0x0593 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0593 - ,simpleLowerCaseMapping:0x0593 - ,simpleTitleCaseMapping:0x0593 - }, - { code:0x0594 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0594 - ,simpleLowerCaseMapping:0x0594 - ,simpleTitleCaseMapping:0x0594 - }, - { code:0x0595 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0595 - ,simpleLowerCaseMapping:0x0595 - ,simpleTitleCaseMapping:0x0595 - }, - { code:0x0596 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0596 - ,simpleLowerCaseMapping:0x0596 - ,simpleTitleCaseMapping:0x0596 - }, - { code:0x0597 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0597 - ,simpleLowerCaseMapping:0x0597 - ,simpleTitleCaseMapping:0x0597 - }, - { code:0x0598 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0598 - ,simpleLowerCaseMapping:0x0598 - ,simpleTitleCaseMapping:0x0598 - }, - { code:0x0599 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0599 - ,simpleLowerCaseMapping:0x0599 - ,simpleTitleCaseMapping:0x0599 - }, - { code:0x059A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059A - ,simpleLowerCaseMapping:0x059A - ,simpleTitleCaseMapping:0x059A - }, - { code:0x059B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059B - ,simpleLowerCaseMapping:0x059B - ,simpleTitleCaseMapping:0x059B - }, - { code:0x059C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059C - ,simpleLowerCaseMapping:0x059C - ,simpleTitleCaseMapping:0x059C - }, - { code:0x059D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059D - ,simpleLowerCaseMapping:0x059D - ,simpleTitleCaseMapping:0x059D - }, - { code:0x059E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059E - ,simpleLowerCaseMapping:0x059E - ,simpleTitleCaseMapping:0x059E - }, - { code:0x059F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x059F - ,simpleLowerCaseMapping:0x059F - ,simpleTitleCaseMapping:0x059F - }, - { code:0x05A0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A0 - ,simpleLowerCaseMapping:0x05A0 - ,simpleTitleCaseMapping:0x05A0 - }, - { code:0x05A1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A1 - ,simpleLowerCaseMapping:0x05A1 - ,simpleTitleCaseMapping:0x05A1 - }, - { code:0x05A2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A2 - ,simpleLowerCaseMapping:0x05A2 - ,simpleTitleCaseMapping:0x05A2 - }, - { code:0x05A3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A3 - ,simpleLowerCaseMapping:0x05A3 - ,simpleTitleCaseMapping:0x05A3 - }, - { code:0x05A4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A4 - ,simpleLowerCaseMapping:0x05A4 - ,simpleTitleCaseMapping:0x05A4 - }, - { code:0x05A5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A5 - ,simpleLowerCaseMapping:0x05A5 - ,simpleTitleCaseMapping:0x05A5 - }, - { code:0x05A6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A6 - ,simpleLowerCaseMapping:0x05A6 - ,simpleTitleCaseMapping:0x05A6 - }, - { code:0x05A7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A7 - ,simpleLowerCaseMapping:0x05A7 - ,simpleTitleCaseMapping:0x05A7 - }, - { code:0x05A8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A8 - ,simpleLowerCaseMapping:0x05A8 - ,simpleTitleCaseMapping:0x05A8 - }, - { code:0x05A9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05A9 - ,simpleLowerCaseMapping:0x05A9 - ,simpleTitleCaseMapping:0x05A9 - }, - { code:0x05AA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AA - ,simpleLowerCaseMapping:0x05AA - ,simpleTitleCaseMapping:0x05AA - }, - { code:0x05AB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AB - ,simpleLowerCaseMapping:0x05AB - ,simpleTitleCaseMapping:0x05AB - }, - { code:0x05AC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AC - ,simpleLowerCaseMapping:0x05AC - ,simpleTitleCaseMapping:0x05AC - }, - { code:0x05AD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AD - ,simpleLowerCaseMapping:0x05AD - ,simpleTitleCaseMapping:0x05AD - }, - { code:0x05AE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AE - ,simpleLowerCaseMapping:0x05AE - ,simpleTitleCaseMapping:0x05AE - }, - { code:0x05AF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05AF - ,simpleLowerCaseMapping:0x05AF - ,simpleTitleCaseMapping:0x05AF - }, - { code:0x05B0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B0 - ,simpleLowerCaseMapping:0x05B0 - ,simpleTitleCaseMapping:0x05B0 - }, - { code:0x05B1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B1 - ,simpleLowerCaseMapping:0x05B1 - ,simpleTitleCaseMapping:0x05B1 - }, - { code:0x05B2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B2 - ,simpleLowerCaseMapping:0x05B2 - ,simpleTitleCaseMapping:0x05B2 - }, - { code:0x05B3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B3 - ,simpleLowerCaseMapping:0x05B3 - ,simpleTitleCaseMapping:0x05B3 - }, - { code:0x05B4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B4 - ,simpleLowerCaseMapping:0x05B4 - ,simpleTitleCaseMapping:0x05B4 - }, - { code:0x05B5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B5 - ,simpleLowerCaseMapping:0x05B5 - ,simpleTitleCaseMapping:0x05B5 - }, - { code:0x05B6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B6 - ,simpleLowerCaseMapping:0x05B6 - ,simpleTitleCaseMapping:0x05B6 - }, - { code:0x05B7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B7 - ,simpleLowerCaseMapping:0x05B7 - ,simpleTitleCaseMapping:0x05B7 - }, - { code:0x05B8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B8 - ,simpleLowerCaseMapping:0x05B8 - ,simpleTitleCaseMapping:0x05B8 - }, - { code:0x05B9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05B9 - ,simpleLowerCaseMapping:0x05B9 - ,simpleTitleCaseMapping:0x05B9 - }, - { code:0x05BA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05BA - ,simpleLowerCaseMapping:0x05BA - ,simpleTitleCaseMapping:0x05BA - }, - { code:0x05BB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05BB - ,simpleLowerCaseMapping:0x05BB - ,simpleTitleCaseMapping:0x05BB - }, - { code:0x05BC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05BC - ,simpleLowerCaseMapping:0x05BC - ,simpleTitleCaseMapping:0x05BC - }, - { code:0x05BD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05BD - ,simpleLowerCaseMapping:0x05BD - ,simpleTitleCaseMapping:0x05BD - }, - { code:0x05BE - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05BE - ,simpleLowerCaseMapping:0x05BE - ,simpleTitleCaseMapping:0x05BE - }, - { code:0x05BF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05BF - ,simpleLowerCaseMapping:0x05BF - ,simpleTitleCaseMapping:0x05BF - }, - { code:0x05C0 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05C0 - ,simpleLowerCaseMapping:0x05C0 - ,simpleTitleCaseMapping:0x05C0 - }, - { code:0x05C1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05C1 - ,simpleLowerCaseMapping:0x05C1 - ,simpleTitleCaseMapping:0x05C1 - }, - { code:0x05C2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05C2 - ,simpleLowerCaseMapping:0x05C2 - ,simpleTitleCaseMapping:0x05C2 - }, - { code:0x05C3 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05C3 - ,simpleLowerCaseMapping:0x05C3 - ,simpleTitleCaseMapping:0x05C3 - }, - { code:0x05C4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05C4 - ,simpleLowerCaseMapping:0x05C4 - ,simpleTitleCaseMapping:0x05C4 - }, - { code:0x05C5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05C5 - ,simpleLowerCaseMapping:0x05C5 - ,simpleTitleCaseMapping:0x05C5 - }, - { code:0x05C6 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05C6 - ,simpleLowerCaseMapping:0x05C6 - ,simpleTitleCaseMapping:0x05C6 - }, - { code:0x05C7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x05C7 - ,simpleLowerCaseMapping:0x05C7 - ,simpleTitleCaseMapping:0x05C7 - }, - { code:0x05D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D0 - ,simpleLowerCaseMapping:0x05D0 - ,simpleTitleCaseMapping:0x05D0 - }, - { code:0x05D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D1 - ,simpleLowerCaseMapping:0x05D1 - ,simpleTitleCaseMapping:0x05D1 - }, - { code:0x05D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D2 - ,simpleLowerCaseMapping:0x05D2 - ,simpleTitleCaseMapping:0x05D2 - }, - { code:0x05D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D3 - ,simpleLowerCaseMapping:0x05D3 - ,simpleTitleCaseMapping:0x05D3 - }, - { code:0x05D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D4 - ,simpleLowerCaseMapping:0x05D4 - ,simpleTitleCaseMapping:0x05D4 - }, - { code:0x05D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D5 - ,simpleLowerCaseMapping:0x05D5 - ,simpleTitleCaseMapping:0x05D5 - }, - { code:0x05D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D6 - ,simpleLowerCaseMapping:0x05D6 - ,simpleTitleCaseMapping:0x05D6 - }, - { code:0x05D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D7 - ,simpleLowerCaseMapping:0x05D7 - ,simpleTitleCaseMapping:0x05D7 - }, - { code:0x05D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D8 - ,simpleLowerCaseMapping:0x05D8 - ,simpleTitleCaseMapping:0x05D8 - }, - { code:0x05D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05D9 - ,simpleLowerCaseMapping:0x05D9 - ,simpleTitleCaseMapping:0x05D9 - }, - { code:0x05DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DA - ,simpleLowerCaseMapping:0x05DA - ,simpleTitleCaseMapping:0x05DA - }, - { code:0x05DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DB - ,simpleLowerCaseMapping:0x05DB - ,simpleTitleCaseMapping:0x05DB - }, - { code:0x05DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DC - ,simpleLowerCaseMapping:0x05DC - ,simpleTitleCaseMapping:0x05DC - }, - { code:0x05DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DD - ,simpleLowerCaseMapping:0x05DD - ,simpleTitleCaseMapping:0x05DD - }, - { code:0x05DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DE - ,simpleLowerCaseMapping:0x05DE - ,simpleTitleCaseMapping:0x05DE - }, - { code:0x05DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05DF - ,simpleLowerCaseMapping:0x05DF - ,simpleTitleCaseMapping:0x05DF - }, - { code:0x05E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E0 - ,simpleLowerCaseMapping:0x05E0 - ,simpleTitleCaseMapping:0x05E0 - }, - { code:0x05E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E1 - ,simpleLowerCaseMapping:0x05E1 - ,simpleTitleCaseMapping:0x05E1 - }, - { code:0x05E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E2 - ,simpleLowerCaseMapping:0x05E2 - ,simpleTitleCaseMapping:0x05E2 - }, - { code:0x05E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E3 - ,simpleLowerCaseMapping:0x05E3 - ,simpleTitleCaseMapping:0x05E3 - }, - { code:0x05E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E4 - ,simpleLowerCaseMapping:0x05E4 - ,simpleTitleCaseMapping:0x05E4 - }, - { code:0x05E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E5 - ,simpleLowerCaseMapping:0x05E5 - ,simpleTitleCaseMapping:0x05E5 - }, - { code:0x05E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E6 - ,simpleLowerCaseMapping:0x05E6 - ,simpleTitleCaseMapping:0x05E6 - }, - { code:0x05E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E7 - ,simpleLowerCaseMapping:0x05E7 - ,simpleTitleCaseMapping:0x05E7 - }, - { code:0x05E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E8 - ,simpleLowerCaseMapping:0x05E8 - ,simpleTitleCaseMapping:0x05E8 - }, - { code:0x05E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05E9 - ,simpleLowerCaseMapping:0x05E9 - ,simpleTitleCaseMapping:0x05E9 - }, - { code:0x05EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05EA - ,simpleLowerCaseMapping:0x05EA - ,simpleTitleCaseMapping:0x05EA - }, - { code:0x05F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05F0 - ,simpleLowerCaseMapping:0x05F0 - ,simpleTitleCaseMapping:0x05F0 - }, - { code:0x05F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05F1 - ,simpleLowerCaseMapping:0x05F1 - ,simpleTitleCaseMapping:0x05F1 - }, - { code:0x05F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x05F2 - ,simpleLowerCaseMapping:0x05F2 - ,simpleTitleCaseMapping:0x05F2 - }, - { code:0x05F3 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05F3 - ,simpleLowerCaseMapping:0x05F3 - ,simpleTitleCaseMapping:0x05F3 - }, - { code:0x05F4 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x05F4 - ,simpleLowerCaseMapping:0x05F4 - ,simpleTitleCaseMapping:0x05F4 - }, - { code:0x0600 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x0600 - ,simpleLowerCaseMapping:0x0600 - ,simpleTitleCaseMapping:0x0600 - }, - { code:0x0601 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x0601 - ,simpleLowerCaseMapping:0x0601 - ,simpleTitleCaseMapping:0x0601 - }, - { code:0x0602 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x0602 - ,simpleLowerCaseMapping:0x0602 - ,simpleTitleCaseMapping:0x0602 - }, - { code:0x0603 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x0603 - ,simpleLowerCaseMapping:0x0603 - ,simpleTitleCaseMapping:0x0603 - }, - { code:0x060B - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x060B - ,simpleLowerCaseMapping:0x060B - ,simpleTitleCaseMapping:0x060B - }, - { code:0x060C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x060C - ,simpleLowerCaseMapping:0x060C - ,simpleTitleCaseMapping:0x060C - }, - { code:0x060D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x060D - ,simpleLowerCaseMapping:0x060D - ,simpleTitleCaseMapping:0x060D - }, - { code:0x060E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x060E - ,simpleLowerCaseMapping:0x060E - ,simpleTitleCaseMapping:0x060E - }, - { code:0x060F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x060F - ,simpleLowerCaseMapping:0x060F - ,simpleTitleCaseMapping:0x060F - }, - { code:0x0610 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0610 - ,simpleLowerCaseMapping:0x0610 - ,simpleTitleCaseMapping:0x0610 - }, - { code:0x0611 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0611 - ,simpleLowerCaseMapping:0x0611 - ,simpleTitleCaseMapping:0x0611 - }, - { code:0x0612 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0612 - ,simpleLowerCaseMapping:0x0612 - ,simpleTitleCaseMapping:0x0612 - }, - { code:0x0613 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0613 - ,simpleLowerCaseMapping:0x0613 - ,simpleTitleCaseMapping:0x0613 - }, - { code:0x0614 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0614 - ,simpleLowerCaseMapping:0x0614 - ,simpleTitleCaseMapping:0x0614 - }, - { code:0x0615 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0615 - ,simpleLowerCaseMapping:0x0615 - ,simpleTitleCaseMapping:0x0615 - }, - { code:0x061B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x061B - ,simpleLowerCaseMapping:0x061B - ,simpleTitleCaseMapping:0x061B - }, - { code:0x061E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x061E - ,simpleLowerCaseMapping:0x061E - ,simpleTitleCaseMapping:0x061E - }, - { code:0x061F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x061F - ,simpleLowerCaseMapping:0x061F - ,simpleTitleCaseMapping:0x061F - }, - { code:0x0621 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0621 - ,simpleLowerCaseMapping:0x0621 - ,simpleTitleCaseMapping:0x0621 - }, - { code:0x0622 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0622 - ,simpleLowerCaseMapping:0x0622 - ,simpleTitleCaseMapping:0x0622 - }, - { code:0x0623 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0623 - ,simpleLowerCaseMapping:0x0623 - ,simpleTitleCaseMapping:0x0623 - }, - { code:0x0624 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0624 - ,simpleLowerCaseMapping:0x0624 - ,simpleTitleCaseMapping:0x0624 - }, - { code:0x0625 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0625 - ,simpleLowerCaseMapping:0x0625 - ,simpleTitleCaseMapping:0x0625 - }, - { code:0x0626 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0626 - ,simpleLowerCaseMapping:0x0626 - ,simpleTitleCaseMapping:0x0626 - }, - { code:0x0627 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0627 - ,simpleLowerCaseMapping:0x0627 - ,simpleTitleCaseMapping:0x0627 - }, - { code:0x0628 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0628 - ,simpleLowerCaseMapping:0x0628 - ,simpleTitleCaseMapping:0x0628 - }, - { code:0x0629 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0629 - ,simpleLowerCaseMapping:0x0629 - ,simpleTitleCaseMapping:0x0629 - }, - { code:0x062A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062A - ,simpleLowerCaseMapping:0x062A - ,simpleTitleCaseMapping:0x062A - }, - { code:0x062B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062B - ,simpleLowerCaseMapping:0x062B - ,simpleTitleCaseMapping:0x062B - }, - { code:0x062C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062C - ,simpleLowerCaseMapping:0x062C - ,simpleTitleCaseMapping:0x062C - }, - { code:0x062D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062D - ,simpleLowerCaseMapping:0x062D - ,simpleTitleCaseMapping:0x062D - }, - { code:0x062E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062E - ,simpleLowerCaseMapping:0x062E - ,simpleTitleCaseMapping:0x062E - }, - { code:0x062F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x062F - ,simpleLowerCaseMapping:0x062F - ,simpleTitleCaseMapping:0x062F - }, - { code:0x0630 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0630 - ,simpleLowerCaseMapping:0x0630 - ,simpleTitleCaseMapping:0x0630 - }, - { code:0x0631 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0631 - ,simpleLowerCaseMapping:0x0631 - ,simpleTitleCaseMapping:0x0631 - }, - { code:0x0632 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0632 - ,simpleLowerCaseMapping:0x0632 - ,simpleTitleCaseMapping:0x0632 - }, - { code:0x0633 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0633 - ,simpleLowerCaseMapping:0x0633 - ,simpleTitleCaseMapping:0x0633 - }, - { code:0x0634 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0634 - ,simpleLowerCaseMapping:0x0634 - ,simpleTitleCaseMapping:0x0634 - }, - { code:0x0635 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0635 - ,simpleLowerCaseMapping:0x0635 - ,simpleTitleCaseMapping:0x0635 - }, - { code:0x0636 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0636 - ,simpleLowerCaseMapping:0x0636 - ,simpleTitleCaseMapping:0x0636 - }, - { code:0x0637 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0637 - ,simpleLowerCaseMapping:0x0637 - ,simpleTitleCaseMapping:0x0637 - }, - { code:0x0638 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0638 - ,simpleLowerCaseMapping:0x0638 - ,simpleTitleCaseMapping:0x0638 - }, - { code:0x0639 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0639 - ,simpleLowerCaseMapping:0x0639 - ,simpleTitleCaseMapping:0x0639 - }, - { code:0x063A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x063A - ,simpleLowerCaseMapping:0x063A - ,simpleTitleCaseMapping:0x063A - }, - { code:0x0640 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x0640 - ,simpleLowerCaseMapping:0x0640 - ,simpleTitleCaseMapping:0x0640 - }, - { code:0x0641 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0641 - ,simpleLowerCaseMapping:0x0641 - ,simpleTitleCaseMapping:0x0641 - }, - { code:0x0642 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0642 - ,simpleLowerCaseMapping:0x0642 - ,simpleTitleCaseMapping:0x0642 - }, - { code:0x0643 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0643 - ,simpleLowerCaseMapping:0x0643 - ,simpleTitleCaseMapping:0x0643 - }, - { code:0x0644 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0644 - ,simpleLowerCaseMapping:0x0644 - ,simpleTitleCaseMapping:0x0644 - }, - { code:0x0645 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0645 - ,simpleLowerCaseMapping:0x0645 - ,simpleTitleCaseMapping:0x0645 - }, - { code:0x0646 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0646 - ,simpleLowerCaseMapping:0x0646 - ,simpleTitleCaseMapping:0x0646 - }, - { code:0x0647 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0647 - ,simpleLowerCaseMapping:0x0647 - ,simpleTitleCaseMapping:0x0647 - }, - { code:0x0648 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0648 - ,simpleLowerCaseMapping:0x0648 - ,simpleTitleCaseMapping:0x0648 - }, - { code:0x0649 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0649 - ,simpleLowerCaseMapping:0x0649 - ,simpleTitleCaseMapping:0x0649 - }, - { code:0x064A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x064A - ,simpleLowerCaseMapping:0x064A - ,simpleTitleCaseMapping:0x064A - }, - { code:0x064B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x064B - ,simpleLowerCaseMapping:0x064B - ,simpleTitleCaseMapping:0x064B - }, - { code:0x064C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x064C - ,simpleLowerCaseMapping:0x064C - ,simpleTitleCaseMapping:0x064C - }, - { code:0x064D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x064D - ,simpleLowerCaseMapping:0x064D - ,simpleTitleCaseMapping:0x064D - }, - { code:0x064E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x064E - ,simpleLowerCaseMapping:0x064E - ,simpleTitleCaseMapping:0x064E - }, - { code:0x064F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x064F - ,simpleLowerCaseMapping:0x064F - ,simpleTitleCaseMapping:0x064F - }, - { code:0x0650 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0650 - ,simpleLowerCaseMapping:0x0650 - ,simpleTitleCaseMapping:0x0650 - }, - { code:0x0651 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0651 - ,simpleLowerCaseMapping:0x0651 - ,simpleTitleCaseMapping:0x0651 - }, - { code:0x0652 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0652 - ,simpleLowerCaseMapping:0x0652 - ,simpleTitleCaseMapping:0x0652 - }, - { code:0x0653 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0653 - ,simpleLowerCaseMapping:0x0653 - ,simpleTitleCaseMapping:0x0653 - }, - { code:0x0654 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0654 - ,simpleLowerCaseMapping:0x0654 - ,simpleTitleCaseMapping:0x0654 - }, - { code:0x0655 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0655 - ,simpleLowerCaseMapping:0x0655 - ,simpleTitleCaseMapping:0x0655 - }, - { code:0x0656 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0656 - ,simpleLowerCaseMapping:0x0656 - ,simpleTitleCaseMapping:0x0656 - }, - { code:0x0657 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0657 - ,simpleLowerCaseMapping:0x0657 - ,simpleTitleCaseMapping:0x0657 - }, - { code:0x0658 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0658 - ,simpleLowerCaseMapping:0x0658 - ,simpleTitleCaseMapping:0x0658 - }, - { code:0x0659 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0659 - ,simpleLowerCaseMapping:0x0659 - ,simpleTitleCaseMapping:0x0659 - }, - { code:0x065A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x065A - ,simpleLowerCaseMapping:0x065A - ,simpleTitleCaseMapping:0x065A - }, - { code:0x065B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x065B - ,simpleLowerCaseMapping:0x065B - ,simpleTitleCaseMapping:0x065B - }, - { code:0x065C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x065C - ,simpleLowerCaseMapping:0x065C - ,simpleTitleCaseMapping:0x065C - }, - { code:0x065D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x065D - ,simpleLowerCaseMapping:0x065D - ,simpleTitleCaseMapping:0x065D - }, - { code:0x065E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x065E - ,simpleLowerCaseMapping:0x065E - ,simpleTitleCaseMapping:0x065E - }, - { code:0x0660 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0660 - ,simpleLowerCaseMapping:0x0660 - ,simpleTitleCaseMapping:0x0660 - }, - { code:0x0661 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0661 - ,simpleLowerCaseMapping:0x0661 - ,simpleTitleCaseMapping:0x0661 - }, - { code:0x0662 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0662 - ,simpleLowerCaseMapping:0x0662 - ,simpleTitleCaseMapping:0x0662 - }, - { code:0x0663 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0663 - ,simpleLowerCaseMapping:0x0663 - ,simpleTitleCaseMapping:0x0663 - }, - { code:0x0664 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0664 - ,simpleLowerCaseMapping:0x0664 - ,simpleTitleCaseMapping:0x0664 - }, - { code:0x0665 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0665 - ,simpleLowerCaseMapping:0x0665 - ,simpleTitleCaseMapping:0x0665 - }, - { code:0x0666 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0666 - ,simpleLowerCaseMapping:0x0666 - ,simpleTitleCaseMapping:0x0666 - }, - { code:0x0667 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0667 - ,simpleLowerCaseMapping:0x0667 - ,simpleTitleCaseMapping:0x0667 - }, - { code:0x0668 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0668 - ,simpleLowerCaseMapping:0x0668 - ,simpleTitleCaseMapping:0x0668 - }, - { code:0x0669 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0669 - ,simpleLowerCaseMapping:0x0669 - ,simpleTitleCaseMapping:0x0669 - }, - { code:0x066A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x066A - ,simpleLowerCaseMapping:0x066A - ,simpleTitleCaseMapping:0x066A - }, - { code:0x066B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x066B - ,simpleLowerCaseMapping:0x066B - ,simpleTitleCaseMapping:0x066B - }, - { code:0x066C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x066C - ,simpleLowerCaseMapping:0x066C - ,simpleTitleCaseMapping:0x066C - }, - { code:0x066D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x066D - ,simpleLowerCaseMapping:0x066D - ,simpleTitleCaseMapping:0x066D - }, - { code:0x066E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x066E - ,simpleLowerCaseMapping:0x066E - ,simpleTitleCaseMapping:0x066E - }, - { code:0x066F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x066F - ,simpleLowerCaseMapping:0x066F - ,simpleTitleCaseMapping:0x066F - }, - { code:0x0670 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0670 - ,simpleLowerCaseMapping:0x0670 - ,simpleTitleCaseMapping:0x0670 - }, - { code:0x0671 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0671 - ,simpleLowerCaseMapping:0x0671 - ,simpleTitleCaseMapping:0x0671 - }, - { code:0x0672 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0672 - ,simpleLowerCaseMapping:0x0672 - ,simpleTitleCaseMapping:0x0672 - }, - { code:0x0673 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0673 - ,simpleLowerCaseMapping:0x0673 - ,simpleTitleCaseMapping:0x0673 - }, - { code:0x0674 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0674 - ,simpleLowerCaseMapping:0x0674 - ,simpleTitleCaseMapping:0x0674 - }, - { code:0x0675 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0675 - ,simpleLowerCaseMapping:0x0675 - ,simpleTitleCaseMapping:0x0675 - }, - { code:0x0676 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0676 - ,simpleLowerCaseMapping:0x0676 - ,simpleTitleCaseMapping:0x0676 - }, - { code:0x0677 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0677 - ,simpleLowerCaseMapping:0x0677 - ,simpleTitleCaseMapping:0x0677 - }, - { code:0x0678 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0678 - ,simpleLowerCaseMapping:0x0678 - ,simpleTitleCaseMapping:0x0678 - }, - { code:0x0679 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0679 - ,simpleLowerCaseMapping:0x0679 - ,simpleTitleCaseMapping:0x0679 - }, - { code:0x067A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067A - ,simpleLowerCaseMapping:0x067A - ,simpleTitleCaseMapping:0x067A - }, - { code:0x067B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067B - ,simpleLowerCaseMapping:0x067B - ,simpleTitleCaseMapping:0x067B - }, - { code:0x067C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067C - ,simpleLowerCaseMapping:0x067C - ,simpleTitleCaseMapping:0x067C - }, - { code:0x067D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067D - ,simpleLowerCaseMapping:0x067D - ,simpleTitleCaseMapping:0x067D - }, - { code:0x067E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067E - ,simpleLowerCaseMapping:0x067E - ,simpleTitleCaseMapping:0x067E - }, - { code:0x067F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x067F - ,simpleLowerCaseMapping:0x067F - ,simpleTitleCaseMapping:0x067F - }, - { code:0x0680 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0680 - ,simpleLowerCaseMapping:0x0680 - ,simpleTitleCaseMapping:0x0680 - }, - { code:0x0681 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0681 - ,simpleLowerCaseMapping:0x0681 - ,simpleTitleCaseMapping:0x0681 - }, - { code:0x0682 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0682 - ,simpleLowerCaseMapping:0x0682 - ,simpleTitleCaseMapping:0x0682 - }, - { code:0x0683 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0683 - ,simpleLowerCaseMapping:0x0683 - ,simpleTitleCaseMapping:0x0683 - }, - { code:0x0684 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0684 - ,simpleLowerCaseMapping:0x0684 - ,simpleTitleCaseMapping:0x0684 - }, - { code:0x0685 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0685 - ,simpleLowerCaseMapping:0x0685 - ,simpleTitleCaseMapping:0x0685 - }, - { code:0x0686 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0686 - ,simpleLowerCaseMapping:0x0686 - ,simpleTitleCaseMapping:0x0686 - }, - { code:0x0687 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0687 - ,simpleLowerCaseMapping:0x0687 - ,simpleTitleCaseMapping:0x0687 - }, - { code:0x0688 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0688 - ,simpleLowerCaseMapping:0x0688 - ,simpleTitleCaseMapping:0x0688 - }, - { code:0x0689 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0689 - ,simpleLowerCaseMapping:0x0689 - ,simpleTitleCaseMapping:0x0689 - }, - { code:0x068A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068A - ,simpleLowerCaseMapping:0x068A - ,simpleTitleCaseMapping:0x068A - }, - { code:0x068B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068B - ,simpleLowerCaseMapping:0x068B - ,simpleTitleCaseMapping:0x068B - }, - { code:0x068C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068C - ,simpleLowerCaseMapping:0x068C - ,simpleTitleCaseMapping:0x068C - }, - { code:0x068D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068D - ,simpleLowerCaseMapping:0x068D - ,simpleTitleCaseMapping:0x068D - }, - { code:0x068E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068E - ,simpleLowerCaseMapping:0x068E - ,simpleTitleCaseMapping:0x068E - }, - { code:0x068F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x068F - ,simpleLowerCaseMapping:0x068F - ,simpleTitleCaseMapping:0x068F - }, - { code:0x0690 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0690 - ,simpleLowerCaseMapping:0x0690 - ,simpleTitleCaseMapping:0x0690 - }, - { code:0x0691 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0691 - ,simpleLowerCaseMapping:0x0691 - ,simpleTitleCaseMapping:0x0691 - }, - { code:0x0692 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0692 - ,simpleLowerCaseMapping:0x0692 - ,simpleTitleCaseMapping:0x0692 - }, - { code:0x0693 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0693 - ,simpleLowerCaseMapping:0x0693 - ,simpleTitleCaseMapping:0x0693 - }, - { code:0x0694 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0694 - ,simpleLowerCaseMapping:0x0694 - ,simpleTitleCaseMapping:0x0694 - }, - { code:0x0695 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0695 - ,simpleLowerCaseMapping:0x0695 - ,simpleTitleCaseMapping:0x0695 - }, - { code:0x0696 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0696 - ,simpleLowerCaseMapping:0x0696 - ,simpleTitleCaseMapping:0x0696 - }, - { code:0x0697 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0697 - ,simpleLowerCaseMapping:0x0697 - ,simpleTitleCaseMapping:0x0697 - }, - { code:0x0698 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0698 - ,simpleLowerCaseMapping:0x0698 - ,simpleTitleCaseMapping:0x0698 - }, - { code:0x0699 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0699 - ,simpleLowerCaseMapping:0x0699 - ,simpleTitleCaseMapping:0x0699 - }, - { code:0x069A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069A - ,simpleLowerCaseMapping:0x069A - ,simpleTitleCaseMapping:0x069A - }, - { code:0x069B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069B - ,simpleLowerCaseMapping:0x069B - ,simpleTitleCaseMapping:0x069B - }, - { code:0x069C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069C - ,simpleLowerCaseMapping:0x069C - ,simpleTitleCaseMapping:0x069C - }, - { code:0x069D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069D - ,simpleLowerCaseMapping:0x069D - ,simpleTitleCaseMapping:0x069D - }, - { code:0x069E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069E - ,simpleLowerCaseMapping:0x069E - ,simpleTitleCaseMapping:0x069E - }, - { code:0x069F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x069F - ,simpleLowerCaseMapping:0x069F - ,simpleTitleCaseMapping:0x069F - }, - { code:0x06A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A0 - ,simpleLowerCaseMapping:0x06A0 - ,simpleTitleCaseMapping:0x06A0 - }, - { code:0x06A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A1 - ,simpleLowerCaseMapping:0x06A1 - ,simpleTitleCaseMapping:0x06A1 - }, - { code:0x06A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A2 - ,simpleLowerCaseMapping:0x06A2 - ,simpleTitleCaseMapping:0x06A2 - }, - { code:0x06A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A3 - ,simpleLowerCaseMapping:0x06A3 - ,simpleTitleCaseMapping:0x06A3 - }, - { code:0x06A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A4 - ,simpleLowerCaseMapping:0x06A4 - ,simpleTitleCaseMapping:0x06A4 - }, - { code:0x06A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A5 - ,simpleLowerCaseMapping:0x06A5 - ,simpleTitleCaseMapping:0x06A5 - }, - { code:0x06A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A6 - ,simpleLowerCaseMapping:0x06A6 - ,simpleTitleCaseMapping:0x06A6 - }, - { code:0x06A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A7 - ,simpleLowerCaseMapping:0x06A7 - ,simpleTitleCaseMapping:0x06A7 - }, - { code:0x06A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A8 - ,simpleLowerCaseMapping:0x06A8 - ,simpleTitleCaseMapping:0x06A8 - }, - { code:0x06A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06A9 - ,simpleLowerCaseMapping:0x06A9 - ,simpleTitleCaseMapping:0x06A9 - }, - { code:0x06AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AA - ,simpleLowerCaseMapping:0x06AA - ,simpleTitleCaseMapping:0x06AA - }, - { code:0x06AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AB - ,simpleLowerCaseMapping:0x06AB - ,simpleTitleCaseMapping:0x06AB - }, - { code:0x06AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AC - ,simpleLowerCaseMapping:0x06AC - ,simpleTitleCaseMapping:0x06AC - }, - { code:0x06AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AD - ,simpleLowerCaseMapping:0x06AD - ,simpleTitleCaseMapping:0x06AD - }, - { code:0x06AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AE - ,simpleLowerCaseMapping:0x06AE - ,simpleTitleCaseMapping:0x06AE - }, - { code:0x06AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06AF - ,simpleLowerCaseMapping:0x06AF - ,simpleTitleCaseMapping:0x06AF - }, - { code:0x06B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B0 - ,simpleLowerCaseMapping:0x06B0 - ,simpleTitleCaseMapping:0x06B0 - }, - { code:0x06B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B1 - ,simpleLowerCaseMapping:0x06B1 - ,simpleTitleCaseMapping:0x06B1 - }, - { code:0x06B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B2 - ,simpleLowerCaseMapping:0x06B2 - ,simpleTitleCaseMapping:0x06B2 - }, - { code:0x06B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B3 - ,simpleLowerCaseMapping:0x06B3 - ,simpleTitleCaseMapping:0x06B3 - }, - { code:0x06B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B4 - ,simpleLowerCaseMapping:0x06B4 - ,simpleTitleCaseMapping:0x06B4 - }, - { code:0x06B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B5 - ,simpleLowerCaseMapping:0x06B5 - ,simpleTitleCaseMapping:0x06B5 - }, - { code:0x06B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B6 - ,simpleLowerCaseMapping:0x06B6 - ,simpleTitleCaseMapping:0x06B6 - }, - { code:0x06B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B7 - ,simpleLowerCaseMapping:0x06B7 - ,simpleTitleCaseMapping:0x06B7 - }, - { code:0x06B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B8 - ,simpleLowerCaseMapping:0x06B8 - ,simpleTitleCaseMapping:0x06B8 - }, - { code:0x06B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06B9 - ,simpleLowerCaseMapping:0x06B9 - ,simpleTitleCaseMapping:0x06B9 - }, - { code:0x06BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BA - ,simpleLowerCaseMapping:0x06BA - ,simpleTitleCaseMapping:0x06BA - }, - { code:0x06BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BB - ,simpleLowerCaseMapping:0x06BB - ,simpleTitleCaseMapping:0x06BB - }, - { code:0x06BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BC - ,simpleLowerCaseMapping:0x06BC - ,simpleTitleCaseMapping:0x06BC - }, - { code:0x06BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BD - ,simpleLowerCaseMapping:0x06BD - ,simpleTitleCaseMapping:0x06BD - }, - { code:0x06BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BE - ,simpleLowerCaseMapping:0x06BE - ,simpleTitleCaseMapping:0x06BE - }, - { code:0x06BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06BF - ,simpleLowerCaseMapping:0x06BF - ,simpleTitleCaseMapping:0x06BF - }, - { code:0x06C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C0 - ,simpleLowerCaseMapping:0x06C0 - ,simpleTitleCaseMapping:0x06C0 - }, - { code:0x06C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C1 - ,simpleLowerCaseMapping:0x06C1 - ,simpleTitleCaseMapping:0x06C1 - }, - { code:0x06C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C2 - ,simpleLowerCaseMapping:0x06C2 - ,simpleTitleCaseMapping:0x06C2 - }, - { code:0x06C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C3 - ,simpleLowerCaseMapping:0x06C3 - ,simpleTitleCaseMapping:0x06C3 - }, - { code:0x06C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C4 - ,simpleLowerCaseMapping:0x06C4 - ,simpleTitleCaseMapping:0x06C4 - }, - { code:0x06C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C5 - ,simpleLowerCaseMapping:0x06C5 - ,simpleTitleCaseMapping:0x06C5 - }, - { code:0x06C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C6 - ,simpleLowerCaseMapping:0x06C6 - ,simpleTitleCaseMapping:0x06C6 - }, - { code:0x06C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C7 - ,simpleLowerCaseMapping:0x06C7 - ,simpleTitleCaseMapping:0x06C7 - }, - { code:0x06C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C8 - ,simpleLowerCaseMapping:0x06C8 - ,simpleTitleCaseMapping:0x06C8 - }, - { code:0x06C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06C9 - ,simpleLowerCaseMapping:0x06C9 - ,simpleTitleCaseMapping:0x06C9 - }, - { code:0x06CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CA - ,simpleLowerCaseMapping:0x06CA - ,simpleTitleCaseMapping:0x06CA - }, - { code:0x06CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CB - ,simpleLowerCaseMapping:0x06CB - ,simpleTitleCaseMapping:0x06CB - }, - { code:0x06CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CC - ,simpleLowerCaseMapping:0x06CC - ,simpleTitleCaseMapping:0x06CC - }, - { code:0x06CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CD - ,simpleLowerCaseMapping:0x06CD - ,simpleTitleCaseMapping:0x06CD - }, - { code:0x06CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CE - ,simpleLowerCaseMapping:0x06CE - ,simpleTitleCaseMapping:0x06CE - }, - { code:0x06CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06CF - ,simpleLowerCaseMapping:0x06CF - ,simpleTitleCaseMapping:0x06CF - }, - { code:0x06D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06D0 - ,simpleLowerCaseMapping:0x06D0 - ,simpleTitleCaseMapping:0x06D0 - }, - { code:0x06D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06D1 - ,simpleLowerCaseMapping:0x06D1 - ,simpleTitleCaseMapping:0x06D1 - }, - { code:0x06D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06D2 - ,simpleLowerCaseMapping:0x06D2 - ,simpleTitleCaseMapping:0x06D2 - }, - { code:0x06D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06D3 - ,simpleLowerCaseMapping:0x06D3 - ,simpleTitleCaseMapping:0x06D3 - }, - { code:0x06D4 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x06D4 - ,simpleLowerCaseMapping:0x06D4 - ,simpleTitleCaseMapping:0x06D4 - }, - { code:0x06D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06D5 - ,simpleLowerCaseMapping:0x06D5 - ,simpleTitleCaseMapping:0x06D5 - }, - { code:0x06D6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06D6 - ,simpleLowerCaseMapping:0x06D6 - ,simpleTitleCaseMapping:0x06D6 - }, - { code:0x06D7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06D7 - ,simpleLowerCaseMapping:0x06D7 - ,simpleTitleCaseMapping:0x06D7 - }, - { code:0x06D8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06D8 - ,simpleLowerCaseMapping:0x06D8 - ,simpleTitleCaseMapping:0x06D8 - }, - { code:0x06D9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06D9 - ,simpleLowerCaseMapping:0x06D9 - ,simpleTitleCaseMapping:0x06D9 - }, - { code:0x06DA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06DA - ,simpleLowerCaseMapping:0x06DA - ,simpleTitleCaseMapping:0x06DA - }, - { code:0x06DB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06DB - ,simpleLowerCaseMapping:0x06DB - ,simpleTitleCaseMapping:0x06DB - }, - { code:0x06DC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06DC - ,simpleLowerCaseMapping:0x06DC - ,simpleTitleCaseMapping:0x06DC - }, - { code:0x06DD - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x06DD - ,simpleLowerCaseMapping:0x06DD - ,simpleTitleCaseMapping:0x06DD - }, - { code:0x06DE - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x06DE - ,simpleLowerCaseMapping:0x06DE - ,simpleTitleCaseMapping:0x06DE - }, - { code:0x06DF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06DF - ,simpleLowerCaseMapping:0x06DF - ,simpleTitleCaseMapping:0x06DF - }, - { code:0x06E0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E0 - ,simpleLowerCaseMapping:0x06E0 - ,simpleTitleCaseMapping:0x06E0 - }, - { code:0x06E1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E1 - ,simpleLowerCaseMapping:0x06E1 - ,simpleTitleCaseMapping:0x06E1 - }, - { code:0x06E2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E2 - ,simpleLowerCaseMapping:0x06E2 - ,simpleTitleCaseMapping:0x06E2 - }, - { code:0x06E3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E3 - ,simpleLowerCaseMapping:0x06E3 - ,simpleTitleCaseMapping:0x06E3 - }, - { code:0x06E4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E4 - ,simpleLowerCaseMapping:0x06E4 - ,simpleTitleCaseMapping:0x06E4 - }, - { code:0x06E5 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x06E5 - ,simpleLowerCaseMapping:0x06E5 - ,simpleTitleCaseMapping:0x06E5 - }, - { code:0x06E6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x06E6 - ,simpleLowerCaseMapping:0x06E6 - ,simpleTitleCaseMapping:0x06E6 - }, - { code:0x06E7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E7 - ,simpleLowerCaseMapping:0x06E7 - ,simpleTitleCaseMapping:0x06E7 - }, - { code:0x06E8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06E8 - ,simpleLowerCaseMapping:0x06E8 - ,simpleTitleCaseMapping:0x06E8 - }, - { code:0x06E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x06E9 - ,simpleLowerCaseMapping:0x06E9 - ,simpleTitleCaseMapping:0x06E9 - }, - { code:0x06EA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06EA - ,simpleLowerCaseMapping:0x06EA - ,simpleTitleCaseMapping:0x06EA - }, - { code:0x06EB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06EB - ,simpleLowerCaseMapping:0x06EB - ,simpleTitleCaseMapping:0x06EB - }, - { code:0x06EC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06EC - ,simpleLowerCaseMapping:0x06EC - ,simpleTitleCaseMapping:0x06EC - }, - { code:0x06ED - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x06ED - ,simpleLowerCaseMapping:0x06ED - ,simpleTitleCaseMapping:0x06ED - }, - { code:0x06EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06EE - ,simpleLowerCaseMapping:0x06EE - ,simpleTitleCaseMapping:0x06EE - }, - { code:0x06EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06EF - ,simpleLowerCaseMapping:0x06EF - ,simpleTitleCaseMapping:0x06EF - }, - { code:0x06F0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F0 - ,simpleLowerCaseMapping:0x06F0 - ,simpleTitleCaseMapping:0x06F0 - }, - { code:0x06F1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F1 - ,simpleLowerCaseMapping:0x06F1 - ,simpleTitleCaseMapping:0x06F1 - }, - { code:0x06F2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F2 - ,simpleLowerCaseMapping:0x06F2 - ,simpleTitleCaseMapping:0x06F2 - }, - { code:0x06F3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F3 - ,simpleLowerCaseMapping:0x06F3 - ,simpleTitleCaseMapping:0x06F3 - }, - { code:0x06F4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F4 - ,simpleLowerCaseMapping:0x06F4 - ,simpleTitleCaseMapping:0x06F4 - }, - { code:0x06F5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F5 - ,simpleLowerCaseMapping:0x06F5 - ,simpleTitleCaseMapping:0x06F5 - }, - { code:0x06F6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F6 - ,simpleLowerCaseMapping:0x06F6 - ,simpleTitleCaseMapping:0x06F6 - }, - { code:0x06F7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F7 - ,simpleLowerCaseMapping:0x06F7 - ,simpleTitleCaseMapping:0x06F7 - }, - { code:0x06F8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F8 - ,simpleLowerCaseMapping:0x06F8 - ,simpleTitleCaseMapping:0x06F8 - }, - { code:0x06F9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x06F9 - ,simpleLowerCaseMapping:0x06F9 - ,simpleTitleCaseMapping:0x06F9 - }, - { code:0x06FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06FA - ,simpleLowerCaseMapping:0x06FA - ,simpleTitleCaseMapping:0x06FA - }, - { code:0x06FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06FB - ,simpleLowerCaseMapping:0x06FB - ,simpleTitleCaseMapping:0x06FB - }, - { code:0x06FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06FC - ,simpleLowerCaseMapping:0x06FC - ,simpleTitleCaseMapping:0x06FC - }, - { code:0x06FD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x06FD - ,simpleLowerCaseMapping:0x06FD - ,simpleTitleCaseMapping:0x06FD - }, - { code:0x06FE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x06FE - ,simpleLowerCaseMapping:0x06FE - ,simpleTitleCaseMapping:0x06FE - }, - { code:0x06FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x06FF - ,simpleLowerCaseMapping:0x06FF - ,simpleTitleCaseMapping:0x06FF - }, - { code:0x0700 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0700 - ,simpleLowerCaseMapping:0x0700 - ,simpleTitleCaseMapping:0x0700 - }, - { code:0x0701 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0701 - ,simpleLowerCaseMapping:0x0701 - ,simpleTitleCaseMapping:0x0701 - }, - { code:0x0702 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0702 - ,simpleLowerCaseMapping:0x0702 - ,simpleTitleCaseMapping:0x0702 - }, - { code:0x0703 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0703 - ,simpleLowerCaseMapping:0x0703 - ,simpleTitleCaseMapping:0x0703 - }, - { code:0x0704 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0704 - ,simpleLowerCaseMapping:0x0704 - ,simpleTitleCaseMapping:0x0704 - }, - { code:0x0705 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0705 - ,simpleLowerCaseMapping:0x0705 - ,simpleTitleCaseMapping:0x0705 - }, - { code:0x0706 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0706 - ,simpleLowerCaseMapping:0x0706 - ,simpleTitleCaseMapping:0x0706 - }, - { code:0x0707 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0707 - ,simpleLowerCaseMapping:0x0707 - ,simpleTitleCaseMapping:0x0707 - }, - { code:0x0708 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0708 - ,simpleLowerCaseMapping:0x0708 - ,simpleTitleCaseMapping:0x0708 - }, - { code:0x0709 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0709 - ,simpleLowerCaseMapping:0x0709 - ,simpleTitleCaseMapping:0x0709 - }, - { code:0x070A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x070A - ,simpleLowerCaseMapping:0x070A - ,simpleTitleCaseMapping:0x070A - }, - { code:0x070B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x070B - ,simpleLowerCaseMapping:0x070B - ,simpleTitleCaseMapping:0x070B - }, - { code:0x070C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x070C - ,simpleLowerCaseMapping:0x070C - ,simpleTitleCaseMapping:0x070C - }, - { code:0x070D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x070D - ,simpleLowerCaseMapping:0x070D - ,simpleTitleCaseMapping:0x070D - }, - { code:0x070F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x070F - ,simpleLowerCaseMapping:0x070F - ,simpleTitleCaseMapping:0x070F - }, - { code:0x0710 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0710 - ,simpleLowerCaseMapping:0x0710 - ,simpleTitleCaseMapping:0x0710 - }, - { code:0x0711 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0711 - ,simpleLowerCaseMapping:0x0711 - ,simpleTitleCaseMapping:0x0711 - }, - { code:0x0712 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0712 - ,simpleLowerCaseMapping:0x0712 - ,simpleTitleCaseMapping:0x0712 - }, - { code:0x0713 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0713 - ,simpleLowerCaseMapping:0x0713 - ,simpleTitleCaseMapping:0x0713 - }, - { code:0x0714 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0714 - ,simpleLowerCaseMapping:0x0714 - ,simpleTitleCaseMapping:0x0714 - }, - { code:0x0715 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0715 - ,simpleLowerCaseMapping:0x0715 - ,simpleTitleCaseMapping:0x0715 - }, - { code:0x0716 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0716 - ,simpleLowerCaseMapping:0x0716 - ,simpleTitleCaseMapping:0x0716 - }, - { code:0x0717 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0717 - ,simpleLowerCaseMapping:0x0717 - ,simpleTitleCaseMapping:0x0717 - }, - { code:0x0718 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0718 - ,simpleLowerCaseMapping:0x0718 - ,simpleTitleCaseMapping:0x0718 - }, - { code:0x0719 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0719 - ,simpleLowerCaseMapping:0x0719 - ,simpleTitleCaseMapping:0x0719 - }, - { code:0x071A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071A - ,simpleLowerCaseMapping:0x071A - ,simpleTitleCaseMapping:0x071A - }, - { code:0x071B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071B - ,simpleLowerCaseMapping:0x071B - ,simpleTitleCaseMapping:0x071B - }, - { code:0x071C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071C - ,simpleLowerCaseMapping:0x071C - ,simpleTitleCaseMapping:0x071C - }, - { code:0x071D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071D - ,simpleLowerCaseMapping:0x071D - ,simpleTitleCaseMapping:0x071D - }, - { code:0x071E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071E - ,simpleLowerCaseMapping:0x071E - ,simpleTitleCaseMapping:0x071E - }, - { code:0x071F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x071F - ,simpleLowerCaseMapping:0x071F - ,simpleTitleCaseMapping:0x071F - }, - { code:0x0720 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0720 - ,simpleLowerCaseMapping:0x0720 - ,simpleTitleCaseMapping:0x0720 - }, - { code:0x0721 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0721 - ,simpleLowerCaseMapping:0x0721 - ,simpleTitleCaseMapping:0x0721 - }, - { code:0x0722 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0722 - ,simpleLowerCaseMapping:0x0722 - ,simpleTitleCaseMapping:0x0722 - }, - { code:0x0723 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0723 - ,simpleLowerCaseMapping:0x0723 - ,simpleTitleCaseMapping:0x0723 - }, - { code:0x0724 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0724 - ,simpleLowerCaseMapping:0x0724 - ,simpleTitleCaseMapping:0x0724 - }, - { code:0x0725 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0725 - ,simpleLowerCaseMapping:0x0725 - ,simpleTitleCaseMapping:0x0725 - }, - { code:0x0726 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0726 - ,simpleLowerCaseMapping:0x0726 - ,simpleTitleCaseMapping:0x0726 - }, - { code:0x0727 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0727 - ,simpleLowerCaseMapping:0x0727 - ,simpleTitleCaseMapping:0x0727 - }, - { code:0x0728 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0728 - ,simpleLowerCaseMapping:0x0728 - ,simpleTitleCaseMapping:0x0728 - }, - { code:0x0729 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0729 - ,simpleLowerCaseMapping:0x0729 - ,simpleTitleCaseMapping:0x0729 - }, - { code:0x072A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072A - ,simpleLowerCaseMapping:0x072A - ,simpleTitleCaseMapping:0x072A - }, - { code:0x072B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072B - ,simpleLowerCaseMapping:0x072B - ,simpleTitleCaseMapping:0x072B - }, - { code:0x072C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072C - ,simpleLowerCaseMapping:0x072C - ,simpleTitleCaseMapping:0x072C - }, - { code:0x072D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072D - ,simpleLowerCaseMapping:0x072D - ,simpleTitleCaseMapping:0x072D - }, - { code:0x072E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072E - ,simpleLowerCaseMapping:0x072E - ,simpleTitleCaseMapping:0x072E - }, - { code:0x072F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x072F - ,simpleLowerCaseMapping:0x072F - ,simpleTitleCaseMapping:0x072F - }, - { code:0x0730 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0730 - ,simpleLowerCaseMapping:0x0730 - ,simpleTitleCaseMapping:0x0730 - }, - { code:0x0731 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0731 - ,simpleLowerCaseMapping:0x0731 - ,simpleTitleCaseMapping:0x0731 - }, - { code:0x0732 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0732 - ,simpleLowerCaseMapping:0x0732 - ,simpleTitleCaseMapping:0x0732 - }, - { code:0x0733 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0733 - ,simpleLowerCaseMapping:0x0733 - ,simpleTitleCaseMapping:0x0733 - }, - { code:0x0734 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0734 - ,simpleLowerCaseMapping:0x0734 - ,simpleTitleCaseMapping:0x0734 - }, - { code:0x0735 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0735 - ,simpleLowerCaseMapping:0x0735 - ,simpleTitleCaseMapping:0x0735 - }, - { code:0x0736 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0736 - ,simpleLowerCaseMapping:0x0736 - ,simpleTitleCaseMapping:0x0736 - }, - { code:0x0737 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0737 - ,simpleLowerCaseMapping:0x0737 - ,simpleTitleCaseMapping:0x0737 - }, - { code:0x0738 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0738 - ,simpleLowerCaseMapping:0x0738 - ,simpleTitleCaseMapping:0x0738 - }, - { code:0x0739 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0739 - ,simpleLowerCaseMapping:0x0739 - ,simpleTitleCaseMapping:0x0739 - }, - { code:0x073A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073A - ,simpleLowerCaseMapping:0x073A - ,simpleTitleCaseMapping:0x073A - }, - { code:0x073B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073B - ,simpleLowerCaseMapping:0x073B - ,simpleTitleCaseMapping:0x073B - }, - { code:0x073C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073C - ,simpleLowerCaseMapping:0x073C - ,simpleTitleCaseMapping:0x073C - }, - { code:0x073D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073D - ,simpleLowerCaseMapping:0x073D - ,simpleTitleCaseMapping:0x073D - }, - { code:0x073E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073E - ,simpleLowerCaseMapping:0x073E - ,simpleTitleCaseMapping:0x073E - }, - { code:0x073F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x073F - ,simpleLowerCaseMapping:0x073F - ,simpleTitleCaseMapping:0x073F - }, - { code:0x0740 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0740 - ,simpleLowerCaseMapping:0x0740 - ,simpleTitleCaseMapping:0x0740 - }, - { code:0x0741 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0741 - ,simpleLowerCaseMapping:0x0741 - ,simpleTitleCaseMapping:0x0741 - }, - { code:0x0742 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0742 - ,simpleLowerCaseMapping:0x0742 - ,simpleTitleCaseMapping:0x0742 - }, - { code:0x0743 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0743 - ,simpleLowerCaseMapping:0x0743 - ,simpleTitleCaseMapping:0x0743 - }, - { code:0x0744 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0744 - ,simpleLowerCaseMapping:0x0744 - ,simpleTitleCaseMapping:0x0744 - }, - { code:0x0745 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0745 - ,simpleLowerCaseMapping:0x0745 - ,simpleTitleCaseMapping:0x0745 - }, - { code:0x0746 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0746 - ,simpleLowerCaseMapping:0x0746 - ,simpleTitleCaseMapping:0x0746 - }, - { code:0x0747 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0747 - ,simpleLowerCaseMapping:0x0747 - ,simpleTitleCaseMapping:0x0747 - }, - { code:0x0748 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0748 - ,simpleLowerCaseMapping:0x0748 - ,simpleTitleCaseMapping:0x0748 - }, - { code:0x0749 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0749 - ,simpleLowerCaseMapping:0x0749 - ,simpleTitleCaseMapping:0x0749 - }, - { code:0x074A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x074A - ,simpleLowerCaseMapping:0x074A - ,simpleTitleCaseMapping:0x074A - }, - { code:0x074D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x074D - ,simpleLowerCaseMapping:0x074D - ,simpleTitleCaseMapping:0x074D - }, - { code:0x074E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x074E - ,simpleLowerCaseMapping:0x074E - ,simpleTitleCaseMapping:0x074E - }, - { code:0x074F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x074F - ,simpleLowerCaseMapping:0x074F - ,simpleTitleCaseMapping:0x074F - }, - { code:0x0750 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0750 - ,simpleLowerCaseMapping:0x0750 - ,simpleTitleCaseMapping:0x0750 - }, - { code:0x0751 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0751 - ,simpleLowerCaseMapping:0x0751 - ,simpleTitleCaseMapping:0x0751 - }, - { code:0x0752 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0752 - ,simpleLowerCaseMapping:0x0752 - ,simpleTitleCaseMapping:0x0752 - }, - { code:0x0753 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0753 - ,simpleLowerCaseMapping:0x0753 - ,simpleTitleCaseMapping:0x0753 - }, - { code:0x0754 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0754 - ,simpleLowerCaseMapping:0x0754 - ,simpleTitleCaseMapping:0x0754 - }, - { code:0x0755 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0755 - ,simpleLowerCaseMapping:0x0755 - ,simpleTitleCaseMapping:0x0755 - }, - { code:0x0756 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0756 - ,simpleLowerCaseMapping:0x0756 - ,simpleTitleCaseMapping:0x0756 - }, - { code:0x0757 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0757 - ,simpleLowerCaseMapping:0x0757 - ,simpleTitleCaseMapping:0x0757 - }, - { code:0x0758 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0758 - ,simpleLowerCaseMapping:0x0758 - ,simpleTitleCaseMapping:0x0758 - }, - { code:0x0759 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0759 - ,simpleLowerCaseMapping:0x0759 - ,simpleTitleCaseMapping:0x0759 - }, - { code:0x075A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075A - ,simpleLowerCaseMapping:0x075A - ,simpleTitleCaseMapping:0x075A - }, - { code:0x075B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075B - ,simpleLowerCaseMapping:0x075B - ,simpleTitleCaseMapping:0x075B - }, - { code:0x075C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075C - ,simpleLowerCaseMapping:0x075C - ,simpleTitleCaseMapping:0x075C - }, - { code:0x075D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075D - ,simpleLowerCaseMapping:0x075D - ,simpleTitleCaseMapping:0x075D - }, - { code:0x075E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075E - ,simpleLowerCaseMapping:0x075E - ,simpleTitleCaseMapping:0x075E - }, - { code:0x075F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x075F - ,simpleLowerCaseMapping:0x075F - ,simpleTitleCaseMapping:0x075F - }, - { code:0x0760 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0760 - ,simpleLowerCaseMapping:0x0760 - ,simpleTitleCaseMapping:0x0760 - }, - { code:0x0761 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0761 - ,simpleLowerCaseMapping:0x0761 - ,simpleTitleCaseMapping:0x0761 - }, - { code:0x0762 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0762 - ,simpleLowerCaseMapping:0x0762 - ,simpleTitleCaseMapping:0x0762 - }, - { code:0x0763 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0763 - ,simpleLowerCaseMapping:0x0763 - ,simpleTitleCaseMapping:0x0763 - }, - { code:0x0764 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0764 - ,simpleLowerCaseMapping:0x0764 - ,simpleTitleCaseMapping:0x0764 - }, - { code:0x0765 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0765 - ,simpleLowerCaseMapping:0x0765 - ,simpleTitleCaseMapping:0x0765 - }, - { code:0x0766 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0766 - ,simpleLowerCaseMapping:0x0766 - ,simpleTitleCaseMapping:0x0766 - }, - { code:0x0767 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0767 - ,simpleLowerCaseMapping:0x0767 - ,simpleTitleCaseMapping:0x0767 - }, - { code:0x0768 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0768 - ,simpleLowerCaseMapping:0x0768 - ,simpleTitleCaseMapping:0x0768 - }, - { code:0x0769 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0769 - ,simpleLowerCaseMapping:0x0769 - ,simpleTitleCaseMapping:0x0769 - }, - { code:0x076A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x076A - ,simpleLowerCaseMapping:0x076A - ,simpleTitleCaseMapping:0x076A - }, - { code:0x076B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x076B - ,simpleLowerCaseMapping:0x076B - ,simpleTitleCaseMapping:0x076B - }, - { code:0x076C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x076C - ,simpleLowerCaseMapping:0x076C - ,simpleTitleCaseMapping:0x076C - }, - { code:0x076D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x076D - ,simpleLowerCaseMapping:0x076D - ,simpleTitleCaseMapping:0x076D - }, - { code:0x0780 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0780 - ,simpleLowerCaseMapping:0x0780 - ,simpleTitleCaseMapping:0x0780 - }, - { code:0x0781 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0781 - ,simpleLowerCaseMapping:0x0781 - ,simpleTitleCaseMapping:0x0781 - }, - { code:0x0782 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0782 - ,simpleLowerCaseMapping:0x0782 - ,simpleTitleCaseMapping:0x0782 - }, - { code:0x0783 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0783 - ,simpleLowerCaseMapping:0x0783 - ,simpleTitleCaseMapping:0x0783 - }, - { code:0x0784 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0784 - ,simpleLowerCaseMapping:0x0784 - ,simpleTitleCaseMapping:0x0784 - }, - { code:0x0785 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0785 - ,simpleLowerCaseMapping:0x0785 - ,simpleTitleCaseMapping:0x0785 - }, - { code:0x0786 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0786 - ,simpleLowerCaseMapping:0x0786 - ,simpleTitleCaseMapping:0x0786 - }, - { code:0x0787 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0787 - ,simpleLowerCaseMapping:0x0787 - ,simpleTitleCaseMapping:0x0787 - }, - { code:0x0788 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0788 - ,simpleLowerCaseMapping:0x0788 - ,simpleTitleCaseMapping:0x0788 - }, - { code:0x0789 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0789 - ,simpleLowerCaseMapping:0x0789 - ,simpleTitleCaseMapping:0x0789 - }, - { code:0x078A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078A - ,simpleLowerCaseMapping:0x078A - ,simpleTitleCaseMapping:0x078A - }, - { code:0x078B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078B - ,simpleLowerCaseMapping:0x078B - ,simpleTitleCaseMapping:0x078B - }, - { code:0x078C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078C - ,simpleLowerCaseMapping:0x078C - ,simpleTitleCaseMapping:0x078C - }, - { code:0x078D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078D - ,simpleLowerCaseMapping:0x078D - ,simpleTitleCaseMapping:0x078D - }, - { code:0x078E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078E - ,simpleLowerCaseMapping:0x078E - ,simpleTitleCaseMapping:0x078E - }, - { code:0x078F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x078F - ,simpleLowerCaseMapping:0x078F - ,simpleTitleCaseMapping:0x078F - }, - { code:0x0790 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0790 - ,simpleLowerCaseMapping:0x0790 - ,simpleTitleCaseMapping:0x0790 - }, - { code:0x0791 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0791 - ,simpleLowerCaseMapping:0x0791 - ,simpleTitleCaseMapping:0x0791 - }, - { code:0x0792 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0792 - ,simpleLowerCaseMapping:0x0792 - ,simpleTitleCaseMapping:0x0792 - }, - { code:0x0793 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0793 - ,simpleLowerCaseMapping:0x0793 - ,simpleTitleCaseMapping:0x0793 - }, - { code:0x0794 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0794 - ,simpleLowerCaseMapping:0x0794 - ,simpleTitleCaseMapping:0x0794 - }, - { code:0x0795 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0795 - ,simpleLowerCaseMapping:0x0795 - ,simpleTitleCaseMapping:0x0795 - }, - { code:0x0796 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0796 - ,simpleLowerCaseMapping:0x0796 - ,simpleTitleCaseMapping:0x0796 - }, - { code:0x0797 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0797 - ,simpleLowerCaseMapping:0x0797 - ,simpleTitleCaseMapping:0x0797 - }, - { code:0x0798 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0798 - ,simpleLowerCaseMapping:0x0798 - ,simpleTitleCaseMapping:0x0798 - }, - { code:0x0799 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0799 - ,simpleLowerCaseMapping:0x0799 - ,simpleTitleCaseMapping:0x0799 - }, - { code:0x079A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079A - ,simpleLowerCaseMapping:0x079A - ,simpleTitleCaseMapping:0x079A - }, - { code:0x079B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079B - ,simpleLowerCaseMapping:0x079B - ,simpleTitleCaseMapping:0x079B - }, - { code:0x079C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079C - ,simpleLowerCaseMapping:0x079C - ,simpleTitleCaseMapping:0x079C - }, - { code:0x079D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079D - ,simpleLowerCaseMapping:0x079D - ,simpleTitleCaseMapping:0x079D - }, - { code:0x079E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079E - ,simpleLowerCaseMapping:0x079E - ,simpleTitleCaseMapping:0x079E - }, - { code:0x079F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x079F - ,simpleLowerCaseMapping:0x079F - ,simpleTitleCaseMapping:0x079F - }, - { code:0x07A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A0 - ,simpleLowerCaseMapping:0x07A0 - ,simpleTitleCaseMapping:0x07A0 - }, - { code:0x07A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A1 - ,simpleLowerCaseMapping:0x07A1 - ,simpleTitleCaseMapping:0x07A1 - }, - { code:0x07A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A2 - ,simpleLowerCaseMapping:0x07A2 - ,simpleTitleCaseMapping:0x07A2 - }, - { code:0x07A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A3 - ,simpleLowerCaseMapping:0x07A3 - ,simpleTitleCaseMapping:0x07A3 - }, - { code:0x07A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A4 - ,simpleLowerCaseMapping:0x07A4 - ,simpleTitleCaseMapping:0x07A4 - }, - { code:0x07A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07A5 - ,simpleLowerCaseMapping:0x07A5 - ,simpleTitleCaseMapping:0x07A5 - }, - { code:0x07A6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07A6 - ,simpleLowerCaseMapping:0x07A6 - ,simpleTitleCaseMapping:0x07A6 - }, - { code:0x07A7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07A7 - ,simpleLowerCaseMapping:0x07A7 - ,simpleTitleCaseMapping:0x07A7 - }, - { code:0x07A8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07A8 - ,simpleLowerCaseMapping:0x07A8 - ,simpleTitleCaseMapping:0x07A8 - }, - { code:0x07A9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07A9 - ,simpleLowerCaseMapping:0x07A9 - ,simpleTitleCaseMapping:0x07A9 - }, - { code:0x07AA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AA - ,simpleLowerCaseMapping:0x07AA - ,simpleTitleCaseMapping:0x07AA - }, - { code:0x07AB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AB - ,simpleLowerCaseMapping:0x07AB - ,simpleTitleCaseMapping:0x07AB - }, - { code:0x07AC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AC - ,simpleLowerCaseMapping:0x07AC - ,simpleTitleCaseMapping:0x07AC - }, - { code:0x07AD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AD - ,simpleLowerCaseMapping:0x07AD - ,simpleTitleCaseMapping:0x07AD - }, - { code:0x07AE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AE - ,simpleLowerCaseMapping:0x07AE - ,simpleTitleCaseMapping:0x07AE - }, - { code:0x07AF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07AF - ,simpleLowerCaseMapping:0x07AF - ,simpleTitleCaseMapping:0x07AF - }, - { code:0x07B0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07B0 - ,simpleLowerCaseMapping:0x07B0 - ,simpleTitleCaseMapping:0x07B0 - }, - { code:0x07B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07B1 - ,simpleLowerCaseMapping:0x07B1 - ,simpleTitleCaseMapping:0x07B1 - }, - { code:0x07C0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C0 - ,simpleLowerCaseMapping:0x07C0 - ,simpleTitleCaseMapping:0x07C0 - }, - { code:0x07C1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C1 - ,simpleLowerCaseMapping:0x07C1 - ,simpleTitleCaseMapping:0x07C1 - }, - { code:0x07C2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C2 - ,simpleLowerCaseMapping:0x07C2 - ,simpleTitleCaseMapping:0x07C2 - }, - { code:0x07C3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C3 - ,simpleLowerCaseMapping:0x07C3 - ,simpleTitleCaseMapping:0x07C3 - }, - { code:0x07C4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C4 - ,simpleLowerCaseMapping:0x07C4 - ,simpleTitleCaseMapping:0x07C4 - }, - { code:0x07C5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C5 - ,simpleLowerCaseMapping:0x07C5 - ,simpleTitleCaseMapping:0x07C5 - }, - { code:0x07C6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C6 - ,simpleLowerCaseMapping:0x07C6 - ,simpleTitleCaseMapping:0x07C6 - }, - { code:0x07C7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C7 - ,simpleLowerCaseMapping:0x07C7 - ,simpleTitleCaseMapping:0x07C7 - }, - { code:0x07C8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C8 - ,simpleLowerCaseMapping:0x07C8 - ,simpleTitleCaseMapping:0x07C8 - }, - { code:0x07C9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x07C9 - ,simpleLowerCaseMapping:0x07C9 - ,simpleTitleCaseMapping:0x07C9 - }, - { code:0x07CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CA - ,simpleLowerCaseMapping:0x07CA - ,simpleTitleCaseMapping:0x07CA - }, - { code:0x07CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CB - ,simpleLowerCaseMapping:0x07CB - ,simpleTitleCaseMapping:0x07CB - }, - { code:0x07CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CC - ,simpleLowerCaseMapping:0x07CC - ,simpleTitleCaseMapping:0x07CC - }, - { code:0x07CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CD - ,simpleLowerCaseMapping:0x07CD - ,simpleTitleCaseMapping:0x07CD - }, - { code:0x07CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CE - ,simpleLowerCaseMapping:0x07CE - ,simpleTitleCaseMapping:0x07CE - }, - { code:0x07CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07CF - ,simpleLowerCaseMapping:0x07CF - ,simpleTitleCaseMapping:0x07CF - }, - { code:0x07D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D0 - ,simpleLowerCaseMapping:0x07D0 - ,simpleTitleCaseMapping:0x07D0 - }, - { code:0x07D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D1 - ,simpleLowerCaseMapping:0x07D1 - ,simpleTitleCaseMapping:0x07D1 - }, - { code:0x07D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D2 - ,simpleLowerCaseMapping:0x07D2 - ,simpleTitleCaseMapping:0x07D2 - }, - { code:0x07D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D3 - ,simpleLowerCaseMapping:0x07D3 - ,simpleTitleCaseMapping:0x07D3 - }, - { code:0x07D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D4 - ,simpleLowerCaseMapping:0x07D4 - ,simpleTitleCaseMapping:0x07D4 - }, - { code:0x07D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D5 - ,simpleLowerCaseMapping:0x07D5 - ,simpleTitleCaseMapping:0x07D5 - }, - { code:0x07D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D6 - ,simpleLowerCaseMapping:0x07D6 - ,simpleTitleCaseMapping:0x07D6 - }, - { code:0x07D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D7 - ,simpleLowerCaseMapping:0x07D7 - ,simpleTitleCaseMapping:0x07D7 - }, - { code:0x07D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D8 - ,simpleLowerCaseMapping:0x07D8 - ,simpleTitleCaseMapping:0x07D8 - }, - { code:0x07D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07D9 - ,simpleLowerCaseMapping:0x07D9 - ,simpleTitleCaseMapping:0x07D9 - }, - { code:0x07DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DA - ,simpleLowerCaseMapping:0x07DA - ,simpleTitleCaseMapping:0x07DA - }, - { code:0x07DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DB - ,simpleLowerCaseMapping:0x07DB - ,simpleTitleCaseMapping:0x07DB - }, - { code:0x07DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DC - ,simpleLowerCaseMapping:0x07DC - ,simpleTitleCaseMapping:0x07DC - }, - { code:0x07DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DD - ,simpleLowerCaseMapping:0x07DD - ,simpleTitleCaseMapping:0x07DD - }, - { code:0x07DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DE - ,simpleLowerCaseMapping:0x07DE - ,simpleTitleCaseMapping:0x07DE - }, - { code:0x07DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07DF - ,simpleLowerCaseMapping:0x07DF - ,simpleTitleCaseMapping:0x07DF - }, - { code:0x07E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E0 - ,simpleLowerCaseMapping:0x07E0 - ,simpleTitleCaseMapping:0x07E0 - }, - { code:0x07E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E1 - ,simpleLowerCaseMapping:0x07E1 - ,simpleTitleCaseMapping:0x07E1 - }, - { code:0x07E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E2 - ,simpleLowerCaseMapping:0x07E2 - ,simpleTitleCaseMapping:0x07E2 - }, - { code:0x07E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E3 - ,simpleLowerCaseMapping:0x07E3 - ,simpleTitleCaseMapping:0x07E3 - }, - { code:0x07E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E4 - ,simpleLowerCaseMapping:0x07E4 - ,simpleTitleCaseMapping:0x07E4 - }, - { code:0x07E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E5 - ,simpleLowerCaseMapping:0x07E5 - ,simpleTitleCaseMapping:0x07E5 - }, - { code:0x07E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E6 - ,simpleLowerCaseMapping:0x07E6 - ,simpleTitleCaseMapping:0x07E6 - }, - { code:0x07E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E7 - ,simpleLowerCaseMapping:0x07E7 - ,simpleTitleCaseMapping:0x07E7 - }, - { code:0x07E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E8 - ,simpleLowerCaseMapping:0x07E8 - ,simpleTitleCaseMapping:0x07E8 - }, - { code:0x07E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07E9 - ,simpleLowerCaseMapping:0x07E9 - ,simpleTitleCaseMapping:0x07E9 - }, - { code:0x07EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x07EA - ,simpleLowerCaseMapping:0x07EA - ,simpleTitleCaseMapping:0x07EA - }, - { code:0x07EB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07EB - ,simpleLowerCaseMapping:0x07EB - ,simpleTitleCaseMapping:0x07EB - }, - { code:0x07EC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07EC - ,simpleLowerCaseMapping:0x07EC - ,simpleTitleCaseMapping:0x07EC - }, - { code:0x07ED - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07ED - ,simpleLowerCaseMapping:0x07ED - ,simpleTitleCaseMapping:0x07ED - }, - { code:0x07EE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07EE - ,simpleLowerCaseMapping:0x07EE - ,simpleTitleCaseMapping:0x07EE - }, - { code:0x07EF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07EF - ,simpleLowerCaseMapping:0x07EF - ,simpleTitleCaseMapping:0x07EF - }, - { code:0x07F0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07F0 - ,simpleLowerCaseMapping:0x07F0 - ,simpleTitleCaseMapping:0x07F0 - }, - { code:0x07F1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07F1 - ,simpleLowerCaseMapping:0x07F1 - ,simpleTitleCaseMapping:0x07F1 - }, - { code:0x07F2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07F2 - ,simpleLowerCaseMapping:0x07F2 - ,simpleTitleCaseMapping:0x07F2 - }, - { code:0x07F3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x07F3 - ,simpleLowerCaseMapping:0x07F3 - ,simpleTitleCaseMapping:0x07F3 - }, - { code:0x07F4 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x07F4 - ,simpleLowerCaseMapping:0x07F4 - ,simpleTitleCaseMapping:0x07F4 - }, - { code:0x07F5 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x07F5 - ,simpleLowerCaseMapping:0x07F5 - ,simpleTitleCaseMapping:0x07F5 - }, - { code:0x07F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x07F6 - ,simpleLowerCaseMapping:0x07F6 - ,simpleTitleCaseMapping:0x07F6 - }, - { code:0x07F7 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x07F7 - ,simpleLowerCaseMapping:0x07F7 - ,simpleTitleCaseMapping:0x07F7 - }, - { code:0x07F8 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x07F8 - ,simpleLowerCaseMapping:0x07F8 - ,simpleTitleCaseMapping:0x07F8 - }, - { code:0x07F9 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x07F9 - ,simpleLowerCaseMapping:0x07F9 - ,simpleTitleCaseMapping:0x07F9 - }, - { code:0x07FA - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x07FA - ,simpleLowerCaseMapping:0x07FA - ,simpleTitleCaseMapping:0x07FA - }, - { code:0x0901 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0901 - ,simpleLowerCaseMapping:0x0901 - ,simpleTitleCaseMapping:0x0901 - }, - { code:0x0902 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0902 - ,simpleLowerCaseMapping:0x0902 - ,simpleTitleCaseMapping:0x0902 - }, - { code:0x0903 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0903 - ,simpleLowerCaseMapping:0x0903 - ,simpleTitleCaseMapping:0x0903 - }, - { code:0x0904 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0904 - ,simpleLowerCaseMapping:0x0904 - ,simpleTitleCaseMapping:0x0904 - }, - { code:0x0905 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0905 - ,simpleLowerCaseMapping:0x0905 - ,simpleTitleCaseMapping:0x0905 - }, - { code:0x0906 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0906 - ,simpleLowerCaseMapping:0x0906 - ,simpleTitleCaseMapping:0x0906 - }, - { code:0x0907 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0907 - ,simpleLowerCaseMapping:0x0907 - ,simpleTitleCaseMapping:0x0907 - }, - { code:0x0908 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0908 - ,simpleLowerCaseMapping:0x0908 - ,simpleTitleCaseMapping:0x0908 - }, - { code:0x0909 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0909 - ,simpleLowerCaseMapping:0x0909 - ,simpleTitleCaseMapping:0x0909 - }, - { code:0x090A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090A - ,simpleLowerCaseMapping:0x090A - ,simpleTitleCaseMapping:0x090A - }, - { code:0x090B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090B - ,simpleLowerCaseMapping:0x090B - ,simpleTitleCaseMapping:0x090B - }, - { code:0x090C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090C - ,simpleLowerCaseMapping:0x090C - ,simpleTitleCaseMapping:0x090C - }, - { code:0x090D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090D - ,simpleLowerCaseMapping:0x090D - ,simpleTitleCaseMapping:0x090D - }, - { code:0x090E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090E - ,simpleLowerCaseMapping:0x090E - ,simpleTitleCaseMapping:0x090E - }, - { code:0x090F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x090F - ,simpleLowerCaseMapping:0x090F - ,simpleTitleCaseMapping:0x090F - }, - { code:0x0910 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0910 - ,simpleLowerCaseMapping:0x0910 - ,simpleTitleCaseMapping:0x0910 - }, - { code:0x0911 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0911 - ,simpleLowerCaseMapping:0x0911 - ,simpleTitleCaseMapping:0x0911 - }, - { code:0x0912 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0912 - ,simpleLowerCaseMapping:0x0912 - ,simpleTitleCaseMapping:0x0912 - }, - { code:0x0913 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0913 - ,simpleLowerCaseMapping:0x0913 - ,simpleTitleCaseMapping:0x0913 - }, - { code:0x0914 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0914 - ,simpleLowerCaseMapping:0x0914 - ,simpleTitleCaseMapping:0x0914 - }, - { code:0x0915 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0915 - ,simpleLowerCaseMapping:0x0915 - ,simpleTitleCaseMapping:0x0915 - }, - { code:0x0916 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0916 - ,simpleLowerCaseMapping:0x0916 - ,simpleTitleCaseMapping:0x0916 - }, - { code:0x0917 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0917 - ,simpleLowerCaseMapping:0x0917 - ,simpleTitleCaseMapping:0x0917 - }, - { code:0x0918 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0918 - ,simpleLowerCaseMapping:0x0918 - ,simpleTitleCaseMapping:0x0918 - }, - { code:0x0919 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0919 - ,simpleLowerCaseMapping:0x0919 - ,simpleTitleCaseMapping:0x0919 - }, - { code:0x091A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091A - ,simpleLowerCaseMapping:0x091A - ,simpleTitleCaseMapping:0x091A - }, - { code:0x091B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091B - ,simpleLowerCaseMapping:0x091B - ,simpleTitleCaseMapping:0x091B - }, - { code:0x091C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091C - ,simpleLowerCaseMapping:0x091C - ,simpleTitleCaseMapping:0x091C - }, - { code:0x091D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091D - ,simpleLowerCaseMapping:0x091D - ,simpleTitleCaseMapping:0x091D - }, - { code:0x091E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091E - ,simpleLowerCaseMapping:0x091E - ,simpleTitleCaseMapping:0x091E - }, - { code:0x091F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x091F - ,simpleLowerCaseMapping:0x091F - ,simpleTitleCaseMapping:0x091F - }, - { code:0x0920 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0920 - ,simpleLowerCaseMapping:0x0920 - ,simpleTitleCaseMapping:0x0920 - }, - { code:0x0921 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0921 - ,simpleLowerCaseMapping:0x0921 - ,simpleTitleCaseMapping:0x0921 - }, - { code:0x0922 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0922 - ,simpleLowerCaseMapping:0x0922 - ,simpleTitleCaseMapping:0x0922 - }, - { code:0x0923 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0923 - ,simpleLowerCaseMapping:0x0923 - ,simpleTitleCaseMapping:0x0923 - }, - { code:0x0924 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0924 - ,simpleLowerCaseMapping:0x0924 - ,simpleTitleCaseMapping:0x0924 - }, - { code:0x0925 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0925 - ,simpleLowerCaseMapping:0x0925 - ,simpleTitleCaseMapping:0x0925 - }, - { code:0x0926 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0926 - ,simpleLowerCaseMapping:0x0926 - ,simpleTitleCaseMapping:0x0926 - }, - { code:0x0927 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0927 - ,simpleLowerCaseMapping:0x0927 - ,simpleTitleCaseMapping:0x0927 - }, - { code:0x0928 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0928 - ,simpleLowerCaseMapping:0x0928 - ,simpleTitleCaseMapping:0x0928 - }, - { code:0x0929 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0929 - ,simpleLowerCaseMapping:0x0929 - ,simpleTitleCaseMapping:0x0929 - }, - { code:0x092A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092A - ,simpleLowerCaseMapping:0x092A - ,simpleTitleCaseMapping:0x092A - }, - { code:0x092B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092B - ,simpleLowerCaseMapping:0x092B - ,simpleTitleCaseMapping:0x092B - }, - { code:0x092C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092C - ,simpleLowerCaseMapping:0x092C - ,simpleTitleCaseMapping:0x092C - }, - { code:0x092D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092D - ,simpleLowerCaseMapping:0x092D - ,simpleTitleCaseMapping:0x092D - }, - { code:0x092E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092E - ,simpleLowerCaseMapping:0x092E - ,simpleTitleCaseMapping:0x092E - }, - { code:0x092F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x092F - ,simpleLowerCaseMapping:0x092F - ,simpleTitleCaseMapping:0x092F - }, - { code:0x0930 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0930 - ,simpleLowerCaseMapping:0x0930 - ,simpleTitleCaseMapping:0x0930 - }, - { code:0x0931 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0931 - ,simpleLowerCaseMapping:0x0931 - ,simpleTitleCaseMapping:0x0931 - }, - { code:0x0932 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0932 - ,simpleLowerCaseMapping:0x0932 - ,simpleTitleCaseMapping:0x0932 - }, - { code:0x0933 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0933 - ,simpleLowerCaseMapping:0x0933 - ,simpleTitleCaseMapping:0x0933 - }, - { code:0x0934 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0934 - ,simpleLowerCaseMapping:0x0934 - ,simpleTitleCaseMapping:0x0934 - }, - { code:0x0935 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0935 - ,simpleLowerCaseMapping:0x0935 - ,simpleTitleCaseMapping:0x0935 - }, - { code:0x0936 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0936 - ,simpleLowerCaseMapping:0x0936 - ,simpleTitleCaseMapping:0x0936 - }, - { code:0x0937 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0937 - ,simpleLowerCaseMapping:0x0937 - ,simpleTitleCaseMapping:0x0937 - }, - { code:0x0938 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0938 - ,simpleLowerCaseMapping:0x0938 - ,simpleTitleCaseMapping:0x0938 - }, - { code:0x0939 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0939 - ,simpleLowerCaseMapping:0x0939 - ,simpleTitleCaseMapping:0x0939 - }, - { code:0x093C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x093C - ,simpleLowerCaseMapping:0x093C - ,simpleTitleCaseMapping:0x093C - }, - { code:0x093D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x093D - ,simpleLowerCaseMapping:0x093D - ,simpleTitleCaseMapping:0x093D - }, - { code:0x093E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x093E - ,simpleLowerCaseMapping:0x093E - ,simpleTitleCaseMapping:0x093E - }, - { code:0x093F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x093F - ,simpleLowerCaseMapping:0x093F - ,simpleTitleCaseMapping:0x093F - }, - { code:0x0940 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0940 - ,simpleLowerCaseMapping:0x0940 - ,simpleTitleCaseMapping:0x0940 - }, - { code:0x0941 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0941 - ,simpleLowerCaseMapping:0x0941 - ,simpleTitleCaseMapping:0x0941 - }, - { code:0x0942 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0942 - ,simpleLowerCaseMapping:0x0942 - ,simpleTitleCaseMapping:0x0942 - }, - { code:0x0943 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0943 - ,simpleLowerCaseMapping:0x0943 - ,simpleTitleCaseMapping:0x0943 - }, - { code:0x0944 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0944 - ,simpleLowerCaseMapping:0x0944 - ,simpleTitleCaseMapping:0x0944 - }, - { code:0x0945 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0945 - ,simpleLowerCaseMapping:0x0945 - ,simpleTitleCaseMapping:0x0945 - }, - { code:0x0946 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0946 - ,simpleLowerCaseMapping:0x0946 - ,simpleTitleCaseMapping:0x0946 - }, - { code:0x0947 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0947 - ,simpleLowerCaseMapping:0x0947 - ,simpleTitleCaseMapping:0x0947 - }, - { code:0x0948 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0948 - ,simpleLowerCaseMapping:0x0948 - ,simpleTitleCaseMapping:0x0948 - }, - { code:0x0949 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0949 - ,simpleLowerCaseMapping:0x0949 - ,simpleTitleCaseMapping:0x0949 - }, - { code:0x094A - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x094A - ,simpleLowerCaseMapping:0x094A - ,simpleTitleCaseMapping:0x094A - }, - { code:0x094B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x094B - ,simpleLowerCaseMapping:0x094B - ,simpleTitleCaseMapping:0x094B - }, - { code:0x094C - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x094C - ,simpleLowerCaseMapping:0x094C - ,simpleTitleCaseMapping:0x094C - }, - { code:0x094D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x094D - ,simpleLowerCaseMapping:0x094D - ,simpleTitleCaseMapping:0x094D - }, - { code:0x0950 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0950 - ,simpleLowerCaseMapping:0x0950 - ,simpleTitleCaseMapping:0x0950 - }, - { code:0x0951 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0951 - ,simpleLowerCaseMapping:0x0951 - ,simpleTitleCaseMapping:0x0951 - }, - { code:0x0952 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0952 - ,simpleLowerCaseMapping:0x0952 - ,simpleTitleCaseMapping:0x0952 - }, - { code:0x0953 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0953 - ,simpleLowerCaseMapping:0x0953 - ,simpleTitleCaseMapping:0x0953 - }, - { code:0x0954 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0954 - ,simpleLowerCaseMapping:0x0954 - ,simpleTitleCaseMapping:0x0954 - }, - { code:0x0958 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0958 - ,simpleLowerCaseMapping:0x0958 - ,simpleTitleCaseMapping:0x0958 - }, - { code:0x0959 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0959 - ,simpleLowerCaseMapping:0x0959 - ,simpleTitleCaseMapping:0x0959 - }, - { code:0x095A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095A - ,simpleLowerCaseMapping:0x095A - ,simpleTitleCaseMapping:0x095A - }, - { code:0x095B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095B - ,simpleLowerCaseMapping:0x095B - ,simpleTitleCaseMapping:0x095B - }, - { code:0x095C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095C - ,simpleLowerCaseMapping:0x095C - ,simpleTitleCaseMapping:0x095C - }, - { code:0x095D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095D - ,simpleLowerCaseMapping:0x095D - ,simpleTitleCaseMapping:0x095D - }, - { code:0x095E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095E - ,simpleLowerCaseMapping:0x095E - ,simpleTitleCaseMapping:0x095E - }, - { code:0x095F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x095F - ,simpleLowerCaseMapping:0x095F - ,simpleTitleCaseMapping:0x095F - }, - { code:0x0960 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0960 - ,simpleLowerCaseMapping:0x0960 - ,simpleTitleCaseMapping:0x0960 - }, - { code:0x0961 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0961 - ,simpleLowerCaseMapping:0x0961 - ,simpleTitleCaseMapping:0x0961 - }, - { code:0x0962 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0962 - ,simpleLowerCaseMapping:0x0962 - ,simpleTitleCaseMapping:0x0962 - }, - { code:0x0963 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0963 - ,simpleLowerCaseMapping:0x0963 - ,simpleTitleCaseMapping:0x0963 - }, - { code:0x0964 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0964 - ,simpleLowerCaseMapping:0x0964 - ,simpleTitleCaseMapping:0x0964 - }, - { code:0x0965 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0965 - ,simpleLowerCaseMapping:0x0965 - ,simpleTitleCaseMapping:0x0965 - }, - { code:0x0966 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0966 - ,simpleLowerCaseMapping:0x0966 - ,simpleTitleCaseMapping:0x0966 - }, - { code:0x0967 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0967 - ,simpleLowerCaseMapping:0x0967 - ,simpleTitleCaseMapping:0x0967 - }, - { code:0x0968 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0968 - ,simpleLowerCaseMapping:0x0968 - ,simpleTitleCaseMapping:0x0968 - }, - { code:0x0969 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0969 - ,simpleLowerCaseMapping:0x0969 - ,simpleTitleCaseMapping:0x0969 - }, - { code:0x096A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096A - ,simpleLowerCaseMapping:0x096A - ,simpleTitleCaseMapping:0x096A - }, - { code:0x096B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096B - ,simpleLowerCaseMapping:0x096B - ,simpleTitleCaseMapping:0x096B - }, - { code:0x096C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096C - ,simpleLowerCaseMapping:0x096C - ,simpleTitleCaseMapping:0x096C - }, - { code:0x096D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096D - ,simpleLowerCaseMapping:0x096D - ,simpleTitleCaseMapping:0x096D - }, - { code:0x096E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096E - ,simpleLowerCaseMapping:0x096E - ,simpleTitleCaseMapping:0x096E - }, - { code:0x096F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x096F - ,simpleLowerCaseMapping:0x096F - ,simpleTitleCaseMapping:0x096F - }, - { code:0x0970 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0970 - ,simpleLowerCaseMapping:0x0970 - ,simpleTitleCaseMapping:0x0970 - }, - { code:0x097B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x097B - ,simpleLowerCaseMapping:0x097B - ,simpleTitleCaseMapping:0x097B - }, - { code:0x097C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x097C - ,simpleLowerCaseMapping:0x097C - ,simpleTitleCaseMapping:0x097C - }, - { code:0x097D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x097D - ,simpleLowerCaseMapping:0x097D - ,simpleTitleCaseMapping:0x097D - }, - { code:0x097E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x097E - ,simpleLowerCaseMapping:0x097E - ,simpleTitleCaseMapping:0x097E - }, - { code:0x097F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x097F - ,simpleLowerCaseMapping:0x097F - ,simpleTitleCaseMapping:0x097F - }, - { code:0x0981 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0981 - ,simpleLowerCaseMapping:0x0981 - ,simpleTitleCaseMapping:0x0981 - }, - { code:0x0982 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0982 - ,simpleLowerCaseMapping:0x0982 - ,simpleTitleCaseMapping:0x0982 - }, - { code:0x0983 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0983 - ,simpleLowerCaseMapping:0x0983 - ,simpleTitleCaseMapping:0x0983 - }, - { code:0x0985 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0985 - ,simpleLowerCaseMapping:0x0985 - ,simpleTitleCaseMapping:0x0985 - }, - { code:0x0986 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0986 - ,simpleLowerCaseMapping:0x0986 - ,simpleTitleCaseMapping:0x0986 - }, - { code:0x0987 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0987 - ,simpleLowerCaseMapping:0x0987 - ,simpleTitleCaseMapping:0x0987 - }, - { code:0x0988 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0988 - ,simpleLowerCaseMapping:0x0988 - ,simpleTitleCaseMapping:0x0988 - }, - { code:0x0989 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0989 - ,simpleLowerCaseMapping:0x0989 - ,simpleTitleCaseMapping:0x0989 - }, - { code:0x098A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x098A - ,simpleLowerCaseMapping:0x098A - ,simpleTitleCaseMapping:0x098A - }, - { code:0x098B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x098B - ,simpleLowerCaseMapping:0x098B - ,simpleTitleCaseMapping:0x098B - }, - { code:0x098C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x098C - ,simpleLowerCaseMapping:0x098C - ,simpleTitleCaseMapping:0x098C - }, - { code:0x098F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x098F - ,simpleLowerCaseMapping:0x098F - ,simpleTitleCaseMapping:0x098F - }, - { code:0x0990 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0990 - ,simpleLowerCaseMapping:0x0990 - ,simpleTitleCaseMapping:0x0990 - }, - { code:0x0993 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0993 - ,simpleLowerCaseMapping:0x0993 - ,simpleTitleCaseMapping:0x0993 - }, - { code:0x0994 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0994 - ,simpleLowerCaseMapping:0x0994 - ,simpleTitleCaseMapping:0x0994 - }, - { code:0x0995 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0995 - ,simpleLowerCaseMapping:0x0995 - ,simpleTitleCaseMapping:0x0995 - }, - { code:0x0996 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0996 - ,simpleLowerCaseMapping:0x0996 - ,simpleTitleCaseMapping:0x0996 - }, - { code:0x0997 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0997 - ,simpleLowerCaseMapping:0x0997 - ,simpleTitleCaseMapping:0x0997 - }, - { code:0x0998 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0998 - ,simpleLowerCaseMapping:0x0998 - ,simpleTitleCaseMapping:0x0998 - }, - { code:0x0999 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0999 - ,simpleLowerCaseMapping:0x0999 - ,simpleTitleCaseMapping:0x0999 - }, - { code:0x099A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099A - ,simpleLowerCaseMapping:0x099A - ,simpleTitleCaseMapping:0x099A - }, - { code:0x099B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099B - ,simpleLowerCaseMapping:0x099B - ,simpleTitleCaseMapping:0x099B - }, - { code:0x099C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099C - ,simpleLowerCaseMapping:0x099C - ,simpleTitleCaseMapping:0x099C - }, - { code:0x099D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099D - ,simpleLowerCaseMapping:0x099D - ,simpleTitleCaseMapping:0x099D - }, - { code:0x099E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099E - ,simpleLowerCaseMapping:0x099E - ,simpleTitleCaseMapping:0x099E - }, - { code:0x099F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x099F - ,simpleLowerCaseMapping:0x099F - ,simpleTitleCaseMapping:0x099F - }, - { code:0x09A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A0 - ,simpleLowerCaseMapping:0x09A0 - ,simpleTitleCaseMapping:0x09A0 - }, - { code:0x09A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A1 - ,simpleLowerCaseMapping:0x09A1 - ,simpleTitleCaseMapping:0x09A1 - }, - { code:0x09A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A2 - ,simpleLowerCaseMapping:0x09A2 - ,simpleTitleCaseMapping:0x09A2 - }, - { code:0x09A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A3 - ,simpleLowerCaseMapping:0x09A3 - ,simpleTitleCaseMapping:0x09A3 - }, - { code:0x09A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A4 - ,simpleLowerCaseMapping:0x09A4 - ,simpleTitleCaseMapping:0x09A4 - }, - { code:0x09A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A5 - ,simpleLowerCaseMapping:0x09A5 - ,simpleTitleCaseMapping:0x09A5 - }, - { code:0x09A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A6 - ,simpleLowerCaseMapping:0x09A6 - ,simpleTitleCaseMapping:0x09A6 - }, - { code:0x09A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A7 - ,simpleLowerCaseMapping:0x09A7 - ,simpleTitleCaseMapping:0x09A7 - }, - { code:0x09A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09A8 - ,simpleLowerCaseMapping:0x09A8 - ,simpleTitleCaseMapping:0x09A8 - }, - { code:0x09AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AA - ,simpleLowerCaseMapping:0x09AA - ,simpleTitleCaseMapping:0x09AA - }, - { code:0x09AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AB - ,simpleLowerCaseMapping:0x09AB - ,simpleTitleCaseMapping:0x09AB - }, - { code:0x09AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AC - ,simpleLowerCaseMapping:0x09AC - ,simpleTitleCaseMapping:0x09AC - }, - { code:0x09AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AD - ,simpleLowerCaseMapping:0x09AD - ,simpleTitleCaseMapping:0x09AD - }, - { code:0x09AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AE - ,simpleLowerCaseMapping:0x09AE - ,simpleTitleCaseMapping:0x09AE - }, - { code:0x09AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09AF - ,simpleLowerCaseMapping:0x09AF - ,simpleTitleCaseMapping:0x09AF - }, - { code:0x09B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B0 - ,simpleLowerCaseMapping:0x09B0 - ,simpleTitleCaseMapping:0x09B0 - }, - { code:0x09B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B2 - ,simpleLowerCaseMapping:0x09B2 - ,simpleTitleCaseMapping:0x09B2 - }, - { code:0x09B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B6 - ,simpleLowerCaseMapping:0x09B6 - ,simpleTitleCaseMapping:0x09B6 - }, - { code:0x09B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B7 - ,simpleLowerCaseMapping:0x09B7 - ,simpleTitleCaseMapping:0x09B7 - }, - { code:0x09B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B8 - ,simpleLowerCaseMapping:0x09B8 - ,simpleTitleCaseMapping:0x09B8 - }, - { code:0x09B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09B9 - ,simpleLowerCaseMapping:0x09B9 - ,simpleTitleCaseMapping:0x09B9 - }, - { code:0x09BC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09BC - ,simpleLowerCaseMapping:0x09BC - ,simpleTitleCaseMapping:0x09BC - }, - { code:0x09BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09BD - ,simpleLowerCaseMapping:0x09BD - ,simpleTitleCaseMapping:0x09BD - }, - { code:0x09BE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09BE - ,simpleLowerCaseMapping:0x09BE - ,simpleTitleCaseMapping:0x09BE - }, - { code:0x09BF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09BF - ,simpleLowerCaseMapping:0x09BF - ,simpleTitleCaseMapping:0x09BF - }, - { code:0x09C0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09C0 - ,simpleLowerCaseMapping:0x09C0 - ,simpleTitleCaseMapping:0x09C0 - }, - { code:0x09C1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09C1 - ,simpleLowerCaseMapping:0x09C1 - ,simpleTitleCaseMapping:0x09C1 - }, - { code:0x09C2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09C2 - ,simpleLowerCaseMapping:0x09C2 - ,simpleTitleCaseMapping:0x09C2 - }, - { code:0x09C3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09C3 - ,simpleLowerCaseMapping:0x09C3 - ,simpleTitleCaseMapping:0x09C3 - }, - { code:0x09C4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09C4 - ,simpleLowerCaseMapping:0x09C4 - ,simpleTitleCaseMapping:0x09C4 - }, - { code:0x09C7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09C7 - ,simpleLowerCaseMapping:0x09C7 - ,simpleTitleCaseMapping:0x09C7 - }, - { code:0x09C8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09C8 - ,simpleLowerCaseMapping:0x09C8 - ,simpleTitleCaseMapping:0x09C8 - }, - { code:0x09CB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09CB - ,simpleLowerCaseMapping:0x09CB - ,simpleTitleCaseMapping:0x09CB - }, - { code:0x09CC - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09CC - ,simpleLowerCaseMapping:0x09CC - ,simpleTitleCaseMapping:0x09CC - }, - { code:0x09CD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09CD - ,simpleLowerCaseMapping:0x09CD - ,simpleTitleCaseMapping:0x09CD - }, - { code:0x09CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09CE - ,simpleLowerCaseMapping:0x09CE - ,simpleTitleCaseMapping:0x09CE - }, - { code:0x09D7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x09D7 - ,simpleLowerCaseMapping:0x09D7 - ,simpleTitleCaseMapping:0x09D7 - }, - { code:0x09DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09DC - ,simpleLowerCaseMapping:0x09DC - ,simpleTitleCaseMapping:0x09DC - }, - { code:0x09DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09DD - ,simpleLowerCaseMapping:0x09DD - ,simpleTitleCaseMapping:0x09DD - }, - { code:0x09DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09DF - ,simpleLowerCaseMapping:0x09DF - ,simpleTitleCaseMapping:0x09DF - }, - { code:0x09E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09E0 - ,simpleLowerCaseMapping:0x09E0 - ,simpleTitleCaseMapping:0x09E0 - }, - { code:0x09E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09E1 - ,simpleLowerCaseMapping:0x09E1 - ,simpleTitleCaseMapping:0x09E1 - }, - { code:0x09E2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09E2 - ,simpleLowerCaseMapping:0x09E2 - ,simpleTitleCaseMapping:0x09E2 - }, - { code:0x09E3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x09E3 - ,simpleLowerCaseMapping:0x09E3 - ,simpleTitleCaseMapping:0x09E3 - }, - { code:0x09E6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09E6 - ,simpleLowerCaseMapping:0x09E6 - ,simpleTitleCaseMapping:0x09E6 - }, - { code:0x09E7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09E7 - ,simpleLowerCaseMapping:0x09E7 - ,simpleTitleCaseMapping:0x09E7 - }, - { code:0x09E8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09E8 - ,simpleLowerCaseMapping:0x09E8 - ,simpleTitleCaseMapping:0x09E8 - }, - { code:0x09E9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09E9 - ,simpleLowerCaseMapping:0x09E9 - ,simpleTitleCaseMapping:0x09E9 - }, - { code:0x09EA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09EA - ,simpleLowerCaseMapping:0x09EA - ,simpleTitleCaseMapping:0x09EA - }, - { code:0x09EB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09EB - ,simpleLowerCaseMapping:0x09EB - ,simpleTitleCaseMapping:0x09EB - }, - { code:0x09EC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09EC - ,simpleLowerCaseMapping:0x09EC - ,simpleTitleCaseMapping:0x09EC - }, - { code:0x09ED - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09ED - ,simpleLowerCaseMapping:0x09ED - ,simpleTitleCaseMapping:0x09ED - }, - { code:0x09EE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09EE - ,simpleLowerCaseMapping:0x09EE - ,simpleTitleCaseMapping:0x09EE - }, - { code:0x09EF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x09EF - ,simpleLowerCaseMapping:0x09EF - ,simpleTitleCaseMapping:0x09EF - }, - { code:0x09F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09F0 - ,simpleLowerCaseMapping:0x09F0 - ,simpleTitleCaseMapping:0x09F0 - }, - { code:0x09F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x09F1 - ,simpleLowerCaseMapping:0x09F1 - ,simpleTitleCaseMapping:0x09F1 - }, - { code:0x09F2 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x09F2 - ,simpleLowerCaseMapping:0x09F2 - ,simpleTitleCaseMapping:0x09F2 - }, - { code:0x09F3 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x09F3 - ,simpleLowerCaseMapping:0x09F3 - ,simpleTitleCaseMapping:0x09F3 - }, - { code:0x09F4 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F4 - ,simpleLowerCaseMapping:0x09F4 - ,simpleTitleCaseMapping:0x09F4 - }, - { code:0x09F5 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F5 - ,simpleLowerCaseMapping:0x09F5 - ,simpleTitleCaseMapping:0x09F5 - }, - { code:0x09F6 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F6 - ,simpleLowerCaseMapping:0x09F6 - ,simpleTitleCaseMapping:0x09F6 - }, - { code:0x09F7 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F7 - ,simpleLowerCaseMapping:0x09F7 - ,simpleTitleCaseMapping:0x09F7 - }, - { code:0x09F8 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F8 - ,simpleLowerCaseMapping:0x09F8 - ,simpleTitleCaseMapping:0x09F8 - }, - { code:0x09F9 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x09F9 - ,simpleLowerCaseMapping:0x09F9 - ,simpleTitleCaseMapping:0x09F9 - }, - { code:0x09FA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x09FA - ,simpleLowerCaseMapping:0x09FA - ,simpleTitleCaseMapping:0x09FA - }, - { code:0x0A01 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A01 - ,simpleLowerCaseMapping:0x0A01 - ,simpleTitleCaseMapping:0x0A01 - }, - { code:0x0A02 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A02 - ,simpleLowerCaseMapping:0x0A02 - ,simpleTitleCaseMapping:0x0A02 - }, - { code:0x0A03 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0A03 - ,simpleLowerCaseMapping:0x0A03 - ,simpleTitleCaseMapping:0x0A03 - }, - { code:0x0A05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A05 - ,simpleLowerCaseMapping:0x0A05 - ,simpleTitleCaseMapping:0x0A05 - }, - { code:0x0A06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A06 - ,simpleLowerCaseMapping:0x0A06 - ,simpleTitleCaseMapping:0x0A06 - }, - { code:0x0A07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A07 - ,simpleLowerCaseMapping:0x0A07 - ,simpleTitleCaseMapping:0x0A07 - }, - { code:0x0A08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A08 - ,simpleLowerCaseMapping:0x0A08 - ,simpleTitleCaseMapping:0x0A08 - }, - { code:0x0A09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A09 - ,simpleLowerCaseMapping:0x0A09 - ,simpleTitleCaseMapping:0x0A09 - }, - { code:0x0A0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A0A - ,simpleLowerCaseMapping:0x0A0A - ,simpleTitleCaseMapping:0x0A0A - }, - { code:0x0A0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A0F - ,simpleLowerCaseMapping:0x0A0F - ,simpleTitleCaseMapping:0x0A0F - }, - { code:0x0A10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A10 - ,simpleLowerCaseMapping:0x0A10 - ,simpleTitleCaseMapping:0x0A10 - }, - { code:0x0A13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A13 - ,simpleLowerCaseMapping:0x0A13 - ,simpleTitleCaseMapping:0x0A13 - }, - { code:0x0A14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A14 - ,simpleLowerCaseMapping:0x0A14 - ,simpleTitleCaseMapping:0x0A14 - }, - { code:0x0A15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A15 - ,simpleLowerCaseMapping:0x0A15 - ,simpleTitleCaseMapping:0x0A15 - }, - { code:0x0A16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A16 - ,simpleLowerCaseMapping:0x0A16 - ,simpleTitleCaseMapping:0x0A16 - }, - { code:0x0A17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A17 - ,simpleLowerCaseMapping:0x0A17 - ,simpleTitleCaseMapping:0x0A17 - }, - { code:0x0A18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A18 - ,simpleLowerCaseMapping:0x0A18 - ,simpleTitleCaseMapping:0x0A18 - }, - { code:0x0A19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A19 - ,simpleLowerCaseMapping:0x0A19 - ,simpleTitleCaseMapping:0x0A19 - }, - { code:0x0A1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1A - ,simpleLowerCaseMapping:0x0A1A - ,simpleTitleCaseMapping:0x0A1A - }, - { code:0x0A1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1B - ,simpleLowerCaseMapping:0x0A1B - ,simpleTitleCaseMapping:0x0A1B - }, - { code:0x0A1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1C - ,simpleLowerCaseMapping:0x0A1C - ,simpleTitleCaseMapping:0x0A1C - }, - { code:0x0A1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1D - ,simpleLowerCaseMapping:0x0A1D - ,simpleTitleCaseMapping:0x0A1D - }, - { code:0x0A1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1E - ,simpleLowerCaseMapping:0x0A1E - ,simpleTitleCaseMapping:0x0A1E - }, - { code:0x0A1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A1F - ,simpleLowerCaseMapping:0x0A1F - ,simpleTitleCaseMapping:0x0A1F - }, - { code:0x0A20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A20 - ,simpleLowerCaseMapping:0x0A20 - ,simpleTitleCaseMapping:0x0A20 - }, - { code:0x0A21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A21 - ,simpleLowerCaseMapping:0x0A21 - ,simpleTitleCaseMapping:0x0A21 - }, - { code:0x0A22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A22 - ,simpleLowerCaseMapping:0x0A22 - ,simpleTitleCaseMapping:0x0A22 - }, - { code:0x0A23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A23 - ,simpleLowerCaseMapping:0x0A23 - ,simpleTitleCaseMapping:0x0A23 - }, - { code:0x0A24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A24 - ,simpleLowerCaseMapping:0x0A24 - ,simpleTitleCaseMapping:0x0A24 - }, - { code:0x0A25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A25 - ,simpleLowerCaseMapping:0x0A25 - ,simpleTitleCaseMapping:0x0A25 - }, - { code:0x0A26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A26 - ,simpleLowerCaseMapping:0x0A26 - ,simpleTitleCaseMapping:0x0A26 - }, - { code:0x0A27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A27 - ,simpleLowerCaseMapping:0x0A27 - ,simpleTitleCaseMapping:0x0A27 - }, - { code:0x0A28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A28 - ,simpleLowerCaseMapping:0x0A28 - ,simpleTitleCaseMapping:0x0A28 - }, - { code:0x0A2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2A - ,simpleLowerCaseMapping:0x0A2A - ,simpleTitleCaseMapping:0x0A2A - }, - { code:0x0A2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2B - ,simpleLowerCaseMapping:0x0A2B - ,simpleTitleCaseMapping:0x0A2B - }, - { code:0x0A2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2C - ,simpleLowerCaseMapping:0x0A2C - ,simpleTitleCaseMapping:0x0A2C - }, - { code:0x0A2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2D - ,simpleLowerCaseMapping:0x0A2D - ,simpleTitleCaseMapping:0x0A2D - }, - { code:0x0A2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2E - ,simpleLowerCaseMapping:0x0A2E - ,simpleTitleCaseMapping:0x0A2E - }, - { code:0x0A2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A2F - ,simpleLowerCaseMapping:0x0A2F - ,simpleTitleCaseMapping:0x0A2F - }, - { code:0x0A30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A30 - ,simpleLowerCaseMapping:0x0A30 - ,simpleTitleCaseMapping:0x0A30 - }, - { code:0x0A32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A32 - ,simpleLowerCaseMapping:0x0A32 - ,simpleTitleCaseMapping:0x0A32 - }, - { code:0x0A33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A33 - ,simpleLowerCaseMapping:0x0A33 - ,simpleTitleCaseMapping:0x0A33 - }, - { code:0x0A35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A35 - ,simpleLowerCaseMapping:0x0A35 - ,simpleTitleCaseMapping:0x0A35 - }, - { code:0x0A36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A36 - ,simpleLowerCaseMapping:0x0A36 - ,simpleTitleCaseMapping:0x0A36 - }, - { code:0x0A38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A38 - ,simpleLowerCaseMapping:0x0A38 - ,simpleTitleCaseMapping:0x0A38 - }, - { code:0x0A39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A39 - ,simpleLowerCaseMapping:0x0A39 - ,simpleTitleCaseMapping:0x0A39 - }, - { code:0x0A3C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A3C - ,simpleLowerCaseMapping:0x0A3C - ,simpleTitleCaseMapping:0x0A3C - }, - { code:0x0A3E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0A3E - ,simpleLowerCaseMapping:0x0A3E - ,simpleTitleCaseMapping:0x0A3E - }, - { code:0x0A3F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0A3F - ,simpleLowerCaseMapping:0x0A3F - ,simpleTitleCaseMapping:0x0A3F - }, - { code:0x0A40 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0A40 - ,simpleLowerCaseMapping:0x0A40 - ,simpleTitleCaseMapping:0x0A40 - }, - { code:0x0A41 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A41 - ,simpleLowerCaseMapping:0x0A41 - ,simpleTitleCaseMapping:0x0A41 - }, - { code:0x0A42 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A42 - ,simpleLowerCaseMapping:0x0A42 - ,simpleTitleCaseMapping:0x0A42 - }, - { code:0x0A47 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A47 - ,simpleLowerCaseMapping:0x0A47 - ,simpleTitleCaseMapping:0x0A47 - }, - { code:0x0A48 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A48 - ,simpleLowerCaseMapping:0x0A48 - ,simpleTitleCaseMapping:0x0A48 - }, - { code:0x0A4B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A4B - ,simpleLowerCaseMapping:0x0A4B - ,simpleTitleCaseMapping:0x0A4B - }, - { code:0x0A4C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A4C - ,simpleLowerCaseMapping:0x0A4C - ,simpleTitleCaseMapping:0x0A4C - }, - { code:0x0A4D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A4D - ,simpleLowerCaseMapping:0x0A4D - ,simpleTitleCaseMapping:0x0A4D - }, - { code:0x0A59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A59 - ,simpleLowerCaseMapping:0x0A59 - ,simpleTitleCaseMapping:0x0A59 - }, - { code:0x0A5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A5A - ,simpleLowerCaseMapping:0x0A5A - ,simpleTitleCaseMapping:0x0A5A - }, - { code:0x0A5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A5B - ,simpleLowerCaseMapping:0x0A5B - ,simpleTitleCaseMapping:0x0A5B - }, - { code:0x0A5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A5C - ,simpleLowerCaseMapping:0x0A5C - ,simpleTitleCaseMapping:0x0A5C - }, - { code:0x0A5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A5E - ,simpleLowerCaseMapping:0x0A5E - ,simpleTitleCaseMapping:0x0A5E - }, - { code:0x0A66 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A66 - ,simpleLowerCaseMapping:0x0A66 - ,simpleTitleCaseMapping:0x0A66 - }, - { code:0x0A67 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A67 - ,simpleLowerCaseMapping:0x0A67 - ,simpleTitleCaseMapping:0x0A67 - }, - { code:0x0A68 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A68 - ,simpleLowerCaseMapping:0x0A68 - ,simpleTitleCaseMapping:0x0A68 - }, - { code:0x0A69 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A69 - ,simpleLowerCaseMapping:0x0A69 - ,simpleTitleCaseMapping:0x0A69 - }, - { code:0x0A6A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6A - ,simpleLowerCaseMapping:0x0A6A - ,simpleTitleCaseMapping:0x0A6A - }, - { code:0x0A6B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6B - ,simpleLowerCaseMapping:0x0A6B - ,simpleTitleCaseMapping:0x0A6B - }, - { code:0x0A6C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6C - ,simpleLowerCaseMapping:0x0A6C - ,simpleTitleCaseMapping:0x0A6C - }, - { code:0x0A6D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6D - ,simpleLowerCaseMapping:0x0A6D - ,simpleTitleCaseMapping:0x0A6D - }, - { code:0x0A6E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6E - ,simpleLowerCaseMapping:0x0A6E - ,simpleTitleCaseMapping:0x0A6E - }, - { code:0x0A6F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0A6F - ,simpleLowerCaseMapping:0x0A6F - ,simpleTitleCaseMapping:0x0A6F - }, - { code:0x0A70 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A70 - ,simpleLowerCaseMapping:0x0A70 - ,simpleTitleCaseMapping:0x0A70 - }, - { code:0x0A71 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A71 - ,simpleLowerCaseMapping:0x0A71 - ,simpleTitleCaseMapping:0x0A71 - }, - { code:0x0A72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A72 - ,simpleLowerCaseMapping:0x0A72 - ,simpleTitleCaseMapping:0x0A72 - }, - { code:0x0A73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A73 - ,simpleLowerCaseMapping:0x0A73 - ,simpleTitleCaseMapping:0x0A73 - }, - { code:0x0A74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A74 - ,simpleLowerCaseMapping:0x0A74 - ,simpleTitleCaseMapping:0x0A74 - }, - { code:0x0A81 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A81 - ,simpleLowerCaseMapping:0x0A81 - ,simpleTitleCaseMapping:0x0A81 - }, - { code:0x0A82 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0A82 - ,simpleLowerCaseMapping:0x0A82 - ,simpleTitleCaseMapping:0x0A82 - }, - { code:0x0A83 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0A83 - ,simpleLowerCaseMapping:0x0A83 - ,simpleTitleCaseMapping:0x0A83 - }, - { code:0x0A85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A85 - ,simpleLowerCaseMapping:0x0A85 - ,simpleTitleCaseMapping:0x0A85 - }, - { code:0x0A86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A86 - ,simpleLowerCaseMapping:0x0A86 - ,simpleTitleCaseMapping:0x0A86 - }, - { code:0x0A87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A87 - ,simpleLowerCaseMapping:0x0A87 - ,simpleTitleCaseMapping:0x0A87 - }, - { code:0x0A88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A88 - ,simpleLowerCaseMapping:0x0A88 - ,simpleTitleCaseMapping:0x0A88 - }, - { code:0x0A89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A89 - ,simpleLowerCaseMapping:0x0A89 - ,simpleTitleCaseMapping:0x0A89 - }, - { code:0x0A8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A8A - ,simpleLowerCaseMapping:0x0A8A - ,simpleTitleCaseMapping:0x0A8A - }, - { code:0x0A8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A8B - ,simpleLowerCaseMapping:0x0A8B - ,simpleTitleCaseMapping:0x0A8B - }, - { code:0x0A8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A8C - ,simpleLowerCaseMapping:0x0A8C - ,simpleTitleCaseMapping:0x0A8C - }, - { code:0x0A8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A8D - ,simpleLowerCaseMapping:0x0A8D - ,simpleTitleCaseMapping:0x0A8D - }, - { code:0x0A8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A8F - ,simpleLowerCaseMapping:0x0A8F - ,simpleTitleCaseMapping:0x0A8F - }, - { code:0x0A90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A90 - ,simpleLowerCaseMapping:0x0A90 - ,simpleTitleCaseMapping:0x0A90 - }, - { code:0x0A91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A91 - ,simpleLowerCaseMapping:0x0A91 - ,simpleTitleCaseMapping:0x0A91 - }, - { code:0x0A93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A93 - ,simpleLowerCaseMapping:0x0A93 - ,simpleTitleCaseMapping:0x0A93 - }, - { code:0x0A94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A94 - ,simpleLowerCaseMapping:0x0A94 - ,simpleTitleCaseMapping:0x0A94 - }, - { code:0x0A95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A95 - ,simpleLowerCaseMapping:0x0A95 - ,simpleTitleCaseMapping:0x0A95 - }, - { code:0x0A96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A96 - ,simpleLowerCaseMapping:0x0A96 - ,simpleTitleCaseMapping:0x0A96 - }, - { code:0x0A97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A97 - ,simpleLowerCaseMapping:0x0A97 - ,simpleTitleCaseMapping:0x0A97 - }, - { code:0x0A98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A98 - ,simpleLowerCaseMapping:0x0A98 - ,simpleTitleCaseMapping:0x0A98 - }, - { code:0x0A99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A99 - ,simpleLowerCaseMapping:0x0A99 - ,simpleTitleCaseMapping:0x0A99 - }, - { code:0x0A9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9A - ,simpleLowerCaseMapping:0x0A9A - ,simpleTitleCaseMapping:0x0A9A - }, - { code:0x0A9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9B - ,simpleLowerCaseMapping:0x0A9B - ,simpleTitleCaseMapping:0x0A9B - }, - { code:0x0A9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9C - ,simpleLowerCaseMapping:0x0A9C - ,simpleTitleCaseMapping:0x0A9C - }, - { code:0x0A9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9D - ,simpleLowerCaseMapping:0x0A9D - ,simpleTitleCaseMapping:0x0A9D - }, - { code:0x0A9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9E - ,simpleLowerCaseMapping:0x0A9E - ,simpleTitleCaseMapping:0x0A9E - }, - { code:0x0A9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0A9F - ,simpleLowerCaseMapping:0x0A9F - ,simpleTitleCaseMapping:0x0A9F - }, - { code:0x0AA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA0 - ,simpleLowerCaseMapping:0x0AA0 - ,simpleTitleCaseMapping:0x0AA0 - }, - { code:0x0AA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA1 - ,simpleLowerCaseMapping:0x0AA1 - ,simpleTitleCaseMapping:0x0AA1 - }, - { code:0x0AA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA2 - ,simpleLowerCaseMapping:0x0AA2 - ,simpleTitleCaseMapping:0x0AA2 - }, - { code:0x0AA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA3 - ,simpleLowerCaseMapping:0x0AA3 - ,simpleTitleCaseMapping:0x0AA3 - }, - { code:0x0AA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA4 - ,simpleLowerCaseMapping:0x0AA4 - ,simpleTitleCaseMapping:0x0AA4 - }, - { code:0x0AA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA5 - ,simpleLowerCaseMapping:0x0AA5 - ,simpleTitleCaseMapping:0x0AA5 - }, - { code:0x0AA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA6 - ,simpleLowerCaseMapping:0x0AA6 - ,simpleTitleCaseMapping:0x0AA6 - }, - { code:0x0AA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA7 - ,simpleLowerCaseMapping:0x0AA7 - ,simpleTitleCaseMapping:0x0AA7 - }, - { code:0x0AA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AA8 - ,simpleLowerCaseMapping:0x0AA8 - ,simpleTitleCaseMapping:0x0AA8 - }, - { code:0x0AAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAA - ,simpleLowerCaseMapping:0x0AAA - ,simpleTitleCaseMapping:0x0AAA - }, - { code:0x0AAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAB - ,simpleLowerCaseMapping:0x0AAB - ,simpleTitleCaseMapping:0x0AAB - }, - { code:0x0AAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAC - ,simpleLowerCaseMapping:0x0AAC - ,simpleTitleCaseMapping:0x0AAC - }, - { code:0x0AAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAD - ,simpleLowerCaseMapping:0x0AAD - ,simpleTitleCaseMapping:0x0AAD - }, - { code:0x0AAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAE - ,simpleLowerCaseMapping:0x0AAE - ,simpleTitleCaseMapping:0x0AAE - }, - { code:0x0AAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AAF - ,simpleLowerCaseMapping:0x0AAF - ,simpleTitleCaseMapping:0x0AAF - }, - { code:0x0AB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB0 - ,simpleLowerCaseMapping:0x0AB0 - ,simpleTitleCaseMapping:0x0AB0 - }, - { code:0x0AB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB2 - ,simpleLowerCaseMapping:0x0AB2 - ,simpleTitleCaseMapping:0x0AB2 - }, - { code:0x0AB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB3 - ,simpleLowerCaseMapping:0x0AB3 - ,simpleTitleCaseMapping:0x0AB3 - }, - { code:0x0AB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB5 - ,simpleLowerCaseMapping:0x0AB5 - ,simpleTitleCaseMapping:0x0AB5 - }, - { code:0x0AB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB6 - ,simpleLowerCaseMapping:0x0AB6 - ,simpleTitleCaseMapping:0x0AB6 - }, - { code:0x0AB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB7 - ,simpleLowerCaseMapping:0x0AB7 - ,simpleTitleCaseMapping:0x0AB7 - }, - { code:0x0AB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB8 - ,simpleLowerCaseMapping:0x0AB8 - ,simpleTitleCaseMapping:0x0AB8 - }, - { code:0x0AB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AB9 - ,simpleLowerCaseMapping:0x0AB9 - ,simpleTitleCaseMapping:0x0AB9 - }, - { code:0x0ABC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ABC - ,simpleLowerCaseMapping:0x0ABC - ,simpleTitleCaseMapping:0x0ABC - }, - { code:0x0ABD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0ABD - ,simpleLowerCaseMapping:0x0ABD - ,simpleTitleCaseMapping:0x0ABD - }, - { code:0x0ABE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0ABE - ,simpleLowerCaseMapping:0x0ABE - ,simpleTitleCaseMapping:0x0ABE - }, - { code:0x0ABF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0ABF - ,simpleLowerCaseMapping:0x0ABF - ,simpleTitleCaseMapping:0x0ABF - }, - { code:0x0AC0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0AC0 - ,simpleLowerCaseMapping:0x0AC0 - ,simpleTitleCaseMapping:0x0AC0 - }, - { code:0x0AC1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC1 - ,simpleLowerCaseMapping:0x0AC1 - ,simpleTitleCaseMapping:0x0AC1 - }, - { code:0x0AC2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC2 - ,simpleLowerCaseMapping:0x0AC2 - ,simpleTitleCaseMapping:0x0AC2 - }, - { code:0x0AC3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC3 - ,simpleLowerCaseMapping:0x0AC3 - ,simpleTitleCaseMapping:0x0AC3 - }, - { code:0x0AC4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC4 - ,simpleLowerCaseMapping:0x0AC4 - ,simpleTitleCaseMapping:0x0AC4 - }, - { code:0x0AC5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC5 - ,simpleLowerCaseMapping:0x0AC5 - ,simpleTitleCaseMapping:0x0AC5 - }, - { code:0x0AC7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC7 - ,simpleLowerCaseMapping:0x0AC7 - ,simpleTitleCaseMapping:0x0AC7 - }, - { code:0x0AC8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AC8 - ,simpleLowerCaseMapping:0x0AC8 - ,simpleTitleCaseMapping:0x0AC8 - }, - { code:0x0AC9 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0AC9 - ,simpleLowerCaseMapping:0x0AC9 - ,simpleTitleCaseMapping:0x0AC9 - }, - { code:0x0ACB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0ACB - ,simpleLowerCaseMapping:0x0ACB - ,simpleTitleCaseMapping:0x0ACB - }, - { code:0x0ACC - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0ACC - ,simpleLowerCaseMapping:0x0ACC - ,simpleTitleCaseMapping:0x0ACC - }, - { code:0x0ACD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ACD - ,simpleLowerCaseMapping:0x0ACD - ,simpleTitleCaseMapping:0x0ACD - }, - { code:0x0AD0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AD0 - ,simpleLowerCaseMapping:0x0AD0 - ,simpleTitleCaseMapping:0x0AD0 - }, - { code:0x0AE0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AE0 - ,simpleLowerCaseMapping:0x0AE0 - ,simpleTitleCaseMapping:0x0AE0 - }, - { code:0x0AE1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0AE1 - ,simpleLowerCaseMapping:0x0AE1 - ,simpleTitleCaseMapping:0x0AE1 - }, - { code:0x0AE2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AE2 - ,simpleLowerCaseMapping:0x0AE2 - ,simpleTitleCaseMapping:0x0AE2 - }, - { code:0x0AE3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0AE3 - ,simpleLowerCaseMapping:0x0AE3 - ,simpleTitleCaseMapping:0x0AE3 - }, - { code:0x0AE6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AE6 - ,simpleLowerCaseMapping:0x0AE6 - ,simpleTitleCaseMapping:0x0AE6 - }, - { code:0x0AE7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AE7 - ,simpleLowerCaseMapping:0x0AE7 - ,simpleTitleCaseMapping:0x0AE7 - }, - { code:0x0AE8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AE8 - ,simpleLowerCaseMapping:0x0AE8 - ,simpleTitleCaseMapping:0x0AE8 - }, - { code:0x0AE9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AE9 - ,simpleLowerCaseMapping:0x0AE9 - ,simpleTitleCaseMapping:0x0AE9 - }, - { code:0x0AEA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AEA - ,simpleLowerCaseMapping:0x0AEA - ,simpleTitleCaseMapping:0x0AEA - }, - { code:0x0AEB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AEB - ,simpleLowerCaseMapping:0x0AEB - ,simpleTitleCaseMapping:0x0AEB - }, - { code:0x0AEC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AEC - ,simpleLowerCaseMapping:0x0AEC - ,simpleTitleCaseMapping:0x0AEC - }, - { code:0x0AED - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AED - ,simpleLowerCaseMapping:0x0AED - ,simpleTitleCaseMapping:0x0AED - }, - { code:0x0AEE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AEE - ,simpleLowerCaseMapping:0x0AEE - ,simpleTitleCaseMapping:0x0AEE - }, - { code:0x0AEF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0AEF - ,simpleLowerCaseMapping:0x0AEF - ,simpleTitleCaseMapping:0x0AEF - }, - { code:0x0AF1 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x0AF1 - ,simpleLowerCaseMapping:0x0AF1 - ,simpleTitleCaseMapping:0x0AF1 - }, - { code:0x0B01 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B01 - ,simpleLowerCaseMapping:0x0B01 - ,simpleTitleCaseMapping:0x0B01 - }, - { code:0x0B02 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B02 - ,simpleLowerCaseMapping:0x0B02 - ,simpleTitleCaseMapping:0x0B02 - }, - { code:0x0B03 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B03 - ,simpleLowerCaseMapping:0x0B03 - ,simpleTitleCaseMapping:0x0B03 - }, - { code:0x0B05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B05 - ,simpleLowerCaseMapping:0x0B05 - ,simpleTitleCaseMapping:0x0B05 - }, - { code:0x0B06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B06 - ,simpleLowerCaseMapping:0x0B06 - ,simpleTitleCaseMapping:0x0B06 - }, - { code:0x0B07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B07 - ,simpleLowerCaseMapping:0x0B07 - ,simpleTitleCaseMapping:0x0B07 - }, - { code:0x0B08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B08 - ,simpleLowerCaseMapping:0x0B08 - ,simpleTitleCaseMapping:0x0B08 - }, - { code:0x0B09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B09 - ,simpleLowerCaseMapping:0x0B09 - ,simpleTitleCaseMapping:0x0B09 - }, - { code:0x0B0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B0A - ,simpleLowerCaseMapping:0x0B0A - ,simpleTitleCaseMapping:0x0B0A - }, - { code:0x0B0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B0B - ,simpleLowerCaseMapping:0x0B0B - ,simpleTitleCaseMapping:0x0B0B - }, - { code:0x0B0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B0C - ,simpleLowerCaseMapping:0x0B0C - ,simpleTitleCaseMapping:0x0B0C - }, - { code:0x0B0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B0F - ,simpleLowerCaseMapping:0x0B0F - ,simpleTitleCaseMapping:0x0B0F - }, - { code:0x0B10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B10 - ,simpleLowerCaseMapping:0x0B10 - ,simpleTitleCaseMapping:0x0B10 - }, - { code:0x0B13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B13 - ,simpleLowerCaseMapping:0x0B13 - ,simpleTitleCaseMapping:0x0B13 - }, - { code:0x0B14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B14 - ,simpleLowerCaseMapping:0x0B14 - ,simpleTitleCaseMapping:0x0B14 - }, - { code:0x0B15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B15 - ,simpleLowerCaseMapping:0x0B15 - ,simpleTitleCaseMapping:0x0B15 - }, - { code:0x0B16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B16 - ,simpleLowerCaseMapping:0x0B16 - ,simpleTitleCaseMapping:0x0B16 - }, - { code:0x0B17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B17 - ,simpleLowerCaseMapping:0x0B17 - ,simpleTitleCaseMapping:0x0B17 - }, - { code:0x0B18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B18 - ,simpleLowerCaseMapping:0x0B18 - ,simpleTitleCaseMapping:0x0B18 - }, - { code:0x0B19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B19 - ,simpleLowerCaseMapping:0x0B19 - ,simpleTitleCaseMapping:0x0B19 - }, - { code:0x0B1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1A - ,simpleLowerCaseMapping:0x0B1A - ,simpleTitleCaseMapping:0x0B1A - }, - { code:0x0B1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1B - ,simpleLowerCaseMapping:0x0B1B - ,simpleTitleCaseMapping:0x0B1B - }, - { code:0x0B1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1C - ,simpleLowerCaseMapping:0x0B1C - ,simpleTitleCaseMapping:0x0B1C - }, - { code:0x0B1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1D - ,simpleLowerCaseMapping:0x0B1D - ,simpleTitleCaseMapping:0x0B1D - }, - { code:0x0B1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1E - ,simpleLowerCaseMapping:0x0B1E - ,simpleTitleCaseMapping:0x0B1E - }, - { code:0x0B1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B1F - ,simpleLowerCaseMapping:0x0B1F - ,simpleTitleCaseMapping:0x0B1F - }, - { code:0x0B20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B20 - ,simpleLowerCaseMapping:0x0B20 - ,simpleTitleCaseMapping:0x0B20 - }, - { code:0x0B21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B21 - ,simpleLowerCaseMapping:0x0B21 - ,simpleTitleCaseMapping:0x0B21 - }, - { code:0x0B22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B22 - ,simpleLowerCaseMapping:0x0B22 - ,simpleTitleCaseMapping:0x0B22 - }, - { code:0x0B23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B23 - ,simpleLowerCaseMapping:0x0B23 - ,simpleTitleCaseMapping:0x0B23 - }, - { code:0x0B24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B24 - ,simpleLowerCaseMapping:0x0B24 - ,simpleTitleCaseMapping:0x0B24 - }, - { code:0x0B25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B25 - ,simpleLowerCaseMapping:0x0B25 - ,simpleTitleCaseMapping:0x0B25 - }, - { code:0x0B26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B26 - ,simpleLowerCaseMapping:0x0B26 - ,simpleTitleCaseMapping:0x0B26 - }, - { code:0x0B27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B27 - ,simpleLowerCaseMapping:0x0B27 - ,simpleTitleCaseMapping:0x0B27 - }, - { code:0x0B28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B28 - ,simpleLowerCaseMapping:0x0B28 - ,simpleTitleCaseMapping:0x0B28 - }, - { code:0x0B2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2A - ,simpleLowerCaseMapping:0x0B2A - ,simpleTitleCaseMapping:0x0B2A - }, - { code:0x0B2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2B - ,simpleLowerCaseMapping:0x0B2B - ,simpleTitleCaseMapping:0x0B2B - }, - { code:0x0B2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2C - ,simpleLowerCaseMapping:0x0B2C - ,simpleTitleCaseMapping:0x0B2C - }, - { code:0x0B2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2D - ,simpleLowerCaseMapping:0x0B2D - ,simpleTitleCaseMapping:0x0B2D - }, - { code:0x0B2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2E - ,simpleLowerCaseMapping:0x0B2E - ,simpleTitleCaseMapping:0x0B2E - }, - { code:0x0B2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B2F - ,simpleLowerCaseMapping:0x0B2F - ,simpleTitleCaseMapping:0x0B2F - }, - { code:0x0B30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B30 - ,simpleLowerCaseMapping:0x0B30 - ,simpleTitleCaseMapping:0x0B30 - }, - { code:0x0B32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B32 - ,simpleLowerCaseMapping:0x0B32 - ,simpleTitleCaseMapping:0x0B32 - }, - { code:0x0B33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B33 - ,simpleLowerCaseMapping:0x0B33 - ,simpleTitleCaseMapping:0x0B33 - }, - { code:0x0B35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B35 - ,simpleLowerCaseMapping:0x0B35 - ,simpleTitleCaseMapping:0x0B35 - }, - { code:0x0B36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B36 - ,simpleLowerCaseMapping:0x0B36 - ,simpleTitleCaseMapping:0x0B36 - }, - { code:0x0B37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B37 - ,simpleLowerCaseMapping:0x0B37 - ,simpleTitleCaseMapping:0x0B37 - }, - { code:0x0B38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B38 - ,simpleLowerCaseMapping:0x0B38 - ,simpleTitleCaseMapping:0x0B38 - }, - { code:0x0B39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B39 - ,simpleLowerCaseMapping:0x0B39 - ,simpleTitleCaseMapping:0x0B39 - }, - { code:0x0B3C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B3C - ,simpleLowerCaseMapping:0x0B3C - ,simpleTitleCaseMapping:0x0B3C - }, - { code:0x0B3D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B3D - ,simpleLowerCaseMapping:0x0B3D - ,simpleTitleCaseMapping:0x0B3D - }, - { code:0x0B3E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B3E - ,simpleLowerCaseMapping:0x0B3E - ,simpleTitleCaseMapping:0x0B3E - }, - { code:0x0B3F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B3F - ,simpleLowerCaseMapping:0x0B3F - ,simpleTitleCaseMapping:0x0B3F - }, - { code:0x0B40 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B40 - ,simpleLowerCaseMapping:0x0B40 - ,simpleTitleCaseMapping:0x0B40 - }, - { code:0x0B41 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B41 - ,simpleLowerCaseMapping:0x0B41 - ,simpleTitleCaseMapping:0x0B41 - }, - { code:0x0B42 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B42 - ,simpleLowerCaseMapping:0x0B42 - ,simpleTitleCaseMapping:0x0B42 - }, - { code:0x0B43 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B43 - ,simpleLowerCaseMapping:0x0B43 - ,simpleTitleCaseMapping:0x0B43 - }, - { code:0x0B47 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B47 - ,simpleLowerCaseMapping:0x0B47 - ,simpleTitleCaseMapping:0x0B47 - }, - { code:0x0B48 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B48 - ,simpleLowerCaseMapping:0x0B48 - ,simpleTitleCaseMapping:0x0B48 - }, - { code:0x0B4B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B4B - ,simpleLowerCaseMapping:0x0B4B - ,simpleTitleCaseMapping:0x0B4B - }, - { code:0x0B4C - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B4C - ,simpleLowerCaseMapping:0x0B4C - ,simpleTitleCaseMapping:0x0B4C - }, - { code:0x0B4D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B4D - ,simpleLowerCaseMapping:0x0B4D - ,simpleTitleCaseMapping:0x0B4D - }, - { code:0x0B56 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B56 - ,simpleLowerCaseMapping:0x0B56 - ,simpleTitleCaseMapping:0x0B56 - }, - { code:0x0B57 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0B57 - ,simpleLowerCaseMapping:0x0B57 - ,simpleTitleCaseMapping:0x0B57 - }, - { code:0x0B5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B5C - ,simpleLowerCaseMapping:0x0B5C - ,simpleTitleCaseMapping:0x0B5C - }, - { code:0x0B5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B5D - ,simpleLowerCaseMapping:0x0B5D - ,simpleTitleCaseMapping:0x0B5D - }, - { code:0x0B5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B5F - ,simpleLowerCaseMapping:0x0B5F - ,simpleTitleCaseMapping:0x0B5F - }, - { code:0x0B60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B60 - ,simpleLowerCaseMapping:0x0B60 - ,simpleTitleCaseMapping:0x0B60 - }, - { code:0x0B61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B61 - ,simpleLowerCaseMapping:0x0B61 - ,simpleTitleCaseMapping:0x0B61 - }, - { code:0x0B66 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B66 - ,simpleLowerCaseMapping:0x0B66 - ,simpleTitleCaseMapping:0x0B66 - }, - { code:0x0B67 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B67 - ,simpleLowerCaseMapping:0x0B67 - ,simpleTitleCaseMapping:0x0B67 - }, - { code:0x0B68 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B68 - ,simpleLowerCaseMapping:0x0B68 - ,simpleTitleCaseMapping:0x0B68 - }, - { code:0x0B69 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B69 - ,simpleLowerCaseMapping:0x0B69 - ,simpleTitleCaseMapping:0x0B69 - }, - { code:0x0B6A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6A - ,simpleLowerCaseMapping:0x0B6A - ,simpleTitleCaseMapping:0x0B6A - }, - { code:0x0B6B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6B - ,simpleLowerCaseMapping:0x0B6B - ,simpleTitleCaseMapping:0x0B6B - }, - { code:0x0B6C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6C - ,simpleLowerCaseMapping:0x0B6C - ,simpleTitleCaseMapping:0x0B6C - }, - { code:0x0B6D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6D - ,simpleLowerCaseMapping:0x0B6D - ,simpleTitleCaseMapping:0x0B6D - }, - { code:0x0B6E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6E - ,simpleLowerCaseMapping:0x0B6E - ,simpleTitleCaseMapping:0x0B6E - }, - { code:0x0B6F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0B6F - ,simpleLowerCaseMapping:0x0B6F - ,simpleTitleCaseMapping:0x0B6F - }, - { code:0x0B70 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0B70 - ,simpleLowerCaseMapping:0x0B70 - ,simpleTitleCaseMapping:0x0B70 - }, - { code:0x0B71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B71 - ,simpleLowerCaseMapping:0x0B71 - ,simpleTitleCaseMapping:0x0B71 - }, - { code:0x0B82 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0B82 - ,simpleLowerCaseMapping:0x0B82 - ,simpleTitleCaseMapping:0x0B82 - }, - { code:0x0B83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B83 - ,simpleLowerCaseMapping:0x0B83 - ,simpleTitleCaseMapping:0x0B83 - }, - { code:0x0B85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B85 - ,simpleLowerCaseMapping:0x0B85 - ,simpleTitleCaseMapping:0x0B85 - }, - { code:0x0B86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B86 - ,simpleLowerCaseMapping:0x0B86 - ,simpleTitleCaseMapping:0x0B86 - }, - { code:0x0B87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B87 - ,simpleLowerCaseMapping:0x0B87 - ,simpleTitleCaseMapping:0x0B87 - }, - { code:0x0B88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B88 - ,simpleLowerCaseMapping:0x0B88 - ,simpleTitleCaseMapping:0x0B88 - }, - { code:0x0B89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B89 - ,simpleLowerCaseMapping:0x0B89 - ,simpleTitleCaseMapping:0x0B89 - }, - { code:0x0B8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B8A - ,simpleLowerCaseMapping:0x0B8A - ,simpleTitleCaseMapping:0x0B8A - }, - { code:0x0B8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B8E - ,simpleLowerCaseMapping:0x0B8E - ,simpleTitleCaseMapping:0x0B8E - }, - { code:0x0B8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B8F - ,simpleLowerCaseMapping:0x0B8F - ,simpleTitleCaseMapping:0x0B8F - }, - { code:0x0B90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B90 - ,simpleLowerCaseMapping:0x0B90 - ,simpleTitleCaseMapping:0x0B90 - }, - { code:0x0B92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B92 - ,simpleLowerCaseMapping:0x0B92 - ,simpleTitleCaseMapping:0x0B92 - }, - { code:0x0B93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B93 - ,simpleLowerCaseMapping:0x0B93 - ,simpleTitleCaseMapping:0x0B93 - }, - { code:0x0B94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B94 - ,simpleLowerCaseMapping:0x0B94 - ,simpleTitleCaseMapping:0x0B94 - }, - { code:0x0B95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B95 - ,simpleLowerCaseMapping:0x0B95 - ,simpleTitleCaseMapping:0x0B95 - }, - { code:0x0B99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B99 - ,simpleLowerCaseMapping:0x0B99 - ,simpleTitleCaseMapping:0x0B99 - }, - { code:0x0B9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B9A - ,simpleLowerCaseMapping:0x0B9A - ,simpleTitleCaseMapping:0x0B9A - }, - { code:0x0B9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B9C - ,simpleLowerCaseMapping:0x0B9C - ,simpleTitleCaseMapping:0x0B9C - }, - { code:0x0B9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B9E - ,simpleLowerCaseMapping:0x0B9E - ,simpleTitleCaseMapping:0x0B9E - }, - { code:0x0B9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0B9F - ,simpleLowerCaseMapping:0x0B9F - ,simpleTitleCaseMapping:0x0B9F - }, - { code:0x0BA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BA3 - ,simpleLowerCaseMapping:0x0BA3 - ,simpleTitleCaseMapping:0x0BA3 - }, - { code:0x0BA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BA4 - ,simpleLowerCaseMapping:0x0BA4 - ,simpleTitleCaseMapping:0x0BA4 - }, - { code:0x0BA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BA8 - ,simpleLowerCaseMapping:0x0BA8 - ,simpleTitleCaseMapping:0x0BA8 - }, - { code:0x0BA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BA9 - ,simpleLowerCaseMapping:0x0BA9 - ,simpleTitleCaseMapping:0x0BA9 - }, - { code:0x0BAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BAA - ,simpleLowerCaseMapping:0x0BAA - ,simpleTitleCaseMapping:0x0BAA - }, - { code:0x0BAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BAE - ,simpleLowerCaseMapping:0x0BAE - ,simpleTitleCaseMapping:0x0BAE - }, - { code:0x0BAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BAF - ,simpleLowerCaseMapping:0x0BAF - ,simpleTitleCaseMapping:0x0BAF - }, - { code:0x0BB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB0 - ,simpleLowerCaseMapping:0x0BB0 - ,simpleTitleCaseMapping:0x0BB0 - }, - { code:0x0BB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB1 - ,simpleLowerCaseMapping:0x0BB1 - ,simpleTitleCaseMapping:0x0BB1 - }, - { code:0x0BB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB2 - ,simpleLowerCaseMapping:0x0BB2 - ,simpleTitleCaseMapping:0x0BB2 - }, - { code:0x0BB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB3 - ,simpleLowerCaseMapping:0x0BB3 - ,simpleTitleCaseMapping:0x0BB3 - }, - { code:0x0BB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB4 - ,simpleLowerCaseMapping:0x0BB4 - ,simpleTitleCaseMapping:0x0BB4 - }, - { code:0x0BB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB5 - ,simpleLowerCaseMapping:0x0BB5 - ,simpleTitleCaseMapping:0x0BB5 - }, - { code:0x0BB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB6 - ,simpleLowerCaseMapping:0x0BB6 - ,simpleTitleCaseMapping:0x0BB6 - }, - { code:0x0BB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB7 - ,simpleLowerCaseMapping:0x0BB7 - ,simpleTitleCaseMapping:0x0BB7 - }, - { code:0x0BB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB8 - ,simpleLowerCaseMapping:0x0BB8 - ,simpleTitleCaseMapping:0x0BB8 - }, - { code:0x0BB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0BB9 - ,simpleLowerCaseMapping:0x0BB9 - ,simpleTitleCaseMapping:0x0BB9 - }, - { code:0x0BBE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BBE - ,simpleLowerCaseMapping:0x0BBE - ,simpleTitleCaseMapping:0x0BBE - }, - { code:0x0BBF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BBF - ,simpleLowerCaseMapping:0x0BBF - ,simpleTitleCaseMapping:0x0BBF - }, - { code:0x0BC0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0BC0 - ,simpleLowerCaseMapping:0x0BC0 - ,simpleTitleCaseMapping:0x0BC0 - }, - { code:0x0BC1 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BC1 - ,simpleLowerCaseMapping:0x0BC1 - ,simpleTitleCaseMapping:0x0BC1 - }, - { code:0x0BC2 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BC2 - ,simpleLowerCaseMapping:0x0BC2 - ,simpleTitleCaseMapping:0x0BC2 - }, - { code:0x0BC6 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BC6 - ,simpleLowerCaseMapping:0x0BC6 - ,simpleTitleCaseMapping:0x0BC6 - }, - { code:0x0BC7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BC7 - ,simpleLowerCaseMapping:0x0BC7 - ,simpleTitleCaseMapping:0x0BC7 - }, - { code:0x0BC8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BC8 - ,simpleLowerCaseMapping:0x0BC8 - ,simpleTitleCaseMapping:0x0BC8 - }, - { code:0x0BCA - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BCA - ,simpleLowerCaseMapping:0x0BCA - ,simpleTitleCaseMapping:0x0BCA - }, - { code:0x0BCB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BCB - ,simpleLowerCaseMapping:0x0BCB - ,simpleTitleCaseMapping:0x0BCB - }, - { code:0x0BCC - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BCC - ,simpleLowerCaseMapping:0x0BCC - ,simpleTitleCaseMapping:0x0BCC - }, - { code:0x0BCD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0BCD - ,simpleLowerCaseMapping:0x0BCD - ,simpleTitleCaseMapping:0x0BCD - }, - { code:0x0BD7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0BD7 - ,simpleLowerCaseMapping:0x0BD7 - ,simpleTitleCaseMapping:0x0BD7 - }, - { code:0x0BE6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BE6 - ,simpleLowerCaseMapping:0x0BE6 - ,simpleTitleCaseMapping:0x0BE6 - }, - { code:0x0BE7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BE7 - ,simpleLowerCaseMapping:0x0BE7 - ,simpleTitleCaseMapping:0x0BE7 - }, - { code:0x0BE8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BE8 - ,simpleLowerCaseMapping:0x0BE8 - ,simpleTitleCaseMapping:0x0BE8 - }, - { code:0x0BE9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BE9 - ,simpleLowerCaseMapping:0x0BE9 - ,simpleTitleCaseMapping:0x0BE9 - }, - { code:0x0BEA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BEA - ,simpleLowerCaseMapping:0x0BEA - ,simpleTitleCaseMapping:0x0BEA - }, - { code:0x0BEB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BEB - ,simpleLowerCaseMapping:0x0BEB - ,simpleTitleCaseMapping:0x0BEB - }, - { code:0x0BEC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BEC - ,simpleLowerCaseMapping:0x0BEC - ,simpleTitleCaseMapping:0x0BEC - }, - { code:0x0BED - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BED - ,simpleLowerCaseMapping:0x0BED - ,simpleTitleCaseMapping:0x0BED - }, - { code:0x0BEE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BEE - ,simpleLowerCaseMapping:0x0BEE - ,simpleTitleCaseMapping:0x0BEE - }, - { code:0x0BEF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0BEF - ,simpleLowerCaseMapping:0x0BEF - ,simpleTitleCaseMapping:0x0BEF - }, - { code:0x0BF0 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0BF0 - ,simpleLowerCaseMapping:0x0BF0 - ,simpleTitleCaseMapping:0x0BF0 - }, - { code:0x0BF1 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0BF1 - ,simpleLowerCaseMapping:0x0BF1 - ,simpleTitleCaseMapping:0x0BF1 - }, - { code:0x0BF2 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0BF2 - ,simpleLowerCaseMapping:0x0BF2 - ,simpleTitleCaseMapping:0x0BF2 - }, - { code:0x0BF3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF3 - ,simpleLowerCaseMapping:0x0BF3 - ,simpleTitleCaseMapping:0x0BF3 - }, - { code:0x0BF4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF4 - ,simpleLowerCaseMapping:0x0BF4 - ,simpleTitleCaseMapping:0x0BF4 - }, - { code:0x0BF5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF5 - ,simpleLowerCaseMapping:0x0BF5 - ,simpleTitleCaseMapping:0x0BF5 - }, - { code:0x0BF6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF6 - ,simpleLowerCaseMapping:0x0BF6 - ,simpleTitleCaseMapping:0x0BF6 - }, - { code:0x0BF7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF7 - ,simpleLowerCaseMapping:0x0BF7 - ,simpleTitleCaseMapping:0x0BF7 - }, - { code:0x0BF8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BF8 - ,simpleLowerCaseMapping:0x0BF8 - ,simpleTitleCaseMapping:0x0BF8 - }, - { code:0x0BF9 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x0BF9 - ,simpleLowerCaseMapping:0x0BF9 - ,simpleTitleCaseMapping:0x0BF9 - }, - { code:0x0BFA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0BFA - ,simpleLowerCaseMapping:0x0BFA - ,simpleTitleCaseMapping:0x0BFA - }, - { code:0x0C01 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C01 - ,simpleLowerCaseMapping:0x0C01 - ,simpleTitleCaseMapping:0x0C01 - }, - { code:0x0C02 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C02 - ,simpleLowerCaseMapping:0x0C02 - ,simpleTitleCaseMapping:0x0C02 - }, - { code:0x0C03 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C03 - ,simpleLowerCaseMapping:0x0C03 - ,simpleTitleCaseMapping:0x0C03 - }, - { code:0x0C05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C05 - ,simpleLowerCaseMapping:0x0C05 - ,simpleTitleCaseMapping:0x0C05 - }, - { code:0x0C06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C06 - ,simpleLowerCaseMapping:0x0C06 - ,simpleTitleCaseMapping:0x0C06 - }, - { code:0x0C07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C07 - ,simpleLowerCaseMapping:0x0C07 - ,simpleTitleCaseMapping:0x0C07 - }, - { code:0x0C08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C08 - ,simpleLowerCaseMapping:0x0C08 - ,simpleTitleCaseMapping:0x0C08 - }, - { code:0x0C09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C09 - ,simpleLowerCaseMapping:0x0C09 - ,simpleTitleCaseMapping:0x0C09 - }, - { code:0x0C0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C0A - ,simpleLowerCaseMapping:0x0C0A - ,simpleTitleCaseMapping:0x0C0A - }, - { code:0x0C0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C0B - ,simpleLowerCaseMapping:0x0C0B - ,simpleTitleCaseMapping:0x0C0B - }, - { code:0x0C0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C0C - ,simpleLowerCaseMapping:0x0C0C - ,simpleTitleCaseMapping:0x0C0C - }, - { code:0x0C0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C0E - ,simpleLowerCaseMapping:0x0C0E - ,simpleTitleCaseMapping:0x0C0E - }, - { code:0x0C0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C0F - ,simpleLowerCaseMapping:0x0C0F - ,simpleTitleCaseMapping:0x0C0F - }, - { code:0x0C10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C10 - ,simpleLowerCaseMapping:0x0C10 - ,simpleTitleCaseMapping:0x0C10 - }, - { code:0x0C12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C12 - ,simpleLowerCaseMapping:0x0C12 - ,simpleTitleCaseMapping:0x0C12 - }, - { code:0x0C13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C13 - ,simpleLowerCaseMapping:0x0C13 - ,simpleTitleCaseMapping:0x0C13 - }, - { code:0x0C14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C14 - ,simpleLowerCaseMapping:0x0C14 - ,simpleTitleCaseMapping:0x0C14 - }, - { code:0x0C15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C15 - ,simpleLowerCaseMapping:0x0C15 - ,simpleTitleCaseMapping:0x0C15 - }, - { code:0x0C16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C16 - ,simpleLowerCaseMapping:0x0C16 - ,simpleTitleCaseMapping:0x0C16 - }, - { code:0x0C17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C17 - ,simpleLowerCaseMapping:0x0C17 - ,simpleTitleCaseMapping:0x0C17 - }, - { code:0x0C18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C18 - ,simpleLowerCaseMapping:0x0C18 - ,simpleTitleCaseMapping:0x0C18 - }, - { code:0x0C19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C19 - ,simpleLowerCaseMapping:0x0C19 - ,simpleTitleCaseMapping:0x0C19 - }, - { code:0x0C1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1A - ,simpleLowerCaseMapping:0x0C1A - ,simpleTitleCaseMapping:0x0C1A - }, - { code:0x0C1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1B - ,simpleLowerCaseMapping:0x0C1B - ,simpleTitleCaseMapping:0x0C1B - }, - { code:0x0C1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1C - ,simpleLowerCaseMapping:0x0C1C - ,simpleTitleCaseMapping:0x0C1C - }, - { code:0x0C1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1D - ,simpleLowerCaseMapping:0x0C1D - ,simpleTitleCaseMapping:0x0C1D - }, - { code:0x0C1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1E - ,simpleLowerCaseMapping:0x0C1E - ,simpleTitleCaseMapping:0x0C1E - }, - { code:0x0C1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C1F - ,simpleLowerCaseMapping:0x0C1F - ,simpleTitleCaseMapping:0x0C1F - }, - { code:0x0C20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C20 - ,simpleLowerCaseMapping:0x0C20 - ,simpleTitleCaseMapping:0x0C20 - }, - { code:0x0C21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C21 - ,simpleLowerCaseMapping:0x0C21 - ,simpleTitleCaseMapping:0x0C21 - }, - { code:0x0C22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C22 - ,simpleLowerCaseMapping:0x0C22 - ,simpleTitleCaseMapping:0x0C22 - }, - { code:0x0C23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C23 - ,simpleLowerCaseMapping:0x0C23 - ,simpleTitleCaseMapping:0x0C23 - }, - { code:0x0C24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C24 - ,simpleLowerCaseMapping:0x0C24 - ,simpleTitleCaseMapping:0x0C24 - }, - { code:0x0C25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C25 - ,simpleLowerCaseMapping:0x0C25 - ,simpleTitleCaseMapping:0x0C25 - }, - { code:0x0C26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C26 - ,simpleLowerCaseMapping:0x0C26 - ,simpleTitleCaseMapping:0x0C26 - }, - { code:0x0C27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C27 - ,simpleLowerCaseMapping:0x0C27 - ,simpleTitleCaseMapping:0x0C27 - }, - { code:0x0C28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C28 - ,simpleLowerCaseMapping:0x0C28 - ,simpleTitleCaseMapping:0x0C28 - }, - { code:0x0C2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2A - ,simpleLowerCaseMapping:0x0C2A - ,simpleTitleCaseMapping:0x0C2A - }, - { code:0x0C2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2B - ,simpleLowerCaseMapping:0x0C2B - ,simpleTitleCaseMapping:0x0C2B - }, - { code:0x0C2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2C - ,simpleLowerCaseMapping:0x0C2C - ,simpleTitleCaseMapping:0x0C2C - }, - { code:0x0C2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2D - ,simpleLowerCaseMapping:0x0C2D - ,simpleTitleCaseMapping:0x0C2D - }, - { code:0x0C2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2E - ,simpleLowerCaseMapping:0x0C2E - ,simpleTitleCaseMapping:0x0C2E - }, - { code:0x0C2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C2F - ,simpleLowerCaseMapping:0x0C2F - ,simpleTitleCaseMapping:0x0C2F - }, - { code:0x0C30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C30 - ,simpleLowerCaseMapping:0x0C30 - ,simpleTitleCaseMapping:0x0C30 - }, - { code:0x0C31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C31 - ,simpleLowerCaseMapping:0x0C31 - ,simpleTitleCaseMapping:0x0C31 - }, - { code:0x0C32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C32 - ,simpleLowerCaseMapping:0x0C32 - ,simpleTitleCaseMapping:0x0C32 - }, - { code:0x0C33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C33 - ,simpleLowerCaseMapping:0x0C33 - ,simpleTitleCaseMapping:0x0C33 - }, - { code:0x0C35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C35 - ,simpleLowerCaseMapping:0x0C35 - ,simpleTitleCaseMapping:0x0C35 - }, - { code:0x0C36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C36 - ,simpleLowerCaseMapping:0x0C36 - ,simpleTitleCaseMapping:0x0C36 - }, - { code:0x0C37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C37 - ,simpleLowerCaseMapping:0x0C37 - ,simpleTitleCaseMapping:0x0C37 - }, - { code:0x0C38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C38 - ,simpleLowerCaseMapping:0x0C38 - ,simpleTitleCaseMapping:0x0C38 - }, - { code:0x0C39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C39 - ,simpleLowerCaseMapping:0x0C39 - ,simpleTitleCaseMapping:0x0C39 - }, - { code:0x0C3E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C3E - ,simpleLowerCaseMapping:0x0C3E - ,simpleTitleCaseMapping:0x0C3E - }, - { code:0x0C3F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C3F - ,simpleLowerCaseMapping:0x0C3F - ,simpleTitleCaseMapping:0x0C3F - }, - { code:0x0C40 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C40 - ,simpleLowerCaseMapping:0x0C40 - ,simpleTitleCaseMapping:0x0C40 - }, - { code:0x0C41 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C41 - ,simpleLowerCaseMapping:0x0C41 - ,simpleTitleCaseMapping:0x0C41 - }, - { code:0x0C42 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C42 - ,simpleLowerCaseMapping:0x0C42 - ,simpleTitleCaseMapping:0x0C42 - }, - { code:0x0C43 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C43 - ,simpleLowerCaseMapping:0x0C43 - ,simpleTitleCaseMapping:0x0C43 - }, - { code:0x0C44 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C44 - ,simpleLowerCaseMapping:0x0C44 - ,simpleTitleCaseMapping:0x0C44 - }, - { code:0x0C46 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C46 - ,simpleLowerCaseMapping:0x0C46 - ,simpleTitleCaseMapping:0x0C46 - }, - { code:0x0C47 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C47 - ,simpleLowerCaseMapping:0x0C47 - ,simpleTitleCaseMapping:0x0C47 - }, - { code:0x0C48 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C48 - ,simpleLowerCaseMapping:0x0C48 - ,simpleTitleCaseMapping:0x0C48 - }, - { code:0x0C4A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C4A - ,simpleLowerCaseMapping:0x0C4A - ,simpleTitleCaseMapping:0x0C4A - }, - { code:0x0C4B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C4B - ,simpleLowerCaseMapping:0x0C4B - ,simpleTitleCaseMapping:0x0C4B - }, - { code:0x0C4C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C4C - ,simpleLowerCaseMapping:0x0C4C - ,simpleTitleCaseMapping:0x0C4C - }, - { code:0x0C4D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C4D - ,simpleLowerCaseMapping:0x0C4D - ,simpleTitleCaseMapping:0x0C4D - }, - { code:0x0C55 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C55 - ,simpleLowerCaseMapping:0x0C55 - ,simpleTitleCaseMapping:0x0C55 - }, - { code:0x0C56 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0C56 - ,simpleLowerCaseMapping:0x0C56 - ,simpleTitleCaseMapping:0x0C56 - }, - { code:0x0C60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C60 - ,simpleLowerCaseMapping:0x0C60 - ,simpleTitleCaseMapping:0x0C60 - }, - { code:0x0C61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C61 - ,simpleLowerCaseMapping:0x0C61 - ,simpleTitleCaseMapping:0x0C61 - }, - { code:0x0C66 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C66 - ,simpleLowerCaseMapping:0x0C66 - ,simpleTitleCaseMapping:0x0C66 - }, - { code:0x0C67 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C67 - ,simpleLowerCaseMapping:0x0C67 - ,simpleTitleCaseMapping:0x0C67 - }, - { code:0x0C68 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C68 - ,simpleLowerCaseMapping:0x0C68 - ,simpleTitleCaseMapping:0x0C68 - }, - { code:0x0C69 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C69 - ,simpleLowerCaseMapping:0x0C69 - ,simpleTitleCaseMapping:0x0C69 - }, - { code:0x0C6A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6A - ,simpleLowerCaseMapping:0x0C6A - ,simpleTitleCaseMapping:0x0C6A - }, - { code:0x0C6B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6B - ,simpleLowerCaseMapping:0x0C6B - ,simpleTitleCaseMapping:0x0C6B - }, - { code:0x0C6C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6C - ,simpleLowerCaseMapping:0x0C6C - ,simpleTitleCaseMapping:0x0C6C - }, - { code:0x0C6D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6D - ,simpleLowerCaseMapping:0x0C6D - ,simpleTitleCaseMapping:0x0C6D - }, - { code:0x0C6E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6E - ,simpleLowerCaseMapping:0x0C6E - ,simpleTitleCaseMapping:0x0C6E - }, - { code:0x0C6F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0C6F - ,simpleLowerCaseMapping:0x0C6F - ,simpleTitleCaseMapping:0x0C6F - }, - { code:0x0C82 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C82 - ,simpleLowerCaseMapping:0x0C82 - ,simpleTitleCaseMapping:0x0C82 - }, - { code:0x0C83 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0C83 - ,simpleLowerCaseMapping:0x0C83 - ,simpleTitleCaseMapping:0x0C83 - }, - { code:0x0C85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C85 - ,simpleLowerCaseMapping:0x0C85 - ,simpleTitleCaseMapping:0x0C85 - }, - { code:0x0C86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C86 - ,simpleLowerCaseMapping:0x0C86 - ,simpleTitleCaseMapping:0x0C86 - }, - { code:0x0C87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C87 - ,simpleLowerCaseMapping:0x0C87 - ,simpleTitleCaseMapping:0x0C87 - }, - { code:0x0C88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C88 - ,simpleLowerCaseMapping:0x0C88 - ,simpleTitleCaseMapping:0x0C88 - }, - { code:0x0C89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C89 - ,simpleLowerCaseMapping:0x0C89 - ,simpleTitleCaseMapping:0x0C89 - }, - { code:0x0C8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C8A - ,simpleLowerCaseMapping:0x0C8A - ,simpleTitleCaseMapping:0x0C8A - }, - { code:0x0C8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C8B - ,simpleLowerCaseMapping:0x0C8B - ,simpleTitleCaseMapping:0x0C8B - }, - { code:0x0C8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C8C - ,simpleLowerCaseMapping:0x0C8C - ,simpleTitleCaseMapping:0x0C8C - }, - { code:0x0C8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C8E - ,simpleLowerCaseMapping:0x0C8E - ,simpleTitleCaseMapping:0x0C8E - }, - { code:0x0C8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C8F - ,simpleLowerCaseMapping:0x0C8F - ,simpleTitleCaseMapping:0x0C8F - }, - { code:0x0C90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C90 - ,simpleLowerCaseMapping:0x0C90 - ,simpleTitleCaseMapping:0x0C90 - }, - { code:0x0C92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C92 - ,simpleLowerCaseMapping:0x0C92 - ,simpleTitleCaseMapping:0x0C92 - }, - { code:0x0C93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C93 - ,simpleLowerCaseMapping:0x0C93 - ,simpleTitleCaseMapping:0x0C93 - }, - { code:0x0C94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C94 - ,simpleLowerCaseMapping:0x0C94 - ,simpleTitleCaseMapping:0x0C94 - }, - { code:0x0C95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C95 - ,simpleLowerCaseMapping:0x0C95 - ,simpleTitleCaseMapping:0x0C95 - }, - { code:0x0C96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C96 - ,simpleLowerCaseMapping:0x0C96 - ,simpleTitleCaseMapping:0x0C96 - }, - { code:0x0C97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C97 - ,simpleLowerCaseMapping:0x0C97 - ,simpleTitleCaseMapping:0x0C97 - }, - { code:0x0C98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C98 - ,simpleLowerCaseMapping:0x0C98 - ,simpleTitleCaseMapping:0x0C98 - }, - { code:0x0C99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C99 - ,simpleLowerCaseMapping:0x0C99 - ,simpleTitleCaseMapping:0x0C99 - }, - { code:0x0C9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9A - ,simpleLowerCaseMapping:0x0C9A - ,simpleTitleCaseMapping:0x0C9A - }, - { code:0x0C9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9B - ,simpleLowerCaseMapping:0x0C9B - ,simpleTitleCaseMapping:0x0C9B - }, - { code:0x0C9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9C - ,simpleLowerCaseMapping:0x0C9C - ,simpleTitleCaseMapping:0x0C9C - }, - { code:0x0C9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9D - ,simpleLowerCaseMapping:0x0C9D - ,simpleTitleCaseMapping:0x0C9D - }, - { code:0x0C9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9E - ,simpleLowerCaseMapping:0x0C9E - ,simpleTitleCaseMapping:0x0C9E - }, - { code:0x0C9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0C9F - ,simpleLowerCaseMapping:0x0C9F - ,simpleTitleCaseMapping:0x0C9F - }, - { code:0x0CA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA0 - ,simpleLowerCaseMapping:0x0CA0 - ,simpleTitleCaseMapping:0x0CA0 - }, - { code:0x0CA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA1 - ,simpleLowerCaseMapping:0x0CA1 - ,simpleTitleCaseMapping:0x0CA1 - }, - { code:0x0CA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA2 - ,simpleLowerCaseMapping:0x0CA2 - ,simpleTitleCaseMapping:0x0CA2 - }, - { code:0x0CA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA3 - ,simpleLowerCaseMapping:0x0CA3 - ,simpleTitleCaseMapping:0x0CA3 - }, - { code:0x0CA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA4 - ,simpleLowerCaseMapping:0x0CA4 - ,simpleTitleCaseMapping:0x0CA4 - }, - { code:0x0CA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA5 - ,simpleLowerCaseMapping:0x0CA5 - ,simpleTitleCaseMapping:0x0CA5 - }, - { code:0x0CA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA6 - ,simpleLowerCaseMapping:0x0CA6 - ,simpleTitleCaseMapping:0x0CA6 - }, - { code:0x0CA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA7 - ,simpleLowerCaseMapping:0x0CA7 - ,simpleTitleCaseMapping:0x0CA7 - }, - { code:0x0CA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CA8 - ,simpleLowerCaseMapping:0x0CA8 - ,simpleTitleCaseMapping:0x0CA8 - }, - { code:0x0CAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAA - ,simpleLowerCaseMapping:0x0CAA - ,simpleTitleCaseMapping:0x0CAA - }, - { code:0x0CAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAB - ,simpleLowerCaseMapping:0x0CAB - ,simpleTitleCaseMapping:0x0CAB - }, - { code:0x0CAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAC - ,simpleLowerCaseMapping:0x0CAC - ,simpleTitleCaseMapping:0x0CAC - }, - { code:0x0CAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAD - ,simpleLowerCaseMapping:0x0CAD - ,simpleTitleCaseMapping:0x0CAD - }, - { code:0x0CAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAE - ,simpleLowerCaseMapping:0x0CAE - ,simpleTitleCaseMapping:0x0CAE - }, - { code:0x0CAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CAF - ,simpleLowerCaseMapping:0x0CAF - ,simpleTitleCaseMapping:0x0CAF - }, - { code:0x0CB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB0 - ,simpleLowerCaseMapping:0x0CB0 - ,simpleTitleCaseMapping:0x0CB0 - }, - { code:0x0CB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB1 - ,simpleLowerCaseMapping:0x0CB1 - ,simpleTitleCaseMapping:0x0CB1 - }, - { code:0x0CB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB2 - ,simpleLowerCaseMapping:0x0CB2 - ,simpleTitleCaseMapping:0x0CB2 - }, - { code:0x0CB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB3 - ,simpleLowerCaseMapping:0x0CB3 - ,simpleTitleCaseMapping:0x0CB3 - }, - { code:0x0CB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB5 - ,simpleLowerCaseMapping:0x0CB5 - ,simpleTitleCaseMapping:0x0CB5 - }, - { code:0x0CB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB6 - ,simpleLowerCaseMapping:0x0CB6 - ,simpleTitleCaseMapping:0x0CB6 - }, - { code:0x0CB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB7 - ,simpleLowerCaseMapping:0x0CB7 - ,simpleTitleCaseMapping:0x0CB7 - }, - { code:0x0CB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB8 - ,simpleLowerCaseMapping:0x0CB8 - ,simpleTitleCaseMapping:0x0CB8 - }, - { code:0x0CB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CB9 - ,simpleLowerCaseMapping:0x0CB9 - ,simpleTitleCaseMapping:0x0CB9 - }, - { code:0x0CBC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CBC - ,simpleLowerCaseMapping:0x0CBC - ,simpleTitleCaseMapping:0x0CBC - }, - { code:0x0CBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CBD - ,simpleLowerCaseMapping:0x0CBD - ,simpleTitleCaseMapping:0x0CBD - }, - { code:0x0CBE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CBE - ,simpleLowerCaseMapping:0x0CBE - ,simpleTitleCaseMapping:0x0CBE - }, - { code:0x0CBF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CBF - ,simpleLowerCaseMapping:0x0CBF - ,simpleTitleCaseMapping:0x0CBF - }, - { code:0x0CC0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC0 - ,simpleLowerCaseMapping:0x0CC0 - ,simpleTitleCaseMapping:0x0CC0 - }, - { code:0x0CC1 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC1 - ,simpleLowerCaseMapping:0x0CC1 - ,simpleTitleCaseMapping:0x0CC1 - }, - { code:0x0CC2 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC2 - ,simpleLowerCaseMapping:0x0CC2 - ,simpleTitleCaseMapping:0x0CC2 - }, - { code:0x0CC3 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC3 - ,simpleLowerCaseMapping:0x0CC3 - ,simpleTitleCaseMapping:0x0CC3 - }, - { code:0x0CC4 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC4 - ,simpleLowerCaseMapping:0x0CC4 - ,simpleTitleCaseMapping:0x0CC4 - }, - { code:0x0CC6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CC6 - ,simpleLowerCaseMapping:0x0CC6 - ,simpleTitleCaseMapping:0x0CC6 - }, - { code:0x0CC7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC7 - ,simpleLowerCaseMapping:0x0CC7 - ,simpleTitleCaseMapping:0x0CC7 - }, - { code:0x0CC8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CC8 - ,simpleLowerCaseMapping:0x0CC8 - ,simpleTitleCaseMapping:0x0CC8 - }, - { code:0x0CCA - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CCA - ,simpleLowerCaseMapping:0x0CCA - ,simpleTitleCaseMapping:0x0CCA - }, - { code:0x0CCB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CCB - ,simpleLowerCaseMapping:0x0CCB - ,simpleTitleCaseMapping:0x0CCB - }, - { code:0x0CCC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CCC - ,simpleLowerCaseMapping:0x0CCC - ,simpleTitleCaseMapping:0x0CCC - }, - { code:0x0CCD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CCD - ,simpleLowerCaseMapping:0x0CCD - ,simpleTitleCaseMapping:0x0CCD - }, - { code:0x0CD5 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CD5 - ,simpleLowerCaseMapping:0x0CD5 - ,simpleTitleCaseMapping:0x0CD5 - }, - { code:0x0CD6 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0CD6 - ,simpleLowerCaseMapping:0x0CD6 - ,simpleTitleCaseMapping:0x0CD6 - }, - { code:0x0CDE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CDE - ,simpleLowerCaseMapping:0x0CDE - ,simpleTitleCaseMapping:0x0CDE - }, - { code:0x0CE0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CE0 - ,simpleLowerCaseMapping:0x0CE0 - ,simpleTitleCaseMapping:0x0CE0 - }, - { code:0x0CE1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0CE1 - ,simpleLowerCaseMapping:0x0CE1 - ,simpleTitleCaseMapping:0x0CE1 - }, - { code:0x0CE2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CE2 - ,simpleLowerCaseMapping:0x0CE2 - ,simpleTitleCaseMapping:0x0CE2 - }, - { code:0x0CE3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0CE3 - ,simpleLowerCaseMapping:0x0CE3 - ,simpleTitleCaseMapping:0x0CE3 - }, - { code:0x0CE6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CE6 - ,simpleLowerCaseMapping:0x0CE6 - ,simpleTitleCaseMapping:0x0CE6 - }, - { code:0x0CE7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CE7 - ,simpleLowerCaseMapping:0x0CE7 - ,simpleTitleCaseMapping:0x0CE7 - }, - { code:0x0CE8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CE8 - ,simpleLowerCaseMapping:0x0CE8 - ,simpleTitleCaseMapping:0x0CE8 - }, - { code:0x0CE9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CE9 - ,simpleLowerCaseMapping:0x0CE9 - ,simpleTitleCaseMapping:0x0CE9 - }, - { code:0x0CEA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CEA - ,simpleLowerCaseMapping:0x0CEA - ,simpleTitleCaseMapping:0x0CEA - }, - { code:0x0CEB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CEB - ,simpleLowerCaseMapping:0x0CEB - ,simpleTitleCaseMapping:0x0CEB - }, - { code:0x0CEC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CEC - ,simpleLowerCaseMapping:0x0CEC - ,simpleTitleCaseMapping:0x0CEC - }, - { code:0x0CED - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CED - ,simpleLowerCaseMapping:0x0CED - ,simpleTitleCaseMapping:0x0CED - }, - { code:0x0CEE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CEE - ,simpleLowerCaseMapping:0x0CEE - ,simpleTitleCaseMapping:0x0CEE - }, - { code:0x0CEF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0CEF - ,simpleLowerCaseMapping:0x0CEF - ,simpleTitleCaseMapping:0x0CEF - }, - { code:0x0CF1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0CF1 - ,simpleLowerCaseMapping:0x0CF1 - ,simpleTitleCaseMapping:0x0CF1 - }, - { code:0x0CF2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0CF2 - ,simpleLowerCaseMapping:0x0CF2 - ,simpleTitleCaseMapping:0x0CF2 - }, - { code:0x0D02 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D02 - ,simpleLowerCaseMapping:0x0D02 - ,simpleTitleCaseMapping:0x0D02 - }, - { code:0x0D03 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D03 - ,simpleLowerCaseMapping:0x0D03 - ,simpleTitleCaseMapping:0x0D03 - }, - { code:0x0D05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D05 - ,simpleLowerCaseMapping:0x0D05 - ,simpleTitleCaseMapping:0x0D05 - }, - { code:0x0D06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D06 - ,simpleLowerCaseMapping:0x0D06 - ,simpleTitleCaseMapping:0x0D06 - }, - { code:0x0D07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D07 - ,simpleLowerCaseMapping:0x0D07 - ,simpleTitleCaseMapping:0x0D07 - }, - { code:0x0D08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D08 - ,simpleLowerCaseMapping:0x0D08 - ,simpleTitleCaseMapping:0x0D08 - }, - { code:0x0D09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D09 - ,simpleLowerCaseMapping:0x0D09 - ,simpleTitleCaseMapping:0x0D09 - }, - { code:0x0D0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D0A - ,simpleLowerCaseMapping:0x0D0A - ,simpleTitleCaseMapping:0x0D0A - }, - { code:0x0D0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D0B - ,simpleLowerCaseMapping:0x0D0B - ,simpleTitleCaseMapping:0x0D0B - }, - { code:0x0D0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D0C - ,simpleLowerCaseMapping:0x0D0C - ,simpleTitleCaseMapping:0x0D0C - }, - { code:0x0D0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D0E - ,simpleLowerCaseMapping:0x0D0E - ,simpleTitleCaseMapping:0x0D0E - }, - { code:0x0D0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D0F - ,simpleLowerCaseMapping:0x0D0F - ,simpleTitleCaseMapping:0x0D0F - }, - { code:0x0D10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D10 - ,simpleLowerCaseMapping:0x0D10 - ,simpleTitleCaseMapping:0x0D10 - }, - { code:0x0D12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D12 - ,simpleLowerCaseMapping:0x0D12 - ,simpleTitleCaseMapping:0x0D12 - }, - { code:0x0D13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D13 - ,simpleLowerCaseMapping:0x0D13 - ,simpleTitleCaseMapping:0x0D13 - }, - { code:0x0D14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D14 - ,simpleLowerCaseMapping:0x0D14 - ,simpleTitleCaseMapping:0x0D14 - }, - { code:0x0D15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D15 - ,simpleLowerCaseMapping:0x0D15 - ,simpleTitleCaseMapping:0x0D15 - }, - { code:0x0D16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D16 - ,simpleLowerCaseMapping:0x0D16 - ,simpleTitleCaseMapping:0x0D16 - }, - { code:0x0D17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D17 - ,simpleLowerCaseMapping:0x0D17 - ,simpleTitleCaseMapping:0x0D17 - }, - { code:0x0D18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D18 - ,simpleLowerCaseMapping:0x0D18 - ,simpleTitleCaseMapping:0x0D18 - }, - { code:0x0D19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D19 - ,simpleLowerCaseMapping:0x0D19 - ,simpleTitleCaseMapping:0x0D19 - }, - { code:0x0D1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1A - ,simpleLowerCaseMapping:0x0D1A - ,simpleTitleCaseMapping:0x0D1A - }, - { code:0x0D1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1B - ,simpleLowerCaseMapping:0x0D1B - ,simpleTitleCaseMapping:0x0D1B - }, - { code:0x0D1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1C - ,simpleLowerCaseMapping:0x0D1C - ,simpleTitleCaseMapping:0x0D1C - }, - { code:0x0D1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1D - ,simpleLowerCaseMapping:0x0D1D - ,simpleTitleCaseMapping:0x0D1D - }, - { code:0x0D1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1E - ,simpleLowerCaseMapping:0x0D1E - ,simpleTitleCaseMapping:0x0D1E - }, - { code:0x0D1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D1F - ,simpleLowerCaseMapping:0x0D1F - ,simpleTitleCaseMapping:0x0D1F - }, - { code:0x0D20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D20 - ,simpleLowerCaseMapping:0x0D20 - ,simpleTitleCaseMapping:0x0D20 - }, - { code:0x0D21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D21 - ,simpleLowerCaseMapping:0x0D21 - ,simpleTitleCaseMapping:0x0D21 - }, - { code:0x0D22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D22 - ,simpleLowerCaseMapping:0x0D22 - ,simpleTitleCaseMapping:0x0D22 - }, - { code:0x0D23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D23 - ,simpleLowerCaseMapping:0x0D23 - ,simpleTitleCaseMapping:0x0D23 - }, - { code:0x0D24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D24 - ,simpleLowerCaseMapping:0x0D24 - ,simpleTitleCaseMapping:0x0D24 - }, - { code:0x0D25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D25 - ,simpleLowerCaseMapping:0x0D25 - ,simpleTitleCaseMapping:0x0D25 - }, - { code:0x0D26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D26 - ,simpleLowerCaseMapping:0x0D26 - ,simpleTitleCaseMapping:0x0D26 - }, - { code:0x0D27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D27 - ,simpleLowerCaseMapping:0x0D27 - ,simpleTitleCaseMapping:0x0D27 - }, - { code:0x0D28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D28 - ,simpleLowerCaseMapping:0x0D28 - ,simpleTitleCaseMapping:0x0D28 - }, - { code:0x0D2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2A - ,simpleLowerCaseMapping:0x0D2A - ,simpleTitleCaseMapping:0x0D2A - }, - { code:0x0D2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2B - ,simpleLowerCaseMapping:0x0D2B - ,simpleTitleCaseMapping:0x0D2B - }, - { code:0x0D2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2C - ,simpleLowerCaseMapping:0x0D2C - ,simpleTitleCaseMapping:0x0D2C - }, - { code:0x0D2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2D - ,simpleLowerCaseMapping:0x0D2D - ,simpleTitleCaseMapping:0x0D2D - }, - { code:0x0D2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2E - ,simpleLowerCaseMapping:0x0D2E - ,simpleTitleCaseMapping:0x0D2E - }, - { code:0x0D2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D2F - ,simpleLowerCaseMapping:0x0D2F - ,simpleTitleCaseMapping:0x0D2F - }, - { code:0x0D30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D30 - ,simpleLowerCaseMapping:0x0D30 - ,simpleTitleCaseMapping:0x0D30 - }, - { code:0x0D31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D31 - ,simpleLowerCaseMapping:0x0D31 - ,simpleTitleCaseMapping:0x0D31 - }, - { code:0x0D32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D32 - ,simpleLowerCaseMapping:0x0D32 - ,simpleTitleCaseMapping:0x0D32 - }, - { code:0x0D33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D33 - ,simpleLowerCaseMapping:0x0D33 - ,simpleTitleCaseMapping:0x0D33 - }, - { code:0x0D34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D34 - ,simpleLowerCaseMapping:0x0D34 - ,simpleTitleCaseMapping:0x0D34 - }, - { code:0x0D35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D35 - ,simpleLowerCaseMapping:0x0D35 - ,simpleTitleCaseMapping:0x0D35 - }, - { code:0x0D36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D36 - ,simpleLowerCaseMapping:0x0D36 - ,simpleTitleCaseMapping:0x0D36 - }, - { code:0x0D37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D37 - ,simpleLowerCaseMapping:0x0D37 - ,simpleTitleCaseMapping:0x0D37 - }, - { code:0x0D38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D38 - ,simpleLowerCaseMapping:0x0D38 - ,simpleTitleCaseMapping:0x0D38 - }, - { code:0x0D39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D39 - ,simpleLowerCaseMapping:0x0D39 - ,simpleTitleCaseMapping:0x0D39 - }, - { code:0x0D3E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D3E - ,simpleLowerCaseMapping:0x0D3E - ,simpleTitleCaseMapping:0x0D3E - }, - { code:0x0D3F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D3F - ,simpleLowerCaseMapping:0x0D3F - ,simpleTitleCaseMapping:0x0D3F - }, - { code:0x0D40 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D40 - ,simpleLowerCaseMapping:0x0D40 - ,simpleTitleCaseMapping:0x0D40 - }, - { code:0x0D41 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0D41 - ,simpleLowerCaseMapping:0x0D41 - ,simpleTitleCaseMapping:0x0D41 - }, - { code:0x0D42 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0D42 - ,simpleLowerCaseMapping:0x0D42 - ,simpleTitleCaseMapping:0x0D42 - }, - { code:0x0D43 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0D43 - ,simpleLowerCaseMapping:0x0D43 - ,simpleTitleCaseMapping:0x0D43 - }, - { code:0x0D46 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D46 - ,simpleLowerCaseMapping:0x0D46 - ,simpleTitleCaseMapping:0x0D46 - }, - { code:0x0D47 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D47 - ,simpleLowerCaseMapping:0x0D47 - ,simpleTitleCaseMapping:0x0D47 - }, - { code:0x0D48 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D48 - ,simpleLowerCaseMapping:0x0D48 - ,simpleTitleCaseMapping:0x0D48 - }, - { code:0x0D4A - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D4A - ,simpleLowerCaseMapping:0x0D4A - ,simpleTitleCaseMapping:0x0D4A - }, - { code:0x0D4B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D4B - ,simpleLowerCaseMapping:0x0D4B - ,simpleTitleCaseMapping:0x0D4B - }, - { code:0x0D4C - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D4C - ,simpleLowerCaseMapping:0x0D4C - ,simpleTitleCaseMapping:0x0D4C - }, - { code:0x0D4D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0D4D - ,simpleLowerCaseMapping:0x0D4D - ,simpleTitleCaseMapping:0x0D4D - }, - { code:0x0D57 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D57 - ,simpleLowerCaseMapping:0x0D57 - ,simpleTitleCaseMapping:0x0D57 - }, - { code:0x0D60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D60 - ,simpleLowerCaseMapping:0x0D60 - ,simpleTitleCaseMapping:0x0D60 - }, - { code:0x0D61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D61 - ,simpleLowerCaseMapping:0x0D61 - ,simpleTitleCaseMapping:0x0D61 - }, - { code:0x0D66 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D66 - ,simpleLowerCaseMapping:0x0D66 - ,simpleTitleCaseMapping:0x0D66 - }, - { code:0x0D67 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D67 - ,simpleLowerCaseMapping:0x0D67 - ,simpleTitleCaseMapping:0x0D67 - }, - { code:0x0D68 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D68 - ,simpleLowerCaseMapping:0x0D68 - ,simpleTitleCaseMapping:0x0D68 - }, - { code:0x0D69 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D69 - ,simpleLowerCaseMapping:0x0D69 - ,simpleTitleCaseMapping:0x0D69 - }, - { code:0x0D6A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6A - ,simpleLowerCaseMapping:0x0D6A - ,simpleTitleCaseMapping:0x0D6A - }, - { code:0x0D6B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6B - ,simpleLowerCaseMapping:0x0D6B - ,simpleTitleCaseMapping:0x0D6B - }, - { code:0x0D6C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6C - ,simpleLowerCaseMapping:0x0D6C - ,simpleTitleCaseMapping:0x0D6C - }, - { code:0x0D6D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6D - ,simpleLowerCaseMapping:0x0D6D - ,simpleTitleCaseMapping:0x0D6D - }, - { code:0x0D6E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6E - ,simpleLowerCaseMapping:0x0D6E - ,simpleTitleCaseMapping:0x0D6E - }, - { code:0x0D6F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0D6F - ,simpleLowerCaseMapping:0x0D6F - ,simpleTitleCaseMapping:0x0D6F - }, - { code:0x0D82 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D82 - ,simpleLowerCaseMapping:0x0D82 - ,simpleTitleCaseMapping:0x0D82 - }, - { code:0x0D83 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0D83 - ,simpleLowerCaseMapping:0x0D83 - ,simpleTitleCaseMapping:0x0D83 - }, - { code:0x0D85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D85 - ,simpleLowerCaseMapping:0x0D85 - ,simpleTitleCaseMapping:0x0D85 - }, - { code:0x0D86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D86 - ,simpleLowerCaseMapping:0x0D86 - ,simpleTitleCaseMapping:0x0D86 - }, - { code:0x0D87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D87 - ,simpleLowerCaseMapping:0x0D87 - ,simpleTitleCaseMapping:0x0D87 - }, - { code:0x0D88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D88 - ,simpleLowerCaseMapping:0x0D88 - ,simpleTitleCaseMapping:0x0D88 - }, - { code:0x0D89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D89 - ,simpleLowerCaseMapping:0x0D89 - ,simpleTitleCaseMapping:0x0D89 - }, - { code:0x0D8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8A - ,simpleLowerCaseMapping:0x0D8A - ,simpleTitleCaseMapping:0x0D8A - }, - { code:0x0D8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8B - ,simpleLowerCaseMapping:0x0D8B - ,simpleTitleCaseMapping:0x0D8B - }, - { code:0x0D8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8C - ,simpleLowerCaseMapping:0x0D8C - ,simpleTitleCaseMapping:0x0D8C - }, - { code:0x0D8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8D - ,simpleLowerCaseMapping:0x0D8D - ,simpleTitleCaseMapping:0x0D8D - }, - { code:0x0D8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8E - ,simpleLowerCaseMapping:0x0D8E - ,simpleTitleCaseMapping:0x0D8E - }, - { code:0x0D8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D8F - ,simpleLowerCaseMapping:0x0D8F - ,simpleTitleCaseMapping:0x0D8F - }, - { code:0x0D90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D90 - ,simpleLowerCaseMapping:0x0D90 - ,simpleTitleCaseMapping:0x0D90 - }, - { code:0x0D91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D91 - ,simpleLowerCaseMapping:0x0D91 - ,simpleTitleCaseMapping:0x0D91 - }, - { code:0x0D92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D92 - ,simpleLowerCaseMapping:0x0D92 - ,simpleTitleCaseMapping:0x0D92 - }, - { code:0x0D93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D93 - ,simpleLowerCaseMapping:0x0D93 - ,simpleTitleCaseMapping:0x0D93 - }, - { code:0x0D94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D94 - ,simpleLowerCaseMapping:0x0D94 - ,simpleTitleCaseMapping:0x0D94 - }, - { code:0x0D95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D95 - ,simpleLowerCaseMapping:0x0D95 - ,simpleTitleCaseMapping:0x0D95 - }, - { code:0x0D96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D96 - ,simpleLowerCaseMapping:0x0D96 - ,simpleTitleCaseMapping:0x0D96 - }, - { code:0x0D9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9A - ,simpleLowerCaseMapping:0x0D9A - ,simpleTitleCaseMapping:0x0D9A - }, - { code:0x0D9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9B - ,simpleLowerCaseMapping:0x0D9B - ,simpleTitleCaseMapping:0x0D9B - }, - { code:0x0D9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9C - ,simpleLowerCaseMapping:0x0D9C - ,simpleTitleCaseMapping:0x0D9C - }, - { code:0x0D9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9D - ,simpleLowerCaseMapping:0x0D9D - ,simpleTitleCaseMapping:0x0D9D - }, - { code:0x0D9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9E - ,simpleLowerCaseMapping:0x0D9E - ,simpleTitleCaseMapping:0x0D9E - }, - { code:0x0D9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0D9F - ,simpleLowerCaseMapping:0x0D9F - ,simpleTitleCaseMapping:0x0D9F - }, - { code:0x0DA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA0 - ,simpleLowerCaseMapping:0x0DA0 - ,simpleTitleCaseMapping:0x0DA0 - }, - { code:0x0DA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA1 - ,simpleLowerCaseMapping:0x0DA1 - ,simpleTitleCaseMapping:0x0DA1 - }, - { code:0x0DA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA2 - ,simpleLowerCaseMapping:0x0DA2 - ,simpleTitleCaseMapping:0x0DA2 - }, - { code:0x0DA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA3 - ,simpleLowerCaseMapping:0x0DA3 - ,simpleTitleCaseMapping:0x0DA3 - }, - { code:0x0DA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA4 - ,simpleLowerCaseMapping:0x0DA4 - ,simpleTitleCaseMapping:0x0DA4 - }, - { code:0x0DA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA5 - ,simpleLowerCaseMapping:0x0DA5 - ,simpleTitleCaseMapping:0x0DA5 - }, - { code:0x0DA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA6 - ,simpleLowerCaseMapping:0x0DA6 - ,simpleTitleCaseMapping:0x0DA6 - }, - { code:0x0DA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA7 - ,simpleLowerCaseMapping:0x0DA7 - ,simpleTitleCaseMapping:0x0DA7 - }, - { code:0x0DA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA8 - ,simpleLowerCaseMapping:0x0DA8 - ,simpleTitleCaseMapping:0x0DA8 - }, - { code:0x0DA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DA9 - ,simpleLowerCaseMapping:0x0DA9 - ,simpleTitleCaseMapping:0x0DA9 - }, - { code:0x0DAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAA - ,simpleLowerCaseMapping:0x0DAA - ,simpleTitleCaseMapping:0x0DAA - }, - { code:0x0DAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAB - ,simpleLowerCaseMapping:0x0DAB - ,simpleTitleCaseMapping:0x0DAB - }, - { code:0x0DAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAC - ,simpleLowerCaseMapping:0x0DAC - ,simpleTitleCaseMapping:0x0DAC - }, - { code:0x0DAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAD - ,simpleLowerCaseMapping:0x0DAD - ,simpleTitleCaseMapping:0x0DAD - }, - { code:0x0DAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAE - ,simpleLowerCaseMapping:0x0DAE - ,simpleTitleCaseMapping:0x0DAE - }, - { code:0x0DAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DAF - ,simpleLowerCaseMapping:0x0DAF - ,simpleTitleCaseMapping:0x0DAF - }, - { code:0x0DB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB0 - ,simpleLowerCaseMapping:0x0DB0 - ,simpleTitleCaseMapping:0x0DB0 - }, - { code:0x0DB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB1 - ,simpleLowerCaseMapping:0x0DB1 - ,simpleTitleCaseMapping:0x0DB1 - }, - { code:0x0DB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB3 - ,simpleLowerCaseMapping:0x0DB3 - ,simpleTitleCaseMapping:0x0DB3 - }, - { code:0x0DB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB4 - ,simpleLowerCaseMapping:0x0DB4 - ,simpleTitleCaseMapping:0x0DB4 - }, - { code:0x0DB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB5 - ,simpleLowerCaseMapping:0x0DB5 - ,simpleTitleCaseMapping:0x0DB5 - }, - { code:0x0DB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB6 - ,simpleLowerCaseMapping:0x0DB6 - ,simpleTitleCaseMapping:0x0DB6 - }, - { code:0x0DB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB7 - ,simpleLowerCaseMapping:0x0DB7 - ,simpleTitleCaseMapping:0x0DB7 - }, - { code:0x0DB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB8 - ,simpleLowerCaseMapping:0x0DB8 - ,simpleTitleCaseMapping:0x0DB8 - }, - { code:0x0DB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DB9 - ,simpleLowerCaseMapping:0x0DB9 - ,simpleTitleCaseMapping:0x0DB9 - }, - { code:0x0DBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DBA - ,simpleLowerCaseMapping:0x0DBA - ,simpleTitleCaseMapping:0x0DBA - }, - { code:0x0DBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DBB - ,simpleLowerCaseMapping:0x0DBB - ,simpleTitleCaseMapping:0x0DBB - }, - { code:0x0DBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DBD - ,simpleLowerCaseMapping:0x0DBD - ,simpleTitleCaseMapping:0x0DBD - }, - { code:0x0DC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC0 - ,simpleLowerCaseMapping:0x0DC0 - ,simpleTitleCaseMapping:0x0DC0 - }, - { code:0x0DC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC1 - ,simpleLowerCaseMapping:0x0DC1 - ,simpleTitleCaseMapping:0x0DC1 - }, - { code:0x0DC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC2 - ,simpleLowerCaseMapping:0x0DC2 - ,simpleTitleCaseMapping:0x0DC2 - }, - { code:0x0DC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC3 - ,simpleLowerCaseMapping:0x0DC3 - ,simpleTitleCaseMapping:0x0DC3 - }, - { code:0x0DC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC4 - ,simpleLowerCaseMapping:0x0DC4 - ,simpleTitleCaseMapping:0x0DC4 - }, - { code:0x0DC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC5 - ,simpleLowerCaseMapping:0x0DC5 - ,simpleTitleCaseMapping:0x0DC5 - }, - { code:0x0DC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0DC6 - ,simpleLowerCaseMapping:0x0DC6 - ,simpleTitleCaseMapping:0x0DC6 - }, - { code:0x0DCA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0DCA - ,simpleLowerCaseMapping:0x0DCA - ,simpleTitleCaseMapping:0x0DCA - }, - { code:0x0DCF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DCF - ,simpleLowerCaseMapping:0x0DCF - ,simpleTitleCaseMapping:0x0DCF - }, - { code:0x0DD0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DD0 - ,simpleLowerCaseMapping:0x0DD0 - ,simpleTitleCaseMapping:0x0DD0 - }, - { code:0x0DD1 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DD1 - ,simpleLowerCaseMapping:0x0DD1 - ,simpleTitleCaseMapping:0x0DD1 - }, - { code:0x0DD2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0DD2 - ,simpleLowerCaseMapping:0x0DD2 - ,simpleTitleCaseMapping:0x0DD2 - }, - { code:0x0DD3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0DD3 - ,simpleLowerCaseMapping:0x0DD3 - ,simpleTitleCaseMapping:0x0DD3 - }, - { code:0x0DD4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0DD4 - ,simpleLowerCaseMapping:0x0DD4 - ,simpleTitleCaseMapping:0x0DD4 - }, - { code:0x0DD6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0DD6 - ,simpleLowerCaseMapping:0x0DD6 - ,simpleTitleCaseMapping:0x0DD6 - }, - { code:0x0DD8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DD8 - ,simpleLowerCaseMapping:0x0DD8 - ,simpleTitleCaseMapping:0x0DD8 - }, - { code:0x0DD9 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DD9 - ,simpleLowerCaseMapping:0x0DD9 - ,simpleTitleCaseMapping:0x0DD9 - }, - { code:0x0DDA - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDA - ,simpleLowerCaseMapping:0x0DDA - ,simpleTitleCaseMapping:0x0DDA - }, - { code:0x0DDB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDB - ,simpleLowerCaseMapping:0x0DDB - ,simpleTitleCaseMapping:0x0DDB - }, - { code:0x0DDC - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDC - ,simpleLowerCaseMapping:0x0DDC - ,simpleTitleCaseMapping:0x0DDC - }, - { code:0x0DDD - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDD - ,simpleLowerCaseMapping:0x0DDD - ,simpleTitleCaseMapping:0x0DDD - }, - { code:0x0DDE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDE - ,simpleLowerCaseMapping:0x0DDE - ,simpleTitleCaseMapping:0x0DDE - }, - { code:0x0DDF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DDF - ,simpleLowerCaseMapping:0x0DDF - ,simpleTitleCaseMapping:0x0DDF - }, - { code:0x0DF2 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DF2 - ,simpleLowerCaseMapping:0x0DF2 - ,simpleTitleCaseMapping:0x0DF2 - }, - { code:0x0DF3 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0DF3 - ,simpleLowerCaseMapping:0x0DF3 - ,simpleTitleCaseMapping:0x0DF3 - }, - { code:0x0DF4 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0DF4 - ,simpleLowerCaseMapping:0x0DF4 - ,simpleTitleCaseMapping:0x0DF4 - }, - { code:0x0E01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E01 - ,simpleLowerCaseMapping:0x0E01 - ,simpleTitleCaseMapping:0x0E01 - }, - { code:0x0E02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E02 - ,simpleLowerCaseMapping:0x0E02 - ,simpleTitleCaseMapping:0x0E02 - }, - { code:0x0E03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E03 - ,simpleLowerCaseMapping:0x0E03 - ,simpleTitleCaseMapping:0x0E03 - }, - { code:0x0E04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E04 - ,simpleLowerCaseMapping:0x0E04 - ,simpleTitleCaseMapping:0x0E04 - }, - { code:0x0E05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E05 - ,simpleLowerCaseMapping:0x0E05 - ,simpleTitleCaseMapping:0x0E05 - }, - { code:0x0E06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E06 - ,simpleLowerCaseMapping:0x0E06 - ,simpleTitleCaseMapping:0x0E06 - }, - { code:0x0E07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E07 - ,simpleLowerCaseMapping:0x0E07 - ,simpleTitleCaseMapping:0x0E07 - }, - { code:0x0E08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E08 - ,simpleLowerCaseMapping:0x0E08 - ,simpleTitleCaseMapping:0x0E08 - }, - { code:0x0E09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E09 - ,simpleLowerCaseMapping:0x0E09 - ,simpleTitleCaseMapping:0x0E09 - }, - { code:0x0E0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0A - ,simpleLowerCaseMapping:0x0E0A - ,simpleTitleCaseMapping:0x0E0A - }, - { code:0x0E0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0B - ,simpleLowerCaseMapping:0x0E0B - ,simpleTitleCaseMapping:0x0E0B - }, - { code:0x0E0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0C - ,simpleLowerCaseMapping:0x0E0C - ,simpleTitleCaseMapping:0x0E0C - }, - { code:0x0E0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0D - ,simpleLowerCaseMapping:0x0E0D - ,simpleTitleCaseMapping:0x0E0D - }, - { code:0x0E0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0E - ,simpleLowerCaseMapping:0x0E0E - ,simpleTitleCaseMapping:0x0E0E - }, - { code:0x0E0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E0F - ,simpleLowerCaseMapping:0x0E0F - ,simpleTitleCaseMapping:0x0E0F - }, - { code:0x0E10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E10 - ,simpleLowerCaseMapping:0x0E10 - ,simpleTitleCaseMapping:0x0E10 - }, - { code:0x0E11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E11 - ,simpleLowerCaseMapping:0x0E11 - ,simpleTitleCaseMapping:0x0E11 - }, - { code:0x0E12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E12 - ,simpleLowerCaseMapping:0x0E12 - ,simpleTitleCaseMapping:0x0E12 - }, - { code:0x0E13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E13 - ,simpleLowerCaseMapping:0x0E13 - ,simpleTitleCaseMapping:0x0E13 - }, - { code:0x0E14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E14 - ,simpleLowerCaseMapping:0x0E14 - ,simpleTitleCaseMapping:0x0E14 - }, - { code:0x0E15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E15 - ,simpleLowerCaseMapping:0x0E15 - ,simpleTitleCaseMapping:0x0E15 - }, - { code:0x0E16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E16 - ,simpleLowerCaseMapping:0x0E16 - ,simpleTitleCaseMapping:0x0E16 - }, - { code:0x0E17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E17 - ,simpleLowerCaseMapping:0x0E17 - ,simpleTitleCaseMapping:0x0E17 - }, - { code:0x0E18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E18 - ,simpleLowerCaseMapping:0x0E18 - ,simpleTitleCaseMapping:0x0E18 - }, - { code:0x0E19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E19 - ,simpleLowerCaseMapping:0x0E19 - ,simpleTitleCaseMapping:0x0E19 - }, - { code:0x0E1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1A - ,simpleLowerCaseMapping:0x0E1A - ,simpleTitleCaseMapping:0x0E1A - }, - { code:0x0E1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1B - ,simpleLowerCaseMapping:0x0E1B - ,simpleTitleCaseMapping:0x0E1B - }, - { code:0x0E1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1C - ,simpleLowerCaseMapping:0x0E1C - ,simpleTitleCaseMapping:0x0E1C - }, - { code:0x0E1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1D - ,simpleLowerCaseMapping:0x0E1D - ,simpleTitleCaseMapping:0x0E1D - }, - { code:0x0E1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1E - ,simpleLowerCaseMapping:0x0E1E - ,simpleTitleCaseMapping:0x0E1E - }, - { code:0x0E1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E1F - ,simpleLowerCaseMapping:0x0E1F - ,simpleTitleCaseMapping:0x0E1F - }, - { code:0x0E20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E20 - ,simpleLowerCaseMapping:0x0E20 - ,simpleTitleCaseMapping:0x0E20 - }, - { code:0x0E21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E21 - ,simpleLowerCaseMapping:0x0E21 - ,simpleTitleCaseMapping:0x0E21 - }, - { code:0x0E22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E22 - ,simpleLowerCaseMapping:0x0E22 - ,simpleTitleCaseMapping:0x0E22 - }, - { code:0x0E23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E23 - ,simpleLowerCaseMapping:0x0E23 - ,simpleTitleCaseMapping:0x0E23 - }, - { code:0x0E24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E24 - ,simpleLowerCaseMapping:0x0E24 - ,simpleTitleCaseMapping:0x0E24 - }, - { code:0x0E25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E25 - ,simpleLowerCaseMapping:0x0E25 - ,simpleTitleCaseMapping:0x0E25 - }, - { code:0x0E26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E26 - ,simpleLowerCaseMapping:0x0E26 - ,simpleTitleCaseMapping:0x0E26 - }, - { code:0x0E27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E27 - ,simpleLowerCaseMapping:0x0E27 - ,simpleTitleCaseMapping:0x0E27 - }, - { code:0x0E28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E28 - ,simpleLowerCaseMapping:0x0E28 - ,simpleTitleCaseMapping:0x0E28 - }, - { code:0x0E29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E29 - ,simpleLowerCaseMapping:0x0E29 - ,simpleTitleCaseMapping:0x0E29 - }, - { code:0x0E2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2A - ,simpleLowerCaseMapping:0x0E2A - ,simpleTitleCaseMapping:0x0E2A - }, - { code:0x0E2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2B - ,simpleLowerCaseMapping:0x0E2B - ,simpleTitleCaseMapping:0x0E2B - }, - { code:0x0E2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2C - ,simpleLowerCaseMapping:0x0E2C - ,simpleTitleCaseMapping:0x0E2C - }, - { code:0x0E2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2D - ,simpleLowerCaseMapping:0x0E2D - ,simpleTitleCaseMapping:0x0E2D - }, - { code:0x0E2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2E - ,simpleLowerCaseMapping:0x0E2E - ,simpleTitleCaseMapping:0x0E2E - }, - { code:0x0E2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E2F - ,simpleLowerCaseMapping:0x0E2F - ,simpleTitleCaseMapping:0x0E2F - }, - { code:0x0E30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E30 - ,simpleLowerCaseMapping:0x0E30 - ,simpleTitleCaseMapping:0x0E30 - }, - { code:0x0E31 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E31 - ,simpleLowerCaseMapping:0x0E31 - ,simpleTitleCaseMapping:0x0E31 - }, - { code:0x0E32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E32 - ,simpleLowerCaseMapping:0x0E32 - ,simpleTitleCaseMapping:0x0E32 - }, - { code:0x0E33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E33 - ,simpleLowerCaseMapping:0x0E33 - ,simpleTitleCaseMapping:0x0E33 - }, - { code:0x0E34 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E34 - ,simpleLowerCaseMapping:0x0E34 - ,simpleTitleCaseMapping:0x0E34 - }, - { code:0x0E35 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E35 - ,simpleLowerCaseMapping:0x0E35 - ,simpleTitleCaseMapping:0x0E35 - }, - { code:0x0E36 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E36 - ,simpleLowerCaseMapping:0x0E36 - ,simpleTitleCaseMapping:0x0E36 - }, - { code:0x0E37 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E37 - ,simpleLowerCaseMapping:0x0E37 - ,simpleTitleCaseMapping:0x0E37 - }, - { code:0x0E38 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E38 - ,simpleLowerCaseMapping:0x0E38 - ,simpleTitleCaseMapping:0x0E38 - }, - { code:0x0E39 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E39 - ,simpleLowerCaseMapping:0x0E39 - ,simpleTitleCaseMapping:0x0E39 - }, - { code:0x0E3A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E3A - ,simpleLowerCaseMapping:0x0E3A - ,simpleTitleCaseMapping:0x0E3A - }, - { code:0x0E3F - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x0E3F - ,simpleLowerCaseMapping:0x0E3F - ,simpleTitleCaseMapping:0x0E3F - }, - { code:0x0E40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E40 - ,simpleLowerCaseMapping:0x0E40 - ,simpleTitleCaseMapping:0x0E40 - }, - { code:0x0E41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E41 - ,simpleLowerCaseMapping:0x0E41 - ,simpleTitleCaseMapping:0x0E41 - }, - { code:0x0E42 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E42 - ,simpleLowerCaseMapping:0x0E42 - ,simpleTitleCaseMapping:0x0E42 - }, - { code:0x0E43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E43 - ,simpleLowerCaseMapping:0x0E43 - ,simpleTitleCaseMapping:0x0E43 - }, - { code:0x0E44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E44 - ,simpleLowerCaseMapping:0x0E44 - ,simpleTitleCaseMapping:0x0E44 - }, - { code:0x0E45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E45 - ,simpleLowerCaseMapping:0x0E45 - ,simpleTitleCaseMapping:0x0E45 - }, - { code:0x0E46 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x0E46 - ,simpleLowerCaseMapping:0x0E46 - ,simpleTitleCaseMapping:0x0E46 - }, - { code:0x0E47 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E47 - ,simpleLowerCaseMapping:0x0E47 - ,simpleTitleCaseMapping:0x0E47 - }, - { code:0x0E48 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E48 - ,simpleLowerCaseMapping:0x0E48 - ,simpleTitleCaseMapping:0x0E48 - }, - { code:0x0E49 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E49 - ,simpleLowerCaseMapping:0x0E49 - ,simpleTitleCaseMapping:0x0E49 - }, - { code:0x0E4A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E4A - ,simpleLowerCaseMapping:0x0E4A - ,simpleTitleCaseMapping:0x0E4A - }, - { code:0x0E4B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E4B - ,simpleLowerCaseMapping:0x0E4B - ,simpleTitleCaseMapping:0x0E4B - }, - { code:0x0E4C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E4C - ,simpleLowerCaseMapping:0x0E4C - ,simpleTitleCaseMapping:0x0E4C - }, - { code:0x0E4D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E4D - ,simpleLowerCaseMapping:0x0E4D - ,simpleTitleCaseMapping:0x0E4D - }, - { code:0x0E4E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0E4E - ,simpleLowerCaseMapping:0x0E4E - ,simpleTitleCaseMapping:0x0E4E - }, - { code:0x0E4F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0E4F - ,simpleLowerCaseMapping:0x0E4F - ,simpleTitleCaseMapping:0x0E4F - }, - { code:0x0E50 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E50 - ,simpleLowerCaseMapping:0x0E50 - ,simpleTitleCaseMapping:0x0E50 - }, - { code:0x0E51 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E51 - ,simpleLowerCaseMapping:0x0E51 - ,simpleTitleCaseMapping:0x0E51 - }, - { code:0x0E52 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E52 - ,simpleLowerCaseMapping:0x0E52 - ,simpleTitleCaseMapping:0x0E52 - }, - { code:0x0E53 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E53 - ,simpleLowerCaseMapping:0x0E53 - ,simpleTitleCaseMapping:0x0E53 - }, - { code:0x0E54 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E54 - ,simpleLowerCaseMapping:0x0E54 - ,simpleTitleCaseMapping:0x0E54 - }, - { code:0x0E55 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E55 - ,simpleLowerCaseMapping:0x0E55 - ,simpleTitleCaseMapping:0x0E55 - }, - { code:0x0E56 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E56 - ,simpleLowerCaseMapping:0x0E56 - ,simpleTitleCaseMapping:0x0E56 - }, - { code:0x0E57 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E57 - ,simpleLowerCaseMapping:0x0E57 - ,simpleTitleCaseMapping:0x0E57 - }, - { code:0x0E58 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E58 - ,simpleLowerCaseMapping:0x0E58 - ,simpleTitleCaseMapping:0x0E58 - }, - { code:0x0E59 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0E59 - ,simpleLowerCaseMapping:0x0E59 - ,simpleTitleCaseMapping:0x0E59 - }, - { code:0x0E5A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0E5A - ,simpleLowerCaseMapping:0x0E5A - ,simpleTitleCaseMapping:0x0E5A - }, - { code:0x0E5B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0E5B - ,simpleLowerCaseMapping:0x0E5B - ,simpleTitleCaseMapping:0x0E5B - }, - { code:0x0E81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E81 - ,simpleLowerCaseMapping:0x0E81 - ,simpleTitleCaseMapping:0x0E81 - }, - { code:0x0E82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E82 - ,simpleLowerCaseMapping:0x0E82 - ,simpleTitleCaseMapping:0x0E82 - }, - { code:0x0E84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E84 - ,simpleLowerCaseMapping:0x0E84 - ,simpleTitleCaseMapping:0x0E84 - }, - { code:0x0E87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E87 - ,simpleLowerCaseMapping:0x0E87 - ,simpleTitleCaseMapping:0x0E87 - }, - { code:0x0E88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E88 - ,simpleLowerCaseMapping:0x0E88 - ,simpleTitleCaseMapping:0x0E88 - }, - { code:0x0E8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E8A - ,simpleLowerCaseMapping:0x0E8A - ,simpleTitleCaseMapping:0x0E8A - }, - { code:0x0E8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E8D - ,simpleLowerCaseMapping:0x0E8D - ,simpleTitleCaseMapping:0x0E8D - }, - { code:0x0E94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E94 - ,simpleLowerCaseMapping:0x0E94 - ,simpleTitleCaseMapping:0x0E94 - }, - { code:0x0E95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E95 - ,simpleLowerCaseMapping:0x0E95 - ,simpleTitleCaseMapping:0x0E95 - }, - { code:0x0E96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E96 - ,simpleLowerCaseMapping:0x0E96 - ,simpleTitleCaseMapping:0x0E96 - }, - { code:0x0E97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E97 - ,simpleLowerCaseMapping:0x0E97 - ,simpleTitleCaseMapping:0x0E97 - }, - { code:0x0E99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E99 - ,simpleLowerCaseMapping:0x0E99 - ,simpleTitleCaseMapping:0x0E99 - }, - { code:0x0E9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9A - ,simpleLowerCaseMapping:0x0E9A - ,simpleTitleCaseMapping:0x0E9A - }, - { code:0x0E9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9B - ,simpleLowerCaseMapping:0x0E9B - ,simpleTitleCaseMapping:0x0E9B - }, - { code:0x0E9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9C - ,simpleLowerCaseMapping:0x0E9C - ,simpleTitleCaseMapping:0x0E9C - }, - { code:0x0E9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9D - ,simpleLowerCaseMapping:0x0E9D - ,simpleTitleCaseMapping:0x0E9D - }, - { code:0x0E9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9E - ,simpleLowerCaseMapping:0x0E9E - ,simpleTitleCaseMapping:0x0E9E - }, - { code:0x0E9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0E9F - ,simpleLowerCaseMapping:0x0E9F - ,simpleTitleCaseMapping:0x0E9F - }, - { code:0x0EA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EA1 - ,simpleLowerCaseMapping:0x0EA1 - ,simpleTitleCaseMapping:0x0EA1 - }, - { code:0x0EA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EA2 - ,simpleLowerCaseMapping:0x0EA2 - ,simpleTitleCaseMapping:0x0EA2 - }, - { code:0x0EA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EA3 - ,simpleLowerCaseMapping:0x0EA3 - ,simpleTitleCaseMapping:0x0EA3 - }, - { code:0x0EA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EA5 - ,simpleLowerCaseMapping:0x0EA5 - ,simpleTitleCaseMapping:0x0EA5 - }, - { code:0x0EA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EA7 - ,simpleLowerCaseMapping:0x0EA7 - ,simpleTitleCaseMapping:0x0EA7 - }, - { code:0x0EAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EAA - ,simpleLowerCaseMapping:0x0EAA - ,simpleTitleCaseMapping:0x0EAA - }, - { code:0x0EAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EAB - ,simpleLowerCaseMapping:0x0EAB - ,simpleTitleCaseMapping:0x0EAB - }, - { code:0x0EAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EAD - ,simpleLowerCaseMapping:0x0EAD - ,simpleTitleCaseMapping:0x0EAD - }, - { code:0x0EAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EAE - ,simpleLowerCaseMapping:0x0EAE - ,simpleTitleCaseMapping:0x0EAE - }, - { code:0x0EAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EAF - ,simpleLowerCaseMapping:0x0EAF - ,simpleTitleCaseMapping:0x0EAF - }, - { code:0x0EB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EB0 - ,simpleLowerCaseMapping:0x0EB0 - ,simpleTitleCaseMapping:0x0EB0 - }, - { code:0x0EB1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB1 - ,simpleLowerCaseMapping:0x0EB1 - ,simpleTitleCaseMapping:0x0EB1 - }, - { code:0x0EB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EB2 - ,simpleLowerCaseMapping:0x0EB2 - ,simpleTitleCaseMapping:0x0EB2 - }, - { code:0x0EB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EB3 - ,simpleLowerCaseMapping:0x0EB3 - ,simpleTitleCaseMapping:0x0EB3 - }, - { code:0x0EB4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB4 - ,simpleLowerCaseMapping:0x0EB4 - ,simpleTitleCaseMapping:0x0EB4 - }, - { code:0x0EB5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB5 - ,simpleLowerCaseMapping:0x0EB5 - ,simpleTitleCaseMapping:0x0EB5 - }, - { code:0x0EB6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB6 - ,simpleLowerCaseMapping:0x0EB6 - ,simpleTitleCaseMapping:0x0EB6 - }, - { code:0x0EB7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB7 - ,simpleLowerCaseMapping:0x0EB7 - ,simpleTitleCaseMapping:0x0EB7 - }, - { code:0x0EB8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB8 - ,simpleLowerCaseMapping:0x0EB8 - ,simpleTitleCaseMapping:0x0EB8 - }, - { code:0x0EB9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EB9 - ,simpleLowerCaseMapping:0x0EB9 - ,simpleTitleCaseMapping:0x0EB9 - }, - { code:0x0EBB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EBB - ,simpleLowerCaseMapping:0x0EBB - ,simpleTitleCaseMapping:0x0EBB - }, - { code:0x0EBC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EBC - ,simpleLowerCaseMapping:0x0EBC - ,simpleTitleCaseMapping:0x0EBC - }, - { code:0x0EBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EBD - ,simpleLowerCaseMapping:0x0EBD - ,simpleTitleCaseMapping:0x0EBD - }, - { code:0x0EC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EC0 - ,simpleLowerCaseMapping:0x0EC0 - ,simpleTitleCaseMapping:0x0EC0 - }, - { code:0x0EC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EC1 - ,simpleLowerCaseMapping:0x0EC1 - ,simpleTitleCaseMapping:0x0EC1 - }, - { code:0x0EC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EC2 - ,simpleLowerCaseMapping:0x0EC2 - ,simpleTitleCaseMapping:0x0EC2 - }, - { code:0x0EC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EC3 - ,simpleLowerCaseMapping:0x0EC3 - ,simpleTitleCaseMapping:0x0EC3 - }, - { code:0x0EC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EC4 - ,simpleLowerCaseMapping:0x0EC4 - ,simpleTitleCaseMapping:0x0EC4 - }, - { code:0x0EC6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x0EC6 - ,simpleLowerCaseMapping:0x0EC6 - ,simpleTitleCaseMapping:0x0EC6 - }, - { code:0x0EC8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EC8 - ,simpleLowerCaseMapping:0x0EC8 - ,simpleTitleCaseMapping:0x0EC8 - }, - { code:0x0EC9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0EC9 - ,simpleLowerCaseMapping:0x0EC9 - ,simpleTitleCaseMapping:0x0EC9 - }, - { code:0x0ECA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ECA - ,simpleLowerCaseMapping:0x0ECA - ,simpleTitleCaseMapping:0x0ECA - }, - { code:0x0ECB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ECB - ,simpleLowerCaseMapping:0x0ECB - ,simpleTitleCaseMapping:0x0ECB - }, - { code:0x0ECC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ECC - ,simpleLowerCaseMapping:0x0ECC - ,simpleTitleCaseMapping:0x0ECC - }, - { code:0x0ECD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0ECD - ,simpleLowerCaseMapping:0x0ECD - ,simpleTitleCaseMapping:0x0ECD - }, - { code:0x0ED0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED0 - ,simpleLowerCaseMapping:0x0ED0 - ,simpleTitleCaseMapping:0x0ED0 - }, - { code:0x0ED1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED1 - ,simpleLowerCaseMapping:0x0ED1 - ,simpleTitleCaseMapping:0x0ED1 - }, - { code:0x0ED2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED2 - ,simpleLowerCaseMapping:0x0ED2 - ,simpleTitleCaseMapping:0x0ED2 - }, - { code:0x0ED3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED3 - ,simpleLowerCaseMapping:0x0ED3 - ,simpleTitleCaseMapping:0x0ED3 - }, - { code:0x0ED4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED4 - ,simpleLowerCaseMapping:0x0ED4 - ,simpleTitleCaseMapping:0x0ED4 - }, - { code:0x0ED5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED5 - ,simpleLowerCaseMapping:0x0ED5 - ,simpleTitleCaseMapping:0x0ED5 - }, - { code:0x0ED6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED6 - ,simpleLowerCaseMapping:0x0ED6 - ,simpleTitleCaseMapping:0x0ED6 - }, - { code:0x0ED7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED7 - ,simpleLowerCaseMapping:0x0ED7 - ,simpleTitleCaseMapping:0x0ED7 - }, - { code:0x0ED8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED8 - ,simpleLowerCaseMapping:0x0ED8 - ,simpleTitleCaseMapping:0x0ED8 - }, - { code:0x0ED9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0ED9 - ,simpleLowerCaseMapping:0x0ED9 - ,simpleTitleCaseMapping:0x0ED9 - }, - { code:0x0EDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EDC - ,simpleLowerCaseMapping:0x0EDC - ,simpleTitleCaseMapping:0x0EDC - }, - { code:0x0EDD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0EDD - ,simpleLowerCaseMapping:0x0EDD - ,simpleTitleCaseMapping:0x0EDD - }, - { code:0x0F00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F00 - ,simpleLowerCaseMapping:0x0F00 - ,simpleTitleCaseMapping:0x0F00 - }, - { code:0x0F01 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F01 - ,simpleLowerCaseMapping:0x0F01 - ,simpleTitleCaseMapping:0x0F01 - }, - { code:0x0F02 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F02 - ,simpleLowerCaseMapping:0x0F02 - ,simpleTitleCaseMapping:0x0F02 - }, - { code:0x0F03 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F03 - ,simpleLowerCaseMapping:0x0F03 - ,simpleTitleCaseMapping:0x0F03 - }, - { code:0x0F04 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F04 - ,simpleLowerCaseMapping:0x0F04 - ,simpleTitleCaseMapping:0x0F04 - }, - { code:0x0F05 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F05 - ,simpleLowerCaseMapping:0x0F05 - ,simpleTitleCaseMapping:0x0F05 - }, - { code:0x0F06 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F06 - ,simpleLowerCaseMapping:0x0F06 - ,simpleTitleCaseMapping:0x0F06 - }, - { code:0x0F07 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F07 - ,simpleLowerCaseMapping:0x0F07 - ,simpleTitleCaseMapping:0x0F07 - }, - { code:0x0F08 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F08 - ,simpleLowerCaseMapping:0x0F08 - ,simpleTitleCaseMapping:0x0F08 - }, - { code:0x0F09 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F09 - ,simpleLowerCaseMapping:0x0F09 - ,simpleTitleCaseMapping:0x0F09 - }, - { code:0x0F0A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0A - ,simpleLowerCaseMapping:0x0F0A - ,simpleTitleCaseMapping:0x0F0A - }, - { code:0x0F0B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0B - ,simpleLowerCaseMapping:0x0F0B - ,simpleTitleCaseMapping:0x0F0B - }, - { code:0x0F0C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0C - ,simpleLowerCaseMapping:0x0F0C - ,simpleTitleCaseMapping:0x0F0C - }, - { code:0x0F0D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0D - ,simpleLowerCaseMapping:0x0F0D - ,simpleTitleCaseMapping:0x0F0D - }, - { code:0x0F0E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0E - ,simpleLowerCaseMapping:0x0F0E - ,simpleTitleCaseMapping:0x0F0E - }, - { code:0x0F0F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F0F - ,simpleLowerCaseMapping:0x0F0F - ,simpleTitleCaseMapping:0x0F0F - }, - { code:0x0F10 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F10 - ,simpleLowerCaseMapping:0x0F10 - ,simpleTitleCaseMapping:0x0F10 - }, - { code:0x0F11 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F11 - ,simpleLowerCaseMapping:0x0F11 - ,simpleTitleCaseMapping:0x0F11 - }, - { code:0x0F12 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F12 - ,simpleLowerCaseMapping:0x0F12 - ,simpleTitleCaseMapping:0x0F12 - }, - { code:0x0F13 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F13 - ,simpleLowerCaseMapping:0x0F13 - ,simpleTitleCaseMapping:0x0F13 - }, - { code:0x0F14 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F14 - ,simpleLowerCaseMapping:0x0F14 - ,simpleTitleCaseMapping:0x0F14 - }, - { code:0x0F15 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F15 - ,simpleLowerCaseMapping:0x0F15 - ,simpleTitleCaseMapping:0x0F15 - }, - { code:0x0F16 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F16 - ,simpleLowerCaseMapping:0x0F16 - ,simpleTitleCaseMapping:0x0F16 - }, - { code:0x0F17 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F17 - ,simpleLowerCaseMapping:0x0F17 - ,simpleTitleCaseMapping:0x0F17 - }, - { code:0x0F18 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F18 - ,simpleLowerCaseMapping:0x0F18 - ,simpleTitleCaseMapping:0x0F18 - }, - { code:0x0F19 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F19 - ,simpleLowerCaseMapping:0x0F19 - ,simpleTitleCaseMapping:0x0F19 - }, - { code:0x0F1A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1A - ,simpleLowerCaseMapping:0x0F1A - ,simpleTitleCaseMapping:0x0F1A - }, - { code:0x0F1B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1B - ,simpleLowerCaseMapping:0x0F1B - ,simpleTitleCaseMapping:0x0F1B - }, - { code:0x0F1C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1C - ,simpleLowerCaseMapping:0x0F1C - ,simpleTitleCaseMapping:0x0F1C - }, - { code:0x0F1D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1D - ,simpleLowerCaseMapping:0x0F1D - ,simpleTitleCaseMapping:0x0F1D - }, - { code:0x0F1E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1E - ,simpleLowerCaseMapping:0x0F1E - ,simpleTitleCaseMapping:0x0F1E - }, - { code:0x0F1F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F1F - ,simpleLowerCaseMapping:0x0F1F - ,simpleTitleCaseMapping:0x0F1F - }, - { code:0x0F20 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F20 - ,simpleLowerCaseMapping:0x0F20 - ,simpleTitleCaseMapping:0x0F20 - }, - { code:0x0F21 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F21 - ,simpleLowerCaseMapping:0x0F21 - ,simpleTitleCaseMapping:0x0F21 - }, - { code:0x0F22 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F22 - ,simpleLowerCaseMapping:0x0F22 - ,simpleTitleCaseMapping:0x0F22 - }, - { code:0x0F23 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F23 - ,simpleLowerCaseMapping:0x0F23 - ,simpleTitleCaseMapping:0x0F23 - }, - { code:0x0F24 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F24 - ,simpleLowerCaseMapping:0x0F24 - ,simpleTitleCaseMapping:0x0F24 - }, - { code:0x0F25 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F25 - ,simpleLowerCaseMapping:0x0F25 - ,simpleTitleCaseMapping:0x0F25 - }, - { code:0x0F26 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F26 - ,simpleLowerCaseMapping:0x0F26 - ,simpleTitleCaseMapping:0x0F26 - }, - { code:0x0F27 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F27 - ,simpleLowerCaseMapping:0x0F27 - ,simpleTitleCaseMapping:0x0F27 - }, - { code:0x0F28 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F28 - ,simpleLowerCaseMapping:0x0F28 - ,simpleTitleCaseMapping:0x0F28 - }, - { code:0x0F29 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x0F29 - ,simpleLowerCaseMapping:0x0F29 - ,simpleTitleCaseMapping:0x0F29 - }, - { code:0x0F2A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2A - ,simpleLowerCaseMapping:0x0F2A - ,simpleTitleCaseMapping:0x0F2A - }, - { code:0x0F2B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2B - ,simpleLowerCaseMapping:0x0F2B - ,simpleTitleCaseMapping:0x0F2B - }, - { code:0x0F2C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2C - ,simpleLowerCaseMapping:0x0F2C - ,simpleTitleCaseMapping:0x0F2C - }, - { code:0x0F2D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2D - ,simpleLowerCaseMapping:0x0F2D - ,simpleTitleCaseMapping:0x0F2D - }, - { code:0x0F2E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2E - ,simpleLowerCaseMapping:0x0F2E - ,simpleTitleCaseMapping:0x0F2E - }, - { code:0x0F2F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F2F - ,simpleLowerCaseMapping:0x0F2F - ,simpleTitleCaseMapping:0x0F2F - }, - { code:0x0F30 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F30 - ,simpleLowerCaseMapping:0x0F30 - ,simpleTitleCaseMapping:0x0F30 - }, - { code:0x0F31 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F31 - ,simpleLowerCaseMapping:0x0F31 - ,simpleTitleCaseMapping:0x0F31 - }, - { code:0x0F32 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F32 - ,simpleLowerCaseMapping:0x0F32 - ,simpleTitleCaseMapping:0x0F32 - }, - { code:0x0F33 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x0F33 - ,simpleLowerCaseMapping:0x0F33 - ,simpleTitleCaseMapping:0x0F33 - }, - { code:0x0F34 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F34 - ,simpleLowerCaseMapping:0x0F34 - ,simpleTitleCaseMapping:0x0F34 - }, - { code:0x0F35 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F35 - ,simpleLowerCaseMapping:0x0F35 - ,simpleTitleCaseMapping:0x0F35 - }, - { code:0x0F36 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F36 - ,simpleLowerCaseMapping:0x0F36 - ,simpleTitleCaseMapping:0x0F36 - }, - { code:0x0F37 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F37 - ,simpleLowerCaseMapping:0x0F37 - ,simpleTitleCaseMapping:0x0F37 - }, - { code:0x0F38 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0F38 - ,simpleLowerCaseMapping:0x0F38 - ,simpleTitleCaseMapping:0x0F38 - }, - { code:0x0F39 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F39 - ,simpleLowerCaseMapping:0x0F39 - ,simpleTitleCaseMapping:0x0F39 - }, - { code:0x0F3A - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x0F3A - ,simpleLowerCaseMapping:0x0F3A - ,simpleTitleCaseMapping:0x0F3A - }, - { code:0x0F3B - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x0F3B - ,simpleLowerCaseMapping:0x0F3B - ,simpleTitleCaseMapping:0x0F3B - }, - { code:0x0F3C - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x0F3C - ,simpleLowerCaseMapping:0x0F3C - ,simpleTitleCaseMapping:0x0F3C - }, - { code:0x0F3D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x0F3D - ,simpleLowerCaseMapping:0x0F3D - ,simpleTitleCaseMapping:0x0F3D - }, - { code:0x0F3E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0F3E - ,simpleLowerCaseMapping:0x0F3E - ,simpleTitleCaseMapping:0x0F3E - }, - { code:0x0F3F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0F3F - ,simpleLowerCaseMapping:0x0F3F - ,simpleTitleCaseMapping:0x0F3F - }, - { code:0x0F40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F40 - ,simpleLowerCaseMapping:0x0F40 - ,simpleTitleCaseMapping:0x0F40 - }, - { code:0x0F41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F41 - ,simpleLowerCaseMapping:0x0F41 - ,simpleTitleCaseMapping:0x0F41 - }, - { code:0x0F42 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F42 - ,simpleLowerCaseMapping:0x0F42 - ,simpleTitleCaseMapping:0x0F42 - }, - { code:0x0F43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F43 - ,simpleLowerCaseMapping:0x0F43 - ,simpleTitleCaseMapping:0x0F43 - }, - { code:0x0F44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F44 - ,simpleLowerCaseMapping:0x0F44 - ,simpleTitleCaseMapping:0x0F44 - }, - { code:0x0F45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F45 - ,simpleLowerCaseMapping:0x0F45 - ,simpleTitleCaseMapping:0x0F45 - }, - { code:0x0F46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F46 - ,simpleLowerCaseMapping:0x0F46 - ,simpleTitleCaseMapping:0x0F46 - }, - { code:0x0F47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F47 - ,simpleLowerCaseMapping:0x0F47 - ,simpleTitleCaseMapping:0x0F47 - }, - { code:0x0F49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F49 - ,simpleLowerCaseMapping:0x0F49 - ,simpleTitleCaseMapping:0x0F49 - }, - { code:0x0F4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4A - ,simpleLowerCaseMapping:0x0F4A - ,simpleTitleCaseMapping:0x0F4A - }, - { code:0x0F4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4B - ,simpleLowerCaseMapping:0x0F4B - ,simpleTitleCaseMapping:0x0F4B - }, - { code:0x0F4C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4C - ,simpleLowerCaseMapping:0x0F4C - ,simpleTitleCaseMapping:0x0F4C - }, - { code:0x0F4D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4D - ,simpleLowerCaseMapping:0x0F4D - ,simpleTitleCaseMapping:0x0F4D - }, - { code:0x0F4E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4E - ,simpleLowerCaseMapping:0x0F4E - ,simpleTitleCaseMapping:0x0F4E - }, - { code:0x0F4F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F4F - ,simpleLowerCaseMapping:0x0F4F - ,simpleTitleCaseMapping:0x0F4F - }, - { code:0x0F50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F50 - ,simpleLowerCaseMapping:0x0F50 - ,simpleTitleCaseMapping:0x0F50 - }, - { code:0x0F51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F51 - ,simpleLowerCaseMapping:0x0F51 - ,simpleTitleCaseMapping:0x0F51 - }, - { code:0x0F52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F52 - ,simpleLowerCaseMapping:0x0F52 - ,simpleTitleCaseMapping:0x0F52 - }, - { code:0x0F53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F53 - ,simpleLowerCaseMapping:0x0F53 - ,simpleTitleCaseMapping:0x0F53 - }, - { code:0x0F54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F54 - ,simpleLowerCaseMapping:0x0F54 - ,simpleTitleCaseMapping:0x0F54 - }, - { code:0x0F55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F55 - ,simpleLowerCaseMapping:0x0F55 - ,simpleTitleCaseMapping:0x0F55 - }, - { code:0x0F56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F56 - ,simpleLowerCaseMapping:0x0F56 - ,simpleTitleCaseMapping:0x0F56 - }, - { code:0x0F57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F57 - ,simpleLowerCaseMapping:0x0F57 - ,simpleTitleCaseMapping:0x0F57 - }, - { code:0x0F58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F58 - ,simpleLowerCaseMapping:0x0F58 - ,simpleTitleCaseMapping:0x0F58 - }, - { code:0x0F59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F59 - ,simpleLowerCaseMapping:0x0F59 - ,simpleTitleCaseMapping:0x0F59 - }, - { code:0x0F5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5A - ,simpleLowerCaseMapping:0x0F5A - ,simpleTitleCaseMapping:0x0F5A - }, - { code:0x0F5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5B - ,simpleLowerCaseMapping:0x0F5B - ,simpleTitleCaseMapping:0x0F5B - }, - { code:0x0F5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5C - ,simpleLowerCaseMapping:0x0F5C - ,simpleTitleCaseMapping:0x0F5C - }, - { code:0x0F5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5D - ,simpleLowerCaseMapping:0x0F5D - ,simpleTitleCaseMapping:0x0F5D - }, - { code:0x0F5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5E - ,simpleLowerCaseMapping:0x0F5E - ,simpleTitleCaseMapping:0x0F5E - }, - { code:0x0F5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F5F - ,simpleLowerCaseMapping:0x0F5F - ,simpleTitleCaseMapping:0x0F5F - }, - { code:0x0F60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F60 - ,simpleLowerCaseMapping:0x0F60 - ,simpleTitleCaseMapping:0x0F60 - }, - { code:0x0F61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F61 - ,simpleLowerCaseMapping:0x0F61 - ,simpleTitleCaseMapping:0x0F61 - }, - { code:0x0F62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F62 - ,simpleLowerCaseMapping:0x0F62 - ,simpleTitleCaseMapping:0x0F62 - }, - { code:0x0F63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F63 - ,simpleLowerCaseMapping:0x0F63 - ,simpleTitleCaseMapping:0x0F63 - }, - { code:0x0F64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F64 - ,simpleLowerCaseMapping:0x0F64 - ,simpleTitleCaseMapping:0x0F64 - }, - { code:0x0F65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F65 - ,simpleLowerCaseMapping:0x0F65 - ,simpleTitleCaseMapping:0x0F65 - }, - { code:0x0F66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F66 - ,simpleLowerCaseMapping:0x0F66 - ,simpleTitleCaseMapping:0x0F66 - }, - { code:0x0F67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F67 - ,simpleLowerCaseMapping:0x0F67 - ,simpleTitleCaseMapping:0x0F67 - }, - { code:0x0F68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F68 - ,simpleLowerCaseMapping:0x0F68 - ,simpleTitleCaseMapping:0x0F68 - }, - { code:0x0F69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F69 - ,simpleLowerCaseMapping:0x0F69 - ,simpleTitleCaseMapping:0x0F69 - }, - { code:0x0F6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F6A - ,simpleLowerCaseMapping:0x0F6A - ,simpleTitleCaseMapping:0x0F6A - }, - { code:0x0F71 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F71 - ,simpleLowerCaseMapping:0x0F71 - ,simpleTitleCaseMapping:0x0F71 - }, - { code:0x0F72 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F72 - ,simpleLowerCaseMapping:0x0F72 - ,simpleTitleCaseMapping:0x0F72 - }, - { code:0x0F73 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F73 - ,simpleLowerCaseMapping:0x0F73 - ,simpleTitleCaseMapping:0x0F73 - }, - { code:0x0F74 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F74 - ,simpleLowerCaseMapping:0x0F74 - ,simpleTitleCaseMapping:0x0F74 - }, - { code:0x0F75 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F75 - ,simpleLowerCaseMapping:0x0F75 - ,simpleTitleCaseMapping:0x0F75 - }, - { code:0x0F76 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F76 - ,simpleLowerCaseMapping:0x0F76 - ,simpleTitleCaseMapping:0x0F76 - }, - { code:0x0F77 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F77 - ,simpleLowerCaseMapping:0x0F77 - ,simpleTitleCaseMapping:0x0F77 - }, - { code:0x0F78 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F78 - ,simpleLowerCaseMapping:0x0F78 - ,simpleTitleCaseMapping:0x0F78 - }, - { code:0x0F79 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F79 - ,simpleLowerCaseMapping:0x0F79 - ,simpleTitleCaseMapping:0x0F79 - }, - { code:0x0F7A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F7A - ,simpleLowerCaseMapping:0x0F7A - ,simpleTitleCaseMapping:0x0F7A - }, - { code:0x0F7B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F7B - ,simpleLowerCaseMapping:0x0F7B - ,simpleTitleCaseMapping:0x0F7B - }, - { code:0x0F7C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F7C - ,simpleLowerCaseMapping:0x0F7C - ,simpleTitleCaseMapping:0x0F7C - }, - { code:0x0F7D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F7D - ,simpleLowerCaseMapping:0x0F7D - ,simpleTitleCaseMapping:0x0F7D - }, - { code:0x0F7E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F7E - ,simpleLowerCaseMapping:0x0F7E - ,simpleTitleCaseMapping:0x0F7E - }, - { code:0x0F7F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x0F7F - ,simpleLowerCaseMapping:0x0F7F - ,simpleTitleCaseMapping:0x0F7F - }, - { code:0x0F80 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F80 - ,simpleLowerCaseMapping:0x0F80 - ,simpleTitleCaseMapping:0x0F80 - }, - { code:0x0F81 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F81 - ,simpleLowerCaseMapping:0x0F81 - ,simpleTitleCaseMapping:0x0F81 - }, - { code:0x0F82 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F82 - ,simpleLowerCaseMapping:0x0F82 - ,simpleTitleCaseMapping:0x0F82 - }, - { code:0x0F83 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F83 - ,simpleLowerCaseMapping:0x0F83 - ,simpleTitleCaseMapping:0x0F83 - }, - { code:0x0F84 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F84 - ,simpleLowerCaseMapping:0x0F84 - ,simpleTitleCaseMapping:0x0F84 - }, - { code:0x0F85 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0F85 - ,simpleLowerCaseMapping:0x0F85 - ,simpleTitleCaseMapping:0x0F85 - }, - { code:0x0F86 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F86 - ,simpleLowerCaseMapping:0x0F86 - ,simpleTitleCaseMapping:0x0F86 - }, - { code:0x0F87 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F87 - ,simpleLowerCaseMapping:0x0F87 - ,simpleTitleCaseMapping:0x0F87 - }, - { code:0x0F88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F88 - ,simpleLowerCaseMapping:0x0F88 - ,simpleTitleCaseMapping:0x0F88 - }, - { code:0x0F89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F89 - ,simpleLowerCaseMapping:0x0F89 - ,simpleTitleCaseMapping:0x0F89 - }, - { code:0x0F8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F8A - ,simpleLowerCaseMapping:0x0F8A - ,simpleTitleCaseMapping:0x0F8A - }, - { code:0x0F8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x0F8B - ,simpleLowerCaseMapping:0x0F8B - ,simpleTitleCaseMapping:0x0F8B - }, - { code:0x0F90 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F90 - ,simpleLowerCaseMapping:0x0F90 - ,simpleTitleCaseMapping:0x0F90 - }, - { code:0x0F91 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F91 - ,simpleLowerCaseMapping:0x0F91 - ,simpleTitleCaseMapping:0x0F91 - }, - { code:0x0F92 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F92 - ,simpleLowerCaseMapping:0x0F92 - ,simpleTitleCaseMapping:0x0F92 - }, - { code:0x0F93 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F93 - ,simpleLowerCaseMapping:0x0F93 - ,simpleTitleCaseMapping:0x0F93 - }, - { code:0x0F94 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F94 - ,simpleLowerCaseMapping:0x0F94 - ,simpleTitleCaseMapping:0x0F94 - }, - { code:0x0F95 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F95 - ,simpleLowerCaseMapping:0x0F95 - ,simpleTitleCaseMapping:0x0F95 - }, - { code:0x0F96 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F96 - ,simpleLowerCaseMapping:0x0F96 - ,simpleTitleCaseMapping:0x0F96 - }, - { code:0x0F97 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F97 - ,simpleLowerCaseMapping:0x0F97 - ,simpleTitleCaseMapping:0x0F97 - }, - { code:0x0F99 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F99 - ,simpleLowerCaseMapping:0x0F99 - ,simpleTitleCaseMapping:0x0F99 - }, - { code:0x0F9A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9A - ,simpleLowerCaseMapping:0x0F9A - ,simpleTitleCaseMapping:0x0F9A - }, - { code:0x0F9B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9B - ,simpleLowerCaseMapping:0x0F9B - ,simpleTitleCaseMapping:0x0F9B - }, - { code:0x0F9C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9C - ,simpleLowerCaseMapping:0x0F9C - ,simpleTitleCaseMapping:0x0F9C - }, - { code:0x0F9D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9D - ,simpleLowerCaseMapping:0x0F9D - ,simpleTitleCaseMapping:0x0F9D - }, - { code:0x0F9E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9E - ,simpleLowerCaseMapping:0x0F9E - ,simpleTitleCaseMapping:0x0F9E - }, - { code:0x0F9F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0F9F - ,simpleLowerCaseMapping:0x0F9F - ,simpleTitleCaseMapping:0x0F9F - }, - { code:0x0FA0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA0 - ,simpleLowerCaseMapping:0x0FA0 - ,simpleTitleCaseMapping:0x0FA0 - }, - { code:0x0FA1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA1 - ,simpleLowerCaseMapping:0x0FA1 - ,simpleTitleCaseMapping:0x0FA1 - }, - { code:0x0FA2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA2 - ,simpleLowerCaseMapping:0x0FA2 - ,simpleTitleCaseMapping:0x0FA2 - }, - { code:0x0FA3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA3 - ,simpleLowerCaseMapping:0x0FA3 - ,simpleTitleCaseMapping:0x0FA3 - }, - { code:0x0FA4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA4 - ,simpleLowerCaseMapping:0x0FA4 - ,simpleTitleCaseMapping:0x0FA4 - }, - { code:0x0FA5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA5 - ,simpleLowerCaseMapping:0x0FA5 - ,simpleTitleCaseMapping:0x0FA5 - }, - { code:0x0FA6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA6 - ,simpleLowerCaseMapping:0x0FA6 - ,simpleTitleCaseMapping:0x0FA6 - }, - { code:0x0FA7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA7 - ,simpleLowerCaseMapping:0x0FA7 - ,simpleTitleCaseMapping:0x0FA7 - }, - { code:0x0FA8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA8 - ,simpleLowerCaseMapping:0x0FA8 - ,simpleTitleCaseMapping:0x0FA8 - }, - { code:0x0FA9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FA9 - ,simpleLowerCaseMapping:0x0FA9 - ,simpleTitleCaseMapping:0x0FA9 - }, - { code:0x0FAA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAA - ,simpleLowerCaseMapping:0x0FAA - ,simpleTitleCaseMapping:0x0FAA - }, - { code:0x0FAB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAB - ,simpleLowerCaseMapping:0x0FAB - ,simpleTitleCaseMapping:0x0FAB - }, - { code:0x0FAC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAC - ,simpleLowerCaseMapping:0x0FAC - ,simpleTitleCaseMapping:0x0FAC - }, - { code:0x0FAD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAD - ,simpleLowerCaseMapping:0x0FAD - ,simpleTitleCaseMapping:0x0FAD - }, - { code:0x0FAE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAE - ,simpleLowerCaseMapping:0x0FAE - ,simpleTitleCaseMapping:0x0FAE - }, - { code:0x0FAF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FAF - ,simpleLowerCaseMapping:0x0FAF - ,simpleTitleCaseMapping:0x0FAF - }, - { code:0x0FB0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB0 - ,simpleLowerCaseMapping:0x0FB0 - ,simpleTitleCaseMapping:0x0FB0 - }, - { code:0x0FB1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB1 - ,simpleLowerCaseMapping:0x0FB1 - ,simpleTitleCaseMapping:0x0FB1 - }, - { code:0x0FB2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB2 - ,simpleLowerCaseMapping:0x0FB2 - ,simpleTitleCaseMapping:0x0FB2 - }, - { code:0x0FB3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB3 - ,simpleLowerCaseMapping:0x0FB3 - ,simpleTitleCaseMapping:0x0FB3 - }, - { code:0x0FB4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB4 - ,simpleLowerCaseMapping:0x0FB4 - ,simpleTitleCaseMapping:0x0FB4 - }, - { code:0x0FB5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB5 - ,simpleLowerCaseMapping:0x0FB5 - ,simpleTitleCaseMapping:0x0FB5 - }, - { code:0x0FB6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB6 - ,simpleLowerCaseMapping:0x0FB6 - ,simpleTitleCaseMapping:0x0FB6 - }, - { code:0x0FB7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB7 - ,simpleLowerCaseMapping:0x0FB7 - ,simpleTitleCaseMapping:0x0FB7 - }, - { code:0x0FB8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB8 - ,simpleLowerCaseMapping:0x0FB8 - ,simpleTitleCaseMapping:0x0FB8 - }, - { code:0x0FB9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FB9 - ,simpleLowerCaseMapping:0x0FB9 - ,simpleTitleCaseMapping:0x0FB9 - }, - { code:0x0FBA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FBA - ,simpleLowerCaseMapping:0x0FBA - ,simpleTitleCaseMapping:0x0FBA - }, - { code:0x0FBB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FBB - ,simpleLowerCaseMapping:0x0FBB - ,simpleTitleCaseMapping:0x0FBB - }, - { code:0x0FBC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FBC - ,simpleLowerCaseMapping:0x0FBC - ,simpleTitleCaseMapping:0x0FBC - }, - { code:0x0FBE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FBE - ,simpleLowerCaseMapping:0x0FBE - ,simpleTitleCaseMapping:0x0FBE - }, - { code:0x0FBF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FBF - ,simpleLowerCaseMapping:0x0FBF - ,simpleTitleCaseMapping:0x0FBF - }, - { code:0x0FC0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC0 - ,simpleLowerCaseMapping:0x0FC0 - ,simpleTitleCaseMapping:0x0FC0 - }, - { code:0x0FC1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC1 - ,simpleLowerCaseMapping:0x0FC1 - ,simpleTitleCaseMapping:0x0FC1 - }, - { code:0x0FC2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC2 - ,simpleLowerCaseMapping:0x0FC2 - ,simpleTitleCaseMapping:0x0FC2 - }, - { code:0x0FC3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC3 - ,simpleLowerCaseMapping:0x0FC3 - ,simpleTitleCaseMapping:0x0FC3 - }, - { code:0x0FC4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC4 - ,simpleLowerCaseMapping:0x0FC4 - ,simpleTitleCaseMapping:0x0FC4 - }, - { code:0x0FC5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC5 - ,simpleLowerCaseMapping:0x0FC5 - ,simpleTitleCaseMapping:0x0FC5 - }, - { code:0x0FC6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x0FC6 - ,simpleLowerCaseMapping:0x0FC6 - ,simpleTitleCaseMapping:0x0FC6 - }, - { code:0x0FC7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC7 - ,simpleLowerCaseMapping:0x0FC7 - ,simpleTitleCaseMapping:0x0FC7 - }, - { code:0x0FC8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC8 - ,simpleLowerCaseMapping:0x0FC8 - ,simpleTitleCaseMapping:0x0FC8 - }, - { code:0x0FC9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FC9 - ,simpleLowerCaseMapping:0x0FC9 - ,simpleTitleCaseMapping:0x0FC9 - }, - { code:0x0FCA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FCA - ,simpleLowerCaseMapping:0x0FCA - ,simpleTitleCaseMapping:0x0FCA - }, - { code:0x0FCB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FCB - ,simpleLowerCaseMapping:0x0FCB - ,simpleTitleCaseMapping:0x0FCB - }, - { code:0x0FCC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FCC - ,simpleLowerCaseMapping:0x0FCC - ,simpleTitleCaseMapping:0x0FCC - }, - { code:0x0FCF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x0FCF - ,simpleLowerCaseMapping:0x0FCF - ,simpleTitleCaseMapping:0x0FCF - }, - { code:0x0FD0 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0FD0 - ,simpleLowerCaseMapping:0x0FD0 - ,simpleTitleCaseMapping:0x0FD0 - }, - { code:0x0FD1 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x0FD1 - ,simpleLowerCaseMapping:0x0FD1 - ,simpleTitleCaseMapping:0x0FD1 - }, - { code:0x1000 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000 - ,simpleLowerCaseMapping:0x1000 - ,simpleTitleCaseMapping:0x1000 - }, - { code:0x1001 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001 - ,simpleLowerCaseMapping:0x1001 - ,simpleTitleCaseMapping:0x1001 - }, - { code:0x1002 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002 - ,simpleLowerCaseMapping:0x1002 - ,simpleTitleCaseMapping:0x1002 - }, - { code:0x1003 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1003 - ,simpleLowerCaseMapping:0x1003 - ,simpleTitleCaseMapping:0x1003 - }, - { code:0x1004 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1004 - ,simpleLowerCaseMapping:0x1004 - ,simpleTitleCaseMapping:0x1004 - }, - { code:0x1005 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1005 - ,simpleLowerCaseMapping:0x1005 - ,simpleTitleCaseMapping:0x1005 - }, - { code:0x1006 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1006 - ,simpleLowerCaseMapping:0x1006 - ,simpleTitleCaseMapping:0x1006 - }, - { code:0x1007 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1007 - ,simpleLowerCaseMapping:0x1007 - ,simpleTitleCaseMapping:0x1007 - }, - { code:0x1008 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008 - ,simpleLowerCaseMapping:0x1008 - ,simpleTitleCaseMapping:0x1008 - }, - { code:0x1009 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009 - ,simpleLowerCaseMapping:0x1009 - ,simpleTitleCaseMapping:0x1009 - }, - { code:0x100A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A - ,simpleLowerCaseMapping:0x100A - ,simpleTitleCaseMapping:0x100A - }, - { code:0x100B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B - ,simpleLowerCaseMapping:0x100B - ,simpleTitleCaseMapping:0x100B - }, - { code:0x100C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C - ,simpleLowerCaseMapping:0x100C - ,simpleTitleCaseMapping:0x100C - }, - { code:0x100D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D - ,simpleLowerCaseMapping:0x100D - ,simpleTitleCaseMapping:0x100D - }, - { code:0x100E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E - ,simpleLowerCaseMapping:0x100E - ,simpleTitleCaseMapping:0x100E - }, - { code:0x100F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F - ,simpleLowerCaseMapping:0x100F - ,simpleTitleCaseMapping:0x100F - }, - { code:0x1010 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1010 - ,simpleLowerCaseMapping:0x1010 - ,simpleTitleCaseMapping:0x1010 - }, - { code:0x1011 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1011 - ,simpleLowerCaseMapping:0x1011 - ,simpleTitleCaseMapping:0x1011 - }, - { code:0x1012 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1012 - ,simpleLowerCaseMapping:0x1012 - ,simpleTitleCaseMapping:0x1012 - }, - { code:0x1013 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1013 - ,simpleLowerCaseMapping:0x1013 - ,simpleTitleCaseMapping:0x1013 - }, - { code:0x1014 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1014 - ,simpleLowerCaseMapping:0x1014 - ,simpleTitleCaseMapping:0x1014 - }, - { code:0x1015 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1015 - ,simpleLowerCaseMapping:0x1015 - ,simpleTitleCaseMapping:0x1015 - }, - { code:0x1016 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1016 - ,simpleLowerCaseMapping:0x1016 - ,simpleTitleCaseMapping:0x1016 - }, - { code:0x1017 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1017 - ,simpleLowerCaseMapping:0x1017 - ,simpleTitleCaseMapping:0x1017 - }, - { code:0x1018 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1018 - ,simpleLowerCaseMapping:0x1018 - ,simpleTitleCaseMapping:0x1018 - }, - { code:0x1019 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1019 - ,simpleLowerCaseMapping:0x1019 - ,simpleTitleCaseMapping:0x1019 - }, - { code:0x101A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101A - ,simpleLowerCaseMapping:0x101A - ,simpleTitleCaseMapping:0x101A - }, - { code:0x101B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101B - ,simpleLowerCaseMapping:0x101B - ,simpleTitleCaseMapping:0x101B - }, - { code:0x101C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101C - ,simpleLowerCaseMapping:0x101C - ,simpleTitleCaseMapping:0x101C - }, - { code:0x101D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101D - ,simpleLowerCaseMapping:0x101D - ,simpleTitleCaseMapping:0x101D - }, - { code:0x101E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101E - ,simpleLowerCaseMapping:0x101E - ,simpleTitleCaseMapping:0x101E - }, - { code:0x101F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x101F - ,simpleLowerCaseMapping:0x101F - ,simpleTitleCaseMapping:0x101F - }, - { code:0x1020 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1020 - ,simpleLowerCaseMapping:0x1020 - ,simpleTitleCaseMapping:0x1020 - }, - { code:0x1021 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1021 - ,simpleLowerCaseMapping:0x1021 - ,simpleTitleCaseMapping:0x1021 - }, - { code:0x1023 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1023 - ,simpleLowerCaseMapping:0x1023 - ,simpleTitleCaseMapping:0x1023 - }, - { code:0x1024 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1024 - ,simpleLowerCaseMapping:0x1024 - ,simpleTitleCaseMapping:0x1024 - }, - { code:0x1025 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1025 - ,simpleLowerCaseMapping:0x1025 - ,simpleTitleCaseMapping:0x1025 - }, - { code:0x1026 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1026 - ,simpleLowerCaseMapping:0x1026 - ,simpleTitleCaseMapping:0x1026 - }, - { code:0x1027 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1027 - ,simpleLowerCaseMapping:0x1027 - ,simpleTitleCaseMapping:0x1027 - }, - { code:0x1029 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1029 - ,simpleLowerCaseMapping:0x1029 - ,simpleTitleCaseMapping:0x1029 - }, - { code:0x102A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x102A - ,simpleLowerCaseMapping:0x102A - ,simpleTitleCaseMapping:0x102A - }, - { code:0x102C - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x102C - ,simpleLowerCaseMapping:0x102C - ,simpleTitleCaseMapping:0x102C - }, - { code:0x102D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x102D - ,simpleLowerCaseMapping:0x102D - ,simpleTitleCaseMapping:0x102D - }, - { code:0x102E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x102E - ,simpleLowerCaseMapping:0x102E - ,simpleTitleCaseMapping:0x102E - }, - { code:0x102F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x102F - ,simpleLowerCaseMapping:0x102F - ,simpleTitleCaseMapping:0x102F - }, - { code:0x1030 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1030 - ,simpleLowerCaseMapping:0x1030 - ,simpleTitleCaseMapping:0x1030 - }, - { code:0x1031 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1031 - ,simpleLowerCaseMapping:0x1031 - ,simpleTitleCaseMapping:0x1031 - }, - { code:0x1032 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1032 - ,simpleLowerCaseMapping:0x1032 - ,simpleTitleCaseMapping:0x1032 - }, - { code:0x1036 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1036 - ,simpleLowerCaseMapping:0x1036 - ,simpleTitleCaseMapping:0x1036 - }, - { code:0x1037 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1037 - ,simpleLowerCaseMapping:0x1037 - ,simpleTitleCaseMapping:0x1037 - }, - { code:0x1038 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1038 - ,simpleLowerCaseMapping:0x1038 - ,simpleTitleCaseMapping:0x1038 - }, - { code:0x1039 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1039 - ,simpleLowerCaseMapping:0x1039 - ,simpleTitleCaseMapping:0x1039 - }, - { code:0x1040 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1040 - ,simpleLowerCaseMapping:0x1040 - ,simpleTitleCaseMapping:0x1040 - }, - { code:0x1041 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1041 - ,simpleLowerCaseMapping:0x1041 - ,simpleTitleCaseMapping:0x1041 - }, - { code:0x1042 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1042 - ,simpleLowerCaseMapping:0x1042 - ,simpleTitleCaseMapping:0x1042 - }, - { code:0x1043 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1043 - ,simpleLowerCaseMapping:0x1043 - ,simpleTitleCaseMapping:0x1043 - }, - { code:0x1044 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1044 - ,simpleLowerCaseMapping:0x1044 - ,simpleTitleCaseMapping:0x1044 - }, - { code:0x1045 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1045 - ,simpleLowerCaseMapping:0x1045 - ,simpleTitleCaseMapping:0x1045 - }, - { code:0x1046 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1046 - ,simpleLowerCaseMapping:0x1046 - ,simpleTitleCaseMapping:0x1046 - }, - { code:0x1047 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1047 - ,simpleLowerCaseMapping:0x1047 - ,simpleTitleCaseMapping:0x1047 - }, - { code:0x1048 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1048 - ,simpleLowerCaseMapping:0x1048 - ,simpleTitleCaseMapping:0x1048 - }, - { code:0x1049 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1049 - ,simpleLowerCaseMapping:0x1049 - ,simpleTitleCaseMapping:0x1049 - }, - { code:0x104A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104A - ,simpleLowerCaseMapping:0x104A - ,simpleTitleCaseMapping:0x104A - }, - { code:0x104B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104B - ,simpleLowerCaseMapping:0x104B - ,simpleTitleCaseMapping:0x104B - }, - { code:0x104C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104C - ,simpleLowerCaseMapping:0x104C - ,simpleTitleCaseMapping:0x104C - }, - { code:0x104D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104D - ,simpleLowerCaseMapping:0x104D - ,simpleTitleCaseMapping:0x104D - }, - { code:0x104E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104E - ,simpleLowerCaseMapping:0x104E - ,simpleTitleCaseMapping:0x104E - }, - { code:0x104F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x104F - ,simpleLowerCaseMapping:0x104F - ,simpleTitleCaseMapping:0x104F - }, - { code:0x1050 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1050 - ,simpleLowerCaseMapping:0x1050 - ,simpleTitleCaseMapping:0x1050 - }, - { code:0x1051 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1051 - ,simpleLowerCaseMapping:0x1051 - ,simpleTitleCaseMapping:0x1051 - }, - { code:0x1052 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1052 - ,simpleLowerCaseMapping:0x1052 - ,simpleTitleCaseMapping:0x1052 - }, - { code:0x1053 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1053 - ,simpleLowerCaseMapping:0x1053 - ,simpleTitleCaseMapping:0x1053 - }, - { code:0x1054 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1054 - ,simpleLowerCaseMapping:0x1054 - ,simpleTitleCaseMapping:0x1054 - }, - { code:0x1055 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1055 - ,simpleLowerCaseMapping:0x1055 - ,simpleTitleCaseMapping:0x1055 - }, - { code:0x1056 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1056 - ,simpleLowerCaseMapping:0x1056 - ,simpleTitleCaseMapping:0x1056 - }, - { code:0x1057 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1057 - ,simpleLowerCaseMapping:0x1057 - ,simpleTitleCaseMapping:0x1057 - }, - { code:0x1058 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1058 - ,simpleLowerCaseMapping:0x1058 - ,simpleTitleCaseMapping:0x1058 - }, - { code:0x1059 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1059 - ,simpleLowerCaseMapping:0x1059 - ,simpleTitleCaseMapping:0x1059 - }, - { code:0x10A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A0 - ,simpleLowerCaseMapping:0x2D00 - ,simpleTitleCaseMapping:0x10A0 - }, - { code:0x10A1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A1 - ,simpleLowerCaseMapping:0x2D01 - ,simpleTitleCaseMapping:0x10A1 - }, - { code:0x10A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A2 - ,simpleLowerCaseMapping:0x2D02 - ,simpleTitleCaseMapping:0x10A2 - }, - { code:0x10A3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A3 - ,simpleLowerCaseMapping:0x2D03 - ,simpleTitleCaseMapping:0x10A3 - }, - { code:0x10A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A4 - ,simpleLowerCaseMapping:0x2D04 - ,simpleTitleCaseMapping:0x10A4 - }, - { code:0x10A5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A5 - ,simpleLowerCaseMapping:0x2D05 - ,simpleTitleCaseMapping:0x10A5 - }, - { code:0x10A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A6 - ,simpleLowerCaseMapping:0x2D06 - ,simpleTitleCaseMapping:0x10A6 - }, - { code:0x10A7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A7 - ,simpleLowerCaseMapping:0x2D07 - ,simpleTitleCaseMapping:0x10A7 - }, - { code:0x10A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A8 - ,simpleLowerCaseMapping:0x2D08 - ,simpleTitleCaseMapping:0x10A8 - }, - { code:0x10A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10A9 - ,simpleLowerCaseMapping:0x2D09 - ,simpleTitleCaseMapping:0x10A9 - }, - { code:0x10AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AA - ,simpleLowerCaseMapping:0x2D0A - ,simpleTitleCaseMapping:0x10AA - }, - { code:0x10AB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AB - ,simpleLowerCaseMapping:0x2D0B - ,simpleTitleCaseMapping:0x10AB - }, - { code:0x10AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AC - ,simpleLowerCaseMapping:0x2D0C - ,simpleTitleCaseMapping:0x10AC - }, - { code:0x10AD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AD - ,simpleLowerCaseMapping:0x2D0D - ,simpleTitleCaseMapping:0x10AD - }, - { code:0x10AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AE - ,simpleLowerCaseMapping:0x2D0E - ,simpleTitleCaseMapping:0x10AE - }, - { code:0x10AF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10AF - ,simpleLowerCaseMapping:0x2D0F - ,simpleTitleCaseMapping:0x10AF - }, - { code:0x10B0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B0 - ,simpleLowerCaseMapping:0x2D10 - ,simpleTitleCaseMapping:0x10B0 - }, - { code:0x10B1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B1 - ,simpleLowerCaseMapping:0x2D11 - ,simpleTitleCaseMapping:0x10B1 - }, - { code:0x10B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B2 - ,simpleLowerCaseMapping:0x2D12 - ,simpleTitleCaseMapping:0x10B2 - }, - { code:0x10B3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B3 - ,simpleLowerCaseMapping:0x2D13 - ,simpleTitleCaseMapping:0x10B3 - }, - { code:0x10B4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B4 - ,simpleLowerCaseMapping:0x2D14 - ,simpleTitleCaseMapping:0x10B4 - }, - { code:0x10B5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B5 - ,simpleLowerCaseMapping:0x2D15 - ,simpleTitleCaseMapping:0x10B5 - }, - { code:0x10B6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B6 - ,simpleLowerCaseMapping:0x2D16 - ,simpleTitleCaseMapping:0x10B6 - }, - { code:0x10B7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B7 - ,simpleLowerCaseMapping:0x2D17 - ,simpleTitleCaseMapping:0x10B7 - }, - { code:0x10B8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B8 - ,simpleLowerCaseMapping:0x2D18 - ,simpleTitleCaseMapping:0x10B8 - }, - { code:0x10B9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10B9 - ,simpleLowerCaseMapping:0x2D19 - ,simpleTitleCaseMapping:0x10B9 - }, - { code:0x10BA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BA - ,simpleLowerCaseMapping:0x2D1A - ,simpleTitleCaseMapping:0x10BA - }, - { code:0x10BB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BB - ,simpleLowerCaseMapping:0x2D1B - ,simpleTitleCaseMapping:0x10BB - }, - { code:0x10BC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BC - ,simpleLowerCaseMapping:0x2D1C - ,simpleTitleCaseMapping:0x10BC - }, - { code:0x10BD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BD - ,simpleLowerCaseMapping:0x2D1D - ,simpleTitleCaseMapping:0x10BD - }, - { code:0x10BE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BE - ,simpleLowerCaseMapping:0x2D1E - ,simpleTitleCaseMapping:0x10BE - }, - { code:0x10BF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10BF - ,simpleLowerCaseMapping:0x2D1F - ,simpleTitleCaseMapping:0x10BF - }, - { code:0x10C0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C0 - ,simpleLowerCaseMapping:0x2D20 - ,simpleTitleCaseMapping:0x10C0 - }, - { code:0x10C1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C1 - ,simpleLowerCaseMapping:0x2D21 - ,simpleTitleCaseMapping:0x10C1 - }, - { code:0x10C2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C2 - ,simpleLowerCaseMapping:0x2D22 - ,simpleTitleCaseMapping:0x10C2 - }, - { code:0x10C3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C3 - ,simpleLowerCaseMapping:0x2D23 - ,simpleTitleCaseMapping:0x10C3 - }, - { code:0x10C4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C4 - ,simpleLowerCaseMapping:0x2D24 - ,simpleTitleCaseMapping:0x10C4 - }, - { code:0x10C5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10C5 - ,simpleLowerCaseMapping:0x2D25 - ,simpleTitleCaseMapping:0x10C5 - }, - { code:0x10D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D0 - ,simpleLowerCaseMapping:0x10D0 - ,simpleTitleCaseMapping:0x10D0 - }, - { code:0x10D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D1 - ,simpleLowerCaseMapping:0x10D1 - ,simpleTitleCaseMapping:0x10D1 - }, - { code:0x10D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D2 - ,simpleLowerCaseMapping:0x10D2 - ,simpleTitleCaseMapping:0x10D2 - }, - { code:0x10D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D3 - ,simpleLowerCaseMapping:0x10D3 - ,simpleTitleCaseMapping:0x10D3 - }, - { code:0x10D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D4 - ,simpleLowerCaseMapping:0x10D4 - ,simpleTitleCaseMapping:0x10D4 - }, - { code:0x10D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D5 - ,simpleLowerCaseMapping:0x10D5 - ,simpleTitleCaseMapping:0x10D5 - }, - { code:0x10D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D6 - ,simpleLowerCaseMapping:0x10D6 - ,simpleTitleCaseMapping:0x10D6 - }, - { code:0x10D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D7 - ,simpleLowerCaseMapping:0x10D7 - ,simpleTitleCaseMapping:0x10D7 - }, - { code:0x10D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D8 - ,simpleLowerCaseMapping:0x10D8 - ,simpleTitleCaseMapping:0x10D8 - }, - { code:0x10D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10D9 - ,simpleLowerCaseMapping:0x10D9 - ,simpleTitleCaseMapping:0x10D9 - }, - { code:0x10DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DA - ,simpleLowerCaseMapping:0x10DA - ,simpleTitleCaseMapping:0x10DA - }, - { code:0x10DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DB - ,simpleLowerCaseMapping:0x10DB - ,simpleTitleCaseMapping:0x10DB - }, - { code:0x10DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DC - ,simpleLowerCaseMapping:0x10DC - ,simpleTitleCaseMapping:0x10DC - }, - { code:0x10DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DD - ,simpleLowerCaseMapping:0x10DD - ,simpleTitleCaseMapping:0x10DD - }, - { code:0x10DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DE - ,simpleLowerCaseMapping:0x10DE - ,simpleTitleCaseMapping:0x10DE - }, - { code:0x10DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10DF - ,simpleLowerCaseMapping:0x10DF - ,simpleTitleCaseMapping:0x10DF - }, - { code:0x10E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E0 - ,simpleLowerCaseMapping:0x10E0 - ,simpleTitleCaseMapping:0x10E0 - }, - { code:0x10E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E1 - ,simpleLowerCaseMapping:0x10E1 - ,simpleTitleCaseMapping:0x10E1 - }, - { code:0x10E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E2 - ,simpleLowerCaseMapping:0x10E2 - ,simpleTitleCaseMapping:0x10E2 - }, - { code:0x10E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E3 - ,simpleLowerCaseMapping:0x10E3 - ,simpleTitleCaseMapping:0x10E3 - }, - { code:0x10E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E4 - ,simpleLowerCaseMapping:0x10E4 - ,simpleTitleCaseMapping:0x10E4 - }, - { code:0x10E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E5 - ,simpleLowerCaseMapping:0x10E5 - ,simpleTitleCaseMapping:0x10E5 - }, - { code:0x10E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E6 - ,simpleLowerCaseMapping:0x10E6 - ,simpleTitleCaseMapping:0x10E6 - }, - { code:0x10E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E7 - ,simpleLowerCaseMapping:0x10E7 - ,simpleTitleCaseMapping:0x10E7 - }, - { code:0x10E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E8 - ,simpleLowerCaseMapping:0x10E8 - ,simpleTitleCaseMapping:0x10E8 - }, - { code:0x10E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10E9 - ,simpleLowerCaseMapping:0x10E9 - ,simpleTitleCaseMapping:0x10E9 - }, - { code:0x10EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10EA - ,simpleLowerCaseMapping:0x10EA - ,simpleTitleCaseMapping:0x10EA - }, - { code:0x10EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10EB - ,simpleLowerCaseMapping:0x10EB - ,simpleTitleCaseMapping:0x10EB - }, - { code:0x10EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10EC - ,simpleLowerCaseMapping:0x10EC - ,simpleTitleCaseMapping:0x10EC - }, - { code:0x10ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10ED - ,simpleLowerCaseMapping:0x10ED - ,simpleTitleCaseMapping:0x10ED - }, - { code:0x10EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10EE - ,simpleLowerCaseMapping:0x10EE - ,simpleTitleCaseMapping:0x10EE - }, - { code:0x10EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10EF - ,simpleLowerCaseMapping:0x10EF - ,simpleTitleCaseMapping:0x10EF - }, - { code:0x10F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F0 - ,simpleLowerCaseMapping:0x10F0 - ,simpleTitleCaseMapping:0x10F0 - }, - { code:0x10F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F1 - ,simpleLowerCaseMapping:0x10F1 - ,simpleTitleCaseMapping:0x10F1 - }, - { code:0x10F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F2 - ,simpleLowerCaseMapping:0x10F2 - ,simpleTitleCaseMapping:0x10F2 - }, - { code:0x10F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F3 - ,simpleLowerCaseMapping:0x10F3 - ,simpleTitleCaseMapping:0x10F3 - }, - { code:0x10F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F4 - ,simpleLowerCaseMapping:0x10F4 - ,simpleTitleCaseMapping:0x10F4 - }, - { code:0x10F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F5 - ,simpleLowerCaseMapping:0x10F5 - ,simpleTitleCaseMapping:0x10F5 - }, - { code:0x10F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F6 - ,simpleLowerCaseMapping:0x10F6 - ,simpleTitleCaseMapping:0x10F6 - }, - { code:0x10F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F7 - ,simpleLowerCaseMapping:0x10F7 - ,simpleTitleCaseMapping:0x10F7 - }, - { code:0x10F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F8 - ,simpleLowerCaseMapping:0x10F8 - ,simpleTitleCaseMapping:0x10F8 - }, - { code:0x10F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10F9 - ,simpleLowerCaseMapping:0x10F9 - ,simpleTitleCaseMapping:0x10F9 - }, - { code:0x10FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10FA - ,simpleLowerCaseMapping:0x10FA - ,simpleTitleCaseMapping:0x10FA - }, - { code:0x10FB - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10FB - ,simpleLowerCaseMapping:0x10FB - ,simpleTitleCaseMapping:0x10FB - }, - { code:0x10FC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x10FC - ,simpleLowerCaseMapping:0x10FC - ,simpleTitleCaseMapping:0x10FC - }, - { code:0x1100 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1100 - ,simpleLowerCaseMapping:0x1100 - ,simpleTitleCaseMapping:0x1100 - }, - { code:0x1101 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1101 - ,simpleLowerCaseMapping:0x1101 - ,simpleTitleCaseMapping:0x1101 - }, - { code:0x1102 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1102 - ,simpleLowerCaseMapping:0x1102 - ,simpleTitleCaseMapping:0x1102 - }, - { code:0x1103 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1103 - ,simpleLowerCaseMapping:0x1103 - ,simpleTitleCaseMapping:0x1103 - }, - { code:0x1104 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1104 - ,simpleLowerCaseMapping:0x1104 - ,simpleTitleCaseMapping:0x1104 - }, - { code:0x1105 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1105 - ,simpleLowerCaseMapping:0x1105 - ,simpleTitleCaseMapping:0x1105 - }, - { code:0x1106 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1106 - ,simpleLowerCaseMapping:0x1106 - ,simpleTitleCaseMapping:0x1106 - }, - { code:0x1107 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1107 - ,simpleLowerCaseMapping:0x1107 - ,simpleTitleCaseMapping:0x1107 - }, - { code:0x1108 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1108 - ,simpleLowerCaseMapping:0x1108 - ,simpleTitleCaseMapping:0x1108 - }, - { code:0x1109 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1109 - ,simpleLowerCaseMapping:0x1109 - ,simpleTitleCaseMapping:0x1109 - }, - { code:0x110A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110A - ,simpleLowerCaseMapping:0x110A - ,simpleTitleCaseMapping:0x110A - }, - { code:0x110B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110B - ,simpleLowerCaseMapping:0x110B - ,simpleTitleCaseMapping:0x110B - }, - { code:0x110C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110C - ,simpleLowerCaseMapping:0x110C - ,simpleTitleCaseMapping:0x110C - }, - { code:0x110D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110D - ,simpleLowerCaseMapping:0x110D - ,simpleTitleCaseMapping:0x110D - }, - { code:0x110E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110E - ,simpleLowerCaseMapping:0x110E - ,simpleTitleCaseMapping:0x110E - }, - { code:0x110F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x110F - ,simpleLowerCaseMapping:0x110F - ,simpleTitleCaseMapping:0x110F - }, - { code:0x1110 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1110 - ,simpleLowerCaseMapping:0x1110 - ,simpleTitleCaseMapping:0x1110 - }, - { code:0x1111 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1111 - ,simpleLowerCaseMapping:0x1111 - ,simpleTitleCaseMapping:0x1111 - }, - { code:0x1112 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1112 - ,simpleLowerCaseMapping:0x1112 - ,simpleTitleCaseMapping:0x1112 - }, - { code:0x1113 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1113 - ,simpleLowerCaseMapping:0x1113 - ,simpleTitleCaseMapping:0x1113 - }, - { code:0x1114 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1114 - ,simpleLowerCaseMapping:0x1114 - ,simpleTitleCaseMapping:0x1114 - }, - { code:0x1115 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1115 - ,simpleLowerCaseMapping:0x1115 - ,simpleTitleCaseMapping:0x1115 - }, - { code:0x1116 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1116 - ,simpleLowerCaseMapping:0x1116 - ,simpleTitleCaseMapping:0x1116 - }, - { code:0x1117 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1117 - ,simpleLowerCaseMapping:0x1117 - ,simpleTitleCaseMapping:0x1117 - }, - { code:0x1118 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1118 - ,simpleLowerCaseMapping:0x1118 - ,simpleTitleCaseMapping:0x1118 - }, - { code:0x1119 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1119 - ,simpleLowerCaseMapping:0x1119 - ,simpleTitleCaseMapping:0x1119 - }, - { code:0x111A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111A - ,simpleLowerCaseMapping:0x111A - ,simpleTitleCaseMapping:0x111A - }, - { code:0x111B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111B - ,simpleLowerCaseMapping:0x111B - ,simpleTitleCaseMapping:0x111B - }, - { code:0x111C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111C - ,simpleLowerCaseMapping:0x111C - ,simpleTitleCaseMapping:0x111C - }, - { code:0x111D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111D - ,simpleLowerCaseMapping:0x111D - ,simpleTitleCaseMapping:0x111D - }, - { code:0x111E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111E - ,simpleLowerCaseMapping:0x111E - ,simpleTitleCaseMapping:0x111E - }, - { code:0x111F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x111F - ,simpleLowerCaseMapping:0x111F - ,simpleTitleCaseMapping:0x111F - }, - { code:0x1120 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1120 - ,simpleLowerCaseMapping:0x1120 - ,simpleTitleCaseMapping:0x1120 - }, - { code:0x1121 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1121 - ,simpleLowerCaseMapping:0x1121 - ,simpleTitleCaseMapping:0x1121 - }, - { code:0x1122 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1122 - ,simpleLowerCaseMapping:0x1122 - ,simpleTitleCaseMapping:0x1122 - }, - { code:0x1123 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1123 - ,simpleLowerCaseMapping:0x1123 - ,simpleTitleCaseMapping:0x1123 - }, - { code:0x1124 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1124 - ,simpleLowerCaseMapping:0x1124 - ,simpleTitleCaseMapping:0x1124 - }, - { code:0x1125 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1125 - ,simpleLowerCaseMapping:0x1125 - ,simpleTitleCaseMapping:0x1125 - }, - { code:0x1126 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1126 - ,simpleLowerCaseMapping:0x1126 - ,simpleTitleCaseMapping:0x1126 - }, - { code:0x1127 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1127 - ,simpleLowerCaseMapping:0x1127 - ,simpleTitleCaseMapping:0x1127 - }, - { code:0x1128 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1128 - ,simpleLowerCaseMapping:0x1128 - ,simpleTitleCaseMapping:0x1128 - }, - { code:0x1129 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1129 - ,simpleLowerCaseMapping:0x1129 - ,simpleTitleCaseMapping:0x1129 - }, - { code:0x112A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112A - ,simpleLowerCaseMapping:0x112A - ,simpleTitleCaseMapping:0x112A - }, - { code:0x112B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112B - ,simpleLowerCaseMapping:0x112B - ,simpleTitleCaseMapping:0x112B - }, - { code:0x112C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112C - ,simpleLowerCaseMapping:0x112C - ,simpleTitleCaseMapping:0x112C - }, - { code:0x112D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112D - ,simpleLowerCaseMapping:0x112D - ,simpleTitleCaseMapping:0x112D - }, - { code:0x112E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112E - ,simpleLowerCaseMapping:0x112E - ,simpleTitleCaseMapping:0x112E - }, - { code:0x112F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x112F - ,simpleLowerCaseMapping:0x112F - ,simpleTitleCaseMapping:0x112F - }, - { code:0x1130 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1130 - ,simpleLowerCaseMapping:0x1130 - ,simpleTitleCaseMapping:0x1130 - }, - { code:0x1131 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1131 - ,simpleLowerCaseMapping:0x1131 - ,simpleTitleCaseMapping:0x1131 - }, - { code:0x1132 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1132 - ,simpleLowerCaseMapping:0x1132 - ,simpleTitleCaseMapping:0x1132 - }, - { code:0x1133 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1133 - ,simpleLowerCaseMapping:0x1133 - ,simpleTitleCaseMapping:0x1133 - }, - { code:0x1134 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1134 - ,simpleLowerCaseMapping:0x1134 - ,simpleTitleCaseMapping:0x1134 - }, - { code:0x1135 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1135 - ,simpleLowerCaseMapping:0x1135 - ,simpleTitleCaseMapping:0x1135 - }, - { code:0x1136 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1136 - ,simpleLowerCaseMapping:0x1136 - ,simpleTitleCaseMapping:0x1136 - }, - { code:0x1137 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1137 - ,simpleLowerCaseMapping:0x1137 - ,simpleTitleCaseMapping:0x1137 - }, - { code:0x1138 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1138 - ,simpleLowerCaseMapping:0x1138 - ,simpleTitleCaseMapping:0x1138 - }, - { code:0x1139 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1139 - ,simpleLowerCaseMapping:0x1139 - ,simpleTitleCaseMapping:0x1139 - }, - { code:0x113A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113A - ,simpleLowerCaseMapping:0x113A - ,simpleTitleCaseMapping:0x113A - }, - { code:0x113B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113B - ,simpleLowerCaseMapping:0x113B - ,simpleTitleCaseMapping:0x113B - }, - { code:0x113C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113C - ,simpleLowerCaseMapping:0x113C - ,simpleTitleCaseMapping:0x113C - }, - { code:0x113D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113D - ,simpleLowerCaseMapping:0x113D - ,simpleTitleCaseMapping:0x113D - }, - { code:0x113E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113E - ,simpleLowerCaseMapping:0x113E - ,simpleTitleCaseMapping:0x113E - }, - { code:0x113F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x113F - ,simpleLowerCaseMapping:0x113F - ,simpleTitleCaseMapping:0x113F - }, - { code:0x1140 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1140 - ,simpleLowerCaseMapping:0x1140 - ,simpleTitleCaseMapping:0x1140 - }, - { code:0x1141 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1141 - ,simpleLowerCaseMapping:0x1141 - ,simpleTitleCaseMapping:0x1141 - }, - { code:0x1142 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1142 - ,simpleLowerCaseMapping:0x1142 - ,simpleTitleCaseMapping:0x1142 - }, - { code:0x1143 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1143 - ,simpleLowerCaseMapping:0x1143 - ,simpleTitleCaseMapping:0x1143 - }, - { code:0x1144 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1144 - ,simpleLowerCaseMapping:0x1144 - ,simpleTitleCaseMapping:0x1144 - }, - { code:0x1145 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1145 - ,simpleLowerCaseMapping:0x1145 - ,simpleTitleCaseMapping:0x1145 - }, - { code:0x1146 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1146 - ,simpleLowerCaseMapping:0x1146 - ,simpleTitleCaseMapping:0x1146 - }, - { code:0x1147 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1147 - ,simpleLowerCaseMapping:0x1147 - ,simpleTitleCaseMapping:0x1147 - }, - { code:0x1148 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1148 - ,simpleLowerCaseMapping:0x1148 - ,simpleTitleCaseMapping:0x1148 - }, - { code:0x1149 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1149 - ,simpleLowerCaseMapping:0x1149 - ,simpleTitleCaseMapping:0x1149 - }, - { code:0x114A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114A - ,simpleLowerCaseMapping:0x114A - ,simpleTitleCaseMapping:0x114A - }, - { code:0x114B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114B - ,simpleLowerCaseMapping:0x114B - ,simpleTitleCaseMapping:0x114B - }, - { code:0x114C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114C - ,simpleLowerCaseMapping:0x114C - ,simpleTitleCaseMapping:0x114C - }, - { code:0x114D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114D - ,simpleLowerCaseMapping:0x114D - ,simpleTitleCaseMapping:0x114D - }, - { code:0x114E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114E - ,simpleLowerCaseMapping:0x114E - ,simpleTitleCaseMapping:0x114E - }, - { code:0x114F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x114F - ,simpleLowerCaseMapping:0x114F - ,simpleTitleCaseMapping:0x114F - }, - { code:0x1150 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1150 - ,simpleLowerCaseMapping:0x1150 - ,simpleTitleCaseMapping:0x1150 - }, - { code:0x1151 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1151 - ,simpleLowerCaseMapping:0x1151 - ,simpleTitleCaseMapping:0x1151 - }, - { code:0x1152 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1152 - ,simpleLowerCaseMapping:0x1152 - ,simpleTitleCaseMapping:0x1152 - }, - { code:0x1153 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1153 - ,simpleLowerCaseMapping:0x1153 - ,simpleTitleCaseMapping:0x1153 - }, - { code:0x1154 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1154 - ,simpleLowerCaseMapping:0x1154 - ,simpleTitleCaseMapping:0x1154 - }, - { code:0x1155 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1155 - ,simpleLowerCaseMapping:0x1155 - ,simpleTitleCaseMapping:0x1155 - }, - { code:0x1156 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1156 - ,simpleLowerCaseMapping:0x1156 - ,simpleTitleCaseMapping:0x1156 - }, - { code:0x1157 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1157 - ,simpleLowerCaseMapping:0x1157 - ,simpleTitleCaseMapping:0x1157 - }, - { code:0x1158 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1158 - ,simpleLowerCaseMapping:0x1158 - ,simpleTitleCaseMapping:0x1158 - }, - { code:0x1159 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1159 - ,simpleLowerCaseMapping:0x1159 - ,simpleTitleCaseMapping:0x1159 - }, - { code:0x115F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x115F - ,simpleLowerCaseMapping:0x115F - ,simpleTitleCaseMapping:0x115F - }, - { code:0x1160 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1160 - ,simpleLowerCaseMapping:0x1160 - ,simpleTitleCaseMapping:0x1160 - }, - { code:0x1161 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1161 - ,simpleLowerCaseMapping:0x1161 - ,simpleTitleCaseMapping:0x1161 - }, - { code:0x1162 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1162 - ,simpleLowerCaseMapping:0x1162 - ,simpleTitleCaseMapping:0x1162 - }, - { code:0x1163 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1163 - ,simpleLowerCaseMapping:0x1163 - ,simpleTitleCaseMapping:0x1163 - }, - { code:0x1164 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1164 - ,simpleLowerCaseMapping:0x1164 - ,simpleTitleCaseMapping:0x1164 - }, - { code:0x1165 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1165 - ,simpleLowerCaseMapping:0x1165 - ,simpleTitleCaseMapping:0x1165 - }, - { code:0x1166 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1166 - ,simpleLowerCaseMapping:0x1166 - ,simpleTitleCaseMapping:0x1166 - }, - { code:0x1167 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1167 - ,simpleLowerCaseMapping:0x1167 - ,simpleTitleCaseMapping:0x1167 - }, - { code:0x1168 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1168 - ,simpleLowerCaseMapping:0x1168 - ,simpleTitleCaseMapping:0x1168 - }, - { code:0x1169 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1169 - ,simpleLowerCaseMapping:0x1169 - ,simpleTitleCaseMapping:0x1169 - }, - { code:0x116A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116A - ,simpleLowerCaseMapping:0x116A - ,simpleTitleCaseMapping:0x116A - }, - { code:0x116B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116B - ,simpleLowerCaseMapping:0x116B - ,simpleTitleCaseMapping:0x116B - }, - { code:0x116C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116C - ,simpleLowerCaseMapping:0x116C - ,simpleTitleCaseMapping:0x116C - }, - { code:0x116D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116D - ,simpleLowerCaseMapping:0x116D - ,simpleTitleCaseMapping:0x116D - }, - { code:0x116E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116E - ,simpleLowerCaseMapping:0x116E - ,simpleTitleCaseMapping:0x116E - }, - { code:0x116F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x116F - ,simpleLowerCaseMapping:0x116F - ,simpleTitleCaseMapping:0x116F - }, - { code:0x1170 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1170 - ,simpleLowerCaseMapping:0x1170 - ,simpleTitleCaseMapping:0x1170 - }, - { code:0x1171 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1171 - ,simpleLowerCaseMapping:0x1171 - ,simpleTitleCaseMapping:0x1171 - }, - { code:0x1172 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1172 - ,simpleLowerCaseMapping:0x1172 - ,simpleTitleCaseMapping:0x1172 - }, - { code:0x1173 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1173 - ,simpleLowerCaseMapping:0x1173 - ,simpleTitleCaseMapping:0x1173 - }, - { code:0x1174 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1174 - ,simpleLowerCaseMapping:0x1174 - ,simpleTitleCaseMapping:0x1174 - }, - { code:0x1175 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1175 - ,simpleLowerCaseMapping:0x1175 - ,simpleTitleCaseMapping:0x1175 - }, - { code:0x1176 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1176 - ,simpleLowerCaseMapping:0x1176 - ,simpleTitleCaseMapping:0x1176 - }, - { code:0x1177 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1177 - ,simpleLowerCaseMapping:0x1177 - ,simpleTitleCaseMapping:0x1177 - }, - { code:0x1178 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1178 - ,simpleLowerCaseMapping:0x1178 - ,simpleTitleCaseMapping:0x1178 - }, - { code:0x1179 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1179 - ,simpleLowerCaseMapping:0x1179 - ,simpleTitleCaseMapping:0x1179 - }, - { code:0x117A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117A - ,simpleLowerCaseMapping:0x117A - ,simpleTitleCaseMapping:0x117A - }, - { code:0x117B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117B - ,simpleLowerCaseMapping:0x117B - ,simpleTitleCaseMapping:0x117B - }, - { code:0x117C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117C - ,simpleLowerCaseMapping:0x117C - ,simpleTitleCaseMapping:0x117C - }, - { code:0x117D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117D - ,simpleLowerCaseMapping:0x117D - ,simpleTitleCaseMapping:0x117D - }, - { code:0x117E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117E - ,simpleLowerCaseMapping:0x117E - ,simpleTitleCaseMapping:0x117E - }, - { code:0x117F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x117F - ,simpleLowerCaseMapping:0x117F - ,simpleTitleCaseMapping:0x117F - }, - { code:0x1180 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1180 - ,simpleLowerCaseMapping:0x1180 - ,simpleTitleCaseMapping:0x1180 - }, - { code:0x1181 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1181 - ,simpleLowerCaseMapping:0x1181 - ,simpleTitleCaseMapping:0x1181 - }, - { code:0x1182 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1182 - ,simpleLowerCaseMapping:0x1182 - ,simpleTitleCaseMapping:0x1182 - }, - { code:0x1183 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1183 - ,simpleLowerCaseMapping:0x1183 - ,simpleTitleCaseMapping:0x1183 - }, - { code:0x1184 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1184 - ,simpleLowerCaseMapping:0x1184 - ,simpleTitleCaseMapping:0x1184 - }, - { code:0x1185 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1185 - ,simpleLowerCaseMapping:0x1185 - ,simpleTitleCaseMapping:0x1185 - }, - { code:0x1186 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1186 - ,simpleLowerCaseMapping:0x1186 - ,simpleTitleCaseMapping:0x1186 - }, - { code:0x1187 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1187 - ,simpleLowerCaseMapping:0x1187 - ,simpleTitleCaseMapping:0x1187 - }, - { code:0x1188 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1188 - ,simpleLowerCaseMapping:0x1188 - ,simpleTitleCaseMapping:0x1188 - }, - { code:0x1189 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1189 - ,simpleLowerCaseMapping:0x1189 - ,simpleTitleCaseMapping:0x1189 - }, - { code:0x118A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118A - ,simpleLowerCaseMapping:0x118A - ,simpleTitleCaseMapping:0x118A - }, - { code:0x118B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118B - ,simpleLowerCaseMapping:0x118B - ,simpleTitleCaseMapping:0x118B - }, - { code:0x118C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118C - ,simpleLowerCaseMapping:0x118C - ,simpleTitleCaseMapping:0x118C - }, - { code:0x118D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118D - ,simpleLowerCaseMapping:0x118D - ,simpleTitleCaseMapping:0x118D - }, - { code:0x118E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118E - ,simpleLowerCaseMapping:0x118E - ,simpleTitleCaseMapping:0x118E - }, - { code:0x118F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x118F - ,simpleLowerCaseMapping:0x118F - ,simpleTitleCaseMapping:0x118F - }, - { code:0x1190 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1190 - ,simpleLowerCaseMapping:0x1190 - ,simpleTitleCaseMapping:0x1190 - }, - { code:0x1191 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1191 - ,simpleLowerCaseMapping:0x1191 - ,simpleTitleCaseMapping:0x1191 - }, - { code:0x1192 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1192 - ,simpleLowerCaseMapping:0x1192 - ,simpleTitleCaseMapping:0x1192 - }, - { code:0x1193 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1193 - ,simpleLowerCaseMapping:0x1193 - ,simpleTitleCaseMapping:0x1193 - }, - { code:0x1194 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1194 - ,simpleLowerCaseMapping:0x1194 - ,simpleTitleCaseMapping:0x1194 - }, - { code:0x1195 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1195 - ,simpleLowerCaseMapping:0x1195 - ,simpleTitleCaseMapping:0x1195 - }, - { code:0x1196 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1196 - ,simpleLowerCaseMapping:0x1196 - ,simpleTitleCaseMapping:0x1196 - }, - { code:0x1197 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1197 - ,simpleLowerCaseMapping:0x1197 - ,simpleTitleCaseMapping:0x1197 - }, - { code:0x1198 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1198 - ,simpleLowerCaseMapping:0x1198 - ,simpleTitleCaseMapping:0x1198 - }, - { code:0x1199 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1199 - ,simpleLowerCaseMapping:0x1199 - ,simpleTitleCaseMapping:0x1199 - }, - { code:0x119A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119A - ,simpleLowerCaseMapping:0x119A - ,simpleTitleCaseMapping:0x119A - }, - { code:0x119B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119B - ,simpleLowerCaseMapping:0x119B - ,simpleTitleCaseMapping:0x119B - }, - { code:0x119C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119C - ,simpleLowerCaseMapping:0x119C - ,simpleTitleCaseMapping:0x119C - }, - { code:0x119D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119D - ,simpleLowerCaseMapping:0x119D - ,simpleTitleCaseMapping:0x119D - }, - { code:0x119E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119E - ,simpleLowerCaseMapping:0x119E - ,simpleTitleCaseMapping:0x119E - }, - { code:0x119F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x119F - ,simpleLowerCaseMapping:0x119F - ,simpleTitleCaseMapping:0x119F - }, - { code:0x11A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11A0 - ,simpleLowerCaseMapping:0x11A0 - ,simpleTitleCaseMapping:0x11A0 - }, - { code:0x11A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11A1 - ,simpleLowerCaseMapping:0x11A1 - ,simpleTitleCaseMapping:0x11A1 - }, - { code:0x11A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11A2 - ,simpleLowerCaseMapping:0x11A2 - ,simpleTitleCaseMapping:0x11A2 - }, - { code:0x11A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11A8 - ,simpleLowerCaseMapping:0x11A8 - ,simpleTitleCaseMapping:0x11A8 - }, - { code:0x11A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11A9 - ,simpleLowerCaseMapping:0x11A9 - ,simpleTitleCaseMapping:0x11A9 - }, - { code:0x11AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AA - ,simpleLowerCaseMapping:0x11AA - ,simpleTitleCaseMapping:0x11AA - }, - { code:0x11AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AB - ,simpleLowerCaseMapping:0x11AB - ,simpleTitleCaseMapping:0x11AB - }, - { code:0x11AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AC - ,simpleLowerCaseMapping:0x11AC - ,simpleTitleCaseMapping:0x11AC - }, - { code:0x11AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AD - ,simpleLowerCaseMapping:0x11AD - ,simpleTitleCaseMapping:0x11AD - }, - { code:0x11AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AE - ,simpleLowerCaseMapping:0x11AE - ,simpleTitleCaseMapping:0x11AE - }, - { code:0x11AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11AF - ,simpleLowerCaseMapping:0x11AF - ,simpleTitleCaseMapping:0x11AF - }, - { code:0x11B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B0 - ,simpleLowerCaseMapping:0x11B0 - ,simpleTitleCaseMapping:0x11B0 - }, - { code:0x11B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B1 - ,simpleLowerCaseMapping:0x11B1 - ,simpleTitleCaseMapping:0x11B1 - }, - { code:0x11B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B2 - ,simpleLowerCaseMapping:0x11B2 - ,simpleTitleCaseMapping:0x11B2 - }, - { code:0x11B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B3 - ,simpleLowerCaseMapping:0x11B3 - ,simpleTitleCaseMapping:0x11B3 - }, - { code:0x11B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B4 - ,simpleLowerCaseMapping:0x11B4 - ,simpleTitleCaseMapping:0x11B4 - }, - { code:0x11B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B5 - ,simpleLowerCaseMapping:0x11B5 - ,simpleTitleCaseMapping:0x11B5 - }, - { code:0x11B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B6 - ,simpleLowerCaseMapping:0x11B6 - ,simpleTitleCaseMapping:0x11B6 - }, - { code:0x11B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B7 - ,simpleLowerCaseMapping:0x11B7 - ,simpleTitleCaseMapping:0x11B7 - }, - { code:0x11B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B8 - ,simpleLowerCaseMapping:0x11B8 - ,simpleTitleCaseMapping:0x11B8 - }, - { code:0x11B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11B9 - ,simpleLowerCaseMapping:0x11B9 - ,simpleTitleCaseMapping:0x11B9 - }, - { code:0x11BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BA - ,simpleLowerCaseMapping:0x11BA - ,simpleTitleCaseMapping:0x11BA - }, - { code:0x11BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BB - ,simpleLowerCaseMapping:0x11BB - ,simpleTitleCaseMapping:0x11BB - }, - { code:0x11BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BC - ,simpleLowerCaseMapping:0x11BC - ,simpleTitleCaseMapping:0x11BC - }, - { code:0x11BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BD - ,simpleLowerCaseMapping:0x11BD - ,simpleTitleCaseMapping:0x11BD - }, - { code:0x11BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BE - ,simpleLowerCaseMapping:0x11BE - ,simpleTitleCaseMapping:0x11BE - }, - { code:0x11BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11BF - ,simpleLowerCaseMapping:0x11BF - ,simpleTitleCaseMapping:0x11BF - }, - { code:0x11C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C0 - ,simpleLowerCaseMapping:0x11C0 - ,simpleTitleCaseMapping:0x11C0 - }, - { code:0x11C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C1 - ,simpleLowerCaseMapping:0x11C1 - ,simpleTitleCaseMapping:0x11C1 - }, - { code:0x11C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C2 - ,simpleLowerCaseMapping:0x11C2 - ,simpleTitleCaseMapping:0x11C2 - }, - { code:0x11C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C3 - ,simpleLowerCaseMapping:0x11C3 - ,simpleTitleCaseMapping:0x11C3 - }, - { code:0x11C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C4 - ,simpleLowerCaseMapping:0x11C4 - ,simpleTitleCaseMapping:0x11C4 - }, - { code:0x11C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C5 - ,simpleLowerCaseMapping:0x11C5 - ,simpleTitleCaseMapping:0x11C5 - }, - { code:0x11C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C6 - ,simpleLowerCaseMapping:0x11C6 - ,simpleTitleCaseMapping:0x11C6 - }, - { code:0x11C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C7 - ,simpleLowerCaseMapping:0x11C7 - ,simpleTitleCaseMapping:0x11C7 - }, - { code:0x11C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C8 - ,simpleLowerCaseMapping:0x11C8 - ,simpleTitleCaseMapping:0x11C8 - }, - { code:0x11C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11C9 - ,simpleLowerCaseMapping:0x11C9 - ,simpleTitleCaseMapping:0x11C9 - }, - { code:0x11CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CA - ,simpleLowerCaseMapping:0x11CA - ,simpleTitleCaseMapping:0x11CA - }, - { code:0x11CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CB - ,simpleLowerCaseMapping:0x11CB - ,simpleTitleCaseMapping:0x11CB - }, - { code:0x11CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CC - ,simpleLowerCaseMapping:0x11CC - ,simpleTitleCaseMapping:0x11CC - }, - { code:0x11CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CD - ,simpleLowerCaseMapping:0x11CD - ,simpleTitleCaseMapping:0x11CD - }, - { code:0x11CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CE - ,simpleLowerCaseMapping:0x11CE - ,simpleTitleCaseMapping:0x11CE - }, - { code:0x11CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11CF - ,simpleLowerCaseMapping:0x11CF - ,simpleTitleCaseMapping:0x11CF - }, - { code:0x11D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D0 - ,simpleLowerCaseMapping:0x11D0 - ,simpleTitleCaseMapping:0x11D0 - }, - { code:0x11D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D1 - ,simpleLowerCaseMapping:0x11D1 - ,simpleTitleCaseMapping:0x11D1 - }, - { code:0x11D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D2 - ,simpleLowerCaseMapping:0x11D2 - ,simpleTitleCaseMapping:0x11D2 - }, - { code:0x11D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D3 - ,simpleLowerCaseMapping:0x11D3 - ,simpleTitleCaseMapping:0x11D3 - }, - { code:0x11D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D4 - ,simpleLowerCaseMapping:0x11D4 - ,simpleTitleCaseMapping:0x11D4 - }, - { code:0x11D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D5 - ,simpleLowerCaseMapping:0x11D5 - ,simpleTitleCaseMapping:0x11D5 - }, - { code:0x11D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D6 - ,simpleLowerCaseMapping:0x11D6 - ,simpleTitleCaseMapping:0x11D6 - }, - { code:0x11D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D7 - ,simpleLowerCaseMapping:0x11D7 - ,simpleTitleCaseMapping:0x11D7 - }, - { code:0x11D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D8 - ,simpleLowerCaseMapping:0x11D8 - ,simpleTitleCaseMapping:0x11D8 - }, - { code:0x11D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11D9 - ,simpleLowerCaseMapping:0x11D9 - ,simpleTitleCaseMapping:0x11D9 - }, - { code:0x11DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DA - ,simpleLowerCaseMapping:0x11DA - ,simpleTitleCaseMapping:0x11DA - }, - { code:0x11DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DB - ,simpleLowerCaseMapping:0x11DB - ,simpleTitleCaseMapping:0x11DB - }, - { code:0x11DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DC - ,simpleLowerCaseMapping:0x11DC - ,simpleTitleCaseMapping:0x11DC - }, - { code:0x11DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DD - ,simpleLowerCaseMapping:0x11DD - ,simpleTitleCaseMapping:0x11DD - }, - { code:0x11DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DE - ,simpleLowerCaseMapping:0x11DE - ,simpleTitleCaseMapping:0x11DE - }, - { code:0x11DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11DF - ,simpleLowerCaseMapping:0x11DF - ,simpleTitleCaseMapping:0x11DF - }, - { code:0x11E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E0 - ,simpleLowerCaseMapping:0x11E0 - ,simpleTitleCaseMapping:0x11E0 - }, - { code:0x11E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E1 - ,simpleLowerCaseMapping:0x11E1 - ,simpleTitleCaseMapping:0x11E1 - }, - { code:0x11E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E2 - ,simpleLowerCaseMapping:0x11E2 - ,simpleTitleCaseMapping:0x11E2 - }, - { code:0x11E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E3 - ,simpleLowerCaseMapping:0x11E3 - ,simpleTitleCaseMapping:0x11E3 - }, - { code:0x11E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E4 - ,simpleLowerCaseMapping:0x11E4 - ,simpleTitleCaseMapping:0x11E4 - }, - { code:0x11E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E5 - ,simpleLowerCaseMapping:0x11E5 - ,simpleTitleCaseMapping:0x11E5 - }, - { code:0x11E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E6 - ,simpleLowerCaseMapping:0x11E6 - ,simpleTitleCaseMapping:0x11E6 - }, - { code:0x11E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E7 - ,simpleLowerCaseMapping:0x11E7 - ,simpleTitleCaseMapping:0x11E7 - }, - { code:0x11E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E8 - ,simpleLowerCaseMapping:0x11E8 - ,simpleTitleCaseMapping:0x11E8 - }, - { code:0x11E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11E9 - ,simpleLowerCaseMapping:0x11E9 - ,simpleTitleCaseMapping:0x11E9 - }, - { code:0x11EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11EA - ,simpleLowerCaseMapping:0x11EA - ,simpleTitleCaseMapping:0x11EA - }, - { code:0x11EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11EB - ,simpleLowerCaseMapping:0x11EB - ,simpleTitleCaseMapping:0x11EB - }, - { code:0x11EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11EC - ,simpleLowerCaseMapping:0x11EC - ,simpleTitleCaseMapping:0x11EC - }, - { code:0x11ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11ED - ,simpleLowerCaseMapping:0x11ED - ,simpleTitleCaseMapping:0x11ED - }, - { code:0x11EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11EE - ,simpleLowerCaseMapping:0x11EE - ,simpleTitleCaseMapping:0x11EE - }, - { code:0x11EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11EF - ,simpleLowerCaseMapping:0x11EF - ,simpleTitleCaseMapping:0x11EF - }, - { code:0x11F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F0 - ,simpleLowerCaseMapping:0x11F0 - ,simpleTitleCaseMapping:0x11F0 - }, - { code:0x11F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F1 - ,simpleLowerCaseMapping:0x11F1 - ,simpleTitleCaseMapping:0x11F1 - }, - { code:0x11F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F2 - ,simpleLowerCaseMapping:0x11F2 - ,simpleTitleCaseMapping:0x11F2 - }, - { code:0x11F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F3 - ,simpleLowerCaseMapping:0x11F3 - ,simpleTitleCaseMapping:0x11F3 - }, - { code:0x11F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F4 - ,simpleLowerCaseMapping:0x11F4 - ,simpleTitleCaseMapping:0x11F4 - }, - { code:0x11F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F5 - ,simpleLowerCaseMapping:0x11F5 - ,simpleTitleCaseMapping:0x11F5 - }, - { code:0x11F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F6 - ,simpleLowerCaseMapping:0x11F6 - ,simpleTitleCaseMapping:0x11F6 - }, - { code:0x11F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F7 - ,simpleLowerCaseMapping:0x11F7 - ,simpleTitleCaseMapping:0x11F7 - }, - { code:0x11F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F8 - ,simpleLowerCaseMapping:0x11F8 - ,simpleTitleCaseMapping:0x11F8 - }, - { code:0x11F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x11F9 - ,simpleLowerCaseMapping:0x11F9 - ,simpleTitleCaseMapping:0x11F9 - }, - { code:0x1200 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200 - ,simpleLowerCaseMapping:0x1200 - ,simpleTitleCaseMapping:0x1200 - }, - { code:0x1201 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201 - ,simpleLowerCaseMapping:0x1201 - ,simpleTitleCaseMapping:0x1201 - }, - { code:0x1202 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202 - ,simpleLowerCaseMapping:0x1202 - ,simpleTitleCaseMapping:0x1202 - }, - { code:0x1203 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203 - ,simpleLowerCaseMapping:0x1203 - ,simpleTitleCaseMapping:0x1203 - }, - { code:0x1204 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204 - ,simpleLowerCaseMapping:0x1204 - ,simpleTitleCaseMapping:0x1204 - }, - { code:0x1205 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205 - ,simpleLowerCaseMapping:0x1205 - ,simpleTitleCaseMapping:0x1205 - }, - { code:0x1206 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206 - ,simpleLowerCaseMapping:0x1206 - ,simpleTitleCaseMapping:0x1206 - }, - { code:0x1207 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207 - ,simpleLowerCaseMapping:0x1207 - ,simpleTitleCaseMapping:0x1207 - }, - { code:0x1208 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208 - ,simpleLowerCaseMapping:0x1208 - ,simpleTitleCaseMapping:0x1208 - }, - { code:0x1209 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209 - ,simpleLowerCaseMapping:0x1209 - ,simpleTitleCaseMapping:0x1209 - }, - { code:0x120A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A - ,simpleLowerCaseMapping:0x120A - ,simpleTitleCaseMapping:0x120A - }, - { code:0x120B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B - ,simpleLowerCaseMapping:0x120B - ,simpleTitleCaseMapping:0x120B - }, - { code:0x120C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C - ,simpleLowerCaseMapping:0x120C - ,simpleTitleCaseMapping:0x120C - }, - { code:0x120D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D - ,simpleLowerCaseMapping:0x120D - ,simpleTitleCaseMapping:0x120D - }, - { code:0x120E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E - ,simpleLowerCaseMapping:0x120E - ,simpleTitleCaseMapping:0x120E - }, - { code:0x120F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F - ,simpleLowerCaseMapping:0x120F - ,simpleTitleCaseMapping:0x120F - }, - { code:0x1210 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210 - ,simpleLowerCaseMapping:0x1210 - ,simpleTitleCaseMapping:0x1210 - }, - { code:0x1211 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211 - ,simpleLowerCaseMapping:0x1211 - ,simpleTitleCaseMapping:0x1211 - }, - { code:0x1212 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212 - ,simpleLowerCaseMapping:0x1212 - ,simpleTitleCaseMapping:0x1212 - }, - { code:0x1213 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213 - ,simpleLowerCaseMapping:0x1213 - ,simpleTitleCaseMapping:0x1213 - }, - { code:0x1214 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214 - ,simpleLowerCaseMapping:0x1214 - ,simpleTitleCaseMapping:0x1214 - }, - { code:0x1215 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215 - ,simpleLowerCaseMapping:0x1215 - ,simpleTitleCaseMapping:0x1215 - }, - { code:0x1216 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216 - ,simpleLowerCaseMapping:0x1216 - ,simpleTitleCaseMapping:0x1216 - }, - { code:0x1217 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217 - ,simpleLowerCaseMapping:0x1217 - ,simpleTitleCaseMapping:0x1217 - }, - { code:0x1218 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218 - ,simpleLowerCaseMapping:0x1218 - ,simpleTitleCaseMapping:0x1218 - }, - { code:0x1219 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219 - ,simpleLowerCaseMapping:0x1219 - ,simpleTitleCaseMapping:0x1219 - }, - { code:0x121A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A - ,simpleLowerCaseMapping:0x121A - ,simpleTitleCaseMapping:0x121A - }, - { code:0x121B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B - ,simpleLowerCaseMapping:0x121B - ,simpleTitleCaseMapping:0x121B - }, - { code:0x121C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C - ,simpleLowerCaseMapping:0x121C - ,simpleTitleCaseMapping:0x121C - }, - { code:0x121D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D - ,simpleLowerCaseMapping:0x121D - ,simpleTitleCaseMapping:0x121D - }, - { code:0x121E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E - ,simpleLowerCaseMapping:0x121E - ,simpleTitleCaseMapping:0x121E - }, - { code:0x121F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F - ,simpleLowerCaseMapping:0x121F - ,simpleTitleCaseMapping:0x121F - }, - { code:0x1220 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220 - ,simpleLowerCaseMapping:0x1220 - ,simpleTitleCaseMapping:0x1220 - }, - { code:0x1221 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221 - ,simpleLowerCaseMapping:0x1221 - ,simpleTitleCaseMapping:0x1221 - }, - { code:0x1222 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222 - ,simpleLowerCaseMapping:0x1222 - ,simpleTitleCaseMapping:0x1222 - }, - { code:0x1223 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223 - ,simpleLowerCaseMapping:0x1223 - ,simpleTitleCaseMapping:0x1223 - }, - { code:0x1224 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224 - ,simpleLowerCaseMapping:0x1224 - ,simpleTitleCaseMapping:0x1224 - }, - { code:0x1225 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225 - ,simpleLowerCaseMapping:0x1225 - ,simpleTitleCaseMapping:0x1225 - }, - { code:0x1226 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226 - ,simpleLowerCaseMapping:0x1226 - ,simpleTitleCaseMapping:0x1226 - }, - { code:0x1227 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227 - ,simpleLowerCaseMapping:0x1227 - ,simpleTitleCaseMapping:0x1227 - }, - { code:0x1228 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228 - ,simpleLowerCaseMapping:0x1228 - ,simpleTitleCaseMapping:0x1228 - }, - { code:0x1229 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229 - ,simpleLowerCaseMapping:0x1229 - ,simpleTitleCaseMapping:0x1229 - }, - { code:0x122A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A - ,simpleLowerCaseMapping:0x122A - ,simpleTitleCaseMapping:0x122A - }, - { code:0x122B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B - ,simpleLowerCaseMapping:0x122B - ,simpleTitleCaseMapping:0x122B - }, - { code:0x122C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C - ,simpleLowerCaseMapping:0x122C - ,simpleTitleCaseMapping:0x122C - }, - { code:0x122D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D - ,simpleLowerCaseMapping:0x122D - ,simpleTitleCaseMapping:0x122D - }, - { code:0x122E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E - ,simpleLowerCaseMapping:0x122E - ,simpleTitleCaseMapping:0x122E - }, - { code:0x122F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F - ,simpleLowerCaseMapping:0x122F - ,simpleTitleCaseMapping:0x122F - }, - { code:0x1230 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230 - ,simpleLowerCaseMapping:0x1230 - ,simpleTitleCaseMapping:0x1230 - }, - { code:0x1231 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231 - ,simpleLowerCaseMapping:0x1231 - ,simpleTitleCaseMapping:0x1231 - }, - { code:0x1232 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232 - ,simpleLowerCaseMapping:0x1232 - ,simpleTitleCaseMapping:0x1232 - }, - { code:0x1233 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233 - ,simpleLowerCaseMapping:0x1233 - ,simpleTitleCaseMapping:0x1233 - }, - { code:0x1234 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234 - ,simpleLowerCaseMapping:0x1234 - ,simpleTitleCaseMapping:0x1234 - }, - { code:0x1235 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235 - ,simpleLowerCaseMapping:0x1235 - ,simpleTitleCaseMapping:0x1235 - }, - { code:0x1236 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236 - ,simpleLowerCaseMapping:0x1236 - ,simpleTitleCaseMapping:0x1236 - }, - { code:0x1237 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1237 - ,simpleLowerCaseMapping:0x1237 - ,simpleTitleCaseMapping:0x1237 - }, - { code:0x1238 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1238 - ,simpleLowerCaseMapping:0x1238 - ,simpleTitleCaseMapping:0x1238 - }, - { code:0x1239 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1239 - ,simpleLowerCaseMapping:0x1239 - ,simpleTitleCaseMapping:0x1239 - }, - { code:0x123A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123A - ,simpleLowerCaseMapping:0x123A - ,simpleTitleCaseMapping:0x123A - }, - { code:0x123B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123B - ,simpleLowerCaseMapping:0x123B - ,simpleTitleCaseMapping:0x123B - }, - { code:0x123C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123C - ,simpleLowerCaseMapping:0x123C - ,simpleTitleCaseMapping:0x123C - }, - { code:0x123D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123D - ,simpleLowerCaseMapping:0x123D - ,simpleTitleCaseMapping:0x123D - }, - { code:0x123E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123E - ,simpleLowerCaseMapping:0x123E - ,simpleTitleCaseMapping:0x123E - }, - { code:0x123F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x123F - ,simpleLowerCaseMapping:0x123F - ,simpleTitleCaseMapping:0x123F - }, - { code:0x1240 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1240 - ,simpleLowerCaseMapping:0x1240 - ,simpleTitleCaseMapping:0x1240 - }, - { code:0x1241 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1241 - ,simpleLowerCaseMapping:0x1241 - ,simpleTitleCaseMapping:0x1241 - }, - { code:0x1242 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1242 - ,simpleLowerCaseMapping:0x1242 - ,simpleTitleCaseMapping:0x1242 - }, - { code:0x1243 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1243 - ,simpleLowerCaseMapping:0x1243 - ,simpleTitleCaseMapping:0x1243 - }, - { code:0x1244 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1244 - ,simpleLowerCaseMapping:0x1244 - ,simpleTitleCaseMapping:0x1244 - }, - { code:0x1245 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1245 - ,simpleLowerCaseMapping:0x1245 - ,simpleTitleCaseMapping:0x1245 - }, - { code:0x1246 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1246 - ,simpleLowerCaseMapping:0x1246 - ,simpleTitleCaseMapping:0x1246 - }, - { code:0x1247 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1247 - ,simpleLowerCaseMapping:0x1247 - ,simpleTitleCaseMapping:0x1247 - }, - { code:0x1248 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1248 - ,simpleLowerCaseMapping:0x1248 - ,simpleTitleCaseMapping:0x1248 - }, - { code:0x124A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x124A - ,simpleLowerCaseMapping:0x124A - ,simpleTitleCaseMapping:0x124A - }, - { code:0x124B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x124B - ,simpleLowerCaseMapping:0x124B - ,simpleTitleCaseMapping:0x124B - }, - { code:0x124C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x124C - ,simpleLowerCaseMapping:0x124C - ,simpleTitleCaseMapping:0x124C - }, - { code:0x124D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x124D - ,simpleLowerCaseMapping:0x124D - ,simpleTitleCaseMapping:0x124D - }, - { code:0x1250 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1250 - ,simpleLowerCaseMapping:0x1250 - ,simpleTitleCaseMapping:0x1250 - }, - { code:0x1251 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1251 - ,simpleLowerCaseMapping:0x1251 - ,simpleTitleCaseMapping:0x1251 - }, - { code:0x1252 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1252 - ,simpleLowerCaseMapping:0x1252 - ,simpleTitleCaseMapping:0x1252 - }, - { code:0x1253 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1253 - ,simpleLowerCaseMapping:0x1253 - ,simpleTitleCaseMapping:0x1253 - }, - { code:0x1254 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1254 - ,simpleLowerCaseMapping:0x1254 - ,simpleTitleCaseMapping:0x1254 - }, - { code:0x1255 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1255 - ,simpleLowerCaseMapping:0x1255 - ,simpleTitleCaseMapping:0x1255 - }, - { code:0x1256 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1256 - ,simpleLowerCaseMapping:0x1256 - ,simpleTitleCaseMapping:0x1256 - }, - { code:0x1258 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1258 - ,simpleLowerCaseMapping:0x1258 - ,simpleTitleCaseMapping:0x1258 - }, - { code:0x125A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x125A - ,simpleLowerCaseMapping:0x125A - ,simpleTitleCaseMapping:0x125A - }, - { code:0x125B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x125B - ,simpleLowerCaseMapping:0x125B - ,simpleTitleCaseMapping:0x125B - }, - { code:0x125C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x125C - ,simpleLowerCaseMapping:0x125C - ,simpleTitleCaseMapping:0x125C - }, - { code:0x125D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x125D - ,simpleLowerCaseMapping:0x125D - ,simpleTitleCaseMapping:0x125D - }, - { code:0x1260 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1260 - ,simpleLowerCaseMapping:0x1260 - ,simpleTitleCaseMapping:0x1260 - }, - { code:0x1261 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1261 - ,simpleLowerCaseMapping:0x1261 - ,simpleTitleCaseMapping:0x1261 - }, - { code:0x1262 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1262 - ,simpleLowerCaseMapping:0x1262 - ,simpleTitleCaseMapping:0x1262 - }, - { code:0x1263 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1263 - ,simpleLowerCaseMapping:0x1263 - ,simpleTitleCaseMapping:0x1263 - }, - { code:0x1264 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1264 - ,simpleLowerCaseMapping:0x1264 - ,simpleTitleCaseMapping:0x1264 - }, - { code:0x1265 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1265 - ,simpleLowerCaseMapping:0x1265 - ,simpleTitleCaseMapping:0x1265 - }, - { code:0x1266 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1266 - ,simpleLowerCaseMapping:0x1266 - ,simpleTitleCaseMapping:0x1266 - }, - { code:0x1267 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1267 - ,simpleLowerCaseMapping:0x1267 - ,simpleTitleCaseMapping:0x1267 - }, - { code:0x1268 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1268 - ,simpleLowerCaseMapping:0x1268 - ,simpleTitleCaseMapping:0x1268 - }, - { code:0x1269 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1269 - ,simpleLowerCaseMapping:0x1269 - ,simpleTitleCaseMapping:0x1269 - }, - { code:0x126A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126A - ,simpleLowerCaseMapping:0x126A - ,simpleTitleCaseMapping:0x126A - }, - { code:0x126B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126B - ,simpleLowerCaseMapping:0x126B - ,simpleTitleCaseMapping:0x126B - }, - { code:0x126C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126C - ,simpleLowerCaseMapping:0x126C - ,simpleTitleCaseMapping:0x126C - }, - { code:0x126D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126D - ,simpleLowerCaseMapping:0x126D - ,simpleTitleCaseMapping:0x126D - }, - { code:0x126E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126E - ,simpleLowerCaseMapping:0x126E - ,simpleTitleCaseMapping:0x126E - }, - { code:0x126F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x126F - ,simpleLowerCaseMapping:0x126F - ,simpleTitleCaseMapping:0x126F - }, - { code:0x1270 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1270 - ,simpleLowerCaseMapping:0x1270 - ,simpleTitleCaseMapping:0x1270 - }, - { code:0x1271 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1271 - ,simpleLowerCaseMapping:0x1271 - ,simpleTitleCaseMapping:0x1271 - }, - { code:0x1272 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1272 - ,simpleLowerCaseMapping:0x1272 - ,simpleTitleCaseMapping:0x1272 - }, - { code:0x1273 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1273 - ,simpleLowerCaseMapping:0x1273 - ,simpleTitleCaseMapping:0x1273 - }, - { code:0x1274 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1274 - ,simpleLowerCaseMapping:0x1274 - ,simpleTitleCaseMapping:0x1274 - }, - { code:0x1275 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1275 - ,simpleLowerCaseMapping:0x1275 - ,simpleTitleCaseMapping:0x1275 - }, - { code:0x1276 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1276 - ,simpleLowerCaseMapping:0x1276 - ,simpleTitleCaseMapping:0x1276 - }, - { code:0x1277 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1277 - ,simpleLowerCaseMapping:0x1277 - ,simpleTitleCaseMapping:0x1277 - }, - { code:0x1278 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1278 - ,simpleLowerCaseMapping:0x1278 - ,simpleTitleCaseMapping:0x1278 - }, - { code:0x1279 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1279 - ,simpleLowerCaseMapping:0x1279 - ,simpleTitleCaseMapping:0x1279 - }, - { code:0x127A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127A - ,simpleLowerCaseMapping:0x127A - ,simpleTitleCaseMapping:0x127A - }, - { code:0x127B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127B - ,simpleLowerCaseMapping:0x127B - ,simpleTitleCaseMapping:0x127B - }, - { code:0x127C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127C - ,simpleLowerCaseMapping:0x127C - ,simpleTitleCaseMapping:0x127C - }, - { code:0x127D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127D - ,simpleLowerCaseMapping:0x127D - ,simpleTitleCaseMapping:0x127D - }, - { code:0x127E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127E - ,simpleLowerCaseMapping:0x127E - ,simpleTitleCaseMapping:0x127E - }, - { code:0x127F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x127F - ,simpleLowerCaseMapping:0x127F - ,simpleTitleCaseMapping:0x127F - }, - { code:0x1280 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1280 - ,simpleLowerCaseMapping:0x1280 - ,simpleTitleCaseMapping:0x1280 - }, - { code:0x1281 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1281 - ,simpleLowerCaseMapping:0x1281 - ,simpleTitleCaseMapping:0x1281 - }, - { code:0x1282 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1282 - ,simpleLowerCaseMapping:0x1282 - ,simpleTitleCaseMapping:0x1282 - }, - { code:0x1283 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1283 - ,simpleLowerCaseMapping:0x1283 - ,simpleTitleCaseMapping:0x1283 - }, - { code:0x1284 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1284 - ,simpleLowerCaseMapping:0x1284 - ,simpleTitleCaseMapping:0x1284 - }, - { code:0x1285 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1285 - ,simpleLowerCaseMapping:0x1285 - ,simpleTitleCaseMapping:0x1285 - }, - { code:0x1286 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1286 - ,simpleLowerCaseMapping:0x1286 - ,simpleTitleCaseMapping:0x1286 - }, - { code:0x1287 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1287 - ,simpleLowerCaseMapping:0x1287 - ,simpleTitleCaseMapping:0x1287 - }, - { code:0x1288 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1288 - ,simpleLowerCaseMapping:0x1288 - ,simpleTitleCaseMapping:0x1288 - }, - { code:0x128A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x128A - ,simpleLowerCaseMapping:0x128A - ,simpleTitleCaseMapping:0x128A - }, - { code:0x128B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x128B - ,simpleLowerCaseMapping:0x128B - ,simpleTitleCaseMapping:0x128B - }, - { code:0x128C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x128C - ,simpleLowerCaseMapping:0x128C - ,simpleTitleCaseMapping:0x128C - }, - { code:0x128D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x128D - ,simpleLowerCaseMapping:0x128D - ,simpleTitleCaseMapping:0x128D - }, - { code:0x1290 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1290 - ,simpleLowerCaseMapping:0x1290 - ,simpleTitleCaseMapping:0x1290 - }, - { code:0x1291 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1291 - ,simpleLowerCaseMapping:0x1291 - ,simpleTitleCaseMapping:0x1291 - }, - { code:0x1292 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1292 - ,simpleLowerCaseMapping:0x1292 - ,simpleTitleCaseMapping:0x1292 - }, - { code:0x1293 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1293 - ,simpleLowerCaseMapping:0x1293 - ,simpleTitleCaseMapping:0x1293 - }, - { code:0x1294 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1294 - ,simpleLowerCaseMapping:0x1294 - ,simpleTitleCaseMapping:0x1294 - }, - { code:0x1295 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1295 - ,simpleLowerCaseMapping:0x1295 - ,simpleTitleCaseMapping:0x1295 - }, - { code:0x1296 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1296 - ,simpleLowerCaseMapping:0x1296 - ,simpleTitleCaseMapping:0x1296 - }, - { code:0x1297 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1297 - ,simpleLowerCaseMapping:0x1297 - ,simpleTitleCaseMapping:0x1297 - }, - { code:0x1298 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1298 - ,simpleLowerCaseMapping:0x1298 - ,simpleTitleCaseMapping:0x1298 - }, - { code:0x1299 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1299 - ,simpleLowerCaseMapping:0x1299 - ,simpleTitleCaseMapping:0x1299 - }, - { code:0x129A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129A - ,simpleLowerCaseMapping:0x129A - ,simpleTitleCaseMapping:0x129A - }, - { code:0x129B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129B - ,simpleLowerCaseMapping:0x129B - ,simpleTitleCaseMapping:0x129B - }, - { code:0x129C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129C - ,simpleLowerCaseMapping:0x129C - ,simpleTitleCaseMapping:0x129C - }, - { code:0x129D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129D - ,simpleLowerCaseMapping:0x129D - ,simpleTitleCaseMapping:0x129D - }, - { code:0x129E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129E - ,simpleLowerCaseMapping:0x129E - ,simpleTitleCaseMapping:0x129E - }, - { code:0x129F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x129F - ,simpleLowerCaseMapping:0x129F - ,simpleTitleCaseMapping:0x129F - }, - { code:0x12A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A0 - ,simpleLowerCaseMapping:0x12A0 - ,simpleTitleCaseMapping:0x12A0 - }, - { code:0x12A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A1 - ,simpleLowerCaseMapping:0x12A1 - ,simpleTitleCaseMapping:0x12A1 - }, - { code:0x12A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A2 - ,simpleLowerCaseMapping:0x12A2 - ,simpleTitleCaseMapping:0x12A2 - }, - { code:0x12A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A3 - ,simpleLowerCaseMapping:0x12A3 - ,simpleTitleCaseMapping:0x12A3 - }, - { code:0x12A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A4 - ,simpleLowerCaseMapping:0x12A4 - ,simpleTitleCaseMapping:0x12A4 - }, - { code:0x12A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A5 - ,simpleLowerCaseMapping:0x12A5 - ,simpleTitleCaseMapping:0x12A5 - }, - { code:0x12A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A6 - ,simpleLowerCaseMapping:0x12A6 - ,simpleTitleCaseMapping:0x12A6 - }, - { code:0x12A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A7 - ,simpleLowerCaseMapping:0x12A7 - ,simpleTitleCaseMapping:0x12A7 - }, - { code:0x12A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A8 - ,simpleLowerCaseMapping:0x12A8 - ,simpleTitleCaseMapping:0x12A8 - }, - { code:0x12A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12A9 - ,simpleLowerCaseMapping:0x12A9 - ,simpleTitleCaseMapping:0x12A9 - }, - { code:0x12AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AA - ,simpleLowerCaseMapping:0x12AA - ,simpleTitleCaseMapping:0x12AA - }, - { code:0x12AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AB - ,simpleLowerCaseMapping:0x12AB - ,simpleTitleCaseMapping:0x12AB - }, - { code:0x12AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AC - ,simpleLowerCaseMapping:0x12AC - ,simpleTitleCaseMapping:0x12AC - }, - { code:0x12AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AD - ,simpleLowerCaseMapping:0x12AD - ,simpleTitleCaseMapping:0x12AD - }, - { code:0x12AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AE - ,simpleLowerCaseMapping:0x12AE - ,simpleTitleCaseMapping:0x12AE - }, - { code:0x12AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12AF - ,simpleLowerCaseMapping:0x12AF - ,simpleTitleCaseMapping:0x12AF - }, - { code:0x12B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B0 - ,simpleLowerCaseMapping:0x12B0 - ,simpleTitleCaseMapping:0x12B0 - }, - { code:0x12B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B2 - ,simpleLowerCaseMapping:0x12B2 - ,simpleTitleCaseMapping:0x12B2 - }, - { code:0x12B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B3 - ,simpleLowerCaseMapping:0x12B3 - ,simpleTitleCaseMapping:0x12B3 - }, - { code:0x12B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B4 - ,simpleLowerCaseMapping:0x12B4 - ,simpleTitleCaseMapping:0x12B4 - }, - { code:0x12B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B5 - ,simpleLowerCaseMapping:0x12B5 - ,simpleTitleCaseMapping:0x12B5 - }, - { code:0x12B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B8 - ,simpleLowerCaseMapping:0x12B8 - ,simpleTitleCaseMapping:0x12B8 - }, - { code:0x12B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12B9 - ,simpleLowerCaseMapping:0x12B9 - ,simpleTitleCaseMapping:0x12B9 - }, - { code:0x12BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12BA - ,simpleLowerCaseMapping:0x12BA - ,simpleTitleCaseMapping:0x12BA - }, - { code:0x12BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12BB - ,simpleLowerCaseMapping:0x12BB - ,simpleTitleCaseMapping:0x12BB - }, - { code:0x12BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12BC - ,simpleLowerCaseMapping:0x12BC - ,simpleTitleCaseMapping:0x12BC - }, - { code:0x12BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12BD - ,simpleLowerCaseMapping:0x12BD - ,simpleTitleCaseMapping:0x12BD - }, - { code:0x12BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12BE - ,simpleLowerCaseMapping:0x12BE - ,simpleTitleCaseMapping:0x12BE - }, - { code:0x12C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C0 - ,simpleLowerCaseMapping:0x12C0 - ,simpleTitleCaseMapping:0x12C0 - }, - { code:0x12C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C2 - ,simpleLowerCaseMapping:0x12C2 - ,simpleTitleCaseMapping:0x12C2 - }, - { code:0x12C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C3 - ,simpleLowerCaseMapping:0x12C3 - ,simpleTitleCaseMapping:0x12C3 - }, - { code:0x12C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C4 - ,simpleLowerCaseMapping:0x12C4 - ,simpleTitleCaseMapping:0x12C4 - }, - { code:0x12C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C5 - ,simpleLowerCaseMapping:0x12C5 - ,simpleTitleCaseMapping:0x12C5 - }, - { code:0x12C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C8 - ,simpleLowerCaseMapping:0x12C8 - ,simpleTitleCaseMapping:0x12C8 - }, - { code:0x12C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12C9 - ,simpleLowerCaseMapping:0x12C9 - ,simpleTitleCaseMapping:0x12C9 - }, - { code:0x12CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CA - ,simpleLowerCaseMapping:0x12CA - ,simpleTitleCaseMapping:0x12CA - }, - { code:0x12CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CB - ,simpleLowerCaseMapping:0x12CB - ,simpleTitleCaseMapping:0x12CB - }, - { code:0x12CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CC - ,simpleLowerCaseMapping:0x12CC - ,simpleTitleCaseMapping:0x12CC - }, - { code:0x12CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CD - ,simpleLowerCaseMapping:0x12CD - ,simpleTitleCaseMapping:0x12CD - }, - { code:0x12CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CE - ,simpleLowerCaseMapping:0x12CE - ,simpleTitleCaseMapping:0x12CE - }, - { code:0x12CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12CF - ,simpleLowerCaseMapping:0x12CF - ,simpleTitleCaseMapping:0x12CF - }, - { code:0x12D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D0 - ,simpleLowerCaseMapping:0x12D0 - ,simpleTitleCaseMapping:0x12D0 - }, - { code:0x12D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D1 - ,simpleLowerCaseMapping:0x12D1 - ,simpleTitleCaseMapping:0x12D1 - }, - { code:0x12D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D2 - ,simpleLowerCaseMapping:0x12D2 - ,simpleTitleCaseMapping:0x12D2 - }, - { code:0x12D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D3 - ,simpleLowerCaseMapping:0x12D3 - ,simpleTitleCaseMapping:0x12D3 - }, - { code:0x12D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D4 - ,simpleLowerCaseMapping:0x12D4 - ,simpleTitleCaseMapping:0x12D4 - }, - { code:0x12D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D5 - ,simpleLowerCaseMapping:0x12D5 - ,simpleTitleCaseMapping:0x12D5 - }, - { code:0x12D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D6 - ,simpleLowerCaseMapping:0x12D6 - ,simpleTitleCaseMapping:0x12D6 - }, - { code:0x12D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D8 - ,simpleLowerCaseMapping:0x12D8 - ,simpleTitleCaseMapping:0x12D8 - }, - { code:0x12D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12D9 - ,simpleLowerCaseMapping:0x12D9 - ,simpleTitleCaseMapping:0x12D9 - }, - { code:0x12DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DA - ,simpleLowerCaseMapping:0x12DA - ,simpleTitleCaseMapping:0x12DA - }, - { code:0x12DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DB - ,simpleLowerCaseMapping:0x12DB - ,simpleTitleCaseMapping:0x12DB - }, - { code:0x12DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DC - ,simpleLowerCaseMapping:0x12DC - ,simpleTitleCaseMapping:0x12DC - }, - { code:0x12DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DD - ,simpleLowerCaseMapping:0x12DD - ,simpleTitleCaseMapping:0x12DD - }, - { code:0x12DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DE - ,simpleLowerCaseMapping:0x12DE - ,simpleTitleCaseMapping:0x12DE - }, - { code:0x12DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12DF - ,simpleLowerCaseMapping:0x12DF - ,simpleTitleCaseMapping:0x12DF - }, - { code:0x12E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E0 - ,simpleLowerCaseMapping:0x12E0 - ,simpleTitleCaseMapping:0x12E0 - }, - { code:0x12E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E1 - ,simpleLowerCaseMapping:0x12E1 - ,simpleTitleCaseMapping:0x12E1 - }, - { code:0x12E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E2 - ,simpleLowerCaseMapping:0x12E2 - ,simpleTitleCaseMapping:0x12E2 - }, - { code:0x12E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E3 - ,simpleLowerCaseMapping:0x12E3 - ,simpleTitleCaseMapping:0x12E3 - }, - { code:0x12E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E4 - ,simpleLowerCaseMapping:0x12E4 - ,simpleTitleCaseMapping:0x12E4 - }, - { code:0x12E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E5 - ,simpleLowerCaseMapping:0x12E5 - ,simpleTitleCaseMapping:0x12E5 - }, - { code:0x12E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E6 - ,simpleLowerCaseMapping:0x12E6 - ,simpleTitleCaseMapping:0x12E6 - }, - { code:0x12E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E7 - ,simpleLowerCaseMapping:0x12E7 - ,simpleTitleCaseMapping:0x12E7 - }, - { code:0x12E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E8 - ,simpleLowerCaseMapping:0x12E8 - ,simpleTitleCaseMapping:0x12E8 - }, - { code:0x12E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12E9 - ,simpleLowerCaseMapping:0x12E9 - ,simpleTitleCaseMapping:0x12E9 - }, - { code:0x12EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12EA - ,simpleLowerCaseMapping:0x12EA - ,simpleTitleCaseMapping:0x12EA - }, - { code:0x12EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12EB - ,simpleLowerCaseMapping:0x12EB - ,simpleTitleCaseMapping:0x12EB - }, - { code:0x12EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12EC - ,simpleLowerCaseMapping:0x12EC - ,simpleTitleCaseMapping:0x12EC - }, - { code:0x12ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12ED - ,simpleLowerCaseMapping:0x12ED - ,simpleTitleCaseMapping:0x12ED - }, - { code:0x12EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12EE - ,simpleLowerCaseMapping:0x12EE - ,simpleTitleCaseMapping:0x12EE - }, - { code:0x12EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12EF - ,simpleLowerCaseMapping:0x12EF - ,simpleTitleCaseMapping:0x12EF - }, - { code:0x12F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F0 - ,simpleLowerCaseMapping:0x12F0 - ,simpleTitleCaseMapping:0x12F0 - }, - { code:0x12F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F1 - ,simpleLowerCaseMapping:0x12F1 - ,simpleTitleCaseMapping:0x12F1 - }, - { code:0x12F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F2 - ,simpleLowerCaseMapping:0x12F2 - ,simpleTitleCaseMapping:0x12F2 - }, - { code:0x12F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F3 - ,simpleLowerCaseMapping:0x12F3 - ,simpleTitleCaseMapping:0x12F3 - }, - { code:0x12F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F4 - ,simpleLowerCaseMapping:0x12F4 - ,simpleTitleCaseMapping:0x12F4 - }, - { code:0x12F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F5 - ,simpleLowerCaseMapping:0x12F5 - ,simpleTitleCaseMapping:0x12F5 - }, - { code:0x12F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F6 - ,simpleLowerCaseMapping:0x12F6 - ,simpleTitleCaseMapping:0x12F6 - }, - { code:0x12F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F7 - ,simpleLowerCaseMapping:0x12F7 - ,simpleTitleCaseMapping:0x12F7 - }, - { code:0x12F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F8 - ,simpleLowerCaseMapping:0x12F8 - ,simpleTitleCaseMapping:0x12F8 - }, - { code:0x12F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12F9 - ,simpleLowerCaseMapping:0x12F9 - ,simpleTitleCaseMapping:0x12F9 - }, - { code:0x12FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FA - ,simpleLowerCaseMapping:0x12FA - ,simpleTitleCaseMapping:0x12FA - }, - { code:0x12FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FB - ,simpleLowerCaseMapping:0x12FB - ,simpleTitleCaseMapping:0x12FB - }, - { code:0x12FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FC - ,simpleLowerCaseMapping:0x12FC - ,simpleTitleCaseMapping:0x12FC - }, - { code:0x12FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FD - ,simpleLowerCaseMapping:0x12FD - ,simpleTitleCaseMapping:0x12FD - }, - { code:0x12FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FE - ,simpleLowerCaseMapping:0x12FE - ,simpleTitleCaseMapping:0x12FE - }, - { code:0x12FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12FF - ,simpleLowerCaseMapping:0x12FF - ,simpleTitleCaseMapping:0x12FF - }, - { code:0x1300 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1300 - ,simpleLowerCaseMapping:0x1300 - ,simpleTitleCaseMapping:0x1300 - }, - { code:0x1301 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1301 - ,simpleLowerCaseMapping:0x1301 - ,simpleTitleCaseMapping:0x1301 - }, - { code:0x1302 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1302 - ,simpleLowerCaseMapping:0x1302 - ,simpleTitleCaseMapping:0x1302 - }, - { code:0x1303 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1303 - ,simpleLowerCaseMapping:0x1303 - ,simpleTitleCaseMapping:0x1303 - }, - { code:0x1304 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1304 - ,simpleLowerCaseMapping:0x1304 - ,simpleTitleCaseMapping:0x1304 - }, - { code:0x1305 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1305 - ,simpleLowerCaseMapping:0x1305 - ,simpleTitleCaseMapping:0x1305 - }, - { code:0x1306 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1306 - ,simpleLowerCaseMapping:0x1306 - ,simpleTitleCaseMapping:0x1306 - }, - { code:0x1307 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1307 - ,simpleLowerCaseMapping:0x1307 - ,simpleTitleCaseMapping:0x1307 - }, - { code:0x1308 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1308 - ,simpleLowerCaseMapping:0x1308 - ,simpleTitleCaseMapping:0x1308 - }, - { code:0x1309 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1309 - ,simpleLowerCaseMapping:0x1309 - ,simpleTitleCaseMapping:0x1309 - }, - { code:0x130A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130A - ,simpleLowerCaseMapping:0x130A - ,simpleTitleCaseMapping:0x130A - }, - { code:0x130B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130B - ,simpleLowerCaseMapping:0x130B - ,simpleTitleCaseMapping:0x130B - }, - { code:0x130C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130C - ,simpleLowerCaseMapping:0x130C - ,simpleTitleCaseMapping:0x130C - }, - { code:0x130D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130D - ,simpleLowerCaseMapping:0x130D - ,simpleTitleCaseMapping:0x130D - }, - { code:0x130E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130E - ,simpleLowerCaseMapping:0x130E - ,simpleTitleCaseMapping:0x130E - }, - { code:0x130F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x130F - ,simpleLowerCaseMapping:0x130F - ,simpleTitleCaseMapping:0x130F - }, - { code:0x1310 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1310 - ,simpleLowerCaseMapping:0x1310 - ,simpleTitleCaseMapping:0x1310 - }, - { code:0x1312 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1312 - ,simpleLowerCaseMapping:0x1312 - ,simpleTitleCaseMapping:0x1312 - }, - { code:0x1313 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1313 - ,simpleLowerCaseMapping:0x1313 - ,simpleTitleCaseMapping:0x1313 - }, - { code:0x1314 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1314 - ,simpleLowerCaseMapping:0x1314 - ,simpleTitleCaseMapping:0x1314 - }, - { code:0x1315 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1315 - ,simpleLowerCaseMapping:0x1315 - ,simpleTitleCaseMapping:0x1315 - }, - { code:0x1318 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1318 - ,simpleLowerCaseMapping:0x1318 - ,simpleTitleCaseMapping:0x1318 - }, - { code:0x1319 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1319 - ,simpleLowerCaseMapping:0x1319 - ,simpleTitleCaseMapping:0x1319 - }, - { code:0x131A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131A - ,simpleLowerCaseMapping:0x131A - ,simpleTitleCaseMapping:0x131A - }, - { code:0x131B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131B - ,simpleLowerCaseMapping:0x131B - ,simpleTitleCaseMapping:0x131B - }, - { code:0x131C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131C - ,simpleLowerCaseMapping:0x131C - ,simpleTitleCaseMapping:0x131C - }, - { code:0x131D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131D - ,simpleLowerCaseMapping:0x131D - ,simpleTitleCaseMapping:0x131D - }, - { code:0x131E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131E - ,simpleLowerCaseMapping:0x131E - ,simpleTitleCaseMapping:0x131E - }, - { code:0x131F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x131F - ,simpleLowerCaseMapping:0x131F - ,simpleTitleCaseMapping:0x131F - }, - { code:0x1320 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1320 - ,simpleLowerCaseMapping:0x1320 - ,simpleTitleCaseMapping:0x1320 - }, - { code:0x1321 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1321 - ,simpleLowerCaseMapping:0x1321 - ,simpleTitleCaseMapping:0x1321 - }, - { code:0x1322 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1322 - ,simpleLowerCaseMapping:0x1322 - ,simpleTitleCaseMapping:0x1322 - }, - { code:0x1323 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1323 - ,simpleLowerCaseMapping:0x1323 - ,simpleTitleCaseMapping:0x1323 - }, - { code:0x1324 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1324 - ,simpleLowerCaseMapping:0x1324 - ,simpleTitleCaseMapping:0x1324 - }, - { code:0x1325 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1325 - ,simpleLowerCaseMapping:0x1325 - ,simpleTitleCaseMapping:0x1325 - }, - { code:0x1326 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1326 - ,simpleLowerCaseMapping:0x1326 - ,simpleTitleCaseMapping:0x1326 - }, - { code:0x1327 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1327 - ,simpleLowerCaseMapping:0x1327 - ,simpleTitleCaseMapping:0x1327 - }, - { code:0x1328 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1328 - ,simpleLowerCaseMapping:0x1328 - ,simpleTitleCaseMapping:0x1328 - }, - { code:0x1329 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1329 - ,simpleLowerCaseMapping:0x1329 - ,simpleTitleCaseMapping:0x1329 - }, - { code:0x132A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132A - ,simpleLowerCaseMapping:0x132A - ,simpleTitleCaseMapping:0x132A - }, - { code:0x132B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132B - ,simpleLowerCaseMapping:0x132B - ,simpleTitleCaseMapping:0x132B - }, - { code:0x132C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132C - ,simpleLowerCaseMapping:0x132C - ,simpleTitleCaseMapping:0x132C - }, - { code:0x132D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132D - ,simpleLowerCaseMapping:0x132D - ,simpleTitleCaseMapping:0x132D - }, - { code:0x132E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132E - ,simpleLowerCaseMapping:0x132E - ,simpleTitleCaseMapping:0x132E - }, - { code:0x132F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x132F - ,simpleLowerCaseMapping:0x132F - ,simpleTitleCaseMapping:0x132F - }, - { code:0x1330 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1330 - ,simpleLowerCaseMapping:0x1330 - ,simpleTitleCaseMapping:0x1330 - }, - { code:0x1331 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1331 - ,simpleLowerCaseMapping:0x1331 - ,simpleTitleCaseMapping:0x1331 - }, - { code:0x1332 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1332 - ,simpleLowerCaseMapping:0x1332 - ,simpleTitleCaseMapping:0x1332 - }, - { code:0x1333 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1333 - ,simpleLowerCaseMapping:0x1333 - ,simpleTitleCaseMapping:0x1333 - }, - { code:0x1334 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1334 - ,simpleLowerCaseMapping:0x1334 - ,simpleTitleCaseMapping:0x1334 - }, - { code:0x1335 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1335 - ,simpleLowerCaseMapping:0x1335 - ,simpleTitleCaseMapping:0x1335 - }, - { code:0x1336 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1336 - ,simpleLowerCaseMapping:0x1336 - ,simpleTitleCaseMapping:0x1336 - }, - { code:0x1337 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1337 - ,simpleLowerCaseMapping:0x1337 - ,simpleTitleCaseMapping:0x1337 - }, - { code:0x1338 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1338 - ,simpleLowerCaseMapping:0x1338 - ,simpleTitleCaseMapping:0x1338 - }, - { code:0x1339 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1339 - ,simpleLowerCaseMapping:0x1339 - ,simpleTitleCaseMapping:0x1339 - }, - { code:0x133A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133A - ,simpleLowerCaseMapping:0x133A - ,simpleTitleCaseMapping:0x133A - }, - { code:0x133B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133B - ,simpleLowerCaseMapping:0x133B - ,simpleTitleCaseMapping:0x133B - }, - { code:0x133C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133C - ,simpleLowerCaseMapping:0x133C - ,simpleTitleCaseMapping:0x133C - }, - { code:0x133D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133D - ,simpleLowerCaseMapping:0x133D - ,simpleTitleCaseMapping:0x133D - }, - { code:0x133E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133E - ,simpleLowerCaseMapping:0x133E - ,simpleTitleCaseMapping:0x133E - }, - { code:0x133F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x133F - ,simpleLowerCaseMapping:0x133F - ,simpleTitleCaseMapping:0x133F - }, - { code:0x1340 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1340 - ,simpleLowerCaseMapping:0x1340 - ,simpleTitleCaseMapping:0x1340 - }, - { code:0x1341 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1341 - ,simpleLowerCaseMapping:0x1341 - ,simpleTitleCaseMapping:0x1341 - }, - { code:0x1342 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1342 - ,simpleLowerCaseMapping:0x1342 - ,simpleTitleCaseMapping:0x1342 - }, - { code:0x1343 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1343 - ,simpleLowerCaseMapping:0x1343 - ,simpleTitleCaseMapping:0x1343 - }, - { code:0x1344 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1344 - ,simpleLowerCaseMapping:0x1344 - ,simpleTitleCaseMapping:0x1344 - }, - { code:0x1345 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1345 - ,simpleLowerCaseMapping:0x1345 - ,simpleTitleCaseMapping:0x1345 - }, - { code:0x1346 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1346 - ,simpleLowerCaseMapping:0x1346 - ,simpleTitleCaseMapping:0x1346 - }, - { code:0x1347 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1347 - ,simpleLowerCaseMapping:0x1347 - ,simpleTitleCaseMapping:0x1347 - }, - { code:0x1348 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1348 - ,simpleLowerCaseMapping:0x1348 - ,simpleTitleCaseMapping:0x1348 - }, - { code:0x1349 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1349 - ,simpleLowerCaseMapping:0x1349 - ,simpleTitleCaseMapping:0x1349 - }, - { code:0x134A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134A - ,simpleLowerCaseMapping:0x134A - ,simpleTitleCaseMapping:0x134A - }, - { code:0x134B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134B - ,simpleLowerCaseMapping:0x134B - ,simpleTitleCaseMapping:0x134B - }, - { code:0x134C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134C - ,simpleLowerCaseMapping:0x134C - ,simpleTitleCaseMapping:0x134C - }, - { code:0x134D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134D - ,simpleLowerCaseMapping:0x134D - ,simpleTitleCaseMapping:0x134D - }, - { code:0x134E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134E - ,simpleLowerCaseMapping:0x134E - ,simpleTitleCaseMapping:0x134E - }, - { code:0x134F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x134F - ,simpleLowerCaseMapping:0x134F - ,simpleTitleCaseMapping:0x134F - }, - { code:0x1350 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1350 - ,simpleLowerCaseMapping:0x1350 - ,simpleTitleCaseMapping:0x1350 - }, - { code:0x1351 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1351 - ,simpleLowerCaseMapping:0x1351 - ,simpleTitleCaseMapping:0x1351 - }, - { code:0x1352 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1352 - ,simpleLowerCaseMapping:0x1352 - ,simpleTitleCaseMapping:0x1352 - }, - { code:0x1353 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1353 - ,simpleLowerCaseMapping:0x1353 - ,simpleTitleCaseMapping:0x1353 - }, - { code:0x1354 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1354 - ,simpleLowerCaseMapping:0x1354 - ,simpleTitleCaseMapping:0x1354 - }, - { code:0x1355 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1355 - ,simpleLowerCaseMapping:0x1355 - ,simpleTitleCaseMapping:0x1355 - }, - { code:0x1356 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1356 - ,simpleLowerCaseMapping:0x1356 - ,simpleTitleCaseMapping:0x1356 - }, - { code:0x1357 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1357 - ,simpleLowerCaseMapping:0x1357 - ,simpleTitleCaseMapping:0x1357 - }, - { code:0x1358 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1358 - ,simpleLowerCaseMapping:0x1358 - ,simpleTitleCaseMapping:0x1358 - }, - { code:0x1359 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1359 - ,simpleLowerCaseMapping:0x1359 - ,simpleTitleCaseMapping:0x1359 - }, - { code:0x135A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x135A - ,simpleLowerCaseMapping:0x135A - ,simpleTitleCaseMapping:0x135A - }, - { code:0x135F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x135F - ,simpleLowerCaseMapping:0x135F - ,simpleTitleCaseMapping:0x135F - }, - { code:0x1360 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1360 - ,simpleLowerCaseMapping:0x1360 - ,simpleTitleCaseMapping:0x1360 - }, - { code:0x1361 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1361 - ,simpleLowerCaseMapping:0x1361 - ,simpleTitleCaseMapping:0x1361 - }, - { code:0x1362 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1362 - ,simpleLowerCaseMapping:0x1362 - ,simpleTitleCaseMapping:0x1362 - }, - { code:0x1363 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1363 - ,simpleLowerCaseMapping:0x1363 - ,simpleTitleCaseMapping:0x1363 - }, - { code:0x1364 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1364 - ,simpleLowerCaseMapping:0x1364 - ,simpleTitleCaseMapping:0x1364 - }, - { code:0x1365 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1365 - ,simpleLowerCaseMapping:0x1365 - ,simpleTitleCaseMapping:0x1365 - }, - { code:0x1366 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1366 - ,simpleLowerCaseMapping:0x1366 - ,simpleTitleCaseMapping:0x1366 - }, - { code:0x1367 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1367 - ,simpleLowerCaseMapping:0x1367 - ,simpleTitleCaseMapping:0x1367 - }, - { code:0x1368 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1368 - ,simpleLowerCaseMapping:0x1368 - ,simpleTitleCaseMapping:0x1368 - }, - { code:0x1369 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1369 - ,simpleLowerCaseMapping:0x1369 - ,simpleTitleCaseMapping:0x1369 - }, - { code:0x136A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136A - ,simpleLowerCaseMapping:0x136A - ,simpleTitleCaseMapping:0x136A - }, - { code:0x136B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136B - ,simpleLowerCaseMapping:0x136B - ,simpleTitleCaseMapping:0x136B - }, - { code:0x136C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136C - ,simpleLowerCaseMapping:0x136C - ,simpleTitleCaseMapping:0x136C - }, - { code:0x136D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136D - ,simpleLowerCaseMapping:0x136D - ,simpleTitleCaseMapping:0x136D - }, - { code:0x136E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136E - ,simpleLowerCaseMapping:0x136E - ,simpleTitleCaseMapping:0x136E - }, - { code:0x136F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x136F - ,simpleLowerCaseMapping:0x136F - ,simpleTitleCaseMapping:0x136F - }, - { code:0x1370 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1370 - ,simpleLowerCaseMapping:0x1370 - ,simpleTitleCaseMapping:0x1370 - }, - { code:0x1371 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1371 - ,simpleLowerCaseMapping:0x1371 - ,simpleTitleCaseMapping:0x1371 - }, - { code:0x1372 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1372 - ,simpleLowerCaseMapping:0x1372 - ,simpleTitleCaseMapping:0x1372 - }, - { code:0x1373 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1373 - ,simpleLowerCaseMapping:0x1373 - ,simpleTitleCaseMapping:0x1373 - }, - { code:0x1374 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1374 - ,simpleLowerCaseMapping:0x1374 - ,simpleTitleCaseMapping:0x1374 - }, - { code:0x1375 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1375 - ,simpleLowerCaseMapping:0x1375 - ,simpleTitleCaseMapping:0x1375 - }, - { code:0x1376 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1376 - ,simpleLowerCaseMapping:0x1376 - ,simpleTitleCaseMapping:0x1376 - }, - { code:0x1377 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1377 - ,simpleLowerCaseMapping:0x1377 - ,simpleTitleCaseMapping:0x1377 - }, - { code:0x1378 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1378 - ,simpleLowerCaseMapping:0x1378 - ,simpleTitleCaseMapping:0x1378 - }, - { code:0x1379 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1379 - ,simpleLowerCaseMapping:0x1379 - ,simpleTitleCaseMapping:0x1379 - }, - { code:0x137A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x137A - ,simpleLowerCaseMapping:0x137A - ,simpleTitleCaseMapping:0x137A - }, - { code:0x137B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x137B - ,simpleLowerCaseMapping:0x137B - ,simpleTitleCaseMapping:0x137B - }, - { code:0x137C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x137C - ,simpleLowerCaseMapping:0x137C - ,simpleTitleCaseMapping:0x137C - }, - { code:0x1380 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1380 - ,simpleLowerCaseMapping:0x1380 - ,simpleTitleCaseMapping:0x1380 - }, - { code:0x1381 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1381 - ,simpleLowerCaseMapping:0x1381 - ,simpleTitleCaseMapping:0x1381 - }, - { code:0x1382 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1382 - ,simpleLowerCaseMapping:0x1382 - ,simpleTitleCaseMapping:0x1382 - }, - { code:0x1383 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1383 - ,simpleLowerCaseMapping:0x1383 - ,simpleTitleCaseMapping:0x1383 - }, - { code:0x1384 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1384 - ,simpleLowerCaseMapping:0x1384 - ,simpleTitleCaseMapping:0x1384 - }, - { code:0x1385 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1385 - ,simpleLowerCaseMapping:0x1385 - ,simpleTitleCaseMapping:0x1385 - }, - { code:0x1386 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1386 - ,simpleLowerCaseMapping:0x1386 - ,simpleTitleCaseMapping:0x1386 - }, - { code:0x1387 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1387 - ,simpleLowerCaseMapping:0x1387 - ,simpleTitleCaseMapping:0x1387 - }, - { code:0x1388 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1388 - ,simpleLowerCaseMapping:0x1388 - ,simpleTitleCaseMapping:0x1388 - }, - { code:0x1389 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1389 - ,simpleLowerCaseMapping:0x1389 - ,simpleTitleCaseMapping:0x1389 - }, - { code:0x138A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138A - ,simpleLowerCaseMapping:0x138A - ,simpleTitleCaseMapping:0x138A - }, - { code:0x138B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138B - ,simpleLowerCaseMapping:0x138B - ,simpleTitleCaseMapping:0x138B - }, - { code:0x138C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138C - ,simpleLowerCaseMapping:0x138C - ,simpleTitleCaseMapping:0x138C - }, - { code:0x138D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138D - ,simpleLowerCaseMapping:0x138D - ,simpleTitleCaseMapping:0x138D - }, - { code:0x138E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138E - ,simpleLowerCaseMapping:0x138E - ,simpleTitleCaseMapping:0x138E - }, - { code:0x138F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x138F - ,simpleLowerCaseMapping:0x138F - ,simpleTitleCaseMapping:0x138F - }, - { code:0x1390 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1390 - ,simpleLowerCaseMapping:0x1390 - ,simpleTitleCaseMapping:0x1390 - }, - { code:0x1391 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1391 - ,simpleLowerCaseMapping:0x1391 - ,simpleTitleCaseMapping:0x1391 - }, - { code:0x1392 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1392 - ,simpleLowerCaseMapping:0x1392 - ,simpleTitleCaseMapping:0x1392 - }, - { code:0x1393 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1393 - ,simpleLowerCaseMapping:0x1393 - ,simpleTitleCaseMapping:0x1393 - }, - { code:0x1394 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1394 - ,simpleLowerCaseMapping:0x1394 - ,simpleTitleCaseMapping:0x1394 - }, - { code:0x1395 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1395 - ,simpleLowerCaseMapping:0x1395 - ,simpleTitleCaseMapping:0x1395 - }, - { code:0x1396 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1396 - ,simpleLowerCaseMapping:0x1396 - ,simpleTitleCaseMapping:0x1396 - }, - { code:0x1397 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1397 - ,simpleLowerCaseMapping:0x1397 - ,simpleTitleCaseMapping:0x1397 - }, - { code:0x1398 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1398 - ,simpleLowerCaseMapping:0x1398 - ,simpleTitleCaseMapping:0x1398 - }, - { code:0x1399 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1399 - ,simpleLowerCaseMapping:0x1399 - ,simpleTitleCaseMapping:0x1399 - }, - { code:0x13A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A0 - ,simpleLowerCaseMapping:0x13A0 - ,simpleTitleCaseMapping:0x13A0 - }, - { code:0x13A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A1 - ,simpleLowerCaseMapping:0x13A1 - ,simpleTitleCaseMapping:0x13A1 - }, - { code:0x13A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A2 - ,simpleLowerCaseMapping:0x13A2 - ,simpleTitleCaseMapping:0x13A2 - }, - { code:0x13A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A3 - ,simpleLowerCaseMapping:0x13A3 - ,simpleTitleCaseMapping:0x13A3 - }, - { code:0x13A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A4 - ,simpleLowerCaseMapping:0x13A4 - ,simpleTitleCaseMapping:0x13A4 - }, - { code:0x13A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A5 - ,simpleLowerCaseMapping:0x13A5 - ,simpleTitleCaseMapping:0x13A5 - }, - { code:0x13A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A6 - ,simpleLowerCaseMapping:0x13A6 - ,simpleTitleCaseMapping:0x13A6 - }, - { code:0x13A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A7 - ,simpleLowerCaseMapping:0x13A7 - ,simpleTitleCaseMapping:0x13A7 - }, - { code:0x13A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A8 - ,simpleLowerCaseMapping:0x13A8 - ,simpleTitleCaseMapping:0x13A8 - }, - { code:0x13A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13A9 - ,simpleLowerCaseMapping:0x13A9 - ,simpleTitleCaseMapping:0x13A9 - }, - { code:0x13AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AA - ,simpleLowerCaseMapping:0x13AA - ,simpleTitleCaseMapping:0x13AA - }, - { code:0x13AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AB - ,simpleLowerCaseMapping:0x13AB - ,simpleTitleCaseMapping:0x13AB - }, - { code:0x13AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AC - ,simpleLowerCaseMapping:0x13AC - ,simpleTitleCaseMapping:0x13AC - }, - { code:0x13AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AD - ,simpleLowerCaseMapping:0x13AD - ,simpleTitleCaseMapping:0x13AD - }, - { code:0x13AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AE - ,simpleLowerCaseMapping:0x13AE - ,simpleTitleCaseMapping:0x13AE - }, - { code:0x13AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13AF - ,simpleLowerCaseMapping:0x13AF - ,simpleTitleCaseMapping:0x13AF - }, - { code:0x13B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B0 - ,simpleLowerCaseMapping:0x13B0 - ,simpleTitleCaseMapping:0x13B0 - }, - { code:0x13B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B1 - ,simpleLowerCaseMapping:0x13B1 - ,simpleTitleCaseMapping:0x13B1 - }, - { code:0x13B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B2 - ,simpleLowerCaseMapping:0x13B2 - ,simpleTitleCaseMapping:0x13B2 - }, - { code:0x13B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B3 - ,simpleLowerCaseMapping:0x13B3 - ,simpleTitleCaseMapping:0x13B3 - }, - { code:0x13B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B4 - ,simpleLowerCaseMapping:0x13B4 - ,simpleTitleCaseMapping:0x13B4 - }, - { code:0x13B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B5 - ,simpleLowerCaseMapping:0x13B5 - ,simpleTitleCaseMapping:0x13B5 - }, - { code:0x13B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B6 - ,simpleLowerCaseMapping:0x13B6 - ,simpleTitleCaseMapping:0x13B6 - }, - { code:0x13B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B7 - ,simpleLowerCaseMapping:0x13B7 - ,simpleTitleCaseMapping:0x13B7 - }, - { code:0x13B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B8 - ,simpleLowerCaseMapping:0x13B8 - ,simpleTitleCaseMapping:0x13B8 - }, - { code:0x13B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13B9 - ,simpleLowerCaseMapping:0x13B9 - ,simpleTitleCaseMapping:0x13B9 - }, - { code:0x13BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BA - ,simpleLowerCaseMapping:0x13BA - ,simpleTitleCaseMapping:0x13BA - }, - { code:0x13BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BB - ,simpleLowerCaseMapping:0x13BB - ,simpleTitleCaseMapping:0x13BB - }, - { code:0x13BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BC - ,simpleLowerCaseMapping:0x13BC - ,simpleTitleCaseMapping:0x13BC - }, - { code:0x13BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BD - ,simpleLowerCaseMapping:0x13BD - ,simpleTitleCaseMapping:0x13BD - }, - { code:0x13BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BE - ,simpleLowerCaseMapping:0x13BE - ,simpleTitleCaseMapping:0x13BE - }, - { code:0x13BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13BF - ,simpleLowerCaseMapping:0x13BF - ,simpleTitleCaseMapping:0x13BF - }, - { code:0x13C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C0 - ,simpleLowerCaseMapping:0x13C0 - ,simpleTitleCaseMapping:0x13C0 - }, - { code:0x13C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C1 - ,simpleLowerCaseMapping:0x13C1 - ,simpleTitleCaseMapping:0x13C1 - }, - { code:0x13C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C2 - ,simpleLowerCaseMapping:0x13C2 - ,simpleTitleCaseMapping:0x13C2 - }, - { code:0x13C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C3 - ,simpleLowerCaseMapping:0x13C3 - ,simpleTitleCaseMapping:0x13C3 - }, - { code:0x13C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C4 - ,simpleLowerCaseMapping:0x13C4 - ,simpleTitleCaseMapping:0x13C4 - }, - { code:0x13C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C5 - ,simpleLowerCaseMapping:0x13C5 - ,simpleTitleCaseMapping:0x13C5 - }, - { code:0x13C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C6 - ,simpleLowerCaseMapping:0x13C6 - ,simpleTitleCaseMapping:0x13C6 - }, - { code:0x13C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C7 - ,simpleLowerCaseMapping:0x13C7 - ,simpleTitleCaseMapping:0x13C7 - }, - { code:0x13C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C8 - ,simpleLowerCaseMapping:0x13C8 - ,simpleTitleCaseMapping:0x13C8 - }, - { code:0x13C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13C9 - ,simpleLowerCaseMapping:0x13C9 - ,simpleTitleCaseMapping:0x13C9 - }, - { code:0x13CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CA - ,simpleLowerCaseMapping:0x13CA - ,simpleTitleCaseMapping:0x13CA - }, - { code:0x13CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CB - ,simpleLowerCaseMapping:0x13CB - ,simpleTitleCaseMapping:0x13CB - }, - { code:0x13CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CC - ,simpleLowerCaseMapping:0x13CC - ,simpleTitleCaseMapping:0x13CC - }, - { code:0x13CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CD - ,simpleLowerCaseMapping:0x13CD - ,simpleTitleCaseMapping:0x13CD - }, - { code:0x13CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CE - ,simpleLowerCaseMapping:0x13CE - ,simpleTitleCaseMapping:0x13CE - }, - { code:0x13CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13CF - ,simpleLowerCaseMapping:0x13CF - ,simpleTitleCaseMapping:0x13CF - }, - { code:0x13D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D0 - ,simpleLowerCaseMapping:0x13D0 - ,simpleTitleCaseMapping:0x13D0 - }, - { code:0x13D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D1 - ,simpleLowerCaseMapping:0x13D1 - ,simpleTitleCaseMapping:0x13D1 - }, - { code:0x13D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D2 - ,simpleLowerCaseMapping:0x13D2 - ,simpleTitleCaseMapping:0x13D2 - }, - { code:0x13D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D3 - ,simpleLowerCaseMapping:0x13D3 - ,simpleTitleCaseMapping:0x13D3 - }, - { code:0x13D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D4 - ,simpleLowerCaseMapping:0x13D4 - ,simpleTitleCaseMapping:0x13D4 - }, - { code:0x13D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D5 - ,simpleLowerCaseMapping:0x13D5 - ,simpleTitleCaseMapping:0x13D5 - }, - { code:0x13D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D6 - ,simpleLowerCaseMapping:0x13D6 - ,simpleTitleCaseMapping:0x13D6 - }, - { code:0x13D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D7 - ,simpleLowerCaseMapping:0x13D7 - ,simpleTitleCaseMapping:0x13D7 - }, - { code:0x13D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D8 - ,simpleLowerCaseMapping:0x13D8 - ,simpleTitleCaseMapping:0x13D8 - }, - { code:0x13D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13D9 - ,simpleLowerCaseMapping:0x13D9 - ,simpleTitleCaseMapping:0x13D9 - }, - { code:0x13DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DA - ,simpleLowerCaseMapping:0x13DA - ,simpleTitleCaseMapping:0x13DA - }, - { code:0x13DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DB - ,simpleLowerCaseMapping:0x13DB - ,simpleTitleCaseMapping:0x13DB - }, - { code:0x13DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DC - ,simpleLowerCaseMapping:0x13DC - ,simpleTitleCaseMapping:0x13DC - }, - { code:0x13DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DD - ,simpleLowerCaseMapping:0x13DD - ,simpleTitleCaseMapping:0x13DD - }, - { code:0x13DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DE - ,simpleLowerCaseMapping:0x13DE - ,simpleTitleCaseMapping:0x13DE - }, - { code:0x13DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13DF - ,simpleLowerCaseMapping:0x13DF - ,simpleTitleCaseMapping:0x13DF - }, - { code:0x13E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E0 - ,simpleLowerCaseMapping:0x13E0 - ,simpleTitleCaseMapping:0x13E0 - }, - { code:0x13E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E1 - ,simpleLowerCaseMapping:0x13E1 - ,simpleTitleCaseMapping:0x13E1 - }, - { code:0x13E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E2 - ,simpleLowerCaseMapping:0x13E2 - ,simpleTitleCaseMapping:0x13E2 - }, - { code:0x13E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E3 - ,simpleLowerCaseMapping:0x13E3 - ,simpleTitleCaseMapping:0x13E3 - }, - { code:0x13E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E4 - ,simpleLowerCaseMapping:0x13E4 - ,simpleTitleCaseMapping:0x13E4 - }, - { code:0x13E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E5 - ,simpleLowerCaseMapping:0x13E5 - ,simpleTitleCaseMapping:0x13E5 - }, - { code:0x13E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E6 - ,simpleLowerCaseMapping:0x13E6 - ,simpleTitleCaseMapping:0x13E6 - }, - { code:0x13E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E7 - ,simpleLowerCaseMapping:0x13E7 - ,simpleTitleCaseMapping:0x13E7 - }, - { code:0x13E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E8 - ,simpleLowerCaseMapping:0x13E8 - ,simpleTitleCaseMapping:0x13E8 - }, - { code:0x13E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13E9 - ,simpleLowerCaseMapping:0x13E9 - ,simpleTitleCaseMapping:0x13E9 - }, - { code:0x13EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13EA - ,simpleLowerCaseMapping:0x13EA - ,simpleTitleCaseMapping:0x13EA - }, - { code:0x13EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13EB - ,simpleLowerCaseMapping:0x13EB - ,simpleTitleCaseMapping:0x13EB - }, - { code:0x13EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13EC - ,simpleLowerCaseMapping:0x13EC - ,simpleTitleCaseMapping:0x13EC - }, - { code:0x13ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13ED - ,simpleLowerCaseMapping:0x13ED - ,simpleTitleCaseMapping:0x13ED - }, - { code:0x13EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13EE - ,simpleLowerCaseMapping:0x13EE - ,simpleTitleCaseMapping:0x13EE - }, - { code:0x13EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13EF - ,simpleLowerCaseMapping:0x13EF - ,simpleTitleCaseMapping:0x13EF - }, - { code:0x13F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13F0 - ,simpleLowerCaseMapping:0x13F0 - ,simpleTitleCaseMapping:0x13F0 - }, - { code:0x13F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13F1 - ,simpleLowerCaseMapping:0x13F1 - ,simpleTitleCaseMapping:0x13F1 - }, - { code:0x13F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13F2 - ,simpleLowerCaseMapping:0x13F2 - ,simpleTitleCaseMapping:0x13F2 - }, - { code:0x13F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13F3 - ,simpleLowerCaseMapping:0x13F3 - ,simpleTitleCaseMapping:0x13F3 - }, - { code:0x13F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x13F4 - ,simpleLowerCaseMapping:0x13F4 - ,simpleTitleCaseMapping:0x13F4 - }, - { code:0x1401 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1401 - ,simpleLowerCaseMapping:0x1401 - ,simpleTitleCaseMapping:0x1401 - }, - { code:0x1402 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1402 - ,simpleLowerCaseMapping:0x1402 - ,simpleTitleCaseMapping:0x1402 - }, - { code:0x1403 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1403 - ,simpleLowerCaseMapping:0x1403 - ,simpleTitleCaseMapping:0x1403 - }, - { code:0x1404 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1404 - ,simpleLowerCaseMapping:0x1404 - ,simpleTitleCaseMapping:0x1404 - }, - { code:0x1405 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1405 - ,simpleLowerCaseMapping:0x1405 - ,simpleTitleCaseMapping:0x1405 - }, - { code:0x1406 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1406 - ,simpleLowerCaseMapping:0x1406 - ,simpleTitleCaseMapping:0x1406 - }, - { code:0x1407 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1407 - ,simpleLowerCaseMapping:0x1407 - ,simpleTitleCaseMapping:0x1407 - }, - { code:0x1408 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1408 - ,simpleLowerCaseMapping:0x1408 - ,simpleTitleCaseMapping:0x1408 - }, - { code:0x1409 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1409 - ,simpleLowerCaseMapping:0x1409 - ,simpleTitleCaseMapping:0x1409 - }, - { code:0x140A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140A - ,simpleLowerCaseMapping:0x140A - ,simpleTitleCaseMapping:0x140A - }, - { code:0x140B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140B - ,simpleLowerCaseMapping:0x140B - ,simpleTitleCaseMapping:0x140B - }, - { code:0x140C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140C - ,simpleLowerCaseMapping:0x140C - ,simpleTitleCaseMapping:0x140C - }, - { code:0x140D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140D - ,simpleLowerCaseMapping:0x140D - ,simpleTitleCaseMapping:0x140D - }, - { code:0x140E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140E - ,simpleLowerCaseMapping:0x140E - ,simpleTitleCaseMapping:0x140E - }, - { code:0x140F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x140F - ,simpleLowerCaseMapping:0x140F - ,simpleTitleCaseMapping:0x140F - }, - { code:0x1410 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1410 - ,simpleLowerCaseMapping:0x1410 - ,simpleTitleCaseMapping:0x1410 - }, - { code:0x1411 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1411 - ,simpleLowerCaseMapping:0x1411 - ,simpleTitleCaseMapping:0x1411 - }, - { code:0x1412 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1412 - ,simpleLowerCaseMapping:0x1412 - ,simpleTitleCaseMapping:0x1412 - }, - { code:0x1413 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1413 - ,simpleLowerCaseMapping:0x1413 - ,simpleTitleCaseMapping:0x1413 - }, - { code:0x1414 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1414 - ,simpleLowerCaseMapping:0x1414 - ,simpleTitleCaseMapping:0x1414 - }, - { code:0x1415 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1415 - ,simpleLowerCaseMapping:0x1415 - ,simpleTitleCaseMapping:0x1415 - }, - { code:0x1416 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1416 - ,simpleLowerCaseMapping:0x1416 - ,simpleTitleCaseMapping:0x1416 - }, - { code:0x1417 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1417 - ,simpleLowerCaseMapping:0x1417 - ,simpleTitleCaseMapping:0x1417 - }, - { code:0x1418 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1418 - ,simpleLowerCaseMapping:0x1418 - ,simpleTitleCaseMapping:0x1418 - }, - { code:0x1419 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1419 - ,simpleLowerCaseMapping:0x1419 - ,simpleTitleCaseMapping:0x1419 - }, - { code:0x141A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141A - ,simpleLowerCaseMapping:0x141A - ,simpleTitleCaseMapping:0x141A - }, - { code:0x141B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141B - ,simpleLowerCaseMapping:0x141B - ,simpleTitleCaseMapping:0x141B - }, - { code:0x141C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141C - ,simpleLowerCaseMapping:0x141C - ,simpleTitleCaseMapping:0x141C - }, - { code:0x141D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141D - ,simpleLowerCaseMapping:0x141D - ,simpleTitleCaseMapping:0x141D - }, - { code:0x141E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141E - ,simpleLowerCaseMapping:0x141E - ,simpleTitleCaseMapping:0x141E - }, - { code:0x141F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x141F - ,simpleLowerCaseMapping:0x141F - ,simpleTitleCaseMapping:0x141F - }, - { code:0x1420 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1420 - ,simpleLowerCaseMapping:0x1420 - ,simpleTitleCaseMapping:0x1420 - }, - { code:0x1421 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1421 - ,simpleLowerCaseMapping:0x1421 - ,simpleTitleCaseMapping:0x1421 - }, - { code:0x1422 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1422 - ,simpleLowerCaseMapping:0x1422 - ,simpleTitleCaseMapping:0x1422 - }, - { code:0x1423 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1423 - ,simpleLowerCaseMapping:0x1423 - ,simpleTitleCaseMapping:0x1423 - }, - { code:0x1424 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1424 - ,simpleLowerCaseMapping:0x1424 - ,simpleTitleCaseMapping:0x1424 - }, - { code:0x1425 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1425 - ,simpleLowerCaseMapping:0x1425 - ,simpleTitleCaseMapping:0x1425 - }, - { code:0x1426 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1426 - ,simpleLowerCaseMapping:0x1426 - ,simpleTitleCaseMapping:0x1426 - }, - { code:0x1427 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1427 - ,simpleLowerCaseMapping:0x1427 - ,simpleTitleCaseMapping:0x1427 - }, - { code:0x1428 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1428 - ,simpleLowerCaseMapping:0x1428 - ,simpleTitleCaseMapping:0x1428 - }, - { code:0x1429 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1429 - ,simpleLowerCaseMapping:0x1429 - ,simpleTitleCaseMapping:0x1429 - }, - { code:0x142A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142A - ,simpleLowerCaseMapping:0x142A - ,simpleTitleCaseMapping:0x142A - }, - { code:0x142B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142B - ,simpleLowerCaseMapping:0x142B - ,simpleTitleCaseMapping:0x142B - }, - { code:0x142C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142C - ,simpleLowerCaseMapping:0x142C - ,simpleTitleCaseMapping:0x142C - }, - { code:0x142D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142D - ,simpleLowerCaseMapping:0x142D - ,simpleTitleCaseMapping:0x142D - }, - { code:0x142E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142E - ,simpleLowerCaseMapping:0x142E - ,simpleTitleCaseMapping:0x142E - }, - { code:0x142F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x142F - ,simpleLowerCaseMapping:0x142F - ,simpleTitleCaseMapping:0x142F - }, - { code:0x1430 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1430 - ,simpleLowerCaseMapping:0x1430 - ,simpleTitleCaseMapping:0x1430 - }, - { code:0x1431 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1431 - ,simpleLowerCaseMapping:0x1431 - ,simpleTitleCaseMapping:0x1431 - }, - { code:0x1432 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1432 - ,simpleLowerCaseMapping:0x1432 - ,simpleTitleCaseMapping:0x1432 - }, - { code:0x1433 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1433 - ,simpleLowerCaseMapping:0x1433 - ,simpleTitleCaseMapping:0x1433 - }, - { code:0x1434 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1434 - ,simpleLowerCaseMapping:0x1434 - ,simpleTitleCaseMapping:0x1434 - }, - { code:0x1435 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1435 - ,simpleLowerCaseMapping:0x1435 - ,simpleTitleCaseMapping:0x1435 - }, - { code:0x1436 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1436 - ,simpleLowerCaseMapping:0x1436 - ,simpleTitleCaseMapping:0x1436 - }, - { code:0x1437 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1437 - ,simpleLowerCaseMapping:0x1437 - ,simpleTitleCaseMapping:0x1437 - }, - { code:0x1438 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1438 - ,simpleLowerCaseMapping:0x1438 - ,simpleTitleCaseMapping:0x1438 - }, - { code:0x1439 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1439 - ,simpleLowerCaseMapping:0x1439 - ,simpleTitleCaseMapping:0x1439 - }, - { code:0x143A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143A - ,simpleLowerCaseMapping:0x143A - ,simpleTitleCaseMapping:0x143A - }, - { code:0x143B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143B - ,simpleLowerCaseMapping:0x143B - ,simpleTitleCaseMapping:0x143B - }, - { code:0x143C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143C - ,simpleLowerCaseMapping:0x143C - ,simpleTitleCaseMapping:0x143C - }, - { code:0x143D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143D - ,simpleLowerCaseMapping:0x143D - ,simpleTitleCaseMapping:0x143D - }, - { code:0x143E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143E - ,simpleLowerCaseMapping:0x143E - ,simpleTitleCaseMapping:0x143E - }, - { code:0x143F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x143F - ,simpleLowerCaseMapping:0x143F - ,simpleTitleCaseMapping:0x143F - }, - { code:0x1440 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1440 - ,simpleLowerCaseMapping:0x1440 - ,simpleTitleCaseMapping:0x1440 - }, - { code:0x1441 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1441 - ,simpleLowerCaseMapping:0x1441 - ,simpleTitleCaseMapping:0x1441 - }, - { code:0x1442 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1442 - ,simpleLowerCaseMapping:0x1442 - ,simpleTitleCaseMapping:0x1442 - }, - { code:0x1443 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1443 - ,simpleLowerCaseMapping:0x1443 - ,simpleTitleCaseMapping:0x1443 - }, - { code:0x1444 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1444 - ,simpleLowerCaseMapping:0x1444 - ,simpleTitleCaseMapping:0x1444 - }, - { code:0x1445 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1445 - ,simpleLowerCaseMapping:0x1445 - ,simpleTitleCaseMapping:0x1445 - }, - { code:0x1446 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1446 - ,simpleLowerCaseMapping:0x1446 - ,simpleTitleCaseMapping:0x1446 - }, - { code:0x1447 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1447 - ,simpleLowerCaseMapping:0x1447 - ,simpleTitleCaseMapping:0x1447 - }, - { code:0x1448 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1448 - ,simpleLowerCaseMapping:0x1448 - ,simpleTitleCaseMapping:0x1448 - }, - { code:0x1449 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1449 - ,simpleLowerCaseMapping:0x1449 - ,simpleTitleCaseMapping:0x1449 - }, - { code:0x144A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144A - ,simpleLowerCaseMapping:0x144A - ,simpleTitleCaseMapping:0x144A - }, - { code:0x144B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144B - ,simpleLowerCaseMapping:0x144B - ,simpleTitleCaseMapping:0x144B - }, - { code:0x144C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144C - ,simpleLowerCaseMapping:0x144C - ,simpleTitleCaseMapping:0x144C - }, - { code:0x144D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144D - ,simpleLowerCaseMapping:0x144D - ,simpleTitleCaseMapping:0x144D - }, - { code:0x144E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144E - ,simpleLowerCaseMapping:0x144E - ,simpleTitleCaseMapping:0x144E - }, - { code:0x144F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x144F - ,simpleLowerCaseMapping:0x144F - ,simpleTitleCaseMapping:0x144F - }, - { code:0x1450 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1450 - ,simpleLowerCaseMapping:0x1450 - ,simpleTitleCaseMapping:0x1450 - }, - { code:0x1451 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1451 - ,simpleLowerCaseMapping:0x1451 - ,simpleTitleCaseMapping:0x1451 - }, - { code:0x1452 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1452 - ,simpleLowerCaseMapping:0x1452 - ,simpleTitleCaseMapping:0x1452 - }, - { code:0x1453 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1453 - ,simpleLowerCaseMapping:0x1453 - ,simpleTitleCaseMapping:0x1453 - }, - { code:0x1454 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1454 - ,simpleLowerCaseMapping:0x1454 - ,simpleTitleCaseMapping:0x1454 - }, - { code:0x1455 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1455 - ,simpleLowerCaseMapping:0x1455 - ,simpleTitleCaseMapping:0x1455 - }, - { code:0x1456 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1456 - ,simpleLowerCaseMapping:0x1456 - ,simpleTitleCaseMapping:0x1456 - }, - { code:0x1457 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1457 - ,simpleLowerCaseMapping:0x1457 - ,simpleTitleCaseMapping:0x1457 - }, - { code:0x1458 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1458 - ,simpleLowerCaseMapping:0x1458 - ,simpleTitleCaseMapping:0x1458 - }, - { code:0x1459 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1459 - ,simpleLowerCaseMapping:0x1459 - ,simpleTitleCaseMapping:0x1459 - }, - { code:0x145A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145A - ,simpleLowerCaseMapping:0x145A - ,simpleTitleCaseMapping:0x145A - }, - { code:0x145B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145B - ,simpleLowerCaseMapping:0x145B - ,simpleTitleCaseMapping:0x145B - }, - { code:0x145C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145C - ,simpleLowerCaseMapping:0x145C - ,simpleTitleCaseMapping:0x145C - }, - { code:0x145D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145D - ,simpleLowerCaseMapping:0x145D - ,simpleTitleCaseMapping:0x145D - }, - { code:0x145E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145E - ,simpleLowerCaseMapping:0x145E - ,simpleTitleCaseMapping:0x145E - }, - { code:0x145F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x145F - ,simpleLowerCaseMapping:0x145F - ,simpleTitleCaseMapping:0x145F - }, - { code:0x1460 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1460 - ,simpleLowerCaseMapping:0x1460 - ,simpleTitleCaseMapping:0x1460 - }, - { code:0x1461 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1461 - ,simpleLowerCaseMapping:0x1461 - ,simpleTitleCaseMapping:0x1461 - }, - { code:0x1462 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1462 - ,simpleLowerCaseMapping:0x1462 - ,simpleTitleCaseMapping:0x1462 - }, - { code:0x1463 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1463 - ,simpleLowerCaseMapping:0x1463 - ,simpleTitleCaseMapping:0x1463 - }, - { code:0x1464 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1464 - ,simpleLowerCaseMapping:0x1464 - ,simpleTitleCaseMapping:0x1464 - }, - { code:0x1465 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1465 - ,simpleLowerCaseMapping:0x1465 - ,simpleTitleCaseMapping:0x1465 - }, - { code:0x1466 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1466 - ,simpleLowerCaseMapping:0x1466 - ,simpleTitleCaseMapping:0x1466 - }, - { code:0x1467 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1467 - ,simpleLowerCaseMapping:0x1467 - ,simpleTitleCaseMapping:0x1467 - }, - { code:0x1468 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1468 - ,simpleLowerCaseMapping:0x1468 - ,simpleTitleCaseMapping:0x1468 - }, - { code:0x1469 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1469 - ,simpleLowerCaseMapping:0x1469 - ,simpleTitleCaseMapping:0x1469 - }, - { code:0x146A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146A - ,simpleLowerCaseMapping:0x146A - ,simpleTitleCaseMapping:0x146A - }, - { code:0x146B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146B - ,simpleLowerCaseMapping:0x146B - ,simpleTitleCaseMapping:0x146B - }, - { code:0x146C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146C - ,simpleLowerCaseMapping:0x146C - ,simpleTitleCaseMapping:0x146C - }, - { code:0x146D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146D - ,simpleLowerCaseMapping:0x146D - ,simpleTitleCaseMapping:0x146D - }, - { code:0x146E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146E - ,simpleLowerCaseMapping:0x146E - ,simpleTitleCaseMapping:0x146E - }, - { code:0x146F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x146F - ,simpleLowerCaseMapping:0x146F - ,simpleTitleCaseMapping:0x146F - }, - { code:0x1470 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1470 - ,simpleLowerCaseMapping:0x1470 - ,simpleTitleCaseMapping:0x1470 - }, - { code:0x1471 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1471 - ,simpleLowerCaseMapping:0x1471 - ,simpleTitleCaseMapping:0x1471 - }, - { code:0x1472 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1472 - ,simpleLowerCaseMapping:0x1472 - ,simpleTitleCaseMapping:0x1472 - }, - { code:0x1473 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1473 - ,simpleLowerCaseMapping:0x1473 - ,simpleTitleCaseMapping:0x1473 - }, - { code:0x1474 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1474 - ,simpleLowerCaseMapping:0x1474 - ,simpleTitleCaseMapping:0x1474 - }, - { code:0x1475 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1475 - ,simpleLowerCaseMapping:0x1475 - ,simpleTitleCaseMapping:0x1475 - }, - { code:0x1476 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1476 - ,simpleLowerCaseMapping:0x1476 - ,simpleTitleCaseMapping:0x1476 - }, - { code:0x1477 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1477 - ,simpleLowerCaseMapping:0x1477 - ,simpleTitleCaseMapping:0x1477 - }, - { code:0x1478 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1478 - ,simpleLowerCaseMapping:0x1478 - ,simpleTitleCaseMapping:0x1478 - }, - { code:0x1479 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1479 - ,simpleLowerCaseMapping:0x1479 - ,simpleTitleCaseMapping:0x1479 - }, - { code:0x147A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147A - ,simpleLowerCaseMapping:0x147A - ,simpleTitleCaseMapping:0x147A - }, - { code:0x147B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147B - ,simpleLowerCaseMapping:0x147B - ,simpleTitleCaseMapping:0x147B - }, - { code:0x147C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147C - ,simpleLowerCaseMapping:0x147C - ,simpleTitleCaseMapping:0x147C - }, - { code:0x147D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147D - ,simpleLowerCaseMapping:0x147D - ,simpleTitleCaseMapping:0x147D - }, - { code:0x147E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147E - ,simpleLowerCaseMapping:0x147E - ,simpleTitleCaseMapping:0x147E - }, - { code:0x147F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x147F - ,simpleLowerCaseMapping:0x147F - ,simpleTitleCaseMapping:0x147F - }, - { code:0x1480 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1480 - ,simpleLowerCaseMapping:0x1480 - ,simpleTitleCaseMapping:0x1480 - }, - { code:0x1481 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1481 - ,simpleLowerCaseMapping:0x1481 - ,simpleTitleCaseMapping:0x1481 - }, - { code:0x1482 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1482 - ,simpleLowerCaseMapping:0x1482 - ,simpleTitleCaseMapping:0x1482 - }, - { code:0x1483 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1483 - ,simpleLowerCaseMapping:0x1483 - ,simpleTitleCaseMapping:0x1483 - }, - { code:0x1484 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1484 - ,simpleLowerCaseMapping:0x1484 - ,simpleTitleCaseMapping:0x1484 - }, - { code:0x1485 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1485 - ,simpleLowerCaseMapping:0x1485 - ,simpleTitleCaseMapping:0x1485 - }, - { code:0x1486 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1486 - ,simpleLowerCaseMapping:0x1486 - ,simpleTitleCaseMapping:0x1486 - }, - { code:0x1487 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1487 - ,simpleLowerCaseMapping:0x1487 - ,simpleTitleCaseMapping:0x1487 - }, - { code:0x1488 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1488 - ,simpleLowerCaseMapping:0x1488 - ,simpleTitleCaseMapping:0x1488 - }, - { code:0x1489 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1489 - ,simpleLowerCaseMapping:0x1489 - ,simpleTitleCaseMapping:0x1489 - }, - { code:0x148A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148A - ,simpleLowerCaseMapping:0x148A - ,simpleTitleCaseMapping:0x148A - }, - { code:0x148B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148B - ,simpleLowerCaseMapping:0x148B - ,simpleTitleCaseMapping:0x148B - }, - { code:0x148C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148C - ,simpleLowerCaseMapping:0x148C - ,simpleTitleCaseMapping:0x148C - }, - { code:0x148D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148D - ,simpleLowerCaseMapping:0x148D - ,simpleTitleCaseMapping:0x148D - }, - { code:0x148E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148E - ,simpleLowerCaseMapping:0x148E - ,simpleTitleCaseMapping:0x148E - }, - { code:0x148F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x148F - ,simpleLowerCaseMapping:0x148F - ,simpleTitleCaseMapping:0x148F - }, - { code:0x1490 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1490 - ,simpleLowerCaseMapping:0x1490 - ,simpleTitleCaseMapping:0x1490 - }, - { code:0x1491 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1491 - ,simpleLowerCaseMapping:0x1491 - ,simpleTitleCaseMapping:0x1491 - }, - { code:0x1492 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1492 - ,simpleLowerCaseMapping:0x1492 - ,simpleTitleCaseMapping:0x1492 - }, - { code:0x1493 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1493 - ,simpleLowerCaseMapping:0x1493 - ,simpleTitleCaseMapping:0x1493 - }, - { code:0x1494 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1494 - ,simpleLowerCaseMapping:0x1494 - ,simpleTitleCaseMapping:0x1494 - }, - { code:0x1495 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1495 - ,simpleLowerCaseMapping:0x1495 - ,simpleTitleCaseMapping:0x1495 - }, - { code:0x1496 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1496 - ,simpleLowerCaseMapping:0x1496 - ,simpleTitleCaseMapping:0x1496 - }, - { code:0x1497 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1497 - ,simpleLowerCaseMapping:0x1497 - ,simpleTitleCaseMapping:0x1497 - }, - { code:0x1498 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1498 - ,simpleLowerCaseMapping:0x1498 - ,simpleTitleCaseMapping:0x1498 - }, - { code:0x1499 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1499 - ,simpleLowerCaseMapping:0x1499 - ,simpleTitleCaseMapping:0x1499 - }, - { code:0x149A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149A - ,simpleLowerCaseMapping:0x149A - ,simpleTitleCaseMapping:0x149A - }, - { code:0x149B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149B - ,simpleLowerCaseMapping:0x149B - ,simpleTitleCaseMapping:0x149B - }, - { code:0x149C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149C - ,simpleLowerCaseMapping:0x149C - ,simpleTitleCaseMapping:0x149C - }, - { code:0x149D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149D - ,simpleLowerCaseMapping:0x149D - ,simpleTitleCaseMapping:0x149D - }, - { code:0x149E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149E - ,simpleLowerCaseMapping:0x149E - ,simpleTitleCaseMapping:0x149E - }, - { code:0x149F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x149F - ,simpleLowerCaseMapping:0x149F - ,simpleTitleCaseMapping:0x149F - }, - { code:0x14A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A0 - ,simpleLowerCaseMapping:0x14A0 - ,simpleTitleCaseMapping:0x14A0 - }, - { code:0x14A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A1 - ,simpleLowerCaseMapping:0x14A1 - ,simpleTitleCaseMapping:0x14A1 - }, - { code:0x14A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A2 - ,simpleLowerCaseMapping:0x14A2 - ,simpleTitleCaseMapping:0x14A2 - }, - { code:0x14A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A3 - ,simpleLowerCaseMapping:0x14A3 - ,simpleTitleCaseMapping:0x14A3 - }, - { code:0x14A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A4 - ,simpleLowerCaseMapping:0x14A4 - ,simpleTitleCaseMapping:0x14A4 - }, - { code:0x14A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A5 - ,simpleLowerCaseMapping:0x14A5 - ,simpleTitleCaseMapping:0x14A5 - }, - { code:0x14A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A6 - ,simpleLowerCaseMapping:0x14A6 - ,simpleTitleCaseMapping:0x14A6 - }, - { code:0x14A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A7 - ,simpleLowerCaseMapping:0x14A7 - ,simpleTitleCaseMapping:0x14A7 - }, - { code:0x14A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A8 - ,simpleLowerCaseMapping:0x14A8 - ,simpleTitleCaseMapping:0x14A8 - }, - { code:0x14A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14A9 - ,simpleLowerCaseMapping:0x14A9 - ,simpleTitleCaseMapping:0x14A9 - }, - { code:0x14AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AA - ,simpleLowerCaseMapping:0x14AA - ,simpleTitleCaseMapping:0x14AA - }, - { code:0x14AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AB - ,simpleLowerCaseMapping:0x14AB - ,simpleTitleCaseMapping:0x14AB - }, - { code:0x14AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AC - ,simpleLowerCaseMapping:0x14AC - ,simpleTitleCaseMapping:0x14AC - }, - { code:0x14AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AD - ,simpleLowerCaseMapping:0x14AD - ,simpleTitleCaseMapping:0x14AD - }, - { code:0x14AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AE - ,simpleLowerCaseMapping:0x14AE - ,simpleTitleCaseMapping:0x14AE - }, - { code:0x14AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14AF - ,simpleLowerCaseMapping:0x14AF - ,simpleTitleCaseMapping:0x14AF - }, - { code:0x14B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B0 - ,simpleLowerCaseMapping:0x14B0 - ,simpleTitleCaseMapping:0x14B0 - }, - { code:0x14B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B1 - ,simpleLowerCaseMapping:0x14B1 - ,simpleTitleCaseMapping:0x14B1 - }, - { code:0x14B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B2 - ,simpleLowerCaseMapping:0x14B2 - ,simpleTitleCaseMapping:0x14B2 - }, - { code:0x14B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B3 - ,simpleLowerCaseMapping:0x14B3 - ,simpleTitleCaseMapping:0x14B3 - }, - { code:0x14B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B4 - ,simpleLowerCaseMapping:0x14B4 - ,simpleTitleCaseMapping:0x14B4 - }, - { code:0x14B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B5 - ,simpleLowerCaseMapping:0x14B5 - ,simpleTitleCaseMapping:0x14B5 - }, - { code:0x14B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B6 - ,simpleLowerCaseMapping:0x14B6 - ,simpleTitleCaseMapping:0x14B6 - }, - { code:0x14B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B7 - ,simpleLowerCaseMapping:0x14B7 - ,simpleTitleCaseMapping:0x14B7 - }, - { code:0x14B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B8 - ,simpleLowerCaseMapping:0x14B8 - ,simpleTitleCaseMapping:0x14B8 - }, - { code:0x14B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14B9 - ,simpleLowerCaseMapping:0x14B9 - ,simpleTitleCaseMapping:0x14B9 - }, - { code:0x14BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BA - ,simpleLowerCaseMapping:0x14BA - ,simpleTitleCaseMapping:0x14BA - }, - { code:0x14BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BB - ,simpleLowerCaseMapping:0x14BB - ,simpleTitleCaseMapping:0x14BB - }, - { code:0x14BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BC - ,simpleLowerCaseMapping:0x14BC - ,simpleTitleCaseMapping:0x14BC - }, - { code:0x14BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BD - ,simpleLowerCaseMapping:0x14BD - ,simpleTitleCaseMapping:0x14BD - }, - { code:0x14BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BE - ,simpleLowerCaseMapping:0x14BE - ,simpleTitleCaseMapping:0x14BE - }, - { code:0x14BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14BF - ,simpleLowerCaseMapping:0x14BF - ,simpleTitleCaseMapping:0x14BF - }, - { code:0x14C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C0 - ,simpleLowerCaseMapping:0x14C0 - ,simpleTitleCaseMapping:0x14C0 - }, - { code:0x14C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C1 - ,simpleLowerCaseMapping:0x14C1 - ,simpleTitleCaseMapping:0x14C1 - }, - { code:0x14C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C2 - ,simpleLowerCaseMapping:0x14C2 - ,simpleTitleCaseMapping:0x14C2 - }, - { code:0x14C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C3 - ,simpleLowerCaseMapping:0x14C3 - ,simpleTitleCaseMapping:0x14C3 - }, - { code:0x14C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C4 - ,simpleLowerCaseMapping:0x14C4 - ,simpleTitleCaseMapping:0x14C4 - }, - { code:0x14C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C5 - ,simpleLowerCaseMapping:0x14C5 - ,simpleTitleCaseMapping:0x14C5 - }, - { code:0x14C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C6 - ,simpleLowerCaseMapping:0x14C6 - ,simpleTitleCaseMapping:0x14C6 - }, - { code:0x14C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C7 - ,simpleLowerCaseMapping:0x14C7 - ,simpleTitleCaseMapping:0x14C7 - }, - { code:0x14C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C8 - ,simpleLowerCaseMapping:0x14C8 - ,simpleTitleCaseMapping:0x14C8 - }, - { code:0x14C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14C9 - ,simpleLowerCaseMapping:0x14C9 - ,simpleTitleCaseMapping:0x14C9 - }, - { code:0x14CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CA - ,simpleLowerCaseMapping:0x14CA - ,simpleTitleCaseMapping:0x14CA - }, - { code:0x14CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CB - ,simpleLowerCaseMapping:0x14CB - ,simpleTitleCaseMapping:0x14CB - }, - { code:0x14CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CC - ,simpleLowerCaseMapping:0x14CC - ,simpleTitleCaseMapping:0x14CC - }, - { code:0x14CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CD - ,simpleLowerCaseMapping:0x14CD - ,simpleTitleCaseMapping:0x14CD - }, - { code:0x14CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CE - ,simpleLowerCaseMapping:0x14CE - ,simpleTitleCaseMapping:0x14CE - }, - { code:0x14CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14CF - ,simpleLowerCaseMapping:0x14CF - ,simpleTitleCaseMapping:0x14CF - }, - { code:0x14D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D0 - ,simpleLowerCaseMapping:0x14D0 - ,simpleTitleCaseMapping:0x14D0 - }, - { code:0x14D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D1 - ,simpleLowerCaseMapping:0x14D1 - ,simpleTitleCaseMapping:0x14D1 - }, - { code:0x14D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D2 - ,simpleLowerCaseMapping:0x14D2 - ,simpleTitleCaseMapping:0x14D2 - }, - { code:0x14D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D3 - ,simpleLowerCaseMapping:0x14D3 - ,simpleTitleCaseMapping:0x14D3 - }, - { code:0x14D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D4 - ,simpleLowerCaseMapping:0x14D4 - ,simpleTitleCaseMapping:0x14D4 - }, - { code:0x14D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D5 - ,simpleLowerCaseMapping:0x14D5 - ,simpleTitleCaseMapping:0x14D5 - }, - { code:0x14D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D6 - ,simpleLowerCaseMapping:0x14D6 - ,simpleTitleCaseMapping:0x14D6 - }, - { code:0x14D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D7 - ,simpleLowerCaseMapping:0x14D7 - ,simpleTitleCaseMapping:0x14D7 - }, - { code:0x14D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D8 - ,simpleLowerCaseMapping:0x14D8 - ,simpleTitleCaseMapping:0x14D8 - }, - { code:0x14D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14D9 - ,simpleLowerCaseMapping:0x14D9 - ,simpleTitleCaseMapping:0x14D9 - }, - { code:0x14DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DA - ,simpleLowerCaseMapping:0x14DA - ,simpleTitleCaseMapping:0x14DA - }, - { code:0x14DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DB - ,simpleLowerCaseMapping:0x14DB - ,simpleTitleCaseMapping:0x14DB - }, - { code:0x14DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DC - ,simpleLowerCaseMapping:0x14DC - ,simpleTitleCaseMapping:0x14DC - }, - { code:0x14DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DD - ,simpleLowerCaseMapping:0x14DD - ,simpleTitleCaseMapping:0x14DD - }, - { code:0x14DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DE - ,simpleLowerCaseMapping:0x14DE - ,simpleTitleCaseMapping:0x14DE - }, - { code:0x14DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14DF - ,simpleLowerCaseMapping:0x14DF - ,simpleTitleCaseMapping:0x14DF - }, - { code:0x14E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E0 - ,simpleLowerCaseMapping:0x14E0 - ,simpleTitleCaseMapping:0x14E0 - }, - { code:0x14E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E1 - ,simpleLowerCaseMapping:0x14E1 - ,simpleTitleCaseMapping:0x14E1 - }, - { code:0x14E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E2 - ,simpleLowerCaseMapping:0x14E2 - ,simpleTitleCaseMapping:0x14E2 - }, - { code:0x14E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E3 - ,simpleLowerCaseMapping:0x14E3 - ,simpleTitleCaseMapping:0x14E3 - }, - { code:0x14E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E4 - ,simpleLowerCaseMapping:0x14E4 - ,simpleTitleCaseMapping:0x14E4 - }, - { code:0x14E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E5 - ,simpleLowerCaseMapping:0x14E5 - ,simpleTitleCaseMapping:0x14E5 - }, - { code:0x14E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E6 - ,simpleLowerCaseMapping:0x14E6 - ,simpleTitleCaseMapping:0x14E6 - }, - { code:0x14E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E7 - ,simpleLowerCaseMapping:0x14E7 - ,simpleTitleCaseMapping:0x14E7 - }, - { code:0x14E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E8 - ,simpleLowerCaseMapping:0x14E8 - ,simpleTitleCaseMapping:0x14E8 - }, - { code:0x14E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14E9 - ,simpleLowerCaseMapping:0x14E9 - ,simpleTitleCaseMapping:0x14E9 - }, - { code:0x14EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14EA - ,simpleLowerCaseMapping:0x14EA - ,simpleTitleCaseMapping:0x14EA - }, - { code:0x14EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14EB - ,simpleLowerCaseMapping:0x14EB - ,simpleTitleCaseMapping:0x14EB - }, - { code:0x14EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14EC - ,simpleLowerCaseMapping:0x14EC - ,simpleTitleCaseMapping:0x14EC - }, - { code:0x14ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14ED - ,simpleLowerCaseMapping:0x14ED - ,simpleTitleCaseMapping:0x14ED - }, - { code:0x14EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14EE - ,simpleLowerCaseMapping:0x14EE - ,simpleTitleCaseMapping:0x14EE - }, - { code:0x14EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14EF - ,simpleLowerCaseMapping:0x14EF - ,simpleTitleCaseMapping:0x14EF - }, - { code:0x14F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F0 - ,simpleLowerCaseMapping:0x14F0 - ,simpleTitleCaseMapping:0x14F0 - }, - { code:0x14F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F1 - ,simpleLowerCaseMapping:0x14F1 - ,simpleTitleCaseMapping:0x14F1 - }, - { code:0x14F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F2 - ,simpleLowerCaseMapping:0x14F2 - ,simpleTitleCaseMapping:0x14F2 - }, - { code:0x14F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F3 - ,simpleLowerCaseMapping:0x14F3 - ,simpleTitleCaseMapping:0x14F3 - }, - { code:0x14F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F4 - ,simpleLowerCaseMapping:0x14F4 - ,simpleTitleCaseMapping:0x14F4 - }, - { code:0x14F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F5 - ,simpleLowerCaseMapping:0x14F5 - ,simpleTitleCaseMapping:0x14F5 - }, - { code:0x14F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F6 - ,simpleLowerCaseMapping:0x14F6 - ,simpleTitleCaseMapping:0x14F6 - }, - { code:0x14F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F7 - ,simpleLowerCaseMapping:0x14F7 - ,simpleTitleCaseMapping:0x14F7 - }, - { code:0x14F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F8 - ,simpleLowerCaseMapping:0x14F8 - ,simpleTitleCaseMapping:0x14F8 - }, - { code:0x14F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14F9 - ,simpleLowerCaseMapping:0x14F9 - ,simpleTitleCaseMapping:0x14F9 - }, - { code:0x14FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FA - ,simpleLowerCaseMapping:0x14FA - ,simpleTitleCaseMapping:0x14FA - }, - { code:0x14FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FB - ,simpleLowerCaseMapping:0x14FB - ,simpleTitleCaseMapping:0x14FB - }, - { code:0x14FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FC - ,simpleLowerCaseMapping:0x14FC - ,simpleTitleCaseMapping:0x14FC - }, - { code:0x14FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FD - ,simpleLowerCaseMapping:0x14FD - ,simpleTitleCaseMapping:0x14FD - }, - { code:0x14FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FE - ,simpleLowerCaseMapping:0x14FE - ,simpleTitleCaseMapping:0x14FE - }, - { code:0x14FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x14FF - ,simpleLowerCaseMapping:0x14FF - ,simpleTitleCaseMapping:0x14FF - }, - { code:0x1500 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1500 - ,simpleLowerCaseMapping:0x1500 - ,simpleTitleCaseMapping:0x1500 - }, - { code:0x1501 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1501 - ,simpleLowerCaseMapping:0x1501 - ,simpleTitleCaseMapping:0x1501 - }, - { code:0x1502 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1502 - ,simpleLowerCaseMapping:0x1502 - ,simpleTitleCaseMapping:0x1502 - }, - { code:0x1503 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1503 - ,simpleLowerCaseMapping:0x1503 - ,simpleTitleCaseMapping:0x1503 - }, - { code:0x1504 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1504 - ,simpleLowerCaseMapping:0x1504 - ,simpleTitleCaseMapping:0x1504 - }, - { code:0x1505 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1505 - ,simpleLowerCaseMapping:0x1505 - ,simpleTitleCaseMapping:0x1505 - }, - { code:0x1506 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1506 - ,simpleLowerCaseMapping:0x1506 - ,simpleTitleCaseMapping:0x1506 - }, - { code:0x1507 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1507 - ,simpleLowerCaseMapping:0x1507 - ,simpleTitleCaseMapping:0x1507 - }, - { code:0x1508 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1508 - ,simpleLowerCaseMapping:0x1508 - ,simpleTitleCaseMapping:0x1508 - }, - { code:0x1509 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1509 - ,simpleLowerCaseMapping:0x1509 - ,simpleTitleCaseMapping:0x1509 - }, - { code:0x150A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150A - ,simpleLowerCaseMapping:0x150A - ,simpleTitleCaseMapping:0x150A - }, - { code:0x150B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150B - ,simpleLowerCaseMapping:0x150B - ,simpleTitleCaseMapping:0x150B - }, - { code:0x150C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150C - ,simpleLowerCaseMapping:0x150C - ,simpleTitleCaseMapping:0x150C - }, - { code:0x150D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150D - ,simpleLowerCaseMapping:0x150D - ,simpleTitleCaseMapping:0x150D - }, - { code:0x150E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150E - ,simpleLowerCaseMapping:0x150E - ,simpleTitleCaseMapping:0x150E - }, - { code:0x150F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x150F - ,simpleLowerCaseMapping:0x150F - ,simpleTitleCaseMapping:0x150F - }, - { code:0x1510 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1510 - ,simpleLowerCaseMapping:0x1510 - ,simpleTitleCaseMapping:0x1510 - }, - { code:0x1511 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1511 - ,simpleLowerCaseMapping:0x1511 - ,simpleTitleCaseMapping:0x1511 - }, - { code:0x1512 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1512 - ,simpleLowerCaseMapping:0x1512 - ,simpleTitleCaseMapping:0x1512 - }, - { code:0x1513 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1513 - ,simpleLowerCaseMapping:0x1513 - ,simpleTitleCaseMapping:0x1513 - }, - { code:0x1514 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1514 - ,simpleLowerCaseMapping:0x1514 - ,simpleTitleCaseMapping:0x1514 - }, - { code:0x1515 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1515 - ,simpleLowerCaseMapping:0x1515 - ,simpleTitleCaseMapping:0x1515 - }, - { code:0x1516 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1516 - ,simpleLowerCaseMapping:0x1516 - ,simpleTitleCaseMapping:0x1516 - }, - { code:0x1517 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1517 - ,simpleLowerCaseMapping:0x1517 - ,simpleTitleCaseMapping:0x1517 - }, - { code:0x1518 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1518 - ,simpleLowerCaseMapping:0x1518 - ,simpleTitleCaseMapping:0x1518 - }, - { code:0x1519 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1519 - ,simpleLowerCaseMapping:0x1519 - ,simpleTitleCaseMapping:0x1519 - }, - { code:0x151A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151A - ,simpleLowerCaseMapping:0x151A - ,simpleTitleCaseMapping:0x151A - }, - { code:0x151B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151B - ,simpleLowerCaseMapping:0x151B - ,simpleTitleCaseMapping:0x151B - }, - { code:0x151C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151C - ,simpleLowerCaseMapping:0x151C - ,simpleTitleCaseMapping:0x151C - }, - { code:0x151D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151D - ,simpleLowerCaseMapping:0x151D - ,simpleTitleCaseMapping:0x151D - }, - { code:0x151E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151E - ,simpleLowerCaseMapping:0x151E - ,simpleTitleCaseMapping:0x151E - }, - { code:0x151F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x151F - ,simpleLowerCaseMapping:0x151F - ,simpleTitleCaseMapping:0x151F - }, - { code:0x1520 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1520 - ,simpleLowerCaseMapping:0x1520 - ,simpleTitleCaseMapping:0x1520 - }, - { code:0x1521 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1521 - ,simpleLowerCaseMapping:0x1521 - ,simpleTitleCaseMapping:0x1521 - }, - { code:0x1522 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1522 - ,simpleLowerCaseMapping:0x1522 - ,simpleTitleCaseMapping:0x1522 - }, - { code:0x1523 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1523 - ,simpleLowerCaseMapping:0x1523 - ,simpleTitleCaseMapping:0x1523 - }, - { code:0x1524 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1524 - ,simpleLowerCaseMapping:0x1524 - ,simpleTitleCaseMapping:0x1524 - }, - { code:0x1525 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1525 - ,simpleLowerCaseMapping:0x1525 - ,simpleTitleCaseMapping:0x1525 - }, - { code:0x1526 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1526 - ,simpleLowerCaseMapping:0x1526 - ,simpleTitleCaseMapping:0x1526 - }, - { code:0x1527 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1527 - ,simpleLowerCaseMapping:0x1527 - ,simpleTitleCaseMapping:0x1527 - }, - { code:0x1528 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1528 - ,simpleLowerCaseMapping:0x1528 - ,simpleTitleCaseMapping:0x1528 - }, - { code:0x1529 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1529 - ,simpleLowerCaseMapping:0x1529 - ,simpleTitleCaseMapping:0x1529 - }, - { code:0x152A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152A - ,simpleLowerCaseMapping:0x152A - ,simpleTitleCaseMapping:0x152A - }, - { code:0x152B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152B - ,simpleLowerCaseMapping:0x152B - ,simpleTitleCaseMapping:0x152B - }, - { code:0x152C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152C - ,simpleLowerCaseMapping:0x152C - ,simpleTitleCaseMapping:0x152C - }, - { code:0x152D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152D - ,simpleLowerCaseMapping:0x152D - ,simpleTitleCaseMapping:0x152D - }, - { code:0x152E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152E - ,simpleLowerCaseMapping:0x152E - ,simpleTitleCaseMapping:0x152E - }, - { code:0x152F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x152F - ,simpleLowerCaseMapping:0x152F - ,simpleTitleCaseMapping:0x152F - }, - { code:0x1530 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1530 - ,simpleLowerCaseMapping:0x1530 - ,simpleTitleCaseMapping:0x1530 - }, - { code:0x1531 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1531 - ,simpleLowerCaseMapping:0x1531 - ,simpleTitleCaseMapping:0x1531 - }, - { code:0x1532 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1532 - ,simpleLowerCaseMapping:0x1532 - ,simpleTitleCaseMapping:0x1532 - }, - { code:0x1533 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1533 - ,simpleLowerCaseMapping:0x1533 - ,simpleTitleCaseMapping:0x1533 - }, - { code:0x1534 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1534 - ,simpleLowerCaseMapping:0x1534 - ,simpleTitleCaseMapping:0x1534 - }, - { code:0x1535 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1535 - ,simpleLowerCaseMapping:0x1535 - ,simpleTitleCaseMapping:0x1535 - }, - { code:0x1536 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1536 - ,simpleLowerCaseMapping:0x1536 - ,simpleTitleCaseMapping:0x1536 - }, - { code:0x1537 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1537 - ,simpleLowerCaseMapping:0x1537 - ,simpleTitleCaseMapping:0x1537 - }, - { code:0x1538 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1538 - ,simpleLowerCaseMapping:0x1538 - ,simpleTitleCaseMapping:0x1538 - }, - { code:0x1539 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1539 - ,simpleLowerCaseMapping:0x1539 - ,simpleTitleCaseMapping:0x1539 - }, - { code:0x153A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153A - ,simpleLowerCaseMapping:0x153A - ,simpleTitleCaseMapping:0x153A - }, - { code:0x153B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153B - ,simpleLowerCaseMapping:0x153B - ,simpleTitleCaseMapping:0x153B - }, - { code:0x153C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153C - ,simpleLowerCaseMapping:0x153C - ,simpleTitleCaseMapping:0x153C - }, - { code:0x153D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153D - ,simpleLowerCaseMapping:0x153D - ,simpleTitleCaseMapping:0x153D - }, - { code:0x153E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153E - ,simpleLowerCaseMapping:0x153E - ,simpleTitleCaseMapping:0x153E - }, - { code:0x153F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x153F - ,simpleLowerCaseMapping:0x153F - ,simpleTitleCaseMapping:0x153F - }, - { code:0x1540 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1540 - ,simpleLowerCaseMapping:0x1540 - ,simpleTitleCaseMapping:0x1540 - }, - { code:0x1541 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1541 - ,simpleLowerCaseMapping:0x1541 - ,simpleTitleCaseMapping:0x1541 - }, - { code:0x1542 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1542 - ,simpleLowerCaseMapping:0x1542 - ,simpleTitleCaseMapping:0x1542 - }, - { code:0x1543 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1543 - ,simpleLowerCaseMapping:0x1543 - ,simpleTitleCaseMapping:0x1543 - }, - { code:0x1544 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1544 - ,simpleLowerCaseMapping:0x1544 - ,simpleTitleCaseMapping:0x1544 - }, - { code:0x1545 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1545 - ,simpleLowerCaseMapping:0x1545 - ,simpleTitleCaseMapping:0x1545 - }, - { code:0x1546 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1546 - ,simpleLowerCaseMapping:0x1546 - ,simpleTitleCaseMapping:0x1546 - }, - { code:0x1547 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1547 - ,simpleLowerCaseMapping:0x1547 - ,simpleTitleCaseMapping:0x1547 - }, - { code:0x1548 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1548 - ,simpleLowerCaseMapping:0x1548 - ,simpleTitleCaseMapping:0x1548 - }, - { code:0x1549 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1549 - ,simpleLowerCaseMapping:0x1549 - ,simpleTitleCaseMapping:0x1549 - }, - { code:0x154A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154A - ,simpleLowerCaseMapping:0x154A - ,simpleTitleCaseMapping:0x154A - }, - { code:0x154B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154B - ,simpleLowerCaseMapping:0x154B - ,simpleTitleCaseMapping:0x154B - }, - { code:0x154C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154C - ,simpleLowerCaseMapping:0x154C - ,simpleTitleCaseMapping:0x154C - }, - { code:0x154D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154D - ,simpleLowerCaseMapping:0x154D - ,simpleTitleCaseMapping:0x154D - }, - { code:0x154E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154E - ,simpleLowerCaseMapping:0x154E - ,simpleTitleCaseMapping:0x154E - }, - { code:0x154F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x154F - ,simpleLowerCaseMapping:0x154F - ,simpleTitleCaseMapping:0x154F - }, - { code:0x1550 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1550 - ,simpleLowerCaseMapping:0x1550 - ,simpleTitleCaseMapping:0x1550 - }, - { code:0x1551 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1551 - ,simpleLowerCaseMapping:0x1551 - ,simpleTitleCaseMapping:0x1551 - }, - { code:0x1552 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1552 - ,simpleLowerCaseMapping:0x1552 - ,simpleTitleCaseMapping:0x1552 - }, - { code:0x1553 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1553 - ,simpleLowerCaseMapping:0x1553 - ,simpleTitleCaseMapping:0x1553 - }, - { code:0x1554 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1554 - ,simpleLowerCaseMapping:0x1554 - ,simpleTitleCaseMapping:0x1554 - }, - { code:0x1555 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1555 - ,simpleLowerCaseMapping:0x1555 - ,simpleTitleCaseMapping:0x1555 - }, - { code:0x1556 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1556 - ,simpleLowerCaseMapping:0x1556 - ,simpleTitleCaseMapping:0x1556 - }, - { code:0x1557 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1557 - ,simpleLowerCaseMapping:0x1557 - ,simpleTitleCaseMapping:0x1557 - }, - { code:0x1558 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1558 - ,simpleLowerCaseMapping:0x1558 - ,simpleTitleCaseMapping:0x1558 - }, - { code:0x1559 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1559 - ,simpleLowerCaseMapping:0x1559 - ,simpleTitleCaseMapping:0x1559 - }, - { code:0x155A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155A - ,simpleLowerCaseMapping:0x155A - ,simpleTitleCaseMapping:0x155A - }, - { code:0x155B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155B - ,simpleLowerCaseMapping:0x155B - ,simpleTitleCaseMapping:0x155B - }, - { code:0x155C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155C - ,simpleLowerCaseMapping:0x155C - ,simpleTitleCaseMapping:0x155C - }, - { code:0x155D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155D - ,simpleLowerCaseMapping:0x155D - ,simpleTitleCaseMapping:0x155D - }, - { code:0x155E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155E - ,simpleLowerCaseMapping:0x155E - ,simpleTitleCaseMapping:0x155E - }, - { code:0x155F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x155F - ,simpleLowerCaseMapping:0x155F - ,simpleTitleCaseMapping:0x155F - }, - { code:0x1560 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1560 - ,simpleLowerCaseMapping:0x1560 - ,simpleTitleCaseMapping:0x1560 - }, - { code:0x1561 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1561 - ,simpleLowerCaseMapping:0x1561 - ,simpleTitleCaseMapping:0x1561 - }, - { code:0x1562 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1562 - ,simpleLowerCaseMapping:0x1562 - ,simpleTitleCaseMapping:0x1562 - }, - { code:0x1563 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1563 - ,simpleLowerCaseMapping:0x1563 - ,simpleTitleCaseMapping:0x1563 - }, - { code:0x1564 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1564 - ,simpleLowerCaseMapping:0x1564 - ,simpleTitleCaseMapping:0x1564 - }, - { code:0x1565 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1565 - ,simpleLowerCaseMapping:0x1565 - ,simpleTitleCaseMapping:0x1565 - }, - { code:0x1566 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1566 - ,simpleLowerCaseMapping:0x1566 - ,simpleTitleCaseMapping:0x1566 - }, - { code:0x1567 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1567 - ,simpleLowerCaseMapping:0x1567 - ,simpleTitleCaseMapping:0x1567 - }, - { code:0x1568 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1568 - ,simpleLowerCaseMapping:0x1568 - ,simpleTitleCaseMapping:0x1568 - }, - { code:0x1569 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1569 - ,simpleLowerCaseMapping:0x1569 - ,simpleTitleCaseMapping:0x1569 - }, - { code:0x156A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156A - ,simpleLowerCaseMapping:0x156A - ,simpleTitleCaseMapping:0x156A - }, - { code:0x156B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156B - ,simpleLowerCaseMapping:0x156B - ,simpleTitleCaseMapping:0x156B - }, - { code:0x156C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156C - ,simpleLowerCaseMapping:0x156C - ,simpleTitleCaseMapping:0x156C - }, - { code:0x156D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156D - ,simpleLowerCaseMapping:0x156D - ,simpleTitleCaseMapping:0x156D - }, - { code:0x156E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156E - ,simpleLowerCaseMapping:0x156E - ,simpleTitleCaseMapping:0x156E - }, - { code:0x156F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x156F - ,simpleLowerCaseMapping:0x156F - ,simpleTitleCaseMapping:0x156F - }, - { code:0x1570 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1570 - ,simpleLowerCaseMapping:0x1570 - ,simpleTitleCaseMapping:0x1570 - }, - { code:0x1571 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1571 - ,simpleLowerCaseMapping:0x1571 - ,simpleTitleCaseMapping:0x1571 - }, - { code:0x1572 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1572 - ,simpleLowerCaseMapping:0x1572 - ,simpleTitleCaseMapping:0x1572 - }, - { code:0x1573 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1573 - ,simpleLowerCaseMapping:0x1573 - ,simpleTitleCaseMapping:0x1573 - }, - { code:0x1574 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1574 - ,simpleLowerCaseMapping:0x1574 - ,simpleTitleCaseMapping:0x1574 - }, - { code:0x1575 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1575 - ,simpleLowerCaseMapping:0x1575 - ,simpleTitleCaseMapping:0x1575 - }, - { code:0x1576 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1576 - ,simpleLowerCaseMapping:0x1576 - ,simpleTitleCaseMapping:0x1576 - }, - { code:0x1577 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1577 - ,simpleLowerCaseMapping:0x1577 - ,simpleTitleCaseMapping:0x1577 - }, - { code:0x1578 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1578 - ,simpleLowerCaseMapping:0x1578 - ,simpleTitleCaseMapping:0x1578 - }, - { code:0x1579 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1579 - ,simpleLowerCaseMapping:0x1579 - ,simpleTitleCaseMapping:0x1579 - }, - { code:0x157A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157A - ,simpleLowerCaseMapping:0x157A - ,simpleTitleCaseMapping:0x157A - }, - { code:0x157B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157B - ,simpleLowerCaseMapping:0x157B - ,simpleTitleCaseMapping:0x157B - }, - { code:0x157C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157C - ,simpleLowerCaseMapping:0x157C - ,simpleTitleCaseMapping:0x157C - }, - { code:0x157D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157D - ,simpleLowerCaseMapping:0x157D - ,simpleTitleCaseMapping:0x157D - }, - { code:0x157E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157E - ,simpleLowerCaseMapping:0x157E - ,simpleTitleCaseMapping:0x157E - }, - { code:0x157F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x157F - ,simpleLowerCaseMapping:0x157F - ,simpleTitleCaseMapping:0x157F - }, - { code:0x1580 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1580 - ,simpleLowerCaseMapping:0x1580 - ,simpleTitleCaseMapping:0x1580 - }, - { code:0x1581 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1581 - ,simpleLowerCaseMapping:0x1581 - ,simpleTitleCaseMapping:0x1581 - }, - { code:0x1582 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1582 - ,simpleLowerCaseMapping:0x1582 - ,simpleTitleCaseMapping:0x1582 - }, - { code:0x1583 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1583 - ,simpleLowerCaseMapping:0x1583 - ,simpleTitleCaseMapping:0x1583 - }, - { code:0x1584 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1584 - ,simpleLowerCaseMapping:0x1584 - ,simpleTitleCaseMapping:0x1584 - }, - { code:0x1585 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1585 - ,simpleLowerCaseMapping:0x1585 - ,simpleTitleCaseMapping:0x1585 - }, - { code:0x1586 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1586 - ,simpleLowerCaseMapping:0x1586 - ,simpleTitleCaseMapping:0x1586 - }, - { code:0x1587 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1587 - ,simpleLowerCaseMapping:0x1587 - ,simpleTitleCaseMapping:0x1587 - }, - { code:0x1588 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1588 - ,simpleLowerCaseMapping:0x1588 - ,simpleTitleCaseMapping:0x1588 - }, - { code:0x1589 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1589 - ,simpleLowerCaseMapping:0x1589 - ,simpleTitleCaseMapping:0x1589 - }, - { code:0x158A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158A - ,simpleLowerCaseMapping:0x158A - ,simpleTitleCaseMapping:0x158A - }, - { code:0x158B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158B - ,simpleLowerCaseMapping:0x158B - ,simpleTitleCaseMapping:0x158B - }, - { code:0x158C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158C - ,simpleLowerCaseMapping:0x158C - ,simpleTitleCaseMapping:0x158C - }, - { code:0x158D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158D - ,simpleLowerCaseMapping:0x158D - ,simpleTitleCaseMapping:0x158D - }, - { code:0x158E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158E - ,simpleLowerCaseMapping:0x158E - ,simpleTitleCaseMapping:0x158E - }, - { code:0x158F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x158F - ,simpleLowerCaseMapping:0x158F - ,simpleTitleCaseMapping:0x158F - }, - { code:0x1590 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1590 - ,simpleLowerCaseMapping:0x1590 - ,simpleTitleCaseMapping:0x1590 - }, - { code:0x1591 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1591 - ,simpleLowerCaseMapping:0x1591 - ,simpleTitleCaseMapping:0x1591 - }, - { code:0x1592 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1592 - ,simpleLowerCaseMapping:0x1592 - ,simpleTitleCaseMapping:0x1592 - }, - { code:0x1593 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1593 - ,simpleLowerCaseMapping:0x1593 - ,simpleTitleCaseMapping:0x1593 - }, - { code:0x1594 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1594 - ,simpleLowerCaseMapping:0x1594 - ,simpleTitleCaseMapping:0x1594 - }, - { code:0x1595 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1595 - ,simpleLowerCaseMapping:0x1595 - ,simpleTitleCaseMapping:0x1595 - }, - { code:0x1596 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1596 - ,simpleLowerCaseMapping:0x1596 - ,simpleTitleCaseMapping:0x1596 - }, - { code:0x1597 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1597 - ,simpleLowerCaseMapping:0x1597 - ,simpleTitleCaseMapping:0x1597 - }, - { code:0x1598 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1598 - ,simpleLowerCaseMapping:0x1598 - ,simpleTitleCaseMapping:0x1598 - }, - { code:0x1599 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1599 - ,simpleLowerCaseMapping:0x1599 - ,simpleTitleCaseMapping:0x1599 - }, - { code:0x159A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159A - ,simpleLowerCaseMapping:0x159A - ,simpleTitleCaseMapping:0x159A - }, - { code:0x159B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159B - ,simpleLowerCaseMapping:0x159B - ,simpleTitleCaseMapping:0x159B - }, - { code:0x159C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159C - ,simpleLowerCaseMapping:0x159C - ,simpleTitleCaseMapping:0x159C - }, - { code:0x159D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159D - ,simpleLowerCaseMapping:0x159D - ,simpleTitleCaseMapping:0x159D - }, - { code:0x159E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159E - ,simpleLowerCaseMapping:0x159E - ,simpleTitleCaseMapping:0x159E - }, - { code:0x159F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x159F - ,simpleLowerCaseMapping:0x159F - ,simpleTitleCaseMapping:0x159F - }, - { code:0x15A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A0 - ,simpleLowerCaseMapping:0x15A0 - ,simpleTitleCaseMapping:0x15A0 - }, - { code:0x15A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A1 - ,simpleLowerCaseMapping:0x15A1 - ,simpleTitleCaseMapping:0x15A1 - }, - { code:0x15A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A2 - ,simpleLowerCaseMapping:0x15A2 - ,simpleTitleCaseMapping:0x15A2 - }, - { code:0x15A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A3 - ,simpleLowerCaseMapping:0x15A3 - ,simpleTitleCaseMapping:0x15A3 - }, - { code:0x15A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A4 - ,simpleLowerCaseMapping:0x15A4 - ,simpleTitleCaseMapping:0x15A4 - }, - { code:0x15A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A5 - ,simpleLowerCaseMapping:0x15A5 - ,simpleTitleCaseMapping:0x15A5 - }, - { code:0x15A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A6 - ,simpleLowerCaseMapping:0x15A6 - ,simpleTitleCaseMapping:0x15A6 - }, - { code:0x15A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A7 - ,simpleLowerCaseMapping:0x15A7 - ,simpleTitleCaseMapping:0x15A7 - }, - { code:0x15A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A8 - ,simpleLowerCaseMapping:0x15A8 - ,simpleTitleCaseMapping:0x15A8 - }, - { code:0x15A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15A9 - ,simpleLowerCaseMapping:0x15A9 - ,simpleTitleCaseMapping:0x15A9 - }, - { code:0x15AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AA - ,simpleLowerCaseMapping:0x15AA - ,simpleTitleCaseMapping:0x15AA - }, - { code:0x15AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AB - ,simpleLowerCaseMapping:0x15AB - ,simpleTitleCaseMapping:0x15AB - }, - { code:0x15AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AC - ,simpleLowerCaseMapping:0x15AC - ,simpleTitleCaseMapping:0x15AC - }, - { code:0x15AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AD - ,simpleLowerCaseMapping:0x15AD - ,simpleTitleCaseMapping:0x15AD - }, - { code:0x15AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AE - ,simpleLowerCaseMapping:0x15AE - ,simpleTitleCaseMapping:0x15AE - }, - { code:0x15AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15AF - ,simpleLowerCaseMapping:0x15AF - ,simpleTitleCaseMapping:0x15AF - }, - { code:0x15B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B0 - ,simpleLowerCaseMapping:0x15B0 - ,simpleTitleCaseMapping:0x15B0 - }, - { code:0x15B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B1 - ,simpleLowerCaseMapping:0x15B1 - ,simpleTitleCaseMapping:0x15B1 - }, - { code:0x15B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B2 - ,simpleLowerCaseMapping:0x15B2 - ,simpleTitleCaseMapping:0x15B2 - }, - { code:0x15B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B3 - ,simpleLowerCaseMapping:0x15B3 - ,simpleTitleCaseMapping:0x15B3 - }, - { code:0x15B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B4 - ,simpleLowerCaseMapping:0x15B4 - ,simpleTitleCaseMapping:0x15B4 - }, - { code:0x15B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B5 - ,simpleLowerCaseMapping:0x15B5 - ,simpleTitleCaseMapping:0x15B5 - }, - { code:0x15B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B6 - ,simpleLowerCaseMapping:0x15B6 - ,simpleTitleCaseMapping:0x15B6 - }, - { code:0x15B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B7 - ,simpleLowerCaseMapping:0x15B7 - ,simpleTitleCaseMapping:0x15B7 - }, - { code:0x15B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B8 - ,simpleLowerCaseMapping:0x15B8 - ,simpleTitleCaseMapping:0x15B8 - }, - { code:0x15B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15B9 - ,simpleLowerCaseMapping:0x15B9 - ,simpleTitleCaseMapping:0x15B9 - }, - { code:0x15BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BA - ,simpleLowerCaseMapping:0x15BA - ,simpleTitleCaseMapping:0x15BA - }, - { code:0x15BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BB - ,simpleLowerCaseMapping:0x15BB - ,simpleTitleCaseMapping:0x15BB - }, - { code:0x15BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BC - ,simpleLowerCaseMapping:0x15BC - ,simpleTitleCaseMapping:0x15BC - }, - { code:0x15BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BD - ,simpleLowerCaseMapping:0x15BD - ,simpleTitleCaseMapping:0x15BD - }, - { code:0x15BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BE - ,simpleLowerCaseMapping:0x15BE - ,simpleTitleCaseMapping:0x15BE - }, - { code:0x15BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15BF - ,simpleLowerCaseMapping:0x15BF - ,simpleTitleCaseMapping:0x15BF - }, - { code:0x15C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C0 - ,simpleLowerCaseMapping:0x15C0 - ,simpleTitleCaseMapping:0x15C0 - }, - { code:0x15C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C1 - ,simpleLowerCaseMapping:0x15C1 - ,simpleTitleCaseMapping:0x15C1 - }, - { code:0x15C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C2 - ,simpleLowerCaseMapping:0x15C2 - ,simpleTitleCaseMapping:0x15C2 - }, - { code:0x15C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C3 - ,simpleLowerCaseMapping:0x15C3 - ,simpleTitleCaseMapping:0x15C3 - }, - { code:0x15C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C4 - ,simpleLowerCaseMapping:0x15C4 - ,simpleTitleCaseMapping:0x15C4 - }, - { code:0x15C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C5 - ,simpleLowerCaseMapping:0x15C5 - ,simpleTitleCaseMapping:0x15C5 - }, - { code:0x15C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C6 - ,simpleLowerCaseMapping:0x15C6 - ,simpleTitleCaseMapping:0x15C6 - }, - { code:0x15C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C7 - ,simpleLowerCaseMapping:0x15C7 - ,simpleTitleCaseMapping:0x15C7 - }, - { code:0x15C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C8 - ,simpleLowerCaseMapping:0x15C8 - ,simpleTitleCaseMapping:0x15C8 - }, - { code:0x15C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15C9 - ,simpleLowerCaseMapping:0x15C9 - ,simpleTitleCaseMapping:0x15C9 - }, - { code:0x15CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CA - ,simpleLowerCaseMapping:0x15CA - ,simpleTitleCaseMapping:0x15CA - }, - { code:0x15CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CB - ,simpleLowerCaseMapping:0x15CB - ,simpleTitleCaseMapping:0x15CB - }, - { code:0x15CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CC - ,simpleLowerCaseMapping:0x15CC - ,simpleTitleCaseMapping:0x15CC - }, - { code:0x15CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CD - ,simpleLowerCaseMapping:0x15CD - ,simpleTitleCaseMapping:0x15CD - }, - { code:0x15CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CE - ,simpleLowerCaseMapping:0x15CE - ,simpleTitleCaseMapping:0x15CE - }, - { code:0x15CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15CF - ,simpleLowerCaseMapping:0x15CF - ,simpleTitleCaseMapping:0x15CF - }, - { code:0x15D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D0 - ,simpleLowerCaseMapping:0x15D0 - ,simpleTitleCaseMapping:0x15D0 - }, - { code:0x15D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D1 - ,simpleLowerCaseMapping:0x15D1 - ,simpleTitleCaseMapping:0x15D1 - }, - { code:0x15D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D2 - ,simpleLowerCaseMapping:0x15D2 - ,simpleTitleCaseMapping:0x15D2 - }, - { code:0x15D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D3 - ,simpleLowerCaseMapping:0x15D3 - ,simpleTitleCaseMapping:0x15D3 - }, - { code:0x15D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D4 - ,simpleLowerCaseMapping:0x15D4 - ,simpleTitleCaseMapping:0x15D4 - }, - { code:0x15D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D5 - ,simpleLowerCaseMapping:0x15D5 - ,simpleTitleCaseMapping:0x15D5 - }, - { code:0x15D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D6 - ,simpleLowerCaseMapping:0x15D6 - ,simpleTitleCaseMapping:0x15D6 - }, - { code:0x15D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D7 - ,simpleLowerCaseMapping:0x15D7 - ,simpleTitleCaseMapping:0x15D7 - }, - { code:0x15D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D8 - ,simpleLowerCaseMapping:0x15D8 - ,simpleTitleCaseMapping:0x15D8 - }, - { code:0x15D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15D9 - ,simpleLowerCaseMapping:0x15D9 - ,simpleTitleCaseMapping:0x15D9 - }, - { code:0x15DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DA - ,simpleLowerCaseMapping:0x15DA - ,simpleTitleCaseMapping:0x15DA - }, - { code:0x15DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DB - ,simpleLowerCaseMapping:0x15DB - ,simpleTitleCaseMapping:0x15DB - }, - { code:0x15DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DC - ,simpleLowerCaseMapping:0x15DC - ,simpleTitleCaseMapping:0x15DC - }, - { code:0x15DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DD - ,simpleLowerCaseMapping:0x15DD - ,simpleTitleCaseMapping:0x15DD - }, - { code:0x15DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DE - ,simpleLowerCaseMapping:0x15DE - ,simpleTitleCaseMapping:0x15DE - }, - { code:0x15DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15DF - ,simpleLowerCaseMapping:0x15DF - ,simpleTitleCaseMapping:0x15DF - }, - { code:0x15E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E0 - ,simpleLowerCaseMapping:0x15E0 - ,simpleTitleCaseMapping:0x15E0 - }, - { code:0x15E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E1 - ,simpleLowerCaseMapping:0x15E1 - ,simpleTitleCaseMapping:0x15E1 - }, - { code:0x15E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E2 - ,simpleLowerCaseMapping:0x15E2 - ,simpleTitleCaseMapping:0x15E2 - }, - { code:0x15E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E3 - ,simpleLowerCaseMapping:0x15E3 - ,simpleTitleCaseMapping:0x15E3 - }, - { code:0x15E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E4 - ,simpleLowerCaseMapping:0x15E4 - ,simpleTitleCaseMapping:0x15E4 - }, - { code:0x15E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E5 - ,simpleLowerCaseMapping:0x15E5 - ,simpleTitleCaseMapping:0x15E5 - }, - { code:0x15E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E6 - ,simpleLowerCaseMapping:0x15E6 - ,simpleTitleCaseMapping:0x15E6 - }, - { code:0x15E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E7 - ,simpleLowerCaseMapping:0x15E7 - ,simpleTitleCaseMapping:0x15E7 - }, - { code:0x15E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E8 - ,simpleLowerCaseMapping:0x15E8 - ,simpleTitleCaseMapping:0x15E8 - }, - { code:0x15E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15E9 - ,simpleLowerCaseMapping:0x15E9 - ,simpleTitleCaseMapping:0x15E9 - }, - { code:0x15EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15EA - ,simpleLowerCaseMapping:0x15EA - ,simpleTitleCaseMapping:0x15EA - }, - { code:0x15EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15EB - ,simpleLowerCaseMapping:0x15EB - ,simpleTitleCaseMapping:0x15EB - }, - { code:0x15EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15EC - ,simpleLowerCaseMapping:0x15EC - ,simpleTitleCaseMapping:0x15EC - }, - { code:0x15ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15ED - ,simpleLowerCaseMapping:0x15ED - ,simpleTitleCaseMapping:0x15ED - }, - { code:0x15EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15EE - ,simpleLowerCaseMapping:0x15EE - ,simpleTitleCaseMapping:0x15EE - }, - { code:0x15EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15EF - ,simpleLowerCaseMapping:0x15EF - ,simpleTitleCaseMapping:0x15EF - }, - { code:0x15F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F0 - ,simpleLowerCaseMapping:0x15F0 - ,simpleTitleCaseMapping:0x15F0 - }, - { code:0x15F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F1 - ,simpleLowerCaseMapping:0x15F1 - ,simpleTitleCaseMapping:0x15F1 - }, - { code:0x15F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F2 - ,simpleLowerCaseMapping:0x15F2 - ,simpleTitleCaseMapping:0x15F2 - }, - { code:0x15F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F3 - ,simpleLowerCaseMapping:0x15F3 - ,simpleTitleCaseMapping:0x15F3 - }, - { code:0x15F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F4 - ,simpleLowerCaseMapping:0x15F4 - ,simpleTitleCaseMapping:0x15F4 - }, - { code:0x15F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F5 - ,simpleLowerCaseMapping:0x15F5 - ,simpleTitleCaseMapping:0x15F5 - }, - { code:0x15F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F6 - ,simpleLowerCaseMapping:0x15F6 - ,simpleTitleCaseMapping:0x15F6 - }, - { code:0x15F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F7 - ,simpleLowerCaseMapping:0x15F7 - ,simpleTitleCaseMapping:0x15F7 - }, - { code:0x15F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F8 - ,simpleLowerCaseMapping:0x15F8 - ,simpleTitleCaseMapping:0x15F8 - }, - { code:0x15F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15F9 - ,simpleLowerCaseMapping:0x15F9 - ,simpleTitleCaseMapping:0x15F9 - }, - { code:0x15FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FA - ,simpleLowerCaseMapping:0x15FA - ,simpleTitleCaseMapping:0x15FA - }, - { code:0x15FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FB - ,simpleLowerCaseMapping:0x15FB - ,simpleTitleCaseMapping:0x15FB - }, - { code:0x15FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FC - ,simpleLowerCaseMapping:0x15FC - ,simpleTitleCaseMapping:0x15FC - }, - { code:0x15FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FD - ,simpleLowerCaseMapping:0x15FD - ,simpleTitleCaseMapping:0x15FD - }, - { code:0x15FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FE - ,simpleLowerCaseMapping:0x15FE - ,simpleTitleCaseMapping:0x15FE - }, - { code:0x15FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x15FF - ,simpleLowerCaseMapping:0x15FF - ,simpleTitleCaseMapping:0x15FF - }, - { code:0x1600 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1600 - ,simpleLowerCaseMapping:0x1600 - ,simpleTitleCaseMapping:0x1600 - }, - { code:0x1601 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1601 - ,simpleLowerCaseMapping:0x1601 - ,simpleTitleCaseMapping:0x1601 - }, - { code:0x1602 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1602 - ,simpleLowerCaseMapping:0x1602 - ,simpleTitleCaseMapping:0x1602 - }, - { code:0x1603 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1603 - ,simpleLowerCaseMapping:0x1603 - ,simpleTitleCaseMapping:0x1603 - }, - { code:0x1604 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1604 - ,simpleLowerCaseMapping:0x1604 - ,simpleTitleCaseMapping:0x1604 - }, - { code:0x1605 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1605 - ,simpleLowerCaseMapping:0x1605 - ,simpleTitleCaseMapping:0x1605 - }, - { code:0x1606 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1606 - ,simpleLowerCaseMapping:0x1606 - ,simpleTitleCaseMapping:0x1606 - }, - { code:0x1607 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1607 - ,simpleLowerCaseMapping:0x1607 - ,simpleTitleCaseMapping:0x1607 - }, - { code:0x1608 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1608 - ,simpleLowerCaseMapping:0x1608 - ,simpleTitleCaseMapping:0x1608 - }, - { code:0x1609 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1609 - ,simpleLowerCaseMapping:0x1609 - ,simpleTitleCaseMapping:0x1609 - }, - { code:0x160A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160A - ,simpleLowerCaseMapping:0x160A - ,simpleTitleCaseMapping:0x160A - }, - { code:0x160B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160B - ,simpleLowerCaseMapping:0x160B - ,simpleTitleCaseMapping:0x160B - }, - { code:0x160C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160C - ,simpleLowerCaseMapping:0x160C - ,simpleTitleCaseMapping:0x160C - }, - { code:0x160D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160D - ,simpleLowerCaseMapping:0x160D - ,simpleTitleCaseMapping:0x160D - }, - { code:0x160E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160E - ,simpleLowerCaseMapping:0x160E - ,simpleTitleCaseMapping:0x160E - }, - { code:0x160F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x160F - ,simpleLowerCaseMapping:0x160F - ,simpleTitleCaseMapping:0x160F - }, - { code:0x1610 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1610 - ,simpleLowerCaseMapping:0x1610 - ,simpleTitleCaseMapping:0x1610 - }, - { code:0x1611 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1611 - ,simpleLowerCaseMapping:0x1611 - ,simpleTitleCaseMapping:0x1611 - }, - { code:0x1612 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1612 - ,simpleLowerCaseMapping:0x1612 - ,simpleTitleCaseMapping:0x1612 - }, - { code:0x1613 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1613 - ,simpleLowerCaseMapping:0x1613 - ,simpleTitleCaseMapping:0x1613 - }, - { code:0x1614 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1614 - ,simpleLowerCaseMapping:0x1614 - ,simpleTitleCaseMapping:0x1614 - }, - { code:0x1615 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1615 - ,simpleLowerCaseMapping:0x1615 - ,simpleTitleCaseMapping:0x1615 - }, - { code:0x1616 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1616 - ,simpleLowerCaseMapping:0x1616 - ,simpleTitleCaseMapping:0x1616 - }, - { code:0x1617 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1617 - ,simpleLowerCaseMapping:0x1617 - ,simpleTitleCaseMapping:0x1617 - }, - { code:0x1618 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1618 - ,simpleLowerCaseMapping:0x1618 - ,simpleTitleCaseMapping:0x1618 - }, - { code:0x1619 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1619 - ,simpleLowerCaseMapping:0x1619 - ,simpleTitleCaseMapping:0x1619 - }, - { code:0x161A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161A - ,simpleLowerCaseMapping:0x161A - ,simpleTitleCaseMapping:0x161A - }, - { code:0x161B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161B - ,simpleLowerCaseMapping:0x161B - ,simpleTitleCaseMapping:0x161B - }, - { code:0x161C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161C - ,simpleLowerCaseMapping:0x161C - ,simpleTitleCaseMapping:0x161C - }, - { code:0x161D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161D - ,simpleLowerCaseMapping:0x161D - ,simpleTitleCaseMapping:0x161D - }, - { code:0x161E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161E - ,simpleLowerCaseMapping:0x161E - ,simpleTitleCaseMapping:0x161E - }, - { code:0x161F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x161F - ,simpleLowerCaseMapping:0x161F - ,simpleTitleCaseMapping:0x161F - }, - { code:0x1620 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1620 - ,simpleLowerCaseMapping:0x1620 - ,simpleTitleCaseMapping:0x1620 - }, - { code:0x1621 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1621 - ,simpleLowerCaseMapping:0x1621 - ,simpleTitleCaseMapping:0x1621 - }, - { code:0x1622 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1622 - ,simpleLowerCaseMapping:0x1622 - ,simpleTitleCaseMapping:0x1622 - }, - { code:0x1623 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1623 - ,simpleLowerCaseMapping:0x1623 - ,simpleTitleCaseMapping:0x1623 - }, - { code:0x1624 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1624 - ,simpleLowerCaseMapping:0x1624 - ,simpleTitleCaseMapping:0x1624 - }, - { code:0x1625 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1625 - ,simpleLowerCaseMapping:0x1625 - ,simpleTitleCaseMapping:0x1625 - }, - { code:0x1626 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1626 - ,simpleLowerCaseMapping:0x1626 - ,simpleTitleCaseMapping:0x1626 - }, - { code:0x1627 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1627 - ,simpleLowerCaseMapping:0x1627 - ,simpleTitleCaseMapping:0x1627 - }, - { code:0x1628 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1628 - ,simpleLowerCaseMapping:0x1628 - ,simpleTitleCaseMapping:0x1628 - }, - { code:0x1629 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1629 - ,simpleLowerCaseMapping:0x1629 - ,simpleTitleCaseMapping:0x1629 - }, - { code:0x162A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162A - ,simpleLowerCaseMapping:0x162A - ,simpleTitleCaseMapping:0x162A - }, - { code:0x162B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162B - ,simpleLowerCaseMapping:0x162B - ,simpleTitleCaseMapping:0x162B - }, - { code:0x162C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162C - ,simpleLowerCaseMapping:0x162C - ,simpleTitleCaseMapping:0x162C - }, - { code:0x162D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162D - ,simpleLowerCaseMapping:0x162D - ,simpleTitleCaseMapping:0x162D - }, - { code:0x162E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162E - ,simpleLowerCaseMapping:0x162E - ,simpleTitleCaseMapping:0x162E - }, - { code:0x162F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x162F - ,simpleLowerCaseMapping:0x162F - ,simpleTitleCaseMapping:0x162F - }, - { code:0x1630 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1630 - ,simpleLowerCaseMapping:0x1630 - ,simpleTitleCaseMapping:0x1630 - }, - { code:0x1631 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1631 - ,simpleLowerCaseMapping:0x1631 - ,simpleTitleCaseMapping:0x1631 - }, - { code:0x1632 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1632 - ,simpleLowerCaseMapping:0x1632 - ,simpleTitleCaseMapping:0x1632 - }, - { code:0x1633 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1633 - ,simpleLowerCaseMapping:0x1633 - ,simpleTitleCaseMapping:0x1633 - }, - { code:0x1634 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1634 - ,simpleLowerCaseMapping:0x1634 - ,simpleTitleCaseMapping:0x1634 - }, - { code:0x1635 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1635 - ,simpleLowerCaseMapping:0x1635 - ,simpleTitleCaseMapping:0x1635 - }, - { code:0x1636 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1636 - ,simpleLowerCaseMapping:0x1636 - ,simpleTitleCaseMapping:0x1636 - }, - { code:0x1637 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1637 - ,simpleLowerCaseMapping:0x1637 - ,simpleTitleCaseMapping:0x1637 - }, - { code:0x1638 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1638 - ,simpleLowerCaseMapping:0x1638 - ,simpleTitleCaseMapping:0x1638 - }, - { code:0x1639 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1639 - ,simpleLowerCaseMapping:0x1639 - ,simpleTitleCaseMapping:0x1639 - }, - { code:0x163A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163A - ,simpleLowerCaseMapping:0x163A - ,simpleTitleCaseMapping:0x163A - }, - { code:0x163B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163B - ,simpleLowerCaseMapping:0x163B - ,simpleTitleCaseMapping:0x163B - }, - { code:0x163C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163C - ,simpleLowerCaseMapping:0x163C - ,simpleTitleCaseMapping:0x163C - }, - { code:0x163D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163D - ,simpleLowerCaseMapping:0x163D - ,simpleTitleCaseMapping:0x163D - }, - { code:0x163E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163E - ,simpleLowerCaseMapping:0x163E - ,simpleTitleCaseMapping:0x163E - }, - { code:0x163F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x163F - ,simpleLowerCaseMapping:0x163F - ,simpleTitleCaseMapping:0x163F - }, - { code:0x1640 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1640 - ,simpleLowerCaseMapping:0x1640 - ,simpleTitleCaseMapping:0x1640 - }, - { code:0x1641 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1641 - ,simpleLowerCaseMapping:0x1641 - ,simpleTitleCaseMapping:0x1641 - }, - { code:0x1642 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1642 - ,simpleLowerCaseMapping:0x1642 - ,simpleTitleCaseMapping:0x1642 - }, - { code:0x1643 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1643 - ,simpleLowerCaseMapping:0x1643 - ,simpleTitleCaseMapping:0x1643 - }, - { code:0x1644 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1644 - ,simpleLowerCaseMapping:0x1644 - ,simpleTitleCaseMapping:0x1644 - }, - { code:0x1645 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1645 - ,simpleLowerCaseMapping:0x1645 - ,simpleTitleCaseMapping:0x1645 - }, - { code:0x1646 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1646 - ,simpleLowerCaseMapping:0x1646 - ,simpleTitleCaseMapping:0x1646 - }, - { code:0x1647 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1647 - ,simpleLowerCaseMapping:0x1647 - ,simpleTitleCaseMapping:0x1647 - }, - { code:0x1648 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1648 - ,simpleLowerCaseMapping:0x1648 - ,simpleTitleCaseMapping:0x1648 - }, - { code:0x1649 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1649 - ,simpleLowerCaseMapping:0x1649 - ,simpleTitleCaseMapping:0x1649 - }, - { code:0x164A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164A - ,simpleLowerCaseMapping:0x164A - ,simpleTitleCaseMapping:0x164A - }, - { code:0x164B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164B - ,simpleLowerCaseMapping:0x164B - ,simpleTitleCaseMapping:0x164B - }, - { code:0x164C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164C - ,simpleLowerCaseMapping:0x164C - ,simpleTitleCaseMapping:0x164C - }, - { code:0x164D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164D - ,simpleLowerCaseMapping:0x164D - ,simpleTitleCaseMapping:0x164D - }, - { code:0x164E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164E - ,simpleLowerCaseMapping:0x164E - ,simpleTitleCaseMapping:0x164E - }, - { code:0x164F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x164F - ,simpleLowerCaseMapping:0x164F - ,simpleTitleCaseMapping:0x164F - }, - { code:0x1650 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1650 - ,simpleLowerCaseMapping:0x1650 - ,simpleTitleCaseMapping:0x1650 - }, - { code:0x1651 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1651 - ,simpleLowerCaseMapping:0x1651 - ,simpleTitleCaseMapping:0x1651 - }, - { code:0x1652 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1652 - ,simpleLowerCaseMapping:0x1652 - ,simpleTitleCaseMapping:0x1652 - }, - { code:0x1653 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1653 - ,simpleLowerCaseMapping:0x1653 - ,simpleTitleCaseMapping:0x1653 - }, - { code:0x1654 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1654 - ,simpleLowerCaseMapping:0x1654 - ,simpleTitleCaseMapping:0x1654 - }, - { code:0x1655 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1655 - ,simpleLowerCaseMapping:0x1655 - ,simpleTitleCaseMapping:0x1655 - }, - { code:0x1656 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1656 - ,simpleLowerCaseMapping:0x1656 - ,simpleTitleCaseMapping:0x1656 - }, - { code:0x1657 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1657 - ,simpleLowerCaseMapping:0x1657 - ,simpleTitleCaseMapping:0x1657 - }, - { code:0x1658 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1658 - ,simpleLowerCaseMapping:0x1658 - ,simpleTitleCaseMapping:0x1658 - }, - { code:0x1659 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1659 - ,simpleLowerCaseMapping:0x1659 - ,simpleTitleCaseMapping:0x1659 - }, - { code:0x165A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165A - ,simpleLowerCaseMapping:0x165A - ,simpleTitleCaseMapping:0x165A - }, - { code:0x165B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165B - ,simpleLowerCaseMapping:0x165B - ,simpleTitleCaseMapping:0x165B - }, - { code:0x165C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165C - ,simpleLowerCaseMapping:0x165C - ,simpleTitleCaseMapping:0x165C - }, - { code:0x165D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165D - ,simpleLowerCaseMapping:0x165D - ,simpleTitleCaseMapping:0x165D - }, - { code:0x165E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165E - ,simpleLowerCaseMapping:0x165E - ,simpleTitleCaseMapping:0x165E - }, - { code:0x165F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x165F - ,simpleLowerCaseMapping:0x165F - ,simpleTitleCaseMapping:0x165F - }, - { code:0x1660 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1660 - ,simpleLowerCaseMapping:0x1660 - ,simpleTitleCaseMapping:0x1660 - }, - { code:0x1661 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1661 - ,simpleLowerCaseMapping:0x1661 - ,simpleTitleCaseMapping:0x1661 - }, - { code:0x1662 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1662 - ,simpleLowerCaseMapping:0x1662 - ,simpleTitleCaseMapping:0x1662 - }, - { code:0x1663 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1663 - ,simpleLowerCaseMapping:0x1663 - ,simpleTitleCaseMapping:0x1663 - }, - { code:0x1664 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1664 - ,simpleLowerCaseMapping:0x1664 - ,simpleTitleCaseMapping:0x1664 - }, - { code:0x1665 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1665 - ,simpleLowerCaseMapping:0x1665 - ,simpleTitleCaseMapping:0x1665 - }, - { code:0x1666 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1666 - ,simpleLowerCaseMapping:0x1666 - ,simpleTitleCaseMapping:0x1666 - }, - { code:0x1667 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1667 - ,simpleLowerCaseMapping:0x1667 - ,simpleTitleCaseMapping:0x1667 - }, - { code:0x1668 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1668 - ,simpleLowerCaseMapping:0x1668 - ,simpleTitleCaseMapping:0x1668 - }, - { code:0x1669 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1669 - ,simpleLowerCaseMapping:0x1669 - ,simpleTitleCaseMapping:0x1669 - }, - { code:0x166A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x166A - ,simpleLowerCaseMapping:0x166A - ,simpleTitleCaseMapping:0x166A - }, - { code:0x166B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x166B - ,simpleLowerCaseMapping:0x166B - ,simpleTitleCaseMapping:0x166B - }, - { code:0x166C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x166C - ,simpleLowerCaseMapping:0x166C - ,simpleTitleCaseMapping:0x166C - }, - { code:0x166D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x166D - ,simpleLowerCaseMapping:0x166D - ,simpleTitleCaseMapping:0x166D - }, - { code:0x166E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x166E - ,simpleLowerCaseMapping:0x166E - ,simpleTitleCaseMapping:0x166E - }, - { code:0x166F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x166F - ,simpleLowerCaseMapping:0x166F - ,simpleTitleCaseMapping:0x166F - }, - { code:0x1670 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1670 - ,simpleLowerCaseMapping:0x1670 - ,simpleTitleCaseMapping:0x1670 - }, - { code:0x1671 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1671 - ,simpleLowerCaseMapping:0x1671 - ,simpleTitleCaseMapping:0x1671 - }, - { code:0x1672 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1672 - ,simpleLowerCaseMapping:0x1672 - ,simpleTitleCaseMapping:0x1672 - }, - { code:0x1673 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1673 - ,simpleLowerCaseMapping:0x1673 - ,simpleTitleCaseMapping:0x1673 - }, - { code:0x1674 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1674 - ,simpleLowerCaseMapping:0x1674 - ,simpleTitleCaseMapping:0x1674 - }, - { code:0x1675 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1675 - ,simpleLowerCaseMapping:0x1675 - ,simpleTitleCaseMapping:0x1675 - }, - { code:0x1676 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1676 - ,simpleLowerCaseMapping:0x1676 - ,simpleTitleCaseMapping:0x1676 - }, - { code:0x1680 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x1680 - ,simpleLowerCaseMapping:0x1680 - ,simpleTitleCaseMapping:0x1680 - }, - { code:0x1681 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1681 - ,simpleLowerCaseMapping:0x1681 - ,simpleTitleCaseMapping:0x1681 - }, - { code:0x1682 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1682 - ,simpleLowerCaseMapping:0x1682 - ,simpleTitleCaseMapping:0x1682 - }, - { code:0x1683 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1683 - ,simpleLowerCaseMapping:0x1683 - ,simpleTitleCaseMapping:0x1683 - }, - { code:0x1684 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1684 - ,simpleLowerCaseMapping:0x1684 - ,simpleTitleCaseMapping:0x1684 - }, - { code:0x1685 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1685 - ,simpleLowerCaseMapping:0x1685 - ,simpleTitleCaseMapping:0x1685 - }, - { code:0x1686 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1686 - ,simpleLowerCaseMapping:0x1686 - ,simpleTitleCaseMapping:0x1686 - }, - { code:0x1687 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1687 - ,simpleLowerCaseMapping:0x1687 - ,simpleTitleCaseMapping:0x1687 - }, - { code:0x1688 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1688 - ,simpleLowerCaseMapping:0x1688 - ,simpleTitleCaseMapping:0x1688 - }, - { code:0x1689 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1689 - ,simpleLowerCaseMapping:0x1689 - ,simpleTitleCaseMapping:0x1689 - }, - { code:0x168A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168A - ,simpleLowerCaseMapping:0x168A - ,simpleTitleCaseMapping:0x168A - }, - { code:0x168B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168B - ,simpleLowerCaseMapping:0x168B - ,simpleTitleCaseMapping:0x168B - }, - { code:0x168C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168C - ,simpleLowerCaseMapping:0x168C - ,simpleTitleCaseMapping:0x168C - }, - { code:0x168D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168D - ,simpleLowerCaseMapping:0x168D - ,simpleTitleCaseMapping:0x168D - }, - { code:0x168E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168E - ,simpleLowerCaseMapping:0x168E - ,simpleTitleCaseMapping:0x168E - }, - { code:0x168F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x168F - ,simpleLowerCaseMapping:0x168F - ,simpleTitleCaseMapping:0x168F - }, - { code:0x1690 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1690 - ,simpleLowerCaseMapping:0x1690 - ,simpleTitleCaseMapping:0x1690 - }, - { code:0x1691 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1691 - ,simpleLowerCaseMapping:0x1691 - ,simpleTitleCaseMapping:0x1691 - }, - { code:0x1692 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1692 - ,simpleLowerCaseMapping:0x1692 - ,simpleTitleCaseMapping:0x1692 - }, - { code:0x1693 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1693 - ,simpleLowerCaseMapping:0x1693 - ,simpleTitleCaseMapping:0x1693 - }, - { code:0x1694 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1694 - ,simpleLowerCaseMapping:0x1694 - ,simpleTitleCaseMapping:0x1694 - }, - { code:0x1695 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1695 - ,simpleLowerCaseMapping:0x1695 - ,simpleTitleCaseMapping:0x1695 - }, - { code:0x1696 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1696 - ,simpleLowerCaseMapping:0x1696 - ,simpleTitleCaseMapping:0x1696 - }, - { code:0x1697 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1697 - ,simpleLowerCaseMapping:0x1697 - ,simpleTitleCaseMapping:0x1697 - }, - { code:0x1698 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1698 - ,simpleLowerCaseMapping:0x1698 - ,simpleTitleCaseMapping:0x1698 - }, - { code:0x1699 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1699 - ,simpleLowerCaseMapping:0x1699 - ,simpleTitleCaseMapping:0x1699 - }, - { code:0x169A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x169A - ,simpleLowerCaseMapping:0x169A - ,simpleTitleCaseMapping:0x169A - }, - { code:0x169B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x169B - ,simpleLowerCaseMapping:0x169B - ,simpleTitleCaseMapping:0x169B - }, - { code:0x169C - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x169C - ,simpleLowerCaseMapping:0x169C - ,simpleTitleCaseMapping:0x169C - }, - { code:0x16A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A0 - ,simpleLowerCaseMapping:0x16A0 - ,simpleTitleCaseMapping:0x16A0 - }, - { code:0x16A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A1 - ,simpleLowerCaseMapping:0x16A1 - ,simpleTitleCaseMapping:0x16A1 - }, - { code:0x16A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A2 - ,simpleLowerCaseMapping:0x16A2 - ,simpleTitleCaseMapping:0x16A2 - }, - { code:0x16A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A3 - ,simpleLowerCaseMapping:0x16A3 - ,simpleTitleCaseMapping:0x16A3 - }, - { code:0x16A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A4 - ,simpleLowerCaseMapping:0x16A4 - ,simpleTitleCaseMapping:0x16A4 - }, - { code:0x16A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A5 - ,simpleLowerCaseMapping:0x16A5 - ,simpleTitleCaseMapping:0x16A5 - }, - { code:0x16A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A6 - ,simpleLowerCaseMapping:0x16A6 - ,simpleTitleCaseMapping:0x16A6 - }, - { code:0x16A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A7 - ,simpleLowerCaseMapping:0x16A7 - ,simpleTitleCaseMapping:0x16A7 - }, - { code:0x16A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A8 - ,simpleLowerCaseMapping:0x16A8 - ,simpleTitleCaseMapping:0x16A8 - }, - { code:0x16A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16A9 - ,simpleLowerCaseMapping:0x16A9 - ,simpleTitleCaseMapping:0x16A9 - }, - { code:0x16AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AA - ,simpleLowerCaseMapping:0x16AA - ,simpleTitleCaseMapping:0x16AA - }, - { code:0x16AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AB - ,simpleLowerCaseMapping:0x16AB - ,simpleTitleCaseMapping:0x16AB - }, - { code:0x16AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AC - ,simpleLowerCaseMapping:0x16AC - ,simpleTitleCaseMapping:0x16AC - }, - { code:0x16AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AD - ,simpleLowerCaseMapping:0x16AD - ,simpleTitleCaseMapping:0x16AD - }, - { code:0x16AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AE - ,simpleLowerCaseMapping:0x16AE - ,simpleTitleCaseMapping:0x16AE - }, - { code:0x16AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16AF - ,simpleLowerCaseMapping:0x16AF - ,simpleTitleCaseMapping:0x16AF - }, - { code:0x16B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B0 - ,simpleLowerCaseMapping:0x16B0 - ,simpleTitleCaseMapping:0x16B0 - }, - { code:0x16B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B1 - ,simpleLowerCaseMapping:0x16B1 - ,simpleTitleCaseMapping:0x16B1 - }, - { code:0x16B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B2 - ,simpleLowerCaseMapping:0x16B2 - ,simpleTitleCaseMapping:0x16B2 - }, - { code:0x16B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B3 - ,simpleLowerCaseMapping:0x16B3 - ,simpleTitleCaseMapping:0x16B3 - }, - { code:0x16B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B4 - ,simpleLowerCaseMapping:0x16B4 - ,simpleTitleCaseMapping:0x16B4 - }, - { code:0x16B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B5 - ,simpleLowerCaseMapping:0x16B5 - ,simpleTitleCaseMapping:0x16B5 - }, - { code:0x16B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B6 - ,simpleLowerCaseMapping:0x16B6 - ,simpleTitleCaseMapping:0x16B6 - }, - { code:0x16B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B7 - ,simpleLowerCaseMapping:0x16B7 - ,simpleTitleCaseMapping:0x16B7 - }, - { code:0x16B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B8 - ,simpleLowerCaseMapping:0x16B8 - ,simpleTitleCaseMapping:0x16B8 - }, - { code:0x16B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16B9 - ,simpleLowerCaseMapping:0x16B9 - ,simpleTitleCaseMapping:0x16B9 - }, - { code:0x16BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BA - ,simpleLowerCaseMapping:0x16BA - ,simpleTitleCaseMapping:0x16BA - }, - { code:0x16BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BB - ,simpleLowerCaseMapping:0x16BB - ,simpleTitleCaseMapping:0x16BB - }, - { code:0x16BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BC - ,simpleLowerCaseMapping:0x16BC - ,simpleTitleCaseMapping:0x16BC - }, - { code:0x16BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BD - ,simpleLowerCaseMapping:0x16BD - ,simpleTitleCaseMapping:0x16BD - }, - { code:0x16BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BE - ,simpleLowerCaseMapping:0x16BE - ,simpleTitleCaseMapping:0x16BE - }, - { code:0x16BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16BF - ,simpleLowerCaseMapping:0x16BF - ,simpleTitleCaseMapping:0x16BF - }, - { code:0x16C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C0 - ,simpleLowerCaseMapping:0x16C0 - ,simpleTitleCaseMapping:0x16C0 - }, - { code:0x16C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C1 - ,simpleLowerCaseMapping:0x16C1 - ,simpleTitleCaseMapping:0x16C1 - }, - { code:0x16C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C2 - ,simpleLowerCaseMapping:0x16C2 - ,simpleTitleCaseMapping:0x16C2 - }, - { code:0x16C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C3 - ,simpleLowerCaseMapping:0x16C3 - ,simpleTitleCaseMapping:0x16C3 - }, - { code:0x16C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C4 - ,simpleLowerCaseMapping:0x16C4 - ,simpleTitleCaseMapping:0x16C4 - }, - { code:0x16C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C5 - ,simpleLowerCaseMapping:0x16C5 - ,simpleTitleCaseMapping:0x16C5 - }, - { code:0x16C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C6 - ,simpleLowerCaseMapping:0x16C6 - ,simpleTitleCaseMapping:0x16C6 - }, - { code:0x16C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C7 - ,simpleLowerCaseMapping:0x16C7 - ,simpleTitleCaseMapping:0x16C7 - }, - { code:0x16C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C8 - ,simpleLowerCaseMapping:0x16C8 - ,simpleTitleCaseMapping:0x16C8 - }, - { code:0x16C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16C9 - ,simpleLowerCaseMapping:0x16C9 - ,simpleTitleCaseMapping:0x16C9 - }, - { code:0x16CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CA - ,simpleLowerCaseMapping:0x16CA - ,simpleTitleCaseMapping:0x16CA - }, - { code:0x16CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CB - ,simpleLowerCaseMapping:0x16CB - ,simpleTitleCaseMapping:0x16CB - }, - { code:0x16CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CC - ,simpleLowerCaseMapping:0x16CC - ,simpleTitleCaseMapping:0x16CC - }, - { code:0x16CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CD - ,simpleLowerCaseMapping:0x16CD - ,simpleTitleCaseMapping:0x16CD - }, - { code:0x16CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CE - ,simpleLowerCaseMapping:0x16CE - ,simpleTitleCaseMapping:0x16CE - }, - { code:0x16CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16CF - ,simpleLowerCaseMapping:0x16CF - ,simpleTitleCaseMapping:0x16CF - }, - { code:0x16D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D0 - ,simpleLowerCaseMapping:0x16D0 - ,simpleTitleCaseMapping:0x16D0 - }, - { code:0x16D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D1 - ,simpleLowerCaseMapping:0x16D1 - ,simpleTitleCaseMapping:0x16D1 - }, - { code:0x16D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D2 - ,simpleLowerCaseMapping:0x16D2 - ,simpleTitleCaseMapping:0x16D2 - }, - { code:0x16D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D3 - ,simpleLowerCaseMapping:0x16D3 - ,simpleTitleCaseMapping:0x16D3 - }, - { code:0x16D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D4 - ,simpleLowerCaseMapping:0x16D4 - ,simpleTitleCaseMapping:0x16D4 - }, - { code:0x16D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D5 - ,simpleLowerCaseMapping:0x16D5 - ,simpleTitleCaseMapping:0x16D5 - }, - { code:0x16D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D6 - ,simpleLowerCaseMapping:0x16D6 - ,simpleTitleCaseMapping:0x16D6 - }, - { code:0x16D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D7 - ,simpleLowerCaseMapping:0x16D7 - ,simpleTitleCaseMapping:0x16D7 - }, - { code:0x16D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D8 - ,simpleLowerCaseMapping:0x16D8 - ,simpleTitleCaseMapping:0x16D8 - }, - { code:0x16D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16D9 - ,simpleLowerCaseMapping:0x16D9 - ,simpleTitleCaseMapping:0x16D9 - }, - { code:0x16DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DA - ,simpleLowerCaseMapping:0x16DA - ,simpleTitleCaseMapping:0x16DA - }, - { code:0x16DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DB - ,simpleLowerCaseMapping:0x16DB - ,simpleTitleCaseMapping:0x16DB - }, - { code:0x16DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DC - ,simpleLowerCaseMapping:0x16DC - ,simpleTitleCaseMapping:0x16DC - }, - { code:0x16DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DD - ,simpleLowerCaseMapping:0x16DD - ,simpleTitleCaseMapping:0x16DD - }, - { code:0x16DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DE - ,simpleLowerCaseMapping:0x16DE - ,simpleTitleCaseMapping:0x16DE - }, - { code:0x16DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16DF - ,simpleLowerCaseMapping:0x16DF - ,simpleTitleCaseMapping:0x16DF - }, - { code:0x16E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E0 - ,simpleLowerCaseMapping:0x16E0 - ,simpleTitleCaseMapping:0x16E0 - }, - { code:0x16E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E1 - ,simpleLowerCaseMapping:0x16E1 - ,simpleTitleCaseMapping:0x16E1 - }, - { code:0x16E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E2 - ,simpleLowerCaseMapping:0x16E2 - ,simpleTitleCaseMapping:0x16E2 - }, - { code:0x16E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E3 - ,simpleLowerCaseMapping:0x16E3 - ,simpleTitleCaseMapping:0x16E3 - }, - { code:0x16E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E4 - ,simpleLowerCaseMapping:0x16E4 - ,simpleTitleCaseMapping:0x16E4 - }, - { code:0x16E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E5 - ,simpleLowerCaseMapping:0x16E5 - ,simpleTitleCaseMapping:0x16E5 - }, - { code:0x16E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E6 - ,simpleLowerCaseMapping:0x16E6 - ,simpleTitleCaseMapping:0x16E6 - }, - { code:0x16E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E7 - ,simpleLowerCaseMapping:0x16E7 - ,simpleTitleCaseMapping:0x16E7 - }, - { code:0x16E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E8 - ,simpleLowerCaseMapping:0x16E8 - ,simpleTitleCaseMapping:0x16E8 - }, - { code:0x16E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16E9 - ,simpleLowerCaseMapping:0x16E9 - ,simpleTitleCaseMapping:0x16E9 - }, - { code:0x16EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x16EA - ,simpleLowerCaseMapping:0x16EA - ,simpleTitleCaseMapping:0x16EA - }, - { code:0x16EB - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x16EB - ,simpleLowerCaseMapping:0x16EB - ,simpleTitleCaseMapping:0x16EB - }, - { code:0x16EC - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x16EC - ,simpleLowerCaseMapping:0x16EC - ,simpleTitleCaseMapping:0x16EC - }, - { code:0x16ED - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x16ED - ,simpleLowerCaseMapping:0x16ED - ,simpleTitleCaseMapping:0x16ED - }, - { code:0x16EE - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x16EE - ,simpleLowerCaseMapping:0x16EE - ,simpleTitleCaseMapping:0x16EE - }, - { code:0x16EF - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x16EF - ,simpleLowerCaseMapping:0x16EF - ,simpleTitleCaseMapping:0x16EF - }, - { code:0x16F0 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x16F0 - ,simpleLowerCaseMapping:0x16F0 - ,simpleTitleCaseMapping:0x16F0 - }, - { code:0x1700 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1700 - ,simpleLowerCaseMapping:0x1700 - ,simpleTitleCaseMapping:0x1700 - }, - { code:0x1701 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1701 - ,simpleLowerCaseMapping:0x1701 - ,simpleTitleCaseMapping:0x1701 - }, - { code:0x1702 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1702 - ,simpleLowerCaseMapping:0x1702 - ,simpleTitleCaseMapping:0x1702 - }, - { code:0x1703 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1703 - ,simpleLowerCaseMapping:0x1703 - ,simpleTitleCaseMapping:0x1703 - }, - { code:0x1704 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1704 - ,simpleLowerCaseMapping:0x1704 - ,simpleTitleCaseMapping:0x1704 - }, - { code:0x1705 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1705 - ,simpleLowerCaseMapping:0x1705 - ,simpleTitleCaseMapping:0x1705 - }, - { code:0x1706 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1706 - ,simpleLowerCaseMapping:0x1706 - ,simpleTitleCaseMapping:0x1706 - }, - { code:0x1707 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1707 - ,simpleLowerCaseMapping:0x1707 - ,simpleTitleCaseMapping:0x1707 - }, - { code:0x1708 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1708 - ,simpleLowerCaseMapping:0x1708 - ,simpleTitleCaseMapping:0x1708 - }, - { code:0x1709 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1709 - ,simpleLowerCaseMapping:0x1709 - ,simpleTitleCaseMapping:0x1709 - }, - { code:0x170A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x170A - ,simpleLowerCaseMapping:0x170A - ,simpleTitleCaseMapping:0x170A - }, - { code:0x170B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x170B - ,simpleLowerCaseMapping:0x170B - ,simpleTitleCaseMapping:0x170B - }, - { code:0x170C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x170C - ,simpleLowerCaseMapping:0x170C - ,simpleTitleCaseMapping:0x170C - }, - { code:0x170E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x170E - ,simpleLowerCaseMapping:0x170E - ,simpleTitleCaseMapping:0x170E - }, - { code:0x170F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x170F - ,simpleLowerCaseMapping:0x170F - ,simpleTitleCaseMapping:0x170F - }, - { code:0x1710 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1710 - ,simpleLowerCaseMapping:0x1710 - ,simpleTitleCaseMapping:0x1710 - }, - { code:0x1711 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1711 - ,simpleLowerCaseMapping:0x1711 - ,simpleTitleCaseMapping:0x1711 - }, - { code:0x1712 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1712 - ,simpleLowerCaseMapping:0x1712 - ,simpleTitleCaseMapping:0x1712 - }, - { code:0x1713 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1713 - ,simpleLowerCaseMapping:0x1713 - ,simpleTitleCaseMapping:0x1713 - }, - { code:0x1714 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1714 - ,simpleLowerCaseMapping:0x1714 - ,simpleTitleCaseMapping:0x1714 - }, - { code:0x1720 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1720 - ,simpleLowerCaseMapping:0x1720 - ,simpleTitleCaseMapping:0x1720 - }, - { code:0x1721 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1721 - ,simpleLowerCaseMapping:0x1721 - ,simpleTitleCaseMapping:0x1721 - }, - { code:0x1722 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1722 - ,simpleLowerCaseMapping:0x1722 - ,simpleTitleCaseMapping:0x1722 - }, - { code:0x1723 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1723 - ,simpleLowerCaseMapping:0x1723 - ,simpleTitleCaseMapping:0x1723 - }, - { code:0x1724 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1724 - ,simpleLowerCaseMapping:0x1724 - ,simpleTitleCaseMapping:0x1724 - }, - { code:0x1725 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1725 - ,simpleLowerCaseMapping:0x1725 - ,simpleTitleCaseMapping:0x1725 - }, - { code:0x1726 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1726 - ,simpleLowerCaseMapping:0x1726 - ,simpleTitleCaseMapping:0x1726 - }, - { code:0x1727 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1727 - ,simpleLowerCaseMapping:0x1727 - ,simpleTitleCaseMapping:0x1727 - }, - { code:0x1728 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1728 - ,simpleLowerCaseMapping:0x1728 - ,simpleTitleCaseMapping:0x1728 - }, - { code:0x1729 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1729 - ,simpleLowerCaseMapping:0x1729 - ,simpleTitleCaseMapping:0x1729 - }, - { code:0x172A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172A - ,simpleLowerCaseMapping:0x172A - ,simpleTitleCaseMapping:0x172A - }, - { code:0x172B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172B - ,simpleLowerCaseMapping:0x172B - ,simpleTitleCaseMapping:0x172B - }, - { code:0x172C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172C - ,simpleLowerCaseMapping:0x172C - ,simpleTitleCaseMapping:0x172C - }, - { code:0x172D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172D - ,simpleLowerCaseMapping:0x172D - ,simpleTitleCaseMapping:0x172D - }, - { code:0x172E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172E - ,simpleLowerCaseMapping:0x172E - ,simpleTitleCaseMapping:0x172E - }, - { code:0x172F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x172F - ,simpleLowerCaseMapping:0x172F - ,simpleTitleCaseMapping:0x172F - }, - { code:0x1730 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1730 - ,simpleLowerCaseMapping:0x1730 - ,simpleTitleCaseMapping:0x1730 - }, - { code:0x1731 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1731 - ,simpleLowerCaseMapping:0x1731 - ,simpleTitleCaseMapping:0x1731 - }, - { code:0x1732 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1732 - ,simpleLowerCaseMapping:0x1732 - ,simpleTitleCaseMapping:0x1732 - }, - { code:0x1733 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1733 - ,simpleLowerCaseMapping:0x1733 - ,simpleTitleCaseMapping:0x1733 - }, - { code:0x1734 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1734 - ,simpleLowerCaseMapping:0x1734 - ,simpleTitleCaseMapping:0x1734 - }, - { code:0x1735 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1735 - ,simpleLowerCaseMapping:0x1735 - ,simpleTitleCaseMapping:0x1735 - }, - { code:0x1736 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1736 - ,simpleLowerCaseMapping:0x1736 - ,simpleTitleCaseMapping:0x1736 - }, - { code:0x1740 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1740 - ,simpleLowerCaseMapping:0x1740 - ,simpleTitleCaseMapping:0x1740 - }, - { code:0x1741 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1741 - ,simpleLowerCaseMapping:0x1741 - ,simpleTitleCaseMapping:0x1741 - }, - { code:0x1742 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1742 - ,simpleLowerCaseMapping:0x1742 - ,simpleTitleCaseMapping:0x1742 - }, - { code:0x1743 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1743 - ,simpleLowerCaseMapping:0x1743 - ,simpleTitleCaseMapping:0x1743 - }, - { code:0x1744 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1744 - ,simpleLowerCaseMapping:0x1744 - ,simpleTitleCaseMapping:0x1744 - }, - { code:0x1745 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1745 - ,simpleLowerCaseMapping:0x1745 - ,simpleTitleCaseMapping:0x1745 - }, - { code:0x1746 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1746 - ,simpleLowerCaseMapping:0x1746 - ,simpleTitleCaseMapping:0x1746 - }, - { code:0x1747 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1747 - ,simpleLowerCaseMapping:0x1747 - ,simpleTitleCaseMapping:0x1747 - }, - { code:0x1748 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1748 - ,simpleLowerCaseMapping:0x1748 - ,simpleTitleCaseMapping:0x1748 - }, - { code:0x1749 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1749 - ,simpleLowerCaseMapping:0x1749 - ,simpleTitleCaseMapping:0x1749 - }, - { code:0x174A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174A - ,simpleLowerCaseMapping:0x174A - ,simpleTitleCaseMapping:0x174A - }, - { code:0x174B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174B - ,simpleLowerCaseMapping:0x174B - ,simpleTitleCaseMapping:0x174B - }, - { code:0x174C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174C - ,simpleLowerCaseMapping:0x174C - ,simpleTitleCaseMapping:0x174C - }, - { code:0x174D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174D - ,simpleLowerCaseMapping:0x174D - ,simpleTitleCaseMapping:0x174D - }, - { code:0x174E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174E - ,simpleLowerCaseMapping:0x174E - ,simpleTitleCaseMapping:0x174E - }, - { code:0x174F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x174F - ,simpleLowerCaseMapping:0x174F - ,simpleTitleCaseMapping:0x174F - }, - { code:0x1750 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1750 - ,simpleLowerCaseMapping:0x1750 - ,simpleTitleCaseMapping:0x1750 - }, - { code:0x1751 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1751 - ,simpleLowerCaseMapping:0x1751 - ,simpleTitleCaseMapping:0x1751 - }, - { code:0x1752 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1752 - ,simpleLowerCaseMapping:0x1752 - ,simpleTitleCaseMapping:0x1752 - }, - { code:0x1753 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1753 - ,simpleLowerCaseMapping:0x1753 - ,simpleTitleCaseMapping:0x1753 - }, - { code:0x1760 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1760 - ,simpleLowerCaseMapping:0x1760 - ,simpleTitleCaseMapping:0x1760 - }, - { code:0x1761 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1761 - ,simpleLowerCaseMapping:0x1761 - ,simpleTitleCaseMapping:0x1761 - }, - { code:0x1762 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1762 - ,simpleLowerCaseMapping:0x1762 - ,simpleTitleCaseMapping:0x1762 - }, - { code:0x1763 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1763 - ,simpleLowerCaseMapping:0x1763 - ,simpleTitleCaseMapping:0x1763 - }, - { code:0x1764 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1764 - ,simpleLowerCaseMapping:0x1764 - ,simpleTitleCaseMapping:0x1764 - }, - { code:0x1765 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1765 - ,simpleLowerCaseMapping:0x1765 - ,simpleTitleCaseMapping:0x1765 - }, - { code:0x1766 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1766 - ,simpleLowerCaseMapping:0x1766 - ,simpleTitleCaseMapping:0x1766 - }, - { code:0x1767 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1767 - ,simpleLowerCaseMapping:0x1767 - ,simpleTitleCaseMapping:0x1767 - }, - { code:0x1768 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1768 - ,simpleLowerCaseMapping:0x1768 - ,simpleTitleCaseMapping:0x1768 - }, - { code:0x1769 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1769 - ,simpleLowerCaseMapping:0x1769 - ,simpleTitleCaseMapping:0x1769 - }, - { code:0x176A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x176A - ,simpleLowerCaseMapping:0x176A - ,simpleTitleCaseMapping:0x176A - }, - { code:0x176B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x176B - ,simpleLowerCaseMapping:0x176B - ,simpleTitleCaseMapping:0x176B - }, - { code:0x176C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x176C - ,simpleLowerCaseMapping:0x176C - ,simpleTitleCaseMapping:0x176C - }, - { code:0x176E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x176E - ,simpleLowerCaseMapping:0x176E - ,simpleTitleCaseMapping:0x176E - }, - { code:0x176F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x176F - ,simpleLowerCaseMapping:0x176F - ,simpleTitleCaseMapping:0x176F - }, - { code:0x1770 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1770 - ,simpleLowerCaseMapping:0x1770 - ,simpleTitleCaseMapping:0x1770 - }, - { code:0x1772 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1772 - ,simpleLowerCaseMapping:0x1772 - ,simpleTitleCaseMapping:0x1772 - }, - { code:0x1773 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1773 - ,simpleLowerCaseMapping:0x1773 - ,simpleTitleCaseMapping:0x1773 - }, - { code:0x1780 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1780 - ,simpleLowerCaseMapping:0x1780 - ,simpleTitleCaseMapping:0x1780 - }, - { code:0x1781 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1781 - ,simpleLowerCaseMapping:0x1781 - ,simpleTitleCaseMapping:0x1781 - }, - { code:0x1782 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1782 - ,simpleLowerCaseMapping:0x1782 - ,simpleTitleCaseMapping:0x1782 - }, - { code:0x1783 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1783 - ,simpleLowerCaseMapping:0x1783 - ,simpleTitleCaseMapping:0x1783 - }, - { code:0x1784 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1784 - ,simpleLowerCaseMapping:0x1784 - ,simpleTitleCaseMapping:0x1784 - }, - { code:0x1785 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1785 - ,simpleLowerCaseMapping:0x1785 - ,simpleTitleCaseMapping:0x1785 - }, - { code:0x1786 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1786 - ,simpleLowerCaseMapping:0x1786 - ,simpleTitleCaseMapping:0x1786 - }, - { code:0x1787 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1787 - ,simpleLowerCaseMapping:0x1787 - ,simpleTitleCaseMapping:0x1787 - }, - { code:0x1788 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1788 - ,simpleLowerCaseMapping:0x1788 - ,simpleTitleCaseMapping:0x1788 - }, - { code:0x1789 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1789 - ,simpleLowerCaseMapping:0x1789 - ,simpleTitleCaseMapping:0x1789 - }, - { code:0x178A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178A - ,simpleLowerCaseMapping:0x178A - ,simpleTitleCaseMapping:0x178A - }, - { code:0x178B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178B - ,simpleLowerCaseMapping:0x178B - ,simpleTitleCaseMapping:0x178B - }, - { code:0x178C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178C - ,simpleLowerCaseMapping:0x178C - ,simpleTitleCaseMapping:0x178C - }, - { code:0x178D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178D - ,simpleLowerCaseMapping:0x178D - ,simpleTitleCaseMapping:0x178D - }, - { code:0x178E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178E - ,simpleLowerCaseMapping:0x178E - ,simpleTitleCaseMapping:0x178E - }, - { code:0x178F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x178F - ,simpleLowerCaseMapping:0x178F - ,simpleTitleCaseMapping:0x178F - }, - { code:0x1790 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1790 - ,simpleLowerCaseMapping:0x1790 - ,simpleTitleCaseMapping:0x1790 - }, - { code:0x1791 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1791 - ,simpleLowerCaseMapping:0x1791 - ,simpleTitleCaseMapping:0x1791 - }, - { code:0x1792 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1792 - ,simpleLowerCaseMapping:0x1792 - ,simpleTitleCaseMapping:0x1792 - }, - { code:0x1793 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1793 - ,simpleLowerCaseMapping:0x1793 - ,simpleTitleCaseMapping:0x1793 - }, - { code:0x1794 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1794 - ,simpleLowerCaseMapping:0x1794 - ,simpleTitleCaseMapping:0x1794 - }, - { code:0x1795 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1795 - ,simpleLowerCaseMapping:0x1795 - ,simpleTitleCaseMapping:0x1795 - }, - { code:0x1796 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1796 - ,simpleLowerCaseMapping:0x1796 - ,simpleTitleCaseMapping:0x1796 - }, - { code:0x1797 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1797 - ,simpleLowerCaseMapping:0x1797 - ,simpleTitleCaseMapping:0x1797 - }, - { code:0x1798 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1798 - ,simpleLowerCaseMapping:0x1798 - ,simpleTitleCaseMapping:0x1798 - }, - { code:0x1799 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1799 - ,simpleLowerCaseMapping:0x1799 - ,simpleTitleCaseMapping:0x1799 - }, - { code:0x179A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179A - ,simpleLowerCaseMapping:0x179A - ,simpleTitleCaseMapping:0x179A - }, - { code:0x179B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179B - ,simpleLowerCaseMapping:0x179B - ,simpleTitleCaseMapping:0x179B - }, - { code:0x179C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179C - ,simpleLowerCaseMapping:0x179C - ,simpleTitleCaseMapping:0x179C - }, - { code:0x179D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179D - ,simpleLowerCaseMapping:0x179D - ,simpleTitleCaseMapping:0x179D - }, - { code:0x179E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179E - ,simpleLowerCaseMapping:0x179E - ,simpleTitleCaseMapping:0x179E - }, - { code:0x179F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x179F - ,simpleLowerCaseMapping:0x179F - ,simpleTitleCaseMapping:0x179F - }, - { code:0x17A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A0 - ,simpleLowerCaseMapping:0x17A0 - ,simpleTitleCaseMapping:0x17A0 - }, - { code:0x17A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A1 - ,simpleLowerCaseMapping:0x17A1 - ,simpleTitleCaseMapping:0x17A1 - }, - { code:0x17A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A2 - ,simpleLowerCaseMapping:0x17A2 - ,simpleTitleCaseMapping:0x17A2 - }, - { code:0x17A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A3 - ,simpleLowerCaseMapping:0x17A3 - ,simpleTitleCaseMapping:0x17A3 - }, - { code:0x17A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A4 - ,simpleLowerCaseMapping:0x17A4 - ,simpleTitleCaseMapping:0x17A4 - }, - { code:0x17A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A5 - ,simpleLowerCaseMapping:0x17A5 - ,simpleTitleCaseMapping:0x17A5 - }, - { code:0x17A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A6 - ,simpleLowerCaseMapping:0x17A6 - ,simpleTitleCaseMapping:0x17A6 - }, - { code:0x17A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A7 - ,simpleLowerCaseMapping:0x17A7 - ,simpleTitleCaseMapping:0x17A7 - }, - { code:0x17A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A8 - ,simpleLowerCaseMapping:0x17A8 - ,simpleTitleCaseMapping:0x17A8 - }, - { code:0x17A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17A9 - ,simpleLowerCaseMapping:0x17A9 - ,simpleTitleCaseMapping:0x17A9 - }, - { code:0x17AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AA - ,simpleLowerCaseMapping:0x17AA - ,simpleTitleCaseMapping:0x17AA - }, - { code:0x17AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AB - ,simpleLowerCaseMapping:0x17AB - ,simpleTitleCaseMapping:0x17AB - }, - { code:0x17AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AC - ,simpleLowerCaseMapping:0x17AC - ,simpleTitleCaseMapping:0x17AC - }, - { code:0x17AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AD - ,simpleLowerCaseMapping:0x17AD - ,simpleTitleCaseMapping:0x17AD - }, - { code:0x17AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AE - ,simpleLowerCaseMapping:0x17AE - ,simpleTitleCaseMapping:0x17AE - }, - { code:0x17AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17AF - ,simpleLowerCaseMapping:0x17AF - ,simpleTitleCaseMapping:0x17AF - }, - { code:0x17B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17B0 - ,simpleLowerCaseMapping:0x17B0 - ,simpleTitleCaseMapping:0x17B0 - }, - { code:0x17B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17B1 - ,simpleLowerCaseMapping:0x17B1 - ,simpleTitleCaseMapping:0x17B1 - }, - { code:0x17B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17B2 - ,simpleLowerCaseMapping:0x17B2 - ,simpleTitleCaseMapping:0x17B2 - }, - { code:0x17B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17B3 - ,simpleLowerCaseMapping:0x17B3 - ,simpleTitleCaseMapping:0x17B3 - }, - { code:0x17B4 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x17B4 - ,simpleLowerCaseMapping:0x17B4 - ,simpleTitleCaseMapping:0x17B4 - }, - { code:0x17B5 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x17B5 - ,simpleLowerCaseMapping:0x17B5 - ,simpleTitleCaseMapping:0x17B5 - }, - { code:0x17B6 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17B6 - ,simpleLowerCaseMapping:0x17B6 - ,simpleTitleCaseMapping:0x17B6 - }, - { code:0x17B7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17B7 - ,simpleLowerCaseMapping:0x17B7 - ,simpleTitleCaseMapping:0x17B7 - }, - { code:0x17B8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17B8 - ,simpleLowerCaseMapping:0x17B8 - ,simpleTitleCaseMapping:0x17B8 - }, - { code:0x17B9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17B9 - ,simpleLowerCaseMapping:0x17B9 - ,simpleTitleCaseMapping:0x17B9 - }, - { code:0x17BA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17BA - ,simpleLowerCaseMapping:0x17BA - ,simpleTitleCaseMapping:0x17BA - }, - { code:0x17BB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17BB - ,simpleLowerCaseMapping:0x17BB - ,simpleTitleCaseMapping:0x17BB - }, - { code:0x17BC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17BC - ,simpleLowerCaseMapping:0x17BC - ,simpleTitleCaseMapping:0x17BC - }, - { code:0x17BD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17BD - ,simpleLowerCaseMapping:0x17BD - ,simpleTitleCaseMapping:0x17BD - }, - { code:0x17BE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17BE - ,simpleLowerCaseMapping:0x17BE - ,simpleTitleCaseMapping:0x17BE - }, - { code:0x17BF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17BF - ,simpleLowerCaseMapping:0x17BF - ,simpleTitleCaseMapping:0x17BF - }, - { code:0x17C0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C0 - ,simpleLowerCaseMapping:0x17C0 - ,simpleTitleCaseMapping:0x17C0 - }, - { code:0x17C1 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C1 - ,simpleLowerCaseMapping:0x17C1 - ,simpleTitleCaseMapping:0x17C1 - }, - { code:0x17C2 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C2 - ,simpleLowerCaseMapping:0x17C2 - ,simpleTitleCaseMapping:0x17C2 - }, - { code:0x17C3 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C3 - ,simpleLowerCaseMapping:0x17C3 - ,simpleTitleCaseMapping:0x17C3 - }, - { code:0x17C4 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C4 - ,simpleLowerCaseMapping:0x17C4 - ,simpleTitleCaseMapping:0x17C4 - }, - { code:0x17C5 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C5 - ,simpleLowerCaseMapping:0x17C5 - ,simpleTitleCaseMapping:0x17C5 - }, - { code:0x17C6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17C6 - ,simpleLowerCaseMapping:0x17C6 - ,simpleTitleCaseMapping:0x17C6 - }, - { code:0x17C7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C7 - ,simpleLowerCaseMapping:0x17C7 - ,simpleTitleCaseMapping:0x17C7 - }, - { code:0x17C8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x17C8 - ,simpleLowerCaseMapping:0x17C8 - ,simpleTitleCaseMapping:0x17C8 - }, - { code:0x17C9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17C9 - ,simpleLowerCaseMapping:0x17C9 - ,simpleTitleCaseMapping:0x17C9 - }, - { code:0x17CA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CA - ,simpleLowerCaseMapping:0x17CA - ,simpleTitleCaseMapping:0x17CA - }, - { code:0x17CB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CB - ,simpleLowerCaseMapping:0x17CB - ,simpleTitleCaseMapping:0x17CB - }, - { code:0x17CC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CC - ,simpleLowerCaseMapping:0x17CC - ,simpleTitleCaseMapping:0x17CC - }, - { code:0x17CD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CD - ,simpleLowerCaseMapping:0x17CD - ,simpleTitleCaseMapping:0x17CD - }, - { code:0x17CE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CE - ,simpleLowerCaseMapping:0x17CE - ,simpleTitleCaseMapping:0x17CE - }, - { code:0x17CF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17CF - ,simpleLowerCaseMapping:0x17CF - ,simpleTitleCaseMapping:0x17CF - }, - { code:0x17D0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17D0 - ,simpleLowerCaseMapping:0x17D0 - ,simpleTitleCaseMapping:0x17D0 - }, - { code:0x17D1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17D1 - ,simpleLowerCaseMapping:0x17D1 - ,simpleTitleCaseMapping:0x17D1 - }, - { code:0x17D2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17D2 - ,simpleLowerCaseMapping:0x17D2 - ,simpleTitleCaseMapping:0x17D2 - }, - { code:0x17D3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17D3 - ,simpleLowerCaseMapping:0x17D3 - ,simpleTitleCaseMapping:0x17D3 - }, - { code:0x17D4 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17D4 - ,simpleLowerCaseMapping:0x17D4 - ,simpleTitleCaseMapping:0x17D4 - }, - { code:0x17D5 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17D5 - ,simpleLowerCaseMapping:0x17D5 - ,simpleTitleCaseMapping:0x17D5 - }, - { code:0x17D6 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17D6 - ,simpleLowerCaseMapping:0x17D6 - ,simpleTitleCaseMapping:0x17D6 - }, - { code:0x17D7 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x17D7 - ,simpleLowerCaseMapping:0x17D7 - ,simpleTitleCaseMapping:0x17D7 - }, - { code:0x17D8 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17D8 - ,simpleLowerCaseMapping:0x17D8 - ,simpleTitleCaseMapping:0x17D8 - }, - { code:0x17D9 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17D9 - ,simpleLowerCaseMapping:0x17D9 - ,simpleTitleCaseMapping:0x17D9 - }, - { code:0x17DA - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x17DA - ,simpleLowerCaseMapping:0x17DA - ,simpleTitleCaseMapping:0x17DA - }, - { code:0x17DB - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x17DB - ,simpleLowerCaseMapping:0x17DB - ,simpleTitleCaseMapping:0x17DB - }, - { code:0x17DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x17DC - ,simpleLowerCaseMapping:0x17DC - ,simpleTitleCaseMapping:0x17DC - }, - { code:0x17DD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x17DD - ,simpleLowerCaseMapping:0x17DD - ,simpleTitleCaseMapping:0x17DD - }, - { code:0x17E0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E0 - ,simpleLowerCaseMapping:0x17E0 - ,simpleTitleCaseMapping:0x17E0 - }, - { code:0x17E1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E1 - ,simpleLowerCaseMapping:0x17E1 - ,simpleTitleCaseMapping:0x17E1 - }, - { code:0x17E2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E2 - ,simpleLowerCaseMapping:0x17E2 - ,simpleTitleCaseMapping:0x17E2 - }, - { code:0x17E3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E3 - ,simpleLowerCaseMapping:0x17E3 - ,simpleTitleCaseMapping:0x17E3 - }, - { code:0x17E4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E4 - ,simpleLowerCaseMapping:0x17E4 - ,simpleTitleCaseMapping:0x17E4 - }, - { code:0x17E5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E5 - ,simpleLowerCaseMapping:0x17E5 - ,simpleTitleCaseMapping:0x17E5 - }, - { code:0x17E6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E6 - ,simpleLowerCaseMapping:0x17E6 - ,simpleTitleCaseMapping:0x17E6 - }, - { code:0x17E7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E7 - ,simpleLowerCaseMapping:0x17E7 - ,simpleTitleCaseMapping:0x17E7 - }, - { code:0x17E8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E8 - ,simpleLowerCaseMapping:0x17E8 - ,simpleTitleCaseMapping:0x17E8 - }, - { code:0x17E9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x17E9 - ,simpleLowerCaseMapping:0x17E9 - ,simpleTitleCaseMapping:0x17E9 - }, - { code:0x17F0 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F0 - ,simpleLowerCaseMapping:0x17F0 - ,simpleTitleCaseMapping:0x17F0 - }, - { code:0x17F1 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F1 - ,simpleLowerCaseMapping:0x17F1 - ,simpleTitleCaseMapping:0x17F1 - }, - { code:0x17F2 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F2 - ,simpleLowerCaseMapping:0x17F2 - ,simpleTitleCaseMapping:0x17F2 - }, - { code:0x17F3 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F3 - ,simpleLowerCaseMapping:0x17F3 - ,simpleTitleCaseMapping:0x17F3 - }, - { code:0x17F4 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F4 - ,simpleLowerCaseMapping:0x17F4 - ,simpleTitleCaseMapping:0x17F4 - }, - { code:0x17F5 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F5 - ,simpleLowerCaseMapping:0x17F5 - ,simpleTitleCaseMapping:0x17F5 - }, - { code:0x17F6 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F6 - ,simpleLowerCaseMapping:0x17F6 - ,simpleTitleCaseMapping:0x17F6 - }, - { code:0x17F7 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F7 - ,simpleLowerCaseMapping:0x17F7 - ,simpleTitleCaseMapping:0x17F7 - }, - { code:0x17F8 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F8 - ,simpleLowerCaseMapping:0x17F8 - ,simpleTitleCaseMapping:0x17F8 - }, - { code:0x17F9 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x17F9 - ,simpleLowerCaseMapping:0x17F9 - ,simpleTitleCaseMapping:0x17F9 - }, - { code:0x1800 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1800 - ,simpleLowerCaseMapping:0x1800 - ,simpleTitleCaseMapping:0x1800 - }, - { code:0x1801 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1801 - ,simpleLowerCaseMapping:0x1801 - ,simpleTitleCaseMapping:0x1801 - }, - { code:0x1802 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1802 - ,simpleLowerCaseMapping:0x1802 - ,simpleTitleCaseMapping:0x1802 - }, - { code:0x1803 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1803 - ,simpleLowerCaseMapping:0x1803 - ,simpleTitleCaseMapping:0x1803 - }, - { code:0x1804 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1804 - ,simpleLowerCaseMapping:0x1804 - ,simpleTitleCaseMapping:0x1804 - }, - { code:0x1805 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1805 - ,simpleLowerCaseMapping:0x1805 - ,simpleTitleCaseMapping:0x1805 - }, - { code:0x1806 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x1806 - ,simpleLowerCaseMapping:0x1806 - ,simpleTitleCaseMapping:0x1806 - }, - { code:0x1807 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1807 - ,simpleLowerCaseMapping:0x1807 - ,simpleTitleCaseMapping:0x1807 - }, - { code:0x1808 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1808 - ,simpleLowerCaseMapping:0x1808 - ,simpleTitleCaseMapping:0x1808 - }, - { code:0x1809 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1809 - ,simpleLowerCaseMapping:0x1809 - ,simpleTitleCaseMapping:0x1809 - }, - { code:0x180A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x180A - ,simpleLowerCaseMapping:0x180A - ,simpleTitleCaseMapping:0x180A - }, - { code:0x180B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x180B - ,simpleLowerCaseMapping:0x180B - ,simpleTitleCaseMapping:0x180B - }, - { code:0x180C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x180C - ,simpleLowerCaseMapping:0x180C - ,simpleTitleCaseMapping:0x180C - }, - { code:0x180D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x180D - ,simpleLowerCaseMapping:0x180D - ,simpleTitleCaseMapping:0x180D - }, - { code:0x180E - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x180E - ,simpleLowerCaseMapping:0x180E - ,simpleTitleCaseMapping:0x180E - }, - { code:0x1810 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1810 - ,simpleLowerCaseMapping:0x1810 - ,simpleTitleCaseMapping:0x1810 - }, - { code:0x1811 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1811 - ,simpleLowerCaseMapping:0x1811 - ,simpleTitleCaseMapping:0x1811 - }, - { code:0x1812 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1812 - ,simpleLowerCaseMapping:0x1812 - ,simpleTitleCaseMapping:0x1812 - }, - { code:0x1813 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1813 - ,simpleLowerCaseMapping:0x1813 - ,simpleTitleCaseMapping:0x1813 - }, - { code:0x1814 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1814 - ,simpleLowerCaseMapping:0x1814 - ,simpleTitleCaseMapping:0x1814 - }, - { code:0x1815 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1815 - ,simpleLowerCaseMapping:0x1815 - ,simpleTitleCaseMapping:0x1815 - }, - { code:0x1816 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1816 - ,simpleLowerCaseMapping:0x1816 - ,simpleTitleCaseMapping:0x1816 - }, - { code:0x1817 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1817 - ,simpleLowerCaseMapping:0x1817 - ,simpleTitleCaseMapping:0x1817 - }, - { code:0x1818 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1818 - ,simpleLowerCaseMapping:0x1818 - ,simpleTitleCaseMapping:0x1818 - }, - { code:0x1819 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1819 - ,simpleLowerCaseMapping:0x1819 - ,simpleTitleCaseMapping:0x1819 - }, - { code:0x1820 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1820 - ,simpleLowerCaseMapping:0x1820 - ,simpleTitleCaseMapping:0x1820 - }, - { code:0x1821 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1821 - ,simpleLowerCaseMapping:0x1821 - ,simpleTitleCaseMapping:0x1821 - }, - { code:0x1822 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1822 - ,simpleLowerCaseMapping:0x1822 - ,simpleTitleCaseMapping:0x1822 - }, - { code:0x1823 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1823 - ,simpleLowerCaseMapping:0x1823 - ,simpleTitleCaseMapping:0x1823 - }, - { code:0x1824 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1824 - ,simpleLowerCaseMapping:0x1824 - ,simpleTitleCaseMapping:0x1824 - }, - { code:0x1825 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1825 - ,simpleLowerCaseMapping:0x1825 - ,simpleTitleCaseMapping:0x1825 - }, - { code:0x1826 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1826 - ,simpleLowerCaseMapping:0x1826 - ,simpleTitleCaseMapping:0x1826 - }, - { code:0x1827 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1827 - ,simpleLowerCaseMapping:0x1827 - ,simpleTitleCaseMapping:0x1827 - }, - { code:0x1828 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1828 - ,simpleLowerCaseMapping:0x1828 - ,simpleTitleCaseMapping:0x1828 - }, - { code:0x1829 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1829 - ,simpleLowerCaseMapping:0x1829 - ,simpleTitleCaseMapping:0x1829 - }, - { code:0x182A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182A - ,simpleLowerCaseMapping:0x182A - ,simpleTitleCaseMapping:0x182A - }, - { code:0x182B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182B - ,simpleLowerCaseMapping:0x182B - ,simpleTitleCaseMapping:0x182B - }, - { code:0x182C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182C - ,simpleLowerCaseMapping:0x182C - ,simpleTitleCaseMapping:0x182C - }, - { code:0x182D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182D - ,simpleLowerCaseMapping:0x182D - ,simpleTitleCaseMapping:0x182D - }, - { code:0x182E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182E - ,simpleLowerCaseMapping:0x182E - ,simpleTitleCaseMapping:0x182E - }, - { code:0x182F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x182F - ,simpleLowerCaseMapping:0x182F - ,simpleTitleCaseMapping:0x182F - }, - { code:0x1830 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1830 - ,simpleLowerCaseMapping:0x1830 - ,simpleTitleCaseMapping:0x1830 - }, - { code:0x1831 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1831 - ,simpleLowerCaseMapping:0x1831 - ,simpleTitleCaseMapping:0x1831 - }, - { code:0x1832 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1832 - ,simpleLowerCaseMapping:0x1832 - ,simpleTitleCaseMapping:0x1832 - }, - { code:0x1833 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1833 - ,simpleLowerCaseMapping:0x1833 - ,simpleTitleCaseMapping:0x1833 - }, - { code:0x1834 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1834 - ,simpleLowerCaseMapping:0x1834 - ,simpleTitleCaseMapping:0x1834 - }, - { code:0x1835 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1835 - ,simpleLowerCaseMapping:0x1835 - ,simpleTitleCaseMapping:0x1835 - }, - { code:0x1836 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1836 - ,simpleLowerCaseMapping:0x1836 - ,simpleTitleCaseMapping:0x1836 - }, - { code:0x1837 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1837 - ,simpleLowerCaseMapping:0x1837 - ,simpleTitleCaseMapping:0x1837 - }, - { code:0x1838 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1838 - ,simpleLowerCaseMapping:0x1838 - ,simpleTitleCaseMapping:0x1838 - }, - { code:0x1839 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1839 - ,simpleLowerCaseMapping:0x1839 - ,simpleTitleCaseMapping:0x1839 - }, - { code:0x183A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183A - ,simpleLowerCaseMapping:0x183A - ,simpleTitleCaseMapping:0x183A - }, - { code:0x183B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183B - ,simpleLowerCaseMapping:0x183B - ,simpleTitleCaseMapping:0x183B - }, - { code:0x183C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183C - ,simpleLowerCaseMapping:0x183C - ,simpleTitleCaseMapping:0x183C - }, - { code:0x183D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183D - ,simpleLowerCaseMapping:0x183D - ,simpleTitleCaseMapping:0x183D - }, - { code:0x183E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183E - ,simpleLowerCaseMapping:0x183E - ,simpleTitleCaseMapping:0x183E - }, - { code:0x183F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x183F - ,simpleLowerCaseMapping:0x183F - ,simpleTitleCaseMapping:0x183F - }, - { code:0x1840 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1840 - ,simpleLowerCaseMapping:0x1840 - ,simpleTitleCaseMapping:0x1840 - }, - { code:0x1841 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1841 - ,simpleLowerCaseMapping:0x1841 - ,simpleTitleCaseMapping:0x1841 - }, - { code:0x1842 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1842 - ,simpleLowerCaseMapping:0x1842 - ,simpleTitleCaseMapping:0x1842 - }, - { code:0x1843 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1843 - ,simpleLowerCaseMapping:0x1843 - ,simpleTitleCaseMapping:0x1843 - }, - { code:0x1844 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1844 - ,simpleLowerCaseMapping:0x1844 - ,simpleTitleCaseMapping:0x1844 - }, - { code:0x1845 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1845 - ,simpleLowerCaseMapping:0x1845 - ,simpleTitleCaseMapping:0x1845 - }, - { code:0x1846 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1846 - ,simpleLowerCaseMapping:0x1846 - ,simpleTitleCaseMapping:0x1846 - }, - { code:0x1847 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1847 - ,simpleLowerCaseMapping:0x1847 - ,simpleTitleCaseMapping:0x1847 - }, - { code:0x1848 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1848 - ,simpleLowerCaseMapping:0x1848 - ,simpleTitleCaseMapping:0x1848 - }, - { code:0x1849 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1849 - ,simpleLowerCaseMapping:0x1849 - ,simpleTitleCaseMapping:0x1849 - }, - { code:0x184A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184A - ,simpleLowerCaseMapping:0x184A - ,simpleTitleCaseMapping:0x184A - }, - { code:0x184B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184B - ,simpleLowerCaseMapping:0x184B - ,simpleTitleCaseMapping:0x184B - }, - { code:0x184C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184C - ,simpleLowerCaseMapping:0x184C - ,simpleTitleCaseMapping:0x184C - }, - { code:0x184D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184D - ,simpleLowerCaseMapping:0x184D - ,simpleTitleCaseMapping:0x184D - }, - { code:0x184E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184E - ,simpleLowerCaseMapping:0x184E - ,simpleTitleCaseMapping:0x184E - }, - { code:0x184F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x184F - ,simpleLowerCaseMapping:0x184F - ,simpleTitleCaseMapping:0x184F - }, - { code:0x1850 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1850 - ,simpleLowerCaseMapping:0x1850 - ,simpleTitleCaseMapping:0x1850 - }, - { code:0x1851 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1851 - ,simpleLowerCaseMapping:0x1851 - ,simpleTitleCaseMapping:0x1851 - }, - { code:0x1852 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1852 - ,simpleLowerCaseMapping:0x1852 - ,simpleTitleCaseMapping:0x1852 - }, - { code:0x1853 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1853 - ,simpleLowerCaseMapping:0x1853 - ,simpleTitleCaseMapping:0x1853 - }, - { code:0x1854 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1854 - ,simpleLowerCaseMapping:0x1854 - ,simpleTitleCaseMapping:0x1854 - }, - { code:0x1855 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1855 - ,simpleLowerCaseMapping:0x1855 - ,simpleTitleCaseMapping:0x1855 - }, - { code:0x1856 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1856 - ,simpleLowerCaseMapping:0x1856 - ,simpleTitleCaseMapping:0x1856 - }, - { code:0x1857 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1857 - ,simpleLowerCaseMapping:0x1857 - ,simpleTitleCaseMapping:0x1857 - }, - { code:0x1858 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1858 - ,simpleLowerCaseMapping:0x1858 - ,simpleTitleCaseMapping:0x1858 - }, - { code:0x1859 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1859 - ,simpleLowerCaseMapping:0x1859 - ,simpleTitleCaseMapping:0x1859 - }, - { code:0x185A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185A - ,simpleLowerCaseMapping:0x185A - ,simpleTitleCaseMapping:0x185A - }, - { code:0x185B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185B - ,simpleLowerCaseMapping:0x185B - ,simpleTitleCaseMapping:0x185B - }, - { code:0x185C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185C - ,simpleLowerCaseMapping:0x185C - ,simpleTitleCaseMapping:0x185C - }, - { code:0x185D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185D - ,simpleLowerCaseMapping:0x185D - ,simpleTitleCaseMapping:0x185D - }, - { code:0x185E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185E - ,simpleLowerCaseMapping:0x185E - ,simpleTitleCaseMapping:0x185E - }, - { code:0x185F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x185F - ,simpleLowerCaseMapping:0x185F - ,simpleTitleCaseMapping:0x185F - }, - { code:0x1860 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1860 - ,simpleLowerCaseMapping:0x1860 - ,simpleTitleCaseMapping:0x1860 - }, - { code:0x1861 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1861 - ,simpleLowerCaseMapping:0x1861 - ,simpleTitleCaseMapping:0x1861 - }, - { code:0x1862 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1862 - ,simpleLowerCaseMapping:0x1862 - ,simpleTitleCaseMapping:0x1862 - }, - { code:0x1863 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1863 - ,simpleLowerCaseMapping:0x1863 - ,simpleTitleCaseMapping:0x1863 - }, - { code:0x1864 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1864 - ,simpleLowerCaseMapping:0x1864 - ,simpleTitleCaseMapping:0x1864 - }, - { code:0x1865 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1865 - ,simpleLowerCaseMapping:0x1865 - ,simpleTitleCaseMapping:0x1865 - }, - { code:0x1866 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1866 - ,simpleLowerCaseMapping:0x1866 - ,simpleTitleCaseMapping:0x1866 - }, - { code:0x1867 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1867 - ,simpleLowerCaseMapping:0x1867 - ,simpleTitleCaseMapping:0x1867 - }, - { code:0x1868 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1868 - ,simpleLowerCaseMapping:0x1868 - ,simpleTitleCaseMapping:0x1868 - }, - { code:0x1869 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1869 - ,simpleLowerCaseMapping:0x1869 - ,simpleTitleCaseMapping:0x1869 - }, - { code:0x186A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186A - ,simpleLowerCaseMapping:0x186A - ,simpleTitleCaseMapping:0x186A - }, - { code:0x186B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186B - ,simpleLowerCaseMapping:0x186B - ,simpleTitleCaseMapping:0x186B - }, - { code:0x186C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186C - ,simpleLowerCaseMapping:0x186C - ,simpleTitleCaseMapping:0x186C - }, - { code:0x186D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186D - ,simpleLowerCaseMapping:0x186D - ,simpleTitleCaseMapping:0x186D - }, - { code:0x186E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186E - ,simpleLowerCaseMapping:0x186E - ,simpleTitleCaseMapping:0x186E - }, - { code:0x186F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x186F - ,simpleLowerCaseMapping:0x186F - ,simpleTitleCaseMapping:0x186F - }, - { code:0x1870 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1870 - ,simpleLowerCaseMapping:0x1870 - ,simpleTitleCaseMapping:0x1870 - }, - { code:0x1871 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1871 - ,simpleLowerCaseMapping:0x1871 - ,simpleTitleCaseMapping:0x1871 - }, - { code:0x1872 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1872 - ,simpleLowerCaseMapping:0x1872 - ,simpleTitleCaseMapping:0x1872 - }, - { code:0x1873 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1873 - ,simpleLowerCaseMapping:0x1873 - ,simpleTitleCaseMapping:0x1873 - }, - { code:0x1874 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1874 - ,simpleLowerCaseMapping:0x1874 - ,simpleTitleCaseMapping:0x1874 - }, - { code:0x1875 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1875 - ,simpleLowerCaseMapping:0x1875 - ,simpleTitleCaseMapping:0x1875 - }, - { code:0x1876 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1876 - ,simpleLowerCaseMapping:0x1876 - ,simpleTitleCaseMapping:0x1876 - }, - { code:0x1877 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1877 - ,simpleLowerCaseMapping:0x1877 - ,simpleTitleCaseMapping:0x1877 - }, - { code:0x1880 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1880 - ,simpleLowerCaseMapping:0x1880 - ,simpleTitleCaseMapping:0x1880 - }, - { code:0x1881 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1881 - ,simpleLowerCaseMapping:0x1881 - ,simpleTitleCaseMapping:0x1881 - }, - { code:0x1882 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1882 - ,simpleLowerCaseMapping:0x1882 - ,simpleTitleCaseMapping:0x1882 - }, - { code:0x1883 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1883 - ,simpleLowerCaseMapping:0x1883 - ,simpleTitleCaseMapping:0x1883 - }, - { code:0x1884 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1884 - ,simpleLowerCaseMapping:0x1884 - ,simpleTitleCaseMapping:0x1884 - }, - { code:0x1885 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1885 - ,simpleLowerCaseMapping:0x1885 - ,simpleTitleCaseMapping:0x1885 - }, - { code:0x1886 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1886 - ,simpleLowerCaseMapping:0x1886 - ,simpleTitleCaseMapping:0x1886 - }, - { code:0x1887 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1887 - ,simpleLowerCaseMapping:0x1887 - ,simpleTitleCaseMapping:0x1887 - }, - { code:0x1888 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1888 - ,simpleLowerCaseMapping:0x1888 - ,simpleTitleCaseMapping:0x1888 - }, - { code:0x1889 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1889 - ,simpleLowerCaseMapping:0x1889 - ,simpleTitleCaseMapping:0x1889 - }, - { code:0x188A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188A - ,simpleLowerCaseMapping:0x188A - ,simpleTitleCaseMapping:0x188A - }, - { code:0x188B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188B - ,simpleLowerCaseMapping:0x188B - ,simpleTitleCaseMapping:0x188B - }, - { code:0x188C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188C - ,simpleLowerCaseMapping:0x188C - ,simpleTitleCaseMapping:0x188C - }, - { code:0x188D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188D - ,simpleLowerCaseMapping:0x188D - ,simpleTitleCaseMapping:0x188D - }, - { code:0x188E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188E - ,simpleLowerCaseMapping:0x188E - ,simpleTitleCaseMapping:0x188E - }, - { code:0x188F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x188F - ,simpleLowerCaseMapping:0x188F - ,simpleTitleCaseMapping:0x188F - }, - { code:0x1890 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1890 - ,simpleLowerCaseMapping:0x1890 - ,simpleTitleCaseMapping:0x1890 - }, - { code:0x1891 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1891 - ,simpleLowerCaseMapping:0x1891 - ,simpleTitleCaseMapping:0x1891 - }, - { code:0x1892 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1892 - ,simpleLowerCaseMapping:0x1892 - ,simpleTitleCaseMapping:0x1892 - }, - { code:0x1893 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1893 - ,simpleLowerCaseMapping:0x1893 - ,simpleTitleCaseMapping:0x1893 - }, - { code:0x1894 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1894 - ,simpleLowerCaseMapping:0x1894 - ,simpleTitleCaseMapping:0x1894 - }, - { code:0x1895 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1895 - ,simpleLowerCaseMapping:0x1895 - ,simpleTitleCaseMapping:0x1895 - }, - { code:0x1896 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1896 - ,simpleLowerCaseMapping:0x1896 - ,simpleTitleCaseMapping:0x1896 - }, - { code:0x1897 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1897 - ,simpleLowerCaseMapping:0x1897 - ,simpleTitleCaseMapping:0x1897 - }, - { code:0x1898 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1898 - ,simpleLowerCaseMapping:0x1898 - ,simpleTitleCaseMapping:0x1898 - }, - { code:0x1899 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1899 - ,simpleLowerCaseMapping:0x1899 - ,simpleTitleCaseMapping:0x1899 - }, - { code:0x189A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189A - ,simpleLowerCaseMapping:0x189A - ,simpleTitleCaseMapping:0x189A - }, - { code:0x189B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189B - ,simpleLowerCaseMapping:0x189B - ,simpleTitleCaseMapping:0x189B - }, - { code:0x189C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189C - ,simpleLowerCaseMapping:0x189C - ,simpleTitleCaseMapping:0x189C - }, - { code:0x189D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189D - ,simpleLowerCaseMapping:0x189D - ,simpleTitleCaseMapping:0x189D - }, - { code:0x189E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189E - ,simpleLowerCaseMapping:0x189E - ,simpleTitleCaseMapping:0x189E - }, - { code:0x189F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x189F - ,simpleLowerCaseMapping:0x189F - ,simpleTitleCaseMapping:0x189F - }, - { code:0x18A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A0 - ,simpleLowerCaseMapping:0x18A0 - ,simpleTitleCaseMapping:0x18A0 - }, - { code:0x18A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A1 - ,simpleLowerCaseMapping:0x18A1 - ,simpleTitleCaseMapping:0x18A1 - }, - { code:0x18A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A2 - ,simpleLowerCaseMapping:0x18A2 - ,simpleTitleCaseMapping:0x18A2 - }, - { code:0x18A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A3 - ,simpleLowerCaseMapping:0x18A3 - ,simpleTitleCaseMapping:0x18A3 - }, - { code:0x18A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A4 - ,simpleLowerCaseMapping:0x18A4 - ,simpleTitleCaseMapping:0x18A4 - }, - { code:0x18A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A5 - ,simpleLowerCaseMapping:0x18A5 - ,simpleTitleCaseMapping:0x18A5 - }, - { code:0x18A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A6 - ,simpleLowerCaseMapping:0x18A6 - ,simpleTitleCaseMapping:0x18A6 - }, - { code:0x18A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A7 - ,simpleLowerCaseMapping:0x18A7 - ,simpleTitleCaseMapping:0x18A7 - }, - { code:0x18A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x18A8 - ,simpleLowerCaseMapping:0x18A8 - ,simpleTitleCaseMapping:0x18A8 - }, - { code:0x18A9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x18A9 - ,simpleLowerCaseMapping:0x18A9 - ,simpleTitleCaseMapping:0x18A9 - }, - { code:0x1900 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1900 - ,simpleLowerCaseMapping:0x1900 - ,simpleTitleCaseMapping:0x1900 - }, - { code:0x1901 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1901 - ,simpleLowerCaseMapping:0x1901 - ,simpleTitleCaseMapping:0x1901 - }, - { code:0x1902 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1902 - ,simpleLowerCaseMapping:0x1902 - ,simpleTitleCaseMapping:0x1902 - }, - { code:0x1903 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1903 - ,simpleLowerCaseMapping:0x1903 - ,simpleTitleCaseMapping:0x1903 - }, - { code:0x1904 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1904 - ,simpleLowerCaseMapping:0x1904 - ,simpleTitleCaseMapping:0x1904 - }, - { code:0x1905 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1905 - ,simpleLowerCaseMapping:0x1905 - ,simpleTitleCaseMapping:0x1905 - }, - { code:0x1906 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1906 - ,simpleLowerCaseMapping:0x1906 - ,simpleTitleCaseMapping:0x1906 - }, - { code:0x1907 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1907 - ,simpleLowerCaseMapping:0x1907 - ,simpleTitleCaseMapping:0x1907 - }, - { code:0x1908 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1908 - ,simpleLowerCaseMapping:0x1908 - ,simpleTitleCaseMapping:0x1908 - }, - { code:0x1909 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1909 - ,simpleLowerCaseMapping:0x1909 - ,simpleTitleCaseMapping:0x1909 - }, - { code:0x190A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190A - ,simpleLowerCaseMapping:0x190A - ,simpleTitleCaseMapping:0x190A - }, - { code:0x190B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190B - ,simpleLowerCaseMapping:0x190B - ,simpleTitleCaseMapping:0x190B - }, - { code:0x190C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190C - ,simpleLowerCaseMapping:0x190C - ,simpleTitleCaseMapping:0x190C - }, - { code:0x190D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190D - ,simpleLowerCaseMapping:0x190D - ,simpleTitleCaseMapping:0x190D - }, - { code:0x190E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190E - ,simpleLowerCaseMapping:0x190E - ,simpleTitleCaseMapping:0x190E - }, - { code:0x190F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x190F - ,simpleLowerCaseMapping:0x190F - ,simpleTitleCaseMapping:0x190F - }, - { code:0x1910 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1910 - ,simpleLowerCaseMapping:0x1910 - ,simpleTitleCaseMapping:0x1910 - }, - { code:0x1911 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1911 - ,simpleLowerCaseMapping:0x1911 - ,simpleTitleCaseMapping:0x1911 - }, - { code:0x1912 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1912 - ,simpleLowerCaseMapping:0x1912 - ,simpleTitleCaseMapping:0x1912 - }, - { code:0x1913 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1913 - ,simpleLowerCaseMapping:0x1913 - ,simpleTitleCaseMapping:0x1913 - }, - { code:0x1914 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1914 - ,simpleLowerCaseMapping:0x1914 - ,simpleTitleCaseMapping:0x1914 - }, - { code:0x1915 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1915 - ,simpleLowerCaseMapping:0x1915 - ,simpleTitleCaseMapping:0x1915 - }, - { code:0x1916 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1916 - ,simpleLowerCaseMapping:0x1916 - ,simpleTitleCaseMapping:0x1916 - }, - { code:0x1917 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1917 - ,simpleLowerCaseMapping:0x1917 - ,simpleTitleCaseMapping:0x1917 - }, - { code:0x1918 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1918 - ,simpleLowerCaseMapping:0x1918 - ,simpleTitleCaseMapping:0x1918 - }, - { code:0x1919 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1919 - ,simpleLowerCaseMapping:0x1919 - ,simpleTitleCaseMapping:0x1919 - }, - { code:0x191A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x191A - ,simpleLowerCaseMapping:0x191A - ,simpleTitleCaseMapping:0x191A - }, - { code:0x191B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x191B - ,simpleLowerCaseMapping:0x191B - ,simpleTitleCaseMapping:0x191B - }, - { code:0x191C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x191C - ,simpleLowerCaseMapping:0x191C - ,simpleTitleCaseMapping:0x191C - }, - { code:0x1920 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1920 - ,simpleLowerCaseMapping:0x1920 - ,simpleTitleCaseMapping:0x1920 - }, - { code:0x1921 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1921 - ,simpleLowerCaseMapping:0x1921 - ,simpleTitleCaseMapping:0x1921 - }, - { code:0x1922 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1922 - ,simpleLowerCaseMapping:0x1922 - ,simpleTitleCaseMapping:0x1922 - }, - { code:0x1923 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1923 - ,simpleLowerCaseMapping:0x1923 - ,simpleTitleCaseMapping:0x1923 - }, - { code:0x1924 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1924 - ,simpleLowerCaseMapping:0x1924 - ,simpleTitleCaseMapping:0x1924 - }, - { code:0x1925 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1925 - ,simpleLowerCaseMapping:0x1925 - ,simpleTitleCaseMapping:0x1925 - }, - { code:0x1926 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1926 - ,simpleLowerCaseMapping:0x1926 - ,simpleTitleCaseMapping:0x1926 - }, - { code:0x1927 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1927 - ,simpleLowerCaseMapping:0x1927 - ,simpleTitleCaseMapping:0x1927 - }, - { code:0x1928 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1928 - ,simpleLowerCaseMapping:0x1928 - ,simpleTitleCaseMapping:0x1928 - }, - { code:0x1929 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1929 - ,simpleLowerCaseMapping:0x1929 - ,simpleTitleCaseMapping:0x1929 - }, - { code:0x192A - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x192A - ,simpleLowerCaseMapping:0x192A - ,simpleTitleCaseMapping:0x192A - }, - { code:0x192B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x192B - ,simpleLowerCaseMapping:0x192B - ,simpleTitleCaseMapping:0x192B - }, - { code:0x1930 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1930 - ,simpleLowerCaseMapping:0x1930 - ,simpleTitleCaseMapping:0x1930 - }, - { code:0x1931 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1931 - ,simpleLowerCaseMapping:0x1931 - ,simpleTitleCaseMapping:0x1931 - }, - { code:0x1932 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1932 - ,simpleLowerCaseMapping:0x1932 - ,simpleTitleCaseMapping:0x1932 - }, - { code:0x1933 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1933 - ,simpleLowerCaseMapping:0x1933 - ,simpleTitleCaseMapping:0x1933 - }, - { code:0x1934 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1934 - ,simpleLowerCaseMapping:0x1934 - ,simpleTitleCaseMapping:0x1934 - }, - { code:0x1935 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1935 - ,simpleLowerCaseMapping:0x1935 - ,simpleTitleCaseMapping:0x1935 - }, - { code:0x1936 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1936 - ,simpleLowerCaseMapping:0x1936 - ,simpleTitleCaseMapping:0x1936 - }, - { code:0x1937 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1937 - ,simpleLowerCaseMapping:0x1937 - ,simpleTitleCaseMapping:0x1937 - }, - { code:0x1938 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1938 - ,simpleLowerCaseMapping:0x1938 - ,simpleTitleCaseMapping:0x1938 - }, - { code:0x1939 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1939 - ,simpleLowerCaseMapping:0x1939 - ,simpleTitleCaseMapping:0x1939 - }, - { code:0x193A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x193A - ,simpleLowerCaseMapping:0x193A - ,simpleTitleCaseMapping:0x193A - }, - { code:0x193B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x193B - ,simpleLowerCaseMapping:0x193B - ,simpleTitleCaseMapping:0x193B - }, - { code:0x1940 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1940 - ,simpleLowerCaseMapping:0x1940 - ,simpleTitleCaseMapping:0x1940 - }, - { code:0x1944 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1944 - ,simpleLowerCaseMapping:0x1944 - ,simpleTitleCaseMapping:0x1944 - }, - { code:0x1945 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1945 - ,simpleLowerCaseMapping:0x1945 - ,simpleTitleCaseMapping:0x1945 - }, - { code:0x1946 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1946 - ,simpleLowerCaseMapping:0x1946 - ,simpleTitleCaseMapping:0x1946 - }, - { code:0x1947 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1947 - ,simpleLowerCaseMapping:0x1947 - ,simpleTitleCaseMapping:0x1947 - }, - { code:0x1948 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1948 - ,simpleLowerCaseMapping:0x1948 - ,simpleTitleCaseMapping:0x1948 - }, - { code:0x1949 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1949 - ,simpleLowerCaseMapping:0x1949 - ,simpleTitleCaseMapping:0x1949 - }, - { code:0x194A - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194A - ,simpleLowerCaseMapping:0x194A - ,simpleTitleCaseMapping:0x194A - }, - { code:0x194B - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194B - ,simpleLowerCaseMapping:0x194B - ,simpleTitleCaseMapping:0x194B - }, - { code:0x194C - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194C - ,simpleLowerCaseMapping:0x194C - ,simpleTitleCaseMapping:0x194C - }, - { code:0x194D - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194D - ,simpleLowerCaseMapping:0x194D - ,simpleTitleCaseMapping:0x194D - }, - { code:0x194E - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194E - ,simpleLowerCaseMapping:0x194E - ,simpleTitleCaseMapping:0x194E - }, - { code:0x194F - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x194F - ,simpleLowerCaseMapping:0x194F - ,simpleTitleCaseMapping:0x194F - }, - { code:0x1950 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1950 - ,simpleLowerCaseMapping:0x1950 - ,simpleTitleCaseMapping:0x1950 - }, - { code:0x1951 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1951 - ,simpleLowerCaseMapping:0x1951 - ,simpleTitleCaseMapping:0x1951 - }, - { code:0x1952 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1952 - ,simpleLowerCaseMapping:0x1952 - ,simpleTitleCaseMapping:0x1952 - }, - { code:0x1953 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1953 - ,simpleLowerCaseMapping:0x1953 - ,simpleTitleCaseMapping:0x1953 - }, - { code:0x1954 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1954 - ,simpleLowerCaseMapping:0x1954 - ,simpleTitleCaseMapping:0x1954 - }, - { code:0x1955 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1955 - ,simpleLowerCaseMapping:0x1955 - ,simpleTitleCaseMapping:0x1955 - }, - { code:0x1956 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1956 - ,simpleLowerCaseMapping:0x1956 - ,simpleTitleCaseMapping:0x1956 - }, - { code:0x1957 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1957 - ,simpleLowerCaseMapping:0x1957 - ,simpleTitleCaseMapping:0x1957 - }, - { code:0x1958 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1958 - ,simpleLowerCaseMapping:0x1958 - ,simpleTitleCaseMapping:0x1958 - }, - { code:0x1959 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1959 - ,simpleLowerCaseMapping:0x1959 - ,simpleTitleCaseMapping:0x1959 - }, - { code:0x195A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195A - ,simpleLowerCaseMapping:0x195A - ,simpleTitleCaseMapping:0x195A - }, - { code:0x195B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195B - ,simpleLowerCaseMapping:0x195B - ,simpleTitleCaseMapping:0x195B - }, - { code:0x195C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195C - ,simpleLowerCaseMapping:0x195C - ,simpleTitleCaseMapping:0x195C - }, - { code:0x195D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195D - ,simpleLowerCaseMapping:0x195D - ,simpleTitleCaseMapping:0x195D - }, - { code:0x195E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195E - ,simpleLowerCaseMapping:0x195E - ,simpleTitleCaseMapping:0x195E - }, - { code:0x195F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x195F - ,simpleLowerCaseMapping:0x195F - ,simpleTitleCaseMapping:0x195F - }, - { code:0x1960 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1960 - ,simpleLowerCaseMapping:0x1960 - ,simpleTitleCaseMapping:0x1960 - }, - { code:0x1961 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1961 - ,simpleLowerCaseMapping:0x1961 - ,simpleTitleCaseMapping:0x1961 - }, - { code:0x1962 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1962 - ,simpleLowerCaseMapping:0x1962 - ,simpleTitleCaseMapping:0x1962 - }, - { code:0x1963 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1963 - ,simpleLowerCaseMapping:0x1963 - ,simpleTitleCaseMapping:0x1963 - }, - { code:0x1964 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1964 - ,simpleLowerCaseMapping:0x1964 - ,simpleTitleCaseMapping:0x1964 - }, - { code:0x1965 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1965 - ,simpleLowerCaseMapping:0x1965 - ,simpleTitleCaseMapping:0x1965 - }, - { code:0x1966 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1966 - ,simpleLowerCaseMapping:0x1966 - ,simpleTitleCaseMapping:0x1966 - }, - { code:0x1967 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1967 - ,simpleLowerCaseMapping:0x1967 - ,simpleTitleCaseMapping:0x1967 - }, - { code:0x1968 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1968 - ,simpleLowerCaseMapping:0x1968 - ,simpleTitleCaseMapping:0x1968 - }, - { code:0x1969 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1969 - ,simpleLowerCaseMapping:0x1969 - ,simpleTitleCaseMapping:0x1969 - }, - { code:0x196A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x196A - ,simpleLowerCaseMapping:0x196A - ,simpleTitleCaseMapping:0x196A - }, - { code:0x196B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x196B - ,simpleLowerCaseMapping:0x196B - ,simpleTitleCaseMapping:0x196B - }, - { code:0x196C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x196C - ,simpleLowerCaseMapping:0x196C - ,simpleTitleCaseMapping:0x196C - }, - { code:0x196D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x196D - ,simpleLowerCaseMapping:0x196D - ,simpleTitleCaseMapping:0x196D - }, - { code:0x1970 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1970 - ,simpleLowerCaseMapping:0x1970 - ,simpleTitleCaseMapping:0x1970 - }, - { code:0x1971 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1971 - ,simpleLowerCaseMapping:0x1971 - ,simpleTitleCaseMapping:0x1971 - }, - { code:0x1972 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1972 - ,simpleLowerCaseMapping:0x1972 - ,simpleTitleCaseMapping:0x1972 - }, - { code:0x1973 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1973 - ,simpleLowerCaseMapping:0x1973 - ,simpleTitleCaseMapping:0x1973 - }, - { code:0x1974 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1974 - ,simpleLowerCaseMapping:0x1974 - ,simpleTitleCaseMapping:0x1974 - }, - { code:0x1980 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1980 - ,simpleLowerCaseMapping:0x1980 - ,simpleTitleCaseMapping:0x1980 - }, - { code:0x1981 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1981 - ,simpleLowerCaseMapping:0x1981 - ,simpleTitleCaseMapping:0x1981 - }, - { code:0x1982 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1982 - ,simpleLowerCaseMapping:0x1982 - ,simpleTitleCaseMapping:0x1982 - }, - { code:0x1983 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1983 - ,simpleLowerCaseMapping:0x1983 - ,simpleTitleCaseMapping:0x1983 - }, - { code:0x1984 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1984 - ,simpleLowerCaseMapping:0x1984 - ,simpleTitleCaseMapping:0x1984 - }, - { code:0x1985 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1985 - ,simpleLowerCaseMapping:0x1985 - ,simpleTitleCaseMapping:0x1985 - }, - { code:0x1986 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1986 - ,simpleLowerCaseMapping:0x1986 - ,simpleTitleCaseMapping:0x1986 - }, - { code:0x1987 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1987 - ,simpleLowerCaseMapping:0x1987 - ,simpleTitleCaseMapping:0x1987 - }, - { code:0x1988 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1988 - ,simpleLowerCaseMapping:0x1988 - ,simpleTitleCaseMapping:0x1988 - }, - { code:0x1989 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1989 - ,simpleLowerCaseMapping:0x1989 - ,simpleTitleCaseMapping:0x1989 - }, - { code:0x198A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198A - ,simpleLowerCaseMapping:0x198A - ,simpleTitleCaseMapping:0x198A - }, - { code:0x198B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198B - ,simpleLowerCaseMapping:0x198B - ,simpleTitleCaseMapping:0x198B - }, - { code:0x198C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198C - ,simpleLowerCaseMapping:0x198C - ,simpleTitleCaseMapping:0x198C - }, - { code:0x198D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198D - ,simpleLowerCaseMapping:0x198D - ,simpleTitleCaseMapping:0x198D - }, - { code:0x198E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198E - ,simpleLowerCaseMapping:0x198E - ,simpleTitleCaseMapping:0x198E - }, - { code:0x198F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x198F - ,simpleLowerCaseMapping:0x198F - ,simpleTitleCaseMapping:0x198F - }, - { code:0x1990 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1990 - ,simpleLowerCaseMapping:0x1990 - ,simpleTitleCaseMapping:0x1990 - }, - { code:0x1991 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1991 - ,simpleLowerCaseMapping:0x1991 - ,simpleTitleCaseMapping:0x1991 - }, - { code:0x1992 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1992 - ,simpleLowerCaseMapping:0x1992 - ,simpleTitleCaseMapping:0x1992 - }, - { code:0x1993 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1993 - ,simpleLowerCaseMapping:0x1993 - ,simpleTitleCaseMapping:0x1993 - }, - { code:0x1994 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1994 - ,simpleLowerCaseMapping:0x1994 - ,simpleTitleCaseMapping:0x1994 - }, - { code:0x1995 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1995 - ,simpleLowerCaseMapping:0x1995 - ,simpleTitleCaseMapping:0x1995 - }, - { code:0x1996 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1996 - ,simpleLowerCaseMapping:0x1996 - ,simpleTitleCaseMapping:0x1996 - }, - { code:0x1997 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1997 - ,simpleLowerCaseMapping:0x1997 - ,simpleTitleCaseMapping:0x1997 - }, - { code:0x1998 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1998 - ,simpleLowerCaseMapping:0x1998 - ,simpleTitleCaseMapping:0x1998 - }, - { code:0x1999 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1999 - ,simpleLowerCaseMapping:0x1999 - ,simpleTitleCaseMapping:0x1999 - }, - { code:0x199A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199A - ,simpleLowerCaseMapping:0x199A - ,simpleTitleCaseMapping:0x199A - }, - { code:0x199B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199B - ,simpleLowerCaseMapping:0x199B - ,simpleTitleCaseMapping:0x199B - }, - { code:0x199C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199C - ,simpleLowerCaseMapping:0x199C - ,simpleTitleCaseMapping:0x199C - }, - { code:0x199D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199D - ,simpleLowerCaseMapping:0x199D - ,simpleTitleCaseMapping:0x199D - }, - { code:0x199E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199E - ,simpleLowerCaseMapping:0x199E - ,simpleTitleCaseMapping:0x199E - }, - { code:0x199F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x199F - ,simpleLowerCaseMapping:0x199F - ,simpleTitleCaseMapping:0x199F - }, - { code:0x19A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A0 - ,simpleLowerCaseMapping:0x19A0 - ,simpleTitleCaseMapping:0x19A0 - }, - { code:0x19A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A1 - ,simpleLowerCaseMapping:0x19A1 - ,simpleTitleCaseMapping:0x19A1 - }, - { code:0x19A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A2 - ,simpleLowerCaseMapping:0x19A2 - ,simpleTitleCaseMapping:0x19A2 - }, - { code:0x19A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A3 - ,simpleLowerCaseMapping:0x19A3 - ,simpleTitleCaseMapping:0x19A3 - }, - { code:0x19A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A4 - ,simpleLowerCaseMapping:0x19A4 - ,simpleTitleCaseMapping:0x19A4 - }, - { code:0x19A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A5 - ,simpleLowerCaseMapping:0x19A5 - ,simpleTitleCaseMapping:0x19A5 - }, - { code:0x19A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A6 - ,simpleLowerCaseMapping:0x19A6 - ,simpleTitleCaseMapping:0x19A6 - }, - { code:0x19A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A7 - ,simpleLowerCaseMapping:0x19A7 - ,simpleTitleCaseMapping:0x19A7 - }, - { code:0x19A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A8 - ,simpleLowerCaseMapping:0x19A8 - ,simpleTitleCaseMapping:0x19A8 - }, - { code:0x19A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19A9 - ,simpleLowerCaseMapping:0x19A9 - ,simpleTitleCaseMapping:0x19A9 - }, - { code:0x19B0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B0 - ,simpleLowerCaseMapping:0x19B0 - ,simpleTitleCaseMapping:0x19B0 - }, - { code:0x19B1 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B1 - ,simpleLowerCaseMapping:0x19B1 - ,simpleTitleCaseMapping:0x19B1 - }, - { code:0x19B2 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B2 - ,simpleLowerCaseMapping:0x19B2 - ,simpleTitleCaseMapping:0x19B2 - }, - { code:0x19B3 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B3 - ,simpleLowerCaseMapping:0x19B3 - ,simpleTitleCaseMapping:0x19B3 - }, - { code:0x19B4 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B4 - ,simpleLowerCaseMapping:0x19B4 - ,simpleTitleCaseMapping:0x19B4 - }, - { code:0x19B5 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B5 - ,simpleLowerCaseMapping:0x19B5 - ,simpleTitleCaseMapping:0x19B5 - }, - { code:0x19B6 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B6 - ,simpleLowerCaseMapping:0x19B6 - ,simpleTitleCaseMapping:0x19B6 - }, - { code:0x19B7 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B7 - ,simpleLowerCaseMapping:0x19B7 - ,simpleTitleCaseMapping:0x19B7 - }, - { code:0x19B8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B8 - ,simpleLowerCaseMapping:0x19B8 - ,simpleTitleCaseMapping:0x19B8 - }, - { code:0x19B9 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19B9 - ,simpleLowerCaseMapping:0x19B9 - ,simpleTitleCaseMapping:0x19B9 - }, - { code:0x19BA - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BA - ,simpleLowerCaseMapping:0x19BA - ,simpleTitleCaseMapping:0x19BA - }, - { code:0x19BB - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BB - ,simpleLowerCaseMapping:0x19BB - ,simpleTitleCaseMapping:0x19BB - }, - { code:0x19BC - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BC - ,simpleLowerCaseMapping:0x19BC - ,simpleTitleCaseMapping:0x19BC - }, - { code:0x19BD - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BD - ,simpleLowerCaseMapping:0x19BD - ,simpleTitleCaseMapping:0x19BD - }, - { code:0x19BE - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BE - ,simpleLowerCaseMapping:0x19BE - ,simpleTitleCaseMapping:0x19BE - }, - { code:0x19BF - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19BF - ,simpleLowerCaseMapping:0x19BF - ,simpleTitleCaseMapping:0x19BF - }, - { code:0x19C0 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19C0 - ,simpleLowerCaseMapping:0x19C0 - ,simpleTitleCaseMapping:0x19C0 - }, - { code:0x19C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C1 - ,simpleLowerCaseMapping:0x19C1 - ,simpleTitleCaseMapping:0x19C1 - }, - { code:0x19C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C2 - ,simpleLowerCaseMapping:0x19C2 - ,simpleTitleCaseMapping:0x19C2 - }, - { code:0x19C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C3 - ,simpleLowerCaseMapping:0x19C3 - ,simpleTitleCaseMapping:0x19C3 - }, - { code:0x19C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C4 - ,simpleLowerCaseMapping:0x19C4 - ,simpleTitleCaseMapping:0x19C4 - }, - { code:0x19C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C5 - ,simpleLowerCaseMapping:0x19C5 - ,simpleTitleCaseMapping:0x19C5 - }, - { code:0x19C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C6 - ,simpleLowerCaseMapping:0x19C6 - ,simpleTitleCaseMapping:0x19C6 - }, - { code:0x19C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x19C7 - ,simpleLowerCaseMapping:0x19C7 - ,simpleTitleCaseMapping:0x19C7 - }, - { code:0x19C8 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19C8 - ,simpleLowerCaseMapping:0x19C8 - ,simpleTitleCaseMapping:0x19C8 - }, - { code:0x19C9 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x19C9 - ,simpleLowerCaseMapping:0x19C9 - ,simpleTitleCaseMapping:0x19C9 - }, - { code:0x19D0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D0 - ,simpleLowerCaseMapping:0x19D0 - ,simpleTitleCaseMapping:0x19D0 - }, - { code:0x19D1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D1 - ,simpleLowerCaseMapping:0x19D1 - ,simpleTitleCaseMapping:0x19D1 - }, - { code:0x19D2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D2 - ,simpleLowerCaseMapping:0x19D2 - ,simpleTitleCaseMapping:0x19D2 - }, - { code:0x19D3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D3 - ,simpleLowerCaseMapping:0x19D3 - ,simpleTitleCaseMapping:0x19D3 - }, - { code:0x19D4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D4 - ,simpleLowerCaseMapping:0x19D4 - ,simpleTitleCaseMapping:0x19D4 - }, - { code:0x19D5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D5 - ,simpleLowerCaseMapping:0x19D5 - ,simpleTitleCaseMapping:0x19D5 - }, - { code:0x19D6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D6 - ,simpleLowerCaseMapping:0x19D6 - ,simpleTitleCaseMapping:0x19D6 - }, - { code:0x19D7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D7 - ,simpleLowerCaseMapping:0x19D7 - ,simpleTitleCaseMapping:0x19D7 - }, - { code:0x19D8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D8 - ,simpleLowerCaseMapping:0x19D8 - ,simpleTitleCaseMapping:0x19D8 - }, - { code:0x19D9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x19D9 - ,simpleLowerCaseMapping:0x19D9 - ,simpleTitleCaseMapping:0x19D9 - }, - { code:0x19DE - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x19DE - ,simpleLowerCaseMapping:0x19DE - ,simpleTitleCaseMapping:0x19DE - }, - { code:0x19DF - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x19DF - ,simpleLowerCaseMapping:0x19DF - ,simpleTitleCaseMapping:0x19DF - }, - { code:0x19E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E0 - ,simpleLowerCaseMapping:0x19E0 - ,simpleTitleCaseMapping:0x19E0 - }, - { code:0x19E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E1 - ,simpleLowerCaseMapping:0x19E1 - ,simpleTitleCaseMapping:0x19E1 - }, - { code:0x19E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E2 - ,simpleLowerCaseMapping:0x19E2 - ,simpleTitleCaseMapping:0x19E2 - }, - { code:0x19E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E3 - ,simpleLowerCaseMapping:0x19E3 - ,simpleTitleCaseMapping:0x19E3 - }, - { code:0x19E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E4 - ,simpleLowerCaseMapping:0x19E4 - ,simpleTitleCaseMapping:0x19E4 - }, - { code:0x19E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E5 - ,simpleLowerCaseMapping:0x19E5 - ,simpleTitleCaseMapping:0x19E5 - }, - { code:0x19E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E6 - ,simpleLowerCaseMapping:0x19E6 - ,simpleTitleCaseMapping:0x19E6 - }, - { code:0x19E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E7 - ,simpleLowerCaseMapping:0x19E7 - ,simpleTitleCaseMapping:0x19E7 - }, - { code:0x19E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E8 - ,simpleLowerCaseMapping:0x19E8 - ,simpleTitleCaseMapping:0x19E8 - }, - { code:0x19E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19E9 - ,simpleLowerCaseMapping:0x19E9 - ,simpleTitleCaseMapping:0x19E9 - }, - { code:0x19EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19EA - ,simpleLowerCaseMapping:0x19EA - ,simpleTitleCaseMapping:0x19EA - }, - { code:0x19EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19EB - ,simpleLowerCaseMapping:0x19EB - ,simpleTitleCaseMapping:0x19EB - }, - { code:0x19EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19EC - ,simpleLowerCaseMapping:0x19EC - ,simpleTitleCaseMapping:0x19EC - }, - { code:0x19ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19ED - ,simpleLowerCaseMapping:0x19ED - ,simpleTitleCaseMapping:0x19ED - }, - { code:0x19EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19EE - ,simpleLowerCaseMapping:0x19EE - ,simpleTitleCaseMapping:0x19EE - }, - { code:0x19EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19EF - ,simpleLowerCaseMapping:0x19EF - ,simpleTitleCaseMapping:0x19EF - }, - { code:0x19F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F0 - ,simpleLowerCaseMapping:0x19F0 - ,simpleTitleCaseMapping:0x19F0 - }, - { code:0x19F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F1 - ,simpleLowerCaseMapping:0x19F1 - ,simpleTitleCaseMapping:0x19F1 - }, - { code:0x19F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F2 - ,simpleLowerCaseMapping:0x19F2 - ,simpleTitleCaseMapping:0x19F2 - }, - { code:0x19F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F3 - ,simpleLowerCaseMapping:0x19F3 - ,simpleTitleCaseMapping:0x19F3 - }, - { code:0x19F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F4 - ,simpleLowerCaseMapping:0x19F4 - ,simpleTitleCaseMapping:0x19F4 - }, - { code:0x19F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F5 - ,simpleLowerCaseMapping:0x19F5 - ,simpleTitleCaseMapping:0x19F5 - }, - { code:0x19F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F6 - ,simpleLowerCaseMapping:0x19F6 - ,simpleTitleCaseMapping:0x19F6 - }, - { code:0x19F7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F7 - ,simpleLowerCaseMapping:0x19F7 - ,simpleTitleCaseMapping:0x19F7 - }, - { code:0x19F8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F8 - ,simpleLowerCaseMapping:0x19F8 - ,simpleTitleCaseMapping:0x19F8 - }, - { code:0x19F9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19F9 - ,simpleLowerCaseMapping:0x19F9 - ,simpleTitleCaseMapping:0x19F9 - }, - { code:0x19FA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FA - ,simpleLowerCaseMapping:0x19FA - ,simpleTitleCaseMapping:0x19FA - }, - { code:0x19FB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FB - ,simpleLowerCaseMapping:0x19FB - ,simpleTitleCaseMapping:0x19FB - }, - { code:0x19FC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FC - ,simpleLowerCaseMapping:0x19FC - ,simpleTitleCaseMapping:0x19FC - }, - { code:0x19FD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FD - ,simpleLowerCaseMapping:0x19FD - ,simpleTitleCaseMapping:0x19FD - }, - { code:0x19FE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FE - ,simpleLowerCaseMapping:0x19FE - ,simpleTitleCaseMapping:0x19FE - }, - { code:0x19FF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x19FF - ,simpleLowerCaseMapping:0x19FF - ,simpleTitleCaseMapping:0x19FF - }, - { code:0x1A00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A00 - ,simpleLowerCaseMapping:0x1A00 - ,simpleTitleCaseMapping:0x1A00 - }, - { code:0x1A01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A01 - ,simpleLowerCaseMapping:0x1A01 - ,simpleTitleCaseMapping:0x1A01 - }, - { code:0x1A02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A02 - ,simpleLowerCaseMapping:0x1A02 - ,simpleTitleCaseMapping:0x1A02 - }, - { code:0x1A03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A03 - ,simpleLowerCaseMapping:0x1A03 - ,simpleTitleCaseMapping:0x1A03 - }, - { code:0x1A04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A04 - ,simpleLowerCaseMapping:0x1A04 - ,simpleTitleCaseMapping:0x1A04 - }, - { code:0x1A05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A05 - ,simpleLowerCaseMapping:0x1A05 - ,simpleTitleCaseMapping:0x1A05 - }, - { code:0x1A06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A06 - ,simpleLowerCaseMapping:0x1A06 - ,simpleTitleCaseMapping:0x1A06 - }, - { code:0x1A07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A07 - ,simpleLowerCaseMapping:0x1A07 - ,simpleTitleCaseMapping:0x1A07 - }, - { code:0x1A08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A08 - ,simpleLowerCaseMapping:0x1A08 - ,simpleTitleCaseMapping:0x1A08 - }, - { code:0x1A09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A09 - ,simpleLowerCaseMapping:0x1A09 - ,simpleTitleCaseMapping:0x1A09 - }, - { code:0x1A0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0A - ,simpleLowerCaseMapping:0x1A0A - ,simpleTitleCaseMapping:0x1A0A - }, - { code:0x1A0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0B - ,simpleLowerCaseMapping:0x1A0B - ,simpleTitleCaseMapping:0x1A0B - }, - { code:0x1A0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0C - ,simpleLowerCaseMapping:0x1A0C - ,simpleTitleCaseMapping:0x1A0C - }, - { code:0x1A0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0D - ,simpleLowerCaseMapping:0x1A0D - ,simpleTitleCaseMapping:0x1A0D - }, - { code:0x1A0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0E - ,simpleLowerCaseMapping:0x1A0E - ,simpleTitleCaseMapping:0x1A0E - }, - { code:0x1A0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A0F - ,simpleLowerCaseMapping:0x1A0F - ,simpleTitleCaseMapping:0x1A0F - }, - { code:0x1A10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A10 - ,simpleLowerCaseMapping:0x1A10 - ,simpleTitleCaseMapping:0x1A10 - }, - { code:0x1A11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A11 - ,simpleLowerCaseMapping:0x1A11 - ,simpleTitleCaseMapping:0x1A11 - }, - { code:0x1A12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A12 - ,simpleLowerCaseMapping:0x1A12 - ,simpleTitleCaseMapping:0x1A12 - }, - { code:0x1A13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A13 - ,simpleLowerCaseMapping:0x1A13 - ,simpleTitleCaseMapping:0x1A13 - }, - { code:0x1A14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A14 - ,simpleLowerCaseMapping:0x1A14 - ,simpleTitleCaseMapping:0x1A14 - }, - { code:0x1A15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A15 - ,simpleLowerCaseMapping:0x1A15 - ,simpleTitleCaseMapping:0x1A15 - }, - { code:0x1A16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1A16 - ,simpleLowerCaseMapping:0x1A16 - ,simpleTitleCaseMapping:0x1A16 - }, - { code:0x1A17 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1A17 - ,simpleLowerCaseMapping:0x1A17 - ,simpleTitleCaseMapping:0x1A17 - }, - { code:0x1A18 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1A18 - ,simpleLowerCaseMapping:0x1A18 - ,simpleTitleCaseMapping:0x1A18 - }, - { code:0x1A19 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1A19 - ,simpleLowerCaseMapping:0x1A19 - ,simpleTitleCaseMapping:0x1A19 - }, - { code:0x1A1A - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1A1A - ,simpleLowerCaseMapping:0x1A1A - ,simpleTitleCaseMapping:0x1A1A - }, - { code:0x1A1B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1A1B - ,simpleLowerCaseMapping:0x1A1B - ,simpleTitleCaseMapping:0x1A1B - }, - { code:0x1A1E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1A1E - ,simpleLowerCaseMapping:0x1A1E - ,simpleTitleCaseMapping:0x1A1E - }, - { code:0x1A1F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1A1F - ,simpleLowerCaseMapping:0x1A1F - ,simpleTitleCaseMapping:0x1A1F - }, - { code:0x1B00 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B00 - ,simpleLowerCaseMapping:0x1B00 - ,simpleTitleCaseMapping:0x1B00 - }, - { code:0x1B01 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B01 - ,simpleLowerCaseMapping:0x1B01 - ,simpleTitleCaseMapping:0x1B01 - }, - { code:0x1B02 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B02 - ,simpleLowerCaseMapping:0x1B02 - ,simpleTitleCaseMapping:0x1B02 - }, - { code:0x1B03 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B03 - ,simpleLowerCaseMapping:0x1B03 - ,simpleTitleCaseMapping:0x1B03 - }, - { code:0x1B04 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B04 - ,simpleLowerCaseMapping:0x1B04 - ,simpleTitleCaseMapping:0x1B04 - }, - { code:0x1B05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B05 - ,simpleLowerCaseMapping:0x1B05 - ,simpleTitleCaseMapping:0x1B05 - }, - { code:0x1B06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B06 - ,simpleLowerCaseMapping:0x1B06 - ,simpleTitleCaseMapping:0x1B06 - }, - { code:0x1B07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B07 - ,simpleLowerCaseMapping:0x1B07 - ,simpleTitleCaseMapping:0x1B07 - }, - { code:0x1B08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B08 - ,simpleLowerCaseMapping:0x1B08 - ,simpleTitleCaseMapping:0x1B08 - }, - { code:0x1B09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B09 - ,simpleLowerCaseMapping:0x1B09 - ,simpleTitleCaseMapping:0x1B09 - }, - { code:0x1B0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0A - ,simpleLowerCaseMapping:0x1B0A - ,simpleTitleCaseMapping:0x1B0A - }, - { code:0x1B0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0B - ,simpleLowerCaseMapping:0x1B0B - ,simpleTitleCaseMapping:0x1B0B - }, - { code:0x1B0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0C - ,simpleLowerCaseMapping:0x1B0C - ,simpleTitleCaseMapping:0x1B0C - }, - { code:0x1B0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0D - ,simpleLowerCaseMapping:0x1B0D - ,simpleTitleCaseMapping:0x1B0D - }, - { code:0x1B0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0E - ,simpleLowerCaseMapping:0x1B0E - ,simpleTitleCaseMapping:0x1B0E - }, - { code:0x1B0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B0F - ,simpleLowerCaseMapping:0x1B0F - ,simpleTitleCaseMapping:0x1B0F - }, - { code:0x1B10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B10 - ,simpleLowerCaseMapping:0x1B10 - ,simpleTitleCaseMapping:0x1B10 - }, - { code:0x1B11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B11 - ,simpleLowerCaseMapping:0x1B11 - ,simpleTitleCaseMapping:0x1B11 - }, - { code:0x1B12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B12 - ,simpleLowerCaseMapping:0x1B12 - ,simpleTitleCaseMapping:0x1B12 - }, - { code:0x1B13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B13 - ,simpleLowerCaseMapping:0x1B13 - ,simpleTitleCaseMapping:0x1B13 - }, - { code:0x1B14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B14 - ,simpleLowerCaseMapping:0x1B14 - ,simpleTitleCaseMapping:0x1B14 - }, - { code:0x1B15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B15 - ,simpleLowerCaseMapping:0x1B15 - ,simpleTitleCaseMapping:0x1B15 - }, - { code:0x1B16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B16 - ,simpleLowerCaseMapping:0x1B16 - ,simpleTitleCaseMapping:0x1B16 - }, - { code:0x1B17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B17 - ,simpleLowerCaseMapping:0x1B17 - ,simpleTitleCaseMapping:0x1B17 - }, - { code:0x1B18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B18 - ,simpleLowerCaseMapping:0x1B18 - ,simpleTitleCaseMapping:0x1B18 - }, - { code:0x1B19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B19 - ,simpleLowerCaseMapping:0x1B19 - ,simpleTitleCaseMapping:0x1B19 - }, - { code:0x1B1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1A - ,simpleLowerCaseMapping:0x1B1A - ,simpleTitleCaseMapping:0x1B1A - }, - { code:0x1B1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1B - ,simpleLowerCaseMapping:0x1B1B - ,simpleTitleCaseMapping:0x1B1B - }, - { code:0x1B1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1C - ,simpleLowerCaseMapping:0x1B1C - ,simpleTitleCaseMapping:0x1B1C - }, - { code:0x1B1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1D - ,simpleLowerCaseMapping:0x1B1D - ,simpleTitleCaseMapping:0x1B1D - }, - { code:0x1B1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1E - ,simpleLowerCaseMapping:0x1B1E - ,simpleTitleCaseMapping:0x1B1E - }, - { code:0x1B1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B1F - ,simpleLowerCaseMapping:0x1B1F - ,simpleTitleCaseMapping:0x1B1F - }, - { code:0x1B20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B20 - ,simpleLowerCaseMapping:0x1B20 - ,simpleTitleCaseMapping:0x1B20 - }, - { code:0x1B21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B21 - ,simpleLowerCaseMapping:0x1B21 - ,simpleTitleCaseMapping:0x1B21 - }, - { code:0x1B22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B22 - ,simpleLowerCaseMapping:0x1B22 - ,simpleTitleCaseMapping:0x1B22 - }, - { code:0x1B23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B23 - ,simpleLowerCaseMapping:0x1B23 - ,simpleTitleCaseMapping:0x1B23 - }, - { code:0x1B24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B24 - ,simpleLowerCaseMapping:0x1B24 - ,simpleTitleCaseMapping:0x1B24 - }, - { code:0x1B25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B25 - ,simpleLowerCaseMapping:0x1B25 - ,simpleTitleCaseMapping:0x1B25 - }, - { code:0x1B26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B26 - ,simpleLowerCaseMapping:0x1B26 - ,simpleTitleCaseMapping:0x1B26 - }, - { code:0x1B27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B27 - ,simpleLowerCaseMapping:0x1B27 - ,simpleTitleCaseMapping:0x1B27 - }, - { code:0x1B28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B28 - ,simpleLowerCaseMapping:0x1B28 - ,simpleTitleCaseMapping:0x1B28 - }, - { code:0x1B29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B29 - ,simpleLowerCaseMapping:0x1B29 - ,simpleTitleCaseMapping:0x1B29 - }, - { code:0x1B2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2A - ,simpleLowerCaseMapping:0x1B2A - ,simpleTitleCaseMapping:0x1B2A - }, - { code:0x1B2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2B - ,simpleLowerCaseMapping:0x1B2B - ,simpleTitleCaseMapping:0x1B2B - }, - { code:0x1B2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2C - ,simpleLowerCaseMapping:0x1B2C - ,simpleTitleCaseMapping:0x1B2C - }, - { code:0x1B2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2D - ,simpleLowerCaseMapping:0x1B2D - ,simpleTitleCaseMapping:0x1B2D - }, - { code:0x1B2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2E - ,simpleLowerCaseMapping:0x1B2E - ,simpleTitleCaseMapping:0x1B2E - }, - { code:0x1B2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B2F - ,simpleLowerCaseMapping:0x1B2F - ,simpleTitleCaseMapping:0x1B2F - }, - { code:0x1B30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B30 - ,simpleLowerCaseMapping:0x1B30 - ,simpleTitleCaseMapping:0x1B30 - }, - { code:0x1B31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B31 - ,simpleLowerCaseMapping:0x1B31 - ,simpleTitleCaseMapping:0x1B31 - }, - { code:0x1B32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B32 - ,simpleLowerCaseMapping:0x1B32 - ,simpleTitleCaseMapping:0x1B32 - }, - { code:0x1B33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B33 - ,simpleLowerCaseMapping:0x1B33 - ,simpleTitleCaseMapping:0x1B33 - }, - { code:0x1B34 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B34 - ,simpleLowerCaseMapping:0x1B34 - ,simpleTitleCaseMapping:0x1B34 - }, - { code:0x1B35 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B35 - ,simpleLowerCaseMapping:0x1B35 - ,simpleTitleCaseMapping:0x1B35 - }, - { code:0x1B36 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B36 - ,simpleLowerCaseMapping:0x1B36 - ,simpleTitleCaseMapping:0x1B36 - }, - { code:0x1B37 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B37 - ,simpleLowerCaseMapping:0x1B37 - ,simpleTitleCaseMapping:0x1B37 - }, - { code:0x1B38 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B38 - ,simpleLowerCaseMapping:0x1B38 - ,simpleTitleCaseMapping:0x1B38 - }, - { code:0x1B39 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B39 - ,simpleLowerCaseMapping:0x1B39 - ,simpleTitleCaseMapping:0x1B39 - }, - { code:0x1B3A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B3A - ,simpleLowerCaseMapping:0x1B3A - ,simpleTitleCaseMapping:0x1B3A - }, - { code:0x1B3B - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B3B - ,simpleLowerCaseMapping:0x1B3B - ,simpleTitleCaseMapping:0x1B3B - }, - { code:0x1B3C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B3C - ,simpleLowerCaseMapping:0x1B3C - ,simpleTitleCaseMapping:0x1B3C - }, - { code:0x1B3D - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B3D - ,simpleLowerCaseMapping:0x1B3D - ,simpleTitleCaseMapping:0x1B3D - }, - { code:0x1B3E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B3E - ,simpleLowerCaseMapping:0x1B3E - ,simpleTitleCaseMapping:0x1B3E - }, - { code:0x1B3F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B3F - ,simpleLowerCaseMapping:0x1B3F - ,simpleTitleCaseMapping:0x1B3F - }, - { code:0x1B40 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B40 - ,simpleLowerCaseMapping:0x1B40 - ,simpleTitleCaseMapping:0x1B40 - }, - { code:0x1B41 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B41 - ,simpleLowerCaseMapping:0x1B41 - ,simpleTitleCaseMapping:0x1B41 - }, - { code:0x1B42 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B42 - ,simpleLowerCaseMapping:0x1B42 - ,simpleTitleCaseMapping:0x1B42 - }, - { code:0x1B43 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B43 - ,simpleLowerCaseMapping:0x1B43 - ,simpleTitleCaseMapping:0x1B43 - }, - { code:0x1B44 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1B44 - ,simpleLowerCaseMapping:0x1B44 - ,simpleTitleCaseMapping:0x1B44 - }, - { code:0x1B45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B45 - ,simpleLowerCaseMapping:0x1B45 - ,simpleTitleCaseMapping:0x1B45 - }, - { code:0x1B46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B46 - ,simpleLowerCaseMapping:0x1B46 - ,simpleTitleCaseMapping:0x1B46 - }, - { code:0x1B47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B47 - ,simpleLowerCaseMapping:0x1B47 - ,simpleTitleCaseMapping:0x1B47 - }, - { code:0x1B48 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B48 - ,simpleLowerCaseMapping:0x1B48 - ,simpleTitleCaseMapping:0x1B48 - }, - { code:0x1B49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B49 - ,simpleLowerCaseMapping:0x1B49 - ,simpleTitleCaseMapping:0x1B49 - }, - { code:0x1B4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B4A - ,simpleLowerCaseMapping:0x1B4A - ,simpleTitleCaseMapping:0x1B4A - }, - { code:0x1B4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1B4B - ,simpleLowerCaseMapping:0x1B4B - ,simpleTitleCaseMapping:0x1B4B - }, - { code:0x1B50 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B50 - ,simpleLowerCaseMapping:0x1B50 - ,simpleTitleCaseMapping:0x1B50 - }, - { code:0x1B51 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B51 - ,simpleLowerCaseMapping:0x1B51 - ,simpleTitleCaseMapping:0x1B51 - }, - { code:0x1B52 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B52 - ,simpleLowerCaseMapping:0x1B52 - ,simpleTitleCaseMapping:0x1B52 - }, - { code:0x1B53 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B53 - ,simpleLowerCaseMapping:0x1B53 - ,simpleTitleCaseMapping:0x1B53 - }, - { code:0x1B54 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B54 - ,simpleLowerCaseMapping:0x1B54 - ,simpleTitleCaseMapping:0x1B54 - }, - { code:0x1B55 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B55 - ,simpleLowerCaseMapping:0x1B55 - ,simpleTitleCaseMapping:0x1B55 - }, - { code:0x1B56 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B56 - ,simpleLowerCaseMapping:0x1B56 - ,simpleTitleCaseMapping:0x1B56 - }, - { code:0x1B57 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B57 - ,simpleLowerCaseMapping:0x1B57 - ,simpleTitleCaseMapping:0x1B57 - }, - { code:0x1B58 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B58 - ,simpleLowerCaseMapping:0x1B58 - ,simpleTitleCaseMapping:0x1B58 - }, - { code:0x1B59 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1B59 - ,simpleLowerCaseMapping:0x1B59 - ,simpleTitleCaseMapping:0x1B59 - }, - { code:0x1B5A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5A - ,simpleLowerCaseMapping:0x1B5A - ,simpleTitleCaseMapping:0x1B5A - }, - { code:0x1B5B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5B - ,simpleLowerCaseMapping:0x1B5B - ,simpleTitleCaseMapping:0x1B5B - }, - { code:0x1B5C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5C - ,simpleLowerCaseMapping:0x1B5C - ,simpleTitleCaseMapping:0x1B5C - }, - { code:0x1B5D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5D - ,simpleLowerCaseMapping:0x1B5D - ,simpleTitleCaseMapping:0x1B5D - }, - { code:0x1B5E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5E - ,simpleLowerCaseMapping:0x1B5E - ,simpleTitleCaseMapping:0x1B5E - }, - { code:0x1B5F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B5F - ,simpleLowerCaseMapping:0x1B5F - ,simpleTitleCaseMapping:0x1B5F - }, - { code:0x1B60 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1B60 - ,simpleLowerCaseMapping:0x1B60 - ,simpleTitleCaseMapping:0x1B60 - }, - { code:0x1B61 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B61 - ,simpleLowerCaseMapping:0x1B61 - ,simpleTitleCaseMapping:0x1B61 - }, - { code:0x1B62 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B62 - ,simpleLowerCaseMapping:0x1B62 - ,simpleTitleCaseMapping:0x1B62 - }, - { code:0x1B63 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B63 - ,simpleLowerCaseMapping:0x1B63 - ,simpleTitleCaseMapping:0x1B63 - }, - { code:0x1B64 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B64 - ,simpleLowerCaseMapping:0x1B64 - ,simpleTitleCaseMapping:0x1B64 - }, - { code:0x1B65 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B65 - ,simpleLowerCaseMapping:0x1B65 - ,simpleTitleCaseMapping:0x1B65 - }, - { code:0x1B66 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B66 - ,simpleLowerCaseMapping:0x1B66 - ,simpleTitleCaseMapping:0x1B66 - }, - { code:0x1B67 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B67 - ,simpleLowerCaseMapping:0x1B67 - ,simpleTitleCaseMapping:0x1B67 - }, - { code:0x1B68 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B68 - ,simpleLowerCaseMapping:0x1B68 - ,simpleTitleCaseMapping:0x1B68 - }, - { code:0x1B69 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B69 - ,simpleLowerCaseMapping:0x1B69 - ,simpleTitleCaseMapping:0x1B69 - }, - { code:0x1B6A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B6A - ,simpleLowerCaseMapping:0x1B6A - ,simpleTitleCaseMapping:0x1B6A - }, - { code:0x1B6B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B6B - ,simpleLowerCaseMapping:0x1B6B - ,simpleTitleCaseMapping:0x1B6B - }, - { code:0x1B6C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B6C - ,simpleLowerCaseMapping:0x1B6C - ,simpleTitleCaseMapping:0x1B6C - }, - { code:0x1B6D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B6D - ,simpleLowerCaseMapping:0x1B6D - ,simpleTitleCaseMapping:0x1B6D - }, - { code:0x1B6E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B6E - ,simpleLowerCaseMapping:0x1B6E - ,simpleTitleCaseMapping:0x1B6E - }, - { code:0x1B6F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B6F - ,simpleLowerCaseMapping:0x1B6F - ,simpleTitleCaseMapping:0x1B6F - }, - { code:0x1B70 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B70 - ,simpleLowerCaseMapping:0x1B70 - ,simpleTitleCaseMapping:0x1B70 - }, - { code:0x1B71 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B71 - ,simpleLowerCaseMapping:0x1B71 - ,simpleTitleCaseMapping:0x1B71 - }, - { code:0x1B72 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B72 - ,simpleLowerCaseMapping:0x1B72 - ,simpleTitleCaseMapping:0x1B72 - }, - { code:0x1B73 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1B73 - ,simpleLowerCaseMapping:0x1B73 - ,simpleTitleCaseMapping:0x1B73 - }, - { code:0x1B74 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B74 - ,simpleLowerCaseMapping:0x1B74 - ,simpleTitleCaseMapping:0x1B74 - }, - { code:0x1B75 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B75 - ,simpleLowerCaseMapping:0x1B75 - ,simpleTitleCaseMapping:0x1B75 - }, - { code:0x1B76 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B76 - ,simpleLowerCaseMapping:0x1B76 - ,simpleTitleCaseMapping:0x1B76 - }, - { code:0x1B77 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B77 - ,simpleLowerCaseMapping:0x1B77 - ,simpleTitleCaseMapping:0x1B77 - }, - { code:0x1B78 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B78 - ,simpleLowerCaseMapping:0x1B78 - ,simpleTitleCaseMapping:0x1B78 - }, - { code:0x1B79 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B79 - ,simpleLowerCaseMapping:0x1B79 - ,simpleTitleCaseMapping:0x1B79 - }, - { code:0x1B7A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B7A - ,simpleLowerCaseMapping:0x1B7A - ,simpleTitleCaseMapping:0x1B7A - }, - { code:0x1B7B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B7B - ,simpleLowerCaseMapping:0x1B7B - ,simpleTitleCaseMapping:0x1B7B - }, - { code:0x1B7C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1B7C - ,simpleLowerCaseMapping:0x1B7C - ,simpleTitleCaseMapping:0x1B7C - }, - { code:0x1D00 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D00 - ,simpleLowerCaseMapping:0x1D00 - ,simpleTitleCaseMapping:0x1D00 - }, - { code:0x1D01 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D01 - ,simpleLowerCaseMapping:0x1D01 - ,simpleTitleCaseMapping:0x1D01 - }, - { code:0x1D02 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D02 - ,simpleLowerCaseMapping:0x1D02 - ,simpleTitleCaseMapping:0x1D02 - }, - { code:0x1D03 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D03 - ,simpleLowerCaseMapping:0x1D03 - ,simpleTitleCaseMapping:0x1D03 - }, - { code:0x1D04 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D04 - ,simpleLowerCaseMapping:0x1D04 - ,simpleTitleCaseMapping:0x1D04 - }, - { code:0x1D05 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D05 - ,simpleLowerCaseMapping:0x1D05 - ,simpleTitleCaseMapping:0x1D05 - }, - { code:0x1D06 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D06 - ,simpleLowerCaseMapping:0x1D06 - ,simpleTitleCaseMapping:0x1D06 - }, - { code:0x1D07 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D07 - ,simpleLowerCaseMapping:0x1D07 - ,simpleTitleCaseMapping:0x1D07 - }, - { code:0x1D08 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D08 - ,simpleLowerCaseMapping:0x1D08 - ,simpleTitleCaseMapping:0x1D08 - }, - { code:0x1D09 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D09 - ,simpleLowerCaseMapping:0x1D09 - ,simpleTitleCaseMapping:0x1D09 - }, - { code:0x1D0A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0A - ,simpleLowerCaseMapping:0x1D0A - ,simpleTitleCaseMapping:0x1D0A - }, - { code:0x1D0B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0B - ,simpleLowerCaseMapping:0x1D0B - ,simpleTitleCaseMapping:0x1D0B - }, - { code:0x1D0C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0C - ,simpleLowerCaseMapping:0x1D0C - ,simpleTitleCaseMapping:0x1D0C - }, - { code:0x1D0D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0D - ,simpleLowerCaseMapping:0x1D0D - ,simpleTitleCaseMapping:0x1D0D - }, - { code:0x1D0E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0E - ,simpleLowerCaseMapping:0x1D0E - ,simpleTitleCaseMapping:0x1D0E - }, - { code:0x1D0F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D0F - ,simpleLowerCaseMapping:0x1D0F - ,simpleTitleCaseMapping:0x1D0F - }, - { code:0x1D10 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D10 - ,simpleLowerCaseMapping:0x1D10 - ,simpleTitleCaseMapping:0x1D10 - }, - { code:0x1D11 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D11 - ,simpleLowerCaseMapping:0x1D11 - ,simpleTitleCaseMapping:0x1D11 - }, - { code:0x1D12 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D12 - ,simpleLowerCaseMapping:0x1D12 - ,simpleTitleCaseMapping:0x1D12 - }, - { code:0x1D13 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D13 - ,simpleLowerCaseMapping:0x1D13 - ,simpleTitleCaseMapping:0x1D13 - }, - { code:0x1D14 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D14 - ,simpleLowerCaseMapping:0x1D14 - ,simpleTitleCaseMapping:0x1D14 - }, - { code:0x1D15 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D15 - ,simpleLowerCaseMapping:0x1D15 - ,simpleTitleCaseMapping:0x1D15 - }, - { code:0x1D16 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D16 - ,simpleLowerCaseMapping:0x1D16 - ,simpleTitleCaseMapping:0x1D16 - }, - { code:0x1D17 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D17 - ,simpleLowerCaseMapping:0x1D17 - ,simpleTitleCaseMapping:0x1D17 - }, - { code:0x1D18 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D18 - ,simpleLowerCaseMapping:0x1D18 - ,simpleTitleCaseMapping:0x1D18 - }, - { code:0x1D19 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D19 - ,simpleLowerCaseMapping:0x1D19 - ,simpleTitleCaseMapping:0x1D19 - }, - { code:0x1D1A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1A - ,simpleLowerCaseMapping:0x1D1A - ,simpleTitleCaseMapping:0x1D1A - }, - { code:0x1D1B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1B - ,simpleLowerCaseMapping:0x1D1B - ,simpleTitleCaseMapping:0x1D1B - }, - { code:0x1D1C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1C - ,simpleLowerCaseMapping:0x1D1C - ,simpleTitleCaseMapping:0x1D1C - }, - { code:0x1D1D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1D - ,simpleLowerCaseMapping:0x1D1D - ,simpleTitleCaseMapping:0x1D1D - }, - { code:0x1D1E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1E - ,simpleLowerCaseMapping:0x1D1E - ,simpleTitleCaseMapping:0x1D1E - }, - { code:0x1D1F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D1F - ,simpleLowerCaseMapping:0x1D1F - ,simpleTitleCaseMapping:0x1D1F - }, - { code:0x1D20 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D20 - ,simpleLowerCaseMapping:0x1D20 - ,simpleTitleCaseMapping:0x1D20 - }, - { code:0x1D21 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D21 - ,simpleLowerCaseMapping:0x1D21 - ,simpleTitleCaseMapping:0x1D21 - }, - { code:0x1D22 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D22 - ,simpleLowerCaseMapping:0x1D22 - ,simpleTitleCaseMapping:0x1D22 - }, - { code:0x1D23 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D23 - ,simpleLowerCaseMapping:0x1D23 - ,simpleTitleCaseMapping:0x1D23 - }, - { code:0x1D24 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D24 - ,simpleLowerCaseMapping:0x1D24 - ,simpleTitleCaseMapping:0x1D24 - }, - { code:0x1D25 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D25 - ,simpleLowerCaseMapping:0x1D25 - ,simpleTitleCaseMapping:0x1D25 - }, - { code:0x1D26 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D26 - ,simpleLowerCaseMapping:0x1D26 - ,simpleTitleCaseMapping:0x1D26 - }, - { code:0x1D27 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D27 - ,simpleLowerCaseMapping:0x1D27 - ,simpleTitleCaseMapping:0x1D27 - }, - { code:0x1D28 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D28 - ,simpleLowerCaseMapping:0x1D28 - ,simpleTitleCaseMapping:0x1D28 - }, - { code:0x1D29 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D29 - ,simpleLowerCaseMapping:0x1D29 - ,simpleTitleCaseMapping:0x1D29 - }, - { code:0x1D2A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D2A - ,simpleLowerCaseMapping:0x1D2A - ,simpleTitleCaseMapping:0x1D2A - }, - { code:0x1D2B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D2B - ,simpleLowerCaseMapping:0x1D2B - ,simpleTitleCaseMapping:0x1D2B - }, - { code:0x1D2C - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D2C - ,simpleLowerCaseMapping:0x1D2C - ,simpleTitleCaseMapping:0x1D2C - }, - { code:0x1D2D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D2D - ,simpleLowerCaseMapping:0x1D2D - ,simpleTitleCaseMapping:0x1D2D - }, - { code:0x1D2E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D2E - ,simpleLowerCaseMapping:0x1D2E - ,simpleTitleCaseMapping:0x1D2E - }, - { code:0x1D2F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D2F - ,simpleLowerCaseMapping:0x1D2F - ,simpleTitleCaseMapping:0x1D2F - }, - { code:0x1D30 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D30 - ,simpleLowerCaseMapping:0x1D30 - ,simpleTitleCaseMapping:0x1D30 - }, - { code:0x1D31 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D31 - ,simpleLowerCaseMapping:0x1D31 - ,simpleTitleCaseMapping:0x1D31 - }, - { code:0x1D32 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D32 - ,simpleLowerCaseMapping:0x1D32 - ,simpleTitleCaseMapping:0x1D32 - }, - { code:0x1D33 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D33 - ,simpleLowerCaseMapping:0x1D33 - ,simpleTitleCaseMapping:0x1D33 - }, - { code:0x1D34 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D34 - ,simpleLowerCaseMapping:0x1D34 - ,simpleTitleCaseMapping:0x1D34 - }, - { code:0x1D35 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D35 - ,simpleLowerCaseMapping:0x1D35 - ,simpleTitleCaseMapping:0x1D35 - }, - { code:0x1D36 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D36 - ,simpleLowerCaseMapping:0x1D36 - ,simpleTitleCaseMapping:0x1D36 - }, - { code:0x1D37 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D37 - ,simpleLowerCaseMapping:0x1D37 - ,simpleTitleCaseMapping:0x1D37 - }, - { code:0x1D38 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D38 - ,simpleLowerCaseMapping:0x1D38 - ,simpleTitleCaseMapping:0x1D38 - }, - { code:0x1D39 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D39 - ,simpleLowerCaseMapping:0x1D39 - ,simpleTitleCaseMapping:0x1D39 - }, - { code:0x1D3A - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3A - ,simpleLowerCaseMapping:0x1D3A - ,simpleTitleCaseMapping:0x1D3A - }, - { code:0x1D3B - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3B - ,simpleLowerCaseMapping:0x1D3B - ,simpleTitleCaseMapping:0x1D3B - }, - { code:0x1D3C - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3C - ,simpleLowerCaseMapping:0x1D3C - ,simpleTitleCaseMapping:0x1D3C - }, - { code:0x1D3D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3D - ,simpleLowerCaseMapping:0x1D3D - ,simpleTitleCaseMapping:0x1D3D - }, - { code:0x1D3E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3E - ,simpleLowerCaseMapping:0x1D3E - ,simpleTitleCaseMapping:0x1D3E - }, - { code:0x1D3F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D3F - ,simpleLowerCaseMapping:0x1D3F - ,simpleTitleCaseMapping:0x1D3F - }, - { code:0x1D40 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D40 - ,simpleLowerCaseMapping:0x1D40 - ,simpleTitleCaseMapping:0x1D40 - }, - { code:0x1D41 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D41 - ,simpleLowerCaseMapping:0x1D41 - ,simpleTitleCaseMapping:0x1D41 - }, - { code:0x1D42 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D42 - ,simpleLowerCaseMapping:0x1D42 - ,simpleTitleCaseMapping:0x1D42 - }, - { code:0x1D43 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D43 - ,simpleLowerCaseMapping:0x1D43 - ,simpleTitleCaseMapping:0x1D43 - }, - { code:0x1D44 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D44 - ,simpleLowerCaseMapping:0x1D44 - ,simpleTitleCaseMapping:0x1D44 - }, - { code:0x1D45 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D45 - ,simpleLowerCaseMapping:0x1D45 - ,simpleTitleCaseMapping:0x1D45 - }, - { code:0x1D46 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D46 - ,simpleLowerCaseMapping:0x1D46 - ,simpleTitleCaseMapping:0x1D46 - }, - { code:0x1D47 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D47 - ,simpleLowerCaseMapping:0x1D47 - ,simpleTitleCaseMapping:0x1D47 - }, - { code:0x1D48 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D48 - ,simpleLowerCaseMapping:0x1D48 - ,simpleTitleCaseMapping:0x1D48 - }, - { code:0x1D49 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D49 - ,simpleLowerCaseMapping:0x1D49 - ,simpleTitleCaseMapping:0x1D49 - }, - { code:0x1D4A - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4A - ,simpleLowerCaseMapping:0x1D4A - ,simpleTitleCaseMapping:0x1D4A - }, - { code:0x1D4B - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4B - ,simpleLowerCaseMapping:0x1D4B - ,simpleTitleCaseMapping:0x1D4B - }, - { code:0x1D4C - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4C - ,simpleLowerCaseMapping:0x1D4C - ,simpleTitleCaseMapping:0x1D4C - }, - { code:0x1D4D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4D - ,simpleLowerCaseMapping:0x1D4D - ,simpleTitleCaseMapping:0x1D4D - }, - { code:0x1D4E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4E - ,simpleLowerCaseMapping:0x1D4E - ,simpleTitleCaseMapping:0x1D4E - }, - { code:0x1D4F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D4F - ,simpleLowerCaseMapping:0x1D4F - ,simpleTitleCaseMapping:0x1D4F - }, - { code:0x1D50 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D50 - ,simpleLowerCaseMapping:0x1D50 - ,simpleTitleCaseMapping:0x1D50 - }, - { code:0x1D51 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D51 - ,simpleLowerCaseMapping:0x1D51 - ,simpleTitleCaseMapping:0x1D51 - }, - { code:0x1D52 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D52 - ,simpleLowerCaseMapping:0x1D52 - ,simpleTitleCaseMapping:0x1D52 - }, - { code:0x1D53 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D53 - ,simpleLowerCaseMapping:0x1D53 - ,simpleTitleCaseMapping:0x1D53 - }, - { code:0x1D54 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D54 - ,simpleLowerCaseMapping:0x1D54 - ,simpleTitleCaseMapping:0x1D54 - }, - { code:0x1D55 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D55 - ,simpleLowerCaseMapping:0x1D55 - ,simpleTitleCaseMapping:0x1D55 - }, - { code:0x1D56 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D56 - ,simpleLowerCaseMapping:0x1D56 - ,simpleTitleCaseMapping:0x1D56 - }, - { code:0x1D57 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D57 - ,simpleLowerCaseMapping:0x1D57 - ,simpleTitleCaseMapping:0x1D57 - }, - { code:0x1D58 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D58 - ,simpleLowerCaseMapping:0x1D58 - ,simpleTitleCaseMapping:0x1D58 - }, - { code:0x1D59 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D59 - ,simpleLowerCaseMapping:0x1D59 - ,simpleTitleCaseMapping:0x1D59 - }, - { code:0x1D5A - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5A - ,simpleLowerCaseMapping:0x1D5A - ,simpleTitleCaseMapping:0x1D5A - }, - { code:0x1D5B - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5B - ,simpleLowerCaseMapping:0x1D5B - ,simpleTitleCaseMapping:0x1D5B - }, - { code:0x1D5C - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5C - ,simpleLowerCaseMapping:0x1D5C - ,simpleTitleCaseMapping:0x1D5C - }, - { code:0x1D5D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5D - ,simpleLowerCaseMapping:0x1D5D - ,simpleTitleCaseMapping:0x1D5D - }, - { code:0x1D5E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5E - ,simpleLowerCaseMapping:0x1D5E - ,simpleTitleCaseMapping:0x1D5E - }, - { code:0x1D5F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D5F - ,simpleLowerCaseMapping:0x1D5F - ,simpleTitleCaseMapping:0x1D5F - }, - { code:0x1D60 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D60 - ,simpleLowerCaseMapping:0x1D60 - ,simpleTitleCaseMapping:0x1D60 - }, - { code:0x1D61 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D61 - ,simpleLowerCaseMapping:0x1D61 - ,simpleTitleCaseMapping:0x1D61 - }, - { code:0x1D62 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62 - ,simpleLowerCaseMapping:0x1D62 - ,simpleTitleCaseMapping:0x1D62 - }, - { code:0x1D63 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D63 - ,simpleLowerCaseMapping:0x1D63 - ,simpleTitleCaseMapping:0x1D63 - }, - { code:0x1D64 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D64 - ,simpleLowerCaseMapping:0x1D64 - ,simpleTitleCaseMapping:0x1D64 - }, - { code:0x1D65 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65 - ,simpleLowerCaseMapping:0x1D65 - ,simpleTitleCaseMapping:0x1D65 - }, - { code:0x1D66 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66 - ,simpleLowerCaseMapping:0x1D66 - ,simpleTitleCaseMapping:0x1D66 - }, - { code:0x1D67 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D67 - ,simpleLowerCaseMapping:0x1D67 - ,simpleTitleCaseMapping:0x1D67 - }, - { code:0x1D68 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68 - ,simpleLowerCaseMapping:0x1D68 - ,simpleTitleCaseMapping:0x1D68 - }, - { code:0x1D69 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69 - ,simpleLowerCaseMapping:0x1D69 - ,simpleTitleCaseMapping:0x1D69 - }, - { code:0x1D6A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A - ,simpleLowerCaseMapping:0x1D6A - ,simpleTitleCaseMapping:0x1D6A - }, - { code:0x1D6B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6B - ,simpleLowerCaseMapping:0x1D6B - ,simpleTitleCaseMapping:0x1D6B - }, - { code:0x1D6C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C - ,simpleLowerCaseMapping:0x1D6C - ,simpleTitleCaseMapping:0x1D6C - }, - { code:0x1D6D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D - ,simpleLowerCaseMapping:0x1D6D - ,simpleTitleCaseMapping:0x1D6D - }, - { code:0x1D6E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6E - ,simpleLowerCaseMapping:0x1D6E - ,simpleTitleCaseMapping:0x1D6E - }, - { code:0x1D6F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6F - ,simpleLowerCaseMapping:0x1D6F - ,simpleTitleCaseMapping:0x1D6F - }, - { code:0x1D70 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70 - ,simpleLowerCaseMapping:0x1D70 - ,simpleTitleCaseMapping:0x1D70 - }, - { code:0x1D71 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D71 - ,simpleLowerCaseMapping:0x1D71 - ,simpleTitleCaseMapping:0x1D71 - }, - { code:0x1D72 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D72 - ,simpleLowerCaseMapping:0x1D72 - ,simpleTitleCaseMapping:0x1D72 - }, - { code:0x1D73 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73 - ,simpleLowerCaseMapping:0x1D73 - ,simpleTitleCaseMapping:0x1D73 - }, - { code:0x1D74 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74 - ,simpleLowerCaseMapping:0x1D74 - ,simpleTitleCaseMapping:0x1D74 - }, - { code:0x1D75 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D75 - ,simpleLowerCaseMapping:0x1D75 - ,simpleTitleCaseMapping:0x1D75 - }, - { code:0x1D76 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D76 - ,simpleLowerCaseMapping:0x1D76 - ,simpleTitleCaseMapping:0x1D76 - }, - { code:0x1D77 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77 - ,simpleLowerCaseMapping:0x1D77 - ,simpleTitleCaseMapping:0x1D77 - }, - { code:0x1D78 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D78 - ,simpleLowerCaseMapping:0x1D78 - ,simpleTitleCaseMapping:0x1D78 - }, - { code:0x1D79 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D79 - ,simpleLowerCaseMapping:0x1D79 - ,simpleTitleCaseMapping:0x1D79 - }, - { code:0x1D7A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7A - ,simpleLowerCaseMapping:0x1D7A - ,simpleTitleCaseMapping:0x1D7A - }, - { code:0x1D7B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B - ,simpleLowerCaseMapping:0x1D7B - ,simpleTitleCaseMapping:0x1D7B - }, - { code:0x1D7C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C - ,simpleLowerCaseMapping:0x1D7C - ,simpleTitleCaseMapping:0x1D7C - }, - { code:0x1D7D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C63 - ,simpleLowerCaseMapping:0x1D7D - ,simpleTitleCaseMapping:0x2C63 - }, - { code:0x1D7E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7E - ,simpleLowerCaseMapping:0x1D7E - ,simpleTitleCaseMapping:0x1D7E - }, - { code:0x1D7F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7F - ,simpleLowerCaseMapping:0x1D7F - ,simpleTitleCaseMapping:0x1D7F - }, - { code:0x1D80 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D80 - ,simpleLowerCaseMapping:0x1D80 - ,simpleTitleCaseMapping:0x1D80 - }, - { code:0x1D81 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D81 - ,simpleLowerCaseMapping:0x1D81 - ,simpleTitleCaseMapping:0x1D81 - }, - { code:0x1D82 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D82 - ,simpleLowerCaseMapping:0x1D82 - ,simpleTitleCaseMapping:0x1D82 - }, - { code:0x1D83 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D83 - ,simpleLowerCaseMapping:0x1D83 - ,simpleTitleCaseMapping:0x1D83 - }, - { code:0x1D84 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D84 - ,simpleLowerCaseMapping:0x1D84 - ,simpleTitleCaseMapping:0x1D84 - }, - { code:0x1D85 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D85 - ,simpleLowerCaseMapping:0x1D85 - ,simpleTitleCaseMapping:0x1D85 - }, - { code:0x1D86 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D86 - ,simpleLowerCaseMapping:0x1D86 - ,simpleTitleCaseMapping:0x1D86 - }, - { code:0x1D87 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D87 - ,simpleLowerCaseMapping:0x1D87 - ,simpleTitleCaseMapping:0x1D87 - }, - { code:0x1D88 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D88 - ,simpleLowerCaseMapping:0x1D88 - ,simpleTitleCaseMapping:0x1D88 - }, - { code:0x1D89 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D89 - ,simpleLowerCaseMapping:0x1D89 - ,simpleTitleCaseMapping:0x1D89 - }, - { code:0x1D8A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8A - ,simpleLowerCaseMapping:0x1D8A - ,simpleTitleCaseMapping:0x1D8A - }, - { code:0x1D8B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8B - ,simpleLowerCaseMapping:0x1D8B - ,simpleTitleCaseMapping:0x1D8B - }, - { code:0x1D8C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8C - ,simpleLowerCaseMapping:0x1D8C - ,simpleTitleCaseMapping:0x1D8C - }, - { code:0x1D8D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8D - ,simpleLowerCaseMapping:0x1D8D - ,simpleTitleCaseMapping:0x1D8D - }, - { code:0x1D8E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8E - ,simpleLowerCaseMapping:0x1D8E - ,simpleTitleCaseMapping:0x1D8E - }, - { code:0x1D8F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D8F - ,simpleLowerCaseMapping:0x1D8F - ,simpleTitleCaseMapping:0x1D8F - }, - { code:0x1D90 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D90 - ,simpleLowerCaseMapping:0x1D90 - ,simpleTitleCaseMapping:0x1D90 - }, - { code:0x1D91 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D91 - ,simpleLowerCaseMapping:0x1D91 - ,simpleTitleCaseMapping:0x1D91 - }, - { code:0x1D92 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D92 - ,simpleLowerCaseMapping:0x1D92 - ,simpleTitleCaseMapping:0x1D92 - }, - { code:0x1D93 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D93 - ,simpleLowerCaseMapping:0x1D93 - ,simpleTitleCaseMapping:0x1D93 - }, - { code:0x1D94 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D94 - ,simpleLowerCaseMapping:0x1D94 - ,simpleTitleCaseMapping:0x1D94 - }, - { code:0x1D95 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D95 - ,simpleLowerCaseMapping:0x1D95 - ,simpleTitleCaseMapping:0x1D95 - }, - { code:0x1D96 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D96 - ,simpleLowerCaseMapping:0x1D96 - ,simpleTitleCaseMapping:0x1D96 - }, - { code:0x1D97 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D97 - ,simpleLowerCaseMapping:0x1D97 - ,simpleTitleCaseMapping:0x1D97 - }, - { code:0x1D98 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D98 - ,simpleLowerCaseMapping:0x1D98 - ,simpleTitleCaseMapping:0x1D98 - }, - { code:0x1D99 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D99 - ,simpleLowerCaseMapping:0x1D99 - ,simpleTitleCaseMapping:0x1D99 - }, - { code:0x1D9A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D9A - ,simpleLowerCaseMapping:0x1D9A - ,simpleTitleCaseMapping:0x1D9A - }, - { code:0x1D9B - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D9B - ,simpleLowerCaseMapping:0x1D9B - ,simpleTitleCaseMapping:0x1D9B - }, - { code:0x1D9C - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D9C - ,simpleLowerCaseMapping:0x1D9C - ,simpleTitleCaseMapping:0x1D9C - }, - { code:0x1D9D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D9D - ,simpleLowerCaseMapping:0x1D9D - ,simpleTitleCaseMapping:0x1D9D - }, - { code:0x1D9E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D9E - ,simpleLowerCaseMapping:0x1D9E - ,simpleTitleCaseMapping:0x1D9E - }, - { code:0x1D9F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1D9F - ,simpleLowerCaseMapping:0x1D9F - ,simpleTitleCaseMapping:0x1D9F - }, - { code:0x1DA0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA0 - ,simpleLowerCaseMapping:0x1DA0 - ,simpleTitleCaseMapping:0x1DA0 - }, - { code:0x1DA1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA1 - ,simpleLowerCaseMapping:0x1DA1 - ,simpleTitleCaseMapping:0x1DA1 - }, - { code:0x1DA2 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA2 - ,simpleLowerCaseMapping:0x1DA2 - ,simpleTitleCaseMapping:0x1DA2 - }, - { code:0x1DA3 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA3 - ,simpleLowerCaseMapping:0x1DA3 - ,simpleTitleCaseMapping:0x1DA3 - }, - { code:0x1DA4 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA4 - ,simpleLowerCaseMapping:0x1DA4 - ,simpleTitleCaseMapping:0x1DA4 - }, - { code:0x1DA5 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA5 - ,simpleLowerCaseMapping:0x1DA5 - ,simpleTitleCaseMapping:0x1DA5 - }, - { code:0x1DA6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA6 - ,simpleLowerCaseMapping:0x1DA6 - ,simpleTitleCaseMapping:0x1DA6 - }, - { code:0x1DA7 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA7 - ,simpleLowerCaseMapping:0x1DA7 - ,simpleTitleCaseMapping:0x1DA7 - }, - { code:0x1DA8 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA8 - ,simpleLowerCaseMapping:0x1DA8 - ,simpleTitleCaseMapping:0x1DA8 - }, - { code:0x1DA9 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DA9 - ,simpleLowerCaseMapping:0x1DA9 - ,simpleTitleCaseMapping:0x1DA9 - }, - { code:0x1DAA - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAA - ,simpleLowerCaseMapping:0x1DAA - ,simpleTitleCaseMapping:0x1DAA - }, - { code:0x1DAB - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAB - ,simpleLowerCaseMapping:0x1DAB - ,simpleTitleCaseMapping:0x1DAB - }, - { code:0x1DAC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAC - ,simpleLowerCaseMapping:0x1DAC - ,simpleTitleCaseMapping:0x1DAC - }, - { code:0x1DAD - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAD - ,simpleLowerCaseMapping:0x1DAD - ,simpleTitleCaseMapping:0x1DAD - }, - { code:0x1DAE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAE - ,simpleLowerCaseMapping:0x1DAE - ,simpleTitleCaseMapping:0x1DAE - }, - { code:0x1DAF - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DAF - ,simpleLowerCaseMapping:0x1DAF - ,simpleTitleCaseMapping:0x1DAF - }, - { code:0x1DB0 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB0 - ,simpleLowerCaseMapping:0x1DB0 - ,simpleTitleCaseMapping:0x1DB0 - }, - { code:0x1DB1 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB1 - ,simpleLowerCaseMapping:0x1DB1 - ,simpleTitleCaseMapping:0x1DB1 - }, - { code:0x1DB2 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB2 - ,simpleLowerCaseMapping:0x1DB2 - ,simpleTitleCaseMapping:0x1DB2 - }, - { code:0x1DB3 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB3 - ,simpleLowerCaseMapping:0x1DB3 - ,simpleTitleCaseMapping:0x1DB3 - }, - { code:0x1DB4 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB4 - ,simpleLowerCaseMapping:0x1DB4 - ,simpleTitleCaseMapping:0x1DB4 - }, - { code:0x1DB5 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB5 - ,simpleLowerCaseMapping:0x1DB5 - ,simpleTitleCaseMapping:0x1DB5 - }, - { code:0x1DB6 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB6 - ,simpleLowerCaseMapping:0x1DB6 - ,simpleTitleCaseMapping:0x1DB6 - }, - { code:0x1DB7 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB7 - ,simpleLowerCaseMapping:0x1DB7 - ,simpleTitleCaseMapping:0x1DB7 - }, - { code:0x1DB8 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB8 - ,simpleLowerCaseMapping:0x1DB8 - ,simpleTitleCaseMapping:0x1DB8 - }, - { code:0x1DB9 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DB9 - ,simpleLowerCaseMapping:0x1DB9 - ,simpleTitleCaseMapping:0x1DB9 - }, - { code:0x1DBA - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBA - ,simpleLowerCaseMapping:0x1DBA - ,simpleTitleCaseMapping:0x1DBA - }, - { code:0x1DBB - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBB - ,simpleLowerCaseMapping:0x1DBB - ,simpleTitleCaseMapping:0x1DBB - }, - { code:0x1DBC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBC - ,simpleLowerCaseMapping:0x1DBC - ,simpleTitleCaseMapping:0x1DBC - }, - { code:0x1DBD - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBD - ,simpleLowerCaseMapping:0x1DBD - ,simpleTitleCaseMapping:0x1DBD - }, - { code:0x1DBE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBE - ,simpleLowerCaseMapping:0x1DBE - ,simpleTitleCaseMapping:0x1DBE - }, - { code:0x1DBF - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x1DBF - ,simpleLowerCaseMapping:0x1DBF - ,simpleTitleCaseMapping:0x1DBF - }, - { code:0x1DC0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC0 - ,simpleLowerCaseMapping:0x1DC0 - ,simpleTitleCaseMapping:0x1DC0 - }, - { code:0x1DC1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC1 - ,simpleLowerCaseMapping:0x1DC1 - ,simpleTitleCaseMapping:0x1DC1 - }, - { code:0x1DC2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC2 - ,simpleLowerCaseMapping:0x1DC2 - ,simpleTitleCaseMapping:0x1DC2 - }, - { code:0x1DC3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC3 - ,simpleLowerCaseMapping:0x1DC3 - ,simpleTitleCaseMapping:0x1DC3 - }, - { code:0x1DC4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC4 - ,simpleLowerCaseMapping:0x1DC4 - ,simpleTitleCaseMapping:0x1DC4 - }, - { code:0x1DC5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC5 - ,simpleLowerCaseMapping:0x1DC5 - ,simpleTitleCaseMapping:0x1DC5 - }, - { code:0x1DC6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC6 - ,simpleLowerCaseMapping:0x1DC6 - ,simpleTitleCaseMapping:0x1DC6 - }, - { code:0x1DC7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC7 - ,simpleLowerCaseMapping:0x1DC7 - ,simpleTitleCaseMapping:0x1DC7 - }, - { code:0x1DC8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC8 - ,simpleLowerCaseMapping:0x1DC8 - ,simpleTitleCaseMapping:0x1DC8 - }, - { code:0x1DC9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DC9 - ,simpleLowerCaseMapping:0x1DC9 - ,simpleTitleCaseMapping:0x1DC9 - }, - { code:0x1DCA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DCA - ,simpleLowerCaseMapping:0x1DCA - ,simpleTitleCaseMapping:0x1DCA - }, - { code:0x1DFE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DFE - ,simpleLowerCaseMapping:0x1DFE - ,simpleTitleCaseMapping:0x1DFE - }, - { code:0x1DFF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1DFF - ,simpleLowerCaseMapping:0x1DFF - ,simpleTitleCaseMapping:0x1DFF - }, - { code:0x1E00 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E00 - ,simpleLowerCaseMapping:0x1E01 - ,simpleTitleCaseMapping:0x1E00 - }, - { code:0x1E01 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E00 - ,simpleLowerCaseMapping:0x1E01 - ,simpleTitleCaseMapping:0x1E00 - }, - { code:0x1E02 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E02 - ,simpleLowerCaseMapping:0x1E03 - ,simpleTitleCaseMapping:0x1E02 - }, - { code:0x1E03 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E02 - ,simpleLowerCaseMapping:0x1E03 - ,simpleTitleCaseMapping:0x1E02 - }, - { code:0x1E04 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E04 - ,simpleLowerCaseMapping:0x1E05 - ,simpleTitleCaseMapping:0x1E04 - }, - { code:0x1E05 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E04 - ,simpleLowerCaseMapping:0x1E05 - ,simpleTitleCaseMapping:0x1E04 - }, - { code:0x1E06 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E06 - ,simpleLowerCaseMapping:0x1E07 - ,simpleTitleCaseMapping:0x1E06 - }, - { code:0x1E07 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E06 - ,simpleLowerCaseMapping:0x1E07 - ,simpleTitleCaseMapping:0x1E06 - }, - { code:0x1E08 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E08 - ,simpleLowerCaseMapping:0x1E09 - ,simpleTitleCaseMapping:0x1E08 - }, - { code:0x1E09 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E08 - ,simpleLowerCaseMapping:0x1E09 - ,simpleTitleCaseMapping:0x1E08 - }, - { code:0x1E0A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E0A - ,simpleLowerCaseMapping:0x1E0B - ,simpleTitleCaseMapping:0x1E0A - }, - { code:0x1E0B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E0A - ,simpleLowerCaseMapping:0x1E0B - ,simpleTitleCaseMapping:0x1E0A - }, - { code:0x1E0C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E0C - ,simpleLowerCaseMapping:0x1E0D - ,simpleTitleCaseMapping:0x1E0C - }, - { code:0x1E0D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E0C - ,simpleLowerCaseMapping:0x1E0D - ,simpleTitleCaseMapping:0x1E0C - }, - { code:0x1E0E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E0E - ,simpleLowerCaseMapping:0x1E0F - ,simpleTitleCaseMapping:0x1E0E - }, - { code:0x1E0F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E0E - ,simpleLowerCaseMapping:0x1E0F - ,simpleTitleCaseMapping:0x1E0E - }, - { code:0x1E10 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E10 - ,simpleLowerCaseMapping:0x1E11 - ,simpleTitleCaseMapping:0x1E10 - }, - { code:0x1E11 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E10 - ,simpleLowerCaseMapping:0x1E11 - ,simpleTitleCaseMapping:0x1E10 - }, - { code:0x1E12 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E12 - ,simpleLowerCaseMapping:0x1E13 - ,simpleTitleCaseMapping:0x1E12 - }, - { code:0x1E13 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E12 - ,simpleLowerCaseMapping:0x1E13 - ,simpleTitleCaseMapping:0x1E12 - }, - { code:0x1E14 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E14 - ,simpleLowerCaseMapping:0x1E15 - ,simpleTitleCaseMapping:0x1E14 - }, - { code:0x1E15 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E14 - ,simpleLowerCaseMapping:0x1E15 - ,simpleTitleCaseMapping:0x1E14 - }, - { code:0x1E16 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E16 - ,simpleLowerCaseMapping:0x1E17 - ,simpleTitleCaseMapping:0x1E16 - }, - { code:0x1E17 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E16 - ,simpleLowerCaseMapping:0x1E17 - ,simpleTitleCaseMapping:0x1E16 - }, - { code:0x1E18 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E18 - ,simpleLowerCaseMapping:0x1E19 - ,simpleTitleCaseMapping:0x1E18 - }, - { code:0x1E19 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E18 - ,simpleLowerCaseMapping:0x1E19 - ,simpleTitleCaseMapping:0x1E18 - }, - { code:0x1E1A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E1A - ,simpleLowerCaseMapping:0x1E1B - ,simpleTitleCaseMapping:0x1E1A - }, - { code:0x1E1B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E1A - ,simpleLowerCaseMapping:0x1E1B - ,simpleTitleCaseMapping:0x1E1A - }, - { code:0x1E1C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E1C - ,simpleLowerCaseMapping:0x1E1D - ,simpleTitleCaseMapping:0x1E1C - }, - { code:0x1E1D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E1C - ,simpleLowerCaseMapping:0x1E1D - ,simpleTitleCaseMapping:0x1E1C - }, - { code:0x1E1E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E1E - ,simpleLowerCaseMapping:0x1E1F - ,simpleTitleCaseMapping:0x1E1E - }, - { code:0x1E1F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E1E - ,simpleLowerCaseMapping:0x1E1F - ,simpleTitleCaseMapping:0x1E1E - }, - { code:0x1E20 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E20 - ,simpleLowerCaseMapping:0x1E21 - ,simpleTitleCaseMapping:0x1E20 - }, - { code:0x1E21 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E20 - ,simpleLowerCaseMapping:0x1E21 - ,simpleTitleCaseMapping:0x1E20 - }, - { code:0x1E22 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E22 - ,simpleLowerCaseMapping:0x1E23 - ,simpleTitleCaseMapping:0x1E22 - }, - { code:0x1E23 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E22 - ,simpleLowerCaseMapping:0x1E23 - ,simpleTitleCaseMapping:0x1E22 - }, - { code:0x1E24 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E24 - ,simpleLowerCaseMapping:0x1E25 - ,simpleTitleCaseMapping:0x1E24 - }, - { code:0x1E25 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E24 - ,simpleLowerCaseMapping:0x1E25 - ,simpleTitleCaseMapping:0x1E24 - }, - { code:0x1E26 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E26 - ,simpleLowerCaseMapping:0x1E27 - ,simpleTitleCaseMapping:0x1E26 - }, - { code:0x1E27 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E26 - ,simpleLowerCaseMapping:0x1E27 - ,simpleTitleCaseMapping:0x1E26 - }, - { code:0x1E28 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E28 - ,simpleLowerCaseMapping:0x1E29 - ,simpleTitleCaseMapping:0x1E28 - }, - { code:0x1E29 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E28 - ,simpleLowerCaseMapping:0x1E29 - ,simpleTitleCaseMapping:0x1E28 - }, - { code:0x1E2A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E2A - ,simpleLowerCaseMapping:0x1E2B - ,simpleTitleCaseMapping:0x1E2A - }, - { code:0x1E2B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E2A - ,simpleLowerCaseMapping:0x1E2B - ,simpleTitleCaseMapping:0x1E2A - }, - { code:0x1E2C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E2C - ,simpleLowerCaseMapping:0x1E2D - ,simpleTitleCaseMapping:0x1E2C - }, - { code:0x1E2D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E2C - ,simpleLowerCaseMapping:0x1E2D - ,simpleTitleCaseMapping:0x1E2C - }, - { code:0x1E2E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E2E - ,simpleLowerCaseMapping:0x1E2F - ,simpleTitleCaseMapping:0x1E2E - }, - { code:0x1E2F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E2E - ,simpleLowerCaseMapping:0x1E2F - ,simpleTitleCaseMapping:0x1E2E - }, - { code:0x1E30 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E30 - ,simpleLowerCaseMapping:0x1E31 - ,simpleTitleCaseMapping:0x1E30 - }, - { code:0x1E31 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E30 - ,simpleLowerCaseMapping:0x1E31 - ,simpleTitleCaseMapping:0x1E30 - }, - { code:0x1E32 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E32 - ,simpleLowerCaseMapping:0x1E33 - ,simpleTitleCaseMapping:0x1E32 - }, - { code:0x1E33 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E32 - ,simpleLowerCaseMapping:0x1E33 - ,simpleTitleCaseMapping:0x1E32 - }, - { code:0x1E34 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E34 - ,simpleLowerCaseMapping:0x1E35 - ,simpleTitleCaseMapping:0x1E34 - }, - { code:0x1E35 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E34 - ,simpleLowerCaseMapping:0x1E35 - ,simpleTitleCaseMapping:0x1E34 - }, - { code:0x1E36 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E36 - ,simpleLowerCaseMapping:0x1E37 - ,simpleTitleCaseMapping:0x1E36 - }, - { code:0x1E37 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E36 - ,simpleLowerCaseMapping:0x1E37 - ,simpleTitleCaseMapping:0x1E36 - }, - { code:0x1E38 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E38 - ,simpleLowerCaseMapping:0x1E39 - ,simpleTitleCaseMapping:0x1E38 - }, - { code:0x1E39 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E38 - ,simpleLowerCaseMapping:0x1E39 - ,simpleTitleCaseMapping:0x1E38 - }, - { code:0x1E3A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E3A - ,simpleLowerCaseMapping:0x1E3B - ,simpleTitleCaseMapping:0x1E3A - }, - { code:0x1E3B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E3A - ,simpleLowerCaseMapping:0x1E3B - ,simpleTitleCaseMapping:0x1E3A - }, - { code:0x1E3C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E3C - ,simpleLowerCaseMapping:0x1E3D - ,simpleTitleCaseMapping:0x1E3C - }, - { code:0x1E3D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E3C - ,simpleLowerCaseMapping:0x1E3D - ,simpleTitleCaseMapping:0x1E3C - }, - { code:0x1E3E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E3E - ,simpleLowerCaseMapping:0x1E3F - ,simpleTitleCaseMapping:0x1E3E - }, - { code:0x1E3F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E3E - ,simpleLowerCaseMapping:0x1E3F - ,simpleTitleCaseMapping:0x1E3E - }, - { code:0x1E40 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E40 - ,simpleLowerCaseMapping:0x1E41 - ,simpleTitleCaseMapping:0x1E40 - }, - { code:0x1E41 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E40 - ,simpleLowerCaseMapping:0x1E41 - ,simpleTitleCaseMapping:0x1E40 - }, - { code:0x1E42 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E42 - ,simpleLowerCaseMapping:0x1E43 - ,simpleTitleCaseMapping:0x1E42 - }, - { code:0x1E43 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E42 - ,simpleLowerCaseMapping:0x1E43 - ,simpleTitleCaseMapping:0x1E42 - }, - { code:0x1E44 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E44 - ,simpleLowerCaseMapping:0x1E45 - ,simpleTitleCaseMapping:0x1E44 - }, - { code:0x1E45 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E44 - ,simpleLowerCaseMapping:0x1E45 - ,simpleTitleCaseMapping:0x1E44 - }, - { code:0x1E46 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E46 - ,simpleLowerCaseMapping:0x1E47 - ,simpleTitleCaseMapping:0x1E46 - }, - { code:0x1E47 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E46 - ,simpleLowerCaseMapping:0x1E47 - ,simpleTitleCaseMapping:0x1E46 - }, - { code:0x1E48 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E48 - ,simpleLowerCaseMapping:0x1E49 - ,simpleTitleCaseMapping:0x1E48 - }, - { code:0x1E49 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E48 - ,simpleLowerCaseMapping:0x1E49 - ,simpleTitleCaseMapping:0x1E48 - }, - { code:0x1E4A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E4A - ,simpleLowerCaseMapping:0x1E4B - ,simpleTitleCaseMapping:0x1E4A - }, - { code:0x1E4B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E4A - ,simpleLowerCaseMapping:0x1E4B - ,simpleTitleCaseMapping:0x1E4A - }, - { code:0x1E4C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E4C - ,simpleLowerCaseMapping:0x1E4D - ,simpleTitleCaseMapping:0x1E4C - }, - { code:0x1E4D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E4C - ,simpleLowerCaseMapping:0x1E4D - ,simpleTitleCaseMapping:0x1E4C - }, - { code:0x1E4E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E4E - ,simpleLowerCaseMapping:0x1E4F - ,simpleTitleCaseMapping:0x1E4E - }, - { code:0x1E4F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E4E - ,simpleLowerCaseMapping:0x1E4F - ,simpleTitleCaseMapping:0x1E4E - }, - { code:0x1E50 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E50 - ,simpleLowerCaseMapping:0x1E51 - ,simpleTitleCaseMapping:0x1E50 - }, - { code:0x1E51 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E50 - ,simpleLowerCaseMapping:0x1E51 - ,simpleTitleCaseMapping:0x1E50 - }, - { code:0x1E52 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E52 - ,simpleLowerCaseMapping:0x1E53 - ,simpleTitleCaseMapping:0x1E52 - }, - { code:0x1E53 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E52 - ,simpleLowerCaseMapping:0x1E53 - ,simpleTitleCaseMapping:0x1E52 - }, - { code:0x1E54 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E54 - ,simpleLowerCaseMapping:0x1E55 - ,simpleTitleCaseMapping:0x1E54 - }, - { code:0x1E55 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E54 - ,simpleLowerCaseMapping:0x1E55 - ,simpleTitleCaseMapping:0x1E54 - }, - { code:0x1E56 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E56 - ,simpleLowerCaseMapping:0x1E57 - ,simpleTitleCaseMapping:0x1E56 - }, - { code:0x1E57 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E56 - ,simpleLowerCaseMapping:0x1E57 - ,simpleTitleCaseMapping:0x1E56 - }, - { code:0x1E58 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E58 - ,simpleLowerCaseMapping:0x1E59 - ,simpleTitleCaseMapping:0x1E58 - }, - { code:0x1E59 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E58 - ,simpleLowerCaseMapping:0x1E59 - ,simpleTitleCaseMapping:0x1E58 - }, - { code:0x1E5A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E5A - ,simpleLowerCaseMapping:0x1E5B - ,simpleTitleCaseMapping:0x1E5A - }, - { code:0x1E5B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E5A - ,simpleLowerCaseMapping:0x1E5B - ,simpleTitleCaseMapping:0x1E5A - }, - { code:0x1E5C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E5C - ,simpleLowerCaseMapping:0x1E5D - ,simpleTitleCaseMapping:0x1E5C - }, - { code:0x1E5D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E5C - ,simpleLowerCaseMapping:0x1E5D - ,simpleTitleCaseMapping:0x1E5C - }, - { code:0x1E5E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E5E - ,simpleLowerCaseMapping:0x1E5F - ,simpleTitleCaseMapping:0x1E5E - }, - { code:0x1E5F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E5E - ,simpleLowerCaseMapping:0x1E5F - ,simpleTitleCaseMapping:0x1E5E - }, - { code:0x1E60 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E60 - ,simpleLowerCaseMapping:0x1E61 - ,simpleTitleCaseMapping:0x1E60 - }, - { code:0x1E61 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E60 - ,simpleLowerCaseMapping:0x1E61 - ,simpleTitleCaseMapping:0x1E60 - }, - { code:0x1E62 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E62 - ,simpleLowerCaseMapping:0x1E63 - ,simpleTitleCaseMapping:0x1E62 - }, - { code:0x1E63 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E62 - ,simpleLowerCaseMapping:0x1E63 - ,simpleTitleCaseMapping:0x1E62 - }, - { code:0x1E64 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E64 - ,simpleLowerCaseMapping:0x1E65 - ,simpleTitleCaseMapping:0x1E64 - }, - { code:0x1E65 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E64 - ,simpleLowerCaseMapping:0x1E65 - ,simpleTitleCaseMapping:0x1E64 - }, - { code:0x1E66 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E66 - ,simpleLowerCaseMapping:0x1E67 - ,simpleTitleCaseMapping:0x1E66 - }, - { code:0x1E67 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E66 - ,simpleLowerCaseMapping:0x1E67 - ,simpleTitleCaseMapping:0x1E66 - }, - { code:0x1E68 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E68 - ,simpleLowerCaseMapping:0x1E69 - ,simpleTitleCaseMapping:0x1E68 - }, - { code:0x1E69 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E68 - ,simpleLowerCaseMapping:0x1E69 - ,simpleTitleCaseMapping:0x1E68 - }, - { code:0x1E6A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E6A - ,simpleLowerCaseMapping:0x1E6B - ,simpleTitleCaseMapping:0x1E6A - }, - { code:0x1E6B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E6A - ,simpleLowerCaseMapping:0x1E6B - ,simpleTitleCaseMapping:0x1E6A - }, - { code:0x1E6C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E6C - ,simpleLowerCaseMapping:0x1E6D - ,simpleTitleCaseMapping:0x1E6C - }, - { code:0x1E6D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E6C - ,simpleLowerCaseMapping:0x1E6D - ,simpleTitleCaseMapping:0x1E6C - }, - { code:0x1E6E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E6E - ,simpleLowerCaseMapping:0x1E6F - ,simpleTitleCaseMapping:0x1E6E - }, - { code:0x1E6F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E6E - ,simpleLowerCaseMapping:0x1E6F - ,simpleTitleCaseMapping:0x1E6E - }, - { code:0x1E70 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E70 - ,simpleLowerCaseMapping:0x1E71 - ,simpleTitleCaseMapping:0x1E70 - }, - { code:0x1E71 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E70 - ,simpleLowerCaseMapping:0x1E71 - ,simpleTitleCaseMapping:0x1E70 - }, - { code:0x1E72 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E72 - ,simpleLowerCaseMapping:0x1E73 - ,simpleTitleCaseMapping:0x1E72 - }, - { code:0x1E73 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E72 - ,simpleLowerCaseMapping:0x1E73 - ,simpleTitleCaseMapping:0x1E72 - }, - { code:0x1E74 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E74 - ,simpleLowerCaseMapping:0x1E75 - ,simpleTitleCaseMapping:0x1E74 - }, - { code:0x1E75 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E74 - ,simpleLowerCaseMapping:0x1E75 - ,simpleTitleCaseMapping:0x1E74 - }, - { code:0x1E76 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E76 - ,simpleLowerCaseMapping:0x1E77 - ,simpleTitleCaseMapping:0x1E76 - }, - { code:0x1E77 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E76 - ,simpleLowerCaseMapping:0x1E77 - ,simpleTitleCaseMapping:0x1E76 - }, - { code:0x1E78 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E78 - ,simpleLowerCaseMapping:0x1E79 - ,simpleTitleCaseMapping:0x1E78 - }, - { code:0x1E79 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E78 - ,simpleLowerCaseMapping:0x1E79 - ,simpleTitleCaseMapping:0x1E78 - }, - { code:0x1E7A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E7A - ,simpleLowerCaseMapping:0x1E7B - ,simpleTitleCaseMapping:0x1E7A - }, - { code:0x1E7B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E7A - ,simpleLowerCaseMapping:0x1E7B - ,simpleTitleCaseMapping:0x1E7A - }, - { code:0x1E7C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E7C - ,simpleLowerCaseMapping:0x1E7D - ,simpleTitleCaseMapping:0x1E7C - }, - { code:0x1E7D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E7C - ,simpleLowerCaseMapping:0x1E7D - ,simpleTitleCaseMapping:0x1E7C - }, - { code:0x1E7E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E7E - ,simpleLowerCaseMapping:0x1E7F - ,simpleTitleCaseMapping:0x1E7E - }, - { code:0x1E7F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E7E - ,simpleLowerCaseMapping:0x1E7F - ,simpleTitleCaseMapping:0x1E7E - }, - { code:0x1E80 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E80 - ,simpleLowerCaseMapping:0x1E81 - ,simpleTitleCaseMapping:0x1E80 - }, - { code:0x1E81 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E80 - ,simpleLowerCaseMapping:0x1E81 - ,simpleTitleCaseMapping:0x1E80 - }, - { code:0x1E82 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E82 - ,simpleLowerCaseMapping:0x1E83 - ,simpleTitleCaseMapping:0x1E82 - }, - { code:0x1E83 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E82 - ,simpleLowerCaseMapping:0x1E83 - ,simpleTitleCaseMapping:0x1E82 - }, - { code:0x1E84 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E84 - ,simpleLowerCaseMapping:0x1E85 - ,simpleTitleCaseMapping:0x1E84 - }, - { code:0x1E85 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E84 - ,simpleLowerCaseMapping:0x1E85 - ,simpleTitleCaseMapping:0x1E84 - }, - { code:0x1E86 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E86 - ,simpleLowerCaseMapping:0x1E87 - ,simpleTitleCaseMapping:0x1E86 - }, - { code:0x1E87 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E86 - ,simpleLowerCaseMapping:0x1E87 - ,simpleTitleCaseMapping:0x1E86 - }, - { code:0x1E88 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E88 - ,simpleLowerCaseMapping:0x1E89 - ,simpleTitleCaseMapping:0x1E88 - }, - { code:0x1E89 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E88 - ,simpleLowerCaseMapping:0x1E89 - ,simpleTitleCaseMapping:0x1E88 - }, - { code:0x1E8A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E8A - ,simpleLowerCaseMapping:0x1E8B - ,simpleTitleCaseMapping:0x1E8A - }, - { code:0x1E8B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E8A - ,simpleLowerCaseMapping:0x1E8B - ,simpleTitleCaseMapping:0x1E8A - }, - { code:0x1E8C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E8C - ,simpleLowerCaseMapping:0x1E8D - ,simpleTitleCaseMapping:0x1E8C - }, - { code:0x1E8D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E8C - ,simpleLowerCaseMapping:0x1E8D - ,simpleTitleCaseMapping:0x1E8C - }, - { code:0x1E8E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E8E - ,simpleLowerCaseMapping:0x1E8F - ,simpleTitleCaseMapping:0x1E8E - }, - { code:0x1E8F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E8E - ,simpleLowerCaseMapping:0x1E8F - ,simpleTitleCaseMapping:0x1E8E - }, - { code:0x1E90 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E90 - ,simpleLowerCaseMapping:0x1E91 - ,simpleTitleCaseMapping:0x1E90 - }, - { code:0x1E91 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E90 - ,simpleLowerCaseMapping:0x1E91 - ,simpleTitleCaseMapping:0x1E90 - }, - { code:0x1E92 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E92 - ,simpleLowerCaseMapping:0x1E93 - ,simpleTitleCaseMapping:0x1E92 - }, - { code:0x1E93 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E92 - ,simpleLowerCaseMapping:0x1E93 - ,simpleTitleCaseMapping:0x1E92 - }, - { code:0x1E94 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1E94 - ,simpleLowerCaseMapping:0x1E95 - ,simpleTitleCaseMapping:0x1E94 - }, - { code:0x1E95 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E94 - ,simpleLowerCaseMapping:0x1E95 - ,simpleTitleCaseMapping:0x1E94 - }, - { code:0x1E96 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1E96 - ,simpleLowerCaseMapping:0x1E96 - ,simpleTitleCaseMapping:0x1E96 - }, - { code:0x1E97 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1E97 - ,simpleLowerCaseMapping:0x1E97 - ,simpleTitleCaseMapping:0x1E97 - }, - { code:0x1E98 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1E98 - ,simpleLowerCaseMapping:0x1E98 - ,simpleTitleCaseMapping:0x1E98 - }, - { code:0x1E99 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1E99 - ,simpleLowerCaseMapping:0x1E99 - ,simpleTitleCaseMapping:0x1E99 - }, - { code:0x1E9A - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1E9A - ,simpleLowerCaseMapping:0x1E9A - ,simpleTitleCaseMapping:0x1E9A - }, - { code:0x1E9B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1E60 - ,simpleLowerCaseMapping:0x1E9B - ,simpleTitleCaseMapping:0x1E60 - }, - { code:0x1EA0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EA0 - ,simpleLowerCaseMapping:0x1EA1 - ,simpleTitleCaseMapping:0x1EA0 - }, - { code:0x1EA1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EA0 - ,simpleLowerCaseMapping:0x1EA1 - ,simpleTitleCaseMapping:0x1EA0 - }, - { code:0x1EA2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EA2 - ,simpleLowerCaseMapping:0x1EA3 - ,simpleTitleCaseMapping:0x1EA2 - }, - { code:0x1EA3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EA2 - ,simpleLowerCaseMapping:0x1EA3 - ,simpleTitleCaseMapping:0x1EA2 - }, - { code:0x1EA4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EA4 - ,simpleLowerCaseMapping:0x1EA5 - ,simpleTitleCaseMapping:0x1EA4 - }, - { code:0x1EA5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EA4 - ,simpleLowerCaseMapping:0x1EA5 - ,simpleTitleCaseMapping:0x1EA4 - }, - { code:0x1EA6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EA6 - ,simpleLowerCaseMapping:0x1EA7 - ,simpleTitleCaseMapping:0x1EA6 - }, - { code:0x1EA7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EA6 - ,simpleLowerCaseMapping:0x1EA7 - ,simpleTitleCaseMapping:0x1EA6 - }, - { code:0x1EA8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EA8 - ,simpleLowerCaseMapping:0x1EA9 - ,simpleTitleCaseMapping:0x1EA8 - }, - { code:0x1EA9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EA8 - ,simpleLowerCaseMapping:0x1EA9 - ,simpleTitleCaseMapping:0x1EA8 - }, - { code:0x1EAA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EAA - ,simpleLowerCaseMapping:0x1EAB - ,simpleTitleCaseMapping:0x1EAA - }, - { code:0x1EAB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EAA - ,simpleLowerCaseMapping:0x1EAB - ,simpleTitleCaseMapping:0x1EAA - }, - { code:0x1EAC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EAC - ,simpleLowerCaseMapping:0x1EAD - ,simpleTitleCaseMapping:0x1EAC - }, - { code:0x1EAD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EAC - ,simpleLowerCaseMapping:0x1EAD - ,simpleTitleCaseMapping:0x1EAC - }, - { code:0x1EAE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EAE - ,simpleLowerCaseMapping:0x1EAF - ,simpleTitleCaseMapping:0x1EAE - }, - { code:0x1EAF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EAE - ,simpleLowerCaseMapping:0x1EAF - ,simpleTitleCaseMapping:0x1EAE - }, - { code:0x1EB0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EB0 - ,simpleLowerCaseMapping:0x1EB1 - ,simpleTitleCaseMapping:0x1EB0 - }, - { code:0x1EB1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EB0 - ,simpleLowerCaseMapping:0x1EB1 - ,simpleTitleCaseMapping:0x1EB0 - }, - { code:0x1EB2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EB2 - ,simpleLowerCaseMapping:0x1EB3 - ,simpleTitleCaseMapping:0x1EB2 - }, - { code:0x1EB3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EB2 - ,simpleLowerCaseMapping:0x1EB3 - ,simpleTitleCaseMapping:0x1EB2 - }, - { code:0x1EB4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EB4 - ,simpleLowerCaseMapping:0x1EB5 - ,simpleTitleCaseMapping:0x1EB4 - }, - { code:0x1EB5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EB4 - ,simpleLowerCaseMapping:0x1EB5 - ,simpleTitleCaseMapping:0x1EB4 - }, - { code:0x1EB6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EB6 - ,simpleLowerCaseMapping:0x1EB7 - ,simpleTitleCaseMapping:0x1EB6 - }, - { code:0x1EB7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EB6 - ,simpleLowerCaseMapping:0x1EB7 - ,simpleTitleCaseMapping:0x1EB6 - }, - { code:0x1EB8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EB8 - ,simpleLowerCaseMapping:0x1EB9 - ,simpleTitleCaseMapping:0x1EB8 - }, - { code:0x1EB9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EB8 - ,simpleLowerCaseMapping:0x1EB9 - ,simpleTitleCaseMapping:0x1EB8 - }, - { code:0x1EBA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EBA - ,simpleLowerCaseMapping:0x1EBB - ,simpleTitleCaseMapping:0x1EBA - }, - { code:0x1EBB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EBA - ,simpleLowerCaseMapping:0x1EBB - ,simpleTitleCaseMapping:0x1EBA - }, - { code:0x1EBC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EBC - ,simpleLowerCaseMapping:0x1EBD - ,simpleTitleCaseMapping:0x1EBC - }, - { code:0x1EBD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EBC - ,simpleLowerCaseMapping:0x1EBD - ,simpleTitleCaseMapping:0x1EBC - }, - { code:0x1EBE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EBE - ,simpleLowerCaseMapping:0x1EBF - ,simpleTitleCaseMapping:0x1EBE - }, - { code:0x1EBF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EBE - ,simpleLowerCaseMapping:0x1EBF - ,simpleTitleCaseMapping:0x1EBE - }, - { code:0x1EC0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EC0 - ,simpleLowerCaseMapping:0x1EC1 - ,simpleTitleCaseMapping:0x1EC0 - }, - { code:0x1EC1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EC0 - ,simpleLowerCaseMapping:0x1EC1 - ,simpleTitleCaseMapping:0x1EC0 - }, - { code:0x1EC2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EC2 - ,simpleLowerCaseMapping:0x1EC3 - ,simpleTitleCaseMapping:0x1EC2 - }, - { code:0x1EC3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EC2 - ,simpleLowerCaseMapping:0x1EC3 - ,simpleTitleCaseMapping:0x1EC2 - }, - { code:0x1EC4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EC4 - ,simpleLowerCaseMapping:0x1EC5 - ,simpleTitleCaseMapping:0x1EC4 - }, - { code:0x1EC5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EC4 - ,simpleLowerCaseMapping:0x1EC5 - ,simpleTitleCaseMapping:0x1EC4 - }, - { code:0x1EC6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EC6 - ,simpleLowerCaseMapping:0x1EC7 - ,simpleTitleCaseMapping:0x1EC6 - }, - { code:0x1EC7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EC6 - ,simpleLowerCaseMapping:0x1EC7 - ,simpleTitleCaseMapping:0x1EC6 - }, - { code:0x1EC8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EC8 - ,simpleLowerCaseMapping:0x1EC9 - ,simpleTitleCaseMapping:0x1EC8 - }, - { code:0x1EC9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EC8 - ,simpleLowerCaseMapping:0x1EC9 - ,simpleTitleCaseMapping:0x1EC8 - }, - { code:0x1ECA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ECA - ,simpleLowerCaseMapping:0x1ECB - ,simpleTitleCaseMapping:0x1ECA - }, - { code:0x1ECB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ECA - ,simpleLowerCaseMapping:0x1ECB - ,simpleTitleCaseMapping:0x1ECA - }, - { code:0x1ECC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ECC - ,simpleLowerCaseMapping:0x1ECD - ,simpleTitleCaseMapping:0x1ECC - }, - { code:0x1ECD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ECC - ,simpleLowerCaseMapping:0x1ECD - ,simpleTitleCaseMapping:0x1ECC - }, - { code:0x1ECE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ECE - ,simpleLowerCaseMapping:0x1ECF - ,simpleTitleCaseMapping:0x1ECE - }, - { code:0x1ECF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ECE - ,simpleLowerCaseMapping:0x1ECF - ,simpleTitleCaseMapping:0x1ECE - }, - { code:0x1ED0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ED0 - ,simpleLowerCaseMapping:0x1ED1 - ,simpleTitleCaseMapping:0x1ED0 - }, - { code:0x1ED1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ED0 - ,simpleLowerCaseMapping:0x1ED1 - ,simpleTitleCaseMapping:0x1ED0 - }, - { code:0x1ED2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ED2 - ,simpleLowerCaseMapping:0x1ED3 - ,simpleTitleCaseMapping:0x1ED2 - }, - { code:0x1ED3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ED2 - ,simpleLowerCaseMapping:0x1ED3 - ,simpleTitleCaseMapping:0x1ED2 - }, - { code:0x1ED4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ED4 - ,simpleLowerCaseMapping:0x1ED5 - ,simpleTitleCaseMapping:0x1ED4 - }, - { code:0x1ED5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ED4 - ,simpleLowerCaseMapping:0x1ED5 - ,simpleTitleCaseMapping:0x1ED4 - }, - { code:0x1ED6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ED6 - ,simpleLowerCaseMapping:0x1ED7 - ,simpleTitleCaseMapping:0x1ED6 - }, - { code:0x1ED7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ED6 - ,simpleLowerCaseMapping:0x1ED7 - ,simpleTitleCaseMapping:0x1ED6 - }, - { code:0x1ED8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1ED8 - ,simpleLowerCaseMapping:0x1ED9 - ,simpleTitleCaseMapping:0x1ED8 - }, - { code:0x1ED9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1ED8 - ,simpleLowerCaseMapping:0x1ED9 - ,simpleTitleCaseMapping:0x1ED8 - }, - { code:0x1EDA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EDA - ,simpleLowerCaseMapping:0x1EDB - ,simpleTitleCaseMapping:0x1EDA - }, - { code:0x1EDB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EDA - ,simpleLowerCaseMapping:0x1EDB - ,simpleTitleCaseMapping:0x1EDA - }, - { code:0x1EDC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EDC - ,simpleLowerCaseMapping:0x1EDD - ,simpleTitleCaseMapping:0x1EDC - }, - { code:0x1EDD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EDC - ,simpleLowerCaseMapping:0x1EDD - ,simpleTitleCaseMapping:0x1EDC - }, - { code:0x1EDE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EDE - ,simpleLowerCaseMapping:0x1EDF - ,simpleTitleCaseMapping:0x1EDE - }, - { code:0x1EDF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EDE - ,simpleLowerCaseMapping:0x1EDF - ,simpleTitleCaseMapping:0x1EDE - }, - { code:0x1EE0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EE0 - ,simpleLowerCaseMapping:0x1EE1 - ,simpleTitleCaseMapping:0x1EE0 - }, - { code:0x1EE1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EE0 - ,simpleLowerCaseMapping:0x1EE1 - ,simpleTitleCaseMapping:0x1EE0 - }, - { code:0x1EE2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EE2 - ,simpleLowerCaseMapping:0x1EE3 - ,simpleTitleCaseMapping:0x1EE2 - }, - { code:0x1EE3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EE2 - ,simpleLowerCaseMapping:0x1EE3 - ,simpleTitleCaseMapping:0x1EE2 - }, - { code:0x1EE4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EE4 - ,simpleLowerCaseMapping:0x1EE5 - ,simpleTitleCaseMapping:0x1EE4 - }, - { code:0x1EE5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EE4 - ,simpleLowerCaseMapping:0x1EE5 - ,simpleTitleCaseMapping:0x1EE4 - }, - { code:0x1EE6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EE6 - ,simpleLowerCaseMapping:0x1EE7 - ,simpleTitleCaseMapping:0x1EE6 - }, - { code:0x1EE7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EE6 - ,simpleLowerCaseMapping:0x1EE7 - ,simpleTitleCaseMapping:0x1EE6 - }, - { code:0x1EE8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EE8 - ,simpleLowerCaseMapping:0x1EE9 - ,simpleTitleCaseMapping:0x1EE8 - }, - { code:0x1EE9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EE8 - ,simpleLowerCaseMapping:0x1EE9 - ,simpleTitleCaseMapping:0x1EE8 - }, - { code:0x1EEA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EEA - ,simpleLowerCaseMapping:0x1EEB - ,simpleTitleCaseMapping:0x1EEA - }, - { code:0x1EEB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EEA - ,simpleLowerCaseMapping:0x1EEB - ,simpleTitleCaseMapping:0x1EEA - }, - { code:0x1EEC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EEC - ,simpleLowerCaseMapping:0x1EED - ,simpleTitleCaseMapping:0x1EEC - }, - { code:0x1EED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EEC - ,simpleLowerCaseMapping:0x1EED - ,simpleTitleCaseMapping:0x1EEC - }, - { code:0x1EEE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EEE - ,simpleLowerCaseMapping:0x1EEF - ,simpleTitleCaseMapping:0x1EEE - }, - { code:0x1EEF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EEE - ,simpleLowerCaseMapping:0x1EEF - ,simpleTitleCaseMapping:0x1EEE - }, - { code:0x1EF0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EF0 - ,simpleLowerCaseMapping:0x1EF1 - ,simpleTitleCaseMapping:0x1EF0 - }, - { code:0x1EF1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EF0 - ,simpleLowerCaseMapping:0x1EF1 - ,simpleTitleCaseMapping:0x1EF0 - }, - { code:0x1EF2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EF2 - ,simpleLowerCaseMapping:0x1EF3 - ,simpleTitleCaseMapping:0x1EF2 - }, - { code:0x1EF3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EF2 - ,simpleLowerCaseMapping:0x1EF3 - ,simpleTitleCaseMapping:0x1EF2 - }, - { code:0x1EF4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EF4 - ,simpleLowerCaseMapping:0x1EF5 - ,simpleTitleCaseMapping:0x1EF4 - }, - { code:0x1EF5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EF4 - ,simpleLowerCaseMapping:0x1EF5 - ,simpleTitleCaseMapping:0x1EF4 - }, - { code:0x1EF6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EF6 - ,simpleLowerCaseMapping:0x1EF7 - ,simpleTitleCaseMapping:0x1EF6 - }, - { code:0x1EF7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EF6 - ,simpleLowerCaseMapping:0x1EF7 - ,simpleTitleCaseMapping:0x1EF6 - }, - { code:0x1EF8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1EF8 - ,simpleLowerCaseMapping:0x1EF9 - ,simpleTitleCaseMapping:0x1EF8 - }, - { code:0x1EF9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1EF8 - ,simpleLowerCaseMapping:0x1EF9 - ,simpleTitleCaseMapping:0x1EF8 - }, - { code:0x1F00 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F08 - ,simpleLowerCaseMapping:0x1F00 - ,simpleTitleCaseMapping:0x1F08 - }, - { code:0x1F01 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F09 - ,simpleLowerCaseMapping:0x1F01 - ,simpleTitleCaseMapping:0x1F09 - }, - { code:0x1F02 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0A - ,simpleLowerCaseMapping:0x1F02 - ,simpleTitleCaseMapping:0x1F0A - }, - { code:0x1F03 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0B - ,simpleLowerCaseMapping:0x1F03 - ,simpleTitleCaseMapping:0x1F0B - }, - { code:0x1F04 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0C - ,simpleLowerCaseMapping:0x1F04 - ,simpleTitleCaseMapping:0x1F0C - }, - { code:0x1F05 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0D - ,simpleLowerCaseMapping:0x1F05 - ,simpleTitleCaseMapping:0x1F0D - }, - { code:0x1F06 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0E - ,simpleLowerCaseMapping:0x1F06 - ,simpleTitleCaseMapping:0x1F0E - }, - { code:0x1F07 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F0F - ,simpleLowerCaseMapping:0x1F07 - ,simpleTitleCaseMapping:0x1F0F - }, - { code:0x1F08 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F08 - ,simpleLowerCaseMapping:0x1F00 - ,simpleTitleCaseMapping:0x1F08 - }, - { code:0x1F09 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F09 - ,simpleLowerCaseMapping:0x1F01 - ,simpleTitleCaseMapping:0x1F09 - }, - { code:0x1F0A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0A - ,simpleLowerCaseMapping:0x1F02 - ,simpleTitleCaseMapping:0x1F0A - }, - { code:0x1F0B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0B - ,simpleLowerCaseMapping:0x1F03 - ,simpleTitleCaseMapping:0x1F0B - }, - { code:0x1F0C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0C - ,simpleLowerCaseMapping:0x1F04 - ,simpleTitleCaseMapping:0x1F0C - }, - { code:0x1F0D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0D - ,simpleLowerCaseMapping:0x1F05 - ,simpleTitleCaseMapping:0x1F0D - }, - { code:0x1F0E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0E - ,simpleLowerCaseMapping:0x1F06 - ,simpleTitleCaseMapping:0x1F0E - }, - { code:0x1F0F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F0F - ,simpleLowerCaseMapping:0x1F07 - ,simpleTitleCaseMapping:0x1F0F - }, - { code:0x1F10 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F18 - ,simpleLowerCaseMapping:0x1F10 - ,simpleTitleCaseMapping:0x1F18 - }, - { code:0x1F11 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F19 - ,simpleLowerCaseMapping:0x1F11 - ,simpleTitleCaseMapping:0x1F19 - }, - { code:0x1F12 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F1A - ,simpleLowerCaseMapping:0x1F12 - ,simpleTitleCaseMapping:0x1F1A - }, - { code:0x1F13 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F1B - ,simpleLowerCaseMapping:0x1F13 - ,simpleTitleCaseMapping:0x1F1B - }, - { code:0x1F14 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F1C - ,simpleLowerCaseMapping:0x1F14 - ,simpleTitleCaseMapping:0x1F1C - }, - { code:0x1F15 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F1D - ,simpleLowerCaseMapping:0x1F15 - ,simpleTitleCaseMapping:0x1F1D - }, - { code:0x1F18 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F18 - ,simpleLowerCaseMapping:0x1F10 - ,simpleTitleCaseMapping:0x1F18 - }, - { code:0x1F19 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F19 - ,simpleLowerCaseMapping:0x1F11 - ,simpleTitleCaseMapping:0x1F19 - }, - { code:0x1F1A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F1A - ,simpleLowerCaseMapping:0x1F12 - ,simpleTitleCaseMapping:0x1F1A - }, - { code:0x1F1B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F1B - ,simpleLowerCaseMapping:0x1F13 - ,simpleTitleCaseMapping:0x1F1B - }, - { code:0x1F1C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F1C - ,simpleLowerCaseMapping:0x1F14 - ,simpleTitleCaseMapping:0x1F1C - }, - { code:0x1F1D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F1D - ,simpleLowerCaseMapping:0x1F15 - ,simpleTitleCaseMapping:0x1F1D - }, - { code:0x1F20 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F28 - ,simpleLowerCaseMapping:0x1F20 - ,simpleTitleCaseMapping:0x1F28 - }, - { code:0x1F21 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F29 - ,simpleLowerCaseMapping:0x1F21 - ,simpleTitleCaseMapping:0x1F29 - }, - { code:0x1F22 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2A - ,simpleLowerCaseMapping:0x1F22 - ,simpleTitleCaseMapping:0x1F2A - }, - { code:0x1F23 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2B - ,simpleLowerCaseMapping:0x1F23 - ,simpleTitleCaseMapping:0x1F2B - }, - { code:0x1F24 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2C - ,simpleLowerCaseMapping:0x1F24 - ,simpleTitleCaseMapping:0x1F2C - }, - { code:0x1F25 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2D - ,simpleLowerCaseMapping:0x1F25 - ,simpleTitleCaseMapping:0x1F2D - }, - { code:0x1F26 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2E - ,simpleLowerCaseMapping:0x1F26 - ,simpleTitleCaseMapping:0x1F2E - }, - { code:0x1F27 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F2F - ,simpleLowerCaseMapping:0x1F27 - ,simpleTitleCaseMapping:0x1F2F - }, - { code:0x1F28 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F28 - ,simpleLowerCaseMapping:0x1F20 - ,simpleTitleCaseMapping:0x1F28 - }, - { code:0x1F29 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F29 - ,simpleLowerCaseMapping:0x1F21 - ,simpleTitleCaseMapping:0x1F29 - }, - { code:0x1F2A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2A - ,simpleLowerCaseMapping:0x1F22 - ,simpleTitleCaseMapping:0x1F2A - }, - { code:0x1F2B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2B - ,simpleLowerCaseMapping:0x1F23 - ,simpleTitleCaseMapping:0x1F2B - }, - { code:0x1F2C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2C - ,simpleLowerCaseMapping:0x1F24 - ,simpleTitleCaseMapping:0x1F2C - }, - { code:0x1F2D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2D - ,simpleLowerCaseMapping:0x1F25 - ,simpleTitleCaseMapping:0x1F2D - }, - { code:0x1F2E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2E - ,simpleLowerCaseMapping:0x1F26 - ,simpleTitleCaseMapping:0x1F2E - }, - { code:0x1F2F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F2F - ,simpleLowerCaseMapping:0x1F27 - ,simpleTitleCaseMapping:0x1F2F - }, - { code:0x1F30 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F38 - ,simpleLowerCaseMapping:0x1F30 - ,simpleTitleCaseMapping:0x1F38 - }, - { code:0x1F31 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F39 - ,simpleLowerCaseMapping:0x1F31 - ,simpleTitleCaseMapping:0x1F39 - }, - { code:0x1F32 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3A - ,simpleLowerCaseMapping:0x1F32 - ,simpleTitleCaseMapping:0x1F3A - }, - { code:0x1F33 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3B - ,simpleLowerCaseMapping:0x1F33 - ,simpleTitleCaseMapping:0x1F3B - }, - { code:0x1F34 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3C - ,simpleLowerCaseMapping:0x1F34 - ,simpleTitleCaseMapping:0x1F3C - }, - { code:0x1F35 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3D - ,simpleLowerCaseMapping:0x1F35 - ,simpleTitleCaseMapping:0x1F3D - }, - { code:0x1F36 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3E - ,simpleLowerCaseMapping:0x1F36 - ,simpleTitleCaseMapping:0x1F3E - }, - { code:0x1F37 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F3F - ,simpleLowerCaseMapping:0x1F37 - ,simpleTitleCaseMapping:0x1F3F - }, - { code:0x1F38 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F38 - ,simpleLowerCaseMapping:0x1F30 - ,simpleTitleCaseMapping:0x1F38 - }, - { code:0x1F39 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F39 - ,simpleLowerCaseMapping:0x1F31 - ,simpleTitleCaseMapping:0x1F39 - }, - { code:0x1F3A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3A - ,simpleLowerCaseMapping:0x1F32 - ,simpleTitleCaseMapping:0x1F3A - }, - { code:0x1F3B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3B - ,simpleLowerCaseMapping:0x1F33 - ,simpleTitleCaseMapping:0x1F3B - }, - { code:0x1F3C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3C - ,simpleLowerCaseMapping:0x1F34 - ,simpleTitleCaseMapping:0x1F3C - }, - { code:0x1F3D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3D - ,simpleLowerCaseMapping:0x1F35 - ,simpleTitleCaseMapping:0x1F3D - }, - { code:0x1F3E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3E - ,simpleLowerCaseMapping:0x1F36 - ,simpleTitleCaseMapping:0x1F3E - }, - { code:0x1F3F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F3F - ,simpleLowerCaseMapping:0x1F37 - ,simpleTitleCaseMapping:0x1F3F - }, - { code:0x1F40 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F48 - ,simpleLowerCaseMapping:0x1F40 - ,simpleTitleCaseMapping:0x1F48 - }, - { code:0x1F41 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F49 - ,simpleLowerCaseMapping:0x1F41 - ,simpleTitleCaseMapping:0x1F49 - }, - { code:0x1F42 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F4A - ,simpleLowerCaseMapping:0x1F42 - ,simpleTitleCaseMapping:0x1F4A - }, - { code:0x1F43 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F4B - ,simpleLowerCaseMapping:0x1F43 - ,simpleTitleCaseMapping:0x1F4B - }, - { code:0x1F44 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F4C - ,simpleLowerCaseMapping:0x1F44 - ,simpleTitleCaseMapping:0x1F4C - }, - { code:0x1F45 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F4D - ,simpleLowerCaseMapping:0x1F45 - ,simpleTitleCaseMapping:0x1F4D - }, - { code:0x1F48 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F48 - ,simpleLowerCaseMapping:0x1F40 - ,simpleTitleCaseMapping:0x1F48 - }, - { code:0x1F49 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F49 - ,simpleLowerCaseMapping:0x1F41 - ,simpleTitleCaseMapping:0x1F49 - }, - { code:0x1F4A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F4A - ,simpleLowerCaseMapping:0x1F42 - ,simpleTitleCaseMapping:0x1F4A - }, - { code:0x1F4B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F4B - ,simpleLowerCaseMapping:0x1F43 - ,simpleTitleCaseMapping:0x1F4B - }, - { code:0x1F4C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F4C - ,simpleLowerCaseMapping:0x1F44 - ,simpleTitleCaseMapping:0x1F4C - }, - { code:0x1F4D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F4D - ,simpleLowerCaseMapping:0x1F45 - ,simpleTitleCaseMapping:0x1F4D - }, - { code:0x1F50 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F50 - ,simpleLowerCaseMapping:0x1F50 - ,simpleTitleCaseMapping:0x1F50 - }, - { code:0x1F51 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F59 - ,simpleLowerCaseMapping:0x1F51 - ,simpleTitleCaseMapping:0x1F59 - }, - { code:0x1F52 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F52 - ,simpleLowerCaseMapping:0x1F52 - ,simpleTitleCaseMapping:0x1F52 - }, - { code:0x1F53 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F5B - ,simpleLowerCaseMapping:0x1F53 - ,simpleTitleCaseMapping:0x1F5B - }, - { code:0x1F54 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F54 - ,simpleLowerCaseMapping:0x1F54 - ,simpleTitleCaseMapping:0x1F54 - }, - { code:0x1F55 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F5D - ,simpleLowerCaseMapping:0x1F55 - ,simpleTitleCaseMapping:0x1F5D - }, - { code:0x1F56 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F56 - ,simpleLowerCaseMapping:0x1F56 - ,simpleTitleCaseMapping:0x1F56 - }, - { code:0x1F57 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F5F - ,simpleLowerCaseMapping:0x1F57 - ,simpleTitleCaseMapping:0x1F5F - }, - { code:0x1F59 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F59 - ,simpleLowerCaseMapping:0x1F51 - ,simpleTitleCaseMapping:0x1F59 - }, - { code:0x1F5B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F5B - ,simpleLowerCaseMapping:0x1F53 - ,simpleTitleCaseMapping:0x1F5B - }, - { code:0x1F5D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F5D - ,simpleLowerCaseMapping:0x1F55 - ,simpleTitleCaseMapping:0x1F5D - }, - { code:0x1F5F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F5F - ,simpleLowerCaseMapping:0x1F57 - ,simpleTitleCaseMapping:0x1F5F - }, - { code:0x1F60 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F68 - ,simpleLowerCaseMapping:0x1F60 - ,simpleTitleCaseMapping:0x1F68 - }, - { code:0x1F61 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F69 - ,simpleLowerCaseMapping:0x1F61 - ,simpleTitleCaseMapping:0x1F69 - }, - { code:0x1F62 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6A - ,simpleLowerCaseMapping:0x1F62 - ,simpleTitleCaseMapping:0x1F6A - }, - { code:0x1F63 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6B - ,simpleLowerCaseMapping:0x1F63 - ,simpleTitleCaseMapping:0x1F6B - }, - { code:0x1F64 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6C - ,simpleLowerCaseMapping:0x1F64 - ,simpleTitleCaseMapping:0x1F6C - }, - { code:0x1F65 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6D - ,simpleLowerCaseMapping:0x1F65 - ,simpleTitleCaseMapping:0x1F6D - }, - { code:0x1F66 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6E - ,simpleLowerCaseMapping:0x1F66 - ,simpleTitleCaseMapping:0x1F6E - }, - { code:0x1F67 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1F6F - ,simpleLowerCaseMapping:0x1F67 - ,simpleTitleCaseMapping:0x1F6F - }, - { code:0x1F68 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F68 - ,simpleLowerCaseMapping:0x1F60 - ,simpleTitleCaseMapping:0x1F68 - }, - { code:0x1F69 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F69 - ,simpleLowerCaseMapping:0x1F61 - ,simpleTitleCaseMapping:0x1F69 - }, - { code:0x1F6A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6A - ,simpleLowerCaseMapping:0x1F62 - ,simpleTitleCaseMapping:0x1F6A - }, - { code:0x1F6B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6B - ,simpleLowerCaseMapping:0x1F63 - ,simpleTitleCaseMapping:0x1F6B - }, - { code:0x1F6C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6C - ,simpleLowerCaseMapping:0x1F64 - ,simpleTitleCaseMapping:0x1F6C - }, - { code:0x1F6D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6D - ,simpleLowerCaseMapping:0x1F65 - ,simpleTitleCaseMapping:0x1F6D - }, - { code:0x1F6E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6E - ,simpleLowerCaseMapping:0x1F66 - ,simpleTitleCaseMapping:0x1F6E - }, - { code:0x1F6F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1F6F - ,simpleLowerCaseMapping:0x1F67 - ,simpleTitleCaseMapping:0x1F6F - }, - { code:0x1F70 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FBA - ,simpleLowerCaseMapping:0x1F70 - ,simpleTitleCaseMapping:0x1FBA - }, - { code:0x1F71 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FBB - ,simpleLowerCaseMapping:0x1F71 - ,simpleTitleCaseMapping:0x1FBB - }, - { code:0x1F72 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FC8 - ,simpleLowerCaseMapping:0x1F72 - ,simpleTitleCaseMapping:0x1FC8 - }, - { code:0x1F73 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FC9 - ,simpleLowerCaseMapping:0x1F73 - ,simpleTitleCaseMapping:0x1FC9 - }, - { code:0x1F74 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FCA - ,simpleLowerCaseMapping:0x1F74 - ,simpleTitleCaseMapping:0x1FCA - }, - { code:0x1F75 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FCB - ,simpleLowerCaseMapping:0x1F75 - ,simpleTitleCaseMapping:0x1FCB - }, - { code:0x1F76 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FDA - ,simpleLowerCaseMapping:0x1F76 - ,simpleTitleCaseMapping:0x1FDA - }, - { code:0x1F77 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FDB - ,simpleLowerCaseMapping:0x1F77 - ,simpleTitleCaseMapping:0x1FDB - }, - { code:0x1F78 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FF8 - ,simpleLowerCaseMapping:0x1F78 - ,simpleTitleCaseMapping:0x1FF8 - }, - { code:0x1F79 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FF9 - ,simpleLowerCaseMapping:0x1F79 - ,simpleTitleCaseMapping:0x1FF9 - }, - { code:0x1F7A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FEA - ,simpleLowerCaseMapping:0x1F7A - ,simpleTitleCaseMapping:0x1FEA - }, - { code:0x1F7B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FEB - ,simpleLowerCaseMapping:0x1F7B - ,simpleTitleCaseMapping:0x1FEB - }, - { code:0x1F7C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FFA - ,simpleLowerCaseMapping:0x1F7C - ,simpleTitleCaseMapping:0x1FFA - }, - { code:0x1F7D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FFB - ,simpleLowerCaseMapping:0x1F7D - ,simpleTitleCaseMapping:0x1FFB - }, - { code:0x1F80 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F88 - ,simpleLowerCaseMapping:0x1F80 - ,simpleTitleCaseMapping:0x1F88 - }, - { code:0x1F81 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F89 - ,simpleLowerCaseMapping:0x1F81 - ,simpleTitleCaseMapping:0x1F89 - }, - { code:0x1F82 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8A - ,simpleLowerCaseMapping:0x1F82 - ,simpleTitleCaseMapping:0x1F8A - }, - { code:0x1F83 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8B - ,simpleLowerCaseMapping:0x1F83 - ,simpleTitleCaseMapping:0x1F8B - }, - { code:0x1F84 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8C - ,simpleLowerCaseMapping:0x1F84 - ,simpleTitleCaseMapping:0x1F8C - }, - { code:0x1F85 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8D - ,simpleLowerCaseMapping:0x1F85 - ,simpleTitleCaseMapping:0x1F8D - }, - { code:0x1F86 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8E - ,simpleLowerCaseMapping:0x1F86 - ,simpleTitleCaseMapping:0x1F8E - }, - { code:0x1F87 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8F - ,simpleLowerCaseMapping:0x1F87 - ,simpleTitleCaseMapping:0x1F8F - }, - { code:0x1F88 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F88 - ,simpleLowerCaseMapping:0x1F80 - ,simpleTitleCaseMapping:0x1F88 - }, - { code:0x1F89 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F89 - ,simpleLowerCaseMapping:0x1F81 - ,simpleTitleCaseMapping:0x1F89 - }, - { code:0x1F8A - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8A - ,simpleLowerCaseMapping:0x1F82 - ,simpleTitleCaseMapping:0x1F8A - }, - { code:0x1F8B - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8B - ,simpleLowerCaseMapping:0x1F83 - ,simpleTitleCaseMapping:0x1F8B - }, - { code:0x1F8C - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8C - ,simpleLowerCaseMapping:0x1F84 - ,simpleTitleCaseMapping:0x1F8C - }, - { code:0x1F8D - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8D - ,simpleLowerCaseMapping:0x1F85 - ,simpleTitleCaseMapping:0x1F8D - }, - { code:0x1F8E - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8E - ,simpleLowerCaseMapping:0x1F86 - ,simpleTitleCaseMapping:0x1F8E - }, - { code:0x1F8F - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F8F - ,simpleLowerCaseMapping:0x1F87 - ,simpleTitleCaseMapping:0x1F8F - }, - { code:0x1F90 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F98 - ,simpleLowerCaseMapping:0x1F90 - ,simpleTitleCaseMapping:0x1F98 - }, - { code:0x1F91 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F99 - ,simpleLowerCaseMapping:0x1F91 - ,simpleTitleCaseMapping:0x1F99 - }, - { code:0x1F92 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9A - ,simpleLowerCaseMapping:0x1F92 - ,simpleTitleCaseMapping:0x1F9A - }, - { code:0x1F93 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9B - ,simpleLowerCaseMapping:0x1F93 - ,simpleTitleCaseMapping:0x1F9B - }, - { code:0x1F94 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9C - ,simpleLowerCaseMapping:0x1F94 - ,simpleTitleCaseMapping:0x1F9C - }, - { code:0x1F95 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9D - ,simpleLowerCaseMapping:0x1F95 - ,simpleTitleCaseMapping:0x1F9D - }, - { code:0x1F96 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9E - ,simpleLowerCaseMapping:0x1F96 - ,simpleTitleCaseMapping:0x1F9E - }, - { code:0x1F97 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9F - ,simpleLowerCaseMapping:0x1F97 - ,simpleTitleCaseMapping:0x1F9F - }, - { code:0x1F98 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F98 - ,simpleLowerCaseMapping:0x1F90 - ,simpleTitleCaseMapping:0x1F98 - }, - { code:0x1F99 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F99 - ,simpleLowerCaseMapping:0x1F91 - ,simpleTitleCaseMapping:0x1F99 - }, - { code:0x1F9A - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9A - ,simpleLowerCaseMapping:0x1F92 - ,simpleTitleCaseMapping:0x1F9A - }, - { code:0x1F9B - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9B - ,simpleLowerCaseMapping:0x1F93 - ,simpleTitleCaseMapping:0x1F9B - }, - { code:0x1F9C - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9C - ,simpleLowerCaseMapping:0x1F94 - ,simpleTitleCaseMapping:0x1F9C - }, - { code:0x1F9D - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9D - ,simpleLowerCaseMapping:0x1F95 - ,simpleTitleCaseMapping:0x1F9D - }, - { code:0x1F9E - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9E - ,simpleLowerCaseMapping:0x1F96 - ,simpleTitleCaseMapping:0x1F9E - }, - { code:0x1F9F - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1F9F - ,simpleLowerCaseMapping:0x1F97 - ,simpleTitleCaseMapping:0x1F9F - }, - { code:0x1FA0 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FA8 - ,simpleLowerCaseMapping:0x1FA0 - ,simpleTitleCaseMapping:0x1FA8 - }, - { code:0x1FA1 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FA9 - ,simpleLowerCaseMapping:0x1FA1 - ,simpleTitleCaseMapping:0x1FA9 - }, - { code:0x1FA2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAA - ,simpleLowerCaseMapping:0x1FA2 - ,simpleTitleCaseMapping:0x1FAA - }, - { code:0x1FA3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAB - ,simpleLowerCaseMapping:0x1FA3 - ,simpleTitleCaseMapping:0x1FAB - }, - { code:0x1FA4 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAC - ,simpleLowerCaseMapping:0x1FA4 - ,simpleTitleCaseMapping:0x1FAC - }, - { code:0x1FA5 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAD - ,simpleLowerCaseMapping:0x1FA5 - ,simpleTitleCaseMapping:0x1FAD - }, - { code:0x1FA6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAE - ,simpleLowerCaseMapping:0x1FA6 - ,simpleTitleCaseMapping:0x1FAE - }, - { code:0x1FA7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAF - ,simpleLowerCaseMapping:0x1FA7 - ,simpleTitleCaseMapping:0x1FAF - }, - { code:0x1FA8 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FA8 - ,simpleLowerCaseMapping:0x1FA0 - ,simpleTitleCaseMapping:0x1FA8 - }, - { code:0x1FA9 - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FA9 - ,simpleLowerCaseMapping:0x1FA1 - ,simpleTitleCaseMapping:0x1FA9 - }, - { code:0x1FAA - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAA - ,simpleLowerCaseMapping:0x1FA2 - ,simpleTitleCaseMapping:0x1FAA - }, - { code:0x1FAB - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAB - ,simpleLowerCaseMapping:0x1FA3 - ,simpleTitleCaseMapping:0x1FAB - }, - { code:0x1FAC - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAC - ,simpleLowerCaseMapping:0x1FA4 - ,simpleTitleCaseMapping:0x1FAC - }, - { code:0x1FAD - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAD - ,simpleLowerCaseMapping:0x1FA5 - ,simpleTitleCaseMapping:0x1FAD - }, - { code:0x1FAE - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAE - ,simpleLowerCaseMapping:0x1FA6 - ,simpleTitleCaseMapping:0x1FAE - }, - { code:0x1FAF - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FAF - ,simpleLowerCaseMapping:0x1FA7 - ,simpleTitleCaseMapping:0x1FAF - }, - { code:0x1FB0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FB8 - ,simpleLowerCaseMapping:0x1FB0 - ,simpleTitleCaseMapping:0x1FB8 - }, - { code:0x1FB1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FB9 - ,simpleLowerCaseMapping:0x1FB1 - ,simpleTitleCaseMapping:0x1FB9 - }, - { code:0x1FB2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FB2 - ,simpleLowerCaseMapping:0x1FB2 - ,simpleTitleCaseMapping:0x1FB2 - }, - { code:0x1FB3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FBC - ,simpleLowerCaseMapping:0x1FB3 - ,simpleTitleCaseMapping:0x1FBC - }, - { code:0x1FB4 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FB4 - ,simpleLowerCaseMapping:0x1FB4 - ,simpleTitleCaseMapping:0x1FB4 - }, - { code:0x1FB6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FB6 - ,simpleLowerCaseMapping:0x1FB6 - ,simpleTitleCaseMapping:0x1FB6 - }, - { code:0x1FB7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FB7 - ,simpleLowerCaseMapping:0x1FB7 - ,simpleTitleCaseMapping:0x1FB7 - }, - { code:0x1FB8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FB8 - ,simpleLowerCaseMapping:0x1FB0 - ,simpleTitleCaseMapping:0x1FB8 - }, - { code:0x1FB9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FB9 - ,simpleLowerCaseMapping:0x1FB1 - ,simpleTitleCaseMapping:0x1FB9 - }, - { code:0x1FBA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FBA - ,simpleLowerCaseMapping:0x1F70 - ,simpleTitleCaseMapping:0x1FBA - }, - { code:0x1FBB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FBB - ,simpleLowerCaseMapping:0x1F71 - ,simpleTitleCaseMapping:0x1FBB - }, - { code:0x1FBC - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FBC - ,simpleLowerCaseMapping:0x1FB3 - ,simpleTitleCaseMapping:0x1FBC - }, - { code:0x1FBD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FBD - ,simpleLowerCaseMapping:0x1FBD - ,simpleTitleCaseMapping:0x1FBD - }, - { code:0x1FBE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x0399 - ,simpleLowerCaseMapping:0x1FBE - ,simpleTitleCaseMapping:0x0399 - }, - { code:0x1FBF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FBF - ,simpleLowerCaseMapping:0x1FBF - ,simpleTitleCaseMapping:0x1FBF - }, - { code:0x1FC0 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FC0 - ,simpleLowerCaseMapping:0x1FC0 - ,simpleTitleCaseMapping:0x1FC0 - }, - { code:0x1FC1 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FC1 - ,simpleLowerCaseMapping:0x1FC1 - ,simpleTitleCaseMapping:0x1FC1 - }, - { code:0x1FC2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FC2 - ,simpleLowerCaseMapping:0x1FC2 - ,simpleTitleCaseMapping:0x1FC2 - }, - { code:0x1FC3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FCC - ,simpleLowerCaseMapping:0x1FC3 - ,simpleTitleCaseMapping:0x1FCC - }, - { code:0x1FC4 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FC4 - ,simpleLowerCaseMapping:0x1FC4 - ,simpleTitleCaseMapping:0x1FC4 - }, - { code:0x1FC6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FC6 - ,simpleLowerCaseMapping:0x1FC6 - ,simpleTitleCaseMapping:0x1FC6 - }, - { code:0x1FC7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FC7 - ,simpleLowerCaseMapping:0x1FC7 - ,simpleTitleCaseMapping:0x1FC7 - }, - { code:0x1FC8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FC8 - ,simpleLowerCaseMapping:0x1F72 - ,simpleTitleCaseMapping:0x1FC8 - }, - { code:0x1FC9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FC9 - ,simpleLowerCaseMapping:0x1F73 - ,simpleTitleCaseMapping:0x1FC9 - }, - { code:0x1FCA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FCA - ,simpleLowerCaseMapping:0x1F74 - ,simpleTitleCaseMapping:0x1FCA - }, - { code:0x1FCB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FCB - ,simpleLowerCaseMapping:0x1F75 - ,simpleTitleCaseMapping:0x1FCB - }, - { code:0x1FCC - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FCC - ,simpleLowerCaseMapping:0x1FC3 - ,simpleTitleCaseMapping:0x1FCC - }, - { code:0x1FCD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FCD - ,simpleLowerCaseMapping:0x1FCD - ,simpleTitleCaseMapping:0x1FCD - }, - { code:0x1FCE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FCE - ,simpleLowerCaseMapping:0x1FCE - ,simpleTitleCaseMapping:0x1FCE - }, - { code:0x1FCF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FCF - ,simpleLowerCaseMapping:0x1FCF - ,simpleTitleCaseMapping:0x1FCF - }, - { code:0x1FD0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FD8 - ,simpleLowerCaseMapping:0x1FD0 - ,simpleTitleCaseMapping:0x1FD8 - }, - { code:0x1FD1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FD9 - ,simpleLowerCaseMapping:0x1FD1 - ,simpleTitleCaseMapping:0x1FD9 - }, - { code:0x1FD2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FD2 - ,simpleLowerCaseMapping:0x1FD2 - ,simpleTitleCaseMapping:0x1FD2 - }, - { code:0x1FD3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FD3 - ,simpleLowerCaseMapping:0x1FD3 - ,simpleTitleCaseMapping:0x1FD3 - }, - { code:0x1FD6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FD6 - ,simpleLowerCaseMapping:0x1FD6 - ,simpleTitleCaseMapping:0x1FD6 - }, - { code:0x1FD7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FD7 - ,simpleLowerCaseMapping:0x1FD7 - ,simpleTitleCaseMapping:0x1FD7 - }, - { code:0x1FD8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FD8 - ,simpleLowerCaseMapping:0x1FD0 - ,simpleTitleCaseMapping:0x1FD8 - }, - { code:0x1FD9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FD9 - ,simpleLowerCaseMapping:0x1FD1 - ,simpleTitleCaseMapping:0x1FD9 - }, - { code:0x1FDA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FDA - ,simpleLowerCaseMapping:0x1F76 - ,simpleTitleCaseMapping:0x1FDA - }, - { code:0x1FDB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FDB - ,simpleLowerCaseMapping:0x1F77 - ,simpleTitleCaseMapping:0x1FDB - }, - { code:0x1FDD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FDD - ,simpleLowerCaseMapping:0x1FDD - ,simpleTitleCaseMapping:0x1FDD - }, - { code:0x1FDE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FDE - ,simpleLowerCaseMapping:0x1FDE - ,simpleTitleCaseMapping:0x1FDE - }, - { code:0x1FDF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FDF - ,simpleLowerCaseMapping:0x1FDF - ,simpleTitleCaseMapping:0x1FDF - }, - { code:0x1FE0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FE8 - ,simpleLowerCaseMapping:0x1FE0 - ,simpleTitleCaseMapping:0x1FE8 - }, - { code:0x1FE1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FE9 - ,simpleLowerCaseMapping:0x1FE1 - ,simpleTitleCaseMapping:0x1FE9 - }, - { code:0x1FE2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FE2 - ,simpleLowerCaseMapping:0x1FE2 - ,simpleTitleCaseMapping:0x1FE2 - }, - { code:0x1FE3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FE3 - ,simpleLowerCaseMapping:0x1FE3 - ,simpleTitleCaseMapping:0x1FE3 - }, - { code:0x1FE4 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FE4 - ,simpleLowerCaseMapping:0x1FE4 - ,simpleTitleCaseMapping:0x1FE4 - }, - { code:0x1FE5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1FEC - ,simpleLowerCaseMapping:0x1FE5 - ,simpleTitleCaseMapping:0x1FEC - }, - { code:0x1FE6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FE6 - ,simpleLowerCaseMapping:0x1FE6 - ,simpleTitleCaseMapping:0x1FE6 - }, - { code:0x1FE7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FE7 - ,simpleLowerCaseMapping:0x1FE7 - ,simpleTitleCaseMapping:0x1FE7 - }, - { code:0x1FE8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FE8 - ,simpleLowerCaseMapping:0x1FE0 - ,simpleTitleCaseMapping:0x1FE8 - }, - { code:0x1FE9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FE9 - ,simpleLowerCaseMapping:0x1FE1 - ,simpleTitleCaseMapping:0x1FE9 - }, - { code:0x1FEA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FEA - ,simpleLowerCaseMapping:0x1F7A - ,simpleTitleCaseMapping:0x1FEA - }, - { code:0x1FEB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FEB - ,simpleLowerCaseMapping:0x1F7B - ,simpleTitleCaseMapping:0x1FEB - }, - { code:0x1FEC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FEC - ,simpleLowerCaseMapping:0x1FE5 - ,simpleTitleCaseMapping:0x1FEC - }, - { code:0x1FED - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FED - ,simpleLowerCaseMapping:0x1FED - ,simpleTitleCaseMapping:0x1FED - }, - { code:0x1FEE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FEE - ,simpleLowerCaseMapping:0x1FEE - ,simpleTitleCaseMapping:0x1FEE - }, - { code:0x1FEF - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FEF - ,simpleLowerCaseMapping:0x1FEF - ,simpleTitleCaseMapping:0x1FEF - }, - { code:0x1FF2 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FF2 - ,simpleLowerCaseMapping:0x1FF2 - ,simpleTitleCaseMapping:0x1FF2 - }, - { code:0x1FF3 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FFC - ,simpleLowerCaseMapping:0x1FF3 - ,simpleTitleCaseMapping:0x1FFC - }, - { code:0x1FF4 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FF4 - ,simpleLowerCaseMapping:0x1FF4 - ,simpleTitleCaseMapping:0x1FF4 - }, - { code:0x1FF6 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FF6 - ,simpleLowerCaseMapping:0x1FF6 - ,simpleTitleCaseMapping:0x1FF6 - }, - { code:0x1FF7 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FF7 - ,simpleLowerCaseMapping:0x1FF7 - ,simpleTitleCaseMapping:0x1FF7 - }, - { code:0x1FF8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FF8 - ,simpleLowerCaseMapping:0x1F78 - ,simpleTitleCaseMapping:0x1FF8 - }, - { code:0x1FF9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FF9 - ,simpleLowerCaseMapping:0x1F79 - ,simpleTitleCaseMapping:0x1FF9 - }, - { code:0x1FFA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FFA - ,simpleLowerCaseMapping:0x1F7C - ,simpleTitleCaseMapping:0x1FFA - }, - { code:0x1FFB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1FFB - ,simpleLowerCaseMapping:0x1F7D - ,simpleTitleCaseMapping:0x1FFB - }, - { code:0x1FFC - ,generalCategory:UnicodeData.GeneralCategory.Lt | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0x1FFC - ,simpleLowerCaseMapping:0x1FF3 - ,simpleTitleCaseMapping:0x1FFC - }, - { code:0x1FFD - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FFD - ,simpleLowerCaseMapping:0x1FFD - ,simpleTitleCaseMapping:0x1FFD - }, - { code:0x1FFE - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x1FFE - ,simpleLowerCaseMapping:0x1FFE - ,simpleTitleCaseMapping:0x1FFE - }, - { code:0x2000 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2000 - ,simpleLowerCaseMapping:0x2000 - ,simpleTitleCaseMapping:0x2000 - }, - { code:0x2001 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2001 - ,simpleLowerCaseMapping:0x2001 - ,simpleTitleCaseMapping:0x2001 - }, - { code:0x2002 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2002 - ,simpleLowerCaseMapping:0x2002 - ,simpleTitleCaseMapping:0x2002 - }, - { code:0x2003 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2003 - ,simpleLowerCaseMapping:0x2003 - ,simpleTitleCaseMapping:0x2003 - }, - { code:0x2004 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2004 - ,simpleLowerCaseMapping:0x2004 - ,simpleTitleCaseMapping:0x2004 - }, - { code:0x2005 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2005 - ,simpleLowerCaseMapping:0x2005 - ,simpleTitleCaseMapping:0x2005 - }, - { code:0x2006 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2006 - ,simpleLowerCaseMapping:0x2006 - ,simpleTitleCaseMapping:0x2006 - }, - { code:0x2007 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2007 - ,simpleLowerCaseMapping:0x2007 - ,simpleTitleCaseMapping:0x2007 - }, - { code:0x2008 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2008 - ,simpleLowerCaseMapping:0x2008 - ,simpleTitleCaseMapping:0x2008 - }, - { code:0x2009 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x2009 - ,simpleLowerCaseMapping:0x2009 - ,simpleTitleCaseMapping:0x2009 - }, - { code:0x200A - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x200A - ,simpleLowerCaseMapping:0x200A - ,simpleTitleCaseMapping:0x200A - }, - { code:0x200B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x200B - ,simpleLowerCaseMapping:0x200B - ,simpleTitleCaseMapping:0x200B - }, - { code:0x200C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x200C - ,simpleLowerCaseMapping:0x200C - ,simpleTitleCaseMapping:0x200C - }, - { code:0x200D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x200D - ,simpleLowerCaseMapping:0x200D - ,simpleTitleCaseMapping:0x200D - }, - { code:0x200E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x200E - ,simpleLowerCaseMapping:0x200E - ,simpleTitleCaseMapping:0x200E - }, - { code:0x200F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x200F - ,simpleLowerCaseMapping:0x200F - ,simpleTitleCaseMapping:0x200F - }, - { code:0x2010 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2010 - ,simpleLowerCaseMapping:0x2010 - ,simpleTitleCaseMapping:0x2010 - }, - { code:0x2011 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2011 - ,simpleLowerCaseMapping:0x2011 - ,simpleTitleCaseMapping:0x2011 - }, - { code:0x2012 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2012 - ,simpleLowerCaseMapping:0x2012 - ,simpleTitleCaseMapping:0x2012 - }, - { code:0x2013 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2013 - ,simpleLowerCaseMapping:0x2013 - ,simpleTitleCaseMapping:0x2013 - }, - { code:0x2014 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2014 - ,simpleLowerCaseMapping:0x2014 - ,simpleTitleCaseMapping:0x2014 - }, - { code:0x2015 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2015 - ,simpleLowerCaseMapping:0x2015 - ,simpleTitleCaseMapping:0x2015 - }, - { code:0x2016 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2016 - ,simpleLowerCaseMapping:0x2016 - ,simpleTitleCaseMapping:0x2016 - }, - { code:0x2017 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2017 - ,simpleLowerCaseMapping:0x2017 - ,simpleTitleCaseMapping:0x2017 - }, - { code:0x2018 - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2018 - ,simpleLowerCaseMapping:0x2018 - ,simpleTitleCaseMapping:0x2018 - }, - { code:0x2019 - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2019 - ,simpleLowerCaseMapping:0x2019 - ,simpleTitleCaseMapping:0x2019 - }, - { code:0x201A - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x201A - ,simpleLowerCaseMapping:0x201A - ,simpleTitleCaseMapping:0x201A - }, - { code:0x201B - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x201B - ,simpleLowerCaseMapping:0x201B - ,simpleTitleCaseMapping:0x201B - }, - { code:0x201C - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x201C - ,simpleLowerCaseMapping:0x201C - ,simpleTitleCaseMapping:0x201C - }, - { code:0x201D - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x201D - ,simpleLowerCaseMapping:0x201D - ,simpleTitleCaseMapping:0x201D - }, - { code:0x201E - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x201E - ,simpleLowerCaseMapping:0x201E - ,simpleTitleCaseMapping:0x201E - }, - { code:0x201F - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x201F - ,simpleLowerCaseMapping:0x201F - ,simpleTitleCaseMapping:0x201F - }, - { code:0x2020 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2020 - ,simpleLowerCaseMapping:0x2020 - ,simpleTitleCaseMapping:0x2020 - }, - { code:0x2021 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2021 - ,simpleLowerCaseMapping:0x2021 - ,simpleTitleCaseMapping:0x2021 - }, - { code:0x2022 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2022 - ,simpleLowerCaseMapping:0x2022 - ,simpleTitleCaseMapping:0x2022 - }, - { code:0x2023 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2023 - ,simpleLowerCaseMapping:0x2023 - ,simpleTitleCaseMapping:0x2023 - }, - { code:0x2024 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2024 - ,simpleLowerCaseMapping:0x2024 - ,simpleTitleCaseMapping:0x2024 - }, - { code:0x2025 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2025 - ,simpleLowerCaseMapping:0x2025 - ,simpleTitleCaseMapping:0x2025 - }, - { code:0x2026 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2026 - ,simpleLowerCaseMapping:0x2026 - ,simpleTitleCaseMapping:0x2026 - }, - { code:0x2027 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2027 - ,simpleLowerCaseMapping:0x2027 - ,simpleTitleCaseMapping:0x2027 - }, - { code:0x2028 - ,generalCategory:UnicodeData.GeneralCategory.Zl - ,simpleUpperCaseMapping:0x2028 - ,simpleLowerCaseMapping:0x2028 - ,simpleTitleCaseMapping:0x2028 - }, - { code:0x2029 - ,generalCategory:UnicodeData.GeneralCategory.Zp - ,simpleUpperCaseMapping:0x2029 - ,simpleLowerCaseMapping:0x2029 - ,simpleTitleCaseMapping:0x2029 - }, - { code:0x202A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x202A - ,simpleLowerCaseMapping:0x202A - ,simpleTitleCaseMapping:0x202A - }, - { code:0x202B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x202B - ,simpleLowerCaseMapping:0x202B - ,simpleTitleCaseMapping:0x202B - }, - { code:0x202C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x202C - ,simpleLowerCaseMapping:0x202C - ,simpleTitleCaseMapping:0x202C - }, - { code:0x202D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x202D - ,simpleLowerCaseMapping:0x202D - ,simpleTitleCaseMapping:0x202D - }, - { code:0x202E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x202E - ,simpleLowerCaseMapping:0x202E - ,simpleTitleCaseMapping:0x202E - }, - { code:0x202F - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x202F - ,simpleLowerCaseMapping:0x202F - ,simpleTitleCaseMapping:0x202F - }, - { code:0x2030 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2030 - ,simpleLowerCaseMapping:0x2030 - ,simpleTitleCaseMapping:0x2030 - }, - { code:0x2031 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2031 - ,simpleLowerCaseMapping:0x2031 - ,simpleTitleCaseMapping:0x2031 - }, - { code:0x2032 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2032 - ,simpleLowerCaseMapping:0x2032 - ,simpleTitleCaseMapping:0x2032 - }, - { code:0x2033 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2033 - ,simpleLowerCaseMapping:0x2033 - ,simpleTitleCaseMapping:0x2033 - }, - { code:0x2034 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2034 - ,simpleLowerCaseMapping:0x2034 - ,simpleTitleCaseMapping:0x2034 - }, - { code:0x2035 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2035 - ,simpleLowerCaseMapping:0x2035 - ,simpleTitleCaseMapping:0x2035 - }, - { code:0x2036 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2036 - ,simpleLowerCaseMapping:0x2036 - ,simpleTitleCaseMapping:0x2036 - }, - { code:0x2037 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2037 - ,simpleLowerCaseMapping:0x2037 - ,simpleTitleCaseMapping:0x2037 - }, - { code:0x2038 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2038 - ,simpleLowerCaseMapping:0x2038 - ,simpleTitleCaseMapping:0x2038 - }, - { code:0x2039 - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2039 - ,simpleLowerCaseMapping:0x2039 - ,simpleTitleCaseMapping:0x2039 - }, - { code:0x203A - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x203A - ,simpleLowerCaseMapping:0x203A - ,simpleTitleCaseMapping:0x203A - }, - { code:0x203B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x203B - ,simpleLowerCaseMapping:0x203B - ,simpleTitleCaseMapping:0x203B - }, - { code:0x203C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x203C - ,simpleLowerCaseMapping:0x203C - ,simpleTitleCaseMapping:0x203C - }, - { code:0x203D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x203D - ,simpleLowerCaseMapping:0x203D - ,simpleTitleCaseMapping:0x203D - }, - { code:0x203E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x203E - ,simpleLowerCaseMapping:0x203E - ,simpleTitleCaseMapping:0x203E - }, - { code:0x203F - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0x203F - ,simpleLowerCaseMapping:0x203F - ,simpleTitleCaseMapping:0x203F - }, - { code:0x2040 - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0x2040 - ,simpleLowerCaseMapping:0x2040 - ,simpleTitleCaseMapping:0x2040 - }, - { code:0x2041 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2041 - ,simpleLowerCaseMapping:0x2041 - ,simpleTitleCaseMapping:0x2041 - }, - { code:0x2042 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2042 - ,simpleLowerCaseMapping:0x2042 - ,simpleTitleCaseMapping:0x2042 - }, - { code:0x2043 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2043 - ,simpleLowerCaseMapping:0x2043 - ,simpleTitleCaseMapping:0x2043 - }, - { code:0x2044 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2044 - ,simpleLowerCaseMapping:0x2044 - ,simpleTitleCaseMapping:0x2044 - }, - { code:0x2045 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2045 - ,simpleLowerCaseMapping:0x2045 - ,simpleTitleCaseMapping:0x2045 - }, - { code:0x2046 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2046 - ,simpleLowerCaseMapping:0x2046 - ,simpleTitleCaseMapping:0x2046 - }, - { code:0x2047 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2047 - ,simpleLowerCaseMapping:0x2047 - ,simpleTitleCaseMapping:0x2047 - }, - { code:0x2048 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2048 - ,simpleLowerCaseMapping:0x2048 - ,simpleTitleCaseMapping:0x2048 - }, - { code:0x2049 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2049 - ,simpleLowerCaseMapping:0x2049 - ,simpleTitleCaseMapping:0x2049 - }, - { code:0x204A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204A - ,simpleLowerCaseMapping:0x204A - ,simpleTitleCaseMapping:0x204A - }, - { code:0x204B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204B - ,simpleLowerCaseMapping:0x204B - ,simpleTitleCaseMapping:0x204B - }, - { code:0x204C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204C - ,simpleLowerCaseMapping:0x204C - ,simpleTitleCaseMapping:0x204C - }, - { code:0x204D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204D - ,simpleLowerCaseMapping:0x204D - ,simpleTitleCaseMapping:0x204D - }, - { code:0x204E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204E - ,simpleLowerCaseMapping:0x204E - ,simpleTitleCaseMapping:0x204E - }, - { code:0x204F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x204F - ,simpleLowerCaseMapping:0x204F - ,simpleTitleCaseMapping:0x204F - }, - { code:0x2050 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2050 - ,simpleLowerCaseMapping:0x2050 - ,simpleTitleCaseMapping:0x2050 - }, - { code:0x2051 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2051 - ,simpleLowerCaseMapping:0x2051 - ,simpleTitleCaseMapping:0x2051 - }, - { code:0x2052 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2052 - ,simpleLowerCaseMapping:0x2052 - ,simpleTitleCaseMapping:0x2052 - }, - { code:0x2053 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2053 - ,simpleLowerCaseMapping:0x2053 - ,simpleTitleCaseMapping:0x2053 - }, - { code:0x2054 - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0x2054 - ,simpleLowerCaseMapping:0x2054 - ,simpleTitleCaseMapping:0x2054 - }, - { code:0x2055 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2055 - ,simpleLowerCaseMapping:0x2055 - ,simpleTitleCaseMapping:0x2055 - }, - { code:0x2056 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2056 - ,simpleLowerCaseMapping:0x2056 - ,simpleTitleCaseMapping:0x2056 - }, - { code:0x2057 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2057 - ,simpleLowerCaseMapping:0x2057 - ,simpleTitleCaseMapping:0x2057 - }, - { code:0x2058 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2058 - ,simpleLowerCaseMapping:0x2058 - ,simpleTitleCaseMapping:0x2058 - }, - { code:0x2059 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2059 - ,simpleLowerCaseMapping:0x2059 - ,simpleTitleCaseMapping:0x2059 - }, - { code:0x205A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x205A - ,simpleLowerCaseMapping:0x205A - ,simpleTitleCaseMapping:0x205A - }, - { code:0x205B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x205B - ,simpleLowerCaseMapping:0x205B - ,simpleTitleCaseMapping:0x205B - }, - { code:0x205C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x205C - ,simpleLowerCaseMapping:0x205C - ,simpleTitleCaseMapping:0x205C - }, - { code:0x205D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x205D - ,simpleLowerCaseMapping:0x205D - ,simpleTitleCaseMapping:0x205D - }, - { code:0x205E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x205E - ,simpleLowerCaseMapping:0x205E - ,simpleTitleCaseMapping:0x205E - }, - { code:0x205F - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x205F - ,simpleLowerCaseMapping:0x205F - ,simpleTitleCaseMapping:0x205F - }, - { code:0x2060 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x2060 - ,simpleLowerCaseMapping:0x2060 - ,simpleTitleCaseMapping:0x2060 - }, - { code:0x2061 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x2061 - ,simpleLowerCaseMapping:0x2061 - ,simpleTitleCaseMapping:0x2061 - }, - { code:0x2062 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x2062 - ,simpleLowerCaseMapping:0x2062 - ,simpleTitleCaseMapping:0x2062 - }, - { code:0x2063 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x2063 - ,simpleLowerCaseMapping:0x2063 - ,simpleTitleCaseMapping:0x2063 - }, - { code:0x206A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206A - ,simpleLowerCaseMapping:0x206A - ,simpleTitleCaseMapping:0x206A - }, - { code:0x206B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206B - ,simpleLowerCaseMapping:0x206B - ,simpleTitleCaseMapping:0x206B - }, - { code:0x206C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206C - ,simpleLowerCaseMapping:0x206C - ,simpleTitleCaseMapping:0x206C - }, - { code:0x206D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206D - ,simpleLowerCaseMapping:0x206D - ,simpleTitleCaseMapping:0x206D - }, - { code:0x206E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206E - ,simpleLowerCaseMapping:0x206E - ,simpleTitleCaseMapping:0x206E - }, - { code:0x206F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x206F - ,simpleLowerCaseMapping:0x206F - ,simpleTitleCaseMapping:0x206F - }, - { code:0x2070 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2070 - ,simpleLowerCaseMapping:0x2070 - ,simpleTitleCaseMapping:0x2070 - }, - { code:0x2071 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2071 - ,simpleLowerCaseMapping:0x2071 - ,simpleTitleCaseMapping:0x2071 - }, - { code:0x2074 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2074 - ,simpleLowerCaseMapping:0x2074 - ,simpleTitleCaseMapping:0x2074 - }, - { code:0x2075 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2075 - ,simpleLowerCaseMapping:0x2075 - ,simpleTitleCaseMapping:0x2075 - }, - { code:0x2076 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2076 - ,simpleLowerCaseMapping:0x2076 - ,simpleTitleCaseMapping:0x2076 - }, - { code:0x2077 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2077 - ,simpleLowerCaseMapping:0x2077 - ,simpleTitleCaseMapping:0x2077 - }, - { code:0x2078 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2078 - ,simpleLowerCaseMapping:0x2078 - ,simpleTitleCaseMapping:0x2078 - }, - { code:0x2079 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2079 - ,simpleLowerCaseMapping:0x2079 - ,simpleTitleCaseMapping:0x2079 - }, - { code:0x207A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x207A - ,simpleLowerCaseMapping:0x207A - ,simpleTitleCaseMapping:0x207A - }, - { code:0x207B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x207B - ,simpleLowerCaseMapping:0x207B - ,simpleTitleCaseMapping:0x207B - }, - { code:0x207C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x207C - ,simpleLowerCaseMapping:0x207C - ,simpleTitleCaseMapping:0x207C - }, - { code:0x207D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x207D - ,simpleLowerCaseMapping:0x207D - ,simpleTitleCaseMapping:0x207D - }, - { code:0x207E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x207E - ,simpleLowerCaseMapping:0x207E - ,simpleTitleCaseMapping:0x207E - }, - { code:0x207F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x207F - ,simpleLowerCaseMapping:0x207F - ,simpleTitleCaseMapping:0x207F - }, - { code:0x2080 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2080 - ,simpleLowerCaseMapping:0x2080 - ,simpleTitleCaseMapping:0x2080 - }, - { code:0x2081 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2081 - ,simpleLowerCaseMapping:0x2081 - ,simpleTitleCaseMapping:0x2081 - }, - { code:0x2082 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2082 - ,simpleLowerCaseMapping:0x2082 - ,simpleTitleCaseMapping:0x2082 - }, - { code:0x2083 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2083 - ,simpleLowerCaseMapping:0x2083 - ,simpleTitleCaseMapping:0x2083 - }, - { code:0x2084 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2084 - ,simpleLowerCaseMapping:0x2084 - ,simpleTitleCaseMapping:0x2084 - }, - { code:0x2085 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2085 - ,simpleLowerCaseMapping:0x2085 - ,simpleTitleCaseMapping:0x2085 - }, - { code:0x2086 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2086 - ,simpleLowerCaseMapping:0x2086 - ,simpleTitleCaseMapping:0x2086 - }, - { code:0x2087 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2087 - ,simpleLowerCaseMapping:0x2087 - ,simpleTitleCaseMapping:0x2087 - }, - { code:0x2088 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2088 - ,simpleLowerCaseMapping:0x2088 - ,simpleTitleCaseMapping:0x2088 - }, - { code:0x2089 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2089 - ,simpleLowerCaseMapping:0x2089 - ,simpleTitleCaseMapping:0x2089 - }, - { code:0x208A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x208A - ,simpleLowerCaseMapping:0x208A - ,simpleTitleCaseMapping:0x208A - }, - { code:0x208B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x208B - ,simpleLowerCaseMapping:0x208B - ,simpleTitleCaseMapping:0x208B - }, - { code:0x208C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x208C - ,simpleLowerCaseMapping:0x208C - ,simpleTitleCaseMapping:0x208C - }, - { code:0x208D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x208D - ,simpleLowerCaseMapping:0x208D - ,simpleTitleCaseMapping:0x208D - }, - { code:0x208E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x208E - ,simpleLowerCaseMapping:0x208E - ,simpleTitleCaseMapping:0x208E - }, - { code:0x2090 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2090 - ,simpleLowerCaseMapping:0x2090 - ,simpleTitleCaseMapping:0x2090 - }, - { code:0x2091 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2091 - ,simpleLowerCaseMapping:0x2091 - ,simpleTitleCaseMapping:0x2091 - }, - { code:0x2092 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2092 - ,simpleLowerCaseMapping:0x2092 - ,simpleTitleCaseMapping:0x2092 - }, - { code:0x2093 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2093 - ,simpleLowerCaseMapping:0x2093 - ,simpleTitleCaseMapping:0x2093 - }, - { code:0x2094 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2094 - ,simpleLowerCaseMapping:0x2094 - ,simpleTitleCaseMapping:0x2094 - }, - { code:0x20A0 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A0 - ,simpleLowerCaseMapping:0x20A0 - ,simpleTitleCaseMapping:0x20A0 - }, - { code:0x20A1 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A1 - ,simpleLowerCaseMapping:0x20A1 - ,simpleTitleCaseMapping:0x20A1 - }, - { code:0x20A2 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A2 - ,simpleLowerCaseMapping:0x20A2 - ,simpleTitleCaseMapping:0x20A2 - }, - { code:0x20A3 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A3 - ,simpleLowerCaseMapping:0x20A3 - ,simpleTitleCaseMapping:0x20A3 - }, - { code:0x20A4 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A4 - ,simpleLowerCaseMapping:0x20A4 - ,simpleTitleCaseMapping:0x20A4 - }, - { code:0x20A5 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A5 - ,simpleLowerCaseMapping:0x20A5 - ,simpleTitleCaseMapping:0x20A5 - }, - { code:0x20A6 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A6 - ,simpleLowerCaseMapping:0x20A6 - ,simpleTitleCaseMapping:0x20A6 - }, - { code:0x20A7 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A7 - ,simpleLowerCaseMapping:0x20A7 - ,simpleTitleCaseMapping:0x20A7 - }, - { code:0x20A8 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A8 - ,simpleLowerCaseMapping:0x20A8 - ,simpleTitleCaseMapping:0x20A8 - }, - { code:0x20A9 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20A9 - ,simpleLowerCaseMapping:0x20A9 - ,simpleTitleCaseMapping:0x20A9 - }, - { code:0x20AA - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AA - ,simpleLowerCaseMapping:0x20AA - ,simpleTitleCaseMapping:0x20AA - }, - { code:0x20AB - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AB - ,simpleLowerCaseMapping:0x20AB - ,simpleTitleCaseMapping:0x20AB - }, - { code:0x20AC - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AC - ,simpleLowerCaseMapping:0x20AC - ,simpleTitleCaseMapping:0x20AC - }, - { code:0x20AD - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AD - ,simpleLowerCaseMapping:0x20AD - ,simpleTitleCaseMapping:0x20AD - }, - { code:0x20AE - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AE - ,simpleLowerCaseMapping:0x20AE - ,simpleTitleCaseMapping:0x20AE - }, - { code:0x20AF - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20AF - ,simpleLowerCaseMapping:0x20AF - ,simpleTitleCaseMapping:0x20AF - }, - { code:0x20B0 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B0 - ,simpleLowerCaseMapping:0x20B0 - ,simpleTitleCaseMapping:0x20B0 - }, - { code:0x20B1 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B1 - ,simpleLowerCaseMapping:0x20B1 - ,simpleTitleCaseMapping:0x20B1 - }, - { code:0x20B2 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B2 - ,simpleLowerCaseMapping:0x20B2 - ,simpleTitleCaseMapping:0x20B2 - }, - { code:0x20B3 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B3 - ,simpleLowerCaseMapping:0x20B3 - ,simpleTitleCaseMapping:0x20B3 - }, - { code:0x20B4 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B4 - ,simpleLowerCaseMapping:0x20B4 - ,simpleTitleCaseMapping:0x20B4 - }, - { code:0x20B5 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0x20B5 - ,simpleLowerCaseMapping:0x20B5 - ,simpleTitleCaseMapping:0x20B5 - }, - { code:0x20D0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D0 - ,simpleLowerCaseMapping:0x20D0 - ,simpleTitleCaseMapping:0x20D0 - }, - { code:0x20D1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D1 - ,simpleLowerCaseMapping:0x20D1 - ,simpleTitleCaseMapping:0x20D1 - }, - { code:0x20D2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D2 - ,simpleLowerCaseMapping:0x20D2 - ,simpleTitleCaseMapping:0x20D2 - }, - { code:0x20D3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D3 - ,simpleLowerCaseMapping:0x20D3 - ,simpleTitleCaseMapping:0x20D3 - }, - { code:0x20D4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D4 - ,simpleLowerCaseMapping:0x20D4 - ,simpleTitleCaseMapping:0x20D4 - }, - { code:0x20D5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D5 - ,simpleLowerCaseMapping:0x20D5 - ,simpleTitleCaseMapping:0x20D5 - }, - { code:0x20D6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D6 - ,simpleLowerCaseMapping:0x20D6 - ,simpleTitleCaseMapping:0x20D6 - }, - { code:0x20D7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D7 - ,simpleLowerCaseMapping:0x20D7 - ,simpleTitleCaseMapping:0x20D7 - }, - { code:0x20D8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D8 - ,simpleLowerCaseMapping:0x20D8 - ,simpleTitleCaseMapping:0x20D8 - }, - { code:0x20D9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20D9 - ,simpleLowerCaseMapping:0x20D9 - ,simpleTitleCaseMapping:0x20D9 - }, - { code:0x20DA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20DA - ,simpleLowerCaseMapping:0x20DA - ,simpleTitleCaseMapping:0x20DA - }, - { code:0x20DB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20DB - ,simpleLowerCaseMapping:0x20DB - ,simpleTitleCaseMapping:0x20DB - }, - { code:0x20DC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20DC - ,simpleLowerCaseMapping:0x20DC - ,simpleTitleCaseMapping:0x20DC - }, - { code:0x20DD - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20DD - ,simpleLowerCaseMapping:0x20DD - ,simpleTitleCaseMapping:0x20DD - }, - { code:0x20DE - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20DE - ,simpleLowerCaseMapping:0x20DE - ,simpleTitleCaseMapping:0x20DE - }, - { code:0x20DF - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20DF - ,simpleLowerCaseMapping:0x20DF - ,simpleTitleCaseMapping:0x20DF - }, - { code:0x20E0 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20E0 - ,simpleLowerCaseMapping:0x20E0 - ,simpleTitleCaseMapping:0x20E0 - }, - { code:0x20E1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E1 - ,simpleLowerCaseMapping:0x20E1 - ,simpleTitleCaseMapping:0x20E1 - }, - { code:0x20E2 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20E2 - ,simpleLowerCaseMapping:0x20E2 - ,simpleTitleCaseMapping:0x20E2 - }, - { code:0x20E3 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20E3 - ,simpleLowerCaseMapping:0x20E3 - ,simpleTitleCaseMapping:0x20E3 - }, - { code:0x20E4 - ,generalCategory:UnicodeData.GeneralCategory.Me - ,simpleUpperCaseMapping:0x20E4 - ,simpleLowerCaseMapping:0x20E4 - ,simpleTitleCaseMapping:0x20E4 - }, - { code:0x20E5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E5 - ,simpleLowerCaseMapping:0x20E5 - ,simpleTitleCaseMapping:0x20E5 - }, - { code:0x20E6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E6 - ,simpleLowerCaseMapping:0x20E6 - ,simpleTitleCaseMapping:0x20E6 - }, - { code:0x20E7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E7 - ,simpleLowerCaseMapping:0x20E7 - ,simpleTitleCaseMapping:0x20E7 - }, - { code:0x20E8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E8 - ,simpleLowerCaseMapping:0x20E8 - ,simpleTitleCaseMapping:0x20E8 - }, - { code:0x20E9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20E9 - ,simpleLowerCaseMapping:0x20E9 - ,simpleTitleCaseMapping:0x20E9 - }, - { code:0x20EA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20EA - ,simpleLowerCaseMapping:0x20EA - ,simpleTitleCaseMapping:0x20EA - }, - { code:0x20EB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20EB - ,simpleLowerCaseMapping:0x20EB - ,simpleTitleCaseMapping:0x20EB - }, - { code:0x20EC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20EC - ,simpleLowerCaseMapping:0x20EC - ,simpleTitleCaseMapping:0x20EC - }, - { code:0x20ED - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20ED - ,simpleLowerCaseMapping:0x20ED - ,simpleTitleCaseMapping:0x20ED - }, - { code:0x20EE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20EE - ,simpleLowerCaseMapping:0x20EE - ,simpleTitleCaseMapping:0x20EE - }, - { code:0x20EF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x20EF - ,simpleLowerCaseMapping:0x20EF - ,simpleTitleCaseMapping:0x20EF - }, - { code:0x2100 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2100 - ,simpleLowerCaseMapping:0x2100 - ,simpleTitleCaseMapping:0x2100 - }, - { code:0x2101 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2101 - ,simpleLowerCaseMapping:0x2101 - ,simpleTitleCaseMapping:0x2101 - }, - { code:0x2102 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2102 - ,simpleLowerCaseMapping:0x2102 - ,simpleTitleCaseMapping:0x2102 - }, - { code:0x2103 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2103 - ,simpleLowerCaseMapping:0x2103 - ,simpleTitleCaseMapping:0x2103 - }, - { code:0x2104 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2104 - ,simpleLowerCaseMapping:0x2104 - ,simpleTitleCaseMapping:0x2104 - }, - { code:0x2105 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2105 - ,simpleLowerCaseMapping:0x2105 - ,simpleTitleCaseMapping:0x2105 - }, - { code:0x2106 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2106 - ,simpleLowerCaseMapping:0x2106 - ,simpleTitleCaseMapping:0x2106 - }, - { code:0x2107 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2107 - ,simpleLowerCaseMapping:0x2107 - ,simpleTitleCaseMapping:0x2107 - }, - { code:0x2108 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2108 - ,simpleLowerCaseMapping:0x2108 - ,simpleTitleCaseMapping:0x2108 - }, - { code:0x2109 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2109 - ,simpleLowerCaseMapping:0x2109 - ,simpleTitleCaseMapping:0x2109 - }, - { code:0x210A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x210A - ,simpleLowerCaseMapping:0x210A - ,simpleTitleCaseMapping:0x210A - }, - { code:0x210B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x210B - ,simpleLowerCaseMapping:0x210B - ,simpleTitleCaseMapping:0x210B - }, - { code:0x210C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x210C - ,simpleLowerCaseMapping:0x210C - ,simpleTitleCaseMapping:0x210C - }, - { code:0x210D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x210D - ,simpleLowerCaseMapping:0x210D - ,simpleTitleCaseMapping:0x210D - }, - { code:0x210E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x210E - ,simpleLowerCaseMapping:0x210E - ,simpleTitleCaseMapping:0x210E - }, - { code:0x210F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x210F - ,simpleLowerCaseMapping:0x210F - ,simpleTitleCaseMapping:0x210F - }, - { code:0x2110 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2110 - ,simpleLowerCaseMapping:0x2110 - ,simpleTitleCaseMapping:0x2110 - }, - { code:0x2111 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2111 - ,simpleLowerCaseMapping:0x2111 - ,simpleTitleCaseMapping:0x2111 - }, - { code:0x2112 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2112 - ,simpleLowerCaseMapping:0x2112 - ,simpleTitleCaseMapping:0x2112 - }, - { code:0x2113 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2113 - ,simpleLowerCaseMapping:0x2113 - ,simpleTitleCaseMapping:0x2113 - }, - { code:0x2114 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2114 - ,simpleLowerCaseMapping:0x2114 - ,simpleTitleCaseMapping:0x2114 - }, - { code:0x2115 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2115 - ,simpleLowerCaseMapping:0x2115 - ,simpleTitleCaseMapping:0x2115 - }, - { code:0x2116 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2116 - ,simpleLowerCaseMapping:0x2116 - ,simpleTitleCaseMapping:0x2116 - }, - { code:0x2117 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2117 - ,simpleLowerCaseMapping:0x2117 - ,simpleTitleCaseMapping:0x2117 - }, - { code:0x2118 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2118 - ,simpleLowerCaseMapping:0x2118 - ,simpleTitleCaseMapping:0x2118 - }, - { code:0x2119 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2119 - ,simpleLowerCaseMapping:0x2119 - ,simpleTitleCaseMapping:0x2119 - }, - { code:0x211A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x211A - ,simpleLowerCaseMapping:0x211A - ,simpleTitleCaseMapping:0x211A - }, - { code:0x211B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x211B - ,simpleLowerCaseMapping:0x211B - ,simpleTitleCaseMapping:0x211B - }, - { code:0x211C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x211C - ,simpleLowerCaseMapping:0x211C - ,simpleTitleCaseMapping:0x211C - }, - { code:0x211D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x211D - ,simpleLowerCaseMapping:0x211D - ,simpleTitleCaseMapping:0x211D - }, - { code:0x211E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x211E - ,simpleLowerCaseMapping:0x211E - ,simpleTitleCaseMapping:0x211E - }, - { code:0x211F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x211F - ,simpleLowerCaseMapping:0x211F - ,simpleTitleCaseMapping:0x211F - }, - { code:0x2120 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2120 - ,simpleLowerCaseMapping:0x2120 - ,simpleTitleCaseMapping:0x2120 - }, - { code:0x2121 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2121 - ,simpleLowerCaseMapping:0x2121 - ,simpleTitleCaseMapping:0x2121 - }, - { code:0x2122 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2122 - ,simpleLowerCaseMapping:0x2122 - ,simpleTitleCaseMapping:0x2122 - }, - { code:0x2123 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2123 - ,simpleLowerCaseMapping:0x2123 - ,simpleTitleCaseMapping:0x2123 - }, - { code:0x2124 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2124 - ,simpleLowerCaseMapping:0x2124 - ,simpleTitleCaseMapping:0x2124 - }, - { code:0x2125 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2125 - ,simpleLowerCaseMapping:0x2125 - ,simpleTitleCaseMapping:0x2125 - }, - { code:0x2126 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2126 - ,simpleLowerCaseMapping:0x03C9 - ,simpleTitleCaseMapping:0x2126 - }, - { code:0x2127 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2127 - ,simpleLowerCaseMapping:0x2127 - ,simpleTitleCaseMapping:0x2127 - }, - { code:0x2128 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2128 - ,simpleLowerCaseMapping:0x2128 - ,simpleTitleCaseMapping:0x2128 - }, - { code:0x2129 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2129 - ,simpleLowerCaseMapping:0x2129 - ,simpleTitleCaseMapping:0x2129 - }, - { code:0x212A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x212A - ,simpleLowerCaseMapping:0x006B - ,simpleTitleCaseMapping:0x212A - }, - { code:0x212B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x212B - ,simpleLowerCaseMapping:0x00E5 - ,simpleTitleCaseMapping:0x212B - }, - { code:0x212C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x212C - ,simpleLowerCaseMapping:0x212C - ,simpleTitleCaseMapping:0x212C - }, - { code:0x212D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x212D - ,simpleLowerCaseMapping:0x212D - ,simpleTitleCaseMapping:0x212D - }, - { code:0x212E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x212E - ,simpleLowerCaseMapping:0x212E - ,simpleTitleCaseMapping:0x212E - }, - { code:0x212F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x212F - ,simpleLowerCaseMapping:0x212F - ,simpleTitleCaseMapping:0x212F - }, - { code:0x2130 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2130 - ,simpleLowerCaseMapping:0x2130 - ,simpleTitleCaseMapping:0x2130 - }, - { code:0x2131 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2131 - ,simpleLowerCaseMapping:0x2131 - ,simpleTitleCaseMapping:0x2131 - }, - { code:0x2132 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2132 - ,simpleLowerCaseMapping:0x214E - ,simpleTitleCaseMapping:0x2132 - }, - { code:0x2133 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2133 - ,simpleLowerCaseMapping:0x2133 - ,simpleTitleCaseMapping:0x2133 - }, - { code:0x2134 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2134 - ,simpleLowerCaseMapping:0x2134 - ,simpleTitleCaseMapping:0x2134 - }, - { code:0x2135 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2135 - ,simpleLowerCaseMapping:0x2135 - ,simpleTitleCaseMapping:0x2135 - }, - { code:0x2136 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2136 - ,simpleLowerCaseMapping:0x2136 - ,simpleTitleCaseMapping:0x2136 - }, - { code:0x2137 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2137 - ,simpleLowerCaseMapping:0x2137 - ,simpleTitleCaseMapping:0x2137 - }, - { code:0x2138 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2138 - ,simpleLowerCaseMapping:0x2138 - ,simpleTitleCaseMapping:0x2138 - }, - { code:0x2139 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2139 - ,simpleLowerCaseMapping:0x2139 - ,simpleTitleCaseMapping:0x2139 - }, - { code:0x213A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x213A - ,simpleLowerCaseMapping:0x213A - ,simpleTitleCaseMapping:0x213A - }, - { code:0x213B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x213B - ,simpleLowerCaseMapping:0x213B - ,simpleTitleCaseMapping:0x213B - }, - { code:0x213C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x213C - ,simpleLowerCaseMapping:0x213C - ,simpleTitleCaseMapping:0x213C - }, - { code:0x213D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x213D - ,simpleLowerCaseMapping:0x213D - ,simpleTitleCaseMapping:0x213D - }, - { code:0x213E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x213E - ,simpleLowerCaseMapping:0x213E - ,simpleTitleCaseMapping:0x213E - }, - { code:0x213F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x213F - ,simpleLowerCaseMapping:0x213F - ,simpleTitleCaseMapping:0x213F - }, - { code:0x2140 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2140 - ,simpleLowerCaseMapping:0x2140 - ,simpleTitleCaseMapping:0x2140 - }, - { code:0x2141 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2141 - ,simpleLowerCaseMapping:0x2141 - ,simpleTitleCaseMapping:0x2141 - }, - { code:0x2142 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2142 - ,simpleLowerCaseMapping:0x2142 - ,simpleTitleCaseMapping:0x2142 - }, - { code:0x2143 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2143 - ,simpleLowerCaseMapping:0x2143 - ,simpleTitleCaseMapping:0x2143 - }, - { code:0x2144 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2144 - ,simpleLowerCaseMapping:0x2144 - ,simpleTitleCaseMapping:0x2144 - }, - { code:0x2145 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2145 - ,simpleLowerCaseMapping:0x2145 - ,simpleTitleCaseMapping:0x2145 - }, - { code:0x2146 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2146 - ,simpleLowerCaseMapping:0x2146 - ,simpleTitleCaseMapping:0x2146 - }, - { code:0x2147 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2147 - ,simpleLowerCaseMapping:0x2147 - ,simpleTitleCaseMapping:0x2147 - }, - { code:0x2148 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2148 - ,simpleLowerCaseMapping:0x2148 - ,simpleTitleCaseMapping:0x2148 - }, - { code:0x2149 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2149 - ,simpleLowerCaseMapping:0x2149 - ,simpleTitleCaseMapping:0x2149 - }, - { code:0x214A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x214A - ,simpleLowerCaseMapping:0x214A - ,simpleTitleCaseMapping:0x214A - }, - { code:0x214B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x214B - ,simpleLowerCaseMapping:0x214B - ,simpleTitleCaseMapping:0x214B - }, - { code:0x214C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x214C - ,simpleLowerCaseMapping:0x214C - ,simpleTitleCaseMapping:0x214C - }, - { code:0x214D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x214D - ,simpleLowerCaseMapping:0x214D - ,simpleTitleCaseMapping:0x214D - }, - { code:0x214E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2132 - ,simpleLowerCaseMapping:0x214E - ,simpleTitleCaseMapping:0x2132 - }, - { code:0x2153 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2153 - ,simpleLowerCaseMapping:0x2153 - ,simpleTitleCaseMapping:0x2153 - }, - { code:0x2154 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2154 - ,simpleLowerCaseMapping:0x2154 - ,simpleTitleCaseMapping:0x2154 - }, - { code:0x2155 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2155 - ,simpleLowerCaseMapping:0x2155 - ,simpleTitleCaseMapping:0x2155 - }, - { code:0x2156 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2156 - ,simpleLowerCaseMapping:0x2156 - ,simpleTitleCaseMapping:0x2156 - }, - { code:0x2157 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2157 - ,simpleLowerCaseMapping:0x2157 - ,simpleTitleCaseMapping:0x2157 - }, - { code:0x2158 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2158 - ,simpleLowerCaseMapping:0x2158 - ,simpleTitleCaseMapping:0x2158 - }, - { code:0x2159 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2159 - ,simpleLowerCaseMapping:0x2159 - ,simpleTitleCaseMapping:0x2159 - }, - { code:0x215A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215A - ,simpleLowerCaseMapping:0x215A - ,simpleTitleCaseMapping:0x215A - }, - { code:0x215B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215B - ,simpleLowerCaseMapping:0x215B - ,simpleTitleCaseMapping:0x215B - }, - { code:0x215C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215C - ,simpleLowerCaseMapping:0x215C - ,simpleTitleCaseMapping:0x215C - }, - { code:0x215D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215D - ,simpleLowerCaseMapping:0x215D - ,simpleTitleCaseMapping:0x215D - }, - { code:0x215E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215E - ,simpleLowerCaseMapping:0x215E - ,simpleTitleCaseMapping:0x215E - }, - { code:0x215F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x215F - ,simpleLowerCaseMapping:0x215F - ,simpleTitleCaseMapping:0x215F - }, - { code:0x2160 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2160 - ,simpleLowerCaseMapping:0x2170 - ,simpleTitleCaseMapping:0x2160 - }, - { code:0x2161 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2161 - ,simpleLowerCaseMapping:0x2171 - ,simpleTitleCaseMapping:0x2161 - }, - { code:0x2162 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2162 - ,simpleLowerCaseMapping:0x2172 - ,simpleTitleCaseMapping:0x2162 - }, - { code:0x2163 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2163 - ,simpleLowerCaseMapping:0x2173 - ,simpleTitleCaseMapping:0x2163 - }, - { code:0x2164 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2164 - ,simpleLowerCaseMapping:0x2174 - ,simpleTitleCaseMapping:0x2164 - }, - { code:0x2165 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2165 - ,simpleLowerCaseMapping:0x2175 - ,simpleTitleCaseMapping:0x2165 - }, - { code:0x2166 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2166 - ,simpleLowerCaseMapping:0x2176 - ,simpleTitleCaseMapping:0x2166 - }, - { code:0x2167 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2167 - ,simpleLowerCaseMapping:0x2177 - ,simpleTitleCaseMapping:0x2167 - }, - { code:0x2168 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2168 - ,simpleLowerCaseMapping:0x2178 - ,simpleTitleCaseMapping:0x2168 - }, - { code:0x2169 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2169 - ,simpleLowerCaseMapping:0x2179 - ,simpleTitleCaseMapping:0x2169 - }, - { code:0x216A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216A - ,simpleLowerCaseMapping:0x217A - ,simpleTitleCaseMapping:0x216A - }, - { code:0x216B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216B - ,simpleLowerCaseMapping:0x217B - ,simpleTitleCaseMapping:0x216B - }, - { code:0x216C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216C - ,simpleLowerCaseMapping:0x217C - ,simpleTitleCaseMapping:0x216C - }, - { code:0x216D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216D - ,simpleLowerCaseMapping:0x217D - ,simpleTitleCaseMapping:0x216D - }, - { code:0x216E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216E - ,simpleLowerCaseMapping:0x217E - ,simpleTitleCaseMapping:0x216E - }, - { code:0x216F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216F - ,simpleLowerCaseMapping:0x217F - ,simpleTitleCaseMapping:0x216F - }, - { code:0x2170 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2160 - ,simpleLowerCaseMapping:0x2170 - ,simpleTitleCaseMapping:0x2160 - }, - { code:0x2171 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2161 - ,simpleLowerCaseMapping:0x2171 - ,simpleTitleCaseMapping:0x2161 - }, - { code:0x2172 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2162 - ,simpleLowerCaseMapping:0x2172 - ,simpleTitleCaseMapping:0x2162 - }, - { code:0x2173 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2163 - ,simpleLowerCaseMapping:0x2173 - ,simpleTitleCaseMapping:0x2163 - }, - { code:0x2174 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2164 - ,simpleLowerCaseMapping:0x2174 - ,simpleTitleCaseMapping:0x2164 - }, - { code:0x2175 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2165 - ,simpleLowerCaseMapping:0x2175 - ,simpleTitleCaseMapping:0x2165 - }, - { code:0x2176 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2166 - ,simpleLowerCaseMapping:0x2176 - ,simpleTitleCaseMapping:0x2166 - }, - { code:0x2177 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2167 - ,simpleLowerCaseMapping:0x2177 - ,simpleTitleCaseMapping:0x2167 - }, - { code:0x2178 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2168 - ,simpleLowerCaseMapping:0x2178 - ,simpleTitleCaseMapping:0x2168 - }, - { code:0x2179 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2169 - ,simpleLowerCaseMapping:0x2179 - ,simpleTitleCaseMapping:0x2169 - }, - { code:0x217A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216A - ,simpleLowerCaseMapping:0x217A - ,simpleTitleCaseMapping:0x216A - }, - { code:0x217B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216B - ,simpleLowerCaseMapping:0x217B - ,simpleTitleCaseMapping:0x216B - }, - { code:0x217C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216C - ,simpleLowerCaseMapping:0x217C - ,simpleTitleCaseMapping:0x216C - }, - { code:0x217D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216D - ,simpleLowerCaseMapping:0x217D - ,simpleTitleCaseMapping:0x216D - }, - { code:0x217E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216E - ,simpleLowerCaseMapping:0x217E - ,simpleTitleCaseMapping:0x216E - }, - { code:0x217F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x216F - ,simpleLowerCaseMapping:0x217F - ,simpleTitleCaseMapping:0x216F - }, - { code:0x2180 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2180 - ,simpleLowerCaseMapping:0x2180 - ,simpleTitleCaseMapping:0x2180 - }, - { code:0x2181 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2181 - ,simpleLowerCaseMapping:0x2181 - ,simpleTitleCaseMapping:0x2181 - }, - { code:0x2182 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x2182 - ,simpleLowerCaseMapping:0x2182 - ,simpleTitleCaseMapping:0x2182 - }, - { code:0x2183 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2183 - ,simpleLowerCaseMapping:0x2184 - ,simpleTitleCaseMapping:0x2183 - }, - { code:0x2184 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2183 - ,simpleLowerCaseMapping:0x2184 - ,simpleTitleCaseMapping:0x2183 - }, - { code:0x2190 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2190 - ,simpleLowerCaseMapping:0x2190 - ,simpleTitleCaseMapping:0x2190 - }, - { code:0x2191 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2191 - ,simpleLowerCaseMapping:0x2191 - ,simpleTitleCaseMapping:0x2191 - }, - { code:0x2192 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2192 - ,simpleLowerCaseMapping:0x2192 - ,simpleTitleCaseMapping:0x2192 - }, - { code:0x2193 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2193 - ,simpleLowerCaseMapping:0x2193 - ,simpleTitleCaseMapping:0x2193 - }, - { code:0x2194 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2194 - ,simpleLowerCaseMapping:0x2194 - ,simpleTitleCaseMapping:0x2194 - }, - { code:0x2195 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2195 - ,simpleLowerCaseMapping:0x2195 - ,simpleTitleCaseMapping:0x2195 - }, - { code:0x2196 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2196 - ,simpleLowerCaseMapping:0x2196 - ,simpleTitleCaseMapping:0x2196 - }, - { code:0x2197 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2197 - ,simpleLowerCaseMapping:0x2197 - ,simpleTitleCaseMapping:0x2197 - }, - { code:0x2198 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2198 - ,simpleLowerCaseMapping:0x2198 - ,simpleTitleCaseMapping:0x2198 - }, - { code:0x2199 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2199 - ,simpleLowerCaseMapping:0x2199 - ,simpleTitleCaseMapping:0x2199 - }, - { code:0x219A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x219A - ,simpleLowerCaseMapping:0x219A - ,simpleTitleCaseMapping:0x219A - }, - { code:0x219B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x219B - ,simpleLowerCaseMapping:0x219B - ,simpleTitleCaseMapping:0x219B - }, - { code:0x219C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x219C - ,simpleLowerCaseMapping:0x219C - ,simpleTitleCaseMapping:0x219C - }, - { code:0x219D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x219D - ,simpleLowerCaseMapping:0x219D - ,simpleTitleCaseMapping:0x219D - }, - { code:0x219E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x219E - ,simpleLowerCaseMapping:0x219E - ,simpleTitleCaseMapping:0x219E - }, - { code:0x219F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x219F - ,simpleLowerCaseMapping:0x219F - ,simpleTitleCaseMapping:0x219F - }, - { code:0x21A0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21A0 - ,simpleLowerCaseMapping:0x21A0 - ,simpleTitleCaseMapping:0x21A0 - }, - { code:0x21A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A1 - ,simpleLowerCaseMapping:0x21A1 - ,simpleTitleCaseMapping:0x21A1 - }, - { code:0x21A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A2 - ,simpleLowerCaseMapping:0x21A2 - ,simpleTitleCaseMapping:0x21A2 - }, - { code:0x21A3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21A3 - ,simpleLowerCaseMapping:0x21A3 - ,simpleTitleCaseMapping:0x21A3 - }, - { code:0x21A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A4 - ,simpleLowerCaseMapping:0x21A4 - ,simpleTitleCaseMapping:0x21A4 - }, - { code:0x21A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A5 - ,simpleLowerCaseMapping:0x21A5 - ,simpleTitleCaseMapping:0x21A5 - }, - { code:0x21A6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21A6 - ,simpleLowerCaseMapping:0x21A6 - ,simpleTitleCaseMapping:0x21A6 - }, - { code:0x21A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A7 - ,simpleLowerCaseMapping:0x21A7 - ,simpleTitleCaseMapping:0x21A7 - }, - { code:0x21A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A8 - ,simpleLowerCaseMapping:0x21A8 - ,simpleTitleCaseMapping:0x21A8 - }, - { code:0x21A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21A9 - ,simpleLowerCaseMapping:0x21A9 - ,simpleTitleCaseMapping:0x21A9 - }, - { code:0x21AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21AA - ,simpleLowerCaseMapping:0x21AA - ,simpleTitleCaseMapping:0x21AA - }, - { code:0x21AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21AB - ,simpleLowerCaseMapping:0x21AB - ,simpleTitleCaseMapping:0x21AB - }, - { code:0x21AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21AC - ,simpleLowerCaseMapping:0x21AC - ,simpleTitleCaseMapping:0x21AC - }, - { code:0x21AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21AD - ,simpleLowerCaseMapping:0x21AD - ,simpleTitleCaseMapping:0x21AD - }, - { code:0x21AE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21AE - ,simpleLowerCaseMapping:0x21AE - ,simpleTitleCaseMapping:0x21AE - }, - { code:0x21AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21AF - ,simpleLowerCaseMapping:0x21AF - ,simpleTitleCaseMapping:0x21AF - }, - { code:0x21B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B0 - ,simpleLowerCaseMapping:0x21B0 - ,simpleTitleCaseMapping:0x21B0 - }, - { code:0x21B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B1 - ,simpleLowerCaseMapping:0x21B1 - ,simpleTitleCaseMapping:0x21B1 - }, - { code:0x21B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B2 - ,simpleLowerCaseMapping:0x21B2 - ,simpleTitleCaseMapping:0x21B2 - }, - { code:0x21B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B3 - ,simpleLowerCaseMapping:0x21B3 - ,simpleTitleCaseMapping:0x21B3 - }, - { code:0x21B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B4 - ,simpleLowerCaseMapping:0x21B4 - ,simpleTitleCaseMapping:0x21B4 - }, - { code:0x21B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B5 - ,simpleLowerCaseMapping:0x21B5 - ,simpleTitleCaseMapping:0x21B5 - }, - { code:0x21B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B6 - ,simpleLowerCaseMapping:0x21B6 - ,simpleTitleCaseMapping:0x21B6 - }, - { code:0x21B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B7 - ,simpleLowerCaseMapping:0x21B7 - ,simpleTitleCaseMapping:0x21B7 - }, - { code:0x21B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B8 - ,simpleLowerCaseMapping:0x21B8 - ,simpleTitleCaseMapping:0x21B8 - }, - { code:0x21B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21B9 - ,simpleLowerCaseMapping:0x21B9 - ,simpleTitleCaseMapping:0x21B9 - }, - { code:0x21BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BA - ,simpleLowerCaseMapping:0x21BA - ,simpleTitleCaseMapping:0x21BA - }, - { code:0x21BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BB - ,simpleLowerCaseMapping:0x21BB - ,simpleTitleCaseMapping:0x21BB - }, - { code:0x21BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BC - ,simpleLowerCaseMapping:0x21BC - ,simpleTitleCaseMapping:0x21BC - }, - { code:0x21BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BD - ,simpleLowerCaseMapping:0x21BD - ,simpleTitleCaseMapping:0x21BD - }, - { code:0x21BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BE - ,simpleLowerCaseMapping:0x21BE - ,simpleTitleCaseMapping:0x21BE - }, - { code:0x21BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21BF - ,simpleLowerCaseMapping:0x21BF - ,simpleTitleCaseMapping:0x21BF - }, - { code:0x21C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C0 - ,simpleLowerCaseMapping:0x21C0 - ,simpleTitleCaseMapping:0x21C0 - }, - { code:0x21C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C1 - ,simpleLowerCaseMapping:0x21C1 - ,simpleTitleCaseMapping:0x21C1 - }, - { code:0x21C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C2 - ,simpleLowerCaseMapping:0x21C2 - ,simpleTitleCaseMapping:0x21C2 - }, - { code:0x21C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C3 - ,simpleLowerCaseMapping:0x21C3 - ,simpleTitleCaseMapping:0x21C3 - }, - { code:0x21C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C4 - ,simpleLowerCaseMapping:0x21C4 - ,simpleTitleCaseMapping:0x21C4 - }, - { code:0x21C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C5 - ,simpleLowerCaseMapping:0x21C5 - ,simpleTitleCaseMapping:0x21C5 - }, - { code:0x21C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C6 - ,simpleLowerCaseMapping:0x21C6 - ,simpleTitleCaseMapping:0x21C6 - }, - { code:0x21C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C7 - ,simpleLowerCaseMapping:0x21C7 - ,simpleTitleCaseMapping:0x21C7 - }, - { code:0x21C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C8 - ,simpleLowerCaseMapping:0x21C8 - ,simpleTitleCaseMapping:0x21C8 - }, - { code:0x21C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21C9 - ,simpleLowerCaseMapping:0x21C9 - ,simpleTitleCaseMapping:0x21C9 - }, - { code:0x21CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21CA - ,simpleLowerCaseMapping:0x21CA - ,simpleTitleCaseMapping:0x21CA - }, - { code:0x21CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21CB - ,simpleLowerCaseMapping:0x21CB - ,simpleTitleCaseMapping:0x21CB - }, - { code:0x21CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21CC - ,simpleLowerCaseMapping:0x21CC - ,simpleTitleCaseMapping:0x21CC - }, - { code:0x21CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21CD - ,simpleLowerCaseMapping:0x21CD - ,simpleTitleCaseMapping:0x21CD - }, - { code:0x21CE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21CE - ,simpleLowerCaseMapping:0x21CE - ,simpleTitleCaseMapping:0x21CE - }, - { code:0x21CF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21CF - ,simpleLowerCaseMapping:0x21CF - ,simpleTitleCaseMapping:0x21CF - }, - { code:0x21D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D0 - ,simpleLowerCaseMapping:0x21D0 - ,simpleTitleCaseMapping:0x21D0 - }, - { code:0x21D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D1 - ,simpleLowerCaseMapping:0x21D1 - ,simpleTitleCaseMapping:0x21D1 - }, - { code:0x21D2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21D2 - ,simpleLowerCaseMapping:0x21D2 - ,simpleTitleCaseMapping:0x21D2 - }, - { code:0x21D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D3 - ,simpleLowerCaseMapping:0x21D3 - ,simpleTitleCaseMapping:0x21D3 - }, - { code:0x21D4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21D4 - ,simpleLowerCaseMapping:0x21D4 - ,simpleTitleCaseMapping:0x21D4 - }, - { code:0x21D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D5 - ,simpleLowerCaseMapping:0x21D5 - ,simpleTitleCaseMapping:0x21D5 - }, - { code:0x21D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D6 - ,simpleLowerCaseMapping:0x21D6 - ,simpleTitleCaseMapping:0x21D6 - }, - { code:0x21D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D7 - ,simpleLowerCaseMapping:0x21D7 - ,simpleTitleCaseMapping:0x21D7 - }, - { code:0x21D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D8 - ,simpleLowerCaseMapping:0x21D8 - ,simpleTitleCaseMapping:0x21D8 - }, - { code:0x21D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21D9 - ,simpleLowerCaseMapping:0x21D9 - ,simpleTitleCaseMapping:0x21D9 - }, - { code:0x21DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DA - ,simpleLowerCaseMapping:0x21DA - ,simpleTitleCaseMapping:0x21DA - }, - { code:0x21DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DB - ,simpleLowerCaseMapping:0x21DB - ,simpleTitleCaseMapping:0x21DB - }, - { code:0x21DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DC - ,simpleLowerCaseMapping:0x21DC - ,simpleTitleCaseMapping:0x21DC - }, - { code:0x21DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DD - ,simpleLowerCaseMapping:0x21DD - ,simpleTitleCaseMapping:0x21DD - }, - { code:0x21DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DE - ,simpleLowerCaseMapping:0x21DE - ,simpleTitleCaseMapping:0x21DE - }, - { code:0x21DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21DF - ,simpleLowerCaseMapping:0x21DF - ,simpleTitleCaseMapping:0x21DF - }, - { code:0x21E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E0 - ,simpleLowerCaseMapping:0x21E0 - ,simpleTitleCaseMapping:0x21E0 - }, - { code:0x21E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E1 - ,simpleLowerCaseMapping:0x21E1 - ,simpleTitleCaseMapping:0x21E1 - }, - { code:0x21E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E2 - ,simpleLowerCaseMapping:0x21E2 - ,simpleTitleCaseMapping:0x21E2 - }, - { code:0x21E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E3 - ,simpleLowerCaseMapping:0x21E3 - ,simpleTitleCaseMapping:0x21E3 - }, - { code:0x21E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E4 - ,simpleLowerCaseMapping:0x21E4 - ,simpleTitleCaseMapping:0x21E4 - }, - { code:0x21E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E5 - ,simpleLowerCaseMapping:0x21E5 - ,simpleTitleCaseMapping:0x21E5 - }, - { code:0x21E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E6 - ,simpleLowerCaseMapping:0x21E6 - ,simpleTitleCaseMapping:0x21E6 - }, - { code:0x21E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E7 - ,simpleLowerCaseMapping:0x21E7 - ,simpleTitleCaseMapping:0x21E7 - }, - { code:0x21E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E8 - ,simpleLowerCaseMapping:0x21E8 - ,simpleTitleCaseMapping:0x21E8 - }, - { code:0x21E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21E9 - ,simpleLowerCaseMapping:0x21E9 - ,simpleTitleCaseMapping:0x21E9 - }, - { code:0x21EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21EA - ,simpleLowerCaseMapping:0x21EA - ,simpleTitleCaseMapping:0x21EA - }, - { code:0x21EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21EB - ,simpleLowerCaseMapping:0x21EB - ,simpleTitleCaseMapping:0x21EB - }, - { code:0x21EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21EC - ,simpleLowerCaseMapping:0x21EC - ,simpleTitleCaseMapping:0x21EC - }, - { code:0x21ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21ED - ,simpleLowerCaseMapping:0x21ED - ,simpleTitleCaseMapping:0x21ED - }, - { code:0x21EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21EE - ,simpleLowerCaseMapping:0x21EE - ,simpleTitleCaseMapping:0x21EE - }, - { code:0x21EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21EF - ,simpleLowerCaseMapping:0x21EF - ,simpleTitleCaseMapping:0x21EF - }, - { code:0x21F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21F0 - ,simpleLowerCaseMapping:0x21F0 - ,simpleTitleCaseMapping:0x21F0 - }, - { code:0x21F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21F1 - ,simpleLowerCaseMapping:0x21F1 - ,simpleTitleCaseMapping:0x21F1 - }, - { code:0x21F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21F2 - ,simpleLowerCaseMapping:0x21F2 - ,simpleTitleCaseMapping:0x21F2 - }, - { code:0x21F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x21F3 - ,simpleLowerCaseMapping:0x21F3 - ,simpleTitleCaseMapping:0x21F3 - }, - { code:0x21F4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F4 - ,simpleLowerCaseMapping:0x21F4 - ,simpleTitleCaseMapping:0x21F4 - }, - { code:0x21F5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F5 - ,simpleLowerCaseMapping:0x21F5 - ,simpleTitleCaseMapping:0x21F5 - }, - { code:0x21F6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F6 - ,simpleLowerCaseMapping:0x21F6 - ,simpleTitleCaseMapping:0x21F6 - }, - { code:0x21F7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F7 - ,simpleLowerCaseMapping:0x21F7 - ,simpleTitleCaseMapping:0x21F7 - }, - { code:0x21F8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F8 - ,simpleLowerCaseMapping:0x21F8 - ,simpleTitleCaseMapping:0x21F8 - }, - { code:0x21F9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21F9 - ,simpleLowerCaseMapping:0x21F9 - ,simpleTitleCaseMapping:0x21F9 - }, - { code:0x21FA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FA - ,simpleLowerCaseMapping:0x21FA - ,simpleTitleCaseMapping:0x21FA - }, - { code:0x21FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FB - ,simpleLowerCaseMapping:0x21FB - ,simpleTitleCaseMapping:0x21FB - }, - { code:0x21FC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FC - ,simpleLowerCaseMapping:0x21FC - ,simpleTitleCaseMapping:0x21FC - }, - { code:0x21FD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FD - ,simpleLowerCaseMapping:0x21FD - ,simpleTitleCaseMapping:0x21FD - }, - { code:0x21FE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FE - ,simpleLowerCaseMapping:0x21FE - ,simpleTitleCaseMapping:0x21FE - }, - { code:0x21FF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x21FF - ,simpleLowerCaseMapping:0x21FF - ,simpleTitleCaseMapping:0x21FF - }, - { code:0x2200 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2200 - ,simpleLowerCaseMapping:0x2200 - ,simpleTitleCaseMapping:0x2200 - }, - { code:0x2201 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2201 - ,simpleLowerCaseMapping:0x2201 - ,simpleTitleCaseMapping:0x2201 - }, - { code:0x2202 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2202 - ,simpleLowerCaseMapping:0x2202 - ,simpleTitleCaseMapping:0x2202 - }, - { code:0x2203 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2203 - ,simpleLowerCaseMapping:0x2203 - ,simpleTitleCaseMapping:0x2203 - }, - { code:0x2204 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2204 - ,simpleLowerCaseMapping:0x2204 - ,simpleTitleCaseMapping:0x2204 - }, - { code:0x2205 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2205 - ,simpleLowerCaseMapping:0x2205 - ,simpleTitleCaseMapping:0x2205 - }, - { code:0x2206 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2206 - ,simpleLowerCaseMapping:0x2206 - ,simpleTitleCaseMapping:0x2206 - }, - { code:0x2207 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2207 - ,simpleLowerCaseMapping:0x2207 - ,simpleTitleCaseMapping:0x2207 - }, - { code:0x2208 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2208 - ,simpleLowerCaseMapping:0x2208 - ,simpleTitleCaseMapping:0x2208 - }, - { code:0x2209 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2209 - ,simpleLowerCaseMapping:0x2209 - ,simpleTitleCaseMapping:0x2209 - }, - { code:0x220A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220A - ,simpleLowerCaseMapping:0x220A - ,simpleTitleCaseMapping:0x220A - }, - { code:0x220B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220B - ,simpleLowerCaseMapping:0x220B - ,simpleTitleCaseMapping:0x220B - }, - { code:0x220C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220C - ,simpleLowerCaseMapping:0x220C - ,simpleTitleCaseMapping:0x220C - }, - { code:0x220D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220D - ,simpleLowerCaseMapping:0x220D - ,simpleTitleCaseMapping:0x220D - }, - { code:0x220E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220E - ,simpleLowerCaseMapping:0x220E - ,simpleTitleCaseMapping:0x220E - }, - { code:0x220F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x220F - ,simpleLowerCaseMapping:0x220F - ,simpleTitleCaseMapping:0x220F - }, - { code:0x2210 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2210 - ,simpleLowerCaseMapping:0x2210 - ,simpleTitleCaseMapping:0x2210 - }, - { code:0x2211 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2211 - ,simpleLowerCaseMapping:0x2211 - ,simpleTitleCaseMapping:0x2211 - }, - { code:0x2212 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2212 - ,simpleLowerCaseMapping:0x2212 - ,simpleTitleCaseMapping:0x2212 - }, - { code:0x2213 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2213 - ,simpleLowerCaseMapping:0x2213 - ,simpleTitleCaseMapping:0x2213 - }, - { code:0x2214 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2214 - ,simpleLowerCaseMapping:0x2214 - ,simpleTitleCaseMapping:0x2214 - }, - { code:0x2215 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2215 - ,simpleLowerCaseMapping:0x2215 - ,simpleTitleCaseMapping:0x2215 - }, - { code:0x2216 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2216 - ,simpleLowerCaseMapping:0x2216 - ,simpleTitleCaseMapping:0x2216 - }, - { code:0x2217 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2217 - ,simpleLowerCaseMapping:0x2217 - ,simpleTitleCaseMapping:0x2217 - }, - { code:0x2218 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2218 - ,simpleLowerCaseMapping:0x2218 - ,simpleTitleCaseMapping:0x2218 - }, - { code:0x2219 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2219 - ,simpleLowerCaseMapping:0x2219 - ,simpleTitleCaseMapping:0x2219 - }, - { code:0x221A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221A - ,simpleLowerCaseMapping:0x221A - ,simpleTitleCaseMapping:0x221A - }, - { code:0x221B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221B - ,simpleLowerCaseMapping:0x221B - ,simpleTitleCaseMapping:0x221B - }, - { code:0x221C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221C - ,simpleLowerCaseMapping:0x221C - ,simpleTitleCaseMapping:0x221C - }, - { code:0x221D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221D - ,simpleLowerCaseMapping:0x221D - ,simpleTitleCaseMapping:0x221D - }, - { code:0x221E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221E - ,simpleLowerCaseMapping:0x221E - ,simpleTitleCaseMapping:0x221E - }, - { code:0x221F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x221F - ,simpleLowerCaseMapping:0x221F - ,simpleTitleCaseMapping:0x221F - }, - { code:0x2220 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2220 - ,simpleLowerCaseMapping:0x2220 - ,simpleTitleCaseMapping:0x2220 - }, - { code:0x2221 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2221 - ,simpleLowerCaseMapping:0x2221 - ,simpleTitleCaseMapping:0x2221 - }, - { code:0x2222 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2222 - ,simpleLowerCaseMapping:0x2222 - ,simpleTitleCaseMapping:0x2222 - }, - { code:0x2223 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2223 - ,simpleLowerCaseMapping:0x2223 - ,simpleTitleCaseMapping:0x2223 - }, - { code:0x2224 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2224 - ,simpleLowerCaseMapping:0x2224 - ,simpleTitleCaseMapping:0x2224 - }, - { code:0x2225 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2225 - ,simpleLowerCaseMapping:0x2225 - ,simpleTitleCaseMapping:0x2225 - }, - { code:0x2226 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2226 - ,simpleLowerCaseMapping:0x2226 - ,simpleTitleCaseMapping:0x2226 - }, - { code:0x2227 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2227 - ,simpleLowerCaseMapping:0x2227 - ,simpleTitleCaseMapping:0x2227 - }, - { code:0x2228 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2228 - ,simpleLowerCaseMapping:0x2228 - ,simpleTitleCaseMapping:0x2228 - }, - { code:0x2229 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2229 - ,simpleLowerCaseMapping:0x2229 - ,simpleTitleCaseMapping:0x2229 - }, - { code:0x222A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222A - ,simpleLowerCaseMapping:0x222A - ,simpleTitleCaseMapping:0x222A - }, - { code:0x222B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222B - ,simpleLowerCaseMapping:0x222B - ,simpleTitleCaseMapping:0x222B - }, - { code:0x222C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222C - ,simpleLowerCaseMapping:0x222C - ,simpleTitleCaseMapping:0x222C - }, - { code:0x222D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222D - ,simpleLowerCaseMapping:0x222D - ,simpleTitleCaseMapping:0x222D - }, - { code:0x222E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222E - ,simpleLowerCaseMapping:0x222E - ,simpleTitleCaseMapping:0x222E - }, - { code:0x222F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x222F - ,simpleLowerCaseMapping:0x222F - ,simpleTitleCaseMapping:0x222F - }, - { code:0x2230 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2230 - ,simpleLowerCaseMapping:0x2230 - ,simpleTitleCaseMapping:0x2230 - }, - { code:0x2231 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2231 - ,simpleLowerCaseMapping:0x2231 - ,simpleTitleCaseMapping:0x2231 - }, - { code:0x2232 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2232 - ,simpleLowerCaseMapping:0x2232 - ,simpleTitleCaseMapping:0x2232 - }, - { code:0x2233 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2233 - ,simpleLowerCaseMapping:0x2233 - ,simpleTitleCaseMapping:0x2233 - }, - { code:0x2234 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2234 - ,simpleLowerCaseMapping:0x2234 - ,simpleTitleCaseMapping:0x2234 - }, - { code:0x2235 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2235 - ,simpleLowerCaseMapping:0x2235 - ,simpleTitleCaseMapping:0x2235 - }, - { code:0x2236 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2236 - ,simpleLowerCaseMapping:0x2236 - ,simpleTitleCaseMapping:0x2236 - }, - { code:0x2237 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2237 - ,simpleLowerCaseMapping:0x2237 - ,simpleTitleCaseMapping:0x2237 - }, - { code:0x2238 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2238 - ,simpleLowerCaseMapping:0x2238 - ,simpleTitleCaseMapping:0x2238 - }, - { code:0x2239 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2239 - ,simpleLowerCaseMapping:0x2239 - ,simpleTitleCaseMapping:0x2239 - }, - { code:0x223A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223A - ,simpleLowerCaseMapping:0x223A - ,simpleTitleCaseMapping:0x223A - }, - { code:0x223B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223B - ,simpleLowerCaseMapping:0x223B - ,simpleTitleCaseMapping:0x223B - }, - { code:0x223C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223C - ,simpleLowerCaseMapping:0x223C - ,simpleTitleCaseMapping:0x223C - }, - { code:0x223D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223D - ,simpleLowerCaseMapping:0x223D - ,simpleTitleCaseMapping:0x223D - }, - { code:0x223E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223E - ,simpleLowerCaseMapping:0x223E - ,simpleTitleCaseMapping:0x223E - }, - { code:0x223F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x223F - ,simpleLowerCaseMapping:0x223F - ,simpleTitleCaseMapping:0x223F - }, - { code:0x2240 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2240 - ,simpleLowerCaseMapping:0x2240 - ,simpleTitleCaseMapping:0x2240 - }, - { code:0x2241 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2241 - ,simpleLowerCaseMapping:0x2241 - ,simpleTitleCaseMapping:0x2241 - }, - { code:0x2242 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2242 - ,simpleLowerCaseMapping:0x2242 - ,simpleTitleCaseMapping:0x2242 - }, - { code:0x2243 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2243 - ,simpleLowerCaseMapping:0x2243 - ,simpleTitleCaseMapping:0x2243 - }, - { code:0x2244 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2244 - ,simpleLowerCaseMapping:0x2244 - ,simpleTitleCaseMapping:0x2244 - }, - { code:0x2245 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2245 - ,simpleLowerCaseMapping:0x2245 - ,simpleTitleCaseMapping:0x2245 - }, - { code:0x2246 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2246 - ,simpleLowerCaseMapping:0x2246 - ,simpleTitleCaseMapping:0x2246 - }, - { code:0x2247 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2247 - ,simpleLowerCaseMapping:0x2247 - ,simpleTitleCaseMapping:0x2247 - }, - { code:0x2248 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2248 - ,simpleLowerCaseMapping:0x2248 - ,simpleTitleCaseMapping:0x2248 - }, - { code:0x2249 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2249 - ,simpleLowerCaseMapping:0x2249 - ,simpleTitleCaseMapping:0x2249 - }, - { code:0x224A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224A - ,simpleLowerCaseMapping:0x224A - ,simpleTitleCaseMapping:0x224A - }, - { code:0x224B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224B - ,simpleLowerCaseMapping:0x224B - ,simpleTitleCaseMapping:0x224B - }, - { code:0x224C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224C - ,simpleLowerCaseMapping:0x224C - ,simpleTitleCaseMapping:0x224C - }, - { code:0x224D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224D - ,simpleLowerCaseMapping:0x224D - ,simpleTitleCaseMapping:0x224D - }, - { code:0x224E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224E - ,simpleLowerCaseMapping:0x224E - ,simpleTitleCaseMapping:0x224E - }, - { code:0x224F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x224F - ,simpleLowerCaseMapping:0x224F - ,simpleTitleCaseMapping:0x224F - }, - { code:0x2250 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2250 - ,simpleLowerCaseMapping:0x2250 - ,simpleTitleCaseMapping:0x2250 - }, - { code:0x2251 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2251 - ,simpleLowerCaseMapping:0x2251 - ,simpleTitleCaseMapping:0x2251 - }, - { code:0x2252 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2252 - ,simpleLowerCaseMapping:0x2252 - ,simpleTitleCaseMapping:0x2252 - }, - { code:0x2253 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2253 - ,simpleLowerCaseMapping:0x2253 - ,simpleTitleCaseMapping:0x2253 - }, - { code:0x2254 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2254 - ,simpleLowerCaseMapping:0x2254 - ,simpleTitleCaseMapping:0x2254 - }, - { code:0x2255 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2255 - ,simpleLowerCaseMapping:0x2255 - ,simpleTitleCaseMapping:0x2255 - }, - { code:0x2256 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2256 - ,simpleLowerCaseMapping:0x2256 - ,simpleTitleCaseMapping:0x2256 - }, - { code:0x2257 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2257 - ,simpleLowerCaseMapping:0x2257 - ,simpleTitleCaseMapping:0x2257 - }, - { code:0x2258 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2258 - ,simpleLowerCaseMapping:0x2258 - ,simpleTitleCaseMapping:0x2258 - }, - { code:0x2259 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2259 - ,simpleLowerCaseMapping:0x2259 - ,simpleTitleCaseMapping:0x2259 - }, - { code:0x225A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225A - ,simpleLowerCaseMapping:0x225A - ,simpleTitleCaseMapping:0x225A - }, - { code:0x225B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225B - ,simpleLowerCaseMapping:0x225B - ,simpleTitleCaseMapping:0x225B - }, - { code:0x225C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225C - ,simpleLowerCaseMapping:0x225C - ,simpleTitleCaseMapping:0x225C - }, - { code:0x225D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225D - ,simpleLowerCaseMapping:0x225D - ,simpleTitleCaseMapping:0x225D - }, - { code:0x225E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225E - ,simpleLowerCaseMapping:0x225E - ,simpleTitleCaseMapping:0x225E - }, - { code:0x225F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x225F - ,simpleLowerCaseMapping:0x225F - ,simpleTitleCaseMapping:0x225F - }, - { code:0x2260 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2260 - ,simpleLowerCaseMapping:0x2260 - ,simpleTitleCaseMapping:0x2260 - }, - { code:0x2261 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2261 - ,simpleLowerCaseMapping:0x2261 - ,simpleTitleCaseMapping:0x2261 - }, - { code:0x2262 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2262 - ,simpleLowerCaseMapping:0x2262 - ,simpleTitleCaseMapping:0x2262 - }, - { code:0x2263 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2263 - ,simpleLowerCaseMapping:0x2263 - ,simpleTitleCaseMapping:0x2263 - }, - { code:0x2264 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2264 - ,simpleLowerCaseMapping:0x2264 - ,simpleTitleCaseMapping:0x2264 - }, - { code:0x2265 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2265 - ,simpleLowerCaseMapping:0x2265 - ,simpleTitleCaseMapping:0x2265 - }, - { code:0x2266 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2266 - ,simpleLowerCaseMapping:0x2266 - ,simpleTitleCaseMapping:0x2266 - }, - { code:0x2267 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2267 - ,simpleLowerCaseMapping:0x2267 - ,simpleTitleCaseMapping:0x2267 - }, - { code:0x2268 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2268 - ,simpleLowerCaseMapping:0x2268 - ,simpleTitleCaseMapping:0x2268 - }, - { code:0x2269 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2269 - ,simpleLowerCaseMapping:0x2269 - ,simpleTitleCaseMapping:0x2269 - }, - { code:0x226A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226A - ,simpleLowerCaseMapping:0x226A - ,simpleTitleCaseMapping:0x226A - }, - { code:0x226B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226B - ,simpleLowerCaseMapping:0x226B - ,simpleTitleCaseMapping:0x226B - }, - { code:0x226C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226C - ,simpleLowerCaseMapping:0x226C - ,simpleTitleCaseMapping:0x226C - }, - { code:0x226D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226D - ,simpleLowerCaseMapping:0x226D - ,simpleTitleCaseMapping:0x226D - }, - { code:0x226E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226E - ,simpleLowerCaseMapping:0x226E - ,simpleTitleCaseMapping:0x226E - }, - { code:0x226F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x226F - ,simpleLowerCaseMapping:0x226F - ,simpleTitleCaseMapping:0x226F - }, - { code:0x2270 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2270 - ,simpleLowerCaseMapping:0x2270 - ,simpleTitleCaseMapping:0x2270 - }, - { code:0x2271 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2271 - ,simpleLowerCaseMapping:0x2271 - ,simpleTitleCaseMapping:0x2271 - }, - { code:0x2272 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2272 - ,simpleLowerCaseMapping:0x2272 - ,simpleTitleCaseMapping:0x2272 - }, - { code:0x2273 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2273 - ,simpleLowerCaseMapping:0x2273 - ,simpleTitleCaseMapping:0x2273 - }, - { code:0x2274 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2274 - ,simpleLowerCaseMapping:0x2274 - ,simpleTitleCaseMapping:0x2274 - }, - { code:0x2275 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2275 - ,simpleLowerCaseMapping:0x2275 - ,simpleTitleCaseMapping:0x2275 - }, - { code:0x2276 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2276 - ,simpleLowerCaseMapping:0x2276 - ,simpleTitleCaseMapping:0x2276 - }, - { code:0x2277 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2277 - ,simpleLowerCaseMapping:0x2277 - ,simpleTitleCaseMapping:0x2277 - }, - { code:0x2278 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2278 - ,simpleLowerCaseMapping:0x2278 - ,simpleTitleCaseMapping:0x2278 - }, - { code:0x2279 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2279 - ,simpleLowerCaseMapping:0x2279 - ,simpleTitleCaseMapping:0x2279 - }, - { code:0x227A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227A - ,simpleLowerCaseMapping:0x227A - ,simpleTitleCaseMapping:0x227A - }, - { code:0x227B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227B - ,simpleLowerCaseMapping:0x227B - ,simpleTitleCaseMapping:0x227B - }, - { code:0x227C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227C - ,simpleLowerCaseMapping:0x227C - ,simpleTitleCaseMapping:0x227C - }, - { code:0x227D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227D - ,simpleLowerCaseMapping:0x227D - ,simpleTitleCaseMapping:0x227D - }, - { code:0x227E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227E - ,simpleLowerCaseMapping:0x227E - ,simpleTitleCaseMapping:0x227E - }, - { code:0x227F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x227F - ,simpleLowerCaseMapping:0x227F - ,simpleTitleCaseMapping:0x227F - }, - { code:0x2280 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2280 - ,simpleLowerCaseMapping:0x2280 - ,simpleTitleCaseMapping:0x2280 - }, - { code:0x2281 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2281 - ,simpleLowerCaseMapping:0x2281 - ,simpleTitleCaseMapping:0x2281 - }, - { code:0x2282 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2282 - ,simpleLowerCaseMapping:0x2282 - ,simpleTitleCaseMapping:0x2282 - }, - { code:0x2283 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2283 - ,simpleLowerCaseMapping:0x2283 - ,simpleTitleCaseMapping:0x2283 - }, - { code:0x2284 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2284 - ,simpleLowerCaseMapping:0x2284 - ,simpleTitleCaseMapping:0x2284 - }, - { code:0x2285 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2285 - ,simpleLowerCaseMapping:0x2285 - ,simpleTitleCaseMapping:0x2285 - }, - { code:0x2286 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2286 - ,simpleLowerCaseMapping:0x2286 - ,simpleTitleCaseMapping:0x2286 - }, - { code:0x2287 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2287 - ,simpleLowerCaseMapping:0x2287 - ,simpleTitleCaseMapping:0x2287 - }, - { code:0x2288 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2288 - ,simpleLowerCaseMapping:0x2288 - ,simpleTitleCaseMapping:0x2288 - }, - { code:0x2289 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2289 - ,simpleLowerCaseMapping:0x2289 - ,simpleTitleCaseMapping:0x2289 - }, - { code:0x228A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228A - ,simpleLowerCaseMapping:0x228A - ,simpleTitleCaseMapping:0x228A - }, - { code:0x228B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228B - ,simpleLowerCaseMapping:0x228B - ,simpleTitleCaseMapping:0x228B - }, - { code:0x228C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228C - ,simpleLowerCaseMapping:0x228C - ,simpleTitleCaseMapping:0x228C - }, - { code:0x228D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228D - ,simpleLowerCaseMapping:0x228D - ,simpleTitleCaseMapping:0x228D - }, - { code:0x228E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228E - ,simpleLowerCaseMapping:0x228E - ,simpleTitleCaseMapping:0x228E - }, - { code:0x228F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x228F - ,simpleLowerCaseMapping:0x228F - ,simpleTitleCaseMapping:0x228F - }, - { code:0x2290 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2290 - ,simpleLowerCaseMapping:0x2290 - ,simpleTitleCaseMapping:0x2290 - }, - { code:0x2291 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2291 - ,simpleLowerCaseMapping:0x2291 - ,simpleTitleCaseMapping:0x2291 - }, - { code:0x2292 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2292 - ,simpleLowerCaseMapping:0x2292 - ,simpleTitleCaseMapping:0x2292 - }, - { code:0x2293 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2293 - ,simpleLowerCaseMapping:0x2293 - ,simpleTitleCaseMapping:0x2293 - }, - { code:0x2294 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2294 - ,simpleLowerCaseMapping:0x2294 - ,simpleTitleCaseMapping:0x2294 - }, - { code:0x2295 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2295 - ,simpleLowerCaseMapping:0x2295 - ,simpleTitleCaseMapping:0x2295 - }, - { code:0x2296 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2296 - ,simpleLowerCaseMapping:0x2296 - ,simpleTitleCaseMapping:0x2296 - }, - { code:0x2297 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2297 - ,simpleLowerCaseMapping:0x2297 - ,simpleTitleCaseMapping:0x2297 - }, - { code:0x2298 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2298 - ,simpleLowerCaseMapping:0x2298 - ,simpleTitleCaseMapping:0x2298 - }, - { code:0x2299 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2299 - ,simpleLowerCaseMapping:0x2299 - ,simpleTitleCaseMapping:0x2299 - }, - { code:0x229A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229A - ,simpleLowerCaseMapping:0x229A - ,simpleTitleCaseMapping:0x229A - }, - { code:0x229B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229B - ,simpleLowerCaseMapping:0x229B - ,simpleTitleCaseMapping:0x229B - }, - { code:0x229C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229C - ,simpleLowerCaseMapping:0x229C - ,simpleTitleCaseMapping:0x229C - }, - { code:0x229D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229D - ,simpleLowerCaseMapping:0x229D - ,simpleTitleCaseMapping:0x229D - }, - { code:0x229E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229E - ,simpleLowerCaseMapping:0x229E - ,simpleTitleCaseMapping:0x229E - }, - { code:0x229F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x229F - ,simpleLowerCaseMapping:0x229F - ,simpleTitleCaseMapping:0x229F - }, - { code:0x22A0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A0 - ,simpleLowerCaseMapping:0x22A0 - ,simpleTitleCaseMapping:0x22A0 - }, - { code:0x22A1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A1 - ,simpleLowerCaseMapping:0x22A1 - ,simpleTitleCaseMapping:0x22A1 - }, - { code:0x22A2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A2 - ,simpleLowerCaseMapping:0x22A2 - ,simpleTitleCaseMapping:0x22A2 - }, - { code:0x22A3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A3 - ,simpleLowerCaseMapping:0x22A3 - ,simpleTitleCaseMapping:0x22A3 - }, - { code:0x22A4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A4 - ,simpleLowerCaseMapping:0x22A4 - ,simpleTitleCaseMapping:0x22A4 - }, - { code:0x22A5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A5 - ,simpleLowerCaseMapping:0x22A5 - ,simpleTitleCaseMapping:0x22A5 - }, - { code:0x22A6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A6 - ,simpleLowerCaseMapping:0x22A6 - ,simpleTitleCaseMapping:0x22A6 - }, - { code:0x22A7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A7 - ,simpleLowerCaseMapping:0x22A7 - ,simpleTitleCaseMapping:0x22A7 - }, - { code:0x22A8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A8 - ,simpleLowerCaseMapping:0x22A8 - ,simpleTitleCaseMapping:0x22A8 - }, - { code:0x22A9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22A9 - ,simpleLowerCaseMapping:0x22A9 - ,simpleTitleCaseMapping:0x22A9 - }, - { code:0x22AA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AA - ,simpleLowerCaseMapping:0x22AA - ,simpleTitleCaseMapping:0x22AA - }, - { code:0x22AB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AB - ,simpleLowerCaseMapping:0x22AB - ,simpleTitleCaseMapping:0x22AB - }, - { code:0x22AC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AC - ,simpleLowerCaseMapping:0x22AC - ,simpleTitleCaseMapping:0x22AC - }, - { code:0x22AD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AD - ,simpleLowerCaseMapping:0x22AD - ,simpleTitleCaseMapping:0x22AD - }, - { code:0x22AE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AE - ,simpleLowerCaseMapping:0x22AE - ,simpleTitleCaseMapping:0x22AE - }, - { code:0x22AF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22AF - ,simpleLowerCaseMapping:0x22AF - ,simpleTitleCaseMapping:0x22AF - }, - { code:0x22B0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B0 - ,simpleLowerCaseMapping:0x22B0 - ,simpleTitleCaseMapping:0x22B0 - }, - { code:0x22B1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B1 - ,simpleLowerCaseMapping:0x22B1 - ,simpleTitleCaseMapping:0x22B1 - }, - { code:0x22B2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B2 - ,simpleLowerCaseMapping:0x22B2 - ,simpleTitleCaseMapping:0x22B2 - }, - { code:0x22B3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B3 - ,simpleLowerCaseMapping:0x22B3 - ,simpleTitleCaseMapping:0x22B3 - }, - { code:0x22B4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B4 - ,simpleLowerCaseMapping:0x22B4 - ,simpleTitleCaseMapping:0x22B4 - }, - { code:0x22B5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B5 - ,simpleLowerCaseMapping:0x22B5 - ,simpleTitleCaseMapping:0x22B5 - }, - { code:0x22B6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B6 - ,simpleLowerCaseMapping:0x22B6 - ,simpleTitleCaseMapping:0x22B6 - }, - { code:0x22B7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B7 - ,simpleLowerCaseMapping:0x22B7 - ,simpleTitleCaseMapping:0x22B7 - }, - { code:0x22B8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B8 - ,simpleLowerCaseMapping:0x22B8 - ,simpleTitleCaseMapping:0x22B8 - }, - { code:0x22B9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22B9 - ,simpleLowerCaseMapping:0x22B9 - ,simpleTitleCaseMapping:0x22B9 - }, - { code:0x22BA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BA - ,simpleLowerCaseMapping:0x22BA - ,simpleTitleCaseMapping:0x22BA - }, - { code:0x22BB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BB - ,simpleLowerCaseMapping:0x22BB - ,simpleTitleCaseMapping:0x22BB - }, - { code:0x22BC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BC - ,simpleLowerCaseMapping:0x22BC - ,simpleTitleCaseMapping:0x22BC - }, - { code:0x22BD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BD - ,simpleLowerCaseMapping:0x22BD - ,simpleTitleCaseMapping:0x22BD - }, - { code:0x22BE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BE - ,simpleLowerCaseMapping:0x22BE - ,simpleTitleCaseMapping:0x22BE - }, - { code:0x22BF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22BF - ,simpleLowerCaseMapping:0x22BF - ,simpleTitleCaseMapping:0x22BF - }, - { code:0x22C0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C0 - ,simpleLowerCaseMapping:0x22C0 - ,simpleTitleCaseMapping:0x22C0 - }, - { code:0x22C1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C1 - ,simpleLowerCaseMapping:0x22C1 - ,simpleTitleCaseMapping:0x22C1 - }, - { code:0x22C2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C2 - ,simpleLowerCaseMapping:0x22C2 - ,simpleTitleCaseMapping:0x22C2 - }, - { code:0x22C3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C3 - ,simpleLowerCaseMapping:0x22C3 - ,simpleTitleCaseMapping:0x22C3 - }, - { code:0x22C4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C4 - ,simpleLowerCaseMapping:0x22C4 - ,simpleTitleCaseMapping:0x22C4 - }, - { code:0x22C5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C5 - ,simpleLowerCaseMapping:0x22C5 - ,simpleTitleCaseMapping:0x22C5 - }, - { code:0x22C6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C6 - ,simpleLowerCaseMapping:0x22C6 - ,simpleTitleCaseMapping:0x22C6 - }, - { code:0x22C7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C7 - ,simpleLowerCaseMapping:0x22C7 - ,simpleTitleCaseMapping:0x22C7 - }, - { code:0x22C8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C8 - ,simpleLowerCaseMapping:0x22C8 - ,simpleTitleCaseMapping:0x22C8 - }, - { code:0x22C9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22C9 - ,simpleLowerCaseMapping:0x22C9 - ,simpleTitleCaseMapping:0x22C9 - }, - { code:0x22CA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CA - ,simpleLowerCaseMapping:0x22CA - ,simpleTitleCaseMapping:0x22CA - }, - { code:0x22CB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CB - ,simpleLowerCaseMapping:0x22CB - ,simpleTitleCaseMapping:0x22CB - }, - { code:0x22CC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CC - ,simpleLowerCaseMapping:0x22CC - ,simpleTitleCaseMapping:0x22CC - }, - { code:0x22CD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CD - ,simpleLowerCaseMapping:0x22CD - ,simpleTitleCaseMapping:0x22CD - }, - { code:0x22CE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CE - ,simpleLowerCaseMapping:0x22CE - ,simpleTitleCaseMapping:0x22CE - }, - { code:0x22CF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22CF - ,simpleLowerCaseMapping:0x22CF - ,simpleTitleCaseMapping:0x22CF - }, - { code:0x22D0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D0 - ,simpleLowerCaseMapping:0x22D0 - ,simpleTitleCaseMapping:0x22D0 - }, - { code:0x22D1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D1 - ,simpleLowerCaseMapping:0x22D1 - ,simpleTitleCaseMapping:0x22D1 - }, - { code:0x22D2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D2 - ,simpleLowerCaseMapping:0x22D2 - ,simpleTitleCaseMapping:0x22D2 - }, - { code:0x22D3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D3 - ,simpleLowerCaseMapping:0x22D3 - ,simpleTitleCaseMapping:0x22D3 - }, - { code:0x22D4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D4 - ,simpleLowerCaseMapping:0x22D4 - ,simpleTitleCaseMapping:0x22D4 - }, - { code:0x22D5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D5 - ,simpleLowerCaseMapping:0x22D5 - ,simpleTitleCaseMapping:0x22D5 - }, - { code:0x22D6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D6 - ,simpleLowerCaseMapping:0x22D6 - ,simpleTitleCaseMapping:0x22D6 - }, - { code:0x22D7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D7 - ,simpleLowerCaseMapping:0x22D7 - ,simpleTitleCaseMapping:0x22D7 - }, - { code:0x22D8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D8 - ,simpleLowerCaseMapping:0x22D8 - ,simpleTitleCaseMapping:0x22D8 - }, - { code:0x22D9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22D9 - ,simpleLowerCaseMapping:0x22D9 - ,simpleTitleCaseMapping:0x22D9 - }, - { code:0x22DA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DA - ,simpleLowerCaseMapping:0x22DA - ,simpleTitleCaseMapping:0x22DA - }, - { code:0x22DB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DB - ,simpleLowerCaseMapping:0x22DB - ,simpleTitleCaseMapping:0x22DB - }, - { code:0x22DC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DC - ,simpleLowerCaseMapping:0x22DC - ,simpleTitleCaseMapping:0x22DC - }, - { code:0x22DD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DD - ,simpleLowerCaseMapping:0x22DD - ,simpleTitleCaseMapping:0x22DD - }, - { code:0x22DE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DE - ,simpleLowerCaseMapping:0x22DE - ,simpleTitleCaseMapping:0x22DE - }, - { code:0x22DF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22DF - ,simpleLowerCaseMapping:0x22DF - ,simpleTitleCaseMapping:0x22DF - }, - { code:0x22E0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E0 - ,simpleLowerCaseMapping:0x22E0 - ,simpleTitleCaseMapping:0x22E0 - }, - { code:0x22E1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E1 - ,simpleLowerCaseMapping:0x22E1 - ,simpleTitleCaseMapping:0x22E1 - }, - { code:0x22E2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E2 - ,simpleLowerCaseMapping:0x22E2 - ,simpleTitleCaseMapping:0x22E2 - }, - { code:0x22E3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E3 - ,simpleLowerCaseMapping:0x22E3 - ,simpleTitleCaseMapping:0x22E3 - }, - { code:0x22E4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E4 - ,simpleLowerCaseMapping:0x22E4 - ,simpleTitleCaseMapping:0x22E4 - }, - { code:0x22E5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E5 - ,simpleLowerCaseMapping:0x22E5 - ,simpleTitleCaseMapping:0x22E5 - }, - { code:0x22E6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E6 - ,simpleLowerCaseMapping:0x22E6 - ,simpleTitleCaseMapping:0x22E6 - }, - { code:0x22E7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E7 - ,simpleLowerCaseMapping:0x22E7 - ,simpleTitleCaseMapping:0x22E7 - }, - { code:0x22E8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E8 - ,simpleLowerCaseMapping:0x22E8 - ,simpleTitleCaseMapping:0x22E8 - }, - { code:0x22E9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22E9 - ,simpleLowerCaseMapping:0x22E9 - ,simpleTitleCaseMapping:0x22E9 - }, - { code:0x22EA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22EA - ,simpleLowerCaseMapping:0x22EA - ,simpleTitleCaseMapping:0x22EA - }, - { code:0x22EB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22EB - ,simpleLowerCaseMapping:0x22EB - ,simpleTitleCaseMapping:0x22EB - }, - { code:0x22EC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22EC - ,simpleLowerCaseMapping:0x22EC - ,simpleTitleCaseMapping:0x22EC - }, - { code:0x22ED - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22ED - ,simpleLowerCaseMapping:0x22ED - ,simpleTitleCaseMapping:0x22ED - }, - { code:0x22EE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22EE - ,simpleLowerCaseMapping:0x22EE - ,simpleTitleCaseMapping:0x22EE - }, - { code:0x22EF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22EF - ,simpleLowerCaseMapping:0x22EF - ,simpleTitleCaseMapping:0x22EF - }, - { code:0x22F0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F0 - ,simpleLowerCaseMapping:0x22F0 - ,simpleTitleCaseMapping:0x22F0 - }, - { code:0x22F1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F1 - ,simpleLowerCaseMapping:0x22F1 - ,simpleTitleCaseMapping:0x22F1 - }, - { code:0x22F2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F2 - ,simpleLowerCaseMapping:0x22F2 - ,simpleTitleCaseMapping:0x22F2 - }, - { code:0x22F3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F3 - ,simpleLowerCaseMapping:0x22F3 - ,simpleTitleCaseMapping:0x22F3 - }, - { code:0x22F4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F4 - ,simpleLowerCaseMapping:0x22F4 - ,simpleTitleCaseMapping:0x22F4 - }, - { code:0x22F5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F5 - ,simpleLowerCaseMapping:0x22F5 - ,simpleTitleCaseMapping:0x22F5 - }, - { code:0x22F6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F6 - ,simpleLowerCaseMapping:0x22F6 - ,simpleTitleCaseMapping:0x22F6 - }, - { code:0x22F7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F7 - ,simpleLowerCaseMapping:0x22F7 - ,simpleTitleCaseMapping:0x22F7 - }, - { code:0x22F8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F8 - ,simpleLowerCaseMapping:0x22F8 - ,simpleTitleCaseMapping:0x22F8 - }, - { code:0x22F9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22F9 - ,simpleLowerCaseMapping:0x22F9 - ,simpleTitleCaseMapping:0x22F9 - }, - { code:0x22FA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FA - ,simpleLowerCaseMapping:0x22FA - ,simpleTitleCaseMapping:0x22FA - }, - { code:0x22FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FB - ,simpleLowerCaseMapping:0x22FB - ,simpleTitleCaseMapping:0x22FB - }, - { code:0x22FC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FC - ,simpleLowerCaseMapping:0x22FC - ,simpleTitleCaseMapping:0x22FC - }, - { code:0x22FD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FD - ,simpleLowerCaseMapping:0x22FD - ,simpleTitleCaseMapping:0x22FD - }, - { code:0x22FE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FE - ,simpleLowerCaseMapping:0x22FE - ,simpleTitleCaseMapping:0x22FE - }, - { code:0x22FF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x22FF - ,simpleLowerCaseMapping:0x22FF - ,simpleTitleCaseMapping:0x22FF - }, - { code:0x2300 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2300 - ,simpleLowerCaseMapping:0x2300 - ,simpleTitleCaseMapping:0x2300 - }, - { code:0x2301 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2301 - ,simpleLowerCaseMapping:0x2301 - ,simpleTitleCaseMapping:0x2301 - }, - { code:0x2302 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2302 - ,simpleLowerCaseMapping:0x2302 - ,simpleTitleCaseMapping:0x2302 - }, - { code:0x2303 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2303 - ,simpleLowerCaseMapping:0x2303 - ,simpleTitleCaseMapping:0x2303 - }, - { code:0x2304 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2304 - ,simpleLowerCaseMapping:0x2304 - ,simpleTitleCaseMapping:0x2304 - }, - { code:0x2305 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2305 - ,simpleLowerCaseMapping:0x2305 - ,simpleTitleCaseMapping:0x2305 - }, - { code:0x2306 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2306 - ,simpleLowerCaseMapping:0x2306 - ,simpleTitleCaseMapping:0x2306 - }, - { code:0x2307 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2307 - ,simpleLowerCaseMapping:0x2307 - ,simpleTitleCaseMapping:0x2307 - }, - { code:0x2308 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2308 - ,simpleLowerCaseMapping:0x2308 - ,simpleTitleCaseMapping:0x2308 - }, - { code:0x2309 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2309 - ,simpleLowerCaseMapping:0x2309 - ,simpleTitleCaseMapping:0x2309 - }, - { code:0x230A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x230A - ,simpleLowerCaseMapping:0x230A - ,simpleTitleCaseMapping:0x230A - }, - { code:0x230B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x230B - ,simpleLowerCaseMapping:0x230B - ,simpleTitleCaseMapping:0x230B - }, - { code:0x230C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x230C - ,simpleLowerCaseMapping:0x230C - ,simpleTitleCaseMapping:0x230C - }, - { code:0x230D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x230D - ,simpleLowerCaseMapping:0x230D - ,simpleTitleCaseMapping:0x230D - }, - { code:0x230E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x230E - ,simpleLowerCaseMapping:0x230E - ,simpleTitleCaseMapping:0x230E - }, - { code:0x230F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x230F - ,simpleLowerCaseMapping:0x230F - ,simpleTitleCaseMapping:0x230F - }, - { code:0x2310 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2310 - ,simpleLowerCaseMapping:0x2310 - ,simpleTitleCaseMapping:0x2310 - }, - { code:0x2311 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2311 - ,simpleLowerCaseMapping:0x2311 - ,simpleTitleCaseMapping:0x2311 - }, - { code:0x2312 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2312 - ,simpleLowerCaseMapping:0x2312 - ,simpleTitleCaseMapping:0x2312 - }, - { code:0x2313 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2313 - ,simpleLowerCaseMapping:0x2313 - ,simpleTitleCaseMapping:0x2313 - }, - { code:0x2314 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2314 - ,simpleLowerCaseMapping:0x2314 - ,simpleTitleCaseMapping:0x2314 - }, - { code:0x2315 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2315 - ,simpleLowerCaseMapping:0x2315 - ,simpleTitleCaseMapping:0x2315 - }, - { code:0x2316 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2316 - ,simpleLowerCaseMapping:0x2316 - ,simpleTitleCaseMapping:0x2316 - }, - { code:0x2317 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2317 - ,simpleLowerCaseMapping:0x2317 - ,simpleTitleCaseMapping:0x2317 - }, - { code:0x2318 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2318 - ,simpleLowerCaseMapping:0x2318 - ,simpleTitleCaseMapping:0x2318 - }, - { code:0x2319 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2319 - ,simpleLowerCaseMapping:0x2319 - ,simpleTitleCaseMapping:0x2319 - }, - { code:0x231A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231A - ,simpleLowerCaseMapping:0x231A - ,simpleTitleCaseMapping:0x231A - }, - { code:0x231B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231B - ,simpleLowerCaseMapping:0x231B - ,simpleTitleCaseMapping:0x231B - }, - { code:0x231C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231C - ,simpleLowerCaseMapping:0x231C - ,simpleTitleCaseMapping:0x231C - }, - { code:0x231D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231D - ,simpleLowerCaseMapping:0x231D - ,simpleTitleCaseMapping:0x231D - }, - { code:0x231E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231E - ,simpleLowerCaseMapping:0x231E - ,simpleTitleCaseMapping:0x231E - }, - { code:0x231F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x231F - ,simpleLowerCaseMapping:0x231F - ,simpleTitleCaseMapping:0x231F - }, - { code:0x2320 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2320 - ,simpleLowerCaseMapping:0x2320 - ,simpleTitleCaseMapping:0x2320 - }, - { code:0x2321 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2321 - ,simpleLowerCaseMapping:0x2321 - ,simpleTitleCaseMapping:0x2321 - }, - { code:0x2322 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2322 - ,simpleLowerCaseMapping:0x2322 - ,simpleTitleCaseMapping:0x2322 - }, - { code:0x2323 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2323 - ,simpleLowerCaseMapping:0x2323 - ,simpleTitleCaseMapping:0x2323 - }, - { code:0x2324 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2324 - ,simpleLowerCaseMapping:0x2324 - ,simpleTitleCaseMapping:0x2324 - }, - { code:0x2325 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2325 - ,simpleLowerCaseMapping:0x2325 - ,simpleTitleCaseMapping:0x2325 - }, - { code:0x2326 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2326 - ,simpleLowerCaseMapping:0x2326 - ,simpleTitleCaseMapping:0x2326 - }, - { code:0x2327 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2327 - ,simpleLowerCaseMapping:0x2327 - ,simpleTitleCaseMapping:0x2327 - }, - { code:0x2328 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2328 - ,simpleLowerCaseMapping:0x2328 - ,simpleTitleCaseMapping:0x2328 - }, - { code:0x2329 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2329 - ,simpleLowerCaseMapping:0x2329 - ,simpleTitleCaseMapping:0x2329 - }, - { code:0x232A - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x232A - ,simpleLowerCaseMapping:0x232A - ,simpleTitleCaseMapping:0x232A - }, - { code:0x232B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x232B - ,simpleLowerCaseMapping:0x232B - ,simpleTitleCaseMapping:0x232B - }, - { code:0x232C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x232C - ,simpleLowerCaseMapping:0x232C - ,simpleTitleCaseMapping:0x232C - }, - { code:0x232D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x232D - ,simpleLowerCaseMapping:0x232D - ,simpleTitleCaseMapping:0x232D - }, - { code:0x232E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x232E - ,simpleLowerCaseMapping:0x232E - ,simpleTitleCaseMapping:0x232E - }, - { code:0x232F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x232F - ,simpleLowerCaseMapping:0x232F - ,simpleTitleCaseMapping:0x232F - }, - { code:0x2330 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2330 - ,simpleLowerCaseMapping:0x2330 - ,simpleTitleCaseMapping:0x2330 - }, - { code:0x2331 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2331 - ,simpleLowerCaseMapping:0x2331 - ,simpleTitleCaseMapping:0x2331 - }, - { code:0x2332 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2332 - ,simpleLowerCaseMapping:0x2332 - ,simpleTitleCaseMapping:0x2332 - }, - { code:0x2333 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2333 - ,simpleLowerCaseMapping:0x2333 - ,simpleTitleCaseMapping:0x2333 - }, - { code:0x2334 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2334 - ,simpleLowerCaseMapping:0x2334 - ,simpleTitleCaseMapping:0x2334 - }, - { code:0x2335 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2335 - ,simpleLowerCaseMapping:0x2335 - ,simpleTitleCaseMapping:0x2335 - }, - { code:0x2336 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2336 - ,simpleLowerCaseMapping:0x2336 - ,simpleTitleCaseMapping:0x2336 - }, - { code:0x2337 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2337 - ,simpleLowerCaseMapping:0x2337 - ,simpleTitleCaseMapping:0x2337 - }, - { code:0x2338 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2338 - ,simpleLowerCaseMapping:0x2338 - ,simpleTitleCaseMapping:0x2338 - }, - { code:0x2339 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2339 - ,simpleLowerCaseMapping:0x2339 - ,simpleTitleCaseMapping:0x2339 - }, - { code:0x233A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233A - ,simpleLowerCaseMapping:0x233A - ,simpleTitleCaseMapping:0x233A - }, - { code:0x233B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233B - ,simpleLowerCaseMapping:0x233B - ,simpleTitleCaseMapping:0x233B - }, - { code:0x233C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233C - ,simpleLowerCaseMapping:0x233C - ,simpleTitleCaseMapping:0x233C - }, - { code:0x233D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233D - ,simpleLowerCaseMapping:0x233D - ,simpleTitleCaseMapping:0x233D - }, - { code:0x233E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233E - ,simpleLowerCaseMapping:0x233E - ,simpleTitleCaseMapping:0x233E - }, - { code:0x233F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x233F - ,simpleLowerCaseMapping:0x233F - ,simpleTitleCaseMapping:0x233F - }, - { code:0x2340 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2340 - ,simpleLowerCaseMapping:0x2340 - ,simpleTitleCaseMapping:0x2340 - }, - { code:0x2341 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2341 - ,simpleLowerCaseMapping:0x2341 - ,simpleTitleCaseMapping:0x2341 - }, - { code:0x2342 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2342 - ,simpleLowerCaseMapping:0x2342 - ,simpleTitleCaseMapping:0x2342 - }, - { code:0x2343 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2343 - ,simpleLowerCaseMapping:0x2343 - ,simpleTitleCaseMapping:0x2343 - }, - { code:0x2344 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2344 - ,simpleLowerCaseMapping:0x2344 - ,simpleTitleCaseMapping:0x2344 - }, - { code:0x2345 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2345 - ,simpleLowerCaseMapping:0x2345 - ,simpleTitleCaseMapping:0x2345 - }, - { code:0x2346 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2346 - ,simpleLowerCaseMapping:0x2346 - ,simpleTitleCaseMapping:0x2346 - }, - { code:0x2347 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2347 - ,simpleLowerCaseMapping:0x2347 - ,simpleTitleCaseMapping:0x2347 - }, - { code:0x2348 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2348 - ,simpleLowerCaseMapping:0x2348 - ,simpleTitleCaseMapping:0x2348 - }, - { code:0x2349 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2349 - ,simpleLowerCaseMapping:0x2349 - ,simpleTitleCaseMapping:0x2349 - }, - { code:0x234A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234A - ,simpleLowerCaseMapping:0x234A - ,simpleTitleCaseMapping:0x234A - }, - { code:0x234B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234B - ,simpleLowerCaseMapping:0x234B - ,simpleTitleCaseMapping:0x234B - }, - { code:0x234C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234C - ,simpleLowerCaseMapping:0x234C - ,simpleTitleCaseMapping:0x234C - }, - { code:0x234D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234D - ,simpleLowerCaseMapping:0x234D - ,simpleTitleCaseMapping:0x234D - }, - { code:0x234E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234E - ,simpleLowerCaseMapping:0x234E - ,simpleTitleCaseMapping:0x234E - }, - { code:0x234F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x234F - ,simpleLowerCaseMapping:0x234F - ,simpleTitleCaseMapping:0x234F - }, - { code:0x2350 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2350 - ,simpleLowerCaseMapping:0x2350 - ,simpleTitleCaseMapping:0x2350 - }, - { code:0x2351 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2351 - ,simpleLowerCaseMapping:0x2351 - ,simpleTitleCaseMapping:0x2351 - }, - { code:0x2352 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2352 - ,simpleLowerCaseMapping:0x2352 - ,simpleTitleCaseMapping:0x2352 - }, - { code:0x2353 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2353 - ,simpleLowerCaseMapping:0x2353 - ,simpleTitleCaseMapping:0x2353 - }, - { code:0x2354 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2354 - ,simpleLowerCaseMapping:0x2354 - ,simpleTitleCaseMapping:0x2354 - }, - { code:0x2355 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2355 - ,simpleLowerCaseMapping:0x2355 - ,simpleTitleCaseMapping:0x2355 - }, - { code:0x2356 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2356 - ,simpleLowerCaseMapping:0x2356 - ,simpleTitleCaseMapping:0x2356 - }, - { code:0x2357 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2357 - ,simpleLowerCaseMapping:0x2357 - ,simpleTitleCaseMapping:0x2357 - }, - { code:0x2358 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2358 - ,simpleLowerCaseMapping:0x2358 - ,simpleTitleCaseMapping:0x2358 - }, - { code:0x2359 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2359 - ,simpleLowerCaseMapping:0x2359 - ,simpleTitleCaseMapping:0x2359 - }, - { code:0x235A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235A - ,simpleLowerCaseMapping:0x235A - ,simpleTitleCaseMapping:0x235A - }, - { code:0x235B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235B - ,simpleLowerCaseMapping:0x235B - ,simpleTitleCaseMapping:0x235B - }, - { code:0x235C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235C - ,simpleLowerCaseMapping:0x235C - ,simpleTitleCaseMapping:0x235C - }, - { code:0x235D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235D - ,simpleLowerCaseMapping:0x235D - ,simpleTitleCaseMapping:0x235D - }, - { code:0x235E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235E - ,simpleLowerCaseMapping:0x235E - ,simpleTitleCaseMapping:0x235E - }, - { code:0x235F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x235F - ,simpleLowerCaseMapping:0x235F - ,simpleTitleCaseMapping:0x235F - }, - { code:0x2360 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2360 - ,simpleLowerCaseMapping:0x2360 - ,simpleTitleCaseMapping:0x2360 - }, - { code:0x2361 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2361 - ,simpleLowerCaseMapping:0x2361 - ,simpleTitleCaseMapping:0x2361 - }, - { code:0x2362 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2362 - ,simpleLowerCaseMapping:0x2362 - ,simpleTitleCaseMapping:0x2362 - }, - { code:0x2363 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2363 - ,simpleLowerCaseMapping:0x2363 - ,simpleTitleCaseMapping:0x2363 - }, - { code:0x2364 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2364 - ,simpleLowerCaseMapping:0x2364 - ,simpleTitleCaseMapping:0x2364 - }, - { code:0x2365 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2365 - ,simpleLowerCaseMapping:0x2365 - ,simpleTitleCaseMapping:0x2365 - }, - { code:0x2366 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2366 - ,simpleLowerCaseMapping:0x2366 - ,simpleTitleCaseMapping:0x2366 - }, - { code:0x2367 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2367 - ,simpleLowerCaseMapping:0x2367 - ,simpleTitleCaseMapping:0x2367 - }, - { code:0x2368 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2368 - ,simpleLowerCaseMapping:0x2368 - ,simpleTitleCaseMapping:0x2368 - }, - { code:0x2369 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2369 - ,simpleLowerCaseMapping:0x2369 - ,simpleTitleCaseMapping:0x2369 - }, - { code:0x236A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236A - ,simpleLowerCaseMapping:0x236A - ,simpleTitleCaseMapping:0x236A - }, - { code:0x236B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236B - ,simpleLowerCaseMapping:0x236B - ,simpleTitleCaseMapping:0x236B - }, - { code:0x236C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236C - ,simpleLowerCaseMapping:0x236C - ,simpleTitleCaseMapping:0x236C - }, - { code:0x236D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236D - ,simpleLowerCaseMapping:0x236D - ,simpleTitleCaseMapping:0x236D - }, - { code:0x236E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236E - ,simpleLowerCaseMapping:0x236E - ,simpleTitleCaseMapping:0x236E - }, - { code:0x236F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x236F - ,simpleLowerCaseMapping:0x236F - ,simpleTitleCaseMapping:0x236F - }, - { code:0x2370 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2370 - ,simpleLowerCaseMapping:0x2370 - ,simpleTitleCaseMapping:0x2370 - }, - { code:0x2371 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2371 - ,simpleLowerCaseMapping:0x2371 - ,simpleTitleCaseMapping:0x2371 - }, - { code:0x2372 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2372 - ,simpleLowerCaseMapping:0x2372 - ,simpleTitleCaseMapping:0x2372 - }, - { code:0x2373 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2373 - ,simpleLowerCaseMapping:0x2373 - ,simpleTitleCaseMapping:0x2373 - }, - { code:0x2374 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2374 - ,simpleLowerCaseMapping:0x2374 - ,simpleTitleCaseMapping:0x2374 - }, - { code:0x2375 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2375 - ,simpleLowerCaseMapping:0x2375 - ,simpleTitleCaseMapping:0x2375 - }, - { code:0x2376 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2376 - ,simpleLowerCaseMapping:0x2376 - ,simpleTitleCaseMapping:0x2376 - }, - { code:0x2377 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2377 - ,simpleLowerCaseMapping:0x2377 - ,simpleTitleCaseMapping:0x2377 - }, - { code:0x2378 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2378 - ,simpleLowerCaseMapping:0x2378 - ,simpleTitleCaseMapping:0x2378 - }, - { code:0x2379 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2379 - ,simpleLowerCaseMapping:0x2379 - ,simpleTitleCaseMapping:0x2379 - }, - { code:0x237A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x237A - ,simpleLowerCaseMapping:0x237A - ,simpleTitleCaseMapping:0x237A - }, - { code:0x237B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x237B - ,simpleLowerCaseMapping:0x237B - ,simpleTitleCaseMapping:0x237B - }, - { code:0x237C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x237C - ,simpleLowerCaseMapping:0x237C - ,simpleTitleCaseMapping:0x237C - }, - { code:0x237D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x237D - ,simpleLowerCaseMapping:0x237D - ,simpleTitleCaseMapping:0x237D - }, - { code:0x237E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x237E - ,simpleLowerCaseMapping:0x237E - ,simpleTitleCaseMapping:0x237E - }, - { code:0x237F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x237F - ,simpleLowerCaseMapping:0x237F - ,simpleTitleCaseMapping:0x237F - }, - { code:0x2380 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2380 - ,simpleLowerCaseMapping:0x2380 - ,simpleTitleCaseMapping:0x2380 - }, - { code:0x2381 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2381 - ,simpleLowerCaseMapping:0x2381 - ,simpleTitleCaseMapping:0x2381 - }, - { code:0x2382 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2382 - ,simpleLowerCaseMapping:0x2382 - ,simpleTitleCaseMapping:0x2382 - }, - { code:0x2383 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2383 - ,simpleLowerCaseMapping:0x2383 - ,simpleTitleCaseMapping:0x2383 - }, - { code:0x2384 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2384 - ,simpleLowerCaseMapping:0x2384 - ,simpleTitleCaseMapping:0x2384 - }, - { code:0x2385 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2385 - ,simpleLowerCaseMapping:0x2385 - ,simpleTitleCaseMapping:0x2385 - }, - { code:0x2386 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2386 - ,simpleLowerCaseMapping:0x2386 - ,simpleTitleCaseMapping:0x2386 - }, - { code:0x2387 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2387 - ,simpleLowerCaseMapping:0x2387 - ,simpleTitleCaseMapping:0x2387 - }, - { code:0x2388 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2388 - ,simpleLowerCaseMapping:0x2388 - ,simpleTitleCaseMapping:0x2388 - }, - { code:0x2389 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2389 - ,simpleLowerCaseMapping:0x2389 - ,simpleTitleCaseMapping:0x2389 - }, - { code:0x238A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238A - ,simpleLowerCaseMapping:0x238A - ,simpleTitleCaseMapping:0x238A - }, - { code:0x238B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238B - ,simpleLowerCaseMapping:0x238B - ,simpleTitleCaseMapping:0x238B - }, - { code:0x238C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238C - ,simpleLowerCaseMapping:0x238C - ,simpleTitleCaseMapping:0x238C - }, - { code:0x238D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238D - ,simpleLowerCaseMapping:0x238D - ,simpleTitleCaseMapping:0x238D - }, - { code:0x238E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238E - ,simpleLowerCaseMapping:0x238E - ,simpleTitleCaseMapping:0x238E - }, - { code:0x238F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x238F - ,simpleLowerCaseMapping:0x238F - ,simpleTitleCaseMapping:0x238F - }, - { code:0x2390 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2390 - ,simpleLowerCaseMapping:0x2390 - ,simpleTitleCaseMapping:0x2390 - }, - { code:0x2391 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2391 - ,simpleLowerCaseMapping:0x2391 - ,simpleTitleCaseMapping:0x2391 - }, - { code:0x2392 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2392 - ,simpleLowerCaseMapping:0x2392 - ,simpleTitleCaseMapping:0x2392 - }, - { code:0x2393 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2393 - ,simpleLowerCaseMapping:0x2393 - ,simpleTitleCaseMapping:0x2393 - }, - { code:0x2394 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2394 - ,simpleLowerCaseMapping:0x2394 - ,simpleTitleCaseMapping:0x2394 - }, - { code:0x2395 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2395 - ,simpleLowerCaseMapping:0x2395 - ,simpleTitleCaseMapping:0x2395 - }, - { code:0x2396 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2396 - ,simpleLowerCaseMapping:0x2396 - ,simpleTitleCaseMapping:0x2396 - }, - { code:0x2397 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2397 - ,simpleLowerCaseMapping:0x2397 - ,simpleTitleCaseMapping:0x2397 - }, - { code:0x2398 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2398 - ,simpleLowerCaseMapping:0x2398 - ,simpleTitleCaseMapping:0x2398 - }, - { code:0x2399 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2399 - ,simpleLowerCaseMapping:0x2399 - ,simpleTitleCaseMapping:0x2399 - }, - { code:0x239A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x239A - ,simpleLowerCaseMapping:0x239A - ,simpleTitleCaseMapping:0x239A - }, - { code:0x239B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x239B - ,simpleLowerCaseMapping:0x239B - ,simpleTitleCaseMapping:0x239B - }, - { code:0x239C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x239C - ,simpleLowerCaseMapping:0x239C - ,simpleTitleCaseMapping:0x239C - }, - { code:0x239D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x239D - ,simpleLowerCaseMapping:0x239D - ,simpleTitleCaseMapping:0x239D - }, - { code:0x239E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x239E - ,simpleLowerCaseMapping:0x239E - ,simpleTitleCaseMapping:0x239E - }, - { code:0x239F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x239F - ,simpleLowerCaseMapping:0x239F - ,simpleTitleCaseMapping:0x239F - }, - { code:0x23A0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A0 - ,simpleLowerCaseMapping:0x23A0 - ,simpleTitleCaseMapping:0x23A0 - }, - { code:0x23A1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A1 - ,simpleLowerCaseMapping:0x23A1 - ,simpleTitleCaseMapping:0x23A1 - }, - { code:0x23A2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A2 - ,simpleLowerCaseMapping:0x23A2 - ,simpleTitleCaseMapping:0x23A2 - }, - { code:0x23A3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A3 - ,simpleLowerCaseMapping:0x23A3 - ,simpleTitleCaseMapping:0x23A3 - }, - { code:0x23A4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A4 - ,simpleLowerCaseMapping:0x23A4 - ,simpleTitleCaseMapping:0x23A4 - }, - { code:0x23A5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A5 - ,simpleLowerCaseMapping:0x23A5 - ,simpleTitleCaseMapping:0x23A5 - }, - { code:0x23A6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A6 - ,simpleLowerCaseMapping:0x23A6 - ,simpleTitleCaseMapping:0x23A6 - }, - { code:0x23A7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A7 - ,simpleLowerCaseMapping:0x23A7 - ,simpleTitleCaseMapping:0x23A7 - }, - { code:0x23A8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A8 - ,simpleLowerCaseMapping:0x23A8 - ,simpleTitleCaseMapping:0x23A8 - }, - { code:0x23A9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23A9 - ,simpleLowerCaseMapping:0x23A9 - ,simpleTitleCaseMapping:0x23A9 - }, - { code:0x23AA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AA - ,simpleLowerCaseMapping:0x23AA - ,simpleTitleCaseMapping:0x23AA - }, - { code:0x23AB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AB - ,simpleLowerCaseMapping:0x23AB - ,simpleTitleCaseMapping:0x23AB - }, - { code:0x23AC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AC - ,simpleLowerCaseMapping:0x23AC - ,simpleTitleCaseMapping:0x23AC - }, - { code:0x23AD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AD - ,simpleLowerCaseMapping:0x23AD - ,simpleTitleCaseMapping:0x23AD - }, - { code:0x23AE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AE - ,simpleLowerCaseMapping:0x23AE - ,simpleTitleCaseMapping:0x23AE - }, - { code:0x23AF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23AF - ,simpleLowerCaseMapping:0x23AF - ,simpleTitleCaseMapping:0x23AF - }, - { code:0x23B0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23B0 - ,simpleLowerCaseMapping:0x23B0 - ,simpleTitleCaseMapping:0x23B0 - }, - { code:0x23B1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23B1 - ,simpleLowerCaseMapping:0x23B1 - ,simpleTitleCaseMapping:0x23B1 - }, - { code:0x23B2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23B2 - ,simpleLowerCaseMapping:0x23B2 - ,simpleTitleCaseMapping:0x23B2 - }, - { code:0x23B3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23B3 - ,simpleLowerCaseMapping:0x23B3 - ,simpleTitleCaseMapping:0x23B3 - }, - { code:0x23B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B4 - ,simpleLowerCaseMapping:0x23B4 - ,simpleTitleCaseMapping:0x23B4 - }, - { code:0x23B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B5 - ,simpleLowerCaseMapping:0x23B5 - ,simpleTitleCaseMapping:0x23B5 - }, - { code:0x23B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B6 - ,simpleLowerCaseMapping:0x23B6 - ,simpleTitleCaseMapping:0x23B6 - }, - { code:0x23B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B7 - ,simpleLowerCaseMapping:0x23B7 - ,simpleTitleCaseMapping:0x23B7 - }, - { code:0x23B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B8 - ,simpleLowerCaseMapping:0x23B8 - ,simpleTitleCaseMapping:0x23B8 - }, - { code:0x23B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23B9 - ,simpleLowerCaseMapping:0x23B9 - ,simpleTitleCaseMapping:0x23B9 - }, - { code:0x23BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BA - ,simpleLowerCaseMapping:0x23BA - ,simpleTitleCaseMapping:0x23BA - }, - { code:0x23BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BB - ,simpleLowerCaseMapping:0x23BB - ,simpleTitleCaseMapping:0x23BB - }, - { code:0x23BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BC - ,simpleLowerCaseMapping:0x23BC - ,simpleTitleCaseMapping:0x23BC - }, - { code:0x23BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BD - ,simpleLowerCaseMapping:0x23BD - ,simpleTitleCaseMapping:0x23BD - }, - { code:0x23BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BE - ,simpleLowerCaseMapping:0x23BE - ,simpleTitleCaseMapping:0x23BE - }, - { code:0x23BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23BF - ,simpleLowerCaseMapping:0x23BF - ,simpleTitleCaseMapping:0x23BF - }, - { code:0x23C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C0 - ,simpleLowerCaseMapping:0x23C0 - ,simpleTitleCaseMapping:0x23C0 - }, - { code:0x23C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C1 - ,simpleLowerCaseMapping:0x23C1 - ,simpleTitleCaseMapping:0x23C1 - }, - { code:0x23C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C2 - ,simpleLowerCaseMapping:0x23C2 - ,simpleTitleCaseMapping:0x23C2 - }, - { code:0x23C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C3 - ,simpleLowerCaseMapping:0x23C3 - ,simpleTitleCaseMapping:0x23C3 - }, - { code:0x23C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C4 - ,simpleLowerCaseMapping:0x23C4 - ,simpleTitleCaseMapping:0x23C4 - }, - { code:0x23C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C5 - ,simpleLowerCaseMapping:0x23C5 - ,simpleTitleCaseMapping:0x23C5 - }, - { code:0x23C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C6 - ,simpleLowerCaseMapping:0x23C6 - ,simpleTitleCaseMapping:0x23C6 - }, - { code:0x23C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C7 - ,simpleLowerCaseMapping:0x23C7 - ,simpleTitleCaseMapping:0x23C7 - }, - { code:0x23C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C8 - ,simpleLowerCaseMapping:0x23C8 - ,simpleTitleCaseMapping:0x23C8 - }, - { code:0x23C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23C9 - ,simpleLowerCaseMapping:0x23C9 - ,simpleTitleCaseMapping:0x23C9 - }, - { code:0x23CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CA - ,simpleLowerCaseMapping:0x23CA - ,simpleTitleCaseMapping:0x23CA - }, - { code:0x23CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CB - ,simpleLowerCaseMapping:0x23CB - ,simpleTitleCaseMapping:0x23CB - }, - { code:0x23CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CC - ,simpleLowerCaseMapping:0x23CC - ,simpleTitleCaseMapping:0x23CC - }, - { code:0x23CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CD - ,simpleLowerCaseMapping:0x23CD - ,simpleTitleCaseMapping:0x23CD - }, - { code:0x23CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CE - ,simpleLowerCaseMapping:0x23CE - ,simpleTitleCaseMapping:0x23CE - }, - { code:0x23CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23CF - ,simpleLowerCaseMapping:0x23CF - ,simpleTitleCaseMapping:0x23CF - }, - { code:0x23D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D0 - ,simpleLowerCaseMapping:0x23D0 - ,simpleTitleCaseMapping:0x23D0 - }, - { code:0x23D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D1 - ,simpleLowerCaseMapping:0x23D1 - ,simpleTitleCaseMapping:0x23D1 - }, - { code:0x23D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D2 - ,simpleLowerCaseMapping:0x23D2 - ,simpleTitleCaseMapping:0x23D2 - }, - { code:0x23D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D3 - ,simpleLowerCaseMapping:0x23D3 - ,simpleTitleCaseMapping:0x23D3 - }, - { code:0x23D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D4 - ,simpleLowerCaseMapping:0x23D4 - ,simpleTitleCaseMapping:0x23D4 - }, - { code:0x23D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D5 - ,simpleLowerCaseMapping:0x23D5 - ,simpleTitleCaseMapping:0x23D5 - }, - { code:0x23D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D6 - ,simpleLowerCaseMapping:0x23D6 - ,simpleTitleCaseMapping:0x23D6 - }, - { code:0x23D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D7 - ,simpleLowerCaseMapping:0x23D7 - ,simpleTitleCaseMapping:0x23D7 - }, - { code:0x23D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D8 - ,simpleLowerCaseMapping:0x23D8 - ,simpleTitleCaseMapping:0x23D8 - }, - { code:0x23D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23D9 - ,simpleLowerCaseMapping:0x23D9 - ,simpleTitleCaseMapping:0x23D9 - }, - { code:0x23DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23DA - ,simpleLowerCaseMapping:0x23DA - ,simpleTitleCaseMapping:0x23DA - }, - { code:0x23DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23DB - ,simpleLowerCaseMapping:0x23DB - ,simpleTitleCaseMapping:0x23DB - }, - { code:0x23DC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23DC - ,simpleLowerCaseMapping:0x23DC - ,simpleTitleCaseMapping:0x23DC - }, - { code:0x23DD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23DD - ,simpleLowerCaseMapping:0x23DD - ,simpleTitleCaseMapping:0x23DD - }, - { code:0x23DE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23DE - ,simpleLowerCaseMapping:0x23DE - ,simpleTitleCaseMapping:0x23DE - }, - { code:0x23DF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23DF - ,simpleLowerCaseMapping:0x23DF - ,simpleTitleCaseMapping:0x23DF - }, - { code:0x23E0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23E0 - ,simpleLowerCaseMapping:0x23E0 - ,simpleTitleCaseMapping:0x23E0 - }, - { code:0x23E1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x23E1 - ,simpleLowerCaseMapping:0x23E1 - ,simpleTitleCaseMapping:0x23E1 - }, - { code:0x23E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E2 - ,simpleLowerCaseMapping:0x23E2 - ,simpleTitleCaseMapping:0x23E2 - }, - { code:0x23E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E3 - ,simpleLowerCaseMapping:0x23E3 - ,simpleTitleCaseMapping:0x23E3 - }, - { code:0x23E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E4 - ,simpleLowerCaseMapping:0x23E4 - ,simpleTitleCaseMapping:0x23E4 - }, - { code:0x23E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E5 - ,simpleLowerCaseMapping:0x23E5 - ,simpleTitleCaseMapping:0x23E5 - }, - { code:0x23E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E6 - ,simpleLowerCaseMapping:0x23E6 - ,simpleTitleCaseMapping:0x23E6 - }, - { code:0x23E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x23E7 - ,simpleLowerCaseMapping:0x23E7 - ,simpleTitleCaseMapping:0x23E7 - }, - { code:0x2400 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2400 - ,simpleLowerCaseMapping:0x2400 - ,simpleTitleCaseMapping:0x2400 - }, - { code:0x2401 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2401 - ,simpleLowerCaseMapping:0x2401 - ,simpleTitleCaseMapping:0x2401 - }, - { code:0x2402 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2402 - ,simpleLowerCaseMapping:0x2402 - ,simpleTitleCaseMapping:0x2402 - }, - { code:0x2403 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2403 - ,simpleLowerCaseMapping:0x2403 - ,simpleTitleCaseMapping:0x2403 - }, - { code:0x2404 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2404 - ,simpleLowerCaseMapping:0x2404 - ,simpleTitleCaseMapping:0x2404 - }, - { code:0x2405 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2405 - ,simpleLowerCaseMapping:0x2405 - ,simpleTitleCaseMapping:0x2405 - }, - { code:0x2406 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2406 - ,simpleLowerCaseMapping:0x2406 - ,simpleTitleCaseMapping:0x2406 - }, - { code:0x2407 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2407 - ,simpleLowerCaseMapping:0x2407 - ,simpleTitleCaseMapping:0x2407 - }, - { code:0x2408 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2408 - ,simpleLowerCaseMapping:0x2408 - ,simpleTitleCaseMapping:0x2408 - }, - { code:0x2409 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2409 - ,simpleLowerCaseMapping:0x2409 - ,simpleTitleCaseMapping:0x2409 - }, - { code:0x240A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240A - ,simpleLowerCaseMapping:0x240A - ,simpleTitleCaseMapping:0x240A - }, - { code:0x240B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240B - ,simpleLowerCaseMapping:0x240B - ,simpleTitleCaseMapping:0x240B - }, - { code:0x240C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240C - ,simpleLowerCaseMapping:0x240C - ,simpleTitleCaseMapping:0x240C - }, - { code:0x240D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240D - ,simpleLowerCaseMapping:0x240D - ,simpleTitleCaseMapping:0x240D - }, - { code:0x240E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240E - ,simpleLowerCaseMapping:0x240E - ,simpleTitleCaseMapping:0x240E - }, - { code:0x240F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x240F - ,simpleLowerCaseMapping:0x240F - ,simpleTitleCaseMapping:0x240F - }, - { code:0x2410 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2410 - ,simpleLowerCaseMapping:0x2410 - ,simpleTitleCaseMapping:0x2410 - }, - { code:0x2411 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2411 - ,simpleLowerCaseMapping:0x2411 - ,simpleTitleCaseMapping:0x2411 - }, - { code:0x2412 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2412 - ,simpleLowerCaseMapping:0x2412 - ,simpleTitleCaseMapping:0x2412 - }, - { code:0x2413 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2413 - ,simpleLowerCaseMapping:0x2413 - ,simpleTitleCaseMapping:0x2413 - }, - { code:0x2414 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2414 - ,simpleLowerCaseMapping:0x2414 - ,simpleTitleCaseMapping:0x2414 - }, - { code:0x2415 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2415 - ,simpleLowerCaseMapping:0x2415 - ,simpleTitleCaseMapping:0x2415 - }, - { code:0x2416 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2416 - ,simpleLowerCaseMapping:0x2416 - ,simpleTitleCaseMapping:0x2416 - }, - { code:0x2417 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2417 - ,simpleLowerCaseMapping:0x2417 - ,simpleTitleCaseMapping:0x2417 - }, - { code:0x2418 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2418 - ,simpleLowerCaseMapping:0x2418 - ,simpleTitleCaseMapping:0x2418 - }, - { code:0x2419 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2419 - ,simpleLowerCaseMapping:0x2419 - ,simpleTitleCaseMapping:0x2419 - }, - { code:0x241A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241A - ,simpleLowerCaseMapping:0x241A - ,simpleTitleCaseMapping:0x241A - }, - { code:0x241B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241B - ,simpleLowerCaseMapping:0x241B - ,simpleTitleCaseMapping:0x241B - }, - { code:0x241C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241C - ,simpleLowerCaseMapping:0x241C - ,simpleTitleCaseMapping:0x241C - }, - { code:0x241D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241D - ,simpleLowerCaseMapping:0x241D - ,simpleTitleCaseMapping:0x241D - }, - { code:0x241E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241E - ,simpleLowerCaseMapping:0x241E - ,simpleTitleCaseMapping:0x241E - }, - { code:0x241F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x241F - ,simpleLowerCaseMapping:0x241F - ,simpleTitleCaseMapping:0x241F - }, - { code:0x2420 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2420 - ,simpleLowerCaseMapping:0x2420 - ,simpleTitleCaseMapping:0x2420 - }, - { code:0x2421 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2421 - ,simpleLowerCaseMapping:0x2421 - ,simpleTitleCaseMapping:0x2421 - }, - { code:0x2422 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2422 - ,simpleLowerCaseMapping:0x2422 - ,simpleTitleCaseMapping:0x2422 - }, - { code:0x2423 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2423 - ,simpleLowerCaseMapping:0x2423 - ,simpleTitleCaseMapping:0x2423 - }, - { code:0x2424 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2424 - ,simpleLowerCaseMapping:0x2424 - ,simpleTitleCaseMapping:0x2424 - }, - { code:0x2425 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2425 - ,simpleLowerCaseMapping:0x2425 - ,simpleTitleCaseMapping:0x2425 - }, - { code:0x2426 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2426 - ,simpleLowerCaseMapping:0x2426 - ,simpleTitleCaseMapping:0x2426 - }, - { code:0x2440 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2440 - ,simpleLowerCaseMapping:0x2440 - ,simpleTitleCaseMapping:0x2440 - }, - { code:0x2441 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2441 - ,simpleLowerCaseMapping:0x2441 - ,simpleTitleCaseMapping:0x2441 - }, - { code:0x2442 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2442 - ,simpleLowerCaseMapping:0x2442 - ,simpleTitleCaseMapping:0x2442 - }, - { code:0x2443 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2443 - ,simpleLowerCaseMapping:0x2443 - ,simpleTitleCaseMapping:0x2443 - }, - { code:0x2444 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2444 - ,simpleLowerCaseMapping:0x2444 - ,simpleTitleCaseMapping:0x2444 - }, - { code:0x2445 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2445 - ,simpleLowerCaseMapping:0x2445 - ,simpleTitleCaseMapping:0x2445 - }, - { code:0x2446 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2446 - ,simpleLowerCaseMapping:0x2446 - ,simpleTitleCaseMapping:0x2446 - }, - { code:0x2447 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2447 - ,simpleLowerCaseMapping:0x2447 - ,simpleTitleCaseMapping:0x2447 - }, - { code:0x2448 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2448 - ,simpleLowerCaseMapping:0x2448 - ,simpleTitleCaseMapping:0x2448 - }, - { code:0x2449 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2449 - ,simpleLowerCaseMapping:0x2449 - ,simpleTitleCaseMapping:0x2449 - }, - { code:0x244A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x244A - ,simpleLowerCaseMapping:0x244A - ,simpleTitleCaseMapping:0x244A - }, - { code:0x2460 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2460 - ,simpleLowerCaseMapping:0x2460 - ,simpleTitleCaseMapping:0x2460 - }, - { code:0x2461 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2461 - ,simpleLowerCaseMapping:0x2461 - ,simpleTitleCaseMapping:0x2461 - }, - { code:0x2462 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2462 - ,simpleLowerCaseMapping:0x2462 - ,simpleTitleCaseMapping:0x2462 - }, - { code:0x2463 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2463 - ,simpleLowerCaseMapping:0x2463 - ,simpleTitleCaseMapping:0x2463 - }, - { code:0x2464 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2464 - ,simpleLowerCaseMapping:0x2464 - ,simpleTitleCaseMapping:0x2464 - }, - { code:0x2465 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2465 - ,simpleLowerCaseMapping:0x2465 - ,simpleTitleCaseMapping:0x2465 - }, - { code:0x2466 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2466 - ,simpleLowerCaseMapping:0x2466 - ,simpleTitleCaseMapping:0x2466 - }, - { code:0x2467 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2467 - ,simpleLowerCaseMapping:0x2467 - ,simpleTitleCaseMapping:0x2467 - }, - { code:0x2468 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2468 - ,simpleLowerCaseMapping:0x2468 - ,simpleTitleCaseMapping:0x2468 - }, - { code:0x2469 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2469 - ,simpleLowerCaseMapping:0x2469 - ,simpleTitleCaseMapping:0x2469 - }, - { code:0x246A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246A - ,simpleLowerCaseMapping:0x246A - ,simpleTitleCaseMapping:0x246A - }, - { code:0x246B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246B - ,simpleLowerCaseMapping:0x246B - ,simpleTitleCaseMapping:0x246B - }, - { code:0x246C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246C - ,simpleLowerCaseMapping:0x246C - ,simpleTitleCaseMapping:0x246C - }, - { code:0x246D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246D - ,simpleLowerCaseMapping:0x246D - ,simpleTitleCaseMapping:0x246D - }, - { code:0x246E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246E - ,simpleLowerCaseMapping:0x246E - ,simpleTitleCaseMapping:0x246E - }, - { code:0x246F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x246F - ,simpleLowerCaseMapping:0x246F - ,simpleTitleCaseMapping:0x246F - }, - { code:0x2470 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2470 - ,simpleLowerCaseMapping:0x2470 - ,simpleTitleCaseMapping:0x2470 - }, - { code:0x2471 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2471 - ,simpleLowerCaseMapping:0x2471 - ,simpleTitleCaseMapping:0x2471 - }, - { code:0x2472 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2472 - ,simpleLowerCaseMapping:0x2472 - ,simpleTitleCaseMapping:0x2472 - }, - { code:0x2473 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2473 - ,simpleLowerCaseMapping:0x2473 - ,simpleTitleCaseMapping:0x2473 - }, - { code:0x2474 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2474 - ,simpleLowerCaseMapping:0x2474 - ,simpleTitleCaseMapping:0x2474 - }, - { code:0x2475 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2475 - ,simpleLowerCaseMapping:0x2475 - ,simpleTitleCaseMapping:0x2475 - }, - { code:0x2476 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2476 - ,simpleLowerCaseMapping:0x2476 - ,simpleTitleCaseMapping:0x2476 - }, - { code:0x2477 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2477 - ,simpleLowerCaseMapping:0x2477 - ,simpleTitleCaseMapping:0x2477 - }, - { code:0x2478 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2478 - ,simpleLowerCaseMapping:0x2478 - ,simpleTitleCaseMapping:0x2478 - }, - { code:0x2479 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2479 - ,simpleLowerCaseMapping:0x2479 - ,simpleTitleCaseMapping:0x2479 - }, - { code:0x247A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247A - ,simpleLowerCaseMapping:0x247A - ,simpleTitleCaseMapping:0x247A - }, - { code:0x247B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247B - ,simpleLowerCaseMapping:0x247B - ,simpleTitleCaseMapping:0x247B - }, - { code:0x247C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247C - ,simpleLowerCaseMapping:0x247C - ,simpleTitleCaseMapping:0x247C - }, - { code:0x247D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247D - ,simpleLowerCaseMapping:0x247D - ,simpleTitleCaseMapping:0x247D - }, - { code:0x247E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247E - ,simpleLowerCaseMapping:0x247E - ,simpleTitleCaseMapping:0x247E - }, - { code:0x247F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x247F - ,simpleLowerCaseMapping:0x247F - ,simpleTitleCaseMapping:0x247F - }, - { code:0x2480 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2480 - ,simpleLowerCaseMapping:0x2480 - ,simpleTitleCaseMapping:0x2480 - }, - { code:0x2481 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2481 - ,simpleLowerCaseMapping:0x2481 - ,simpleTitleCaseMapping:0x2481 - }, - { code:0x2482 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2482 - ,simpleLowerCaseMapping:0x2482 - ,simpleTitleCaseMapping:0x2482 - }, - { code:0x2483 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2483 - ,simpleLowerCaseMapping:0x2483 - ,simpleTitleCaseMapping:0x2483 - }, - { code:0x2484 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2484 - ,simpleLowerCaseMapping:0x2484 - ,simpleTitleCaseMapping:0x2484 - }, - { code:0x2485 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2485 - ,simpleLowerCaseMapping:0x2485 - ,simpleTitleCaseMapping:0x2485 - }, - { code:0x2486 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2486 - ,simpleLowerCaseMapping:0x2486 - ,simpleTitleCaseMapping:0x2486 - }, - { code:0x2487 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2487 - ,simpleLowerCaseMapping:0x2487 - ,simpleTitleCaseMapping:0x2487 - }, - { code:0x2488 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2488 - ,simpleLowerCaseMapping:0x2488 - ,simpleTitleCaseMapping:0x2488 - }, - { code:0x2489 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2489 - ,simpleLowerCaseMapping:0x2489 - ,simpleTitleCaseMapping:0x2489 - }, - { code:0x248A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248A - ,simpleLowerCaseMapping:0x248A - ,simpleTitleCaseMapping:0x248A - }, - { code:0x248B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248B - ,simpleLowerCaseMapping:0x248B - ,simpleTitleCaseMapping:0x248B - }, - { code:0x248C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248C - ,simpleLowerCaseMapping:0x248C - ,simpleTitleCaseMapping:0x248C - }, - { code:0x248D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248D - ,simpleLowerCaseMapping:0x248D - ,simpleTitleCaseMapping:0x248D - }, - { code:0x248E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248E - ,simpleLowerCaseMapping:0x248E - ,simpleTitleCaseMapping:0x248E - }, - { code:0x248F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x248F - ,simpleLowerCaseMapping:0x248F - ,simpleTitleCaseMapping:0x248F - }, - { code:0x2490 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2490 - ,simpleLowerCaseMapping:0x2490 - ,simpleTitleCaseMapping:0x2490 - }, - { code:0x2491 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2491 - ,simpleLowerCaseMapping:0x2491 - ,simpleTitleCaseMapping:0x2491 - }, - { code:0x2492 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2492 - ,simpleLowerCaseMapping:0x2492 - ,simpleTitleCaseMapping:0x2492 - }, - { code:0x2493 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2493 - ,simpleLowerCaseMapping:0x2493 - ,simpleTitleCaseMapping:0x2493 - }, - { code:0x2494 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2494 - ,simpleLowerCaseMapping:0x2494 - ,simpleTitleCaseMapping:0x2494 - }, - { code:0x2495 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2495 - ,simpleLowerCaseMapping:0x2495 - ,simpleTitleCaseMapping:0x2495 - }, - { code:0x2496 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2496 - ,simpleLowerCaseMapping:0x2496 - ,simpleTitleCaseMapping:0x2496 - }, - { code:0x2497 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2497 - ,simpleLowerCaseMapping:0x2497 - ,simpleTitleCaseMapping:0x2497 - }, - { code:0x2498 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2498 - ,simpleLowerCaseMapping:0x2498 - ,simpleTitleCaseMapping:0x2498 - }, - { code:0x2499 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2499 - ,simpleLowerCaseMapping:0x2499 - ,simpleTitleCaseMapping:0x2499 - }, - { code:0x249A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x249A - ,simpleLowerCaseMapping:0x249A - ,simpleTitleCaseMapping:0x249A - }, - { code:0x249B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x249B - ,simpleLowerCaseMapping:0x249B - ,simpleTitleCaseMapping:0x249B - }, - { code:0x249C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x249C - ,simpleLowerCaseMapping:0x249C - ,simpleTitleCaseMapping:0x249C - }, - { code:0x249D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x249D - ,simpleLowerCaseMapping:0x249D - ,simpleTitleCaseMapping:0x249D - }, - { code:0x249E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x249E - ,simpleLowerCaseMapping:0x249E - ,simpleTitleCaseMapping:0x249E - }, - { code:0x249F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x249F - ,simpleLowerCaseMapping:0x249F - ,simpleTitleCaseMapping:0x249F - }, - { code:0x24A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A0 - ,simpleLowerCaseMapping:0x24A0 - ,simpleTitleCaseMapping:0x24A0 - }, - { code:0x24A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A1 - ,simpleLowerCaseMapping:0x24A1 - ,simpleTitleCaseMapping:0x24A1 - }, - { code:0x24A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A2 - ,simpleLowerCaseMapping:0x24A2 - ,simpleTitleCaseMapping:0x24A2 - }, - { code:0x24A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A3 - ,simpleLowerCaseMapping:0x24A3 - ,simpleTitleCaseMapping:0x24A3 - }, - { code:0x24A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A4 - ,simpleLowerCaseMapping:0x24A4 - ,simpleTitleCaseMapping:0x24A4 - }, - { code:0x24A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A5 - ,simpleLowerCaseMapping:0x24A5 - ,simpleTitleCaseMapping:0x24A5 - }, - { code:0x24A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A6 - ,simpleLowerCaseMapping:0x24A6 - ,simpleTitleCaseMapping:0x24A6 - }, - { code:0x24A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A7 - ,simpleLowerCaseMapping:0x24A7 - ,simpleTitleCaseMapping:0x24A7 - }, - { code:0x24A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A8 - ,simpleLowerCaseMapping:0x24A8 - ,simpleTitleCaseMapping:0x24A8 - }, - { code:0x24A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24A9 - ,simpleLowerCaseMapping:0x24A9 - ,simpleTitleCaseMapping:0x24A9 - }, - { code:0x24AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AA - ,simpleLowerCaseMapping:0x24AA - ,simpleTitleCaseMapping:0x24AA - }, - { code:0x24AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AB - ,simpleLowerCaseMapping:0x24AB - ,simpleTitleCaseMapping:0x24AB - }, - { code:0x24AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AC - ,simpleLowerCaseMapping:0x24AC - ,simpleTitleCaseMapping:0x24AC - }, - { code:0x24AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AD - ,simpleLowerCaseMapping:0x24AD - ,simpleTitleCaseMapping:0x24AD - }, - { code:0x24AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AE - ,simpleLowerCaseMapping:0x24AE - ,simpleTitleCaseMapping:0x24AE - }, - { code:0x24AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24AF - ,simpleLowerCaseMapping:0x24AF - ,simpleTitleCaseMapping:0x24AF - }, - { code:0x24B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B0 - ,simpleLowerCaseMapping:0x24B0 - ,simpleTitleCaseMapping:0x24B0 - }, - { code:0x24B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B1 - ,simpleLowerCaseMapping:0x24B1 - ,simpleTitleCaseMapping:0x24B1 - }, - { code:0x24B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B2 - ,simpleLowerCaseMapping:0x24B2 - ,simpleTitleCaseMapping:0x24B2 - }, - { code:0x24B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B3 - ,simpleLowerCaseMapping:0x24B3 - ,simpleTitleCaseMapping:0x24B3 - }, - { code:0x24B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B4 - ,simpleLowerCaseMapping:0x24B4 - ,simpleTitleCaseMapping:0x24B4 - }, - { code:0x24B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B5 - ,simpleLowerCaseMapping:0x24B5 - ,simpleTitleCaseMapping:0x24B5 - }, - { code:0x24B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B6 - ,simpleLowerCaseMapping:0x24D0 - ,simpleTitleCaseMapping:0x24B6 - }, - { code:0x24B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B7 - ,simpleLowerCaseMapping:0x24D1 - ,simpleTitleCaseMapping:0x24B7 - }, - { code:0x24B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B8 - ,simpleLowerCaseMapping:0x24D2 - ,simpleTitleCaseMapping:0x24B8 - }, - { code:0x24B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B9 - ,simpleLowerCaseMapping:0x24D3 - ,simpleTitleCaseMapping:0x24B9 - }, - { code:0x24BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BA - ,simpleLowerCaseMapping:0x24D4 - ,simpleTitleCaseMapping:0x24BA - }, - { code:0x24BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BB - ,simpleLowerCaseMapping:0x24D5 - ,simpleTitleCaseMapping:0x24BB - }, - { code:0x24BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BC - ,simpleLowerCaseMapping:0x24D6 - ,simpleTitleCaseMapping:0x24BC - }, - { code:0x24BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BD - ,simpleLowerCaseMapping:0x24D7 - ,simpleTitleCaseMapping:0x24BD - }, - { code:0x24BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BE - ,simpleLowerCaseMapping:0x24D8 - ,simpleTitleCaseMapping:0x24BE - }, - { code:0x24BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BF - ,simpleLowerCaseMapping:0x24D9 - ,simpleTitleCaseMapping:0x24BF - }, - { code:0x24C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C0 - ,simpleLowerCaseMapping:0x24DA - ,simpleTitleCaseMapping:0x24C0 - }, - { code:0x24C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C1 - ,simpleLowerCaseMapping:0x24DB - ,simpleTitleCaseMapping:0x24C1 - }, - { code:0x24C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C2 - ,simpleLowerCaseMapping:0x24DC - ,simpleTitleCaseMapping:0x24C2 - }, - { code:0x24C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C3 - ,simpleLowerCaseMapping:0x24DD - ,simpleTitleCaseMapping:0x24C3 - }, - { code:0x24C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C4 - ,simpleLowerCaseMapping:0x24DE - ,simpleTitleCaseMapping:0x24C4 - }, - { code:0x24C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C5 - ,simpleLowerCaseMapping:0x24DF - ,simpleTitleCaseMapping:0x24C5 - }, - { code:0x24C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C6 - ,simpleLowerCaseMapping:0x24E0 - ,simpleTitleCaseMapping:0x24C6 - }, - { code:0x24C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C7 - ,simpleLowerCaseMapping:0x24E1 - ,simpleTitleCaseMapping:0x24C7 - }, - { code:0x24C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C8 - ,simpleLowerCaseMapping:0x24E2 - ,simpleTitleCaseMapping:0x24C8 - }, - { code:0x24C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C9 - ,simpleLowerCaseMapping:0x24E3 - ,simpleTitleCaseMapping:0x24C9 - }, - { code:0x24CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CA - ,simpleLowerCaseMapping:0x24E4 - ,simpleTitleCaseMapping:0x24CA - }, - { code:0x24CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CB - ,simpleLowerCaseMapping:0x24E5 - ,simpleTitleCaseMapping:0x24CB - }, - { code:0x24CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CC - ,simpleLowerCaseMapping:0x24E6 - ,simpleTitleCaseMapping:0x24CC - }, - { code:0x24CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CD - ,simpleLowerCaseMapping:0x24E7 - ,simpleTitleCaseMapping:0x24CD - }, - { code:0x24CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CE - ,simpleLowerCaseMapping:0x24E8 - ,simpleTitleCaseMapping:0x24CE - }, - { code:0x24CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CF - ,simpleLowerCaseMapping:0x24E9 - ,simpleTitleCaseMapping:0x24CF - }, - { code:0x24D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B6 - ,simpleLowerCaseMapping:0x24D0 - ,simpleTitleCaseMapping:0x24B6 - }, - { code:0x24D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B7 - ,simpleLowerCaseMapping:0x24D1 - ,simpleTitleCaseMapping:0x24B7 - }, - { code:0x24D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B8 - ,simpleLowerCaseMapping:0x24D2 - ,simpleTitleCaseMapping:0x24B8 - }, - { code:0x24D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24B9 - ,simpleLowerCaseMapping:0x24D3 - ,simpleTitleCaseMapping:0x24B9 - }, - { code:0x24D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BA - ,simpleLowerCaseMapping:0x24D4 - ,simpleTitleCaseMapping:0x24BA - }, - { code:0x24D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BB - ,simpleLowerCaseMapping:0x24D5 - ,simpleTitleCaseMapping:0x24BB - }, - { code:0x24D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BC - ,simpleLowerCaseMapping:0x24D6 - ,simpleTitleCaseMapping:0x24BC - }, - { code:0x24D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BD - ,simpleLowerCaseMapping:0x24D7 - ,simpleTitleCaseMapping:0x24BD - }, - { code:0x24D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BE - ,simpleLowerCaseMapping:0x24D8 - ,simpleTitleCaseMapping:0x24BE - }, - { code:0x24D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24BF - ,simpleLowerCaseMapping:0x24D9 - ,simpleTitleCaseMapping:0x24BF - }, - { code:0x24DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C0 - ,simpleLowerCaseMapping:0x24DA - ,simpleTitleCaseMapping:0x24C0 - }, - { code:0x24DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C1 - ,simpleLowerCaseMapping:0x24DB - ,simpleTitleCaseMapping:0x24C1 - }, - { code:0x24DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C2 - ,simpleLowerCaseMapping:0x24DC - ,simpleTitleCaseMapping:0x24C2 - }, - { code:0x24DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C3 - ,simpleLowerCaseMapping:0x24DD - ,simpleTitleCaseMapping:0x24C3 - }, - { code:0x24DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C4 - ,simpleLowerCaseMapping:0x24DE - ,simpleTitleCaseMapping:0x24C4 - }, - { code:0x24DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C5 - ,simpleLowerCaseMapping:0x24DF - ,simpleTitleCaseMapping:0x24C5 - }, - { code:0x24E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C6 - ,simpleLowerCaseMapping:0x24E0 - ,simpleTitleCaseMapping:0x24C6 - }, - { code:0x24E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C7 - ,simpleLowerCaseMapping:0x24E1 - ,simpleTitleCaseMapping:0x24C7 - }, - { code:0x24E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C8 - ,simpleLowerCaseMapping:0x24E2 - ,simpleTitleCaseMapping:0x24C8 - }, - { code:0x24E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24C9 - ,simpleLowerCaseMapping:0x24E3 - ,simpleTitleCaseMapping:0x24C9 - }, - { code:0x24E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CA - ,simpleLowerCaseMapping:0x24E4 - ,simpleTitleCaseMapping:0x24CA - }, - { code:0x24E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CB - ,simpleLowerCaseMapping:0x24E5 - ,simpleTitleCaseMapping:0x24CB - }, - { code:0x24E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CC - ,simpleLowerCaseMapping:0x24E6 - ,simpleTitleCaseMapping:0x24CC - }, - { code:0x24E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CD - ,simpleLowerCaseMapping:0x24E7 - ,simpleTitleCaseMapping:0x24CD - }, - { code:0x24E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CE - ,simpleLowerCaseMapping:0x24E8 - ,simpleTitleCaseMapping:0x24CE - }, - { code:0x24E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x24CF - ,simpleLowerCaseMapping:0x24E9 - ,simpleTitleCaseMapping:0x24CF - }, - { code:0x24EA - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24EA - ,simpleLowerCaseMapping:0x24EA - ,simpleTitleCaseMapping:0x24EA - }, - { code:0x24EB - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24EB - ,simpleLowerCaseMapping:0x24EB - ,simpleTitleCaseMapping:0x24EB - }, - { code:0x24EC - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24EC - ,simpleLowerCaseMapping:0x24EC - ,simpleTitleCaseMapping:0x24EC - }, - { code:0x24ED - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24ED - ,simpleLowerCaseMapping:0x24ED - ,simpleTitleCaseMapping:0x24ED - }, - { code:0x24EE - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24EE - ,simpleLowerCaseMapping:0x24EE - ,simpleTitleCaseMapping:0x24EE - }, - { code:0x24EF - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24EF - ,simpleLowerCaseMapping:0x24EF - ,simpleTitleCaseMapping:0x24EF - }, - { code:0x24F0 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F0 - ,simpleLowerCaseMapping:0x24F0 - ,simpleTitleCaseMapping:0x24F0 - }, - { code:0x24F1 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F1 - ,simpleLowerCaseMapping:0x24F1 - ,simpleTitleCaseMapping:0x24F1 - }, - { code:0x24F2 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F2 - ,simpleLowerCaseMapping:0x24F2 - ,simpleTitleCaseMapping:0x24F2 - }, - { code:0x24F3 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F3 - ,simpleLowerCaseMapping:0x24F3 - ,simpleTitleCaseMapping:0x24F3 - }, - { code:0x24F4 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F4 - ,simpleLowerCaseMapping:0x24F4 - ,simpleTitleCaseMapping:0x24F4 - }, - { code:0x24F5 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F5 - ,simpleLowerCaseMapping:0x24F5 - ,simpleTitleCaseMapping:0x24F5 - }, - { code:0x24F6 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F6 - ,simpleLowerCaseMapping:0x24F6 - ,simpleTitleCaseMapping:0x24F6 - }, - { code:0x24F7 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F7 - ,simpleLowerCaseMapping:0x24F7 - ,simpleTitleCaseMapping:0x24F7 - }, - { code:0x24F8 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F8 - ,simpleLowerCaseMapping:0x24F8 - ,simpleTitleCaseMapping:0x24F8 - }, - { code:0x24F9 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24F9 - ,simpleLowerCaseMapping:0x24F9 - ,simpleTitleCaseMapping:0x24F9 - }, - { code:0x24FA - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FA - ,simpleLowerCaseMapping:0x24FA - ,simpleTitleCaseMapping:0x24FA - }, - { code:0x24FB - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FB - ,simpleLowerCaseMapping:0x24FB - ,simpleTitleCaseMapping:0x24FB - }, - { code:0x24FC - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FC - ,simpleLowerCaseMapping:0x24FC - ,simpleTitleCaseMapping:0x24FC - }, - { code:0x24FD - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FD - ,simpleLowerCaseMapping:0x24FD - ,simpleTitleCaseMapping:0x24FD - }, - { code:0x24FE - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FE - ,simpleLowerCaseMapping:0x24FE - ,simpleTitleCaseMapping:0x24FE - }, - { code:0x24FF - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x24FF - ,simpleLowerCaseMapping:0x24FF - ,simpleTitleCaseMapping:0x24FF - }, - { code:0x2500 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2500 - ,simpleLowerCaseMapping:0x2500 - ,simpleTitleCaseMapping:0x2500 - }, - { code:0x2501 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2501 - ,simpleLowerCaseMapping:0x2501 - ,simpleTitleCaseMapping:0x2501 - }, - { code:0x2502 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2502 - ,simpleLowerCaseMapping:0x2502 - ,simpleTitleCaseMapping:0x2502 - }, - { code:0x2503 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2503 - ,simpleLowerCaseMapping:0x2503 - ,simpleTitleCaseMapping:0x2503 - }, - { code:0x2504 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2504 - ,simpleLowerCaseMapping:0x2504 - ,simpleTitleCaseMapping:0x2504 - }, - { code:0x2505 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2505 - ,simpleLowerCaseMapping:0x2505 - ,simpleTitleCaseMapping:0x2505 - }, - { code:0x2506 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2506 - ,simpleLowerCaseMapping:0x2506 - ,simpleTitleCaseMapping:0x2506 - }, - { code:0x2507 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2507 - ,simpleLowerCaseMapping:0x2507 - ,simpleTitleCaseMapping:0x2507 - }, - { code:0x2508 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2508 - ,simpleLowerCaseMapping:0x2508 - ,simpleTitleCaseMapping:0x2508 - }, - { code:0x2509 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2509 - ,simpleLowerCaseMapping:0x2509 - ,simpleTitleCaseMapping:0x2509 - }, - { code:0x250A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250A - ,simpleLowerCaseMapping:0x250A - ,simpleTitleCaseMapping:0x250A - }, - { code:0x250B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250B - ,simpleLowerCaseMapping:0x250B - ,simpleTitleCaseMapping:0x250B - }, - { code:0x250C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250C - ,simpleLowerCaseMapping:0x250C - ,simpleTitleCaseMapping:0x250C - }, - { code:0x250D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250D - ,simpleLowerCaseMapping:0x250D - ,simpleTitleCaseMapping:0x250D - }, - { code:0x250E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250E - ,simpleLowerCaseMapping:0x250E - ,simpleTitleCaseMapping:0x250E - }, - { code:0x250F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x250F - ,simpleLowerCaseMapping:0x250F - ,simpleTitleCaseMapping:0x250F - }, - { code:0x2510 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2510 - ,simpleLowerCaseMapping:0x2510 - ,simpleTitleCaseMapping:0x2510 - }, - { code:0x2511 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2511 - ,simpleLowerCaseMapping:0x2511 - ,simpleTitleCaseMapping:0x2511 - }, - { code:0x2512 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2512 - ,simpleLowerCaseMapping:0x2512 - ,simpleTitleCaseMapping:0x2512 - }, - { code:0x2513 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2513 - ,simpleLowerCaseMapping:0x2513 - ,simpleTitleCaseMapping:0x2513 - }, - { code:0x2514 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2514 - ,simpleLowerCaseMapping:0x2514 - ,simpleTitleCaseMapping:0x2514 - }, - { code:0x2515 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2515 - ,simpleLowerCaseMapping:0x2515 - ,simpleTitleCaseMapping:0x2515 - }, - { code:0x2516 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2516 - ,simpleLowerCaseMapping:0x2516 - ,simpleTitleCaseMapping:0x2516 - }, - { code:0x2517 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2517 - ,simpleLowerCaseMapping:0x2517 - ,simpleTitleCaseMapping:0x2517 - }, - { code:0x2518 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2518 - ,simpleLowerCaseMapping:0x2518 - ,simpleTitleCaseMapping:0x2518 - }, - { code:0x2519 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2519 - ,simpleLowerCaseMapping:0x2519 - ,simpleTitleCaseMapping:0x2519 - }, - { code:0x251A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251A - ,simpleLowerCaseMapping:0x251A - ,simpleTitleCaseMapping:0x251A - }, - { code:0x251B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251B - ,simpleLowerCaseMapping:0x251B - ,simpleTitleCaseMapping:0x251B - }, - { code:0x251C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251C - ,simpleLowerCaseMapping:0x251C - ,simpleTitleCaseMapping:0x251C - }, - { code:0x251D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251D - ,simpleLowerCaseMapping:0x251D - ,simpleTitleCaseMapping:0x251D - }, - { code:0x251E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251E - ,simpleLowerCaseMapping:0x251E - ,simpleTitleCaseMapping:0x251E - }, - { code:0x251F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x251F - ,simpleLowerCaseMapping:0x251F - ,simpleTitleCaseMapping:0x251F - }, - { code:0x2520 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2520 - ,simpleLowerCaseMapping:0x2520 - ,simpleTitleCaseMapping:0x2520 - }, - { code:0x2521 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2521 - ,simpleLowerCaseMapping:0x2521 - ,simpleTitleCaseMapping:0x2521 - }, - { code:0x2522 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2522 - ,simpleLowerCaseMapping:0x2522 - ,simpleTitleCaseMapping:0x2522 - }, - { code:0x2523 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2523 - ,simpleLowerCaseMapping:0x2523 - ,simpleTitleCaseMapping:0x2523 - }, - { code:0x2524 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2524 - ,simpleLowerCaseMapping:0x2524 - ,simpleTitleCaseMapping:0x2524 - }, - { code:0x2525 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2525 - ,simpleLowerCaseMapping:0x2525 - ,simpleTitleCaseMapping:0x2525 - }, - { code:0x2526 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2526 - ,simpleLowerCaseMapping:0x2526 - ,simpleTitleCaseMapping:0x2526 - }, - { code:0x2527 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2527 - ,simpleLowerCaseMapping:0x2527 - ,simpleTitleCaseMapping:0x2527 - }, - { code:0x2528 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2528 - ,simpleLowerCaseMapping:0x2528 - ,simpleTitleCaseMapping:0x2528 - }, - { code:0x2529 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2529 - ,simpleLowerCaseMapping:0x2529 - ,simpleTitleCaseMapping:0x2529 - }, - { code:0x252A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252A - ,simpleLowerCaseMapping:0x252A - ,simpleTitleCaseMapping:0x252A - }, - { code:0x252B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252B - ,simpleLowerCaseMapping:0x252B - ,simpleTitleCaseMapping:0x252B - }, - { code:0x252C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252C - ,simpleLowerCaseMapping:0x252C - ,simpleTitleCaseMapping:0x252C - }, - { code:0x252D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252D - ,simpleLowerCaseMapping:0x252D - ,simpleTitleCaseMapping:0x252D - }, - { code:0x252E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252E - ,simpleLowerCaseMapping:0x252E - ,simpleTitleCaseMapping:0x252E - }, - { code:0x252F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x252F - ,simpleLowerCaseMapping:0x252F - ,simpleTitleCaseMapping:0x252F - }, - { code:0x2530 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2530 - ,simpleLowerCaseMapping:0x2530 - ,simpleTitleCaseMapping:0x2530 - }, - { code:0x2531 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2531 - ,simpleLowerCaseMapping:0x2531 - ,simpleTitleCaseMapping:0x2531 - }, - { code:0x2532 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2532 - ,simpleLowerCaseMapping:0x2532 - ,simpleTitleCaseMapping:0x2532 - }, - { code:0x2533 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2533 - ,simpleLowerCaseMapping:0x2533 - ,simpleTitleCaseMapping:0x2533 - }, - { code:0x2534 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2534 - ,simpleLowerCaseMapping:0x2534 - ,simpleTitleCaseMapping:0x2534 - }, - { code:0x2535 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2535 - ,simpleLowerCaseMapping:0x2535 - ,simpleTitleCaseMapping:0x2535 - }, - { code:0x2536 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2536 - ,simpleLowerCaseMapping:0x2536 - ,simpleTitleCaseMapping:0x2536 - }, - { code:0x2537 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2537 - ,simpleLowerCaseMapping:0x2537 - ,simpleTitleCaseMapping:0x2537 - }, - { code:0x2538 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2538 - ,simpleLowerCaseMapping:0x2538 - ,simpleTitleCaseMapping:0x2538 - }, - { code:0x2539 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2539 - ,simpleLowerCaseMapping:0x2539 - ,simpleTitleCaseMapping:0x2539 - }, - { code:0x253A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253A - ,simpleLowerCaseMapping:0x253A - ,simpleTitleCaseMapping:0x253A - }, - { code:0x253B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253B - ,simpleLowerCaseMapping:0x253B - ,simpleTitleCaseMapping:0x253B - }, - { code:0x253C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253C - ,simpleLowerCaseMapping:0x253C - ,simpleTitleCaseMapping:0x253C - }, - { code:0x253D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253D - ,simpleLowerCaseMapping:0x253D - ,simpleTitleCaseMapping:0x253D - }, - { code:0x253E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253E - ,simpleLowerCaseMapping:0x253E - ,simpleTitleCaseMapping:0x253E - }, - { code:0x253F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x253F - ,simpleLowerCaseMapping:0x253F - ,simpleTitleCaseMapping:0x253F - }, - { code:0x2540 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2540 - ,simpleLowerCaseMapping:0x2540 - ,simpleTitleCaseMapping:0x2540 - }, - { code:0x2541 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2541 - ,simpleLowerCaseMapping:0x2541 - ,simpleTitleCaseMapping:0x2541 - }, - { code:0x2542 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2542 - ,simpleLowerCaseMapping:0x2542 - ,simpleTitleCaseMapping:0x2542 - }, - { code:0x2543 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2543 - ,simpleLowerCaseMapping:0x2543 - ,simpleTitleCaseMapping:0x2543 - }, - { code:0x2544 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2544 - ,simpleLowerCaseMapping:0x2544 - ,simpleTitleCaseMapping:0x2544 - }, - { code:0x2545 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2545 - ,simpleLowerCaseMapping:0x2545 - ,simpleTitleCaseMapping:0x2545 - }, - { code:0x2546 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2546 - ,simpleLowerCaseMapping:0x2546 - ,simpleTitleCaseMapping:0x2546 - }, - { code:0x2547 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2547 - ,simpleLowerCaseMapping:0x2547 - ,simpleTitleCaseMapping:0x2547 - }, - { code:0x2548 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2548 - ,simpleLowerCaseMapping:0x2548 - ,simpleTitleCaseMapping:0x2548 - }, - { code:0x2549 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2549 - ,simpleLowerCaseMapping:0x2549 - ,simpleTitleCaseMapping:0x2549 - }, - { code:0x254A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254A - ,simpleLowerCaseMapping:0x254A - ,simpleTitleCaseMapping:0x254A - }, - { code:0x254B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254B - ,simpleLowerCaseMapping:0x254B - ,simpleTitleCaseMapping:0x254B - }, - { code:0x254C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254C - ,simpleLowerCaseMapping:0x254C - ,simpleTitleCaseMapping:0x254C - }, - { code:0x254D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254D - ,simpleLowerCaseMapping:0x254D - ,simpleTitleCaseMapping:0x254D - }, - { code:0x254E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254E - ,simpleLowerCaseMapping:0x254E - ,simpleTitleCaseMapping:0x254E - }, - { code:0x254F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x254F - ,simpleLowerCaseMapping:0x254F - ,simpleTitleCaseMapping:0x254F - }, - { code:0x2550 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2550 - ,simpleLowerCaseMapping:0x2550 - ,simpleTitleCaseMapping:0x2550 - }, - { code:0x2551 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2551 - ,simpleLowerCaseMapping:0x2551 - ,simpleTitleCaseMapping:0x2551 - }, - { code:0x2552 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2552 - ,simpleLowerCaseMapping:0x2552 - ,simpleTitleCaseMapping:0x2552 - }, - { code:0x2553 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2553 - ,simpleLowerCaseMapping:0x2553 - ,simpleTitleCaseMapping:0x2553 - }, - { code:0x2554 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2554 - ,simpleLowerCaseMapping:0x2554 - ,simpleTitleCaseMapping:0x2554 - }, - { code:0x2555 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2555 - ,simpleLowerCaseMapping:0x2555 - ,simpleTitleCaseMapping:0x2555 - }, - { code:0x2556 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2556 - ,simpleLowerCaseMapping:0x2556 - ,simpleTitleCaseMapping:0x2556 - }, - { code:0x2557 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2557 - ,simpleLowerCaseMapping:0x2557 - ,simpleTitleCaseMapping:0x2557 - }, - { code:0x2558 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2558 - ,simpleLowerCaseMapping:0x2558 - ,simpleTitleCaseMapping:0x2558 - }, - { code:0x2559 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2559 - ,simpleLowerCaseMapping:0x2559 - ,simpleTitleCaseMapping:0x2559 - }, - { code:0x255A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255A - ,simpleLowerCaseMapping:0x255A - ,simpleTitleCaseMapping:0x255A - }, - { code:0x255B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255B - ,simpleLowerCaseMapping:0x255B - ,simpleTitleCaseMapping:0x255B - }, - { code:0x255C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255C - ,simpleLowerCaseMapping:0x255C - ,simpleTitleCaseMapping:0x255C - }, - { code:0x255D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255D - ,simpleLowerCaseMapping:0x255D - ,simpleTitleCaseMapping:0x255D - }, - { code:0x255E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255E - ,simpleLowerCaseMapping:0x255E - ,simpleTitleCaseMapping:0x255E - }, - { code:0x255F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x255F - ,simpleLowerCaseMapping:0x255F - ,simpleTitleCaseMapping:0x255F - }, - { code:0x2560 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2560 - ,simpleLowerCaseMapping:0x2560 - ,simpleTitleCaseMapping:0x2560 - }, - { code:0x2561 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2561 - ,simpleLowerCaseMapping:0x2561 - ,simpleTitleCaseMapping:0x2561 - }, - { code:0x2562 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2562 - ,simpleLowerCaseMapping:0x2562 - ,simpleTitleCaseMapping:0x2562 - }, - { code:0x2563 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2563 - ,simpleLowerCaseMapping:0x2563 - ,simpleTitleCaseMapping:0x2563 - }, - { code:0x2564 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2564 - ,simpleLowerCaseMapping:0x2564 - ,simpleTitleCaseMapping:0x2564 - }, - { code:0x2565 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2565 - ,simpleLowerCaseMapping:0x2565 - ,simpleTitleCaseMapping:0x2565 - }, - { code:0x2566 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2566 - ,simpleLowerCaseMapping:0x2566 - ,simpleTitleCaseMapping:0x2566 - }, - { code:0x2567 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2567 - ,simpleLowerCaseMapping:0x2567 - ,simpleTitleCaseMapping:0x2567 - }, - { code:0x2568 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2568 - ,simpleLowerCaseMapping:0x2568 - ,simpleTitleCaseMapping:0x2568 - }, - { code:0x2569 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2569 - ,simpleLowerCaseMapping:0x2569 - ,simpleTitleCaseMapping:0x2569 - }, - { code:0x256A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256A - ,simpleLowerCaseMapping:0x256A - ,simpleTitleCaseMapping:0x256A - }, - { code:0x256B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256B - ,simpleLowerCaseMapping:0x256B - ,simpleTitleCaseMapping:0x256B - }, - { code:0x256C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256C - ,simpleLowerCaseMapping:0x256C - ,simpleTitleCaseMapping:0x256C - }, - { code:0x256D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256D - ,simpleLowerCaseMapping:0x256D - ,simpleTitleCaseMapping:0x256D - }, - { code:0x256E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256E - ,simpleLowerCaseMapping:0x256E - ,simpleTitleCaseMapping:0x256E - }, - { code:0x256F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x256F - ,simpleLowerCaseMapping:0x256F - ,simpleTitleCaseMapping:0x256F - }, - { code:0x2570 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2570 - ,simpleLowerCaseMapping:0x2570 - ,simpleTitleCaseMapping:0x2570 - }, - { code:0x2571 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2571 - ,simpleLowerCaseMapping:0x2571 - ,simpleTitleCaseMapping:0x2571 - }, - { code:0x2572 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2572 - ,simpleLowerCaseMapping:0x2572 - ,simpleTitleCaseMapping:0x2572 - }, - { code:0x2573 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2573 - ,simpleLowerCaseMapping:0x2573 - ,simpleTitleCaseMapping:0x2573 - }, - { code:0x2574 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2574 - ,simpleLowerCaseMapping:0x2574 - ,simpleTitleCaseMapping:0x2574 - }, - { code:0x2575 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2575 - ,simpleLowerCaseMapping:0x2575 - ,simpleTitleCaseMapping:0x2575 - }, - { code:0x2576 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2576 - ,simpleLowerCaseMapping:0x2576 - ,simpleTitleCaseMapping:0x2576 - }, - { code:0x2577 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2577 - ,simpleLowerCaseMapping:0x2577 - ,simpleTitleCaseMapping:0x2577 - }, - { code:0x2578 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2578 - ,simpleLowerCaseMapping:0x2578 - ,simpleTitleCaseMapping:0x2578 - }, - { code:0x2579 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2579 - ,simpleLowerCaseMapping:0x2579 - ,simpleTitleCaseMapping:0x2579 - }, - { code:0x257A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257A - ,simpleLowerCaseMapping:0x257A - ,simpleTitleCaseMapping:0x257A - }, - { code:0x257B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257B - ,simpleLowerCaseMapping:0x257B - ,simpleTitleCaseMapping:0x257B - }, - { code:0x257C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257C - ,simpleLowerCaseMapping:0x257C - ,simpleTitleCaseMapping:0x257C - }, - { code:0x257D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257D - ,simpleLowerCaseMapping:0x257D - ,simpleTitleCaseMapping:0x257D - }, - { code:0x257E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257E - ,simpleLowerCaseMapping:0x257E - ,simpleTitleCaseMapping:0x257E - }, - { code:0x257F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x257F - ,simpleLowerCaseMapping:0x257F - ,simpleTitleCaseMapping:0x257F - }, - { code:0x2580 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2580 - ,simpleLowerCaseMapping:0x2580 - ,simpleTitleCaseMapping:0x2580 - }, - { code:0x2581 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2581 - ,simpleLowerCaseMapping:0x2581 - ,simpleTitleCaseMapping:0x2581 - }, - { code:0x2582 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2582 - ,simpleLowerCaseMapping:0x2582 - ,simpleTitleCaseMapping:0x2582 - }, - { code:0x2583 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2583 - ,simpleLowerCaseMapping:0x2583 - ,simpleTitleCaseMapping:0x2583 - }, - { code:0x2584 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2584 - ,simpleLowerCaseMapping:0x2584 - ,simpleTitleCaseMapping:0x2584 - }, - { code:0x2585 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2585 - ,simpleLowerCaseMapping:0x2585 - ,simpleTitleCaseMapping:0x2585 - }, - { code:0x2586 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2586 - ,simpleLowerCaseMapping:0x2586 - ,simpleTitleCaseMapping:0x2586 - }, - { code:0x2587 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2587 - ,simpleLowerCaseMapping:0x2587 - ,simpleTitleCaseMapping:0x2587 - }, - { code:0x2588 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2588 - ,simpleLowerCaseMapping:0x2588 - ,simpleTitleCaseMapping:0x2588 - }, - { code:0x2589 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2589 - ,simpleLowerCaseMapping:0x2589 - ,simpleTitleCaseMapping:0x2589 - }, - { code:0x258A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258A - ,simpleLowerCaseMapping:0x258A - ,simpleTitleCaseMapping:0x258A - }, - { code:0x258B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258B - ,simpleLowerCaseMapping:0x258B - ,simpleTitleCaseMapping:0x258B - }, - { code:0x258C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258C - ,simpleLowerCaseMapping:0x258C - ,simpleTitleCaseMapping:0x258C - }, - { code:0x258D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258D - ,simpleLowerCaseMapping:0x258D - ,simpleTitleCaseMapping:0x258D - }, - { code:0x258E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258E - ,simpleLowerCaseMapping:0x258E - ,simpleTitleCaseMapping:0x258E - }, - { code:0x258F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x258F - ,simpleLowerCaseMapping:0x258F - ,simpleTitleCaseMapping:0x258F - }, - { code:0x2590 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2590 - ,simpleLowerCaseMapping:0x2590 - ,simpleTitleCaseMapping:0x2590 - }, - { code:0x2591 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2591 - ,simpleLowerCaseMapping:0x2591 - ,simpleTitleCaseMapping:0x2591 - }, - { code:0x2592 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2592 - ,simpleLowerCaseMapping:0x2592 - ,simpleTitleCaseMapping:0x2592 - }, - { code:0x2593 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2593 - ,simpleLowerCaseMapping:0x2593 - ,simpleTitleCaseMapping:0x2593 - }, - { code:0x2594 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2594 - ,simpleLowerCaseMapping:0x2594 - ,simpleTitleCaseMapping:0x2594 - }, - { code:0x2595 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2595 - ,simpleLowerCaseMapping:0x2595 - ,simpleTitleCaseMapping:0x2595 - }, - { code:0x2596 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2596 - ,simpleLowerCaseMapping:0x2596 - ,simpleTitleCaseMapping:0x2596 - }, - { code:0x2597 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2597 - ,simpleLowerCaseMapping:0x2597 - ,simpleTitleCaseMapping:0x2597 - }, - { code:0x2598 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2598 - ,simpleLowerCaseMapping:0x2598 - ,simpleTitleCaseMapping:0x2598 - }, - { code:0x2599 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2599 - ,simpleLowerCaseMapping:0x2599 - ,simpleTitleCaseMapping:0x2599 - }, - { code:0x259A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259A - ,simpleLowerCaseMapping:0x259A - ,simpleTitleCaseMapping:0x259A - }, - { code:0x259B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259B - ,simpleLowerCaseMapping:0x259B - ,simpleTitleCaseMapping:0x259B - }, - { code:0x259C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259C - ,simpleLowerCaseMapping:0x259C - ,simpleTitleCaseMapping:0x259C - }, - { code:0x259D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259D - ,simpleLowerCaseMapping:0x259D - ,simpleTitleCaseMapping:0x259D - }, - { code:0x259E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259E - ,simpleLowerCaseMapping:0x259E - ,simpleTitleCaseMapping:0x259E - }, - { code:0x259F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x259F - ,simpleLowerCaseMapping:0x259F - ,simpleTitleCaseMapping:0x259F - }, - { code:0x25A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A0 - ,simpleLowerCaseMapping:0x25A0 - ,simpleTitleCaseMapping:0x25A0 - }, - { code:0x25A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A1 - ,simpleLowerCaseMapping:0x25A1 - ,simpleTitleCaseMapping:0x25A1 - }, - { code:0x25A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A2 - ,simpleLowerCaseMapping:0x25A2 - ,simpleTitleCaseMapping:0x25A2 - }, - { code:0x25A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A3 - ,simpleLowerCaseMapping:0x25A3 - ,simpleTitleCaseMapping:0x25A3 - }, - { code:0x25A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A4 - ,simpleLowerCaseMapping:0x25A4 - ,simpleTitleCaseMapping:0x25A4 - }, - { code:0x25A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A5 - ,simpleLowerCaseMapping:0x25A5 - ,simpleTitleCaseMapping:0x25A5 - }, - { code:0x25A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A6 - ,simpleLowerCaseMapping:0x25A6 - ,simpleTitleCaseMapping:0x25A6 - }, - { code:0x25A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A7 - ,simpleLowerCaseMapping:0x25A7 - ,simpleTitleCaseMapping:0x25A7 - }, - { code:0x25A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A8 - ,simpleLowerCaseMapping:0x25A8 - ,simpleTitleCaseMapping:0x25A8 - }, - { code:0x25A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25A9 - ,simpleLowerCaseMapping:0x25A9 - ,simpleTitleCaseMapping:0x25A9 - }, - { code:0x25AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AA - ,simpleLowerCaseMapping:0x25AA - ,simpleTitleCaseMapping:0x25AA - }, - { code:0x25AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AB - ,simpleLowerCaseMapping:0x25AB - ,simpleTitleCaseMapping:0x25AB - }, - { code:0x25AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AC - ,simpleLowerCaseMapping:0x25AC - ,simpleTitleCaseMapping:0x25AC - }, - { code:0x25AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AD - ,simpleLowerCaseMapping:0x25AD - ,simpleTitleCaseMapping:0x25AD - }, - { code:0x25AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AE - ,simpleLowerCaseMapping:0x25AE - ,simpleTitleCaseMapping:0x25AE - }, - { code:0x25AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25AF - ,simpleLowerCaseMapping:0x25AF - ,simpleTitleCaseMapping:0x25AF - }, - { code:0x25B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B0 - ,simpleLowerCaseMapping:0x25B0 - ,simpleTitleCaseMapping:0x25B0 - }, - { code:0x25B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B1 - ,simpleLowerCaseMapping:0x25B1 - ,simpleTitleCaseMapping:0x25B1 - }, - { code:0x25B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B2 - ,simpleLowerCaseMapping:0x25B2 - ,simpleTitleCaseMapping:0x25B2 - }, - { code:0x25B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B3 - ,simpleLowerCaseMapping:0x25B3 - ,simpleTitleCaseMapping:0x25B3 - }, - { code:0x25B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B4 - ,simpleLowerCaseMapping:0x25B4 - ,simpleTitleCaseMapping:0x25B4 - }, - { code:0x25B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B5 - ,simpleLowerCaseMapping:0x25B5 - ,simpleTitleCaseMapping:0x25B5 - }, - { code:0x25B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B6 - ,simpleLowerCaseMapping:0x25B6 - ,simpleTitleCaseMapping:0x25B6 - }, - { code:0x25B7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25B7 - ,simpleLowerCaseMapping:0x25B7 - ,simpleTitleCaseMapping:0x25B7 - }, - { code:0x25B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B8 - ,simpleLowerCaseMapping:0x25B8 - ,simpleTitleCaseMapping:0x25B8 - }, - { code:0x25B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25B9 - ,simpleLowerCaseMapping:0x25B9 - ,simpleTitleCaseMapping:0x25B9 - }, - { code:0x25BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BA - ,simpleLowerCaseMapping:0x25BA - ,simpleTitleCaseMapping:0x25BA - }, - { code:0x25BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BB - ,simpleLowerCaseMapping:0x25BB - ,simpleTitleCaseMapping:0x25BB - }, - { code:0x25BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BC - ,simpleLowerCaseMapping:0x25BC - ,simpleTitleCaseMapping:0x25BC - }, - { code:0x25BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BD - ,simpleLowerCaseMapping:0x25BD - ,simpleTitleCaseMapping:0x25BD - }, - { code:0x25BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BE - ,simpleLowerCaseMapping:0x25BE - ,simpleTitleCaseMapping:0x25BE - }, - { code:0x25BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25BF - ,simpleLowerCaseMapping:0x25BF - ,simpleTitleCaseMapping:0x25BF - }, - { code:0x25C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C0 - ,simpleLowerCaseMapping:0x25C0 - ,simpleTitleCaseMapping:0x25C0 - }, - { code:0x25C1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25C1 - ,simpleLowerCaseMapping:0x25C1 - ,simpleTitleCaseMapping:0x25C1 - }, - { code:0x25C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C2 - ,simpleLowerCaseMapping:0x25C2 - ,simpleTitleCaseMapping:0x25C2 - }, - { code:0x25C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C3 - ,simpleLowerCaseMapping:0x25C3 - ,simpleTitleCaseMapping:0x25C3 - }, - { code:0x25C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C4 - ,simpleLowerCaseMapping:0x25C4 - ,simpleTitleCaseMapping:0x25C4 - }, - { code:0x25C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C5 - ,simpleLowerCaseMapping:0x25C5 - ,simpleTitleCaseMapping:0x25C5 - }, - { code:0x25C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C6 - ,simpleLowerCaseMapping:0x25C6 - ,simpleTitleCaseMapping:0x25C6 - }, - { code:0x25C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C7 - ,simpleLowerCaseMapping:0x25C7 - ,simpleTitleCaseMapping:0x25C7 - }, - { code:0x25C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C8 - ,simpleLowerCaseMapping:0x25C8 - ,simpleTitleCaseMapping:0x25C8 - }, - { code:0x25C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25C9 - ,simpleLowerCaseMapping:0x25C9 - ,simpleTitleCaseMapping:0x25C9 - }, - { code:0x25CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CA - ,simpleLowerCaseMapping:0x25CA - ,simpleTitleCaseMapping:0x25CA - }, - { code:0x25CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CB - ,simpleLowerCaseMapping:0x25CB - ,simpleTitleCaseMapping:0x25CB - }, - { code:0x25CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CC - ,simpleLowerCaseMapping:0x25CC - ,simpleTitleCaseMapping:0x25CC - }, - { code:0x25CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CD - ,simpleLowerCaseMapping:0x25CD - ,simpleTitleCaseMapping:0x25CD - }, - { code:0x25CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CE - ,simpleLowerCaseMapping:0x25CE - ,simpleTitleCaseMapping:0x25CE - }, - { code:0x25CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25CF - ,simpleLowerCaseMapping:0x25CF - ,simpleTitleCaseMapping:0x25CF - }, - { code:0x25D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D0 - ,simpleLowerCaseMapping:0x25D0 - ,simpleTitleCaseMapping:0x25D0 - }, - { code:0x25D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D1 - ,simpleLowerCaseMapping:0x25D1 - ,simpleTitleCaseMapping:0x25D1 - }, - { code:0x25D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D2 - ,simpleLowerCaseMapping:0x25D2 - ,simpleTitleCaseMapping:0x25D2 - }, - { code:0x25D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D3 - ,simpleLowerCaseMapping:0x25D3 - ,simpleTitleCaseMapping:0x25D3 - }, - { code:0x25D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D4 - ,simpleLowerCaseMapping:0x25D4 - ,simpleTitleCaseMapping:0x25D4 - }, - { code:0x25D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D5 - ,simpleLowerCaseMapping:0x25D5 - ,simpleTitleCaseMapping:0x25D5 - }, - { code:0x25D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D6 - ,simpleLowerCaseMapping:0x25D6 - ,simpleTitleCaseMapping:0x25D6 - }, - { code:0x25D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D7 - ,simpleLowerCaseMapping:0x25D7 - ,simpleTitleCaseMapping:0x25D7 - }, - { code:0x25D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D8 - ,simpleLowerCaseMapping:0x25D8 - ,simpleTitleCaseMapping:0x25D8 - }, - { code:0x25D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25D9 - ,simpleLowerCaseMapping:0x25D9 - ,simpleTitleCaseMapping:0x25D9 - }, - { code:0x25DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DA - ,simpleLowerCaseMapping:0x25DA - ,simpleTitleCaseMapping:0x25DA - }, - { code:0x25DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DB - ,simpleLowerCaseMapping:0x25DB - ,simpleTitleCaseMapping:0x25DB - }, - { code:0x25DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DC - ,simpleLowerCaseMapping:0x25DC - ,simpleTitleCaseMapping:0x25DC - }, - { code:0x25DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DD - ,simpleLowerCaseMapping:0x25DD - ,simpleTitleCaseMapping:0x25DD - }, - { code:0x25DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DE - ,simpleLowerCaseMapping:0x25DE - ,simpleTitleCaseMapping:0x25DE - }, - { code:0x25DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25DF - ,simpleLowerCaseMapping:0x25DF - ,simpleTitleCaseMapping:0x25DF - }, - { code:0x25E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E0 - ,simpleLowerCaseMapping:0x25E0 - ,simpleTitleCaseMapping:0x25E0 - }, - { code:0x25E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E1 - ,simpleLowerCaseMapping:0x25E1 - ,simpleTitleCaseMapping:0x25E1 - }, - { code:0x25E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E2 - ,simpleLowerCaseMapping:0x25E2 - ,simpleTitleCaseMapping:0x25E2 - }, - { code:0x25E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E3 - ,simpleLowerCaseMapping:0x25E3 - ,simpleTitleCaseMapping:0x25E3 - }, - { code:0x25E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E4 - ,simpleLowerCaseMapping:0x25E4 - ,simpleTitleCaseMapping:0x25E4 - }, - { code:0x25E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E5 - ,simpleLowerCaseMapping:0x25E5 - ,simpleTitleCaseMapping:0x25E5 - }, - { code:0x25E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E6 - ,simpleLowerCaseMapping:0x25E6 - ,simpleTitleCaseMapping:0x25E6 - }, - { code:0x25E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E7 - ,simpleLowerCaseMapping:0x25E7 - ,simpleTitleCaseMapping:0x25E7 - }, - { code:0x25E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E8 - ,simpleLowerCaseMapping:0x25E8 - ,simpleTitleCaseMapping:0x25E8 - }, - { code:0x25E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25E9 - ,simpleLowerCaseMapping:0x25E9 - ,simpleTitleCaseMapping:0x25E9 - }, - { code:0x25EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25EA - ,simpleLowerCaseMapping:0x25EA - ,simpleTitleCaseMapping:0x25EA - }, - { code:0x25EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25EB - ,simpleLowerCaseMapping:0x25EB - ,simpleTitleCaseMapping:0x25EB - }, - { code:0x25EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25EC - ,simpleLowerCaseMapping:0x25EC - ,simpleTitleCaseMapping:0x25EC - }, - { code:0x25ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25ED - ,simpleLowerCaseMapping:0x25ED - ,simpleTitleCaseMapping:0x25ED - }, - { code:0x25EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25EE - ,simpleLowerCaseMapping:0x25EE - ,simpleTitleCaseMapping:0x25EE - }, - { code:0x25EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25EF - ,simpleLowerCaseMapping:0x25EF - ,simpleTitleCaseMapping:0x25EF - }, - { code:0x25F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F0 - ,simpleLowerCaseMapping:0x25F0 - ,simpleTitleCaseMapping:0x25F0 - }, - { code:0x25F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F1 - ,simpleLowerCaseMapping:0x25F1 - ,simpleTitleCaseMapping:0x25F1 - }, - { code:0x25F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F2 - ,simpleLowerCaseMapping:0x25F2 - ,simpleTitleCaseMapping:0x25F2 - }, - { code:0x25F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F3 - ,simpleLowerCaseMapping:0x25F3 - ,simpleTitleCaseMapping:0x25F3 - }, - { code:0x25F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F4 - ,simpleLowerCaseMapping:0x25F4 - ,simpleTitleCaseMapping:0x25F4 - }, - { code:0x25F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F5 - ,simpleLowerCaseMapping:0x25F5 - ,simpleTitleCaseMapping:0x25F5 - }, - { code:0x25F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F6 - ,simpleLowerCaseMapping:0x25F6 - ,simpleTitleCaseMapping:0x25F6 - }, - { code:0x25F7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x25F7 - ,simpleLowerCaseMapping:0x25F7 - ,simpleTitleCaseMapping:0x25F7 - }, - { code:0x25F8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25F8 - ,simpleLowerCaseMapping:0x25F8 - ,simpleTitleCaseMapping:0x25F8 - }, - { code:0x25F9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25F9 - ,simpleLowerCaseMapping:0x25F9 - ,simpleTitleCaseMapping:0x25F9 - }, - { code:0x25FA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FA - ,simpleLowerCaseMapping:0x25FA - ,simpleTitleCaseMapping:0x25FA - }, - { code:0x25FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FB - ,simpleLowerCaseMapping:0x25FB - ,simpleTitleCaseMapping:0x25FB - }, - { code:0x25FC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FC - ,simpleLowerCaseMapping:0x25FC - ,simpleTitleCaseMapping:0x25FC - }, - { code:0x25FD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FD - ,simpleLowerCaseMapping:0x25FD - ,simpleTitleCaseMapping:0x25FD - }, - { code:0x25FE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FE - ,simpleLowerCaseMapping:0x25FE - ,simpleTitleCaseMapping:0x25FE - }, - { code:0x25FF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x25FF - ,simpleLowerCaseMapping:0x25FF - ,simpleTitleCaseMapping:0x25FF - }, - { code:0x2600 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2600 - ,simpleLowerCaseMapping:0x2600 - ,simpleTitleCaseMapping:0x2600 - }, - { code:0x2601 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2601 - ,simpleLowerCaseMapping:0x2601 - ,simpleTitleCaseMapping:0x2601 - }, - { code:0x2602 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2602 - ,simpleLowerCaseMapping:0x2602 - ,simpleTitleCaseMapping:0x2602 - }, - { code:0x2603 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2603 - ,simpleLowerCaseMapping:0x2603 - ,simpleTitleCaseMapping:0x2603 - }, - { code:0x2604 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2604 - ,simpleLowerCaseMapping:0x2604 - ,simpleTitleCaseMapping:0x2604 - }, - { code:0x2605 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2605 - ,simpleLowerCaseMapping:0x2605 - ,simpleTitleCaseMapping:0x2605 - }, - { code:0x2606 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2606 - ,simpleLowerCaseMapping:0x2606 - ,simpleTitleCaseMapping:0x2606 - }, - { code:0x2607 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2607 - ,simpleLowerCaseMapping:0x2607 - ,simpleTitleCaseMapping:0x2607 - }, - { code:0x2608 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2608 - ,simpleLowerCaseMapping:0x2608 - ,simpleTitleCaseMapping:0x2608 - }, - { code:0x2609 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2609 - ,simpleLowerCaseMapping:0x2609 - ,simpleTitleCaseMapping:0x2609 - }, - { code:0x260A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260A - ,simpleLowerCaseMapping:0x260A - ,simpleTitleCaseMapping:0x260A - }, - { code:0x260B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260B - ,simpleLowerCaseMapping:0x260B - ,simpleTitleCaseMapping:0x260B - }, - { code:0x260C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260C - ,simpleLowerCaseMapping:0x260C - ,simpleTitleCaseMapping:0x260C - }, - { code:0x260D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260D - ,simpleLowerCaseMapping:0x260D - ,simpleTitleCaseMapping:0x260D - }, - { code:0x260E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260E - ,simpleLowerCaseMapping:0x260E - ,simpleTitleCaseMapping:0x260E - }, - { code:0x260F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x260F - ,simpleLowerCaseMapping:0x260F - ,simpleTitleCaseMapping:0x260F - }, - { code:0x2610 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2610 - ,simpleLowerCaseMapping:0x2610 - ,simpleTitleCaseMapping:0x2610 - }, - { code:0x2611 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2611 - ,simpleLowerCaseMapping:0x2611 - ,simpleTitleCaseMapping:0x2611 - }, - { code:0x2612 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2612 - ,simpleLowerCaseMapping:0x2612 - ,simpleTitleCaseMapping:0x2612 - }, - { code:0x2613 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2613 - ,simpleLowerCaseMapping:0x2613 - ,simpleTitleCaseMapping:0x2613 - }, - { code:0x2614 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2614 - ,simpleLowerCaseMapping:0x2614 - ,simpleTitleCaseMapping:0x2614 - }, - { code:0x2615 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2615 - ,simpleLowerCaseMapping:0x2615 - ,simpleTitleCaseMapping:0x2615 - }, - { code:0x2616 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2616 - ,simpleLowerCaseMapping:0x2616 - ,simpleTitleCaseMapping:0x2616 - }, - { code:0x2617 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2617 - ,simpleLowerCaseMapping:0x2617 - ,simpleTitleCaseMapping:0x2617 - }, - { code:0x2618 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2618 - ,simpleLowerCaseMapping:0x2618 - ,simpleTitleCaseMapping:0x2618 - }, - { code:0x2619 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2619 - ,simpleLowerCaseMapping:0x2619 - ,simpleTitleCaseMapping:0x2619 - }, - { code:0x261A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261A - ,simpleLowerCaseMapping:0x261A - ,simpleTitleCaseMapping:0x261A - }, - { code:0x261B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261B - ,simpleLowerCaseMapping:0x261B - ,simpleTitleCaseMapping:0x261B - }, - { code:0x261C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261C - ,simpleLowerCaseMapping:0x261C - ,simpleTitleCaseMapping:0x261C - }, - { code:0x261D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261D - ,simpleLowerCaseMapping:0x261D - ,simpleTitleCaseMapping:0x261D - }, - { code:0x261E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261E - ,simpleLowerCaseMapping:0x261E - ,simpleTitleCaseMapping:0x261E - }, - { code:0x261F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x261F - ,simpleLowerCaseMapping:0x261F - ,simpleTitleCaseMapping:0x261F - }, - { code:0x2620 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2620 - ,simpleLowerCaseMapping:0x2620 - ,simpleTitleCaseMapping:0x2620 - }, - { code:0x2621 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2621 - ,simpleLowerCaseMapping:0x2621 - ,simpleTitleCaseMapping:0x2621 - }, - { code:0x2622 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2622 - ,simpleLowerCaseMapping:0x2622 - ,simpleTitleCaseMapping:0x2622 - }, - { code:0x2623 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2623 - ,simpleLowerCaseMapping:0x2623 - ,simpleTitleCaseMapping:0x2623 - }, - { code:0x2624 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2624 - ,simpleLowerCaseMapping:0x2624 - ,simpleTitleCaseMapping:0x2624 - }, - { code:0x2625 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2625 - ,simpleLowerCaseMapping:0x2625 - ,simpleTitleCaseMapping:0x2625 - }, - { code:0x2626 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2626 - ,simpleLowerCaseMapping:0x2626 - ,simpleTitleCaseMapping:0x2626 - }, - { code:0x2627 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2627 - ,simpleLowerCaseMapping:0x2627 - ,simpleTitleCaseMapping:0x2627 - }, - { code:0x2628 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2628 - ,simpleLowerCaseMapping:0x2628 - ,simpleTitleCaseMapping:0x2628 - }, - { code:0x2629 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2629 - ,simpleLowerCaseMapping:0x2629 - ,simpleTitleCaseMapping:0x2629 - }, - { code:0x262A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262A - ,simpleLowerCaseMapping:0x262A - ,simpleTitleCaseMapping:0x262A - }, - { code:0x262B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262B - ,simpleLowerCaseMapping:0x262B - ,simpleTitleCaseMapping:0x262B - }, - { code:0x262C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262C - ,simpleLowerCaseMapping:0x262C - ,simpleTitleCaseMapping:0x262C - }, - { code:0x262D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262D - ,simpleLowerCaseMapping:0x262D - ,simpleTitleCaseMapping:0x262D - }, - { code:0x262E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262E - ,simpleLowerCaseMapping:0x262E - ,simpleTitleCaseMapping:0x262E - }, - { code:0x262F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x262F - ,simpleLowerCaseMapping:0x262F - ,simpleTitleCaseMapping:0x262F - }, - { code:0x2630 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2630 - ,simpleLowerCaseMapping:0x2630 - ,simpleTitleCaseMapping:0x2630 - }, - { code:0x2631 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2631 - ,simpleLowerCaseMapping:0x2631 - ,simpleTitleCaseMapping:0x2631 - }, - { code:0x2632 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2632 - ,simpleLowerCaseMapping:0x2632 - ,simpleTitleCaseMapping:0x2632 - }, - { code:0x2633 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2633 - ,simpleLowerCaseMapping:0x2633 - ,simpleTitleCaseMapping:0x2633 - }, - { code:0x2634 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2634 - ,simpleLowerCaseMapping:0x2634 - ,simpleTitleCaseMapping:0x2634 - }, - { code:0x2635 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2635 - ,simpleLowerCaseMapping:0x2635 - ,simpleTitleCaseMapping:0x2635 - }, - { code:0x2636 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2636 - ,simpleLowerCaseMapping:0x2636 - ,simpleTitleCaseMapping:0x2636 - }, - { code:0x2637 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2637 - ,simpleLowerCaseMapping:0x2637 - ,simpleTitleCaseMapping:0x2637 - }, - { code:0x2638 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2638 - ,simpleLowerCaseMapping:0x2638 - ,simpleTitleCaseMapping:0x2638 - }, - { code:0x2639 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2639 - ,simpleLowerCaseMapping:0x2639 - ,simpleTitleCaseMapping:0x2639 - }, - { code:0x263A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263A - ,simpleLowerCaseMapping:0x263A - ,simpleTitleCaseMapping:0x263A - }, - { code:0x263B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263B - ,simpleLowerCaseMapping:0x263B - ,simpleTitleCaseMapping:0x263B - }, - { code:0x263C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263C - ,simpleLowerCaseMapping:0x263C - ,simpleTitleCaseMapping:0x263C - }, - { code:0x263D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263D - ,simpleLowerCaseMapping:0x263D - ,simpleTitleCaseMapping:0x263D - }, - { code:0x263E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263E - ,simpleLowerCaseMapping:0x263E - ,simpleTitleCaseMapping:0x263E - }, - { code:0x263F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x263F - ,simpleLowerCaseMapping:0x263F - ,simpleTitleCaseMapping:0x263F - }, - { code:0x2640 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2640 - ,simpleLowerCaseMapping:0x2640 - ,simpleTitleCaseMapping:0x2640 - }, - { code:0x2641 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2641 - ,simpleLowerCaseMapping:0x2641 - ,simpleTitleCaseMapping:0x2641 - }, - { code:0x2642 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2642 - ,simpleLowerCaseMapping:0x2642 - ,simpleTitleCaseMapping:0x2642 - }, - { code:0x2643 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2643 - ,simpleLowerCaseMapping:0x2643 - ,simpleTitleCaseMapping:0x2643 - }, - { code:0x2644 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2644 - ,simpleLowerCaseMapping:0x2644 - ,simpleTitleCaseMapping:0x2644 - }, - { code:0x2645 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2645 - ,simpleLowerCaseMapping:0x2645 - ,simpleTitleCaseMapping:0x2645 - }, - { code:0x2646 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2646 - ,simpleLowerCaseMapping:0x2646 - ,simpleTitleCaseMapping:0x2646 - }, - { code:0x2647 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2647 - ,simpleLowerCaseMapping:0x2647 - ,simpleTitleCaseMapping:0x2647 - }, - { code:0x2648 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2648 - ,simpleLowerCaseMapping:0x2648 - ,simpleTitleCaseMapping:0x2648 - }, - { code:0x2649 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2649 - ,simpleLowerCaseMapping:0x2649 - ,simpleTitleCaseMapping:0x2649 - }, - { code:0x264A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264A - ,simpleLowerCaseMapping:0x264A - ,simpleTitleCaseMapping:0x264A - }, - { code:0x264B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264B - ,simpleLowerCaseMapping:0x264B - ,simpleTitleCaseMapping:0x264B - }, - { code:0x264C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264C - ,simpleLowerCaseMapping:0x264C - ,simpleTitleCaseMapping:0x264C - }, - { code:0x264D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264D - ,simpleLowerCaseMapping:0x264D - ,simpleTitleCaseMapping:0x264D - }, - { code:0x264E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264E - ,simpleLowerCaseMapping:0x264E - ,simpleTitleCaseMapping:0x264E - }, - { code:0x264F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x264F - ,simpleLowerCaseMapping:0x264F - ,simpleTitleCaseMapping:0x264F - }, - { code:0x2650 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2650 - ,simpleLowerCaseMapping:0x2650 - ,simpleTitleCaseMapping:0x2650 - }, - { code:0x2651 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2651 - ,simpleLowerCaseMapping:0x2651 - ,simpleTitleCaseMapping:0x2651 - }, - { code:0x2652 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2652 - ,simpleLowerCaseMapping:0x2652 - ,simpleTitleCaseMapping:0x2652 - }, - { code:0x2653 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2653 - ,simpleLowerCaseMapping:0x2653 - ,simpleTitleCaseMapping:0x2653 - }, - { code:0x2654 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2654 - ,simpleLowerCaseMapping:0x2654 - ,simpleTitleCaseMapping:0x2654 - }, - { code:0x2655 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2655 - ,simpleLowerCaseMapping:0x2655 - ,simpleTitleCaseMapping:0x2655 - }, - { code:0x2656 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2656 - ,simpleLowerCaseMapping:0x2656 - ,simpleTitleCaseMapping:0x2656 - }, - { code:0x2657 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2657 - ,simpleLowerCaseMapping:0x2657 - ,simpleTitleCaseMapping:0x2657 - }, - { code:0x2658 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2658 - ,simpleLowerCaseMapping:0x2658 - ,simpleTitleCaseMapping:0x2658 - }, - { code:0x2659 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2659 - ,simpleLowerCaseMapping:0x2659 - ,simpleTitleCaseMapping:0x2659 - }, - { code:0x265A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265A - ,simpleLowerCaseMapping:0x265A - ,simpleTitleCaseMapping:0x265A - }, - { code:0x265B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265B - ,simpleLowerCaseMapping:0x265B - ,simpleTitleCaseMapping:0x265B - }, - { code:0x265C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265C - ,simpleLowerCaseMapping:0x265C - ,simpleTitleCaseMapping:0x265C - }, - { code:0x265D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265D - ,simpleLowerCaseMapping:0x265D - ,simpleTitleCaseMapping:0x265D - }, - { code:0x265E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265E - ,simpleLowerCaseMapping:0x265E - ,simpleTitleCaseMapping:0x265E - }, - { code:0x265F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x265F - ,simpleLowerCaseMapping:0x265F - ,simpleTitleCaseMapping:0x265F - }, - { code:0x2660 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2660 - ,simpleLowerCaseMapping:0x2660 - ,simpleTitleCaseMapping:0x2660 - }, - { code:0x2661 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2661 - ,simpleLowerCaseMapping:0x2661 - ,simpleTitleCaseMapping:0x2661 - }, - { code:0x2662 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2662 - ,simpleLowerCaseMapping:0x2662 - ,simpleTitleCaseMapping:0x2662 - }, - { code:0x2663 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2663 - ,simpleLowerCaseMapping:0x2663 - ,simpleTitleCaseMapping:0x2663 - }, - { code:0x2664 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2664 - ,simpleLowerCaseMapping:0x2664 - ,simpleTitleCaseMapping:0x2664 - }, - { code:0x2665 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2665 - ,simpleLowerCaseMapping:0x2665 - ,simpleTitleCaseMapping:0x2665 - }, - { code:0x2666 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2666 - ,simpleLowerCaseMapping:0x2666 - ,simpleTitleCaseMapping:0x2666 - }, - { code:0x2667 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2667 - ,simpleLowerCaseMapping:0x2667 - ,simpleTitleCaseMapping:0x2667 - }, - { code:0x2668 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2668 - ,simpleLowerCaseMapping:0x2668 - ,simpleTitleCaseMapping:0x2668 - }, - { code:0x2669 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2669 - ,simpleLowerCaseMapping:0x2669 - ,simpleTitleCaseMapping:0x2669 - }, - { code:0x266A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x266A - ,simpleLowerCaseMapping:0x266A - ,simpleTitleCaseMapping:0x266A - }, - { code:0x266B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x266B - ,simpleLowerCaseMapping:0x266B - ,simpleTitleCaseMapping:0x266B - }, - { code:0x266C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x266C - ,simpleLowerCaseMapping:0x266C - ,simpleTitleCaseMapping:0x266C - }, - { code:0x266D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x266D - ,simpleLowerCaseMapping:0x266D - ,simpleTitleCaseMapping:0x266D - }, - { code:0x266E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x266E - ,simpleLowerCaseMapping:0x266E - ,simpleTitleCaseMapping:0x266E - }, - { code:0x266F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x266F - ,simpleLowerCaseMapping:0x266F - ,simpleTitleCaseMapping:0x266F - }, - { code:0x2670 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2670 - ,simpleLowerCaseMapping:0x2670 - ,simpleTitleCaseMapping:0x2670 - }, - { code:0x2671 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2671 - ,simpleLowerCaseMapping:0x2671 - ,simpleTitleCaseMapping:0x2671 - }, - { code:0x2672 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2672 - ,simpleLowerCaseMapping:0x2672 - ,simpleTitleCaseMapping:0x2672 - }, - { code:0x2673 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2673 - ,simpleLowerCaseMapping:0x2673 - ,simpleTitleCaseMapping:0x2673 - }, - { code:0x2674 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2674 - ,simpleLowerCaseMapping:0x2674 - ,simpleTitleCaseMapping:0x2674 - }, - { code:0x2675 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2675 - ,simpleLowerCaseMapping:0x2675 - ,simpleTitleCaseMapping:0x2675 - }, - { code:0x2676 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2676 - ,simpleLowerCaseMapping:0x2676 - ,simpleTitleCaseMapping:0x2676 - }, - { code:0x2677 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2677 - ,simpleLowerCaseMapping:0x2677 - ,simpleTitleCaseMapping:0x2677 - }, - { code:0x2678 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2678 - ,simpleLowerCaseMapping:0x2678 - ,simpleTitleCaseMapping:0x2678 - }, - { code:0x2679 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2679 - ,simpleLowerCaseMapping:0x2679 - ,simpleTitleCaseMapping:0x2679 - }, - { code:0x267A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267A - ,simpleLowerCaseMapping:0x267A - ,simpleTitleCaseMapping:0x267A - }, - { code:0x267B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267B - ,simpleLowerCaseMapping:0x267B - ,simpleTitleCaseMapping:0x267B - }, - { code:0x267C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267C - ,simpleLowerCaseMapping:0x267C - ,simpleTitleCaseMapping:0x267C - }, - { code:0x267D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267D - ,simpleLowerCaseMapping:0x267D - ,simpleTitleCaseMapping:0x267D - }, - { code:0x267E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267E - ,simpleLowerCaseMapping:0x267E - ,simpleTitleCaseMapping:0x267E - }, - { code:0x267F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x267F - ,simpleLowerCaseMapping:0x267F - ,simpleTitleCaseMapping:0x267F - }, - { code:0x2680 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2680 - ,simpleLowerCaseMapping:0x2680 - ,simpleTitleCaseMapping:0x2680 - }, - { code:0x2681 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2681 - ,simpleLowerCaseMapping:0x2681 - ,simpleTitleCaseMapping:0x2681 - }, - { code:0x2682 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2682 - ,simpleLowerCaseMapping:0x2682 - ,simpleTitleCaseMapping:0x2682 - }, - { code:0x2683 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2683 - ,simpleLowerCaseMapping:0x2683 - ,simpleTitleCaseMapping:0x2683 - }, - { code:0x2684 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2684 - ,simpleLowerCaseMapping:0x2684 - ,simpleTitleCaseMapping:0x2684 - }, - { code:0x2685 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2685 - ,simpleLowerCaseMapping:0x2685 - ,simpleTitleCaseMapping:0x2685 - }, - { code:0x2686 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2686 - ,simpleLowerCaseMapping:0x2686 - ,simpleTitleCaseMapping:0x2686 - }, - { code:0x2687 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2687 - ,simpleLowerCaseMapping:0x2687 - ,simpleTitleCaseMapping:0x2687 - }, - { code:0x2688 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2688 - ,simpleLowerCaseMapping:0x2688 - ,simpleTitleCaseMapping:0x2688 - }, - { code:0x2689 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2689 - ,simpleLowerCaseMapping:0x2689 - ,simpleTitleCaseMapping:0x2689 - }, - { code:0x268A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268A - ,simpleLowerCaseMapping:0x268A - ,simpleTitleCaseMapping:0x268A - }, - { code:0x268B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268B - ,simpleLowerCaseMapping:0x268B - ,simpleTitleCaseMapping:0x268B - }, - { code:0x268C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268C - ,simpleLowerCaseMapping:0x268C - ,simpleTitleCaseMapping:0x268C - }, - { code:0x268D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268D - ,simpleLowerCaseMapping:0x268D - ,simpleTitleCaseMapping:0x268D - }, - { code:0x268E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268E - ,simpleLowerCaseMapping:0x268E - ,simpleTitleCaseMapping:0x268E - }, - { code:0x268F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x268F - ,simpleLowerCaseMapping:0x268F - ,simpleTitleCaseMapping:0x268F - }, - { code:0x2690 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2690 - ,simpleLowerCaseMapping:0x2690 - ,simpleTitleCaseMapping:0x2690 - }, - { code:0x2691 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2691 - ,simpleLowerCaseMapping:0x2691 - ,simpleTitleCaseMapping:0x2691 - }, - { code:0x2692 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2692 - ,simpleLowerCaseMapping:0x2692 - ,simpleTitleCaseMapping:0x2692 - }, - { code:0x2693 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2693 - ,simpleLowerCaseMapping:0x2693 - ,simpleTitleCaseMapping:0x2693 - }, - { code:0x2694 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2694 - ,simpleLowerCaseMapping:0x2694 - ,simpleTitleCaseMapping:0x2694 - }, - { code:0x2695 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2695 - ,simpleLowerCaseMapping:0x2695 - ,simpleTitleCaseMapping:0x2695 - }, - { code:0x2696 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2696 - ,simpleLowerCaseMapping:0x2696 - ,simpleTitleCaseMapping:0x2696 - }, - { code:0x2697 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2697 - ,simpleLowerCaseMapping:0x2697 - ,simpleTitleCaseMapping:0x2697 - }, - { code:0x2698 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2698 - ,simpleLowerCaseMapping:0x2698 - ,simpleTitleCaseMapping:0x2698 - }, - { code:0x2699 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2699 - ,simpleLowerCaseMapping:0x2699 - ,simpleTitleCaseMapping:0x2699 - }, - { code:0x269A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x269A - ,simpleLowerCaseMapping:0x269A - ,simpleTitleCaseMapping:0x269A - }, - { code:0x269B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x269B - ,simpleLowerCaseMapping:0x269B - ,simpleTitleCaseMapping:0x269B - }, - { code:0x269C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x269C - ,simpleLowerCaseMapping:0x269C - ,simpleTitleCaseMapping:0x269C - }, - { code:0x26A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A0 - ,simpleLowerCaseMapping:0x26A0 - ,simpleTitleCaseMapping:0x26A0 - }, - { code:0x26A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A1 - ,simpleLowerCaseMapping:0x26A1 - ,simpleTitleCaseMapping:0x26A1 - }, - { code:0x26A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A2 - ,simpleLowerCaseMapping:0x26A2 - ,simpleTitleCaseMapping:0x26A2 - }, - { code:0x26A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A3 - ,simpleLowerCaseMapping:0x26A3 - ,simpleTitleCaseMapping:0x26A3 - }, - { code:0x26A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A4 - ,simpleLowerCaseMapping:0x26A4 - ,simpleTitleCaseMapping:0x26A4 - }, - { code:0x26A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A5 - ,simpleLowerCaseMapping:0x26A5 - ,simpleTitleCaseMapping:0x26A5 - }, - { code:0x26A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A6 - ,simpleLowerCaseMapping:0x26A6 - ,simpleTitleCaseMapping:0x26A6 - }, - { code:0x26A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A7 - ,simpleLowerCaseMapping:0x26A7 - ,simpleTitleCaseMapping:0x26A7 - }, - { code:0x26A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A8 - ,simpleLowerCaseMapping:0x26A8 - ,simpleTitleCaseMapping:0x26A8 - }, - { code:0x26A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26A9 - ,simpleLowerCaseMapping:0x26A9 - ,simpleTitleCaseMapping:0x26A9 - }, - { code:0x26AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AA - ,simpleLowerCaseMapping:0x26AA - ,simpleTitleCaseMapping:0x26AA - }, - { code:0x26AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AB - ,simpleLowerCaseMapping:0x26AB - ,simpleTitleCaseMapping:0x26AB - }, - { code:0x26AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AC - ,simpleLowerCaseMapping:0x26AC - ,simpleTitleCaseMapping:0x26AC - }, - { code:0x26AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AD - ,simpleLowerCaseMapping:0x26AD - ,simpleTitleCaseMapping:0x26AD - }, - { code:0x26AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AE - ,simpleLowerCaseMapping:0x26AE - ,simpleTitleCaseMapping:0x26AE - }, - { code:0x26AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26AF - ,simpleLowerCaseMapping:0x26AF - ,simpleTitleCaseMapping:0x26AF - }, - { code:0x26B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26B0 - ,simpleLowerCaseMapping:0x26B0 - ,simpleTitleCaseMapping:0x26B0 - }, - { code:0x26B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26B1 - ,simpleLowerCaseMapping:0x26B1 - ,simpleTitleCaseMapping:0x26B1 - }, - { code:0x26B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x26B2 - ,simpleLowerCaseMapping:0x26B2 - ,simpleTitleCaseMapping:0x26B2 - }, - { code:0x2701 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2701 - ,simpleLowerCaseMapping:0x2701 - ,simpleTitleCaseMapping:0x2701 - }, - { code:0x2702 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2702 - ,simpleLowerCaseMapping:0x2702 - ,simpleTitleCaseMapping:0x2702 - }, - { code:0x2703 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2703 - ,simpleLowerCaseMapping:0x2703 - ,simpleTitleCaseMapping:0x2703 - }, - { code:0x2704 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2704 - ,simpleLowerCaseMapping:0x2704 - ,simpleTitleCaseMapping:0x2704 - }, - { code:0x2706 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2706 - ,simpleLowerCaseMapping:0x2706 - ,simpleTitleCaseMapping:0x2706 - }, - { code:0x2707 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2707 - ,simpleLowerCaseMapping:0x2707 - ,simpleTitleCaseMapping:0x2707 - }, - { code:0x2708 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2708 - ,simpleLowerCaseMapping:0x2708 - ,simpleTitleCaseMapping:0x2708 - }, - { code:0x2709 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2709 - ,simpleLowerCaseMapping:0x2709 - ,simpleTitleCaseMapping:0x2709 - }, - { code:0x270C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x270C - ,simpleLowerCaseMapping:0x270C - ,simpleTitleCaseMapping:0x270C - }, - { code:0x270D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x270D - ,simpleLowerCaseMapping:0x270D - ,simpleTitleCaseMapping:0x270D - }, - { code:0x270E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x270E - ,simpleLowerCaseMapping:0x270E - ,simpleTitleCaseMapping:0x270E - }, - { code:0x270F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x270F - ,simpleLowerCaseMapping:0x270F - ,simpleTitleCaseMapping:0x270F - }, - { code:0x2710 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2710 - ,simpleLowerCaseMapping:0x2710 - ,simpleTitleCaseMapping:0x2710 - }, - { code:0x2711 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2711 - ,simpleLowerCaseMapping:0x2711 - ,simpleTitleCaseMapping:0x2711 - }, - { code:0x2712 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2712 - ,simpleLowerCaseMapping:0x2712 - ,simpleTitleCaseMapping:0x2712 - }, - { code:0x2713 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2713 - ,simpleLowerCaseMapping:0x2713 - ,simpleTitleCaseMapping:0x2713 - }, - { code:0x2714 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2714 - ,simpleLowerCaseMapping:0x2714 - ,simpleTitleCaseMapping:0x2714 - }, - { code:0x2715 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2715 - ,simpleLowerCaseMapping:0x2715 - ,simpleTitleCaseMapping:0x2715 - }, - { code:0x2716 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2716 - ,simpleLowerCaseMapping:0x2716 - ,simpleTitleCaseMapping:0x2716 - }, - { code:0x2717 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2717 - ,simpleLowerCaseMapping:0x2717 - ,simpleTitleCaseMapping:0x2717 - }, - { code:0x2718 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2718 - ,simpleLowerCaseMapping:0x2718 - ,simpleTitleCaseMapping:0x2718 - }, - { code:0x2719 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2719 - ,simpleLowerCaseMapping:0x2719 - ,simpleTitleCaseMapping:0x2719 - }, - { code:0x271A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271A - ,simpleLowerCaseMapping:0x271A - ,simpleTitleCaseMapping:0x271A - }, - { code:0x271B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271B - ,simpleLowerCaseMapping:0x271B - ,simpleTitleCaseMapping:0x271B - }, - { code:0x271C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271C - ,simpleLowerCaseMapping:0x271C - ,simpleTitleCaseMapping:0x271C - }, - { code:0x271D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271D - ,simpleLowerCaseMapping:0x271D - ,simpleTitleCaseMapping:0x271D - }, - { code:0x271E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271E - ,simpleLowerCaseMapping:0x271E - ,simpleTitleCaseMapping:0x271E - }, - { code:0x271F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x271F - ,simpleLowerCaseMapping:0x271F - ,simpleTitleCaseMapping:0x271F - }, - { code:0x2720 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2720 - ,simpleLowerCaseMapping:0x2720 - ,simpleTitleCaseMapping:0x2720 - }, - { code:0x2721 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2721 - ,simpleLowerCaseMapping:0x2721 - ,simpleTitleCaseMapping:0x2721 - }, - { code:0x2722 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2722 - ,simpleLowerCaseMapping:0x2722 - ,simpleTitleCaseMapping:0x2722 - }, - { code:0x2723 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2723 - ,simpleLowerCaseMapping:0x2723 - ,simpleTitleCaseMapping:0x2723 - }, - { code:0x2724 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2724 - ,simpleLowerCaseMapping:0x2724 - ,simpleTitleCaseMapping:0x2724 - }, - { code:0x2725 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2725 - ,simpleLowerCaseMapping:0x2725 - ,simpleTitleCaseMapping:0x2725 - }, - { code:0x2726 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2726 - ,simpleLowerCaseMapping:0x2726 - ,simpleTitleCaseMapping:0x2726 - }, - { code:0x2727 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2727 - ,simpleLowerCaseMapping:0x2727 - ,simpleTitleCaseMapping:0x2727 - }, - { code:0x2729 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2729 - ,simpleLowerCaseMapping:0x2729 - ,simpleTitleCaseMapping:0x2729 - }, - { code:0x272A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272A - ,simpleLowerCaseMapping:0x272A - ,simpleTitleCaseMapping:0x272A - }, - { code:0x272B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272B - ,simpleLowerCaseMapping:0x272B - ,simpleTitleCaseMapping:0x272B - }, - { code:0x272C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272C - ,simpleLowerCaseMapping:0x272C - ,simpleTitleCaseMapping:0x272C - }, - { code:0x272D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272D - ,simpleLowerCaseMapping:0x272D - ,simpleTitleCaseMapping:0x272D - }, - { code:0x272E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272E - ,simpleLowerCaseMapping:0x272E - ,simpleTitleCaseMapping:0x272E - }, - { code:0x272F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x272F - ,simpleLowerCaseMapping:0x272F - ,simpleTitleCaseMapping:0x272F - }, - { code:0x2730 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2730 - ,simpleLowerCaseMapping:0x2730 - ,simpleTitleCaseMapping:0x2730 - }, - { code:0x2731 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2731 - ,simpleLowerCaseMapping:0x2731 - ,simpleTitleCaseMapping:0x2731 - }, - { code:0x2732 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2732 - ,simpleLowerCaseMapping:0x2732 - ,simpleTitleCaseMapping:0x2732 - }, - { code:0x2733 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2733 - ,simpleLowerCaseMapping:0x2733 - ,simpleTitleCaseMapping:0x2733 - }, - { code:0x2734 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2734 - ,simpleLowerCaseMapping:0x2734 - ,simpleTitleCaseMapping:0x2734 - }, - { code:0x2735 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2735 - ,simpleLowerCaseMapping:0x2735 - ,simpleTitleCaseMapping:0x2735 - }, - { code:0x2736 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2736 - ,simpleLowerCaseMapping:0x2736 - ,simpleTitleCaseMapping:0x2736 - }, - { code:0x2737 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2737 - ,simpleLowerCaseMapping:0x2737 - ,simpleTitleCaseMapping:0x2737 - }, - { code:0x2738 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2738 - ,simpleLowerCaseMapping:0x2738 - ,simpleTitleCaseMapping:0x2738 - }, - { code:0x2739 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2739 - ,simpleLowerCaseMapping:0x2739 - ,simpleTitleCaseMapping:0x2739 - }, - { code:0x273A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273A - ,simpleLowerCaseMapping:0x273A - ,simpleTitleCaseMapping:0x273A - }, - { code:0x273B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273B - ,simpleLowerCaseMapping:0x273B - ,simpleTitleCaseMapping:0x273B - }, - { code:0x273C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273C - ,simpleLowerCaseMapping:0x273C - ,simpleTitleCaseMapping:0x273C - }, - { code:0x273D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273D - ,simpleLowerCaseMapping:0x273D - ,simpleTitleCaseMapping:0x273D - }, - { code:0x273E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273E - ,simpleLowerCaseMapping:0x273E - ,simpleTitleCaseMapping:0x273E - }, - { code:0x273F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x273F - ,simpleLowerCaseMapping:0x273F - ,simpleTitleCaseMapping:0x273F - }, - { code:0x2740 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2740 - ,simpleLowerCaseMapping:0x2740 - ,simpleTitleCaseMapping:0x2740 - }, - { code:0x2741 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2741 - ,simpleLowerCaseMapping:0x2741 - ,simpleTitleCaseMapping:0x2741 - }, - { code:0x2742 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2742 - ,simpleLowerCaseMapping:0x2742 - ,simpleTitleCaseMapping:0x2742 - }, - { code:0x2743 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2743 - ,simpleLowerCaseMapping:0x2743 - ,simpleTitleCaseMapping:0x2743 - }, - { code:0x2744 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2744 - ,simpleLowerCaseMapping:0x2744 - ,simpleTitleCaseMapping:0x2744 - }, - { code:0x2745 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2745 - ,simpleLowerCaseMapping:0x2745 - ,simpleTitleCaseMapping:0x2745 - }, - { code:0x2746 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2746 - ,simpleLowerCaseMapping:0x2746 - ,simpleTitleCaseMapping:0x2746 - }, - { code:0x2747 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2747 - ,simpleLowerCaseMapping:0x2747 - ,simpleTitleCaseMapping:0x2747 - }, - { code:0x2748 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2748 - ,simpleLowerCaseMapping:0x2748 - ,simpleTitleCaseMapping:0x2748 - }, - { code:0x2749 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2749 - ,simpleLowerCaseMapping:0x2749 - ,simpleTitleCaseMapping:0x2749 - }, - { code:0x274A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x274A - ,simpleLowerCaseMapping:0x274A - ,simpleTitleCaseMapping:0x274A - }, - { code:0x274B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x274B - ,simpleLowerCaseMapping:0x274B - ,simpleTitleCaseMapping:0x274B - }, - { code:0x274D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x274D - ,simpleLowerCaseMapping:0x274D - ,simpleTitleCaseMapping:0x274D - }, - { code:0x274F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x274F - ,simpleLowerCaseMapping:0x274F - ,simpleTitleCaseMapping:0x274F - }, - { code:0x2750 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2750 - ,simpleLowerCaseMapping:0x2750 - ,simpleTitleCaseMapping:0x2750 - }, - { code:0x2751 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2751 - ,simpleLowerCaseMapping:0x2751 - ,simpleTitleCaseMapping:0x2751 - }, - { code:0x2752 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2752 - ,simpleLowerCaseMapping:0x2752 - ,simpleTitleCaseMapping:0x2752 - }, - { code:0x2756 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2756 - ,simpleLowerCaseMapping:0x2756 - ,simpleTitleCaseMapping:0x2756 - }, - { code:0x2758 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2758 - ,simpleLowerCaseMapping:0x2758 - ,simpleTitleCaseMapping:0x2758 - }, - { code:0x2759 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2759 - ,simpleLowerCaseMapping:0x2759 - ,simpleTitleCaseMapping:0x2759 - }, - { code:0x275A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x275A - ,simpleLowerCaseMapping:0x275A - ,simpleTitleCaseMapping:0x275A - }, - { code:0x275B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x275B - ,simpleLowerCaseMapping:0x275B - ,simpleTitleCaseMapping:0x275B - }, - { code:0x275C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x275C - ,simpleLowerCaseMapping:0x275C - ,simpleTitleCaseMapping:0x275C - }, - { code:0x275D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x275D - ,simpleLowerCaseMapping:0x275D - ,simpleTitleCaseMapping:0x275D - }, - { code:0x275E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x275E - ,simpleLowerCaseMapping:0x275E - ,simpleTitleCaseMapping:0x275E - }, - { code:0x2761 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2761 - ,simpleLowerCaseMapping:0x2761 - ,simpleTitleCaseMapping:0x2761 - }, - { code:0x2762 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2762 - ,simpleLowerCaseMapping:0x2762 - ,simpleTitleCaseMapping:0x2762 - }, - { code:0x2763 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2763 - ,simpleLowerCaseMapping:0x2763 - ,simpleTitleCaseMapping:0x2763 - }, - { code:0x2764 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2764 - ,simpleLowerCaseMapping:0x2764 - ,simpleTitleCaseMapping:0x2764 - }, - { code:0x2765 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2765 - ,simpleLowerCaseMapping:0x2765 - ,simpleTitleCaseMapping:0x2765 - }, - { code:0x2766 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2766 - ,simpleLowerCaseMapping:0x2766 - ,simpleTitleCaseMapping:0x2766 - }, - { code:0x2767 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2767 - ,simpleLowerCaseMapping:0x2767 - ,simpleTitleCaseMapping:0x2767 - }, - { code:0x2768 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2768 - ,simpleLowerCaseMapping:0x2768 - ,simpleTitleCaseMapping:0x2768 - }, - { code:0x2769 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2769 - ,simpleLowerCaseMapping:0x2769 - ,simpleTitleCaseMapping:0x2769 - }, - { code:0x276A - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x276A - ,simpleLowerCaseMapping:0x276A - ,simpleTitleCaseMapping:0x276A - }, - { code:0x276B - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x276B - ,simpleLowerCaseMapping:0x276B - ,simpleTitleCaseMapping:0x276B - }, - { code:0x276C - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x276C - ,simpleLowerCaseMapping:0x276C - ,simpleTitleCaseMapping:0x276C - }, - { code:0x276D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x276D - ,simpleLowerCaseMapping:0x276D - ,simpleTitleCaseMapping:0x276D - }, - { code:0x276E - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x276E - ,simpleLowerCaseMapping:0x276E - ,simpleTitleCaseMapping:0x276E - }, - { code:0x276F - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x276F - ,simpleLowerCaseMapping:0x276F - ,simpleTitleCaseMapping:0x276F - }, - { code:0x2770 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2770 - ,simpleLowerCaseMapping:0x2770 - ,simpleTitleCaseMapping:0x2770 - }, - { code:0x2771 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2771 - ,simpleLowerCaseMapping:0x2771 - ,simpleTitleCaseMapping:0x2771 - }, - { code:0x2772 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2772 - ,simpleLowerCaseMapping:0x2772 - ,simpleTitleCaseMapping:0x2772 - }, - { code:0x2773 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2773 - ,simpleLowerCaseMapping:0x2773 - ,simpleTitleCaseMapping:0x2773 - }, - { code:0x2774 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2774 - ,simpleLowerCaseMapping:0x2774 - ,simpleTitleCaseMapping:0x2774 - }, - { code:0x2775 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2775 - ,simpleLowerCaseMapping:0x2775 - ,simpleTitleCaseMapping:0x2775 - }, - { code:0x2776 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2776 - ,simpleLowerCaseMapping:0x2776 - ,simpleTitleCaseMapping:0x2776 - }, - { code:0x2777 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2777 - ,simpleLowerCaseMapping:0x2777 - ,simpleTitleCaseMapping:0x2777 - }, - { code:0x2778 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2778 - ,simpleLowerCaseMapping:0x2778 - ,simpleTitleCaseMapping:0x2778 - }, - { code:0x2779 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2779 - ,simpleLowerCaseMapping:0x2779 - ,simpleTitleCaseMapping:0x2779 - }, - { code:0x277A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277A - ,simpleLowerCaseMapping:0x277A - ,simpleTitleCaseMapping:0x277A - }, - { code:0x277B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277B - ,simpleLowerCaseMapping:0x277B - ,simpleTitleCaseMapping:0x277B - }, - { code:0x277C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277C - ,simpleLowerCaseMapping:0x277C - ,simpleTitleCaseMapping:0x277C - }, - { code:0x277D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277D - ,simpleLowerCaseMapping:0x277D - ,simpleTitleCaseMapping:0x277D - }, - { code:0x277E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277E - ,simpleLowerCaseMapping:0x277E - ,simpleTitleCaseMapping:0x277E - }, - { code:0x277F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x277F - ,simpleLowerCaseMapping:0x277F - ,simpleTitleCaseMapping:0x277F - }, - { code:0x2780 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2780 - ,simpleLowerCaseMapping:0x2780 - ,simpleTitleCaseMapping:0x2780 - }, - { code:0x2781 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2781 - ,simpleLowerCaseMapping:0x2781 - ,simpleTitleCaseMapping:0x2781 - }, - { code:0x2782 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2782 - ,simpleLowerCaseMapping:0x2782 - ,simpleTitleCaseMapping:0x2782 - }, - { code:0x2783 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2783 - ,simpleLowerCaseMapping:0x2783 - ,simpleTitleCaseMapping:0x2783 - }, - { code:0x2784 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2784 - ,simpleLowerCaseMapping:0x2784 - ,simpleTitleCaseMapping:0x2784 - }, - { code:0x2785 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2785 - ,simpleLowerCaseMapping:0x2785 - ,simpleTitleCaseMapping:0x2785 - }, - { code:0x2786 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2786 - ,simpleLowerCaseMapping:0x2786 - ,simpleTitleCaseMapping:0x2786 - }, - { code:0x2787 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2787 - ,simpleLowerCaseMapping:0x2787 - ,simpleTitleCaseMapping:0x2787 - }, - { code:0x2788 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2788 - ,simpleLowerCaseMapping:0x2788 - ,simpleTitleCaseMapping:0x2788 - }, - { code:0x2789 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2789 - ,simpleLowerCaseMapping:0x2789 - ,simpleTitleCaseMapping:0x2789 - }, - { code:0x278A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278A - ,simpleLowerCaseMapping:0x278A - ,simpleTitleCaseMapping:0x278A - }, - { code:0x278B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278B - ,simpleLowerCaseMapping:0x278B - ,simpleTitleCaseMapping:0x278B - }, - { code:0x278C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278C - ,simpleLowerCaseMapping:0x278C - ,simpleTitleCaseMapping:0x278C - }, - { code:0x278D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278D - ,simpleLowerCaseMapping:0x278D - ,simpleTitleCaseMapping:0x278D - }, - { code:0x278E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278E - ,simpleLowerCaseMapping:0x278E - ,simpleTitleCaseMapping:0x278E - }, - { code:0x278F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x278F - ,simpleLowerCaseMapping:0x278F - ,simpleTitleCaseMapping:0x278F - }, - { code:0x2790 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2790 - ,simpleLowerCaseMapping:0x2790 - ,simpleTitleCaseMapping:0x2790 - }, - { code:0x2791 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2791 - ,simpleLowerCaseMapping:0x2791 - ,simpleTitleCaseMapping:0x2791 - }, - { code:0x2792 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2792 - ,simpleLowerCaseMapping:0x2792 - ,simpleTitleCaseMapping:0x2792 - }, - { code:0x2793 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2793 - ,simpleLowerCaseMapping:0x2793 - ,simpleTitleCaseMapping:0x2793 - }, - { code:0x2794 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2794 - ,simpleLowerCaseMapping:0x2794 - ,simpleTitleCaseMapping:0x2794 - }, - { code:0x2798 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2798 - ,simpleLowerCaseMapping:0x2798 - ,simpleTitleCaseMapping:0x2798 - }, - { code:0x2799 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2799 - ,simpleLowerCaseMapping:0x2799 - ,simpleTitleCaseMapping:0x2799 - }, - { code:0x279A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279A - ,simpleLowerCaseMapping:0x279A - ,simpleTitleCaseMapping:0x279A - }, - { code:0x279B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279B - ,simpleLowerCaseMapping:0x279B - ,simpleTitleCaseMapping:0x279B - }, - { code:0x279C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279C - ,simpleLowerCaseMapping:0x279C - ,simpleTitleCaseMapping:0x279C - }, - { code:0x279D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279D - ,simpleLowerCaseMapping:0x279D - ,simpleTitleCaseMapping:0x279D - }, - { code:0x279E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279E - ,simpleLowerCaseMapping:0x279E - ,simpleTitleCaseMapping:0x279E - }, - { code:0x279F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x279F - ,simpleLowerCaseMapping:0x279F - ,simpleTitleCaseMapping:0x279F - }, - { code:0x27A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A0 - ,simpleLowerCaseMapping:0x27A0 - ,simpleTitleCaseMapping:0x27A0 - }, - { code:0x27A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A1 - ,simpleLowerCaseMapping:0x27A1 - ,simpleTitleCaseMapping:0x27A1 - }, - { code:0x27A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A2 - ,simpleLowerCaseMapping:0x27A2 - ,simpleTitleCaseMapping:0x27A2 - }, - { code:0x27A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A3 - ,simpleLowerCaseMapping:0x27A3 - ,simpleTitleCaseMapping:0x27A3 - }, - { code:0x27A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A4 - ,simpleLowerCaseMapping:0x27A4 - ,simpleTitleCaseMapping:0x27A4 - }, - { code:0x27A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A5 - ,simpleLowerCaseMapping:0x27A5 - ,simpleTitleCaseMapping:0x27A5 - }, - { code:0x27A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A6 - ,simpleLowerCaseMapping:0x27A6 - ,simpleTitleCaseMapping:0x27A6 - }, - { code:0x27A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A7 - ,simpleLowerCaseMapping:0x27A7 - ,simpleTitleCaseMapping:0x27A7 - }, - { code:0x27A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A8 - ,simpleLowerCaseMapping:0x27A8 - ,simpleTitleCaseMapping:0x27A8 - }, - { code:0x27A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27A9 - ,simpleLowerCaseMapping:0x27A9 - ,simpleTitleCaseMapping:0x27A9 - }, - { code:0x27AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AA - ,simpleLowerCaseMapping:0x27AA - ,simpleTitleCaseMapping:0x27AA - }, - { code:0x27AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AB - ,simpleLowerCaseMapping:0x27AB - ,simpleTitleCaseMapping:0x27AB - }, - { code:0x27AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AC - ,simpleLowerCaseMapping:0x27AC - ,simpleTitleCaseMapping:0x27AC - }, - { code:0x27AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AD - ,simpleLowerCaseMapping:0x27AD - ,simpleTitleCaseMapping:0x27AD - }, - { code:0x27AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AE - ,simpleLowerCaseMapping:0x27AE - ,simpleTitleCaseMapping:0x27AE - }, - { code:0x27AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27AF - ,simpleLowerCaseMapping:0x27AF - ,simpleTitleCaseMapping:0x27AF - }, - { code:0x27B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B1 - ,simpleLowerCaseMapping:0x27B1 - ,simpleTitleCaseMapping:0x27B1 - }, - { code:0x27B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B2 - ,simpleLowerCaseMapping:0x27B2 - ,simpleTitleCaseMapping:0x27B2 - }, - { code:0x27B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B3 - ,simpleLowerCaseMapping:0x27B3 - ,simpleTitleCaseMapping:0x27B3 - }, - { code:0x27B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B4 - ,simpleLowerCaseMapping:0x27B4 - ,simpleTitleCaseMapping:0x27B4 - }, - { code:0x27B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B5 - ,simpleLowerCaseMapping:0x27B5 - ,simpleTitleCaseMapping:0x27B5 - }, - { code:0x27B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B6 - ,simpleLowerCaseMapping:0x27B6 - ,simpleTitleCaseMapping:0x27B6 - }, - { code:0x27B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B7 - ,simpleLowerCaseMapping:0x27B7 - ,simpleTitleCaseMapping:0x27B7 - }, - { code:0x27B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B8 - ,simpleLowerCaseMapping:0x27B8 - ,simpleTitleCaseMapping:0x27B8 - }, - { code:0x27B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27B9 - ,simpleLowerCaseMapping:0x27B9 - ,simpleTitleCaseMapping:0x27B9 - }, - { code:0x27BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27BA - ,simpleLowerCaseMapping:0x27BA - ,simpleTitleCaseMapping:0x27BA - }, - { code:0x27BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27BB - ,simpleLowerCaseMapping:0x27BB - ,simpleTitleCaseMapping:0x27BB - }, - { code:0x27BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27BC - ,simpleLowerCaseMapping:0x27BC - ,simpleTitleCaseMapping:0x27BC - }, - { code:0x27BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27BD - ,simpleLowerCaseMapping:0x27BD - ,simpleTitleCaseMapping:0x27BD - }, - { code:0x27BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x27BE - ,simpleLowerCaseMapping:0x27BE - ,simpleTitleCaseMapping:0x27BE - }, - { code:0x27C0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C0 - ,simpleLowerCaseMapping:0x27C0 - ,simpleTitleCaseMapping:0x27C0 - }, - { code:0x27C1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C1 - ,simpleLowerCaseMapping:0x27C1 - ,simpleTitleCaseMapping:0x27C1 - }, - { code:0x27C2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C2 - ,simpleLowerCaseMapping:0x27C2 - ,simpleTitleCaseMapping:0x27C2 - }, - { code:0x27C3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C3 - ,simpleLowerCaseMapping:0x27C3 - ,simpleTitleCaseMapping:0x27C3 - }, - { code:0x27C4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C4 - ,simpleLowerCaseMapping:0x27C4 - ,simpleTitleCaseMapping:0x27C4 - }, - { code:0x27C5 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x27C5 - ,simpleLowerCaseMapping:0x27C5 - ,simpleTitleCaseMapping:0x27C5 - }, - { code:0x27C6 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x27C6 - ,simpleLowerCaseMapping:0x27C6 - ,simpleTitleCaseMapping:0x27C6 - }, - { code:0x27C7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C7 - ,simpleLowerCaseMapping:0x27C7 - ,simpleTitleCaseMapping:0x27C7 - }, - { code:0x27C8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C8 - ,simpleLowerCaseMapping:0x27C8 - ,simpleTitleCaseMapping:0x27C8 - }, - { code:0x27C9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27C9 - ,simpleLowerCaseMapping:0x27C9 - ,simpleTitleCaseMapping:0x27C9 - }, - { code:0x27CA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27CA - ,simpleLowerCaseMapping:0x27CA - ,simpleTitleCaseMapping:0x27CA - }, - { code:0x27D0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D0 - ,simpleLowerCaseMapping:0x27D0 - ,simpleTitleCaseMapping:0x27D0 - }, - { code:0x27D1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D1 - ,simpleLowerCaseMapping:0x27D1 - ,simpleTitleCaseMapping:0x27D1 - }, - { code:0x27D2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D2 - ,simpleLowerCaseMapping:0x27D2 - ,simpleTitleCaseMapping:0x27D2 - }, - { code:0x27D3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D3 - ,simpleLowerCaseMapping:0x27D3 - ,simpleTitleCaseMapping:0x27D3 - }, - { code:0x27D4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D4 - ,simpleLowerCaseMapping:0x27D4 - ,simpleTitleCaseMapping:0x27D4 - }, - { code:0x27D5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D5 - ,simpleLowerCaseMapping:0x27D5 - ,simpleTitleCaseMapping:0x27D5 - }, - { code:0x27D6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D6 - ,simpleLowerCaseMapping:0x27D6 - ,simpleTitleCaseMapping:0x27D6 - }, - { code:0x27D7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D7 - ,simpleLowerCaseMapping:0x27D7 - ,simpleTitleCaseMapping:0x27D7 - }, - { code:0x27D8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D8 - ,simpleLowerCaseMapping:0x27D8 - ,simpleTitleCaseMapping:0x27D8 - }, - { code:0x27D9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27D9 - ,simpleLowerCaseMapping:0x27D9 - ,simpleTitleCaseMapping:0x27D9 - }, - { code:0x27DA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DA - ,simpleLowerCaseMapping:0x27DA - ,simpleTitleCaseMapping:0x27DA - }, - { code:0x27DB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DB - ,simpleLowerCaseMapping:0x27DB - ,simpleTitleCaseMapping:0x27DB - }, - { code:0x27DC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DC - ,simpleLowerCaseMapping:0x27DC - ,simpleTitleCaseMapping:0x27DC - }, - { code:0x27DD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DD - ,simpleLowerCaseMapping:0x27DD - ,simpleTitleCaseMapping:0x27DD - }, - { code:0x27DE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DE - ,simpleLowerCaseMapping:0x27DE - ,simpleTitleCaseMapping:0x27DE - }, - { code:0x27DF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27DF - ,simpleLowerCaseMapping:0x27DF - ,simpleTitleCaseMapping:0x27DF - }, - { code:0x27E0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E0 - ,simpleLowerCaseMapping:0x27E0 - ,simpleTitleCaseMapping:0x27E0 - }, - { code:0x27E1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E1 - ,simpleLowerCaseMapping:0x27E1 - ,simpleTitleCaseMapping:0x27E1 - }, - { code:0x27E2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E2 - ,simpleLowerCaseMapping:0x27E2 - ,simpleTitleCaseMapping:0x27E2 - }, - { code:0x27E3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E3 - ,simpleLowerCaseMapping:0x27E3 - ,simpleTitleCaseMapping:0x27E3 - }, - { code:0x27E4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E4 - ,simpleLowerCaseMapping:0x27E4 - ,simpleTitleCaseMapping:0x27E4 - }, - { code:0x27E5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27E5 - ,simpleLowerCaseMapping:0x27E5 - ,simpleTitleCaseMapping:0x27E5 - }, - { code:0x27E6 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x27E6 - ,simpleLowerCaseMapping:0x27E6 - ,simpleTitleCaseMapping:0x27E6 - }, - { code:0x27E7 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x27E7 - ,simpleLowerCaseMapping:0x27E7 - ,simpleTitleCaseMapping:0x27E7 - }, - { code:0x27E8 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x27E8 - ,simpleLowerCaseMapping:0x27E8 - ,simpleTitleCaseMapping:0x27E8 - }, - { code:0x27E9 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x27E9 - ,simpleLowerCaseMapping:0x27E9 - ,simpleTitleCaseMapping:0x27E9 - }, - { code:0x27EA - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x27EA - ,simpleLowerCaseMapping:0x27EA - ,simpleTitleCaseMapping:0x27EA - }, - { code:0x27EB - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x27EB - ,simpleLowerCaseMapping:0x27EB - ,simpleTitleCaseMapping:0x27EB - }, - { code:0x27F0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F0 - ,simpleLowerCaseMapping:0x27F0 - ,simpleTitleCaseMapping:0x27F0 - }, - { code:0x27F1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F1 - ,simpleLowerCaseMapping:0x27F1 - ,simpleTitleCaseMapping:0x27F1 - }, - { code:0x27F2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F2 - ,simpleLowerCaseMapping:0x27F2 - ,simpleTitleCaseMapping:0x27F2 - }, - { code:0x27F3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F3 - ,simpleLowerCaseMapping:0x27F3 - ,simpleTitleCaseMapping:0x27F3 - }, - { code:0x27F4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F4 - ,simpleLowerCaseMapping:0x27F4 - ,simpleTitleCaseMapping:0x27F4 - }, - { code:0x27F5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F5 - ,simpleLowerCaseMapping:0x27F5 - ,simpleTitleCaseMapping:0x27F5 - }, - { code:0x27F6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F6 - ,simpleLowerCaseMapping:0x27F6 - ,simpleTitleCaseMapping:0x27F6 - }, - { code:0x27F7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F7 - ,simpleLowerCaseMapping:0x27F7 - ,simpleTitleCaseMapping:0x27F7 - }, - { code:0x27F8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F8 - ,simpleLowerCaseMapping:0x27F8 - ,simpleTitleCaseMapping:0x27F8 - }, - { code:0x27F9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27F9 - ,simpleLowerCaseMapping:0x27F9 - ,simpleTitleCaseMapping:0x27F9 - }, - { code:0x27FA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FA - ,simpleLowerCaseMapping:0x27FA - ,simpleTitleCaseMapping:0x27FA - }, - { code:0x27FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FB - ,simpleLowerCaseMapping:0x27FB - ,simpleTitleCaseMapping:0x27FB - }, - { code:0x27FC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FC - ,simpleLowerCaseMapping:0x27FC - ,simpleTitleCaseMapping:0x27FC - }, - { code:0x27FD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FD - ,simpleLowerCaseMapping:0x27FD - ,simpleTitleCaseMapping:0x27FD - }, - { code:0x27FE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FE - ,simpleLowerCaseMapping:0x27FE - ,simpleTitleCaseMapping:0x27FE - }, - { code:0x27FF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x27FF - ,simpleLowerCaseMapping:0x27FF - ,simpleTitleCaseMapping:0x27FF - }, - { code:0x2800 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2800 - ,simpleLowerCaseMapping:0x2800 - ,simpleTitleCaseMapping:0x2800 - }, - { code:0x2801 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2801 - ,simpleLowerCaseMapping:0x2801 - ,simpleTitleCaseMapping:0x2801 - }, - { code:0x2802 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2802 - ,simpleLowerCaseMapping:0x2802 - ,simpleTitleCaseMapping:0x2802 - }, - { code:0x2803 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2803 - ,simpleLowerCaseMapping:0x2803 - ,simpleTitleCaseMapping:0x2803 - }, - { code:0x2804 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2804 - ,simpleLowerCaseMapping:0x2804 - ,simpleTitleCaseMapping:0x2804 - }, - { code:0x2805 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2805 - ,simpleLowerCaseMapping:0x2805 - ,simpleTitleCaseMapping:0x2805 - }, - { code:0x2806 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2806 - ,simpleLowerCaseMapping:0x2806 - ,simpleTitleCaseMapping:0x2806 - }, - { code:0x2807 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2807 - ,simpleLowerCaseMapping:0x2807 - ,simpleTitleCaseMapping:0x2807 - }, - { code:0x2808 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2808 - ,simpleLowerCaseMapping:0x2808 - ,simpleTitleCaseMapping:0x2808 - }, - { code:0x2809 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2809 - ,simpleLowerCaseMapping:0x2809 - ,simpleTitleCaseMapping:0x2809 - }, - { code:0x280A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280A - ,simpleLowerCaseMapping:0x280A - ,simpleTitleCaseMapping:0x280A - }, - { code:0x280B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280B - ,simpleLowerCaseMapping:0x280B - ,simpleTitleCaseMapping:0x280B - }, - { code:0x280C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280C - ,simpleLowerCaseMapping:0x280C - ,simpleTitleCaseMapping:0x280C - }, - { code:0x280D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280D - ,simpleLowerCaseMapping:0x280D - ,simpleTitleCaseMapping:0x280D - }, - { code:0x280E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280E - ,simpleLowerCaseMapping:0x280E - ,simpleTitleCaseMapping:0x280E - }, - { code:0x280F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x280F - ,simpleLowerCaseMapping:0x280F - ,simpleTitleCaseMapping:0x280F - }, - { code:0x2810 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2810 - ,simpleLowerCaseMapping:0x2810 - ,simpleTitleCaseMapping:0x2810 - }, - { code:0x2811 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2811 - ,simpleLowerCaseMapping:0x2811 - ,simpleTitleCaseMapping:0x2811 - }, - { code:0x2812 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2812 - ,simpleLowerCaseMapping:0x2812 - ,simpleTitleCaseMapping:0x2812 - }, - { code:0x2813 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2813 - ,simpleLowerCaseMapping:0x2813 - ,simpleTitleCaseMapping:0x2813 - }, - { code:0x2814 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2814 - ,simpleLowerCaseMapping:0x2814 - ,simpleTitleCaseMapping:0x2814 - }, - { code:0x2815 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2815 - ,simpleLowerCaseMapping:0x2815 - ,simpleTitleCaseMapping:0x2815 - }, - { code:0x2816 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2816 - ,simpleLowerCaseMapping:0x2816 - ,simpleTitleCaseMapping:0x2816 - }, - { code:0x2817 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2817 - ,simpleLowerCaseMapping:0x2817 - ,simpleTitleCaseMapping:0x2817 - }, - { code:0x2818 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2818 - ,simpleLowerCaseMapping:0x2818 - ,simpleTitleCaseMapping:0x2818 - }, - { code:0x2819 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2819 - ,simpleLowerCaseMapping:0x2819 - ,simpleTitleCaseMapping:0x2819 - }, - { code:0x281A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281A - ,simpleLowerCaseMapping:0x281A - ,simpleTitleCaseMapping:0x281A - }, - { code:0x281B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281B - ,simpleLowerCaseMapping:0x281B - ,simpleTitleCaseMapping:0x281B - }, - { code:0x281C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281C - ,simpleLowerCaseMapping:0x281C - ,simpleTitleCaseMapping:0x281C - }, - { code:0x281D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281D - ,simpleLowerCaseMapping:0x281D - ,simpleTitleCaseMapping:0x281D - }, - { code:0x281E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281E - ,simpleLowerCaseMapping:0x281E - ,simpleTitleCaseMapping:0x281E - }, - { code:0x281F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x281F - ,simpleLowerCaseMapping:0x281F - ,simpleTitleCaseMapping:0x281F - }, - { code:0x2820 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2820 - ,simpleLowerCaseMapping:0x2820 - ,simpleTitleCaseMapping:0x2820 - }, - { code:0x2821 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2821 - ,simpleLowerCaseMapping:0x2821 - ,simpleTitleCaseMapping:0x2821 - }, - { code:0x2822 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2822 - ,simpleLowerCaseMapping:0x2822 - ,simpleTitleCaseMapping:0x2822 - }, - { code:0x2823 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2823 - ,simpleLowerCaseMapping:0x2823 - ,simpleTitleCaseMapping:0x2823 - }, - { code:0x2824 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2824 - ,simpleLowerCaseMapping:0x2824 - ,simpleTitleCaseMapping:0x2824 - }, - { code:0x2825 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2825 - ,simpleLowerCaseMapping:0x2825 - ,simpleTitleCaseMapping:0x2825 - }, - { code:0x2826 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2826 - ,simpleLowerCaseMapping:0x2826 - ,simpleTitleCaseMapping:0x2826 - }, - { code:0x2827 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2827 - ,simpleLowerCaseMapping:0x2827 - ,simpleTitleCaseMapping:0x2827 - }, - { code:0x2828 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2828 - ,simpleLowerCaseMapping:0x2828 - ,simpleTitleCaseMapping:0x2828 - }, - { code:0x2829 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2829 - ,simpleLowerCaseMapping:0x2829 - ,simpleTitleCaseMapping:0x2829 - }, - { code:0x282A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282A - ,simpleLowerCaseMapping:0x282A - ,simpleTitleCaseMapping:0x282A - }, - { code:0x282B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282B - ,simpleLowerCaseMapping:0x282B - ,simpleTitleCaseMapping:0x282B - }, - { code:0x282C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282C - ,simpleLowerCaseMapping:0x282C - ,simpleTitleCaseMapping:0x282C - }, - { code:0x282D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282D - ,simpleLowerCaseMapping:0x282D - ,simpleTitleCaseMapping:0x282D - }, - { code:0x282E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282E - ,simpleLowerCaseMapping:0x282E - ,simpleTitleCaseMapping:0x282E - }, - { code:0x282F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x282F - ,simpleLowerCaseMapping:0x282F - ,simpleTitleCaseMapping:0x282F - }, - { code:0x2830 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2830 - ,simpleLowerCaseMapping:0x2830 - ,simpleTitleCaseMapping:0x2830 - }, - { code:0x2831 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2831 - ,simpleLowerCaseMapping:0x2831 - ,simpleTitleCaseMapping:0x2831 - }, - { code:0x2832 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2832 - ,simpleLowerCaseMapping:0x2832 - ,simpleTitleCaseMapping:0x2832 - }, - { code:0x2833 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2833 - ,simpleLowerCaseMapping:0x2833 - ,simpleTitleCaseMapping:0x2833 - }, - { code:0x2834 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2834 - ,simpleLowerCaseMapping:0x2834 - ,simpleTitleCaseMapping:0x2834 - }, - { code:0x2835 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2835 - ,simpleLowerCaseMapping:0x2835 - ,simpleTitleCaseMapping:0x2835 - }, - { code:0x2836 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2836 - ,simpleLowerCaseMapping:0x2836 - ,simpleTitleCaseMapping:0x2836 - }, - { code:0x2837 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2837 - ,simpleLowerCaseMapping:0x2837 - ,simpleTitleCaseMapping:0x2837 - }, - { code:0x2838 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2838 - ,simpleLowerCaseMapping:0x2838 - ,simpleTitleCaseMapping:0x2838 - }, - { code:0x2839 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2839 - ,simpleLowerCaseMapping:0x2839 - ,simpleTitleCaseMapping:0x2839 - }, - { code:0x283A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283A - ,simpleLowerCaseMapping:0x283A - ,simpleTitleCaseMapping:0x283A - }, - { code:0x283B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283B - ,simpleLowerCaseMapping:0x283B - ,simpleTitleCaseMapping:0x283B - }, - { code:0x283C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283C - ,simpleLowerCaseMapping:0x283C - ,simpleTitleCaseMapping:0x283C - }, - { code:0x283D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283D - ,simpleLowerCaseMapping:0x283D - ,simpleTitleCaseMapping:0x283D - }, - { code:0x283E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283E - ,simpleLowerCaseMapping:0x283E - ,simpleTitleCaseMapping:0x283E - }, - { code:0x283F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x283F - ,simpleLowerCaseMapping:0x283F - ,simpleTitleCaseMapping:0x283F - }, - { code:0x2840 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2840 - ,simpleLowerCaseMapping:0x2840 - ,simpleTitleCaseMapping:0x2840 - }, - { code:0x2841 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2841 - ,simpleLowerCaseMapping:0x2841 - ,simpleTitleCaseMapping:0x2841 - }, - { code:0x2842 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2842 - ,simpleLowerCaseMapping:0x2842 - ,simpleTitleCaseMapping:0x2842 - }, - { code:0x2843 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2843 - ,simpleLowerCaseMapping:0x2843 - ,simpleTitleCaseMapping:0x2843 - }, - { code:0x2844 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2844 - ,simpleLowerCaseMapping:0x2844 - ,simpleTitleCaseMapping:0x2844 - }, - { code:0x2845 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2845 - ,simpleLowerCaseMapping:0x2845 - ,simpleTitleCaseMapping:0x2845 - }, - { code:0x2846 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2846 - ,simpleLowerCaseMapping:0x2846 - ,simpleTitleCaseMapping:0x2846 - }, - { code:0x2847 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2847 - ,simpleLowerCaseMapping:0x2847 - ,simpleTitleCaseMapping:0x2847 - }, - { code:0x2848 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2848 - ,simpleLowerCaseMapping:0x2848 - ,simpleTitleCaseMapping:0x2848 - }, - { code:0x2849 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2849 - ,simpleLowerCaseMapping:0x2849 - ,simpleTitleCaseMapping:0x2849 - }, - { code:0x284A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284A - ,simpleLowerCaseMapping:0x284A - ,simpleTitleCaseMapping:0x284A - }, - { code:0x284B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284B - ,simpleLowerCaseMapping:0x284B - ,simpleTitleCaseMapping:0x284B - }, - { code:0x284C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284C - ,simpleLowerCaseMapping:0x284C - ,simpleTitleCaseMapping:0x284C - }, - { code:0x284D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284D - ,simpleLowerCaseMapping:0x284D - ,simpleTitleCaseMapping:0x284D - }, - { code:0x284E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284E - ,simpleLowerCaseMapping:0x284E - ,simpleTitleCaseMapping:0x284E - }, - { code:0x284F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x284F - ,simpleLowerCaseMapping:0x284F - ,simpleTitleCaseMapping:0x284F - }, - { code:0x2850 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2850 - ,simpleLowerCaseMapping:0x2850 - ,simpleTitleCaseMapping:0x2850 - }, - { code:0x2851 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2851 - ,simpleLowerCaseMapping:0x2851 - ,simpleTitleCaseMapping:0x2851 - }, - { code:0x2852 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2852 - ,simpleLowerCaseMapping:0x2852 - ,simpleTitleCaseMapping:0x2852 - }, - { code:0x2853 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2853 - ,simpleLowerCaseMapping:0x2853 - ,simpleTitleCaseMapping:0x2853 - }, - { code:0x2854 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2854 - ,simpleLowerCaseMapping:0x2854 - ,simpleTitleCaseMapping:0x2854 - }, - { code:0x2855 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2855 - ,simpleLowerCaseMapping:0x2855 - ,simpleTitleCaseMapping:0x2855 - }, - { code:0x2856 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2856 - ,simpleLowerCaseMapping:0x2856 - ,simpleTitleCaseMapping:0x2856 - }, - { code:0x2857 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2857 - ,simpleLowerCaseMapping:0x2857 - ,simpleTitleCaseMapping:0x2857 - }, - { code:0x2858 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2858 - ,simpleLowerCaseMapping:0x2858 - ,simpleTitleCaseMapping:0x2858 - }, - { code:0x2859 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2859 - ,simpleLowerCaseMapping:0x2859 - ,simpleTitleCaseMapping:0x2859 - }, - { code:0x285A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285A - ,simpleLowerCaseMapping:0x285A - ,simpleTitleCaseMapping:0x285A - }, - { code:0x285B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285B - ,simpleLowerCaseMapping:0x285B - ,simpleTitleCaseMapping:0x285B - }, - { code:0x285C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285C - ,simpleLowerCaseMapping:0x285C - ,simpleTitleCaseMapping:0x285C - }, - { code:0x285D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285D - ,simpleLowerCaseMapping:0x285D - ,simpleTitleCaseMapping:0x285D - }, - { code:0x285E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285E - ,simpleLowerCaseMapping:0x285E - ,simpleTitleCaseMapping:0x285E - }, - { code:0x285F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x285F - ,simpleLowerCaseMapping:0x285F - ,simpleTitleCaseMapping:0x285F - }, - { code:0x2860 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2860 - ,simpleLowerCaseMapping:0x2860 - ,simpleTitleCaseMapping:0x2860 - }, - { code:0x2861 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2861 - ,simpleLowerCaseMapping:0x2861 - ,simpleTitleCaseMapping:0x2861 - }, - { code:0x2862 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2862 - ,simpleLowerCaseMapping:0x2862 - ,simpleTitleCaseMapping:0x2862 - }, - { code:0x2863 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2863 - ,simpleLowerCaseMapping:0x2863 - ,simpleTitleCaseMapping:0x2863 - }, - { code:0x2864 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2864 - ,simpleLowerCaseMapping:0x2864 - ,simpleTitleCaseMapping:0x2864 - }, - { code:0x2865 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2865 - ,simpleLowerCaseMapping:0x2865 - ,simpleTitleCaseMapping:0x2865 - }, - { code:0x2866 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2866 - ,simpleLowerCaseMapping:0x2866 - ,simpleTitleCaseMapping:0x2866 - }, - { code:0x2867 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2867 - ,simpleLowerCaseMapping:0x2867 - ,simpleTitleCaseMapping:0x2867 - }, - { code:0x2868 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2868 - ,simpleLowerCaseMapping:0x2868 - ,simpleTitleCaseMapping:0x2868 - }, - { code:0x2869 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2869 - ,simpleLowerCaseMapping:0x2869 - ,simpleTitleCaseMapping:0x2869 - }, - { code:0x286A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286A - ,simpleLowerCaseMapping:0x286A - ,simpleTitleCaseMapping:0x286A - }, - { code:0x286B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286B - ,simpleLowerCaseMapping:0x286B - ,simpleTitleCaseMapping:0x286B - }, - { code:0x286C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286C - ,simpleLowerCaseMapping:0x286C - ,simpleTitleCaseMapping:0x286C - }, - { code:0x286D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286D - ,simpleLowerCaseMapping:0x286D - ,simpleTitleCaseMapping:0x286D - }, - { code:0x286E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286E - ,simpleLowerCaseMapping:0x286E - ,simpleTitleCaseMapping:0x286E - }, - { code:0x286F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x286F - ,simpleLowerCaseMapping:0x286F - ,simpleTitleCaseMapping:0x286F - }, - { code:0x2870 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2870 - ,simpleLowerCaseMapping:0x2870 - ,simpleTitleCaseMapping:0x2870 - }, - { code:0x2871 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2871 - ,simpleLowerCaseMapping:0x2871 - ,simpleTitleCaseMapping:0x2871 - }, - { code:0x2872 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2872 - ,simpleLowerCaseMapping:0x2872 - ,simpleTitleCaseMapping:0x2872 - }, - { code:0x2873 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2873 - ,simpleLowerCaseMapping:0x2873 - ,simpleTitleCaseMapping:0x2873 - }, - { code:0x2874 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2874 - ,simpleLowerCaseMapping:0x2874 - ,simpleTitleCaseMapping:0x2874 - }, - { code:0x2875 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2875 - ,simpleLowerCaseMapping:0x2875 - ,simpleTitleCaseMapping:0x2875 - }, - { code:0x2876 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2876 - ,simpleLowerCaseMapping:0x2876 - ,simpleTitleCaseMapping:0x2876 - }, - { code:0x2877 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2877 - ,simpleLowerCaseMapping:0x2877 - ,simpleTitleCaseMapping:0x2877 - }, - { code:0x2878 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2878 - ,simpleLowerCaseMapping:0x2878 - ,simpleTitleCaseMapping:0x2878 - }, - { code:0x2879 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2879 - ,simpleLowerCaseMapping:0x2879 - ,simpleTitleCaseMapping:0x2879 - }, - { code:0x287A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287A - ,simpleLowerCaseMapping:0x287A - ,simpleTitleCaseMapping:0x287A - }, - { code:0x287B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287B - ,simpleLowerCaseMapping:0x287B - ,simpleTitleCaseMapping:0x287B - }, - { code:0x287C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287C - ,simpleLowerCaseMapping:0x287C - ,simpleTitleCaseMapping:0x287C - }, - { code:0x287D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287D - ,simpleLowerCaseMapping:0x287D - ,simpleTitleCaseMapping:0x287D - }, - { code:0x287E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287E - ,simpleLowerCaseMapping:0x287E - ,simpleTitleCaseMapping:0x287E - }, - { code:0x287F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x287F - ,simpleLowerCaseMapping:0x287F - ,simpleTitleCaseMapping:0x287F - }, - { code:0x2880 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2880 - ,simpleLowerCaseMapping:0x2880 - ,simpleTitleCaseMapping:0x2880 - }, - { code:0x2881 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2881 - ,simpleLowerCaseMapping:0x2881 - ,simpleTitleCaseMapping:0x2881 - }, - { code:0x2882 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2882 - ,simpleLowerCaseMapping:0x2882 - ,simpleTitleCaseMapping:0x2882 - }, - { code:0x2883 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2883 - ,simpleLowerCaseMapping:0x2883 - ,simpleTitleCaseMapping:0x2883 - }, - { code:0x2884 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2884 - ,simpleLowerCaseMapping:0x2884 - ,simpleTitleCaseMapping:0x2884 - }, - { code:0x2885 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2885 - ,simpleLowerCaseMapping:0x2885 - ,simpleTitleCaseMapping:0x2885 - }, - { code:0x2886 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2886 - ,simpleLowerCaseMapping:0x2886 - ,simpleTitleCaseMapping:0x2886 - }, - { code:0x2887 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2887 - ,simpleLowerCaseMapping:0x2887 - ,simpleTitleCaseMapping:0x2887 - }, - { code:0x2888 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2888 - ,simpleLowerCaseMapping:0x2888 - ,simpleTitleCaseMapping:0x2888 - }, - { code:0x2889 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2889 - ,simpleLowerCaseMapping:0x2889 - ,simpleTitleCaseMapping:0x2889 - }, - { code:0x288A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288A - ,simpleLowerCaseMapping:0x288A - ,simpleTitleCaseMapping:0x288A - }, - { code:0x288B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288B - ,simpleLowerCaseMapping:0x288B - ,simpleTitleCaseMapping:0x288B - }, - { code:0x288C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288C - ,simpleLowerCaseMapping:0x288C - ,simpleTitleCaseMapping:0x288C - }, - { code:0x288D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288D - ,simpleLowerCaseMapping:0x288D - ,simpleTitleCaseMapping:0x288D - }, - { code:0x288E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288E - ,simpleLowerCaseMapping:0x288E - ,simpleTitleCaseMapping:0x288E - }, - { code:0x288F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x288F - ,simpleLowerCaseMapping:0x288F - ,simpleTitleCaseMapping:0x288F - }, - { code:0x2890 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2890 - ,simpleLowerCaseMapping:0x2890 - ,simpleTitleCaseMapping:0x2890 - }, - { code:0x2891 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2891 - ,simpleLowerCaseMapping:0x2891 - ,simpleTitleCaseMapping:0x2891 - }, - { code:0x2892 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2892 - ,simpleLowerCaseMapping:0x2892 - ,simpleTitleCaseMapping:0x2892 - }, - { code:0x2893 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2893 - ,simpleLowerCaseMapping:0x2893 - ,simpleTitleCaseMapping:0x2893 - }, - { code:0x2894 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2894 - ,simpleLowerCaseMapping:0x2894 - ,simpleTitleCaseMapping:0x2894 - }, - { code:0x2895 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2895 - ,simpleLowerCaseMapping:0x2895 - ,simpleTitleCaseMapping:0x2895 - }, - { code:0x2896 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2896 - ,simpleLowerCaseMapping:0x2896 - ,simpleTitleCaseMapping:0x2896 - }, - { code:0x2897 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2897 - ,simpleLowerCaseMapping:0x2897 - ,simpleTitleCaseMapping:0x2897 - }, - { code:0x2898 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2898 - ,simpleLowerCaseMapping:0x2898 - ,simpleTitleCaseMapping:0x2898 - }, - { code:0x2899 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2899 - ,simpleLowerCaseMapping:0x2899 - ,simpleTitleCaseMapping:0x2899 - }, - { code:0x289A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289A - ,simpleLowerCaseMapping:0x289A - ,simpleTitleCaseMapping:0x289A - }, - { code:0x289B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289B - ,simpleLowerCaseMapping:0x289B - ,simpleTitleCaseMapping:0x289B - }, - { code:0x289C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289C - ,simpleLowerCaseMapping:0x289C - ,simpleTitleCaseMapping:0x289C - }, - { code:0x289D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289D - ,simpleLowerCaseMapping:0x289D - ,simpleTitleCaseMapping:0x289D - }, - { code:0x289E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289E - ,simpleLowerCaseMapping:0x289E - ,simpleTitleCaseMapping:0x289E - }, - { code:0x289F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x289F - ,simpleLowerCaseMapping:0x289F - ,simpleTitleCaseMapping:0x289F - }, - { code:0x28A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A0 - ,simpleLowerCaseMapping:0x28A0 - ,simpleTitleCaseMapping:0x28A0 - }, - { code:0x28A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A1 - ,simpleLowerCaseMapping:0x28A1 - ,simpleTitleCaseMapping:0x28A1 - }, - { code:0x28A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A2 - ,simpleLowerCaseMapping:0x28A2 - ,simpleTitleCaseMapping:0x28A2 - }, - { code:0x28A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A3 - ,simpleLowerCaseMapping:0x28A3 - ,simpleTitleCaseMapping:0x28A3 - }, - { code:0x28A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A4 - ,simpleLowerCaseMapping:0x28A4 - ,simpleTitleCaseMapping:0x28A4 - }, - { code:0x28A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A5 - ,simpleLowerCaseMapping:0x28A5 - ,simpleTitleCaseMapping:0x28A5 - }, - { code:0x28A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A6 - ,simpleLowerCaseMapping:0x28A6 - ,simpleTitleCaseMapping:0x28A6 - }, - { code:0x28A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A7 - ,simpleLowerCaseMapping:0x28A7 - ,simpleTitleCaseMapping:0x28A7 - }, - { code:0x28A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A8 - ,simpleLowerCaseMapping:0x28A8 - ,simpleTitleCaseMapping:0x28A8 - }, - { code:0x28A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28A9 - ,simpleLowerCaseMapping:0x28A9 - ,simpleTitleCaseMapping:0x28A9 - }, - { code:0x28AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AA - ,simpleLowerCaseMapping:0x28AA - ,simpleTitleCaseMapping:0x28AA - }, - { code:0x28AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AB - ,simpleLowerCaseMapping:0x28AB - ,simpleTitleCaseMapping:0x28AB - }, - { code:0x28AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AC - ,simpleLowerCaseMapping:0x28AC - ,simpleTitleCaseMapping:0x28AC - }, - { code:0x28AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AD - ,simpleLowerCaseMapping:0x28AD - ,simpleTitleCaseMapping:0x28AD - }, - { code:0x28AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AE - ,simpleLowerCaseMapping:0x28AE - ,simpleTitleCaseMapping:0x28AE - }, - { code:0x28AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28AF - ,simpleLowerCaseMapping:0x28AF - ,simpleTitleCaseMapping:0x28AF - }, - { code:0x28B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B0 - ,simpleLowerCaseMapping:0x28B0 - ,simpleTitleCaseMapping:0x28B0 - }, - { code:0x28B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B1 - ,simpleLowerCaseMapping:0x28B1 - ,simpleTitleCaseMapping:0x28B1 - }, - { code:0x28B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B2 - ,simpleLowerCaseMapping:0x28B2 - ,simpleTitleCaseMapping:0x28B2 - }, - { code:0x28B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B3 - ,simpleLowerCaseMapping:0x28B3 - ,simpleTitleCaseMapping:0x28B3 - }, - { code:0x28B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B4 - ,simpleLowerCaseMapping:0x28B4 - ,simpleTitleCaseMapping:0x28B4 - }, - { code:0x28B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B5 - ,simpleLowerCaseMapping:0x28B5 - ,simpleTitleCaseMapping:0x28B5 - }, - { code:0x28B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B6 - ,simpleLowerCaseMapping:0x28B6 - ,simpleTitleCaseMapping:0x28B6 - }, - { code:0x28B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B7 - ,simpleLowerCaseMapping:0x28B7 - ,simpleTitleCaseMapping:0x28B7 - }, - { code:0x28B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B8 - ,simpleLowerCaseMapping:0x28B8 - ,simpleTitleCaseMapping:0x28B8 - }, - { code:0x28B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28B9 - ,simpleLowerCaseMapping:0x28B9 - ,simpleTitleCaseMapping:0x28B9 - }, - { code:0x28BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BA - ,simpleLowerCaseMapping:0x28BA - ,simpleTitleCaseMapping:0x28BA - }, - { code:0x28BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BB - ,simpleLowerCaseMapping:0x28BB - ,simpleTitleCaseMapping:0x28BB - }, - { code:0x28BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BC - ,simpleLowerCaseMapping:0x28BC - ,simpleTitleCaseMapping:0x28BC - }, - { code:0x28BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BD - ,simpleLowerCaseMapping:0x28BD - ,simpleTitleCaseMapping:0x28BD - }, - { code:0x28BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BE - ,simpleLowerCaseMapping:0x28BE - ,simpleTitleCaseMapping:0x28BE - }, - { code:0x28BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28BF - ,simpleLowerCaseMapping:0x28BF - ,simpleTitleCaseMapping:0x28BF - }, - { code:0x28C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C0 - ,simpleLowerCaseMapping:0x28C0 - ,simpleTitleCaseMapping:0x28C0 - }, - { code:0x28C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C1 - ,simpleLowerCaseMapping:0x28C1 - ,simpleTitleCaseMapping:0x28C1 - }, - { code:0x28C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C2 - ,simpleLowerCaseMapping:0x28C2 - ,simpleTitleCaseMapping:0x28C2 - }, - { code:0x28C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C3 - ,simpleLowerCaseMapping:0x28C3 - ,simpleTitleCaseMapping:0x28C3 - }, - { code:0x28C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C4 - ,simpleLowerCaseMapping:0x28C4 - ,simpleTitleCaseMapping:0x28C4 - }, - { code:0x28C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C5 - ,simpleLowerCaseMapping:0x28C5 - ,simpleTitleCaseMapping:0x28C5 - }, - { code:0x28C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C6 - ,simpleLowerCaseMapping:0x28C6 - ,simpleTitleCaseMapping:0x28C6 - }, - { code:0x28C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C7 - ,simpleLowerCaseMapping:0x28C7 - ,simpleTitleCaseMapping:0x28C7 - }, - { code:0x28C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C8 - ,simpleLowerCaseMapping:0x28C8 - ,simpleTitleCaseMapping:0x28C8 - }, - { code:0x28C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28C9 - ,simpleLowerCaseMapping:0x28C9 - ,simpleTitleCaseMapping:0x28C9 - }, - { code:0x28CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CA - ,simpleLowerCaseMapping:0x28CA - ,simpleTitleCaseMapping:0x28CA - }, - { code:0x28CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CB - ,simpleLowerCaseMapping:0x28CB - ,simpleTitleCaseMapping:0x28CB - }, - { code:0x28CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CC - ,simpleLowerCaseMapping:0x28CC - ,simpleTitleCaseMapping:0x28CC - }, - { code:0x28CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CD - ,simpleLowerCaseMapping:0x28CD - ,simpleTitleCaseMapping:0x28CD - }, - { code:0x28CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CE - ,simpleLowerCaseMapping:0x28CE - ,simpleTitleCaseMapping:0x28CE - }, - { code:0x28CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28CF - ,simpleLowerCaseMapping:0x28CF - ,simpleTitleCaseMapping:0x28CF - }, - { code:0x28D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D0 - ,simpleLowerCaseMapping:0x28D0 - ,simpleTitleCaseMapping:0x28D0 - }, - { code:0x28D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D1 - ,simpleLowerCaseMapping:0x28D1 - ,simpleTitleCaseMapping:0x28D1 - }, - { code:0x28D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D2 - ,simpleLowerCaseMapping:0x28D2 - ,simpleTitleCaseMapping:0x28D2 - }, - { code:0x28D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D3 - ,simpleLowerCaseMapping:0x28D3 - ,simpleTitleCaseMapping:0x28D3 - }, - { code:0x28D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D4 - ,simpleLowerCaseMapping:0x28D4 - ,simpleTitleCaseMapping:0x28D4 - }, - { code:0x28D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D5 - ,simpleLowerCaseMapping:0x28D5 - ,simpleTitleCaseMapping:0x28D5 - }, - { code:0x28D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D6 - ,simpleLowerCaseMapping:0x28D6 - ,simpleTitleCaseMapping:0x28D6 - }, - { code:0x28D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D7 - ,simpleLowerCaseMapping:0x28D7 - ,simpleTitleCaseMapping:0x28D7 - }, - { code:0x28D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D8 - ,simpleLowerCaseMapping:0x28D8 - ,simpleTitleCaseMapping:0x28D8 - }, - { code:0x28D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28D9 - ,simpleLowerCaseMapping:0x28D9 - ,simpleTitleCaseMapping:0x28D9 - }, - { code:0x28DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DA - ,simpleLowerCaseMapping:0x28DA - ,simpleTitleCaseMapping:0x28DA - }, - { code:0x28DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DB - ,simpleLowerCaseMapping:0x28DB - ,simpleTitleCaseMapping:0x28DB - }, - { code:0x28DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DC - ,simpleLowerCaseMapping:0x28DC - ,simpleTitleCaseMapping:0x28DC - }, - { code:0x28DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DD - ,simpleLowerCaseMapping:0x28DD - ,simpleTitleCaseMapping:0x28DD - }, - { code:0x28DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DE - ,simpleLowerCaseMapping:0x28DE - ,simpleTitleCaseMapping:0x28DE - }, - { code:0x28DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28DF - ,simpleLowerCaseMapping:0x28DF - ,simpleTitleCaseMapping:0x28DF - }, - { code:0x28E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E0 - ,simpleLowerCaseMapping:0x28E0 - ,simpleTitleCaseMapping:0x28E0 - }, - { code:0x28E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E1 - ,simpleLowerCaseMapping:0x28E1 - ,simpleTitleCaseMapping:0x28E1 - }, - { code:0x28E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E2 - ,simpleLowerCaseMapping:0x28E2 - ,simpleTitleCaseMapping:0x28E2 - }, - { code:0x28E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E3 - ,simpleLowerCaseMapping:0x28E3 - ,simpleTitleCaseMapping:0x28E3 - }, - { code:0x28E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E4 - ,simpleLowerCaseMapping:0x28E4 - ,simpleTitleCaseMapping:0x28E4 - }, - { code:0x28E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E5 - ,simpleLowerCaseMapping:0x28E5 - ,simpleTitleCaseMapping:0x28E5 - }, - { code:0x28E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E6 - ,simpleLowerCaseMapping:0x28E6 - ,simpleTitleCaseMapping:0x28E6 - }, - { code:0x28E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E7 - ,simpleLowerCaseMapping:0x28E7 - ,simpleTitleCaseMapping:0x28E7 - }, - { code:0x28E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E8 - ,simpleLowerCaseMapping:0x28E8 - ,simpleTitleCaseMapping:0x28E8 - }, - { code:0x28E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28E9 - ,simpleLowerCaseMapping:0x28E9 - ,simpleTitleCaseMapping:0x28E9 - }, - { code:0x28EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28EA - ,simpleLowerCaseMapping:0x28EA - ,simpleTitleCaseMapping:0x28EA - }, - { code:0x28EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28EB - ,simpleLowerCaseMapping:0x28EB - ,simpleTitleCaseMapping:0x28EB - }, - { code:0x28EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28EC - ,simpleLowerCaseMapping:0x28EC - ,simpleTitleCaseMapping:0x28EC - }, - { code:0x28ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28ED - ,simpleLowerCaseMapping:0x28ED - ,simpleTitleCaseMapping:0x28ED - }, - { code:0x28EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28EE - ,simpleLowerCaseMapping:0x28EE - ,simpleTitleCaseMapping:0x28EE - }, - { code:0x28EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28EF - ,simpleLowerCaseMapping:0x28EF - ,simpleTitleCaseMapping:0x28EF - }, - { code:0x28F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F0 - ,simpleLowerCaseMapping:0x28F0 - ,simpleTitleCaseMapping:0x28F0 - }, - { code:0x28F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F1 - ,simpleLowerCaseMapping:0x28F1 - ,simpleTitleCaseMapping:0x28F1 - }, - { code:0x28F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F2 - ,simpleLowerCaseMapping:0x28F2 - ,simpleTitleCaseMapping:0x28F2 - }, - { code:0x28F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F3 - ,simpleLowerCaseMapping:0x28F3 - ,simpleTitleCaseMapping:0x28F3 - }, - { code:0x28F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F4 - ,simpleLowerCaseMapping:0x28F4 - ,simpleTitleCaseMapping:0x28F4 - }, - { code:0x28F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F5 - ,simpleLowerCaseMapping:0x28F5 - ,simpleTitleCaseMapping:0x28F5 - }, - { code:0x28F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F6 - ,simpleLowerCaseMapping:0x28F6 - ,simpleTitleCaseMapping:0x28F6 - }, - { code:0x28F7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F7 - ,simpleLowerCaseMapping:0x28F7 - ,simpleTitleCaseMapping:0x28F7 - }, - { code:0x28F8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F8 - ,simpleLowerCaseMapping:0x28F8 - ,simpleTitleCaseMapping:0x28F8 - }, - { code:0x28F9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28F9 - ,simpleLowerCaseMapping:0x28F9 - ,simpleTitleCaseMapping:0x28F9 - }, - { code:0x28FA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FA - ,simpleLowerCaseMapping:0x28FA - ,simpleTitleCaseMapping:0x28FA - }, - { code:0x28FB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FB - ,simpleLowerCaseMapping:0x28FB - ,simpleTitleCaseMapping:0x28FB - }, - { code:0x28FC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FC - ,simpleLowerCaseMapping:0x28FC - ,simpleTitleCaseMapping:0x28FC - }, - { code:0x28FD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FD - ,simpleLowerCaseMapping:0x28FD - ,simpleTitleCaseMapping:0x28FD - }, - { code:0x28FE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FE - ,simpleLowerCaseMapping:0x28FE - ,simpleTitleCaseMapping:0x28FE - }, - { code:0x28FF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x28FF - ,simpleLowerCaseMapping:0x28FF - ,simpleTitleCaseMapping:0x28FF - }, - { code:0x2900 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2900 - ,simpleLowerCaseMapping:0x2900 - ,simpleTitleCaseMapping:0x2900 - }, - { code:0x2901 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2901 - ,simpleLowerCaseMapping:0x2901 - ,simpleTitleCaseMapping:0x2901 - }, - { code:0x2902 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2902 - ,simpleLowerCaseMapping:0x2902 - ,simpleTitleCaseMapping:0x2902 - }, - { code:0x2903 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2903 - ,simpleLowerCaseMapping:0x2903 - ,simpleTitleCaseMapping:0x2903 - }, - { code:0x2904 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2904 - ,simpleLowerCaseMapping:0x2904 - ,simpleTitleCaseMapping:0x2904 - }, - { code:0x2905 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2905 - ,simpleLowerCaseMapping:0x2905 - ,simpleTitleCaseMapping:0x2905 - }, - { code:0x2906 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2906 - ,simpleLowerCaseMapping:0x2906 - ,simpleTitleCaseMapping:0x2906 - }, - { code:0x2907 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2907 - ,simpleLowerCaseMapping:0x2907 - ,simpleTitleCaseMapping:0x2907 - }, - { code:0x2908 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2908 - ,simpleLowerCaseMapping:0x2908 - ,simpleTitleCaseMapping:0x2908 - }, - { code:0x2909 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2909 - ,simpleLowerCaseMapping:0x2909 - ,simpleTitleCaseMapping:0x2909 - }, - { code:0x290A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290A - ,simpleLowerCaseMapping:0x290A - ,simpleTitleCaseMapping:0x290A - }, - { code:0x290B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290B - ,simpleLowerCaseMapping:0x290B - ,simpleTitleCaseMapping:0x290B - }, - { code:0x290C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290C - ,simpleLowerCaseMapping:0x290C - ,simpleTitleCaseMapping:0x290C - }, - { code:0x290D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290D - ,simpleLowerCaseMapping:0x290D - ,simpleTitleCaseMapping:0x290D - }, - { code:0x290E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290E - ,simpleLowerCaseMapping:0x290E - ,simpleTitleCaseMapping:0x290E - }, - { code:0x290F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x290F - ,simpleLowerCaseMapping:0x290F - ,simpleTitleCaseMapping:0x290F - }, - { code:0x2910 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2910 - ,simpleLowerCaseMapping:0x2910 - ,simpleTitleCaseMapping:0x2910 - }, - { code:0x2911 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2911 - ,simpleLowerCaseMapping:0x2911 - ,simpleTitleCaseMapping:0x2911 - }, - { code:0x2912 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2912 - ,simpleLowerCaseMapping:0x2912 - ,simpleTitleCaseMapping:0x2912 - }, - { code:0x2913 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2913 - ,simpleLowerCaseMapping:0x2913 - ,simpleTitleCaseMapping:0x2913 - }, - { code:0x2914 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2914 - ,simpleLowerCaseMapping:0x2914 - ,simpleTitleCaseMapping:0x2914 - }, - { code:0x2915 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2915 - ,simpleLowerCaseMapping:0x2915 - ,simpleTitleCaseMapping:0x2915 - }, - { code:0x2916 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2916 - ,simpleLowerCaseMapping:0x2916 - ,simpleTitleCaseMapping:0x2916 - }, - { code:0x2917 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2917 - ,simpleLowerCaseMapping:0x2917 - ,simpleTitleCaseMapping:0x2917 - }, - { code:0x2918 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2918 - ,simpleLowerCaseMapping:0x2918 - ,simpleTitleCaseMapping:0x2918 - }, - { code:0x2919 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2919 - ,simpleLowerCaseMapping:0x2919 - ,simpleTitleCaseMapping:0x2919 - }, - { code:0x291A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291A - ,simpleLowerCaseMapping:0x291A - ,simpleTitleCaseMapping:0x291A - }, - { code:0x291B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291B - ,simpleLowerCaseMapping:0x291B - ,simpleTitleCaseMapping:0x291B - }, - { code:0x291C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291C - ,simpleLowerCaseMapping:0x291C - ,simpleTitleCaseMapping:0x291C - }, - { code:0x291D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291D - ,simpleLowerCaseMapping:0x291D - ,simpleTitleCaseMapping:0x291D - }, - { code:0x291E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291E - ,simpleLowerCaseMapping:0x291E - ,simpleTitleCaseMapping:0x291E - }, - { code:0x291F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x291F - ,simpleLowerCaseMapping:0x291F - ,simpleTitleCaseMapping:0x291F - }, - { code:0x2920 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2920 - ,simpleLowerCaseMapping:0x2920 - ,simpleTitleCaseMapping:0x2920 - }, - { code:0x2921 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2921 - ,simpleLowerCaseMapping:0x2921 - ,simpleTitleCaseMapping:0x2921 - }, - { code:0x2922 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2922 - ,simpleLowerCaseMapping:0x2922 - ,simpleTitleCaseMapping:0x2922 - }, - { code:0x2923 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2923 - ,simpleLowerCaseMapping:0x2923 - ,simpleTitleCaseMapping:0x2923 - }, - { code:0x2924 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2924 - ,simpleLowerCaseMapping:0x2924 - ,simpleTitleCaseMapping:0x2924 - }, - { code:0x2925 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2925 - ,simpleLowerCaseMapping:0x2925 - ,simpleTitleCaseMapping:0x2925 - }, - { code:0x2926 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2926 - ,simpleLowerCaseMapping:0x2926 - ,simpleTitleCaseMapping:0x2926 - }, - { code:0x2927 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2927 - ,simpleLowerCaseMapping:0x2927 - ,simpleTitleCaseMapping:0x2927 - }, - { code:0x2928 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2928 - ,simpleLowerCaseMapping:0x2928 - ,simpleTitleCaseMapping:0x2928 - }, - { code:0x2929 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2929 - ,simpleLowerCaseMapping:0x2929 - ,simpleTitleCaseMapping:0x2929 - }, - { code:0x292A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292A - ,simpleLowerCaseMapping:0x292A - ,simpleTitleCaseMapping:0x292A - }, - { code:0x292B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292B - ,simpleLowerCaseMapping:0x292B - ,simpleTitleCaseMapping:0x292B - }, - { code:0x292C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292C - ,simpleLowerCaseMapping:0x292C - ,simpleTitleCaseMapping:0x292C - }, - { code:0x292D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292D - ,simpleLowerCaseMapping:0x292D - ,simpleTitleCaseMapping:0x292D - }, - { code:0x292E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292E - ,simpleLowerCaseMapping:0x292E - ,simpleTitleCaseMapping:0x292E - }, - { code:0x292F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x292F - ,simpleLowerCaseMapping:0x292F - ,simpleTitleCaseMapping:0x292F - }, - { code:0x2930 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2930 - ,simpleLowerCaseMapping:0x2930 - ,simpleTitleCaseMapping:0x2930 - }, - { code:0x2931 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2931 - ,simpleLowerCaseMapping:0x2931 - ,simpleTitleCaseMapping:0x2931 - }, - { code:0x2932 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2932 - ,simpleLowerCaseMapping:0x2932 - ,simpleTitleCaseMapping:0x2932 - }, - { code:0x2933 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2933 - ,simpleLowerCaseMapping:0x2933 - ,simpleTitleCaseMapping:0x2933 - }, - { code:0x2934 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2934 - ,simpleLowerCaseMapping:0x2934 - ,simpleTitleCaseMapping:0x2934 - }, - { code:0x2935 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2935 - ,simpleLowerCaseMapping:0x2935 - ,simpleTitleCaseMapping:0x2935 - }, - { code:0x2936 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2936 - ,simpleLowerCaseMapping:0x2936 - ,simpleTitleCaseMapping:0x2936 - }, - { code:0x2937 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2937 - ,simpleLowerCaseMapping:0x2937 - ,simpleTitleCaseMapping:0x2937 - }, - { code:0x2938 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2938 - ,simpleLowerCaseMapping:0x2938 - ,simpleTitleCaseMapping:0x2938 - }, - { code:0x2939 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2939 - ,simpleLowerCaseMapping:0x2939 - ,simpleTitleCaseMapping:0x2939 - }, - { code:0x293A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293A - ,simpleLowerCaseMapping:0x293A - ,simpleTitleCaseMapping:0x293A - }, - { code:0x293B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293B - ,simpleLowerCaseMapping:0x293B - ,simpleTitleCaseMapping:0x293B - }, - { code:0x293C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293C - ,simpleLowerCaseMapping:0x293C - ,simpleTitleCaseMapping:0x293C - }, - { code:0x293D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293D - ,simpleLowerCaseMapping:0x293D - ,simpleTitleCaseMapping:0x293D - }, - { code:0x293E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293E - ,simpleLowerCaseMapping:0x293E - ,simpleTitleCaseMapping:0x293E - }, - { code:0x293F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x293F - ,simpleLowerCaseMapping:0x293F - ,simpleTitleCaseMapping:0x293F - }, - { code:0x2940 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2940 - ,simpleLowerCaseMapping:0x2940 - ,simpleTitleCaseMapping:0x2940 - }, - { code:0x2941 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2941 - ,simpleLowerCaseMapping:0x2941 - ,simpleTitleCaseMapping:0x2941 - }, - { code:0x2942 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2942 - ,simpleLowerCaseMapping:0x2942 - ,simpleTitleCaseMapping:0x2942 - }, - { code:0x2943 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2943 - ,simpleLowerCaseMapping:0x2943 - ,simpleTitleCaseMapping:0x2943 - }, - { code:0x2944 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2944 - ,simpleLowerCaseMapping:0x2944 - ,simpleTitleCaseMapping:0x2944 - }, - { code:0x2945 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2945 - ,simpleLowerCaseMapping:0x2945 - ,simpleTitleCaseMapping:0x2945 - }, - { code:0x2946 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2946 - ,simpleLowerCaseMapping:0x2946 - ,simpleTitleCaseMapping:0x2946 - }, - { code:0x2947 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2947 - ,simpleLowerCaseMapping:0x2947 - ,simpleTitleCaseMapping:0x2947 - }, - { code:0x2948 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2948 - ,simpleLowerCaseMapping:0x2948 - ,simpleTitleCaseMapping:0x2948 - }, - { code:0x2949 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2949 - ,simpleLowerCaseMapping:0x2949 - ,simpleTitleCaseMapping:0x2949 - }, - { code:0x294A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294A - ,simpleLowerCaseMapping:0x294A - ,simpleTitleCaseMapping:0x294A - }, - { code:0x294B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294B - ,simpleLowerCaseMapping:0x294B - ,simpleTitleCaseMapping:0x294B - }, - { code:0x294C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294C - ,simpleLowerCaseMapping:0x294C - ,simpleTitleCaseMapping:0x294C - }, - { code:0x294D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294D - ,simpleLowerCaseMapping:0x294D - ,simpleTitleCaseMapping:0x294D - }, - { code:0x294E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294E - ,simpleLowerCaseMapping:0x294E - ,simpleTitleCaseMapping:0x294E - }, - { code:0x294F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x294F - ,simpleLowerCaseMapping:0x294F - ,simpleTitleCaseMapping:0x294F - }, - { code:0x2950 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2950 - ,simpleLowerCaseMapping:0x2950 - ,simpleTitleCaseMapping:0x2950 - }, - { code:0x2951 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2951 - ,simpleLowerCaseMapping:0x2951 - ,simpleTitleCaseMapping:0x2951 - }, - { code:0x2952 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2952 - ,simpleLowerCaseMapping:0x2952 - ,simpleTitleCaseMapping:0x2952 - }, - { code:0x2953 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2953 - ,simpleLowerCaseMapping:0x2953 - ,simpleTitleCaseMapping:0x2953 - }, - { code:0x2954 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2954 - ,simpleLowerCaseMapping:0x2954 - ,simpleTitleCaseMapping:0x2954 - }, - { code:0x2955 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2955 - ,simpleLowerCaseMapping:0x2955 - ,simpleTitleCaseMapping:0x2955 - }, - { code:0x2956 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2956 - ,simpleLowerCaseMapping:0x2956 - ,simpleTitleCaseMapping:0x2956 - }, - { code:0x2957 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2957 - ,simpleLowerCaseMapping:0x2957 - ,simpleTitleCaseMapping:0x2957 - }, - { code:0x2958 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2958 - ,simpleLowerCaseMapping:0x2958 - ,simpleTitleCaseMapping:0x2958 - }, - { code:0x2959 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2959 - ,simpleLowerCaseMapping:0x2959 - ,simpleTitleCaseMapping:0x2959 - }, - { code:0x295A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295A - ,simpleLowerCaseMapping:0x295A - ,simpleTitleCaseMapping:0x295A - }, - { code:0x295B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295B - ,simpleLowerCaseMapping:0x295B - ,simpleTitleCaseMapping:0x295B - }, - { code:0x295C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295C - ,simpleLowerCaseMapping:0x295C - ,simpleTitleCaseMapping:0x295C - }, - { code:0x295D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295D - ,simpleLowerCaseMapping:0x295D - ,simpleTitleCaseMapping:0x295D - }, - { code:0x295E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295E - ,simpleLowerCaseMapping:0x295E - ,simpleTitleCaseMapping:0x295E - }, - { code:0x295F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x295F - ,simpleLowerCaseMapping:0x295F - ,simpleTitleCaseMapping:0x295F - }, - { code:0x2960 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2960 - ,simpleLowerCaseMapping:0x2960 - ,simpleTitleCaseMapping:0x2960 - }, - { code:0x2961 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2961 - ,simpleLowerCaseMapping:0x2961 - ,simpleTitleCaseMapping:0x2961 - }, - { code:0x2962 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2962 - ,simpleLowerCaseMapping:0x2962 - ,simpleTitleCaseMapping:0x2962 - }, - { code:0x2963 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2963 - ,simpleLowerCaseMapping:0x2963 - ,simpleTitleCaseMapping:0x2963 - }, - { code:0x2964 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2964 - ,simpleLowerCaseMapping:0x2964 - ,simpleTitleCaseMapping:0x2964 - }, - { code:0x2965 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2965 - ,simpleLowerCaseMapping:0x2965 - ,simpleTitleCaseMapping:0x2965 - }, - { code:0x2966 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2966 - ,simpleLowerCaseMapping:0x2966 - ,simpleTitleCaseMapping:0x2966 - }, - { code:0x2967 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2967 - ,simpleLowerCaseMapping:0x2967 - ,simpleTitleCaseMapping:0x2967 - }, - { code:0x2968 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2968 - ,simpleLowerCaseMapping:0x2968 - ,simpleTitleCaseMapping:0x2968 - }, - { code:0x2969 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2969 - ,simpleLowerCaseMapping:0x2969 - ,simpleTitleCaseMapping:0x2969 - }, - { code:0x296A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296A - ,simpleLowerCaseMapping:0x296A - ,simpleTitleCaseMapping:0x296A - }, - { code:0x296B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296B - ,simpleLowerCaseMapping:0x296B - ,simpleTitleCaseMapping:0x296B - }, - { code:0x296C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296C - ,simpleLowerCaseMapping:0x296C - ,simpleTitleCaseMapping:0x296C - }, - { code:0x296D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296D - ,simpleLowerCaseMapping:0x296D - ,simpleTitleCaseMapping:0x296D - }, - { code:0x296E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296E - ,simpleLowerCaseMapping:0x296E - ,simpleTitleCaseMapping:0x296E - }, - { code:0x296F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x296F - ,simpleLowerCaseMapping:0x296F - ,simpleTitleCaseMapping:0x296F - }, - { code:0x2970 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2970 - ,simpleLowerCaseMapping:0x2970 - ,simpleTitleCaseMapping:0x2970 - }, - { code:0x2971 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2971 - ,simpleLowerCaseMapping:0x2971 - ,simpleTitleCaseMapping:0x2971 - }, - { code:0x2972 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2972 - ,simpleLowerCaseMapping:0x2972 - ,simpleTitleCaseMapping:0x2972 - }, - { code:0x2973 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2973 - ,simpleLowerCaseMapping:0x2973 - ,simpleTitleCaseMapping:0x2973 - }, - { code:0x2974 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2974 - ,simpleLowerCaseMapping:0x2974 - ,simpleTitleCaseMapping:0x2974 - }, - { code:0x2975 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2975 - ,simpleLowerCaseMapping:0x2975 - ,simpleTitleCaseMapping:0x2975 - }, - { code:0x2976 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2976 - ,simpleLowerCaseMapping:0x2976 - ,simpleTitleCaseMapping:0x2976 - }, - { code:0x2977 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2977 - ,simpleLowerCaseMapping:0x2977 - ,simpleTitleCaseMapping:0x2977 - }, - { code:0x2978 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2978 - ,simpleLowerCaseMapping:0x2978 - ,simpleTitleCaseMapping:0x2978 - }, - { code:0x2979 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2979 - ,simpleLowerCaseMapping:0x2979 - ,simpleTitleCaseMapping:0x2979 - }, - { code:0x297A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297A - ,simpleLowerCaseMapping:0x297A - ,simpleTitleCaseMapping:0x297A - }, - { code:0x297B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297B - ,simpleLowerCaseMapping:0x297B - ,simpleTitleCaseMapping:0x297B - }, - { code:0x297C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297C - ,simpleLowerCaseMapping:0x297C - ,simpleTitleCaseMapping:0x297C - }, - { code:0x297D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297D - ,simpleLowerCaseMapping:0x297D - ,simpleTitleCaseMapping:0x297D - }, - { code:0x297E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297E - ,simpleLowerCaseMapping:0x297E - ,simpleTitleCaseMapping:0x297E - }, - { code:0x297F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x297F - ,simpleLowerCaseMapping:0x297F - ,simpleTitleCaseMapping:0x297F - }, - { code:0x2980 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2980 - ,simpleLowerCaseMapping:0x2980 - ,simpleTitleCaseMapping:0x2980 - }, - { code:0x2981 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2981 - ,simpleLowerCaseMapping:0x2981 - ,simpleTitleCaseMapping:0x2981 - }, - { code:0x2982 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2982 - ,simpleLowerCaseMapping:0x2982 - ,simpleTitleCaseMapping:0x2982 - }, - { code:0x2983 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2983 - ,simpleLowerCaseMapping:0x2983 - ,simpleTitleCaseMapping:0x2983 - }, - { code:0x2984 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2984 - ,simpleLowerCaseMapping:0x2984 - ,simpleTitleCaseMapping:0x2984 - }, - { code:0x2985 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2985 - ,simpleLowerCaseMapping:0x2985 - ,simpleTitleCaseMapping:0x2985 - }, - { code:0x2986 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2986 - ,simpleLowerCaseMapping:0x2986 - ,simpleTitleCaseMapping:0x2986 - }, - { code:0x2987 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2987 - ,simpleLowerCaseMapping:0x2987 - ,simpleTitleCaseMapping:0x2987 - }, - { code:0x2988 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2988 - ,simpleLowerCaseMapping:0x2988 - ,simpleTitleCaseMapping:0x2988 - }, - { code:0x2989 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2989 - ,simpleLowerCaseMapping:0x2989 - ,simpleTitleCaseMapping:0x2989 - }, - { code:0x298A - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x298A - ,simpleLowerCaseMapping:0x298A - ,simpleTitleCaseMapping:0x298A - }, - { code:0x298B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x298B - ,simpleLowerCaseMapping:0x298B - ,simpleTitleCaseMapping:0x298B - }, - { code:0x298C - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x298C - ,simpleLowerCaseMapping:0x298C - ,simpleTitleCaseMapping:0x298C - }, - { code:0x298D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x298D - ,simpleLowerCaseMapping:0x298D - ,simpleTitleCaseMapping:0x298D - }, - { code:0x298E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x298E - ,simpleLowerCaseMapping:0x298E - ,simpleTitleCaseMapping:0x298E - }, - { code:0x298F - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x298F - ,simpleLowerCaseMapping:0x298F - ,simpleTitleCaseMapping:0x298F - }, - { code:0x2990 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2990 - ,simpleLowerCaseMapping:0x2990 - ,simpleTitleCaseMapping:0x2990 - }, - { code:0x2991 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2991 - ,simpleLowerCaseMapping:0x2991 - ,simpleTitleCaseMapping:0x2991 - }, - { code:0x2992 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2992 - ,simpleLowerCaseMapping:0x2992 - ,simpleTitleCaseMapping:0x2992 - }, - { code:0x2993 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2993 - ,simpleLowerCaseMapping:0x2993 - ,simpleTitleCaseMapping:0x2993 - }, - { code:0x2994 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2994 - ,simpleLowerCaseMapping:0x2994 - ,simpleTitleCaseMapping:0x2994 - }, - { code:0x2995 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2995 - ,simpleLowerCaseMapping:0x2995 - ,simpleTitleCaseMapping:0x2995 - }, - { code:0x2996 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2996 - ,simpleLowerCaseMapping:0x2996 - ,simpleTitleCaseMapping:0x2996 - }, - { code:0x2997 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x2997 - ,simpleLowerCaseMapping:0x2997 - ,simpleTitleCaseMapping:0x2997 - }, - { code:0x2998 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x2998 - ,simpleLowerCaseMapping:0x2998 - ,simpleTitleCaseMapping:0x2998 - }, - { code:0x2999 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2999 - ,simpleLowerCaseMapping:0x2999 - ,simpleTitleCaseMapping:0x2999 - }, - { code:0x299A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299A - ,simpleLowerCaseMapping:0x299A - ,simpleTitleCaseMapping:0x299A - }, - { code:0x299B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299B - ,simpleLowerCaseMapping:0x299B - ,simpleTitleCaseMapping:0x299B - }, - { code:0x299C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299C - ,simpleLowerCaseMapping:0x299C - ,simpleTitleCaseMapping:0x299C - }, - { code:0x299D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299D - ,simpleLowerCaseMapping:0x299D - ,simpleTitleCaseMapping:0x299D - }, - { code:0x299E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299E - ,simpleLowerCaseMapping:0x299E - ,simpleTitleCaseMapping:0x299E - }, - { code:0x299F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x299F - ,simpleLowerCaseMapping:0x299F - ,simpleTitleCaseMapping:0x299F - }, - { code:0x29A0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A0 - ,simpleLowerCaseMapping:0x29A0 - ,simpleTitleCaseMapping:0x29A0 - }, - { code:0x29A1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A1 - ,simpleLowerCaseMapping:0x29A1 - ,simpleTitleCaseMapping:0x29A1 - }, - { code:0x29A2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A2 - ,simpleLowerCaseMapping:0x29A2 - ,simpleTitleCaseMapping:0x29A2 - }, - { code:0x29A3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A3 - ,simpleLowerCaseMapping:0x29A3 - ,simpleTitleCaseMapping:0x29A3 - }, - { code:0x29A4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A4 - ,simpleLowerCaseMapping:0x29A4 - ,simpleTitleCaseMapping:0x29A4 - }, - { code:0x29A5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A5 - ,simpleLowerCaseMapping:0x29A5 - ,simpleTitleCaseMapping:0x29A5 - }, - { code:0x29A6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A6 - ,simpleLowerCaseMapping:0x29A6 - ,simpleTitleCaseMapping:0x29A6 - }, - { code:0x29A7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A7 - ,simpleLowerCaseMapping:0x29A7 - ,simpleTitleCaseMapping:0x29A7 - }, - { code:0x29A8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A8 - ,simpleLowerCaseMapping:0x29A8 - ,simpleTitleCaseMapping:0x29A8 - }, - { code:0x29A9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29A9 - ,simpleLowerCaseMapping:0x29A9 - ,simpleTitleCaseMapping:0x29A9 - }, - { code:0x29AA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AA - ,simpleLowerCaseMapping:0x29AA - ,simpleTitleCaseMapping:0x29AA - }, - { code:0x29AB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AB - ,simpleLowerCaseMapping:0x29AB - ,simpleTitleCaseMapping:0x29AB - }, - { code:0x29AC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AC - ,simpleLowerCaseMapping:0x29AC - ,simpleTitleCaseMapping:0x29AC - }, - { code:0x29AD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AD - ,simpleLowerCaseMapping:0x29AD - ,simpleTitleCaseMapping:0x29AD - }, - { code:0x29AE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AE - ,simpleLowerCaseMapping:0x29AE - ,simpleTitleCaseMapping:0x29AE - }, - { code:0x29AF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29AF - ,simpleLowerCaseMapping:0x29AF - ,simpleTitleCaseMapping:0x29AF - }, - { code:0x29B0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B0 - ,simpleLowerCaseMapping:0x29B0 - ,simpleTitleCaseMapping:0x29B0 - }, - { code:0x29B1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B1 - ,simpleLowerCaseMapping:0x29B1 - ,simpleTitleCaseMapping:0x29B1 - }, - { code:0x29B2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B2 - ,simpleLowerCaseMapping:0x29B2 - ,simpleTitleCaseMapping:0x29B2 - }, - { code:0x29B3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B3 - ,simpleLowerCaseMapping:0x29B3 - ,simpleTitleCaseMapping:0x29B3 - }, - { code:0x29B4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B4 - ,simpleLowerCaseMapping:0x29B4 - ,simpleTitleCaseMapping:0x29B4 - }, - { code:0x29B5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B5 - ,simpleLowerCaseMapping:0x29B5 - ,simpleTitleCaseMapping:0x29B5 - }, - { code:0x29B6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B6 - ,simpleLowerCaseMapping:0x29B6 - ,simpleTitleCaseMapping:0x29B6 - }, - { code:0x29B7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B7 - ,simpleLowerCaseMapping:0x29B7 - ,simpleTitleCaseMapping:0x29B7 - }, - { code:0x29B8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B8 - ,simpleLowerCaseMapping:0x29B8 - ,simpleTitleCaseMapping:0x29B8 - }, - { code:0x29B9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29B9 - ,simpleLowerCaseMapping:0x29B9 - ,simpleTitleCaseMapping:0x29B9 - }, - { code:0x29BA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BA - ,simpleLowerCaseMapping:0x29BA - ,simpleTitleCaseMapping:0x29BA - }, - { code:0x29BB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BB - ,simpleLowerCaseMapping:0x29BB - ,simpleTitleCaseMapping:0x29BB - }, - { code:0x29BC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BC - ,simpleLowerCaseMapping:0x29BC - ,simpleTitleCaseMapping:0x29BC - }, - { code:0x29BD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BD - ,simpleLowerCaseMapping:0x29BD - ,simpleTitleCaseMapping:0x29BD - }, - { code:0x29BE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BE - ,simpleLowerCaseMapping:0x29BE - ,simpleTitleCaseMapping:0x29BE - }, - { code:0x29BF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29BF - ,simpleLowerCaseMapping:0x29BF - ,simpleTitleCaseMapping:0x29BF - }, - { code:0x29C0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C0 - ,simpleLowerCaseMapping:0x29C0 - ,simpleTitleCaseMapping:0x29C0 - }, - { code:0x29C1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C1 - ,simpleLowerCaseMapping:0x29C1 - ,simpleTitleCaseMapping:0x29C1 - }, - { code:0x29C2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C2 - ,simpleLowerCaseMapping:0x29C2 - ,simpleTitleCaseMapping:0x29C2 - }, - { code:0x29C3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C3 - ,simpleLowerCaseMapping:0x29C3 - ,simpleTitleCaseMapping:0x29C3 - }, - { code:0x29C4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C4 - ,simpleLowerCaseMapping:0x29C4 - ,simpleTitleCaseMapping:0x29C4 - }, - { code:0x29C5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C5 - ,simpleLowerCaseMapping:0x29C5 - ,simpleTitleCaseMapping:0x29C5 - }, - { code:0x29C6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C6 - ,simpleLowerCaseMapping:0x29C6 - ,simpleTitleCaseMapping:0x29C6 - }, - { code:0x29C7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C7 - ,simpleLowerCaseMapping:0x29C7 - ,simpleTitleCaseMapping:0x29C7 - }, - { code:0x29C8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C8 - ,simpleLowerCaseMapping:0x29C8 - ,simpleTitleCaseMapping:0x29C8 - }, - { code:0x29C9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29C9 - ,simpleLowerCaseMapping:0x29C9 - ,simpleTitleCaseMapping:0x29C9 - }, - { code:0x29CA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CA - ,simpleLowerCaseMapping:0x29CA - ,simpleTitleCaseMapping:0x29CA - }, - { code:0x29CB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CB - ,simpleLowerCaseMapping:0x29CB - ,simpleTitleCaseMapping:0x29CB - }, - { code:0x29CC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CC - ,simpleLowerCaseMapping:0x29CC - ,simpleTitleCaseMapping:0x29CC - }, - { code:0x29CD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CD - ,simpleLowerCaseMapping:0x29CD - ,simpleTitleCaseMapping:0x29CD - }, - { code:0x29CE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CE - ,simpleLowerCaseMapping:0x29CE - ,simpleTitleCaseMapping:0x29CE - }, - { code:0x29CF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29CF - ,simpleLowerCaseMapping:0x29CF - ,simpleTitleCaseMapping:0x29CF - }, - { code:0x29D0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D0 - ,simpleLowerCaseMapping:0x29D0 - ,simpleTitleCaseMapping:0x29D0 - }, - { code:0x29D1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D1 - ,simpleLowerCaseMapping:0x29D1 - ,simpleTitleCaseMapping:0x29D1 - }, - { code:0x29D2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D2 - ,simpleLowerCaseMapping:0x29D2 - ,simpleTitleCaseMapping:0x29D2 - }, - { code:0x29D3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D3 - ,simpleLowerCaseMapping:0x29D3 - ,simpleTitleCaseMapping:0x29D3 - }, - { code:0x29D4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D4 - ,simpleLowerCaseMapping:0x29D4 - ,simpleTitleCaseMapping:0x29D4 - }, - { code:0x29D5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D5 - ,simpleLowerCaseMapping:0x29D5 - ,simpleTitleCaseMapping:0x29D5 - }, - { code:0x29D6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D6 - ,simpleLowerCaseMapping:0x29D6 - ,simpleTitleCaseMapping:0x29D6 - }, - { code:0x29D7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29D7 - ,simpleLowerCaseMapping:0x29D7 - ,simpleTitleCaseMapping:0x29D7 - }, - { code:0x29D8 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x29D8 - ,simpleLowerCaseMapping:0x29D8 - ,simpleTitleCaseMapping:0x29D8 - }, - { code:0x29D9 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x29D9 - ,simpleLowerCaseMapping:0x29D9 - ,simpleTitleCaseMapping:0x29D9 - }, - { code:0x29DA - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x29DA - ,simpleLowerCaseMapping:0x29DA - ,simpleTitleCaseMapping:0x29DA - }, - { code:0x29DB - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x29DB - ,simpleLowerCaseMapping:0x29DB - ,simpleTitleCaseMapping:0x29DB - }, - { code:0x29DC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29DC - ,simpleLowerCaseMapping:0x29DC - ,simpleTitleCaseMapping:0x29DC - }, - { code:0x29DD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29DD - ,simpleLowerCaseMapping:0x29DD - ,simpleTitleCaseMapping:0x29DD - }, - { code:0x29DE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29DE - ,simpleLowerCaseMapping:0x29DE - ,simpleTitleCaseMapping:0x29DE - }, - { code:0x29DF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29DF - ,simpleLowerCaseMapping:0x29DF - ,simpleTitleCaseMapping:0x29DF - }, - { code:0x29E0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E0 - ,simpleLowerCaseMapping:0x29E0 - ,simpleTitleCaseMapping:0x29E0 - }, - { code:0x29E1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E1 - ,simpleLowerCaseMapping:0x29E1 - ,simpleTitleCaseMapping:0x29E1 - }, - { code:0x29E2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E2 - ,simpleLowerCaseMapping:0x29E2 - ,simpleTitleCaseMapping:0x29E2 - }, - { code:0x29E3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E3 - ,simpleLowerCaseMapping:0x29E3 - ,simpleTitleCaseMapping:0x29E3 - }, - { code:0x29E4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E4 - ,simpleLowerCaseMapping:0x29E4 - ,simpleTitleCaseMapping:0x29E4 - }, - { code:0x29E5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E5 - ,simpleLowerCaseMapping:0x29E5 - ,simpleTitleCaseMapping:0x29E5 - }, - { code:0x29E6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E6 - ,simpleLowerCaseMapping:0x29E6 - ,simpleTitleCaseMapping:0x29E6 - }, - { code:0x29E7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E7 - ,simpleLowerCaseMapping:0x29E7 - ,simpleTitleCaseMapping:0x29E7 - }, - { code:0x29E8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E8 - ,simpleLowerCaseMapping:0x29E8 - ,simpleTitleCaseMapping:0x29E8 - }, - { code:0x29E9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29E9 - ,simpleLowerCaseMapping:0x29E9 - ,simpleTitleCaseMapping:0x29E9 - }, - { code:0x29EA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29EA - ,simpleLowerCaseMapping:0x29EA - ,simpleTitleCaseMapping:0x29EA - }, - { code:0x29EB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29EB - ,simpleLowerCaseMapping:0x29EB - ,simpleTitleCaseMapping:0x29EB - }, - { code:0x29EC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29EC - ,simpleLowerCaseMapping:0x29EC - ,simpleTitleCaseMapping:0x29EC - }, - { code:0x29ED - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29ED - ,simpleLowerCaseMapping:0x29ED - ,simpleTitleCaseMapping:0x29ED - }, - { code:0x29EE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29EE - ,simpleLowerCaseMapping:0x29EE - ,simpleTitleCaseMapping:0x29EE - }, - { code:0x29EF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29EF - ,simpleLowerCaseMapping:0x29EF - ,simpleTitleCaseMapping:0x29EF - }, - { code:0x29F0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F0 - ,simpleLowerCaseMapping:0x29F0 - ,simpleTitleCaseMapping:0x29F0 - }, - { code:0x29F1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F1 - ,simpleLowerCaseMapping:0x29F1 - ,simpleTitleCaseMapping:0x29F1 - }, - { code:0x29F2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F2 - ,simpleLowerCaseMapping:0x29F2 - ,simpleTitleCaseMapping:0x29F2 - }, - { code:0x29F3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F3 - ,simpleLowerCaseMapping:0x29F3 - ,simpleTitleCaseMapping:0x29F3 - }, - { code:0x29F4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F4 - ,simpleLowerCaseMapping:0x29F4 - ,simpleTitleCaseMapping:0x29F4 - }, - { code:0x29F5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F5 - ,simpleLowerCaseMapping:0x29F5 - ,simpleTitleCaseMapping:0x29F5 - }, - { code:0x29F6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F6 - ,simpleLowerCaseMapping:0x29F6 - ,simpleTitleCaseMapping:0x29F6 - }, - { code:0x29F7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F7 - ,simpleLowerCaseMapping:0x29F7 - ,simpleTitleCaseMapping:0x29F7 - }, - { code:0x29F8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F8 - ,simpleLowerCaseMapping:0x29F8 - ,simpleTitleCaseMapping:0x29F8 - }, - { code:0x29F9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29F9 - ,simpleLowerCaseMapping:0x29F9 - ,simpleTitleCaseMapping:0x29F9 - }, - { code:0x29FA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29FA - ,simpleLowerCaseMapping:0x29FA - ,simpleTitleCaseMapping:0x29FA - }, - { code:0x29FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29FB - ,simpleLowerCaseMapping:0x29FB - ,simpleTitleCaseMapping:0x29FB - }, - { code:0x29FC - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x29FC - ,simpleLowerCaseMapping:0x29FC - ,simpleTitleCaseMapping:0x29FC - }, - { code:0x29FD - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x29FD - ,simpleLowerCaseMapping:0x29FD - ,simpleTitleCaseMapping:0x29FD - }, - { code:0x29FE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29FE - ,simpleLowerCaseMapping:0x29FE - ,simpleTitleCaseMapping:0x29FE - }, - { code:0x29FF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x29FF - ,simpleLowerCaseMapping:0x29FF - ,simpleTitleCaseMapping:0x29FF - }, - { code:0x2A00 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A00 - ,simpleLowerCaseMapping:0x2A00 - ,simpleTitleCaseMapping:0x2A00 - }, - { code:0x2A01 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A01 - ,simpleLowerCaseMapping:0x2A01 - ,simpleTitleCaseMapping:0x2A01 - }, - { code:0x2A02 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A02 - ,simpleLowerCaseMapping:0x2A02 - ,simpleTitleCaseMapping:0x2A02 - }, - { code:0x2A03 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A03 - ,simpleLowerCaseMapping:0x2A03 - ,simpleTitleCaseMapping:0x2A03 - }, - { code:0x2A04 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A04 - ,simpleLowerCaseMapping:0x2A04 - ,simpleTitleCaseMapping:0x2A04 - }, - { code:0x2A05 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A05 - ,simpleLowerCaseMapping:0x2A05 - ,simpleTitleCaseMapping:0x2A05 - }, - { code:0x2A06 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A06 - ,simpleLowerCaseMapping:0x2A06 - ,simpleTitleCaseMapping:0x2A06 - }, - { code:0x2A07 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A07 - ,simpleLowerCaseMapping:0x2A07 - ,simpleTitleCaseMapping:0x2A07 - }, - { code:0x2A08 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A08 - ,simpleLowerCaseMapping:0x2A08 - ,simpleTitleCaseMapping:0x2A08 - }, - { code:0x2A09 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A09 - ,simpleLowerCaseMapping:0x2A09 - ,simpleTitleCaseMapping:0x2A09 - }, - { code:0x2A0A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0A - ,simpleLowerCaseMapping:0x2A0A - ,simpleTitleCaseMapping:0x2A0A - }, - { code:0x2A0B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0B - ,simpleLowerCaseMapping:0x2A0B - ,simpleTitleCaseMapping:0x2A0B - }, - { code:0x2A0C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0C - ,simpleLowerCaseMapping:0x2A0C - ,simpleTitleCaseMapping:0x2A0C - }, - { code:0x2A0D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0D - ,simpleLowerCaseMapping:0x2A0D - ,simpleTitleCaseMapping:0x2A0D - }, - { code:0x2A0E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0E - ,simpleLowerCaseMapping:0x2A0E - ,simpleTitleCaseMapping:0x2A0E - }, - { code:0x2A0F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A0F - ,simpleLowerCaseMapping:0x2A0F - ,simpleTitleCaseMapping:0x2A0F - }, - { code:0x2A10 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A10 - ,simpleLowerCaseMapping:0x2A10 - ,simpleTitleCaseMapping:0x2A10 - }, - { code:0x2A11 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A11 - ,simpleLowerCaseMapping:0x2A11 - ,simpleTitleCaseMapping:0x2A11 - }, - { code:0x2A12 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A12 - ,simpleLowerCaseMapping:0x2A12 - ,simpleTitleCaseMapping:0x2A12 - }, - { code:0x2A13 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A13 - ,simpleLowerCaseMapping:0x2A13 - ,simpleTitleCaseMapping:0x2A13 - }, - { code:0x2A14 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A14 - ,simpleLowerCaseMapping:0x2A14 - ,simpleTitleCaseMapping:0x2A14 - }, - { code:0x2A15 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A15 - ,simpleLowerCaseMapping:0x2A15 - ,simpleTitleCaseMapping:0x2A15 - }, - { code:0x2A16 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A16 - ,simpleLowerCaseMapping:0x2A16 - ,simpleTitleCaseMapping:0x2A16 - }, - { code:0x2A17 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A17 - ,simpleLowerCaseMapping:0x2A17 - ,simpleTitleCaseMapping:0x2A17 - }, - { code:0x2A18 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A18 - ,simpleLowerCaseMapping:0x2A18 - ,simpleTitleCaseMapping:0x2A18 - }, - { code:0x2A19 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A19 - ,simpleLowerCaseMapping:0x2A19 - ,simpleTitleCaseMapping:0x2A19 - }, - { code:0x2A1A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1A - ,simpleLowerCaseMapping:0x2A1A - ,simpleTitleCaseMapping:0x2A1A - }, - { code:0x2A1B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1B - ,simpleLowerCaseMapping:0x2A1B - ,simpleTitleCaseMapping:0x2A1B - }, - { code:0x2A1C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1C - ,simpleLowerCaseMapping:0x2A1C - ,simpleTitleCaseMapping:0x2A1C - }, - { code:0x2A1D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1D - ,simpleLowerCaseMapping:0x2A1D - ,simpleTitleCaseMapping:0x2A1D - }, - { code:0x2A1E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1E - ,simpleLowerCaseMapping:0x2A1E - ,simpleTitleCaseMapping:0x2A1E - }, - { code:0x2A1F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A1F - ,simpleLowerCaseMapping:0x2A1F - ,simpleTitleCaseMapping:0x2A1F - }, - { code:0x2A20 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A20 - ,simpleLowerCaseMapping:0x2A20 - ,simpleTitleCaseMapping:0x2A20 - }, - { code:0x2A21 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A21 - ,simpleLowerCaseMapping:0x2A21 - ,simpleTitleCaseMapping:0x2A21 - }, - { code:0x2A22 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A22 - ,simpleLowerCaseMapping:0x2A22 - ,simpleTitleCaseMapping:0x2A22 - }, - { code:0x2A23 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A23 - ,simpleLowerCaseMapping:0x2A23 - ,simpleTitleCaseMapping:0x2A23 - }, - { code:0x2A24 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A24 - ,simpleLowerCaseMapping:0x2A24 - ,simpleTitleCaseMapping:0x2A24 - }, - { code:0x2A25 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A25 - ,simpleLowerCaseMapping:0x2A25 - ,simpleTitleCaseMapping:0x2A25 - }, - { code:0x2A26 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A26 - ,simpleLowerCaseMapping:0x2A26 - ,simpleTitleCaseMapping:0x2A26 - }, - { code:0x2A27 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A27 - ,simpleLowerCaseMapping:0x2A27 - ,simpleTitleCaseMapping:0x2A27 - }, - { code:0x2A28 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A28 - ,simpleLowerCaseMapping:0x2A28 - ,simpleTitleCaseMapping:0x2A28 - }, - { code:0x2A29 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A29 - ,simpleLowerCaseMapping:0x2A29 - ,simpleTitleCaseMapping:0x2A29 - }, - { code:0x2A2A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2A - ,simpleLowerCaseMapping:0x2A2A - ,simpleTitleCaseMapping:0x2A2A - }, - { code:0x2A2B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2B - ,simpleLowerCaseMapping:0x2A2B - ,simpleTitleCaseMapping:0x2A2B - }, - { code:0x2A2C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2C - ,simpleLowerCaseMapping:0x2A2C - ,simpleTitleCaseMapping:0x2A2C - }, - { code:0x2A2D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2D - ,simpleLowerCaseMapping:0x2A2D - ,simpleTitleCaseMapping:0x2A2D - }, - { code:0x2A2E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2E - ,simpleLowerCaseMapping:0x2A2E - ,simpleTitleCaseMapping:0x2A2E - }, - { code:0x2A2F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A2F - ,simpleLowerCaseMapping:0x2A2F - ,simpleTitleCaseMapping:0x2A2F - }, - { code:0x2A30 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A30 - ,simpleLowerCaseMapping:0x2A30 - ,simpleTitleCaseMapping:0x2A30 - }, - { code:0x2A31 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A31 - ,simpleLowerCaseMapping:0x2A31 - ,simpleTitleCaseMapping:0x2A31 - }, - { code:0x2A32 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A32 - ,simpleLowerCaseMapping:0x2A32 - ,simpleTitleCaseMapping:0x2A32 - }, - { code:0x2A33 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A33 - ,simpleLowerCaseMapping:0x2A33 - ,simpleTitleCaseMapping:0x2A33 - }, - { code:0x2A34 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A34 - ,simpleLowerCaseMapping:0x2A34 - ,simpleTitleCaseMapping:0x2A34 - }, - { code:0x2A35 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A35 - ,simpleLowerCaseMapping:0x2A35 - ,simpleTitleCaseMapping:0x2A35 - }, - { code:0x2A36 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A36 - ,simpleLowerCaseMapping:0x2A36 - ,simpleTitleCaseMapping:0x2A36 - }, - { code:0x2A37 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A37 - ,simpleLowerCaseMapping:0x2A37 - ,simpleTitleCaseMapping:0x2A37 - }, - { code:0x2A38 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A38 - ,simpleLowerCaseMapping:0x2A38 - ,simpleTitleCaseMapping:0x2A38 - }, - { code:0x2A39 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A39 - ,simpleLowerCaseMapping:0x2A39 - ,simpleTitleCaseMapping:0x2A39 - }, - { code:0x2A3A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3A - ,simpleLowerCaseMapping:0x2A3A - ,simpleTitleCaseMapping:0x2A3A - }, - { code:0x2A3B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3B - ,simpleLowerCaseMapping:0x2A3B - ,simpleTitleCaseMapping:0x2A3B - }, - { code:0x2A3C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3C - ,simpleLowerCaseMapping:0x2A3C - ,simpleTitleCaseMapping:0x2A3C - }, - { code:0x2A3D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3D - ,simpleLowerCaseMapping:0x2A3D - ,simpleTitleCaseMapping:0x2A3D - }, - { code:0x2A3E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3E - ,simpleLowerCaseMapping:0x2A3E - ,simpleTitleCaseMapping:0x2A3E - }, - { code:0x2A3F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A3F - ,simpleLowerCaseMapping:0x2A3F - ,simpleTitleCaseMapping:0x2A3F - }, - { code:0x2A40 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A40 - ,simpleLowerCaseMapping:0x2A40 - ,simpleTitleCaseMapping:0x2A40 - }, - { code:0x2A41 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A41 - ,simpleLowerCaseMapping:0x2A41 - ,simpleTitleCaseMapping:0x2A41 - }, - { code:0x2A42 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A42 - ,simpleLowerCaseMapping:0x2A42 - ,simpleTitleCaseMapping:0x2A42 - }, - { code:0x2A43 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A43 - ,simpleLowerCaseMapping:0x2A43 - ,simpleTitleCaseMapping:0x2A43 - }, - { code:0x2A44 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A44 - ,simpleLowerCaseMapping:0x2A44 - ,simpleTitleCaseMapping:0x2A44 - }, - { code:0x2A45 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A45 - ,simpleLowerCaseMapping:0x2A45 - ,simpleTitleCaseMapping:0x2A45 - }, - { code:0x2A46 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A46 - ,simpleLowerCaseMapping:0x2A46 - ,simpleTitleCaseMapping:0x2A46 - }, - { code:0x2A47 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A47 - ,simpleLowerCaseMapping:0x2A47 - ,simpleTitleCaseMapping:0x2A47 - }, - { code:0x2A48 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A48 - ,simpleLowerCaseMapping:0x2A48 - ,simpleTitleCaseMapping:0x2A48 - }, - { code:0x2A49 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A49 - ,simpleLowerCaseMapping:0x2A49 - ,simpleTitleCaseMapping:0x2A49 - }, - { code:0x2A4A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4A - ,simpleLowerCaseMapping:0x2A4A - ,simpleTitleCaseMapping:0x2A4A - }, - { code:0x2A4B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4B - ,simpleLowerCaseMapping:0x2A4B - ,simpleTitleCaseMapping:0x2A4B - }, - { code:0x2A4C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4C - ,simpleLowerCaseMapping:0x2A4C - ,simpleTitleCaseMapping:0x2A4C - }, - { code:0x2A4D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4D - ,simpleLowerCaseMapping:0x2A4D - ,simpleTitleCaseMapping:0x2A4D - }, - { code:0x2A4E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4E - ,simpleLowerCaseMapping:0x2A4E - ,simpleTitleCaseMapping:0x2A4E - }, - { code:0x2A4F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A4F - ,simpleLowerCaseMapping:0x2A4F - ,simpleTitleCaseMapping:0x2A4F - }, - { code:0x2A50 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A50 - ,simpleLowerCaseMapping:0x2A50 - ,simpleTitleCaseMapping:0x2A50 - }, - { code:0x2A51 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A51 - ,simpleLowerCaseMapping:0x2A51 - ,simpleTitleCaseMapping:0x2A51 - }, - { code:0x2A52 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A52 - ,simpleLowerCaseMapping:0x2A52 - ,simpleTitleCaseMapping:0x2A52 - }, - { code:0x2A53 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A53 - ,simpleLowerCaseMapping:0x2A53 - ,simpleTitleCaseMapping:0x2A53 - }, - { code:0x2A54 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A54 - ,simpleLowerCaseMapping:0x2A54 - ,simpleTitleCaseMapping:0x2A54 - }, - { code:0x2A55 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A55 - ,simpleLowerCaseMapping:0x2A55 - ,simpleTitleCaseMapping:0x2A55 - }, - { code:0x2A56 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A56 - ,simpleLowerCaseMapping:0x2A56 - ,simpleTitleCaseMapping:0x2A56 - }, - { code:0x2A57 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A57 - ,simpleLowerCaseMapping:0x2A57 - ,simpleTitleCaseMapping:0x2A57 - }, - { code:0x2A58 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A58 - ,simpleLowerCaseMapping:0x2A58 - ,simpleTitleCaseMapping:0x2A58 - }, - { code:0x2A59 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A59 - ,simpleLowerCaseMapping:0x2A59 - ,simpleTitleCaseMapping:0x2A59 - }, - { code:0x2A5A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5A - ,simpleLowerCaseMapping:0x2A5A - ,simpleTitleCaseMapping:0x2A5A - }, - { code:0x2A5B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5B - ,simpleLowerCaseMapping:0x2A5B - ,simpleTitleCaseMapping:0x2A5B - }, - { code:0x2A5C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5C - ,simpleLowerCaseMapping:0x2A5C - ,simpleTitleCaseMapping:0x2A5C - }, - { code:0x2A5D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5D - ,simpleLowerCaseMapping:0x2A5D - ,simpleTitleCaseMapping:0x2A5D - }, - { code:0x2A5E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5E - ,simpleLowerCaseMapping:0x2A5E - ,simpleTitleCaseMapping:0x2A5E - }, - { code:0x2A5F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A5F - ,simpleLowerCaseMapping:0x2A5F - ,simpleTitleCaseMapping:0x2A5F - }, - { code:0x2A60 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A60 - ,simpleLowerCaseMapping:0x2A60 - ,simpleTitleCaseMapping:0x2A60 - }, - { code:0x2A61 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A61 - ,simpleLowerCaseMapping:0x2A61 - ,simpleTitleCaseMapping:0x2A61 - }, - { code:0x2A62 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A62 - ,simpleLowerCaseMapping:0x2A62 - ,simpleTitleCaseMapping:0x2A62 - }, - { code:0x2A63 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A63 - ,simpleLowerCaseMapping:0x2A63 - ,simpleTitleCaseMapping:0x2A63 - }, - { code:0x2A64 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A64 - ,simpleLowerCaseMapping:0x2A64 - ,simpleTitleCaseMapping:0x2A64 - }, - { code:0x2A65 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A65 - ,simpleLowerCaseMapping:0x2A65 - ,simpleTitleCaseMapping:0x2A65 - }, - { code:0x2A66 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A66 - ,simpleLowerCaseMapping:0x2A66 - ,simpleTitleCaseMapping:0x2A66 - }, - { code:0x2A67 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A67 - ,simpleLowerCaseMapping:0x2A67 - ,simpleTitleCaseMapping:0x2A67 - }, - { code:0x2A68 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A68 - ,simpleLowerCaseMapping:0x2A68 - ,simpleTitleCaseMapping:0x2A68 - }, - { code:0x2A69 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A69 - ,simpleLowerCaseMapping:0x2A69 - ,simpleTitleCaseMapping:0x2A69 - }, - { code:0x2A6A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6A - ,simpleLowerCaseMapping:0x2A6A - ,simpleTitleCaseMapping:0x2A6A - }, - { code:0x2A6B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6B - ,simpleLowerCaseMapping:0x2A6B - ,simpleTitleCaseMapping:0x2A6B - }, - { code:0x2A6C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6C - ,simpleLowerCaseMapping:0x2A6C - ,simpleTitleCaseMapping:0x2A6C - }, - { code:0x2A6D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6D - ,simpleLowerCaseMapping:0x2A6D - ,simpleTitleCaseMapping:0x2A6D - }, - { code:0x2A6E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6E - ,simpleLowerCaseMapping:0x2A6E - ,simpleTitleCaseMapping:0x2A6E - }, - { code:0x2A6F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A6F - ,simpleLowerCaseMapping:0x2A6F - ,simpleTitleCaseMapping:0x2A6F - }, - { code:0x2A70 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A70 - ,simpleLowerCaseMapping:0x2A70 - ,simpleTitleCaseMapping:0x2A70 - }, - { code:0x2A71 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A71 - ,simpleLowerCaseMapping:0x2A71 - ,simpleTitleCaseMapping:0x2A71 - }, - { code:0x2A72 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A72 - ,simpleLowerCaseMapping:0x2A72 - ,simpleTitleCaseMapping:0x2A72 - }, - { code:0x2A73 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A73 - ,simpleLowerCaseMapping:0x2A73 - ,simpleTitleCaseMapping:0x2A73 - }, - { code:0x2A74 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A74 - ,simpleLowerCaseMapping:0x2A74 - ,simpleTitleCaseMapping:0x2A74 - }, - { code:0x2A75 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A75 - ,simpleLowerCaseMapping:0x2A75 - ,simpleTitleCaseMapping:0x2A75 - }, - { code:0x2A76 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A76 - ,simpleLowerCaseMapping:0x2A76 - ,simpleTitleCaseMapping:0x2A76 - }, - { code:0x2A77 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A77 - ,simpleLowerCaseMapping:0x2A77 - ,simpleTitleCaseMapping:0x2A77 - }, - { code:0x2A78 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A78 - ,simpleLowerCaseMapping:0x2A78 - ,simpleTitleCaseMapping:0x2A78 - }, - { code:0x2A79 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A79 - ,simpleLowerCaseMapping:0x2A79 - ,simpleTitleCaseMapping:0x2A79 - }, - { code:0x2A7A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7A - ,simpleLowerCaseMapping:0x2A7A - ,simpleTitleCaseMapping:0x2A7A - }, - { code:0x2A7B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7B - ,simpleLowerCaseMapping:0x2A7B - ,simpleTitleCaseMapping:0x2A7B - }, - { code:0x2A7C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7C - ,simpleLowerCaseMapping:0x2A7C - ,simpleTitleCaseMapping:0x2A7C - }, - { code:0x2A7D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7D - ,simpleLowerCaseMapping:0x2A7D - ,simpleTitleCaseMapping:0x2A7D - }, - { code:0x2A7E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7E - ,simpleLowerCaseMapping:0x2A7E - ,simpleTitleCaseMapping:0x2A7E - }, - { code:0x2A7F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A7F - ,simpleLowerCaseMapping:0x2A7F - ,simpleTitleCaseMapping:0x2A7F - }, - { code:0x2A80 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A80 - ,simpleLowerCaseMapping:0x2A80 - ,simpleTitleCaseMapping:0x2A80 - }, - { code:0x2A81 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A81 - ,simpleLowerCaseMapping:0x2A81 - ,simpleTitleCaseMapping:0x2A81 - }, - { code:0x2A82 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A82 - ,simpleLowerCaseMapping:0x2A82 - ,simpleTitleCaseMapping:0x2A82 - }, - { code:0x2A83 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A83 - ,simpleLowerCaseMapping:0x2A83 - ,simpleTitleCaseMapping:0x2A83 - }, - { code:0x2A84 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A84 - ,simpleLowerCaseMapping:0x2A84 - ,simpleTitleCaseMapping:0x2A84 - }, - { code:0x2A85 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A85 - ,simpleLowerCaseMapping:0x2A85 - ,simpleTitleCaseMapping:0x2A85 - }, - { code:0x2A86 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A86 - ,simpleLowerCaseMapping:0x2A86 - ,simpleTitleCaseMapping:0x2A86 - }, - { code:0x2A87 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A87 - ,simpleLowerCaseMapping:0x2A87 - ,simpleTitleCaseMapping:0x2A87 - }, - { code:0x2A88 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A88 - ,simpleLowerCaseMapping:0x2A88 - ,simpleTitleCaseMapping:0x2A88 - }, - { code:0x2A89 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A89 - ,simpleLowerCaseMapping:0x2A89 - ,simpleTitleCaseMapping:0x2A89 - }, - { code:0x2A8A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8A - ,simpleLowerCaseMapping:0x2A8A - ,simpleTitleCaseMapping:0x2A8A - }, - { code:0x2A8B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8B - ,simpleLowerCaseMapping:0x2A8B - ,simpleTitleCaseMapping:0x2A8B - }, - { code:0x2A8C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8C - ,simpleLowerCaseMapping:0x2A8C - ,simpleTitleCaseMapping:0x2A8C - }, - { code:0x2A8D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8D - ,simpleLowerCaseMapping:0x2A8D - ,simpleTitleCaseMapping:0x2A8D - }, - { code:0x2A8E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8E - ,simpleLowerCaseMapping:0x2A8E - ,simpleTitleCaseMapping:0x2A8E - }, - { code:0x2A8F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A8F - ,simpleLowerCaseMapping:0x2A8F - ,simpleTitleCaseMapping:0x2A8F - }, - { code:0x2A90 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A90 - ,simpleLowerCaseMapping:0x2A90 - ,simpleTitleCaseMapping:0x2A90 - }, - { code:0x2A91 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A91 - ,simpleLowerCaseMapping:0x2A91 - ,simpleTitleCaseMapping:0x2A91 - }, - { code:0x2A92 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A92 - ,simpleLowerCaseMapping:0x2A92 - ,simpleTitleCaseMapping:0x2A92 - }, - { code:0x2A93 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A93 - ,simpleLowerCaseMapping:0x2A93 - ,simpleTitleCaseMapping:0x2A93 - }, - { code:0x2A94 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A94 - ,simpleLowerCaseMapping:0x2A94 - ,simpleTitleCaseMapping:0x2A94 - }, - { code:0x2A95 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A95 - ,simpleLowerCaseMapping:0x2A95 - ,simpleTitleCaseMapping:0x2A95 - }, - { code:0x2A96 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A96 - ,simpleLowerCaseMapping:0x2A96 - ,simpleTitleCaseMapping:0x2A96 - }, - { code:0x2A97 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A97 - ,simpleLowerCaseMapping:0x2A97 - ,simpleTitleCaseMapping:0x2A97 - }, - { code:0x2A98 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A98 - ,simpleLowerCaseMapping:0x2A98 - ,simpleTitleCaseMapping:0x2A98 - }, - { code:0x2A99 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A99 - ,simpleLowerCaseMapping:0x2A99 - ,simpleTitleCaseMapping:0x2A99 - }, - { code:0x2A9A - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9A - ,simpleLowerCaseMapping:0x2A9A - ,simpleTitleCaseMapping:0x2A9A - }, - { code:0x2A9B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9B - ,simpleLowerCaseMapping:0x2A9B - ,simpleTitleCaseMapping:0x2A9B - }, - { code:0x2A9C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9C - ,simpleLowerCaseMapping:0x2A9C - ,simpleTitleCaseMapping:0x2A9C - }, - { code:0x2A9D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9D - ,simpleLowerCaseMapping:0x2A9D - ,simpleTitleCaseMapping:0x2A9D - }, - { code:0x2A9E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9E - ,simpleLowerCaseMapping:0x2A9E - ,simpleTitleCaseMapping:0x2A9E - }, - { code:0x2A9F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2A9F - ,simpleLowerCaseMapping:0x2A9F - ,simpleTitleCaseMapping:0x2A9F - }, - { code:0x2AA0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA0 - ,simpleLowerCaseMapping:0x2AA0 - ,simpleTitleCaseMapping:0x2AA0 - }, - { code:0x2AA1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA1 - ,simpleLowerCaseMapping:0x2AA1 - ,simpleTitleCaseMapping:0x2AA1 - }, - { code:0x2AA2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA2 - ,simpleLowerCaseMapping:0x2AA2 - ,simpleTitleCaseMapping:0x2AA2 - }, - { code:0x2AA3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA3 - ,simpleLowerCaseMapping:0x2AA3 - ,simpleTitleCaseMapping:0x2AA3 - }, - { code:0x2AA4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA4 - ,simpleLowerCaseMapping:0x2AA4 - ,simpleTitleCaseMapping:0x2AA4 - }, - { code:0x2AA5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA5 - ,simpleLowerCaseMapping:0x2AA5 - ,simpleTitleCaseMapping:0x2AA5 - }, - { code:0x2AA6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA6 - ,simpleLowerCaseMapping:0x2AA6 - ,simpleTitleCaseMapping:0x2AA6 - }, - { code:0x2AA7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA7 - ,simpleLowerCaseMapping:0x2AA7 - ,simpleTitleCaseMapping:0x2AA7 - }, - { code:0x2AA8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA8 - ,simpleLowerCaseMapping:0x2AA8 - ,simpleTitleCaseMapping:0x2AA8 - }, - { code:0x2AA9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AA9 - ,simpleLowerCaseMapping:0x2AA9 - ,simpleTitleCaseMapping:0x2AA9 - }, - { code:0x2AAA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAA - ,simpleLowerCaseMapping:0x2AAA - ,simpleTitleCaseMapping:0x2AAA - }, - { code:0x2AAB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAB - ,simpleLowerCaseMapping:0x2AAB - ,simpleTitleCaseMapping:0x2AAB - }, - { code:0x2AAC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAC - ,simpleLowerCaseMapping:0x2AAC - ,simpleTitleCaseMapping:0x2AAC - }, - { code:0x2AAD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAD - ,simpleLowerCaseMapping:0x2AAD - ,simpleTitleCaseMapping:0x2AAD - }, - { code:0x2AAE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAE - ,simpleLowerCaseMapping:0x2AAE - ,simpleTitleCaseMapping:0x2AAE - }, - { code:0x2AAF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AAF - ,simpleLowerCaseMapping:0x2AAF - ,simpleTitleCaseMapping:0x2AAF - }, - { code:0x2AB0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB0 - ,simpleLowerCaseMapping:0x2AB0 - ,simpleTitleCaseMapping:0x2AB0 - }, - { code:0x2AB1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB1 - ,simpleLowerCaseMapping:0x2AB1 - ,simpleTitleCaseMapping:0x2AB1 - }, - { code:0x2AB2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB2 - ,simpleLowerCaseMapping:0x2AB2 - ,simpleTitleCaseMapping:0x2AB2 - }, - { code:0x2AB3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB3 - ,simpleLowerCaseMapping:0x2AB3 - ,simpleTitleCaseMapping:0x2AB3 - }, - { code:0x2AB4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB4 - ,simpleLowerCaseMapping:0x2AB4 - ,simpleTitleCaseMapping:0x2AB4 - }, - { code:0x2AB5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB5 - ,simpleLowerCaseMapping:0x2AB5 - ,simpleTitleCaseMapping:0x2AB5 - }, - { code:0x2AB6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB6 - ,simpleLowerCaseMapping:0x2AB6 - ,simpleTitleCaseMapping:0x2AB6 - }, - { code:0x2AB7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB7 - ,simpleLowerCaseMapping:0x2AB7 - ,simpleTitleCaseMapping:0x2AB7 - }, - { code:0x2AB8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB8 - ,simpleLowerCaseMapping:0x2AB8 - ,simpleTitleCaseMapping:0x2AB8 - }, - { code:0x2AB9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AB9 - ,simpleLowerCaseMapping:0x2AB9 - ,simpleTitleCaseMapping:0x2AB9 - }, - { code:0x2ABA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABA - ,simpleLowerCaseMapping:0x2ABA - ,simpleTitleCaseMapping:0x2ABA - }, - { code:0x2ABB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABB - ,simpleLowerCaseMapping:0x2ABB - ,simpleTitleCaseMapping:0x2ABB - }, - { code:0x2ABC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABC - ,simpleLowerCaseMapping:0x2ABC - ,simpleTitleCaseMapping:0x2ABC - }, - { code:0x2ABD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABD - ,simpleLowerCaseMapping:0x2ABD - ,simpleTitleCaseMapping:0x2ABD - }, - { code:0x2ABE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABE - ,simpleLowerCaseMapping:0x2ABE - ,simpleTitleCaseMapping:0x2ABE - }, - { code:0x2ABF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ABF - ,simpleLowerCaseMapping:0x2ABF - ,simpleTitleCaseMapping:0x2ABF - }, - { code:0x2AC0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC0 - ,simpleLowerCaseMapping:0x2AC0 - ,simpleTitleCaseMapping:0x2AC0 - }, - { code:0x2AC1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC1 - ,simpleLowerCaseMapping:0x2AC1 - ,simpleTitleCaseMapping:0x2AC1 - }, - { code:0x2AC2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC2 - ,simpleLowerCaseMapping:0x2AC2 - ,simpleTitleCaseMapping:0x2AC2 - }, - { code:0x2AC3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC3 - ,simpleLowerCaseMapping:0x2AC3 - ,simpleTitleCaseMapping:0x2AC3 - }, - { code:0x2AC4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC4 - ,simpleLowerCaseMapping:0x2AC4 - ,simpleTitleCaseMapping:0x2AC4 - }, - { code:0x2AC5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC5 - ,simpleLowerCaseMapping:0x2AC5 - ,simpleTitleCaseMapping:0x2AC5 - }, - { code:0x2AC6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC6 - ,simpleLowerCaseMapping:0x2AC6 - ,simpleTitleCaseMapping:0x2AC6 - }, - { code:0x2AC7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC7 - ,simpleLowerCaseMapping:0x2AC7 - ,simpleTitleCaseMapping:0x2AC7 - }, - { code:0x2AC8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC8 - ,simpleLowerCaseMapping:0x2AC8 - ,simpleTitleCaseMapping:0x2AC8 - }, - { code:0x2AC9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AC9 - ,simpleLowerCaseMapping:0x2AC9 - ,simpleTitleCaseMapping:0x2AC9 - }, - { code:0x2ACA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACA - ,simpleLowerCaseMapping:0x2ACA - ,simpleTitleCaseMapping:0x2ACA - }, - { code:0x2ACB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACB - ,simpleLowerCaseMapping:0x2ACB - ,simpleTitleCaseMapping:0x2ACB - }, - { code:0x2ACC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACC - ,simpleLowerCaseMapping:0x2ACC - ,simpleTitleCaseMapping:0x2ACC - }, - { code:0x2ACD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACD - ,simpleLowerCaseMapping:0x2ACD - ,simpleTitleCaseMapping:0x2ACD - }, - { code:0x2ACE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACE - ,simpleLowerCaseMapping:0x2ACE - ,simpleTitleCaseMapping:0x2ACE - }, - { code:0x2ACF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ACF - ,simpleLowerCaseMapping:0x2ACF - ,simpleTitleCaseMapping:0x2ACF - }, - { code:0x2AD0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD0 - ,simpleLowerCaseMapping:0x2AD0 - ,simpleTitleCaseMapping:0x2AD0 - }, - { code:0x2AD1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD1 - ,simpleLowerCaseMapping:0x2AD1 - ,simpleTitleCaseMapping:0x2AD1 - }, - { code:0x2AD2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD2 - ,simpleLowerCaseMapping:0x2AD2 - ,simpleTitleCaseMapping:0x2AD2 - }, - { code:0x2AD3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD3 - ,simpleLowerCaseMapping:0x2AD3 - ,simpleTitleCaseMapping:0x2AD3 - }, - { code:0x2AD4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD4 - ,simpleLowerCaseMapping:0x2AD4 - ,simpleTitleCaseMapping:0x2AD4 - }, - { code:0x2AD5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD5 - ,simpleLowerCaseMapping:0x2AD5 - ,simpleTitleCaseMapping:0x2AD5 - }, - { code:0x2AD6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD6 - ,simpleLowerCaseMapping:0x2AD6 - ,simpleTitleCaseMapping:0x2AD6 - }, - { code:0x2AD7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD7 - ,simpleLowerCaseMapping:0x2AD7 - ,simpleTitleCaseMapping:0x2AD7 - }, - { code:0x2AD8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD8 - ,simpleLowerCaseMapping:0x2AD8 - ,simpleTitleCaseMapping:0x2AD8 - }, - { code:0x2AD9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AD9 - ,simpleLowerCaseMapping:0x2AD9 - ,simpleTitleCaseMapping:0x2AD9 - }, - { code:0x2ADA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADA - ,simpleLowerCaseMapping:0x2ADA - ,simpleTitleCaseMapping:0x2ADA - }, - { code:0x2ADB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADB - ,simpleLowerCaseMapping:0x2ADB - ,simpleTitleCaseMapping:0x2ADB - }, - { code:0x2ADC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADC - ,simpleLowerCaseMapping:0x2ADC - ,simpleTitleCaseMapping:0x2ADC - }, - { code:0x2ADD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADD - ,simpleLowerCaseMapping:0x2ADD - ,simpleTitleCaseMapping:0x2ADD - }, - { code:0x2ADE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADE - ,simpleLowerCaseMapping:0x2ADE - ,simpleTitleCaseMapping:0x2ADE - }, - { code:0x2ADF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2ADF - ,simpleLowerCaseMapping:0x2ADF - ,simpleTitleCaseMapping:0x2ADF - }, - { code:0x2AE0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE0 - ,simpleLowerCaseMapping:0x2AE0 - ,simpleTitleCaseMapping:0x2AE0 - }, - { code:0x2AE1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE1 - ,simpleLowerCaseMapping:0x2AE1 - ,simpleTitleCaseMapping:0x2AE1 - }, - { code:0x2AE2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE2 - ,simpleLowerCaseMapping:0x2AE2 - ,simpleTitleCaseMapping:0x2AE2 - }, - { code:0x2AE3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE3 - ,simpleLowerCaseMapping:0x2AE3 - ,simpleTitleCaseMapping:0x2AE3 - }, - { code:0x2AE4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE4 - ,simpleLowerCaseMapping:0x2AE4 - ,simpleTitleCaseMapping:0x2AE4 - }, - { code:0x2AE5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE5 - ,simpleLowerCaseMapping:0x2AE5 - ,simpleTitleCaseMapping:0x2AE5 - }, - { code:0x2AE6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE6 - ,simpleLowerCaseMapping:0x2AE6 - ,simpleTitleCaseMapping:0x2AE6 - }, - { code:0x2AE7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE7 - ,simpleLowerCaseMapping:0x2AE7 - ,simpleTitleCaseMapping:0x2AE7 - }, - { code:0x2AE8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE8 - ,simpleLowerCaseMapping:0x2AE8 - ,simpleTitleCaseMapping:0x2AE8 - }, - { code:0x2AE9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AE9 - ,simpleLowerCaseMapping:0x2AE9 - ,simpleTitleCaseMapping:0x2AE9 - }, - { code:0x2AEA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AEA - ,simpleLowerCaseMapping:0x2AEA - ,simpleTitleCaseMapping:0x2AEA - }, - { code:0x2AEB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AEB - ,simpleLowerCaseMapping:0x2AEB - ,simpleTitleCaseMapping:0x2AEB - }, - { code:0x2AEC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AEC - ,simpleLowerCaseMapping:0x2AEC - ,simpleTitleCaseMapping:0x2AEC - }, - { code:0x2AED - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AED - ,simpleLowerCaseMapping:0x2AED - ,simpleTitleCaseMapping:0x2AED - }, - { code:0x2AEE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AEE - ,simpleLowerCaseMapping:0x2AEE - ,simpleTitleCaseMapping:0x2AEE - }, - { code:0x2AEF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AEF - ,simpleLowerCaseMapping:0x2AEF - ,simpleTitleCaseMapping:0x2AEF - }, - { code:0x2AF0 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF0 - ,simpleLowerCaseMapping:0x2AF0 - ,simpleTitleCaseMapping:0x2AF0 - }, - { code:0x2AF1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF1 - ,simpleLowerCaseMapping:0x2AF1 - ,simpleTitleCaseMapping:0x2AF1 - }, - { code:0x2AF2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF2 - ,simpleLowerCaseMapping:0x2AF2 - ,simpleTitleCaseMapping:0x2AF2 - }, - { code:0x2AF3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF3 - ,simpleLowerCaseMapping:0x2AF3 - ,simpleTitleCaseMapping:0x2AF3 - }, - { code:0x2AF4 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF4 - ,simpleLowerCaseMapping:0x2AF4 - ,simpleTitleCaseMapping:0x2AF4 - }, - { code:0x2AF5 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF5 - ,simpleLowerCaseMapping:0x2AF5 - ,simpleTitleCaseMapping:0x2AF5 - }, - { code:0x2AF6 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF6 - ,simpleLowerCaseMapping:0x2AF6 - ,simpleTitleCaseMapping:0x2AF6 - }, - { code:0x2AF7 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF7 - ,simpleLowerCaseMapping:0x2AF7 - ,simpleTitleCaseMapping:0x2AF7 - }, - { code:0x2AF8 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF8 - ,simpleLowerCaseMapping:0x2AF8 - ,simpleTitleCaseMapping:0x2AF8 - }, - { code:0x2AF9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AF9 - ,simpleLowerCaseMapping:0x2AF9 - ,simpleTitleCaseMapping:0x2AF9 - }, - { code:0x2AFA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFA - ,simpleLowerCaseMapping:0x2AFA - ,simpleTitleCaseMapping:0x2AFA - }, - { code:0x2AFB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFB - ,simpleLowerCaseMapping:0x2AFB - ,simpleTitleCaseMapping:0x2AFB - }, - { code:0x2AFC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFC - ,simpleLowerCaseMapping:0x2AFC - ,simpleTitleCaseMapping:0x2AFC - }, - { code:0x2AFD - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFD - ,simpleLowerCaseMapping:0x2AFD - ,simpleTitleCaseMapping:0x2AFD - }, - { code:0x2AFE - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFE - ,simpleLowerCaseMapping:0x2AFE - ,simpleTitleCaseMapping:0x2AFE - }, - { code:0x2AFF - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x2AFF - ,simpleLowerCaseMapping:0x2AFF - ,simpleTitleCaseMapping:0x2AFF - }, - { code:0x2B00 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B00 - ,simpleLowerCaseMapping:0x2B00 - ,simpleTitleCaseMapping:0x2B00 - }, - { code:0x2B01 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B01 - ,simpleLowerCaseMapping:0x2B01 - ,simpleTitleCaseMapping:0x2B01 - }, - { code:0x2B02 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B02 - ,simpleLowerCaseMapping:0x2B02 - ,simpleTitleCaseMapping:0x2B02 - }, - { code:0x2B03 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B03 - ,simpleLowerCaseMapping:0x2B03 - ,simpleTitleCaseMapping:0x2B03 - }, - { code:0x2B04 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B04 - ,simpleLowerCaseMapping:0x2B04 - ,simpleTitleCaseMapping:0x2B04 - }, - { code:0x2B05 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B05 - ,simpleLowerCaseMapping:0x2B05 - ,simpleTitleCaseMapping:0x2B05 - }, - { code:0x2B06 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B06 - ,simpleLowerCaseMapping:0x2B06 - ,simpleTitleCaseMapping:0x2B06 - }, - { code:0x2B07 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B07 - ,simpleLowerCaseMapping:0x2B07 - ,simpleTitleCaseMapping:0x2B07 - }, - { code:0x2B08 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B08 - ,simpleLowerCaseMapping:0x2B08 - ,simpleTitleCaseMapping:0x2B08 - }, - { code:0x2B09 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B09 - ,simpleLowerCaseMapping:0x2B09 - ,simpleTitleCaseMapping:0x2B09 - }, - { code:0x2B0A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0A - ,simpleLowerCaseMapping:0x2B0A - ,simpleTitleCaseMapping:0x2B0A - }, - { code:0x2B0B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0B - ,simpleLowerCaseMapping:0x2B0B - ,simpleTitleCaseMapping:0x2B0B - }, - { code:0x2B0C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0C - ,simpleLowerCaseMapping:0x2B0C - ,simpleTitleCaseMapping:0x2B0C - }, - { code:0x2B0D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0D - ,simpleLowerCaseMapping:0x2B0D - ,simpleTitleCaseMapping:0x2B0D - }, - { code:0x2B0E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0E - ,simpleLowerCaseMapping:0x2B0E - ,simpleTitleCaseMapping:0x2B0E - }, - { code:0x2B0F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B0F - ,simpleLowerCaseMapping:0x2B0F - ,simpleTitleCaseMapping:0x2B0F - }, - { code:0x2B10 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B10 - ,simpleLowerCaseMapping:0x2B10 - ,simpleTitleCaseMapping:0x2B10 - }, - { code:0x2B11 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B11 - ,simpleLowerCaseMapping:0x2B11 - ,simpleTitleCaseMapping:0x2B11 - }, - { code:0x2B12 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B12 - ,simpleLowerCaseMapping:0x2B12 - ,simpleTitleCaseMapping:0x2B12 - }, - { code:0x2B13 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B13 - ,simpleLowerCaseMapping:0x2B13 - ,simpleTitleCaseMapping:0x2B13 - }, - { code:0x2B14 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B14 - ,simpleLowerCaseMapping:0x2B14 - ,simpleTitleCaseMapping:0x2B14 - }, - { code:0x2B15 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B15 - ,simpleLowerCaseMapping:0x2B15 - ,simpleTitleCaseMapping:0x2B15 - }, - { code:0x2B16 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B16 - ,simpleLowerCaseMapping:0x2B16 - ,simpleTitleCaseMapping:0x2B16 - }, - { code:0x2B17 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B17 - ,simpleLowerCaseMapping:0x2B17 - ,simpleTitleCaseMapping:0x2B17 - }, - { code:0x2B18 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B18 - ,simpleLowerCaseMapping:0x2B18 - ,simpleTitleCaseMapping:0x2B18 - }, - { code:0x2B19 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B19 - ,simpleLowerCaseMapping:0x2B19 - ,simpleTitleCaseMapping:0x2B19 - }, - { code:0x2B1A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B1A - ,simpleLowerCaseMapping:0x2B1A - ,simpleTitleCaseMapping:0x2B1A - }, - { code:0x2B20 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B20 - ,simpleLowerCaseMapping:0x2B20 - ,simpleTitleCaseMapping:0x2B20 - }, - { code:0x2B21 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B21 - ,simpleLowerCaseMapping:0x2B21 - ,simpleTitleCaseMapping:0x2B21 - }, - { code:0x2B22 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B22 - ,simpleLowerCaseMapping:0x2B22 - ,simpleTitleCaseMapping:0x2B22 - }, - { code:0x2B23 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2B23 - ,simpleLowerCaseMapping:0x2B23 - ,simpleTitleCaseMapping:0x2B23 - }, - { code:0x2C00 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C00 - ,simpleLowerCaseMapping:0x2C30 - ,simpleTitleCaseMapping:0x2C00 - }, - { code:0x2C01 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C01 - ,simpleLowerCaseMapping:0x2C31 - ,simpleTitleCaseMapping:0x2C01 - }, - { code:0x2C02 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C02 - ,simpleLowerCaseMapping:0x2C32 - ,simpleTitleCaseMapping:0x2C02 - }, - { code:0x2C03 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C03 - ,simpleLowerCaseMapping:0x2C33 - ,simpleTitleCaseMapping:0x2C03 - }, - { code:0x2C04 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C04 - ,simpleLowerCaseMapping:0x2C34 - ,simpleTitleCaseMapping:0x2C04 - }, - { code:0x2C05 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C05 - ,simpleLowerCaseMapping:0x2C35 - ,simpleTitleCaseMapping:0x2C05 - }, - { code:0x2C06 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C06 - ,simpleLowerCaseMapping:0x2C36 - ,simpleTitleCaseMapping:0x2C06 - }, - { code:0x2C07 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C07 - ,simpleLowerCaseMapping:0x2C37 - ,simpleTitleCaseMapping:0x2C07 - }, - { code:0x2C08 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C08 - ,simpleLowerCaseMapping:0x2C38 - ,simpleTitleCaseMapping:0x2C08 - }, - { code:0x2C09 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C09 - ,simpleLowerCaseMapping:0x2C39 - ,simpleTitleCaseMapping:0x2C09 - }, - { code:0x2C0A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0A - ,simpleLowerCaseMapping:0x2C3A - ,simpleTitleCaseMapping:0x2C0A - }, - { code:0x2C0B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0B - ,simpleLowerCaseMapping:0x2C3B - ,simpleTitleCaseMapping:0x2C0B - }, - { code:0x2C0C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0C - ,simpleLowerCaseMapping:0x2C3C - ,simpleTitleCaseMapping:0x2C0C - }, - { code:0x2C0D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0D - ,simpleLowerCaseMapping:0x2C3D - ,simpleTitleCaseMapping:0x2C0D - }, - { code:0x2C0E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0E - ,simpleLowerCaseMapping:0x2C3E - ,simpleTitleCaseMapping:0x2C0E - }, - { code:0x2C0F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C0F - ,simpleLowerCaseMapping:0x2C3F - ,simpleTitleCaseMapping:0x2C0F - }, - { code:0x2C10 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C10 - ,simpleLowerCaseMapping:0x2C40 - ,simpleTitleCaseMapping:0x2C10 - }, - { code:0x2C11 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C11 - ,simpleLowerCaseMapping:0x2C41 - ,simpleTitleCaseMapping:0x2C11 - }, - { code:0x2C12 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C12 - ,simpleLowerCaseMapping:0x2C42 - ,simpleTitleCaseMapping:0x2C12 - }, - { code:0x2C13 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C13 - ,simpleLowerCaseMapping:0x2C43 - ,simpleTitleCaseMapping:0x2C13 - }, - { code:0x2C14 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C14 - ,simpleLowerCaseMapping:0x2C44 - ,simpleTitleCaseMapping:0x2C14 - }, - { code:0x2C15 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C15 - ,simpleLowerCaseMapping:0x2C45 - ,simpleTitleCaseMapping:0x2C15 - }, - { code:0x2C16 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C16 - ,simpleLowerCaseMapping:0x2C46 - ,simpleTitleCaseMapping:0x2C16 - }, - { code:0x2C17 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C17 - ,simpleLowerCaseMapping:0x2C47 - ,simpleTitleCaseMapping:0x2C17 - }, - { code:0x2C18 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C18 - ,simpleLowerCaseMapping:0x2C48 - ,simpleTitleCaseMapping:0x2C18 - }, - { code:0x2C19 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C19 - ,simpleLowerCaseMapping:0x2C49 - ,simpleTitleCaseMapping:0x2C19 - }, - { code:0x2C1A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1A - ,simpleLowerCaseMapping:0x2C4A - ,simpleTitleCaseMapping:0x2C1A - }, - { code:0x2C1B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1B - ,simpleLowerCaseMapping:0x2C4B - ,simpleTitleCaseMapping:0x2C1B - }, - { code:0x2C1C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1C - ,simpleLowerCaseMapping:0x2C4C - ,simpleTitleCaseMapping:0x2C1C - }, - { code:0x2C1D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1D - ,simpleLowerCaseMapping:0x2C4D - ,simpleTitleCaseMapping:0x2C1D - }, - { code:0x2C1E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1E - ,simpleLowerCaseMapping:0x2C4E - ,simpleTitleCaseMapping:0x2C1E - }, - { code:0x2C1F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C1F - ,simpleLowerCaseMapping:0x2C4F - ,simpleTitleCaseMapping:0x2C1F - }, - { code:0x2C20 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C20 - ,simpleLowerCaseMapping:0x2C50 - ,simpleTitleCaseMapping:0x2C20 - }, - { code:0x2C21 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C21 - ,simpleLowerCaseMapping:0x2C51 - ,simpleTitleCaseMapping:0x2C21 - }, - { code:0x2C22 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C22 - ,simpleLowerCaseMapping:0x2C52 - ,simpleTitleCaseMapping:0x2C22 - }, - { code:0x2C23 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C23 - ,simpleLowerCaseMapping:0x2C53 - ,simpleTitleCaseMapping:0x2C23 - }, - { code:0x2C24 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C24 - ,simpleLowerCaseMapping:0x2C54 - ,simpleTitleCaseMapping:0x2C24 - }, - { code:0x2C25 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C25 - ,simpleLowerCaseMapping:0x2C55 - ,simpleTitleCaseMapping:0x2C25 - }, - { code:0x2C26 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C26 - ,simpleLowerCaseMapping:0x2C56 - ,simpleTitleCaseMapping:0x2C26 - }, - { code:0x2C27 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C27 - ,simpleLowerCaseMapping:0x2C57 - ,simpleTitleCaseMapping:0x2C27 - }, - { code:0x2C28 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C28 - ,simpleLowerCaseMapping:0x2C58 - ,simpleTitleCaseMapping:0x2C28 - }, - { code:0x2C29 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C29 - ,simpleLowerCaseMapping:0x2C59 - ,simpleTitleCaseMapping:0x2C29 - }, - { code:0x2C2A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C2A - ,simpleLowerCaseMapping:0x2C5A - ,simpleTitleCaseMapping:0x2C2A - }, - { code:0x2C2B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C2B - ,simpleLowerCaseMapping:0x2C5B - ,simpleTitleCaseMapping:0x2C2B - }, - { code:0x2C2C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C2C - ,simpleLowerCaseMapping:0x2C5C - ,simpleTitleCaseMapping:0x2C2C - }, - { code:0x2C2D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C2D - ,simpleLowerCaseMapping:0x2C5D - ,simpleTitleCaseMapping:0x2C2D - }, - { code:0x2C2E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C2E - ,simpleLowerCaseMapping:0x2C5E - ,simpleTitleCaseMapping:0x2C2E - }, - { code:0x2C30 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C00 - ,simpleLowerCaseMapping:0x2C30 - ,simpleTitleCaseMapping:0x2C00 - }, - { code:0x2C31 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C01 - ,simpleLowerCaseMapping:0x2C31 - ,simpleTitleCaseMapping:0x2C01 - }, - { code:0x2C32 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C02 - ,simpleLowerCaseMapping:0x2C32 - ,simpleTitleCaseMapping:0x2C02 - }, - { code:0x2C33 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C03 - ,simpleLowerCaseMapping:0x2C33 - ,simpleTitleCaseMapping:0x2C03 - }, - { code:0x2C34 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C04 - ,simpleLowerCaseMapping:0x2C34 - ,simpleTitleCaseMapping:0x2C04 - }, - { code:0x2C35 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C05 - ,simpleLowerCaseMapping:0x2C35 - ,simpleTitleCaseMapping:0x2C05 - }, - { code:0x2C36 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C06 - ,simpleLowerCaseMapping:0x2C36 - ,simpleTitleCaseMapping:0x2C06 - }, - { code:0x2C37 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C07 - ,simpleLowerCaseMapping:0x2C37 - ,simpleTitleCaseMapping:0x2C07 - }, - { code:0x2C38 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C08 - ,simpleLowerCaseMapping:0x2C38 - ,simpleTitleCaseMapping:0x2C08 - }, - { code:0x2C39 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C09 - ,simpleLowerCaseMapping:0x2C39 - ,simpleTitleCaseMapping:0x2C09 - }, - { code:0x2C3A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0A - ,simpleLowerCaseMapping:0x2C3A - ,simpleTitleCaseMapping:0x2C0A - }, - { code:0x2C3B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0B - ,simpleLowerCaseMapping:0x2C3B - ,simpleTitleCaseMapping:0x2C0B - }, - { code:0x2C3C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0C - ,simpleLowerCaseMapping:0x2C3C - ,simpleTitleCaseMapping:0x2C0C - }, - { code:0x2C3D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0D - ,simpleLowerCaseMapping:0x2C3D - ,simpleTitleCaseMapping:0x2C0D - }, - { code:0x2C3E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0E - ,simpleLowerCaseMapping:0x2C3E - ,simpleTitleCaseMapping:0x2C0E - }, - { code:0x2C3F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C0F - ,simpleLowerCaseMapping:0x2C3F - ,simpleTitleCaseMapping:0x2C0F - }, - { code:0x2C40 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C10 - ,simpleLowerCaseMapping:0x2C40 - ,simpleTitleCaseMapping:0x2C10 - }, - { code:0x2C41 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C11 - ,simpleLowerCaseMapping:0x2C41 - ,simpleTitleCaseMapping:0x2C11 - }, - { code:0x2C42 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C12 - ,simpleLowerCaseMapping:0x2C42 - ,simpleTitleCaseMapping:0x2C12 - }, - { code:0x2C43 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C13 - ,simpleLowerCaseMapping:0x2C43 - ,simpleTitleCaseMapping:0x2C13 - }, - { code:0x2C44 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C14 - ,simpleLowerCaseMapping:0x2C44 - ,simpleTitleCaseMapping:0x2C14 - }, - { code:0x2C45 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C15 - ,simpleLowerCaseMapping:0x2C45 - ,simpleTitleCaseMapping:0x2C15 - }, - { code:0x2C46 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C16 - ,simpleLowerCaseMapping:0x2C46 - ,simpleTitleCaseMapping:0x2C16 - }, - { code:0x2C47 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C17 - ,simpleLowerCaseMapping:0x2C47 - ,simpleTitleCaseMapping:0x2C17 - }, - { code:0x2C48 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C18 - ,simpleLowerCaseMapping:0x2C48 - ,simpleTitleCaseMapping:0x2C18 - }, - { code:0x2C49 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C19 - ,simpleLowerCaseMapping:0x2C49 - ,simpleTitleCaseMapping:0x2C19 - }, - { code:0x2C4A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1A - ,simpleLowerCaseMapping:0x2C4A - ,simpleTitleCaseMapping:0x2C1A - }, - { code:0x2C4B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1B - ,simpleLowerCaseMapping:0x2C4B - ,simpleTitleCaseMapping:0x2C1B - }, - { code:0x2C4C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1C - ,simpleLowerCaseMapping:0x2C4C - ,simpleTitleCaseMapping:0x2C1C - }, - { code:0x2C4D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1D - ,simpleLowerCaseMapping:0x2C4D - ,simpleTitleCaseMapping:0x2C1D - }, - { code:0x2C4E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1E - ,simpleLowerCaseMapping:0x2C4E - ,simpleTitleCaseMapping:0x2C1E - }, - { code:0x2C4F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C1F - ,simpleLowerCaseMapping:0x2C4F - ,simpleTitleCaseMapping:0x2C1F - }, - { code:0x2C50 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C20 - ,simpleLowerCaseMapping:0x2C50 - ,simpleTitleCaseMapping:0x2C20 - }, - { code:0x2C51 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C21 - ,simpleLowerCaseMapping:0x2C51 - ,simpleTitleCaseMapping:0x2C21 - }, - { code:0x2C52 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C22 - ,simpleLowerCaseMapping:0x2C52 - ,simpleTitleCaseMapping:0x2C22 - }, - { code:0x2C53 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C23 - ,simpleLowerCaseMapping:0x2C53 - ,simpleTitleCaseMapping:0x2C23 - }, - { code:0x2C54 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C24 - ,simpleLowerCaseMapping:0x2C54 - ,simpleTitleCaseMapping:0x2C24 - }, - { code:0x2C55 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C25 - ,simpleLowerCaseMapping:0x2C55 - ,simpleTitleCaseMapping:0x2C25 - }, - { code:0x2C56 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C26 - ,simpleLowerCaseMapping:0x2C56 - ,simpleTitleCaseMapping:0x2C26 - }, - { code:0x2C57 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C27 - ,simpleLowerCaseMapping:0x2C57 - ,simpleTitleCaseMapping:0x2C27 - }, - { code:0x2C58 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C28 - ,simpleLowerCaseMapping:0x2C58 - ,simpleTitleCaseMapping:0x2C28 - }, - { code:0x2C59 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C29 - ,simpleLowerCaseMapping:0x2C59 - ,simpleTitleCaseMapping:0x2C29 - }, - { code:0x2C5A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C2A - ,simpleLowerCaseMapping:0x2C5A - ,simpleTitleCaseMapping:0x2C2A - }, - { code:0x2C5B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C2B - ,simpleLowerCaseMapping:0x2C5B - ,simpleTitleCaseMapping:0x2C2B - }, - { code:0x2C5C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C2C - ,simpleLowerCaseMapping:0x2C5C - ,simpleTitleCaseMapping:0x2C2C - }, - { code:0x2C5D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C2D - ,simpleLowerCaseMapping:0x2C5D - ,simpleTitleCaseMapping:0x2C2D - }, - { code:0x2C5E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C2E - ,simpleLowerCaseMapping:0x2C5E - ,simpleTitleCaseMapping:0x2C2E - }, - { code:0x2C60 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C60 - ,simpleLowerCaseMapping:0x2C61 - ,simpleTitleCaseMapping:0x2C60 - }, - { code:0x2C61 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C60 - ,simpleLowerCaseMapping:0x2C61 - ,simpleTitleCaseMapping:0x2C60 - }, - { code:0x2C62 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C62 - ,simpleLowerCaseMapping:0x026B - ,simpleTitleCaseMapping:0x2C62 - }, - { code:0x2C63 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C63 - ,simpleLowerCaseMapping:0x1D7D - ,simpleTitleCaseMapping:0x2C63 - }, - { code:0x2C64 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C64 - ,simpleLowerCaseMapping:0x027D - ,simpleTitleCaseMapping:0x2C64 - }, - { code:0x2C65 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x023A - ,simpleLowerCaseMapping:0x2C65 - ,simpleTitleCaseMapping:0x023A - }, - { code:0x2C66 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x023E - ,simpleLowerCaseMapping:0x2C66 - ,simpleTitleCaseMapping:0x023E - }, - { code:0x2C67 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C67 - ,simpleLowerCaseMapping:0x2C68 - ,simpleTitleCaseMapping:0x2C67 - }, - { code:0x2C68 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C67 - ,simpleLowerCaseMapping:0x2C68 - ,simpleTitleCaseMapping:0x2C67 - }, - { code:0x2C69 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C69 - ,simpleLowerCaseMapping:0x2C6A - ,simpleTitleCaseMapping:0x2C69 - }, - { code:0x2C6A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C69 - ,simpleLowerCaseMapping:0x2C6A - ,simpleTitleCaseMapping:0x2C69 - }, - { code:0x2C6B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C6B - ,simpleLowerCaseMapping:0x2C6C - ,simpleTitleCaseMapping:0x2C6B - }, - { code:0x2C6C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C6B - ,simpleLowerCaseMapping:0x2C6C - ,simpleTitleCaseMapping:0x2C6B - }, - { code:0x2C74 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C74 - ,simpleLowerCaseMapping:0x2C74 - ,simpleTitleCaseMapping:0x2C74 - }, - { code:0x2C75 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C75 - ,simpleLowerCaseMapping:0x2C76 - ,simpleTitleCaseMapping:0x2C75 - }, - { code:0x2C76 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C75 - ,simpleLowerCaseMapping:0x2C76 - ,simpleTitleCaseMapping:0x2C75 - }, - { code:0x2C77 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C77 - ,simpleLowerCaseMapping:0x2C77 - ,simpleTitleCaseMapping:0x2C77 - }, - { code:0x2C80 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C80 - ,simpleLowerCaseMapping:0x2C81 - ,simpleTitleCaseMapping:0x2C80 - }, - { code:0x2C81 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C80 - ,simpleLowerCaseMapping:0x2C81 - ,simpleTitleCaseMapping:0x2C80 - }, - { code:0x2C82 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C82 - ,simpleLowerCaseMapping:0x2C83 - ,simpleTitleCaseMapping:0x2C82 - }, - { code:0x2C83 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C82 - ,simpleLowerCaseMapping:0x2C83 - ,simpleTitleCaseMapping:0x2C82 - }, - { code:0x2C84 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C84 - ,simpleLowerCaseMapping:0x2C85 - ,simpleTitleCaseMapping:0x2C84 - }, - { code:0x2C85 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C84 - ,simpleLowerCaseMapping:0x2C85 - ,simpleTitleCaseMapping:0x2C84 - }, - { code:0x2C86 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C86 - ,simpleLowerCaseMapping:0x2C87 - ,simpleTitleCaseMapping:0x2C86 - }, - { code:0x2C87 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C86 - ,simpleLowerCaseMapping:0x2C87 - ,simpleTitleCaseMapping:0x2C86 - }, - { code:0x2C88 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C88 - ,simpleLowerCaseMapping:0x2C89 - ,simpleTitleCaseMapping:0x2C88 - }, - { code:0x2C89 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C88 - ,simpleLowerCaseMapping:0x2C89 - ,simpleTitleCaseMapping:0x2C88 - }, - { code:0x2C8A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C8A - ,simpleLowerCaseMapping:0x2C8B - ,simpleTitleCaseMapping:0x2C8A - }, - { code:0x2C8B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C8A - ,simpleLowerCaseMapping:0x2C8B - ,simpleTitleCaseMapping:0x2C8A - }, - { code:0x2C8C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C8C - ,simpleLowerCaseMapping:0x2C8D - ,simpleTitleCaseMapping:0x2C8C - }, - { code:0x2C8D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C8C - ,simpleLowerCaseMapping:0x2C8D - ,simpleTitleCaseMapping:0x2C8C - }, - { code:0x2C8E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C8E - ,simpleLowerCaseMapping:0x2C8F - ,simpleTitleCaseMapping:0x2C8E - }, - { code:0x2C8F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C8E - ,simpleLowerCaseMapping:0x2C8F - ,simpleTitleCaseMapping:0x2C8E - }, - { code:0x2C90 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C90 - ,simpleLowerCaseMapping:0x2C91 - ,simpleTitleCaseMapping:0x2C90 - }, - { code:0x2C91 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C90 - ,simpleLowerCaseMapping:0x2C91 - ,simpleTitleCaseMapping:0x2C90 - }, - { code:0x2C92 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C92 - ,simpleLowerCaseMapping:0x2C93 - ,simpleTitleCaseMapping:0x2C92 - }, - { code:0x2C93 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C92 - ,simpleLowerCaseMapping:0x2C93 - ,simpleTitleCaseMapping:0x2C92 - }, - { code:0x2C94 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C94 - ,simpleLowerCaseMapping:0x2C95 - ,simpleTitleCaseMapping:0x2C94 - }, - { code:0x2C95 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C94 - ,simpleLowerCaseMapping:0x2C95 - ,simpleTitleCaseMapping:0x2C94 - }, - { code:0x2C96 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C96 - ,simpleLowerCaseMapping:0x2C97 - ,simpleTitleCaseMapping:0x2C96 - }, - { code:0x2C97 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C96 - ,simpleLowerCaseMapping:0x2C97 - ,simpleTitleCaseMapping:0x2C96 - }, - { code:0x2C98 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C98 - ,simpleLowerCaseMapping:0x2C99 - ,simpleTitleCaseMapping:0x2C98 - }, - { code:0x2C99 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C98 - ,simpleLowerCaseMapping:0x2C99 - ,simpleTitleCaseMapping:0x2C98 - }, - { code:0x2C9A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C9A - ,simpleLowerCaseMapping:0x2C9B - ,simpleTitleCaseMapping:0x2C9A - }, - { code:0x2C9B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C9A - ,simpleLowerCaseMapping:0x2C9B - ,simpleTitleCaseMapping:0x2C9A - }, - { code:0x2C9C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C9C - ,simpleLowerCaseMapping:0x2C9D - ,simpleTitleCaseMapping:0x2C9C - }, - { code:0x2C9D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C9C - ,simpleLowerCaseMapping:0x2C9D - ,simpleTitleCaseMapping:0x2C9C - }, - { code:0x2C9E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2C9E - ,simpleLowerCaseMapping:0x2C9F - ,simpleTitleCaseMapping:0x2C9E - }, - { code:0x2C9F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2C9E - ,simpleLowerCaseMapping:0x2C9F - ,simpleTitleCaseMapping:0x2C9E - }, - { code:0x2CA0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CA0 - ,simpleLowerCaseMapping:0x2CA1 - ,simpleTitleCaseMapping:0x2CA0 - }, - { code:0x2CA1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CA0 - ,simpleLowerCaseMapping:0x2CA1 - ,simpleTitleCaseMapping:0x2CA0 - }, - { code:0x2CA2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CA2 - ,simpleLowerCaseMapping:0x2CA3 - ,simpleTitleCaseMapping:0x2CA2 - }, - { code:0x2CA3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CA2 - ,simpleLowerCaseMapping:0x2CA3 - ,simpleTitleCaseMapping:0x2CA2 - }, - { code:0x2CA4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CA4 - ,simpleLowerCaseMapping:0x2CA5 - ,simpleTitleCaseMapping:0x2CA4 - }, - { code:0x2CA5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CA4 - ,simpleLowerCaseMapping:0x2CA5 - ,simpleTitleCaseMapping:0x2CA4 - }, - { code:0x2CA6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CA6 - ,simpleLowerCaseMapping:0x2CA7 - ,simpleTitleCaseMapping:0x2CA6 - }, - { code:0x2CA7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CA6 - ,simpleLowerCaseMapping:0x2CA7 - ,simpleTitleCaseMapping:0x2CA6 - }, - { code:0x2CA8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CA8 - ,simpleLowerCaseMapping:0x2CA9 - ,simpleTitleCaseMapping:0x2CA8 - }, - { code:0x2CA9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CA8 - ,simpleLowerCaseMapping:0x2CA9 - ,simpleTitleCaseMapping:0x2CA8 - }, - { code:0x2CAA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CAA - ,simpleLowerCaseMapping:0x2CAB - ,simpleTitleCaseMapping:0x2CAA - }, - { code:0x2CAB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CAA - ,simpleLowerCaseMapping:0x2CAB - ,simpleTitleCaseMapping:0x2CAA - }, - { code:0x2CAC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CAC - ,simpleLowerCaseMapping:0x2CAD - ,simpleTitleCaseMapping:0x2CAC - }, - { code:0x2CAD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CAC - ,simpleLowerCaseMapping:0x2CAD - ,simpleTitleCaseMapping:0x2CAC - }, - { code:0x2CAE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CAE - ,simpleLowerCaseMapping:0x2CAF - ,simpleTitleCaseMapping:0x2CAE - }, - { code:0x2CAF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CAE - ,simpleLowerCaseMapping:0x2CAF - ,simpleTitleCaseMapping:0x2CAE - }, - { code:0x2CB0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CB0 - ,simpleLowerCaseMapping:0x2CB1 - ,simpleTitleCaseMapping:0x2CB0 - }, - { code:0x2CB1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CB0 - ,simpleLowerCaseMapping:0x2CB1 - ,simpleTitleCaseMapping:0x2CB0 - }, - { code:0x2CB2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CB2 - ,simpleLowerCaseMapping:0x2CB3 - ,simpleTitleCaseMapping:0x2CB2 - }, - { code:0x2CB3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CB2 - ,simpleLowerCaseMapping:0x2CB3 - ,simpleTitleCaseMapping:0x2CB2 - }, - { code:0x2CB4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CB4 - ,simpleLowerCaseMapping:0x2CB5 - ,simpleTitleCaseMapping:0x2CB4 - }, - { code:0x2CB5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CB4 - ,simpleLowerCaseMapping:0x2CB5 - ,simpleTitleCaseMapping:0x2CB4 - }, - { code:0x2CB6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CB6 - ,simpleLowerCaseMapping:0x2CB7 - ,simpleTitleCaseMapping:0x2CB6 - }, - { code:0x2CB7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CB6 - ,simpleLowerCaseMapping:0x2CB7 - ,simpleTitleCaseMapping:0x2CB6 - }, - { code:0x2CB8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CB8 - ,simpleLowerCaseMapping:0x2CB9 - ,simpleTitleCaseMapping:0x2CB8 - }, - { code:0x2CB9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CB8 - ,simpleLowerCaseMapping:0x2CB9 - ,simpleTitleCaseMapping:0x2CB8 - }, - { code:0x2CBA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CBA - ,simpleLowerCaseMapping:0x2CBB - ,simpleTitleCaseMapping:0x2CBA - }, - { code:0x2CBB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CBA - ,simpleLowerCaseMapping:0x2CBB - ,simpleTitleCaseMapping:0x2CBA - }, - { code:0x2CBC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CBC - ,simpleLowerCaseMapping:0x2CBD - ,simpleTitleCaseMapping:0x2CBC - }, - { code:0x2CBD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CBC - ,simpleLowerCaseMapping:0x2CBD - ,simpleTitleCaseMapping:0x2CBC - }, - { code:0x2CBE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CBE - ,simpleLowerCaseMapping:0x2CBF - ,simpleTitleCaseMapping:0x2CBE - }, - { code:0x2CBF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CBE - ,simpleLowerCaseMapping:0x2CBF - ,simpleTitleCaseMapping:0x2CBE - }, - { code:0x2CC0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CC0 - ,simpleLowerCaseMapping:0x2CC1 - ,simpleTitleCaseMapping:0x2CC0 - }, - { code:0x2CC1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CC0 - ,simpleLowerCaseMapping:0x2CC1 - ,simpleTitleCaseMapping:0x2CC0 - }, - { code:0x2CC2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CC2 - ,simpleLowerCaseMapping:0x2CC3 - ,simpleTitleCaseMapping:0x2CC2 - }, - { code:0x2CC3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CC2 - ,simpleLowerCaseMapping:0x2CC3 - ,simpleTitleCaseMapping:0x2CC2 - }, - { code:0x2CC4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CC4 - ,simpleLowerCaseMapping:0x2CC5 - ,simpleTitleCaseMapping:0x2CC4 - }, - { code:0x2CC5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CC4 - ,simpleLowerCaseMapping:0x2CC5 - ,simpleTitleCaseMapping:0x2CC4 - }, - { code:0x2CC6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CC6 - ,simpleLowerCaseMapping:0x2CC7 - ,simpleTitleCaseMapping:0x2CC6 - }, - { code:0x2CC7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CC6 - ,simpleLowerCaseMapping:0x2CC7 - ,simpleTitleCaseMapping:0x2CC6 - }, - { code:0x2CC8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CC8 - ,simpleLowerCaseMapping:0x2CC9 - ,simpleTitleCaseMapping:0x2CC8 - }, - { code:0x2CC9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CC8 - ,simpleLowerCaseMapping:0x2CC9 - ,simpleTitleCaseMapping:0x2CC8 - }, - { code:0x2CCA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CCA - ,simpleLowerCaseMapping:0x2CCB - ,simpleTitleCaseMapping:0x2CCA - }, - { code:0x2CCB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CCA - ,simpleLowerCaseMapping:0x2CCB - ,simpleTitleCaseMapping:0x2CCA - }, - { code:0x2CCC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CCC - ,simpleLowerCaseMapping:0x2CCD - ,simpleTitleCaseMapping:0x2CCC - }, - { code:0x2CCD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CCC - ,simpleLowerCaseMapping:0x2CCD - ,simpleTitleCaseMapping:0x2CCC - }, - { code:0x2CCE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CCE - ,simpleLowerCaseMapping:0x2CCF - ,simpleTitleCaseMapping:0x2CCE - }, - { code:0x2CCF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CCE - ,simpleLowerCaseMapping:0x2CCF - ,simpleTitleCaseMapping:0x2CCE - }, - { code:0x2CD0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CD0 - ,simpleLowerCaseMapping:0x2CD1 - ,simpleTitleCaseMapping:0x2CD0 - }, - { code:0x2CD1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CD0 - ,simpleLowerCaseMapping:0x2CD1 - ,simpleTitleCaseMapping:0x2CD0 - }, - { code:0x2CD2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CD2 - ,simpleLowerCaseMapping:0x2CD3 - ,simpleTitleCaseMapping:0x2CD2 - }, - { code:0x2CD3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CD2 - ,simpleLowerCaseMapping:0x2CD3 - ,simpleTitleCaseMapping:0x2CD2 - }, - { code:0x2CD4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CD4 - ,simpleLowerCaseMapping:0x2CD5 - ,simpleTitleCaseMapping:0x2CD4 - }, - { code:0x2CD5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CD4 - ,simpleLowerCaseMapping:0x2CD5 - ,simpleTitleCaseMapping:0x2CD4 - }, - { code:0x2CD6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CD6 - ,simpleLowerCaseMapping:0x2CD7 - ,simpleTitleCaseMapping:0x2CD6 - }, - { code:0x2CD7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CD6 - ,simpleLowerCaseMapping:0x2CD7 - ,simpleTitleCaseMapping:0x2CD6 - }, - { code:0x2CD8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CD8 - ,simpleLowerCaseMapping:0x2CD9 - ,simpleTitleCaseMapping:0x2CD8 - }, - { code:0x2CD9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CD8 - ,simpleLowerCaseMapping:0x2CD9 - ,simpleTitleCaseMapping:0x2CD8 - }, - { code:0x2CDA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CDA - ,simpleLowerCaseMapping:0x2CDB - ,simpleTitleCaseMapping:0x2CDA - }, - { code:0x2CDB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CDA - ,simpleLowerCaseMapping:0x2CDB - ,simpleTitleCaseMapping:0x2CDA - }, - { code:0x2CDC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CDC - ,simpleLowerCaseMapping:0x2CDD - ,simpleTitleCaseMapping:0x2CDC - }, - { code:0x2CDD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CDC - ,simpleLowerCaseMapping:0x2CDD - ,simpleTitleCaseMapping:0x2CDC - }, - { code:0x2CDE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CDE - ,simpleLowerCaseMapping:0x2CDF - ,simpleTitleCaseMapping:0x2CDE - }, - { code:0x2CDF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CDE - ,simpleLowerCaseMapping:0x2CDF - ,simpleTitleCaseMapping:0x2CDE - }, - { code:0x2CE0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CE0 - ,simpleLowerCaseMapping:0x2CE1 - ,simpleTitleCaseMapping:0x2CE0 - }, - { code:0x2CE1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CE0 - ,simpleLowerCaseMapping:0x2CE1 - ,simpleTitleCaseMapping:0x2CE0 - }, - { code:0x2CE2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x2CE2 - ,simpleLowerCaseMapping:0x2CE3 - ,simpleTitleCaseMapping:0x2CE2 - }, - { code:0x2CE3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CE2 - ,simpleLowerCaseMapping:0x2CE3 - ,simpleTitleCaseMapping:0x2CE2 - }, - { code:0x2CE4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x2CE4 - ,simpleLowerCaseMapping:0x2CE4 - ,simpleTitleCaseMapping:0x2CE4 - }, - { code:0x2CE5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CE5 - ,simpleLowerCaseMapping:0x2CE5 - ,simpleTitleCaseMapping:0x2CE5 - }, - { code:0x2CE6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CE6 - ,simpleLowerCaseMapping:0x2CE6 - ,simpleTitleCaseMapping:0x2CE6 - }, - { code:0x2CE7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CE7 - ,simpleLowerCaseMapping:0x2CE7 - ,simpleTitleCaseMapping:0x2CE7 - }, - { code:0x2CE8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CE8 - ,simpleLowerCaseMapping:0x2CE8 - ,simpleTitleCaseMapping:0x2CE8 - }, - { code:0x2CE9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CE9 - ,simpleLowerCaseMapping:0x2CE9 - ,simpleTitleCaseMapping:0x2CE9 - }, - { code:0x2CEA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2CEA - ,simpleLowerCaseMapping:0x2CEA - ,simpleTitleCaseMapping:0x2CEA - }, - { code:0x2CF9 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CF9 - ,simpleLowerCaseMapping:0x2CF9 - ,simpleTitleCaseMapping:0x2CF9 - }, - { code:0x2CFA - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CFA - ,simpleLowerCaseMapping:0x2CFA - ,simpleTitleCaseMapping:0x2CFA - }, - { code:0x2CFB - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CFB - ,simpleLowerCaseMapping:0x2CFB - ,simpleTitleCaseMapping:0x2CFB - }, - { code:0x2CFC - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CFC - ,simpleLowerCaseMapping:0x2CFC - ,simpleTitleCaseMapping:0x2CFC - }, - { code:0x2CFD - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x2CFD - ,simpleLowerCaseMapping:0x2CFD - ,simpleTitleCaseMapping:0x2CFD - }, - { code:0x2CFE - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CFE - ,simpleLowerCaseMapping:0x2CFE - ,simpleTitleCaseMapping:0x2CFE - }, - { code:0x2CFF - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2CFF - ,simpleLowerCaseMapping:0x2CFF - ,simpleTitleCaseMapping:0x2CFF - }, - { code:0x2D00 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A0 - ,simpleLowerCaseMapping:0x2D00 - ,simpleTitleCaseMapping:0x10A0 - }, - { code:0x2D01 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A1 - ,simpleLowerCaseMapping:0x2D01 - ,simpleTitleCaseMapping:0x10A1 - }, - { code:0x2D02 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A2 - ,simpleLowerCaseMapping:0x2D02 - ,simpleTitleCaseMapping:0x10A2 - }, - { code:0x2D03 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A3 - ,simpleLowerCaseMapping:0x2D03 - ,simpleTitleCaseMapping:0x10A3 - }, - { code:0x2D04 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A4 - ,simpleLowerCaseMapping:0x2D04 - ,simpleTitleCaseMapping:0x10A4 - }, - { code:0x2D05 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A5 - ,simpleLowerCaseMapping:0x2D05 - ,simpleTitleCaseMapping:0x10A5 - }, - { code:0x2D06 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A6 - ,simpleLowerCaseMapping:0x2D06 - ,simpleTitleCaseMapping:0x10A6 - }, - { code:0x2D07 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A7 - ,simpleLowerCaseMapping:0x2D07 - ,simpleTitleCaseMapping:0x10A7 - }, - { code:0x2D08 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A8 - ,simpleLowerCaseMapping:0x2D08 - ,simpleTitleCaseMapping:0x10A8 - }, - { code:0x2D09 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10A9 - ,simpleLowerCaseMapping:0x2D09 - ,simpleTitleCaseMapping:0x10A9 - }, - { code:0x2D0A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AA - ,simpleLowerCaseMapping:0x2D0A - ,simpleTitleCaseMapping:0x10AA - }, - { code:0x2D0B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AB - ,simpleLowerCaseMapping:0x2D0B - ,simpleTitleCaseMapping:0x10AB - }, - { code:0x2D0C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AC - ,simpleLowerCaseMapping:0x2D0C - ,simpleTitleCaseMapping:0x10AC - }, - { code:0x2D0D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AD - ,simpleLowerCaseMapping:0x2D0D - ,simpleTitleCaseMapping:0x10AD - }, - { code:0x2D0E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AE - ,simpleLowerCaseMapping:0x2D0E - ,simpleTitleCaseMapping:0x10AE - }, - { code:0x2D0F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10AF - ,simpleLowerCaseMapping:0x2D0F - ,simpleTitleCaseMapping:0x10AF - }, - { code:0x2D10 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B0 - ,simpleLowerCaseMapping:0x2D10 - ,simpleTitleCaseMapping:0x10B0 - }, - { code:0x2D11 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B1 - ,simpleLowerCaseMapping:0x2D11 - ,simpleTitleCaseMapping:0x10B1 - }, - { code:0x2D12 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B2 - ,simpleLowerCaseMapping:0x2D12 - ,simpleTitleCaseMapping:0x10B2 - }, - { code:0x2D13 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B3 - ,simpleLowerCaseMapping:0x2D13 - ,simpleTitleCaseMapping:0x10B3 - }, - { code:0x2D14 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B4 - ,simpleLowerCaseMapping:0x2D14 - ,simpleTitleCaseMapping:0x10B4 - }, - { code:0x2D15 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B5 - ,simpleLowerCaseMapping:0x2D15 - ,simpleTitleCaseMapping:0x10B5 - }, - { code:0x2D16 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B6 - ,simpleLowerCaseMapping:0x2D16 - ,simpleTitleCaseMapping:0x10B6 - }, - { code:0x2D17 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B7 - ,simpleLowerCaseMapping:0x2D17 - ,simpleTitleCaseMapping:0x10B7 - }, - { code:0x2D18 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B8 - ,simpleLowerCaseMapping:0x2D18 - ,simpleTitleCaseMapping:0x10B8 - }, - { code:0x2D19 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10B9 - ,simpleLowerCaseMapping:0x2D19 - ,simpleTitleCaseMapping:0x10B9 - }, - { code:0x2D1A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BA - ,simpleLowerCaseMapping:0x2D1A - ,simpleTitleCaseMapping:0x10BA - }, - { code:0x2D1B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BB - ,simpleLowerCaseMapping:0x2D1B - ,simpleTitleCaseMapping:0x10BB - }, - { code:0x2D1C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BC - ,simpleLowerCaseMapping:0x2D1C - ,simpleTitleCaseMapping:0x10BC - }, - { code:0x2D1D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BD - ,simpleLowerCaseMapping:0x2D1D - ,simpleTitleCaseMapping:0x10BD - }, - { code:0x2D1E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BE - ,simpleLowerCaseMapping:0x2D1E - ,simpleTitleCaseMapping:0x10BE - }, - { code:0x2D1F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10BF - ,simpleLowerCaseMapping:0x2D1F - ,simpleTitleCaseMapping:0x10BF - }, - { code:0x2D20 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C0 - ,simpleLowerCaseMapping:0x2D20 - ,simpleTitleCaseMapping:0x10C0 - }, - { code:0x2D21 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C1 - ,simpleLowerCaseMapping:0x2D21 - ,simpleTitleCaseMapping:0x10C1 - }, - { code:0x2D22 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C2 - ,simpleLowerCaseMapping:0x2D22 - ,simpleTitleCaseMapping:0x10C2 - }, - { code:0x2D23 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C3 - ,simpleLowerCaseMapping:0x2D23 - ,simpleTitleCaseMapping:0x10C3 - }, - { code:0x2D24 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C4 - ,simpleLowerCaseMapping:0x2D24 - ,simpleTitleCaseMapping:0x10C4 - }, - { code:0x2D25 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10C5 - ,simpleLowerCaseMapping:0x2D25 - ,simpleTitleCaseMapping:0x10C5 - }, - { code:0x2D30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D30 - ,simpleLowerCaseMapping:0x2D30 - ,simpleTitleCaseMapping:0x2D30 - }, - { code:0x2D31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D31 - ,simpleLowerCaseMapping:0x2D31 - ,simpleTitleCaseMapping:0x2D31 - }, - { code:0x2D32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D32 - ,simpleLowerCaseMapping:0x2D32 - ,simpleTitleCaseMapping:0x2D32 - }, - { code:0x2D33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D33 - ,simpleLowerCaseMapping:0x2D33 - ,simpleTitleCaseMapping:0x2D33 - }, - { code:0x2D34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D34 - ,simpleLowerCaseMapping:0x2D34 - ,simpleTitleCaseMapping:0x2D34 - }, - { code:0x2D35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D35 - ,simpleLowerCaseMapping:0x2D35 - ,simpleTitleCaseMapping:0x2D35 - }, - { code:0x2D36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D36 - ,simpleLowerCaseMapping:0x2D36 - ,simpleTitleCaseMapping:0x2D36 - }, - { code:0x2D37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D37 - ,simpleLowerCaseMapping:0x2D37 - ,simpleTitleCaseMapping:0x2D37 - }, - { code:0x2D38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D38 - ,simpleLowerCaseMapping:0x2D38 - ,simpleTitleCaseMapping:0x2D38 - }, - { code:0x2D39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D39 - ,simpleLowerCaseMapping:0x2D39 - ,simpleTitleCaseMapping:0x2D39 - }, - { code:0x2D3A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3A - ,simpleLowerCaseMapping:0x2D3A - ,simpleTitleCaseMapping:0x2D3A - }, - { code:0x2D3B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3B - ,simpleLowerCaseMapping:0x2D3B - ,simpleTitleCaseMapping:0x2D3B - }, - { code:0x2D3C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3C - ,simpleLowerCaseMapping:0x2D3C - ,simpleTitleCaseMapping:0x2D3C - }, - { code:0x2D3D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3D - ,simpleLowerCaseMapping:0x2D3D - ,simpleTitleCaseMapping:0x2D3D - }, - { code:0x2D3E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3E - ,simpleLowerCaseMapping:0x2D3E - ,simpleTitleCaseMapping:0x2D3E - }, - { code:0x2D3F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D3F - ,simpleLowerCaseMapping:0x2D3F - ,simpleTitleCaseMapping:0x2D3F - }, - { code:0x2D40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D40 - ,simpleLowerCaseMapping:0x2D40 - ,simpleTitleCaseMapping:0x2D40 - }, - { code:0x2D41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D41 - ,simpleLowerCaseMapping:0x2D41 - ,simpleTitleCaseMapping:0x2D41 - }, - { code:0x2D42 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D42 - ,simpleLowerCaseMapping:0x2D42 - ,simpleTitleCaseMapping:0x2D42 - }, - { code:0x2D43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D43 - ,simpleLowerCaseMapping:0x2D43 - ,simpleTitleCaseMapping:0x2D43 - }, - { code:0x2D44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D44 - ,simpleLowerCaseMapping:0x2D44 - ,simpleTitleCaseMapping:0x2D44 - }, - { code:0x2D45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D45 - ,simpleLowerCaseMapping:0x2D45 - ,simpleTitleCaseMapping:0x2D45 - }, - { code:0x2D46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D46 - ,simpleLowerCaseMapping:0x2D46 - ,simpleTitleCaseMapping:0x2D46 - }, - { code:0x2D47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D47 - ,simpleLowerCaseMapping:0x2D47 - ,simpleTitleCaseMapping:0x2D47 - }, - { code:0x2D48 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D48 - ,simpleLowerCaseMapping:0x2D48 - ,simpleTitleCaseMapping:0x2D48 - }, - { code:0x2D49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D49 - ,simpleLowerCaseMapping:0x2D49 - ,simpleTitleCaseMapping:0x2D49 - }, - { code:0x2D4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4A - ,simpleLowerCaseMapping:0x2D4A - ,simpleTitleCaseMapping:0x2D4A - }, - { code:0x2D4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4B - ,simpleLowerCaseMapping:0x2D4B - ,simpleTitleCaseMapping:0x2D4B - }, - { code:0x2D4C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4C - ,simpleLowerCaseMapping:0x2D4C - ,simpleTitleCaseMapping:0x2D4C - }, - { code:0x2D4D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4D - ,simpleLowerCaseMapping:0x2D4D - ,simpleTitleCaseMapping:0x2D4D - }, - { code:0x2D4E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4E - ,simpleLowerCaseMapping:0x2D4E - ,simpleTitleCaseMapping:0x2D4E - }, - { code:0x2D4F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D4F - ,simpleLowerCaseMapping:0x2D4F - ,simpleTitleCaseMapping:0x2D4F - }, - { code:0x2D50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D50 - ,simpleLowerCaseMapping:0x2D50 - ,simpleTitleCaseMapping:0x2D50 - }, - { code:0x2D51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D51 - ,simpleLowerCaseMapping:0x2D51 - ,simpleTitleCaseMapping:0x2D51 - }, - { code:0x2D52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D52 - ,simpleLowerCaseMapping:0x2D52 - ,simpleTitleCaseMapping:0x2D52 - }, - { code:0x2D53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D53 - ,simpleLowerCaseMapping:0x2D53 - ,simpleTitleCaseMapping:0x2D53 - }, - { code:0x2D54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D54 - ,simpleLowerCaseMapping:0x2D54 - ,simpleTitleCaseMapping:0x2D54 - }, - { code:0x2D55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D55 - ,simpleLowerCaseMapping:0x2D55 - ,simpleTitleCaseMapping:0x2D55 - }, - { code:0x2D56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D56 - ,simpleLowerCaseMapping:0x2D56 - ,simpleTitleCaseMapping:0x2D56 - }, - { code:0x2D57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D57 - ,simpleLowerCaseMapping:0x2D57 - ,simpleTitleCaseMapping:0x2D57 - }, - { code:0x2D58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D58 - ,simpleLowerCaseMapping:0x2D58 - ,simpleTitleCaseMapping:0x2D58 - }, - { code:0x2D59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D59 - ,simpleLowerCaseMapping:0x2D59 - ,simpleTitleCaseMapping:0x2D59 - }, - { code:0x2D5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5A - ,simpleLowerCaseMapping:0x2D5A - ,simpleTitleCaseMapping:0x2D5A - }, - { code:0x2D5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5B - ,simpleLowerCaseMapping:0x2D5B - ,simpleTitleCaseMapping:0x2D5B - }, - { code:0x2D5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5C - ,simpleLowerCaseMapping:0x2D5C - ,simpleTitleCaseMapping:0x2D5C - }, - { code:0x2D5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5D - ,simpleLowerCaseMapping:0x2D5D - ,simpleTitleCaseMapping:0x2D5D - }, - { code:0x2D5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5E - ,simpleLowerCaseMapping:0x2D5E - ,simpleTitleCaseMapping:0x2D5E - }, - { code:0x2D5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D5F - ,simpleLowerCaseMapping:0x2D5F - ,simpleTitleCaseMapping:0x2D5F - }, - { code:0x2D60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D60 - ,simpleLowerCaseMapping:0x2D60 - ,simpleTitleCaseMapping:0x2D60 - }, - { code:0x2D61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D61 - ,simpleLowerCaseMapping:0x2D61 - ,simpleTitleCaseMapping:0x2D61 - }, - { code:0x2D62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D62 - ,simpleLowerCaseMapping:0x2D62 - ,simpleTitleCaseMapping:0x2D62 - }, - { code:0x2D63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D63 - ,simpleLowerCaseMapping:0x2D63 - ,simpleTitleCaseMapping:0x2D63 - }, - { code:0x2D64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D64 - ,simpleLowerCaseMapping:0x2D64 - ,simpleTitleCaseMapping:0x2D64 - }, - { code:0x2D65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D65 - ,simpleLowerCaseMapping:0x2D65 - ,simpleTitleCaseMapping:0x2D65 - }, - { code:0x2D6F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x2D6F - ,simpleLowerCaseMapping:0x2D6F - ,simpleTitleCaseMapping:0x2D6F - }, - { code:0x2D80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D80 - ,simpleLowerCaseMapping:0x2D80 - ,simpleTitleCaseMapping:0x2D80 - }, - { code:0x2D81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D81 - ,simpleLowerCaseMapping:0x2D81 - ,simpleTitleCaseMapping:0x2D81 - }, - { code:0x2D82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D82 - ,simpleLowerCaseMapping:0x2D82 - ,simpleTitleCaseMapping:0x2D82 - }, - { code:0x2D83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D83 - ,simpleLowerCaseMapping:0x2D83 - ,simpleTitleCaseMapping:0x2D83 - }, - { code:0x2D84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D84 - ,simpleLowerCaseMapping:0x2D84 - ,simpleTitleCaseMapping:0x2D84 - }, - { code:0x2D85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D85 - ,simpleLowerCaseMapping:0x2D85 - ,simpleTitleCaseMapping:0x2D85 - }, - { code:0x2D86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D86 - ,simpleLowerCaseMapping:0x2D86 - ,simpleTitleCaseMapping:0x2D86 - }, - { code:0x2D87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D87 - ,simpleLowerCaseMapping:0x2D87 - ,simpleTitleCaseMapping:0x2D87 - }, - { code:0x2D88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D88 - ,simpleLowerCaseMapping:0x2D88 - ,simpleTitleCaseMapping:0x2D88 - }, - { code:0x2D89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D89 - ,simpleLowerCaseMapping:0x2D89 - ,simpleTitleCaseMapping:0x2D89 - }, - { code:0x2D8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8A - ,simpleLowerCaseMapping:0x2D8A - ,simpleTitleCaseMapping:0x2D8A - }, - { code:0x2D8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8B - ,simpleLowerCaseMapping:0x2D8B - ,simpleTitleCaseMapping:0x2D8B - }, - { code:0x2D8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8C - ,simpleLowerCaseMapping:0x2D8C - ,simpleTitleCaseMapping:0x2D8C - }, - { code:0x2D8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8D - ,simpleLowerCaseMapping:0x2D8D - ,simpleTitleCaseMapping:0x2D8D - }, - { code:0x2D8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8E - ,simpleLowerCaseMapping:0x2D8E - ,simpleTitleCaseMapping:0x2D8E - }, - { code:0x2D8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D8F - ,simpleLowerCaseMapping:0x2D8F - ,simpleTitleCaseMapping:0x2D8F - }, - { code:0x2D90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D90 - ,simpleLowerCaseMapping:0x2D90 - ,simpleTitleCaseMapping:0x2D90 - }, - { code:0x2D91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D91 - ,simpleLowerCaseMapping:0x2D91 - ,simpleTitleCaseMapping:0x2D91 - }, - { code:0x2D92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D92 - ,simpleLowerCaseMapping:0x2D92 - ,simpleTitleCaseMapping:0x2D92 - }, - { code:0x2D93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D93 - ,simpleLowerCaseMapping:0x2D93 - ,simpleTitleCaseMapping:0x2D93 - }, - { code:0x2D94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D94 - ,simpleLowerCaseMapping:0x2D94 - ,simpleTitleCaseMapping:0x2D94 - }, - { code:0x2D95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D95 - ,simpleLowerCaseMapping:0x2D95 - ,simpleTitleCaseMapping:0x2D95 - }, - { code:0x2D96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2D96 - ,simpleLowerCaseMapping:0x2D96 - ,simpleTitleCaseMapping:0x2D96 - }, - { code:0x2DA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA0 - ,simpleLowerCaseMapping:0x2DA0 - ,simpleTitleCaseMapping:0x2DA0 - }, - { code:0x2DA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA1 - ,simpleLowerCaseMapping:0x2DA1 - ,simpleTitleCaseMapping:0x2DA1 - }, - { code:0x2DA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA2 - ,simpleLowerCaseMapping:0x2DA2 - ,simpleTitleCaseMapping:0x2DA2 - }, - { code:0x2DA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA3 - ,simpleLowerCaseMapping:0x2DA3 - ,simpleTitleCaseMapping:0x2DA3 - }, - { code:0x2DA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA4 - ,simpleLowerCaseMapping:0x2DA4 - ,simpleTitleCaseMapping:0x2DA4 - }, - { code:0x2DA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA5 - ,simpleLowerCaseMapping:0x2DA5 - ,simpleTitleCaseMapping:0x2DA5 - }, - { code:0x2DA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA6 - ,simpleLowerCaseMapping:0x2DA6 - ,simpleTitleCaseMapping:0x2DA6 - }, - { code:0x2DA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA8 - ,simpleLowerCaseMapping:0x2DA8 - ,simpleTitleCaseMapping:0x2DA8 - }, - { code:0x2DA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DA9 - ,simpleLowerCaseMapping:0x2DA9 - ,simpleTitleCaseMapping:0x2DA9 - }, - { code:0x2DAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DAA - ,simpleLowerCaseMapping:0x2DAA - ,simpleTitleCaseMapping:0x2DAA - }, - { code:0x2DAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DAB - ,simpleLowerCaseMapping:0x2DAB - ,simpleTitleCaseMapping:0x2DAB - }, - { code:0x2DAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DAC - ,simpleLowerCaseMapping:0x2DAC - ,simpleTitleCaseMapping:0x2DAC - }, - { code:0x2DAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DAD - ,simpleLowerCaseMapping:0x2DAD - ,simpleTitleCaseMapping:0x2DAD - }, - { code:0x2DAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DAE - ,simpleLowerCaseMapping:0x2DAE - ,simpleTitleCaseMapping:0x2DAE - }, - { code:0x2DB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB0 - ,simpleLowerCaseMapping:0x2DB0 - ,simpleTitleCaseMapping:0x2DB0 - }, - { code:0x2DB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB1 - ,simpleLowerCaseMapping:0x2DB1 - ,simpleTitleCaseMapping:0x2DB1 - }, - { code:0x2DB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB2 - ,simpleLowerCaseMapping:0x2DB2 - ,simpleTitleCaseMapping:0x2DB2 - }, - { code:0x2DB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB3 - ,simpleLowerCaseMapping:0x2DB3 - ,simpleTitleCaseMapping:0x2DB3 - }, - { code:0x2DB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB4 - ,simpleLowerCaseMapping:0x2DB4 - ,simpleTitleCaseMapping:0x2DB4 - }, - { code:0x2DB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB5 - ,simpleLowerCaseMapping:0x2DB5 - ,simpleTitleCaseMapping:0x2DB5 - }, - { code:0x2DB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB6 - ,simpleLowerCaseMapping:0x2DB6 - ,simpleTitleCaseMapping:0x2DB6 - }, - { code:0x2DB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB8 - ,simpleLowerCaseMapping:0x2DB8 - ,simpleTitleCaseMapping:0x2DB8 - }, - { code:0x2DB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DB9 - ,simpleLowerCaseMapping:0x2DB9 - ,simpleTitleCaseMapping:0x2DB9 - }, - { code:0x2DBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DBA - ,simpleLowerCaseMapping:0x2DBA - ,simpleTitleCaseMapping:0x2DBA - }, - { code:0x2DBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DBB - ,simpleLowerCaseMapping:0x2DBB - ,simpleTitleCaseMapping:0x2DBB - }, - { code:0x2DBC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DBC - ,simpleLowerCaseMapping:0x2DBC - ,simpleTitleCaseMapping:0x2DBC - }, - { code:0x2DBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DBD - ,simpleLowerCaseMapping:0x2DBD - ,simpleTitleCaseMapping:0x2DBD - }, - { code:0x2DBE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DBE - ,simpleLowerCaseMapping:0x2DBE - ,simpleTitleCaseMapping:0x2DBE - }, - { code:0x2DC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC0 - ,simpleLowerCaseMapping:0x2DC0 - ,simpleTitleCaseMapping:0x2DC0 - }, - { code:0x2DC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC1 - ,simpleLowerCaseMapping:0x2DC1 - ,simpleTitleCaseMapping:0x2DC1 - }, - { code:0x2DC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC2 - ,simpleLowerCaseMapping:0x2DC2 - ,simpleTitleCaseMapping:0x2DC2 - }, - { code:0x2DC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC3 - ,simpleLowerCaseMapping:0x2DC3 - ,simpleTitleCaseMapping:0x2DC3 - }, - { code:0x2DC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC4 - ,simpleLowerCaseMapping:0x2DC4 - ,simpleTitleCaseMapping:0x2DC4 - }, - { code:0x2DC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC5 - ,simpleLowerCaseMapping:0x2DC5 - ,simpleTitleCaseMapping:0x2DC5 - }, - { code:0x2DC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC6 - ,simpleLowerCaseMapping:0x2DC6 - ,simpleTitleCaseMapping:0x2DC6 - }, - { code:0x2DC8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC8 - ,simpleLowerCaseMapping:0x2DC8 - ,simpleTitleCaseMapping:0x2DC8 - }, - { code:0x2DC9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DC9 - ,simpleLowerCaseMapping:0x2DC9 - ,simpleTitleCaseMapping:0x2DC9 - }, - { code:0x2DCA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DCA - ,simpleLowerCaseMapping:0x2DCA - ,simpleTitleCaseMapping:0x2DCA - }, - { code:0x2DCB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DCB - ,simpleLowerCaseMapping:0x2DCB - ,simpleTitleCaseMapping:0x2DCB - }, - { code:0x2DCC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DCC - ,simpleLowerCaseMapping:0x2DCC - ,simpleTitleCaseMapping:0x2DCC - }, - { code:0x2DCD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DCD - ,simpleLowerCaseMapping:0x2DCD - ,simpleTitleCaseMapping:0x2DCD - }, - { code:0x2DCE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DCE - ,simpleLowerCaseMapping:0x2DCE - ,simpleTitleCaseMapping:0x2DCE - }, - { code:0x2DD0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD0 - ,simpleLowerCaseMapping:0x2DD0 - ,simpleTitleCaseMapping:0x2DD0 - }, - { code:0x2DD1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD1 - ,simpleLowerCaseMapping:0x2DD1 - ,simpleTitleCaseMapping:0x2DD1 - }, - { code:0x2DD2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD2 - ,simpleLowerCaseMapping:0x2DD2 - ,simpleTitleCaseMapping:0x2DD2 - }, - { code:0x2DD3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD3 - ,simpleLowerCaseMapping:0x2DD3 - ,simpleTitleCaseMapping:0x2DD3 - }, - { code:0x2DD4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD4 - ,simpleLowerCaseMapping:0x2DD4 - ,simpleTitleCaseMapping:0x2DD4 - }, - { code:0x2DD5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD5 - ,simpleLowerCaseMapping:0x2DD5 - ,simpleTitleCaseMapping:0x2DD5 - }, - { code:0x2DD6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD6 - ,simpleLowerCaseMapping:0x2DD6 - ,simpleTitleCaseMapping:0x2DD6 - }, - { code:0x2DD8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD8 - ,simpleLowerCaseMapping:0x2DD8 - ,simpleTitleCaseMapping:0x2DD8 - }, - { code:0x2DD9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DD9 - ,simpleLowerCaseMapping:0x2DD9 - ,simpleTitleCaseMapping:0x2DD9 - }, - { code:0x2DDA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DDA - ,simpleLowerCaseMapping:0x2DDA - ,simpleTitleCaseMapping:0x2DDA - }, - { code:0x2DDB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DDB - ,simpleLowerCaseMapping:0x2DDB - ,simpleTitleCaseMapping:0x2DDB - }, - { code:0x2DDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DDC - ,simpleLowerCaseMapping:0x2DDC - ,simpleTitleCaseMapping:0x2DDC - }, - { code:0x2DDD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DDD - ,simpleLowerCaseMapping:0x2DDD - ,simpleTitleCaseMapping:0x2DDD - }, - { code:0x2DDE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2DDE - ,simpleLowerCaseMapping:0x2DDE - ,simpleTitleCaseMapping:0x2DDE - }, - { code:0x2E00 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E00 - ,simpleLowerCaseMapping:0x2E00 - ,simpleTitleCaseMapping:0x2E00 - }, - { code:0x2E01 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E01 - ,simpleLowerCaseMapping:0x2E01 - ,simpleTitleCaseMapping:0x2E01 - }, - { code:0x2E02 - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2E02 - ,simpleLowerCaseMapping:0x2E02 - ,simpleTitleCaseMapping:0x2E02 - }, - { code:0x2E03 - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2E03 - ,simpleLowerCaseMapping:0x2E03 - ,simpleTitleCaseMapping:0x2E03 - }, - { code:0x2E04 - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2E04 - ,simpleLowerCaseMapping:0x2E04 - ,simpleTitleCaseMapping:0x2E04 - }, - { code:0x2E05 - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2E05 - ,simpleLowerCaseMapping:0x2E05 - ,simpleTitleCaseMapping:0x2E05 - }, - { code:0x2E06 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E06 - ,simpleLowerCaseMapping:0x2E06 - ,simpleTitleCaseMapping:0x2E06 - }, - { code:0x2E07 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E07 - ,simpleLowerCaseMapping:0x2E07 - ,simpleTitleCaseMapping:0x2E07 - }, - { code:0x2E08 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E08 - ,simpleLowerCaseMapping:0x2E08 - ,simpleTitleCaseMapping:0x2E08 - }, - { code:0x2E09 - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2E09 - ,simpleLowerCaseMapping:0x2E09 - ,simpleTitleCaseMapping:0x2E09 - }, - { code:0x2E0A - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2E0A - ,simpleLowerCaseMapping:0x2E0A - ,simpleTitleCaseMapping:0x2E0A - }, - { code:0x2E0B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E0B - ,simpleLowerCaseMapping:0x2E0B - ,simpleTitleCaseMapping:0x2E0B - }, - { code:0x2E0C - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2E0C - ,simpleLowerCaseMapping:0x2E0C - ,simpleTitleCaseMapping:0x2E0C - }, - { code:0x2E0D - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2E0D - ,simpleLowerCaseMapping:0x2E0D - ,simpleTitleCaseMapping:0x2E0D - }, - { code:0x2E0E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E0E - ,simpleLowerCaseMapping:0x2E0E - ,simpleTitleCaseMapping:0x2E0E - }, - { code:0x2E0F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E0F - ,simpleLowerCaseMapping:0x2E0F - ,simpleTitleCaseMapping:0x2E0F - }, - { code:0x2E10 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E10 - ,simpleLowerCaseMapping:0x2E10 - ,simpleTitleCaseMapping:0x2E10 - }, - { code:0x2E11 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E11 - ,simpleLowerCaseMapping:0x2E11 - ,simpleTitleCaseMapping:0x2E11 - }, - { code:0x2E12 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E12 - ,simpleLowerCaseMapping:0x2E12 - ,simpleTitleCaseMapping:0x2E12 - }, - { code:0x2E13 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E13 - ,simpleLowerCaseMapping:0x2E13 - ,simpleTitleCaseMapping:0x2E13 - }, - { code:0x2E14 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E14 - ,simpleLowerCaseMapping:0x2E14 - ,simpleTitleCaseMapping:0x2E14 - }, - { code:0x2E15 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E15 - ,simpleLowerCaseMapping:0x2E15 - ,simpleTitleCaseMapping:0x2E15 - }, - { code:0x2E16 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x2E16 - ,simpleLowerCaseMapping:0x2E16 - ,simpleTitleCaseMapping:0x2E16 - }, - { code:0x2E17 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x2E17 - ,simpleLowerCaseMapping:0x2E17 - ,simpleTitleCaseMapping:0x2E17 - }, - { code:0x2E1C - ,generalCategory:UnicodeData.GeneralCategory.Pi - ,simpleUpperCaseMapping:0x2E1C - ,simpleLowerCaseMapping:0x2E1C - ,simpleTitleCaseMapping:0x2E1C - }, - { code:0x2E1D - ,generalCategory:UnicodeData.GeneralCategory.Pf - ,simpleUpperCaseMapping:0x2E1D - ,simpleLowerCaseMapping:0x2E1D - ,simpleTitleCaseMapping:0x2E1D - }, - { code:0x2E80 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E80 - ,simpleLowerCaseMapping:0x2E80 - ,simpleTitleCaseMapping:0x2E80 - }, - { code:0x2E81 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E81 - ,simpleLowerCaseMapping:0x2E81 - ,simpleTitleCaseMapping:0x2E81 - }, - { code:0x2E82 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E82 - ,simpleLowerCaseMapping:0x2E82 - ,simpleTitleCaseMapping:0x2E82 - }, - { code:0x2E83 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E83 - ,simpleLowerCaseMapping:0x2E83 - ,simpleTitleCaseMapping:0x2E83 - }, - { code:0x2E84 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E84 - ,simpleLowerCaseMapping:0x2E84 - ,simpleTitleCaseMapping:0x2E84 - }, - { code:0x2E85 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E85 - ,simpleLowerCaseMapping:0x2E85 - ,simpleTitleCaseMapping:0x2E85 - }, - { code:0x2E86 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E86 - ,simpleLowerCaseMapping:0x2E86 - ,simpleTitleCaseMapping:0x2E86 - }, - { code:0x2E87 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E87 - ,simpleLowerCaseMapping:0x2E87 - ,simpleTitleCaseMapping:0x2E87 - }, - { code:0x2E88 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E88 - ,simpleLowerCaseMapping:0x2E88 - ,simpleTitleCaseMapping:0x2E88 - }, - { code:0x2E89 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E89 - ,simpleLowerCaseMapping:0x2E89 - ,simpleTitleCaseMapping:0x2E89 - }, - { code:0x2E8A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8A - ,simpleLowerCaseMapping:0x2E8A - ,simpleTitleCaseMapping:0x2E8A - }, - { code:0x2E8B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8B - ,simpleLowerCaseMapping:0x2E8B - ,simpleTitleCaseMapping:0x2E8B - }, - { code:0x2E8C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8C - ,simpleLowerCaseMapping:0x2E8C - ,simpleTitleCaseMapping:0x2E8C - }, - { code:0x2E8D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8D - ,simpleLowerCaseMapping:0x2E8D - ,simpleTitleCaseMapping:0x2E8D - }, - { code:0x2E8E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8E - ,simpleLowerCaseMapping:0x2E8E - ,simpleTitleCaseMapping:0x2E8E - }, - { code:0x2E8F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E8F - ,simpleLowerCaseMapping:0x2E8F - ,simpleTitleCaseMapping:0x2E8F - }, - { code:0x2E90 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E90 - ,simpleLowerCaseMapping:0x2E90 - ,simpleTitleCaseMapping:0x2E90 - }, - { code:0x2E91 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E91 - ,simpleLowerCaseMapping:0x2E91 - ,simpleTitleCaseMapping:0x2E91 - }, - { code:0x2E92 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E92 - ,simpleLowerCaseMapping:0x2E92 - ,simpleTitleCaseMapping:0x2E92 - }, - { code:0x2E93 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E93 - ,simpleLowerCaseMapping:0x2E93 - ,simpleTitleCaseMapping:0x2E93 - }, - { code:0x2E94 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E94 - ,simpleLowerCaseMapping:0x2E94 - ,simpleTitleCaseMapping:0x2E94 - }, - { code:0x2E95 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E95 - ,simpleLowerCaseMapping:0x2E95 - ,simpleTitleCaseMapping:0x2E95 - }, - { code:0x2E96 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E96 - ,simpleLowerCaseMapping:0x2E96 - ,simpleTitleCaseMapping:0x2E96 - }, - { code:0x2E97 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E97 - ,simpleLowerCaseMapping:0x2E97 - ,simpleTitleCaseMapping:0x2E97 - }, - { code:0x2E98 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E98 - ,simpleLowerCaseMapping:0x2E98 - ,simpleTitleCaseMapping:0x2E98 - }, - { code:0x2E99 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E99 - ,simpleLowerCaseMapping:0x2E99 - ,simpleTitleCaseMapping:0x2E99 - }, - { code:0x2E9B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E9B - ,simpleLowerCaseMapping:0x2E9B - ,simpleTitleCaseMapping:0x2E9B - }, - { code:0x2E9C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E9C - ,simpleLowerCaseMapping:0x2E9C - ,simpleTitleCaseMapping:0x2E9C - }, - { code:0x2E9D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E9D - ,simpleLowerCaseMapping:0x2E9D - ,simpleTitleCaseMapping:0x2E9D - }, - { code:0x2E9E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E9E - ,simpleLowerCaseMapping:0x2E9E - ,simpleTitleCaseMapping:0x2E9E - }, - { code:0x2E9F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2E9F - ,simpleLowerCaseMapping:0x2E9F - ,simpleTitleCaseMapping:0x2E9F - }, - { code:0x2EA0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA0 - ,simpleLowerCaseMapping:0x2EA0 - ,simpleTitleCaseMapping:0x2EA0 - }, - { code:0x2EA1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA1 - ,simpleLowerCaseMapping:0x2EA1 - ,simpleTitleCaseMapping:0x2EA1 - }, - { code:0x2EA2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA2 - ,simpleLowerCaseMapping:0x2EA2 - ,simpleTitleCaseMapping:0x2EA2 - }, - { code:0x2EA3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA3 - ,simpleLowerCaseMapping:0x2EA3 - ,simpleTitleCaseMapping:0x2EA3 - }, - { code:0x2EA4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA4 - ,simpleLowerCaseMapping:0x2EA4 - ,simpleTitleCaseMapping:0x2EA4 - }, - { code:0x2EA5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA5 - ,simpleLowerCaseMapping:0x2EA5 - ,simpleTitleCaseMapping:0x2EA5 - }, - { code:0x2EA6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA6 - ,simpleLowerCaseMapping:0x2EA6 - ,simpleTitleCaseMapping:0x2EA6 - }, - { code:0x2EA7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA7 - ,simpleLowerCaseMapping:0x2EA7 - ,simpleTitleCaseMapping:0x2EA7 - }, - { code:0x2EA8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA8 - ,simpleLowerCaseMapping:0x2EA8 - ,simpleTitleCaseMapping:0x2EA8 - }, - { code:0x2EA9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EA9 - ,simpleLowerCaseMapping:0x2EA9 - ,simpleTitleCaseMapping:0x2EA9 - }, - { code:0x2EAA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAA - ,simpleLowerCaseMapping:0x2EAA - ,simpleTitleCaseMapping:0x2EAA - }, - { code:0x2EAB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAB - ,simpleLowerCaseMapping:0x2EAB - ,simpleTitleCaseMapping:0x2EAB - }, - { code:0x2EAC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAC - ,simpleLowerCaseMapping:0x2EAC - ,simpleTitleCaseMapping:0x2EAC - }, - { code:0x2EAD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAD - ,simpleLowerCaseMapping:0x2EAD - ,simpleTitleCaseMapping:0x2EAD - }, - { code:0x2EAE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAE - ,simpleLowerCaseMapping:0x2EAE - ,simpleTitleCaseMapping:0x2EAE - }, - { code:0x2EAF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EAF - ,simpleLowerCaseMapping:0x2EAF - ,simpleTitleCaseMapping:0x2EAF - }, - { code:0x2EB0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB0 - ,simpleLowerCaseMapping:0x2EB0 - ,simpleTitleCaseMapping:0x2EB0 - }, - { code:0x2EB1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB1 - ,simpleLowerCaseMapping:0x2EB1 - ,simpleTitleCaseMapping:0x2EB1 - }, - { code:0x2EB2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB2 - ,simpleLowerCaseMapping:0x2EB2 - ,simpleTitleCaseMapping:0x2EB2 - }, - { code:0x2EB3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB3 - ,simpleLowerCaseMapping:0x2EB3 - ,simpleTitleCaseMapping:0x2EB3 - }, - { code:0x2EB4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB4 - ,simpleLowerCaseMapping:0x2EB4 - ,simpleTitleCaseMapping:0x2EB4 - }, - { code:0x2EB5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB5 - ,simpleLowerCaseMapping:0x2EB5 - ,simpleTitleCaseMapping:0x2EB5 - }, - { code:0x2EB6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB6 - ,simpleLowerCaseMapping:0x2EB6 - ,simpleTitleCaseMapping:0x2EB6 - }, - { code:0x2EB7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB7 - ,simpleLowerCaseMapping:0x2EB7 - ,simpleTitleCaseMapping:0x2EB7 - }, - { code:0x2EB8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB8 - ,simpleLowerCaseMapping:0x2EB8 - ,simpleTitleCaseMapping:0x2EB8 - }, - { code:0x2EB9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EB9 - ,simpleLowerCaseMapping:0x2EB9 - ,simpleTitleCaseMapping:0x2EB9 - }, - { code:0x2EBA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBA - ,simpleLowerCaseMapping:0x2EBA - ,simpleTitleCaseMapping:0x2EBA - }, - { code:0x2EBB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBB - ,simpleLowerCaseMapping:0x2EBB - ,simpleTitleCaseMapping:0x2EBB - }, - { code:0x2EBC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBC - ,simpleLowerCaseMapping:0x2EBC - ,simpleTitleCaseMapping:0x2EBC - }, - { code:0x2EBD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBD - ,simpleLowerCaseMapping:0x2EBD - ,simpleTitleCaseMapping:0x2EBD - }, - { code:0x2EBE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBE - ,simpleLowerCaseMapping:0x2EBE - ,simpleTitleCaseMapping:0x2EBE - }, - { code:0x2EBF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EBF - ,simpleLowerCaseMapping:0x2EBF - ,simpleTitleCaseMapping:0x2EBF - }, - { code:0x2EC0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC0 - ,simpleLowerCaseMapping:0x2EC0 - ,simpleTitleCaseMapping:0x2EC0 - }, - { code:0x2EC1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC1 - ,simpleLowerCaseMapping:0x2EC1 - ,simpleTitleCaseMapping:0x2EC1 - }, - { code:0x2EC2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC2 - ,simpleLowerCaseMapping:0x2EC2 - ,simpleTitleCaseMapping:0x2EC2 - }, - { code:0x2EC3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC3 - ,simpleLowerCaseMapping:0x2EC3 - ,simpleTitleCaseMapping:0x2EC3 - }, - { code:0x2EC4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC4 - ,simpleLowerCaseMapping:0x2EC4 - ,simpleTitleCaseMapping:0x2EC4 - }, - { code:0x2EC5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC5 - ,simpleLowerCaseMapping:0x2EC5 - ,simpleTitleCaseMapping:0x2EC5 - }, - { code:0x2EC6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC6 - ,simpleLowerCaseMapping:0x2EC6 - ,simpleTitleCaseMapping:0x2EC6 - }, - { code:0x2EC7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC7 - ,simpleLowerCaseMapping:0x2EC7 - ,simpleTitleCaseMapping:0x2EC7 - }, - { code:0x2EC8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC8 - ,simpleLowerCaseMapping:0x2EC8 - ,simpleTitleCaseMapping:0x2EC8 - }, - { code:0x2EC9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EC9 - ,simpleLowerCaseMapping:0x2EC9 - ,simpleTitleCaseMapping:0x2EC9 - }, - { code:0x2ECA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECA - ,simpleLowerCaseMapping:0x2ECA - ,simpleTitleCaseMapping:0x2ECA - }, - { code:0x2ECB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECB - ,simpleLowerCaseMapping:0x2ECB - ,simpleTitleCaseMapping:0x2ECB - }, - { code:0x2ECC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECC - ,simpleLowerCaseMapping:0x2ECC - ,simpleTitleCaseMapping:0x2ECC - }, - { code:0x2ECD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECD - ,simpleLowerCaseMapping:0x2ECD - ,simpleTitleCaseMapping:0x2ECD - }, - { code:0x2ECE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECE - ,simpleLowerCaseMapping:0x2ECE - ,simpleTitleCaseMapping:0x2ECE - }, - { code:0x2ECF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ECF - ,simpleLowerCaseMapping:0x2ECF - ,simpleTitleCaseMapping:0x2ECF - }, - { code:0x2ED0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED0 - ,simpleLowerCaseMapping:0x2ED0 - ,simpleTitleCaseMapping:0x2ED0 - }, - { code:0x2ED1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED1 - ,simpleLowerCaseMapping:0x2ED1 - ,simpleTitleCaseMapping:0x2ED1 - }, - { code:0x2ED2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED2 - ,simpleLowerCaseMapping:0x2ED2 - ,simpleTitleCaseMapping:0x2ED2 - }, - { code:0x2ED3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED3 - ,simpleLowerCaseMapping:0x2ED3 - ,simpleTitleCaseMapping:0x2ED3 - }, - { code:0x2ED4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED4 - ,simpleLowerCaseMapping:0x2ED4 - ,simpleTitleCaseMapping:0x2ED4 - }, - { code:0x2ED5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED5 - ,simpleLowerCaseMapping:0x2ED5 - ,simpleTitleCaseMapping:0x2ED5 - }, - { code:0x2ED6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED6 - ,simpleLowerCaseMapping:0x2ED6 - ,simpleTitleCaseMapping:0x2ED6 - }, - { code:0x2ED7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED7 - ,simpleLowerCaseMapping:0x2ED7 - ,simpleTitleCaseMapping:0x2ED7 - }, - { code:0x2ED8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED8 - ,simpleLowerCaseMapping:0x2ED8 - ,simpleTitleCaseMapping:0x2ED8 - }, - { code:0x2ED9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2ED9 - ,simpleLowerCaseMapping:0x2ED9 - ,simpleTitleCaseMapping:0x2ED9 - }, - { code:0x2EDA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDA - ,simpleLowerCaseMapping:0x2EDA - ,simpleTitleCaseMapping:0x2EDA - }, - { code:0x2EDB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDB - ,simpleLowerCaseMapping:0x2EDB - ,simpleTitleCaseMapping:0x2EDB - }, - { code:0x2EDC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDC - ,simpleLowerCaseMapping:0x2EDC - ,simpleTitleCaseMapping:0x2EDC - }, - { code:0x2EDD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDD - ,simpleLowerCaseMapping:0x2EDD - ,simpleTitleCaseMapping:0x2EDD - }, - { code:0x2EDE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDE - ,simpleLowerCaseMapping:0x2EDE - ,simpleTitleCaseMapping:0x2EDE - }, - { code:0x2EDF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EDF - ,simpleLowerCaseMapping:0x2EDF - ,simpleTitleCaseMapping:0x2EDF - }, - { code:0x2EE0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE0 - ,simpleLowerCaseMapping:0x2EE0 - ,simpleTitleCaseMapping:0x2EE0 - }, - { code:0x2EE1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE1 - ,simpleLowerCaseMapping:0x2EE1 - ,simpleTitleCaseMapping:0x2EE1 - }, - { code:0x2EE2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE2 - ,simpleLowerCaseMapping:0x2EE2 - ,simpleTitleCaseMapping:0x2EE2 - }, - { code:0x2EE3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE3 - ,simpleLowerCaseMapping:0x2EE3 - ,simpleTitleCaseMapping:0x2EE3 - }, - { code:0x2EE4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE4 - ,simpleLowerCaseMapping:0x2EE4 - ,simpleTitleCaseMapping:0x2EE4 - }, - { code:0x2EE5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE5 - ,simpleLowerCaseMapping:0x2EE5 - ,simpleTitleCaseMapping:0x2EE5 - }, - { code:0x2EE6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE6 - ,simpleLowerCaseMapping:0x2EE6 - ,simpleTitleCaseMapping:0x2EE6 - }, - { code:0x2EE7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE7 - ,simpleLowerCaseMapping:0x2EE7 - ,simpleTitleCaseMapping:0x2EE7 - }, - { code:0x2EE8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE8 - ,simpleLowerCaseMapping:0x2EE8 - ,simpleTitleCaseMapping:0x2EE8 - }, - { code:0x2EE9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EE9 - ,simpleLowerCaseMapping:0x2EE9 - ,simpleTitleCaseMapping:0x2EE9 - }, - { code:0x2EEA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EEA - ,simpleLowerCaseMapping:0x2EEA - ,simpleTitleCaseMapping:0x2EEA - }, - { code:0x2EEB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EEB - ,simpleLowerCaseMapping:0x2EEB - ,simpleTitleCaseMapping:0x2EEB - }, - { code:0x2EEC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EEC - ,simpleLowerCaseMapping:0x2EEC - ,simpleTitleCaseMapping:0x2EEC - }, - { code:0x2EED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EED - ,simpleLowerCaseMapping:0x2EED - ,simpleTitleCaseMapping:0x2EED - }, - { code:0x2EEE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EEE - ,simpleLowerCaseMapping:0x2EEE - ,simpleTitleCaseMapping:0x2EEE - }, - { code:0x2EEF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EEF - ,simpleLowerCaseMapping:0x2EEF - ,simpleTitleCaseMapping:0x2EEF - }, - { code:0x2EF0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EF0 - ,simpleLowerCaseMapping:0x2EF0 - ,simpleTitleCaseMapping:0x2EF0 - }, - { code:0x2EF1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EF1 - ,simpleLowerCaseMapping:0x2EF1 - ,simpleTitleCaseMapping:0x2EF1 - }, - { code:0x2EF2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EF2 - ,simpleLowerCaseMapping:0x2EF2 - ,simpleTitleCaseMapping:0x2EF2 - }, - { code:0x2EF3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2EF3 - ,simpleLowerCaseMapping:0x2EF3 - ,simpleTitleCaseMapping:0x2EF3 - }, - { code:0x2F00 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F00 - ,simpleLowerCaseMapping:0x2F00 - ,simpleTitleCaseMapping:0x2F00 - }, - { code:0x2F01 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F01 - ,simpleLowerCaseMapping:0x2F01 - ,simpleTitleCaseMapping:0x2F01 - }, - { code:0x2F02 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F02 - ,simpleLowerCaseMapping:0x2F02 - ,simpleTitleCaseMapping:0x2F02 - }, - { code:0x2F03 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F03 - ,simpleLowerCaseMapping:0x2F03 - ,simpleTitleCaseMapping:0x2F03 - }, - { code:0x2F04 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F04 - ,simpleLowerCaseMapping:0x2F04 - ,simpleTitleCaseMapping:0x2F04 - }, - { code:0x2F05 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F05 - ,simpleLowerCaseMapping:0x2F05 - ,simpleTitleCaseMapping:0x2F05 - }, - { code:0x2F06 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F06 - ,simpleLowerCaseMapping:0x2F06 - ,simpleTitleCaseMapping:0x2F06 - }, - { code:0x2F07 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F07 - ,simpleLowerCaseMapping:0x2F07 - ,simpleTitleCaseMapping:0x2F07 - }, - { code:0x2F08 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F08 - ,simpleLowerCaseMapping:0x2F08 - ,simpleTitleCaseMapping:0x2F08 - }, - { code:0x2F09 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F09 - ,simpleLowerCaseMapping:0x2F09 - ,simpleTitleCaseMapping:0x2F09 - }, - { code:0x2F0A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0A - ,simpleLowerCaseMapping:0x2F0A - ,simpleTitleCaseMapping:0x2F0A - }, - { code:0x2F0B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0B - ,simpleLowerCaseMapping:0x2F0B - ,simpleTitleCaseMapping:0x2F0B - }, - { code:0x2F0C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0C - ,simpleLowerCaseMapping:0x2F0C - ,simpleTitleCaseMapping:0x2F0C - }, - { code:0x2F0D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0D - ,simpleLowerCaseMapping:0x2F0D - ,simpleTitleCaseMapping:0x2F0D - }, - { code:0x2F0E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0E - ,simpleLowerCaseMapping:0x2F0E - ,simpleTitleCaseMapping:0x2F0E - }, - { code:0x2F0F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F0F - ,simpleLowerCaseMapping:0x2F0F - ,simpleTitleCaseMapping:0x2F0F - }, - { code:0x2F10 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F10 - ,simpleLowerCaseMapping:0x2F10 - ,simpleTitleCaseMapping:0x2F10 - }, - { code:0x2F11 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F11 - ,simpleLowerCaseMapping:0x2F11 - ,simpleTitleCaseMapping:0x2F11 - }, - { code:0x2F12 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F12 - ,simpleLowerCaseMapping:0x2F12 - ,simpleTitleCaseMapping:0x2F12 - }, - { code:0x2F13 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F13 - ,simpleLowerCaseMapping:0x2F13 - ,simpleTitleCaseMapping:0x2F13 - }, - { code:0x2F14 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F14 - ,simpleLowerCaseMapping:0x2F14 - ,simpleTitleCaseMapping:0x2F14 - }, - { code:0x2F15 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F15 - ,simpleLowerCaseMapping:0x2F15 - ,simpleTitleCaseMapping:0x2F15 - }, - { code:0x2F16 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F16 - ,simpleLowerCaseMapping:0x2F16 - ,simpleTitleCaseMapping:0x2F16 - }, - { code:0x2F17 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F17 - ,simpleLowerCaseMapping:0x2F17 - ,simpleTitleCaseMapping:0x2F17 - }, - { code:0x2F18 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F18 - ,simpleLowerCaseMapping:0x2F18 - ,simpleTitleCaseMapping:0x2F18 - }, - { code:0x2F19 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F19 - ,simpleLowerCaseMapping:0x2F19 - ,simpleTitleCaseMapping:0x2F19 - }, - { code:0x2F1A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1A - ,simpleLowerCaseMapping:0x2F1A - ,simpleTitleCaseMapping:0x2F1A - }, - { code:0x2F1B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1B - ,simpleLowerCaseMapping:0x2F1B - ,simpleTitleCaseMapping:0x2F1B - }, - { code:0x2F1C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1C - ,simpleLowerCaseMapping:0x2F1C - ,simpleTitleCaseMapping:0x2F1C - }, - { code:0x2F1D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1D - ,simpleLowerCaseMapping:0x2F1D - ,simpleTitleCaseMapping:0x2F1D - }, - { code:0x2F1E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1E - ,simpleLowerCaseMapping:0x2F1E - ,simpleTitleCaseMapping:0x2F1E - }, - { code:0x2F1F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F1F - ,simpleLowerCaseMapping:0x2F1F - ,simpleTitleCaseMapping:0x2F1F - }, - { code:0x2F20 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F20 - ,simpleLowerCaseMapping:0x2F20 - ,simpleTitleCaseMapping:0x2F20 - }, - { code:0x2F21 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F21 - ,simpleLowerCaseMapping:0x2F21 - ,simpleTitleCaseMapping:0x2F21 - }, - { code:0x2F22 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F22 - ,simpleLowerCaseMapping:0x2F22 - ,simpleTitleCaseMapping:0x2F22 - }, - { code:0x2F23 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F23 - ,simpleLowerCaseMapping:0x2F23 - ,simpleTitleCaseMapping:0x2F23 - }, - { code:0x2F24 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F24 - ,simpleLowerCaseMapping:0x2F24 - ,simpleTitleCaseMapping:0x2F24 - }, - { code:0x2F25 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F25 - ,simpleLowerCaseMapping:0x2F25 - ,simpleTitleCaseMapping:0x2F25 - }, - { code:0x2F26 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F26 - ,simpleLowerCaseMapping:0x2F26 - ,simpleTitleCaseMapping:0x2F26 - }, - { code:0x2F27 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F27 - ,simpleLowerCaseMapping:0x2F27 - ,simpleTitleCaseMapping:0x2F27 - }, - { code:0x2F28 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F28 - ,simpleLowerCaseMapping:0x2F28 - ,simpleTitleCaseMapping:0x2F28 - }, - { code:0x2F29 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F29 - ,simpleLowerCaseMapping:0x2F29 - ,simpleTitleCaseMapping:0x2F29 - }, - { code:0x2F2A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2A - ,simpleLowerCaseMapping:0x2F2A - ,simpleTitleCaseMapping:0x2F2A - }, - { code:0x2F2B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2B - ,simpleLowerCaseMapping:0x2F2B - ,simpleTitleCaseMapping:0x2F2B - }, - { code:0x2F2C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2C - ,simpleLowerCaseMapping:0x2F2C - ,simpleTitleCaseMapping:0x2F2C - }, - { code:0x2F2D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2D - ,simpleLowerCaseMapping:0x2F2D - ,simpleTitleCaseMapping:0x2F2D - }, - { code:0x2F2E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2E - ,simpleLowerCaseMapping:0x2F2E - ,simpleTitleCaseMapping:0x2F2E - }, - { code:0x2F2F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F2F - ,simpleLowerCaseMapping:0x2F2F - ,simpleTitleCaseMapping:0x2F2F - }, - { code:0x2F30 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F30 - ,simpleLowerCaseMapping:0x2F30 - ,simpleTitleCaseMapping:0x2F30 - }, - { code:0x2F31 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F31 - ,simpleLowerCaseMapping:0x2F31 - ,simpleTitleCaseMapping:0x2F31 - }, - { code:0x2F32 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F32 - ,simpleLowerCaseMapping:0x2F32 - ,simpleTitleCaseMapping:0x2F32 - }, - { code:0x2F33 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F33 - ,simpleLowerCaseMapping:0x2F33 - ,simpleTitleCaseMapping:0x2F33 - }, - { code:0x2F34 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F34 - ,simpleLowerCaseMapping:0x2F34 - ,simpleTitleCaseMapping:0x2F34 - }, - { code:0x2F35 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F35 - ,simpleLowerCaseMapping:0x2F35 - ,simpleTitleCaseMapping:0x2F35 - }, - { code:0x2F36 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F36 - ,simpleLowerCaseMapping:0x2F36 - ,simpleTitleCaseMapping:0x2F36 - }, - { code:0x2F37 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F37 - ,simpleLowerCaseMapping:0x2F37 - ,simpleTitleCaseMapping:0x2F37 - }, - { code:0x2F38 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F38 - ,simpleLowerCaseMapping:0x2F38 - ,simpleTitleCaseMapping:0x2F38 - }, - { code:0x2F39 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F39 - ,simpleLowerCaseMapping:0x2F39 - ,simpleTitleCaseMapping:0x2F39 - }, - { code:0x2F3A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3A - ,simpleLowerCaseMapping:0x2F3A - ,simpleTitleCaseMapping:0x2F3A - }, - { code:0x2F3B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3B - ,simpleLowerCaseMapping:0x2F3B - ,simpleTitleCaseMapping:0x2F3B - }, - { code:0x2F3C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3C - ,simpleLowerCaseMapping:0x2F3C - ,simpleTitleCaseMapping:0x2F3C - }, - { code:0x2F3D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3D - ,simpleLowerCaseMapping:0x2F3D - ,simpleTitleCaseMapping:0x2F3D - }, - { code:0x2F3E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3E - ,simpleLowerCaseMapping:0x2F3E - ,simpleTitleCaseMapping:0x2F3E - }, - { code:0x2F3F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F3F - ,simpleLowerCaseMapping:0x2F3F - ,simpleTitleCaseMapping:0x2F3F - }, - { code:0x2F40 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F40 - ,simpleLowerCaseMapping:0x2F40 - ,simpleTitleCaseMapping:0x2F40 - }, - { code:0x2F41 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F41 - ,simpleLowerCaseMapping:0x2F41 - ,simpleTitleCaseMapping:0x2F41 - }, - { code:0x2F42 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F42 - ,simpleLowerCaseMapping:0x2F42 - ,simpleTitleCaseMapping:0x2F42 - }, - { code:0x2F43 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F43 - ,simpleLowerCaseMapping:0x2F43 - ,simpleTitleCaseMapping:0x2F43 - }, - { code:0x2F44 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F44 - ,simpleLowerCaseMapping:0x2F44 - ,simpleTitleCaseMapping:0x2F44 - }, - { code:0x2F45 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F45 - ,simpleLowerCaseMapping:0x2F45 - ,simpleTitleCaseMapping:0x2F45 - }, - { code:0x2F46 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F46 - ,simpleLowerCaseMapping:0x2F46 - ,simpleTitleCaseMapping:0x2F46 - }, - { code:0x2F47 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F47 - ,simpleLowerCaseMapping:0x2F47 - ,simpleTitleCaseMapping:0x2F47 - }, - { code:0x2F48 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F48 - ,simpleLowerCaseMapping:0x2F48 - ,simpleTitleCaseMapping:0x2F48 - }, - { code:0x2F49 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F49 - ,simpleLowerCaseMapping:0x2F49 - ,simpleTitleCaseMapping:0x2F49 - }, - { code:0x2F4A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4A - ,simpleLowerCaseMapping:0x2F4A - ,simpleTitleCaseMapping:0x2F4A - }, - { code:0x2F4B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4B - ,simpleLowerCaseMapping:0x2F4B - ,simpleTitleCaseMapping:0x2F4B - }, - { code:0x2F4C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4C - ,simpleLowerCaseMapping:0x2F4C - ,simpleTitleCaseMapping:0x2F4C - }, - { code:0x2F4D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4D - ,simpleLowerCaseMapping:0x2F4D - ,simpleTitleCaseMapping:0x2F4D - }, - { code:0x2F4E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4E - ,simpleLowerCaseMapping:0x2F4E - ,simpleTitleCaseMapping:0x2F4E - }, - { code:0x2F4F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F4F - ,simpleLowerCaseMapping:0x2F4F - ,simpleTitleCaseMapping:0x2F4F - }, - { code:0x2F50 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F50 - ,simpleLowerCaseMapping:0x2F50 - ,simpleTitleCaseMapping:0x2F50 - }, - { code:0x2F51 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F51 - ,simpleLowerCaseMapping:0x2F51 - ,simpleTitleCaseMapping:0x2F51 - }, - { code:0x2F52 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F52 - ,simpleLowerCaseMapping:0x2F52 - ,simpleTitleCaseMapping:0x2F52 - }, - { code:0x2F53 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F53 - ,simpleLowerCaseMapping:0x2F53 - ,simpleTitleCaseMapping:0x2F53 - }, - { code:0x2F54 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F54 - ,simpleLowerCaseMapping:0x2F54 - ,simpleTitleCaseMapping:0x2F54 - }, - { code:0x2F55 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F55 - ,simpleLowerCaseMapping:0x2F55 - ,simpleTitleCaseMapping:0x2F55 - }, - { code:0x2F56 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F56 - ,simpleLowerCaseMapping:0x2F56 - ,simpleTitleCaseMapping:0x2F56 - }, - { code:0x2F57 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F57 - ,simpleLowerCaseMapping:0x2F57 - ,simpleTitleCaseMapping:0x2F57 - }, - { code:0x2F58 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F58 - ,simpleLowerCaseMapping:0x2F58 - ,simpleTitleCaseMapping:0x2F58 - }, - { code:0x2F59 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F59 - ,simpleLowerCaseMapping:0x2F59 - ,simpleTitleCaseMapping:0x2F59 - }, - { code:0x2F5A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5A - ,simpleLowerCaseMapping:0x2F5A - ,simpleTitleCaseMapping:0x2F5A - }, - { code:0x2F5B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5B - ,simpleLowerCaseMapping:0x2F5B - ,simpleTitleCaseMapping:0x2F5B - }, - { code:0x2F5C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5C - ,simpleLowerCaseMapping:0x2F5C - ,simpleTitleCaseMapping:0x2F5C - }, - { code:0x2F5D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5D - ,simpleLowerCaseMapping:0x2F5D - ,simpleTitleCaseMapping:0x2F5D - }, - { code:0x2F5E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5E - ,simpleLowerCaseMapping:0x2F5E - ,simpleTitleCaseMapping:0x2F5E - }, - { code:0x2F5F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F5F - ,simpleLowerCaseMapping:0x2F5F - ,simpleTitleCaseMapping:0x2F5F - }, - { code:0x2F60 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F60 - ,simpleLowerCaseMapping:0x2F60 - ,simpleTitleCaseMapping:0x2F60 - }, - { code:0x2F61 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F61 - ,simpleLowerCaseMapping:0x2F61 - ,simpleTitleCaseMapping:0x2F61 - }, - { code:0x2F62 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F62 - ,simpleLowerCaseMapping:0x2F62 - ,simpleTitleCaseMapping:0x2F62 - }, - { code:0x2F63 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F63 - ,simpleLowerCaseMapping:0x2F63 - ,simpleTitleCaseMapping:0x2F63 - }, - { code:0x2F64 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F64 - ,simpleLowerCaseMapping:0x2F64 - ,simpleTitleCaseMapping:0x2F64 - }, - { code:0x2F65 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F65 - ,simpleLowerCaseMapping:0x2F65 - ,simpleTitleCaseMapping:0x2F65 - }, - { code:0x2F66 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F66 - ,simpleLowerCaseMapping:0x2F66 - ,simpleTitleCaseMapping:0x2F66 - }, - { code:0x2F67 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F67 - ,simpleLowerCaseMapping:0x2F67 - ,simpleTitleCaseMapping:0x2F67 - }, - { code:0x2F68 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F68 - ,simpleLowerCaseMapping:0x2F68 - ,simpleTitleCaseMapping:0x2F68 - }, - { code:0x2F69 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F69 - ,simpleLowerCaseMapping:0x2F69 - ,simpleTitleCaseMapping:0x2F69 - }, - { code:0x2F6A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6A - ,simpleLowerCaseMapping:0x2F6A - ,simpleTitleCaseMapping:0x2F6A - }, - { code:0x2F6B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6B - ,simpleLowerCaseMapping:0x2F6B - ,simpleTitleCaseMapping:0x2F6B - }, - { code:0x2F6C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6C - ,simpleLowerCaseMapping:0x2F6C - ,simpleTitleCaseMapping:0x2F6C - }, - { code:0x2F6D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6D - ,simpleLowerCaseMapping:0x2F6D - ,simpleTitleCaseMapping:0x2F6D - }, - { code:0x2F6E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6E - ,simpleLowerCaseMapping:0x2F6E - ,simpleTitleCaseMapping:0x2F6E - }, - { code:0x2F6F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F6F - ,simpleLowerCaseMapping:0x2F6F - ,simpleTitleCaseMapping:0x2F6F - }, - { code:0x2F70 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F70 - ,simpleLowerCaseMapping:0x2F70 - ,simpleTitleCaseMapping:0x2F70 - }, - { code:0x2F71 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F71 - ,simpleLowerCaseMapping:0x2F71 - ,simpleTitleCaseMapping:0x2F71 - }, - { code:0x2F72 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F72 - ,simpleLowerCaseMapping:0x2F72 - ,simpleTitleCaseMapping:0x2F72 - }, - { code:0x2F73 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F73 - ,simpleLowerCaseMapping:0x2F73 - ,simpleTitleCaseMapping:0x2F73 - }, - { code:0x2F74 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F74 - ,simpleLowerCaseMapping:0x2F74 - ,simpleTitleCaseMapping:0x2F74 - }, - { code:0x2F75 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F75 - ,simpleLowerCaseMapping:0x2F75 - ,simpleTitleCaseMapping:0x2F75 - }, - { code:0x2F76 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F76 - ,simpleLowerCaseMapping:0x2F76 - ,simpleTitleCaseMapping:0x2F76 - }, - { code:0x2F77 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F77 - ,simpleLowerCaseMapping:0x2F77 - ,simpleTitleCaseMapping:0x2F77 - }, - { code:0x2F78 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F78 - ,simpleLowerCaseMapping:0x2F78 - ,simpleTitleCaseMapping:0x2F78 - }, - { code:0x2F79 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F79 - ,simpleLowerCaseMapping:0x2F79 - ,simpleTitleCaseMapping:0x2F79 - }, - { code:0x2F7A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7A - ,simpleLowerCaseMapping:0x2F7A - ,simpleTitleCaseMapping:0x2F7A - }, - { code:0x2F7B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7B - ,simpleLowerCaseMapping:0x2F7B - ,simpleTitleCaseMapping:0x2F7B - }, - { code:0x2F7C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7C - ,simpleLowerCaseMapping:0x2F7C - ,simpleTitleCaseMapping:0x2F7C - }, - { code:0x2F7D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7D - ,simpleLowerCaseMapping:0x2F7D - ,simpleTitleCaseMapping:0x2F7D - }, - { code:0x2F7E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7E - ,simpleLowerCaseMapping:0x2F7E - ,simpleTitleCaseMapping:0x2F7E - }, - { code:0x2F7F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F7F - ,simpleLowerCaseMapping:0x2F7F - ,simpleTitleCaseMapping:0x2F7F - }, - { code:0x2F80 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F80 - ,simpleLowerCaseMapping:0x2F80 - ,simpleTitleCaseMapping:0x2F80 - }, - { code:0x2F81 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F81 - ,simpleLowerCaseMapping:0x2F81 - ,simpleTitleCaseMapping:0x2F81 - }, - { code:0x2F82 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F82 - ,simpleLowerCaseMapping:0x2F82 - ,simpleTitleCaseMapping:0x2F82 - }, - { code:0x2F83 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F83 - ,simpleLowerCaseMapping:0x2F83 - ,simpleTitleCaseMapping:0x2F83 - }, - { code:0x2F84 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F84 - ,simpleLowerCaseMapping:0x2F84 - ,simpleTitleCaseMapping:0x2F84 - }, - { code:0x2F85 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F85 - ,simpleLowerCaseMapping:0x2F85 - ,simpleTitleCaseMapping:0x2F85 - }, - { code:0x2F86 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F86 - ,simpleLowerCaseMapping:0x2F86 - ,simpleTitleCaseMapping:0x2F86 - }, - { code:0x2F87 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F87 - ,simpleLowerCaseMapping:0x2F87 - ,simpleTitleCaseMapping:0x2F87 - }, - { code:0x2F88 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F88 - ,simpleLowerCaseMapping:0x2F88 - ,simpleTitleCaseMapping:0x2F88 - }, - { code:0x2F89 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F89 - ,simpleLowerCaseMapping:0x2F89 - ,simpleTitleCaseMapping:0x2F89 - }, - { code:0x2F8A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8A - ,simpleLowerCaseMapping:0x2F8A - ,simpleTitleCaseMapping:0x2F8A - }, - { code:0x2F8B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8B - ,simpleLowerCaseMapping:0x2F8B - ,simpleTitleCaseMapping:0x2F8B - }, - { code:0x2F8C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8C - ,simpleLowerCaseMapping:0x2F8C - ,simpleTitleCaseMapping:0x2F8C - }, - { code:0x2F8D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8D - ,simpleLowerCaseMapping:0x2F8D - ,simpleTitleCaseMapping:0x2F8D - }, - { code:0x2F8E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8E - ,simpleLowerCaseMapping:0x2F8E - ,simpleTitleCaseMapping:0x2F8E - }, - { code:0x2F8F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F8F - ,simpleLowerCaseMapping:0x2F8F - ,simpleTitleCaseMapping:0x2F8F - }, - { code:0x2F90 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F90 - ,simpleLowerCaseMapping:0x2F90 - ,simpleTitleCaseMapping:0x2F90 - }, - { code:0x2F91 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F91 - ,simpleLowerCaseMapping:0x2F91 - ,simpleTitleCaseMapping:0x2F91 - }, - { code:0x2F92 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F92 - ,simpleLowerCaseMapping:0x2F92 - ,simpleTitleCaseMapping:0x2F92 - }, - { code:0x2F93 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F93 - ,simpleLowerCaseMapping:0x2F93 - ,simpleTitleCaseMapping:0x2F93 - }, - { code:0x2F94 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F94 - ,simpleLowerCaseMapping:0x2F94 - ,simpleTitleCaseMapping:0x2F94 - }, - { code:0x2F95 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F95 - ,simpleLowerCaseMapping:0x2F95 - ,simpleTitleCaseMapping:0x2F95 - }, - { code:0x2F96 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F96 - ,simpleLowerCaseMapping:0x2F96 - ,simpleTitleCaseMapping:0x2F96 - }, - { code:0x2F97 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F97 - ,simpleLowerCaseMapping:0x2F97 - ,simpleTitleCaseMapping:0x2F97 - }, - { code:0x2F98 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F98 - ,simpleLowerCaseMapping:0x2F98 - ,simpleTitleCaseMapping:0x2F98 - }, - { code:0x2F99 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F99 - ,simpleLowerCaseMapping:0x2F99 - ,simpleTitleCaseMapping:0x2F99 - }, - { code:0x2F9A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9A - ,simpleLowerCaseMapping:0x2F9A - ,simpleTitleCaseMapping:0x2F9A - }, - { code:0x2F9B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9B - ,simpleLowerCaseMapping:0x2F9B - ,simpleTitleCaseMapping:0x2F9B - }, - { code:0x2F9C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9C - ,simpleLowerCaseMapping:0x2F9C - ,simpleTitleCaseMapping:0x2F9C - }, - { code:0x2F9D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9D - ,simpleLowerCaseMapping:0x2F9D - ,simpleTitleCaseMapping:0x2F9D - }, - { code:0x2F9E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9E - ,simpleLowerCaseMapping:0x2F9E - ,simpleTitleCaseMapping:0x2F9E - }, - { code:0x2F9F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2F9F - ,simpleLowerCaseMapping:0x2F9F - ,simpleTitleCaseMapping:0x2F9F - }, - { code:0x2FA0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA0 - ,simpleLowerCaseMapping:0x2FA0 - ,simpleTitleCaseMapping:0x2FA0 - }, - { code:0x2FA1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA1 - ,simpleLowerCaseMapping:0x2FA1 - ,simpleTitleCaseMapping:0x2FA1 - }, - { code:0x2FA2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA2 - ,simpleLowerCaseMapping:0x2FA2 - ,simpleTitleCaseMapping:0x2FA2 - }, - { code:0x2FA3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA3 - ,simpleLowerCaseMapping:0x2FA3 - ,simpleTitleCaseMapping:0x2FA3 - }, - { code:0x2FA4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA4 - ,simpleLowerCaseMapping:0x2FA4 - ,simpleTitleCaseMapping:0x2FA4 - }, - { code:0x2FA5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA5 - ,simpleLowerCaseMapping:0x2FA5 - ,simpleTitleCaseMapping:0x2FA5 - }, - { code:0x2FA6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA6 - ,simpleLowerCaseMapping:0x2FA6 - ,simpleTitleCaseMapping:0x2FA6 - }, - { code:0x2FA7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA7 - ,simpleLowerCaseMapping:0x2FA7 - ,simpleTitleCaseMapping:0x2FA7 - }, - { code:0x2FA8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA8 - ,simpleLowerCaseMapping:0x2FA8 - ,simpleTitleCaseMapping:0x2FA8 - }, - { code:0x2FA9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FA9 - ,simpleLowerCaseMapping:0x2FA9 - ,simpleTitleCaseMapping:0x2FA9 - }, - { code:0x2FAA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAA - ,simpleLowerCaseMapping:0x2FAA - ,simpleTitleCaseMapping:0x2FAA - }, - { code:0x2FAB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAB - ,simpleLowerCaseMapping:0x2FAB - ,simpleTitleCaseMapping:0x2FAB - }, - { code:0x2FAC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAC - ,simpleLowerCaseMapping:0x2FAC - ,simpleTitleCaseMapping:0x2FAC - }, - { code:0x2FAD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAD - ,simpleLowerCaseMapping:0x2FAD - ,simpleTitleCaseMapping:0x2FAD - }, - { code:0x2FAE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAE - ,simpleLowerCaseMapping:0x2FAE - ,simpleTitleCaseMapping:0x2FAE - }, - { code:0x2FAF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FAF - ,simpleLowerCaseMapping:0x2FAF - ,simpleTitleCaseMapping:0x2FAF - }, - { code:0x2FB0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB0 - ,simpleLowerCaseMapping:0x2FB0 - ,simpleTitleCaseMapping:0x2FB0 - }, - { code:0x2FB1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB1 - ,simpleLowerCaseMapping:0x2FB1 - ,simpleTitleCaseMapping:0x2FB1 - }, - { code:0x2FB2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB2 - ,simpleLowerCaseMapping:0x2FB2 - ,simpleTitleCaseMapping:0x2FB2 - }, - { code:0x2FB3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB3 - ,simpleLowerCaseMapping:0x2FB3 - ,simpleTitleCaseMapping:0x2FB3 - }, - { code:0x2FB4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB4 - ,simpleLowerCaseMapping:0x2FB4 - ,simpleTitleCaseMapping:0x2FB4 - }, - { code:0x2FB5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB5 - ,simpleLowerCaseMapping:0x2FB5 - ,simpleTitleCaseMapping:0x2FB5 - }, - { code:0x2FB6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB6 - ,simpleLowerCaseMapping:0x2FB6 - ,simpleTitleCaseMapping:0x2FB6 - }, - { code:0x2FB7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB7 - ,simpleLowerCaseMapping:0x2FB7 - ,simpleTitleCaseMapping:0x2FB7 - }, - { code:0x2FB8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB8 - ,simpleLowerCaseMapping:0x2FB8 - ,simpleTitleCaseMapping:0x2FB8 - }, - { code:0x2FB9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FB9 - ,simpleLowerCaseMapping:0x2FB9 - ,simpleTitleCaseMapping:0x2FB9 - }, - { code:0x2FBA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBA - ,simpleLowerCaseMapping:0x2FBA - ,simpleTitleCaseMapping:0x2FBA - }, - { code:0x2FBB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBB - ,simpleLowerCaseMapping:0x2FBB - ,simpleTitleCaseMapping:0x2FBB - }, - { code:0x2FBC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBC - ,simpleLowerCaseMapping:0x2FBC - ,simpleTitleCaseMapping:0x2FBC - }, - { code:0x2FBD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBD - ,simpleLowerCaseMapping:0x2FBD - ,simpleTitleCaseMapping:0x2FBD - }, - { code:0x2FBE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBE - ,simpleLowerCaseMapping:0x2FBE - ,simpleTitleCaseMapping:0x2FBE - }, - { code:0x2FBF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FBF - ,simpleLowerCaseMapping:0x2FBF - ,simpleTitleCaseMapping:0x2FBF - }, - { code:0x2FC0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC0 - ,simpleLowerCaseMapping:0x2FC0 - ,simpleTitleCaseMapping:0x2FC0 - }, - { code:0x2FC1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC1 - ,simpleLowerCaseMapping:0x2FC1 - ,simpleTitleCaseMapping:0x2FC1 - }, - { code:0x2FC2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC2 - ,simpleLowerCaseMapping:0x2FC2 - ,simpleTitleCaseMapping:0x2FC2 - }, - { code:0x2FC3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC3 - ,simpleLowerCaseMapping:0x2FC3 - ,simpleTitleCaseMapping:0x2FC3 - }, - { code:0x2FC4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC4 - ,simpleLowerCaseMapping:0x2FC4 - ,simpleTitleCaseMapping:0x2FC4 - }, - { code:0x2FC5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC5 - ,simpleLowerCaseMapping:0x2FC5 - ,simpleTitleCaseMapping:0x2FC5 - }, - { code:0x2FC6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC6 - ,simpleLowerCaseMapping:0x2FC6 - ,simpleTitleCaseMapping:0x2FC6 - }, - { code:0x2FC7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC7 - ,simpleLowerCaseMapping:0x2FC7 - ,simpleTitleCaseMapping:0x2FC7 - }, - { code:0x2FC8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC8 - ,simpleLowerCaseMapping:0x2FC8 - ,simpleTitleCaseMapping:0x2FC8 - }, - { code:0x2FC9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FC9 - ,simpleLowerCaseMapping:0x2FC9 - ,simpleTitleCaseMapping:0x2FC9 - }, - { code:0x2FCA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCA - ,simpleLowerCaseMapping:0x2FCA - ,simpleTitleCaseMapping:0x2FCA - }, - { code:0x2FCB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCB - ,simpleLowerCaseMapping:0x2FCB - ,simpleTitleCaseMapping:0x2FCB - }, - { code:0x2FCC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCC - ,simpleLowerCaseMapping:0x2FCC - ,simpleTitleCaseMapping:0x2FCC - }, - { code:0x2FCD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCD - ,simpleLowerCaseMapping:0x2FCD - ,simpleTitleCaseMapping:0x2FCD - }, - { code:0x2FCE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCE - ,simpleLowerCaseMapping:0x2FCE - ,simpleTitleCaseMapping:0x2FCE - }, - { code:0x2FCF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FCF - ,simpleLowerCaseMapping:0x2FCF - ,simpleTitleCaseMapping:0x2FCF - }, - { code:0x2FD0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD0 - ,simpleLowerCaseMapping:0x2FD0 - ,simpleTitleCaseMapping:0x2FD0 - }, - { code:0x2FD1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD1 - ,simpleLowerCaseMapping:0x2FD1 - ,simpleTitleCaseMapping:0x2FD1 - }, - { code:0x2FD2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD2 - ,simpleLowerCaseMapping:0x2FD2 - ,simpleTitleCaseMapping:0x2FD2 - }, - { code:0x2FD3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD3 - ,simpleLowerCaseMapping:0x2FD3 - ,simpleTitleCaseMapping:0x2FD3 - }, - { code:0x2FD4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD4 - ,simpleLowerCaseMapping:0x2FD4 - ,simpleTitleCaseMapping:0x2FD4 - }, - { code:0x2FD5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FD5 - ,simpleLowerCaseMapping:0x2FD5 - ,simpleTitleCaseMapping:0x2FD5 - }, - { code:0x2FF0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF0 - ,simpleLowerCaseMapping:0x2FF0 - ,simpleTitleCaseMapping:0x2FF0 - }, - { code:0x2FF1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF1 - ,simpleLowerCaseMapping:0x2FF1 - ,simpleTitleCaseMapping:0x2FF1 - }, - { code:0x2FF2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF2 - ,simpleLowerCaseMapping:0x2FF2 - ,simpleTitleCaseMapping:0x2FF2 - }, - { code:0x2FF3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF3 - ,simpleLowerCaseMapping:0x2FF3 - ,simpleTitleCaseMapping:0x2FF3 - }, - { code:0x2FF4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF4 - ,simpleLowerCaseMapping:0x2FF4 - ,simpleTitleCaseMapping:0x2FF4 - }, - { code:0x2FF5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF5 - ,simpleLowerCaseMapping:0x2FF5 - ,simpleTitleCaseMapping:0x2FF5 - }, - { code:0x2FF6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF6 - ,simpleLowerCaseMapping:0x2FF6 - ,simpleTitleCaseMapping:0x2FF6 - }, - { code:0x2FF7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF7 - ,simpleLowerCaseMapping:0x2FF7 - ,simpleTitleCaseMapping:0x2FF7 - }, - { code:0x2FF8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF8 - ,simpleLowerCaseMapping:0x2FF8 - ,simpleTitleCaseMapping:0x2FF8 - }, - { code:0x2FF9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FF9 - ,simpleLowerCaseMapping:0x2FF9 - ,simpleTitleCaseMapping:0x2FF9 - }, - { code:0x2FFA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FFA - ,simpleLowerCaseMapping:0x2FFA - ,simpleTitleCaseMapping:0x2FFA - }, - { code:0x2FFB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x2FFB - ,simpleLowerCaseMapping:0x2FFB - ,simpleTitleCaseMapping:0x2FFB - }, - { code:0x3000 - ,generalCategory:UnicodeData.GeneralCategory.Zs - ,simpleUpperCaseMapping:0x3000 - ,simpleLowerCaseMapping:0x3000 - ,simpleTitleCaseMapping:0x3000 - }, - { code:0x3001 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x3001 - ,simpleLowerCaseMapping:0x3001 - ,simpleTitleCaseMapping:0x3001 - }, - { code:0x3002 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x3002 - ,simpleLowerCaseMapping:0x3002 - ,simpleTitleCaseMapping:0x3002 - }, - { code:0x3003 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x3003 - ,simpleLowerCaseMapping:0x3003 - ,simpleTitleCaseMapping:0x3003 - }, - { code:0x3004 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3004 - ,simpleLowerCaseMapping:0x3004 - ,simpleTitleCaseMapping:0x3004 - }, - { code:0x3005 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3005 - ,simpleLowerCaseMapping:0x3005 - ,simpleTitleCaseMapping:0x3005 - }, - { code:0x3006 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3006 - ,simpleLowerCaseMapping:0x3006 - ,simpleTitleCaseMapping:0x3006 - }, - { code:0x3007 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3007 - ,simpleLowerCaseMapping:0x3007 - ,simpleTitleCaseMapping:0x3007 - }, - { code:0x3008 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x3008 - ,simpleLowerCaseMapping:0x3008 - ,simpleTitleCaseMapping:0x3008 - }, - { code:0x3009 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x3009 - ,simpleLowerCaseMapping:0x3009 - ,simpleTitleCaseMapping:0x3009 - }, - { code:0x300A - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x300A - ,simpleLowerCaseMapping:0x300A - ,simpleTitleCaseMapping:0x300A - }, - { code:0x300B - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x300B - ,simpleLowerCaseMapping:0x300B - ,simpleTitleCaseMapping:0x300B - }, - { code:0x300C - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x300C - ,simpleLowerCaseMapping:0x300C - ,simpleTitleCaseMapping:0x300C - }, - { code:0x300D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x300D - ,simpleLowerCaseMapping:0x300D - ,simpleTitleCaseMapping:0x300D - }, - { code:0x300E - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x300E - ,simpleLowerCaseMapping:0x300E - ,simpleTitleCaseMapping:0x300E - }, - { code:0x300F - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x300F - ,simpleLowerCaseMapping:0x300F - ,simpleTitleCaseMapping:0x300F - }, - { code:0x3010 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x3010 - ,simpleLowerCaseMapping:0x3010 - ,simpleTitleCaseMapping:0x3010 - }, - { code:0x3011 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x3011 - ,simpleLowerCaseMapping:0x3011 - ,simpleTitleCaseMapping:0x3011 - }, - { code:0x3012 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3012 - ,simpleLowerCaseMapping:0x3012 - ,simpleTitleCaseMapping:0x3012 - }, - { code:0x3013 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3013 - ,simpleLowerCaseMapping:0x3013 - ,simpleTitleCaseMapping:0x3013 - }, - { code:0x3014 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x3014 - ,simpleLowerCaseMapping:0x3014 - ,simpleTitleCaseMapping:0x3014 - }, - { code:0x3015 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x3015 - ,simpleLowerCaseMapping:0x3015 - ,simpleTitleCaseMapping:0x3015 - }, - { code:0x3016 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x3016 - ,simpleLowerCaseMapping:0x3016 - ,simpleTitleCaseMapping:0x3016 - }, - { code:0x3017 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x3017 - ,simpleLowerCaseMapping:0x3017 - ,simpleTitleCaseMapping:0x3017 - }, - { code:0x3018 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x3018 - ,simpleLowerCaseMapping:0x3018 - ,simpleTitleCaseMapping:0x3018 - }, - { code:0x3019 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x3019 - ,simpleLowerCaseMapping:0x3019 - ,simpleTitleCaseMapping:0x3019 - }, - { code:0x301A - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x301A - ,simpleLowerCaseMapping:0x301A - ,simpleTitleCaseMapping:0x301A - }, - { code:0x301B - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x301B - ,simpleLowerCaseMapping:0x301B - ,simpleTitleCaseMapping:0x301B - }, - { code:0x301C - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x301C - ,simpleLowerCaseMapping:0x301C - ,simpleTitleCaseMapping:0x301C - }, - { code:0x301D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0x301D - ,simpleLowerCaseMapping:0x301D - ,simpleTitleCaseMapping:0x301D - }, - { code:0x301E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x301E - ,simpleLowerCaseMapping:0x301E - ,simpleTitleCaseMapping:0x301E - }, - { code:0x301F - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0x301F - ,simpleLowerCaseMapping:0x301F - ,simpleTitleCaseMapping:0x301F - }, - { code:0x3020 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3020 - ,simpleLowerCaseMapping:0x3020 - ,simpleTitleCaseMapping:0x3020 - }, - { code:0x3021 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3021 - ,simpleLowerCaseMapping:0x3021 - ,simpleTitleCaseMapping:0x3021 - }, - { code:0x3022 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3022 - ,simpleLowerCaseMapping:0x3022 - ,simpleTitleCaseMapping:0x3022 - }, - { code:0x3023 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3023 - ,simpleLowerCaseMapping:0x3023 - ,simpleTitleCaseMapping:0x3023 - }, - { code:0x3024 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3024 - ,simpleLowerCaseMapping:0x3024 - ,simpleTitleCaseMapping:0x3024 - }, - { code:0x3025 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3025 - ,simpleLowerCaseMapping:0x3025 - ,simpleTitleCaseMapping:0x3025 - }, - { code:0x3026 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3026 - ,simpleLowerCaseMapping:0x3026 - ,simpleTitleCaseMapping:0x3026 - }, - { code:0x3027 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3027 - ,simpleLowerCaseMapping:0x3027 - ,simpleTitleCaseMapping:0x3027 - }, - { code:0x3028 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3028 - ,simpleLowerCaseMapping:0x3028 - ,simpleTitleCaseMapping:0x3028 - }, - { code:0x3029 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3029 - ,simpleLowerCaseMapping:0x3029 - ,simpleTitleCaseMapping:0x3029 - }, - { code:0x302A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302A - ,simpleLowerCaseMapping:0x302A - ,simpleTitleCaseMapping:0x302A - }, - { code:0x302B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302B - ,simpleLowerCaseMapping:0x302B - ,simpleTitleCaseMapping:0x302B - }, - { code:0x302C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302C - ,simpleLowerCaseMapping:0x302C - ,simpleTitleCaseMapping:0x302C - }, - { code:0x302D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302D - ,simpleLowerCaseMapping:0x302D - ,simpleTitleCaseMapping:0x302D - }, - { code:0x302E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302E - ,simpleLowerCaseMapping:0x302E - ,simpleTitleCaseMapping:0x302E - }, - { code:0x302F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x302F - ,simpleLowerCaseMapping:0x302F - ,simpleTitleCaseMapping:0x302F - }, - { code:0x3030 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x3030 - ,simpleLowerCaseMapping:0x3030 - ,simpleTitleCaseMapping:0x3030 - }, - { code:0x3031 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3031 - ,simpleLowerCaseMapping:0x3031 - ,simpleTitleCaseMapping:0x3031 - }, - { code:0x3032 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3032 - ,simpleLowerCaseMapping:0x3032 - ,simpleTitleCaseMapping:0x3032 - }, - { code:0x3033 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3033 - ,simpleLowerCaseMapping:0x3033 - ,simpleTitleCaseMapping:0x3033 - }, - { code:0x3034 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3034 - ,simpleLowerCaseMapping:0x3034 - ,simpleTitleCaseMapping:0x3034 - }, - { code:0x3035 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x3035 - ,simpleLowerCaseMapping:0x3035 - ,simpleTitleCaseMapping:0x3035 - }, - { code:0x3036 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3036 - ,simpleLowerCaseMapping:0x3036 - ,simpleTitleCaseMapping:0x3036 - }, - { code:0x3037 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3037 - ,simpleLowerCaseMapping:0x3037 - ,simpleTitleCaseMapping:0x3037 - }, - { code:0x3038 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3038 - ,simpleLowerCaseMapping:0x3038 - ,simpleTitleCaseMapping:0x3038 - }, - { code:0x3039 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x3039 - ,simpleLowerCaseMapping:0x3039 - ,simpleTitleCaseMapping:0x3039 - }, - { code:0x303A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x303A - ,simpleLowerCaseMapping:0x303A - ,simpleTitleCaseMapping:0x303A - }, - { code:0x303B - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x303B - ,simpleLowerCaseMapping:0x303B - ,simpleTitleCaseMapping:0x303B - }, - { code:0x303C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x303C - ,simpleLowerCaseMapping:0x303C - ,simpleTitleCaseMapping:0x303C - }, - { code:0x303D - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x303D - ,simpleLowerCaseMapping:0x303D - ,simpleTitleCaseMapping:0x303D - }, - { code:0x303E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x303E - ,simpleLowerCaseMapping:0x303E - ,simpleTitleCaseMapping:0x303E - }, - { code:0x303F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x303F - ,simpleLowerCaseMapping:0x303F - ,simpleTitleCaseMapping:0x303F - }, - { code:0x3041 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3041 - ,simpleLowerCaseMapping:0x3041 - ,simpleTitleCaseMapping:0x3041 - }, - { code:0x3042 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3042 - ,simpleLowerCaseMapping:0x3042 - ,simpleTitleCaseMapping:0x3042 - }, - { code:0x3043 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3043 - ,simpleLowerCaseMapping:0x3043 - ,simpleTitleCaseMapping:0x3043 - }, - { code:0x3044 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3044 - ,simpleLowerCaseMapping:0x3044 - ,simpleTitleCaseMapping:0x3044 - }, - { code:0x3045 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3045 - ,simpleLowerCaseMapping:0x3045 - ,simpleTitleCaseMapping:0x3045 - }, - { code:0x3046 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3046 - ,simpleLowerCaseMapping:0x3046 - ,simpleTitleCaseMapping:0x3046 - }, - { code:0x3047 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3047 - ,simpleLowerCaseMapping:0x3047 - ,simpleTitleCaseMapping:0x3047 - }, - { code:0x3048 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3048 - ,simpleLowerCaseMapping:0x3048 - ,simpleTitleCaseMapping:0x3048 - }, - { code:0x3049 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3049 - ,simpleLowerCaseMapping:0x3049 - ,simpleTitleCaseMapping:0x3049 - }, - { code:0x304A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304A - ,simpleLowerCaseMapping:0x304A - ,simpleTitleCaseMapping:0x304A - }, - { code:0x304B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304B - ,simpleLowerCaseMapping:0x304B - ,simpleTitleCaseMapping:0x304B - }, - { code:0x304C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304C - ,simpleLowerCaseMapping:0x304C - ,simpleTitleCaseMapping:0x304C - }, - { code:0x304D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304D - ,simpleLowerCaseMapping:0x304D - ,simpleTitleCaseMapping:0x304D - }, - { code:0x304E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304E - ,simpleLowerCaseMapping:0x304E - ,simpleTitleCaseMapping:0x304E - }, - { code:0x304F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x304F - ,simpleLowerCaseMapping:0x304F - ,simpleTitleCaseMapping:0x304F - }, - { code:0x3050 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3050 - ,simpleLowerCaseMapping:0x3050 - ,simpleTitleCaseMapping:0x3050 - }, - { code:0x3051 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3051 - ,simpleLowerCaseMapping:0x3051 - ,simpleTitleCaseMapping:0x3051 - }, - { code:0x3052 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3052 - ,simpleLowerCaseMapping:0x3052 - ,simpleTitleCaseMapping:0x3052 - }, - { code:0x3053 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3053 - ,simpleLowerCaseMapping:0x3053 - ,simpleTitleCaseMapping:0x3053 - }, - { code:0x3054 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3054 - ,simpleLowerCaseMapping:0x3054 - ,simpleTitleCaseMapping:0x3054 - }, - { code:0x3055 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3055 - ,simpleLowerCaseMapping:0x3055 - ,simpleTitleCaseMapping:0x3055 - }, - { code:0x3056 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3056 - ,simpleLowerCaseMapping:0x3056 - ,simpleTitleCaseMapping:0x3056 - }, - { code:0x3057 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3057 - ,simpleLowerCaseMapping:0x3057 - ,simpleTitleCaseMapping:0x3057 - }, - { code:0x3058 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3058 - ,simpleLowerCaseMapping:0x3058 - ,simpleTitleCaseMapping:0x3058 - }, - { code:0x3059 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3059 - ,simpleLowerCaseMapping:0x3059 - ,simpleTitleCaseMapping:0x3059 - }, - { code:0x305A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305A - ,simpleLowerCaseMapping:0x305A - ,simpleTitleCaseMapping:0x305A - }, - { code:0x305B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305B - ,simpleLowerCaseMapping:0x305B - ,simpleTitleCaseMapping:0x305B - }, - { code:0x305C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305C - ,simpleLowerCaseMapping:0x305C - ,simpleTitleCaseMapping:0x305C - }, - { code:0x305D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305D - ,simpleLowerCaseMapping:0x305D - ,simpleTitleCaseMapping:0x305D - }, - { code:0x305E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305E - ,simpleLowerCaseMapping:0x305E - ,simpleTitleCaseMapping:0x305E - }, - { code:0x305F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x305F - ,simpleLowerCaseMapping:0x305F - ,simpleTitleCaseMapping:0x305F - }, - { code:0x3060 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3060 - ,simpleLowerCaseMapping:0x3060 - ,simpleTitleCaseMapping:0x3060 - }, - { code:0x3061 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3061 - ,simpleLowerCaseMapping:0x3061 - ,simpleTitleCaseMapping:0x3061 - }, - { code:0x3062 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3062 - ,simpleLowerCaseMapping:0x3062 - ,simpleTitleCaseMapping:0x3062 - }, - { code:0x3063 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3063 - ,simpleLowerCaseMapping:0x3063 - ,simpleTitleCaseMapping:0x3063 - }, - { code:0x3064 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3064 - ,simpleLowerCaseMapping:0x3064 - ,simpleTitleCaseMapping:0x3064 - }, - { code:0x3065 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3065 - ,simpleLowerCaseMapping:0x3065 - ,simpleTitleCaseMapping:0x3065 - }, - { code:0x3066 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3066 - ,simpleLowerCaseMapping:0x3066 - ,simpleTitleCaseMapping:0x3066 - }, - { code:0x3067 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3067 - ,simpleLowerCaseMapping:0x3067 - ,simpleTitleCaseMapping:0x3067 - }, - { code:0x3068 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3068 - ,simpleLowerCaseMapping:0x3068 - ,simpleTitleCaseMapping:0x3068 - }, - { code:0x3069 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3069 - ,simpleLowerCaseMapping:0x3069 - ,simpleTitleCaseMapping:0x3069 - }, - { code:0x306A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306A - ,simpleLowerCaseMapping:0x306A - ,simpleTitleCaseMapping:0x306A - }, - { code:0x306B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306B - ,simpleLowerCaseMapping:0x306B - ,simpleTitleCaseMapping:0x306B - }, - { code:0x306C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306C - ,simpleLowerCaseMapping:0x306C - ,simpleTitleCaseMapping:0x306C - }, - { code:0x306D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306D - ,simpleLowerCaseMapping:0x306D - ,simpleTitleCaseMapping:0x306D - }, - { code:0x306E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306E - ,simpleLowerCaseMapping:0x306E - ,simpleTitleCaseMapping:0x306E - }, - { code:0x306F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x306F - ,simpleLowerCaseMapping:0x306F - ,simpleTitleCaseMapping:0x306F - }, - { code:0x3070 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3070 - ,simpleLowerCaseMapping:0x3070 - ,simpleTitleCaseMapping:0x3070 - }, - { code:0x3071 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3071 - ,simpleLowerCaseMapping:0x3071 - ,simpleTitleCaseMapping:0x3071 - }, - { code:0x3072 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3072 - ,simpleLowerCaseMapping:0x3072 - ,simpleTitleCaseMapping:0x3072 - }, - { code:0x3073 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3073 - ,simpleLowerCaseMapping:0x3073 - ,simpleTitleCaseMapping:0x3073 - }, - { code:0x3074 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3074 - ,simpleLowerCaseMapping:0x3074 - ,simpleTitleCaseMapping:0x3074 - }, - { code:0x3075 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3075 - ,simpleLowerCaseMapping:0x3075 - ,simpleTitleCaseMapping:0x3075 - }, - { code:0x3076 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3076 - ,simpleLowerCaseMapping:0x3076 - ,simpleTitleCaseMapping:0x3076 - }, - { code:0x3077 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3077 - ,simpleLowerCaseMapping:0x3077 - ,simpleTitleCaseMapping:0x3077 - }, - { code:0x3078 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3078 - ,simpleLowerCaseMapping:0x3078 - ,simpleTitleCaseMapping:0x3078 - }, - { code:0x3079 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3079 - ,simpleLowerCaseMapping:0x3079 - ,simpleTitleCaseMapping:0x3079 - }, - { code:0x307A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307A - ,simpleLowerCaseMapping:0x307A - ,simpleTitleCaseMapping:0x307A - }, - { code:0x307B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307B - ,simpleLowerCaseMapping:0x307B - ,simpleTitleCaseMapping:0x307B - }, - { code:0x307C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307C - ,simpleLowerCaseMapping:0x307C - ,simpleTitleCaseMapping:0x307C - }, - { code:0x307D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307D - ,simpleLowerCaseMapping:0x307D - ,simpleTitleCaseMapping:0x307D - }, - { code:0x307E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307E - ,simpleLowerCaseMapping:0x307E - ,simpleTitleCaseMapping:0x307E - }, - { code:0x307F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x307F - ,simpleLowerCaseMapping:0x307F - ,simpleTitleCaseMapping:0x307F - }, - { code:0x3080 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3080 - ,simpleLowerCaseMapping:0x3080 - ,simpleTitleCaseMapping:0x3080 - }, - { code:0x3081 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3081 - ,simpleLowerCaseMapping:0x3081 - ,simpleTitleCaseMapping:0x3081 - }, - { code:0x3082 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3082 - ,simpleLowerCaseMapping:0x3082 - ,simpleTitleCaseMapping:0x3082 - }, - { code:0x3083 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3083 - ,simpleLowerCaseMapping:0x3083 - ,simpleTitleCaseMapping:0x3083 - }, - { code:0x3084 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3084 - ,simpleLowerCaseMapping:0x3084 - ,simpleTitleCaseMapping:0x3084 - }, - { code:0x3085 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3085 - ,simpleLowerCaseMapping:0x3085 - ,simpleTitleCaseMapping:0x3085 - }, - { code:0x3086 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3086 - ,simpleLowerCaseMapping:0x3086 - ,simpleTitleCaseMapping:0x3086 - }, - { code:0x3087 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3087 - ,simpleLowerCaseMapping:0x3087 - ,simpleTitleCaseMapping:0x3087 - }, - { code:0x3088 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3088 - ,simpleLowerCaseMapping:0x3088 - ,simpleTitleCaseMapping:0x3088 - }, - { code:0x3089 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3089 - ,simpleLowerCaseMapping:0x3089 - ,simpleTitleCaseMapping:0x3089 - }, - { code:0x308A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308A - ,simpleLowerCaseMapping:0x308A - ,simpleTitleCaseMapping:0x308A - }, - { code:0x308B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308B - ,simpleLowerCaseMapping:0x308B - ,simpleTitleCaseMapping:0x308B - }, - { code:0x308C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308C - ,simpleLowerCaseMapping:0x308C - ,simpleTitleCaseMapping:0x308C - }, - { code:0x308D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308D - ,simpleLowerCaseMapping:0x308D - ,simpleTitleCaseMapping:0x308D - }, - { code:0x308E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308E - ,simpleLowerCaseMapping:0x308E - ,simpleTitleCaseMapping:0x308E - }, - { code:0x308F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x308F - ,simpleLowerCaseMapping:0x308F - ,simpleTitleCaseMapping:0x308F - }, - { code:0x3090 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3090 - ,simpleLowerCaseMapping:0x3090 - ,simpleTitleCaseMapping:0x3090 - }, - { code:0x3091 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3091 - ,simpleLowerCaseMapping:0x3091 - ,simpleTitleCaseMapping:0x3091 - }, - { code:0x3092 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3092 - ,simpleLowerCaseMapping:0x3092 - ,simpleTitleCaseMapping:0x3092 - }, - { code:0x3093 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3093 - ,simpleLowerCaseMapping:0x3093 - ,simpleTitleCaseMapping:0x3093 - }, - { code:0x3094 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3094 - ,simpleLowerCaseMapping:0x3094 - ,simpleTitleCaseMapping:0x3094 - }, - { code:0x3095 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3095 - ,simpleLowerCaseMapping:0x3095 - ,simpleTitleCaseMapping:0x3095 - }, - { code:0x3096 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3096 - ,simpleLowerCaseMapping:0x3096 - ,simpleTitleCaseMapping:0x3096 - }, - { code:0x3099 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x3099 - ,simpleLowerCaseMapping:0x3099 - ,simpleTitleCaseMapping:0x3099 - }, - { code:0x309A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x309A - ,simpleLowerCaseMapping:0x309A - ,simpleTitleCaseMapping:0x309A - }, - { code:0x309B - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x309B - ,simpleLowerCaseMapping:0x309B - ,simpleTitleCaseMapping:0x309B - }, - { code:0x309C - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0x309C - ,simpleLowerCaseMapping:0x309C - ,simpleTitleCaseMapping:0x309C - }, - { code:0x309D - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x309D - ,simpleLowerCaseMapping:0x309D - ,simpleTitleCaseMapping:0x309D - }, - { code:0x309E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x309E - ,simpleLowerCaseMapping:0x309E - ,simpleTitleCaseMapping:0x309E - }, - { code:0x309F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x309F - ,simpleLowerCaseMapping:0x309F - ,simpleTitleCaseMapping:0x309F - }, - { code:0x30A0 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0x30A0 - ,simpleLowerCaseMapping:0x30A0 - ,simpleTitleCaseMapping:0x30A0 - }, - { code:0x30A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A1 - ,simpleLowerCaseMapping:0x30A1 - ,simpleTitleCaseMapping:0x30A1 - }, - { code:0x30A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A2 - ,simpleLowerCaseMapping:0x30A2 - ,simpleTitleCaseMapping:0x30A2 - }, - { code:0x30A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A3 - ,simpleLowerCaseMapping:0x30A3 - ,simpleTitleCaseMapping:0x30A3 - }, - { code:0x30A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A4 - ,simpleLowerCaseMapping:0x30A4 - ,simpleTitleCaseMapping:0x30A4 - }, - { code:0x30A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A5 - ,simpleLowerCaseMapping:0x30A5 - ,simpleTitleCaseMapping:0x30A5 - }, - { code:0x30A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A6 - ,simpleLowerCaseMapping:0x30A6 - ,simpleTitleCaseMapping:0x30A6 - }, - { code:0x30A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A7 - ,simpleLowerCaseMapping:0x30A7 - ,simpleTitleCaseMapping:0x30A7 - }, - { code:0x30A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A8 - ,simpleLowerCaseMapping:0x30A8 - ,simpleTitleCaseMapping:0x30A8 - }, - { code:0x30A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30A9 - ,simpleLowerCaseMapping:0x30A9 - ,simpleTitleCaseMapping:0x30A9 - }, - { code:0x30AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AA - ,simpleLowerCaseMapping:0x30AA - ,simpleTitleCaseMapping:0x30AA - }, - { code:0x30AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AB - ,simpleLowerCaseMapping:0x30AB - ,simpleTitleCaseMapping:0x30AB - }, - { code:0x30AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AC - ,simpleLowerCaseMapping:0x30AC - ,simpleTitleCaseMapping:0x30AC - }, - { code:0x30AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AD - ,simpleLowerCaseMapping:0x30AD - ,simpleTitleCaseMapping:0x30AD - }, - { code:0x30AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AE - ,simpleLowerCaseMapping:0x30AE - ,simpleTitleCaseMapping:0x30AE - }, - { code:0x30AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30AF - ,simpleLowerCaseMapping:0x30AF - ,simpleTitleCaseMapping:0x30AF - }, - { code:0x30B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B0 - ,simpleLowerCaseMapping:0x30B0 - ,simpleTitleCaseMapping:0x30B0 - }, - { code:0x30B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B1 - ,simpleLowerCaseMapping:0x30B1 - ,simpleTitleCaseMapping:0x30B1 - }, - { code:0x30B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B2 - ,simpleLowerCaseMapping:0x30B2 - ,simpleTitleCaseMapping:0x30B2 - }, - { code:0x30B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B3 - ,simpleLowerCaseMapping:0x30B3 - ,simpleTitleCaseMapping:0x30B3 - }, - { code:0x30B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B4 - ,simpleLowerCaseMapping:0x30B4 - ,simpleTitleCaseMapping:0x30B4 - }, - { code:0x30B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B5 - ,simpleLowerCaseMapping:0x30B5 - ,simpleTitleCaseMapping:0x30B5 - }, - { code:0x30B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B6 - ,simpleLowerCaseMapping:0x30B6 - ,simpleTitleCaseMapping:0x30B6 - }, - { code:0x30B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B7 - ,simpleLowerCaseMapping:0x30B7 - ,simpleTitleCaseMapping:0x30B7 - }, - { code:0x30B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B8 - ,simpleLowerCaseMapping:0x30B8 - ,simpleTitleCaseMapping:0x30B8 - }, - { code:0x30B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30B9 - ,simpleLowerCaseMapping:0x30B9 - ,simpleTitleCaseMapping:0x30B9 - }, - { code:0x30BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BA - ,simpleLowerCaseMapping:0x30BA - ,simpleTitleCaseMapping:0x30BA - }, - { code:0x30BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BB - ,simpleLowerCaseMapping:0x30BB - ,simpleTitleCaseMapping:0x30BB - }, - { code:0x30BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BC - ,simpleLowerCaseMapping:0x30BC - ,simpleTitleCaseMapping:0x30BC - }, - { code:0x30BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BD - ,simpleLowerCaseMapping:0x30BD - ,simpleTitleCaseMapping:0x30BD - }, - { code:0x30BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BE - ,simpleLowerCaseMapping:0x30BE - ,simpleTitleCaseMapping:0x30BE - }, - { code:0x30BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30BF - ,simpleLowerCaseMapping:0x30BF - ,simpleTitleCaseMapping:0x30BF - }, - { code:0x30C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C0 - ,simpleLowerCaseMapping:0x30C0 - ,simpleTitleCaseMapping:0x30C0 - }, - { code:0x30C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C1 - ,simpleLowerCaseMapping:0x30C1 - ,simpleTitleCaseMapping:0x30C1 - }, - { code:0x30C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C2 - ,simpleLowerCaseMapping:0x30C2 - ,simpleTitleCaseMapping:0x30C2 - }, - { code:0x30C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C3 - ,simpleLowerCaseMapping:0x30C3 - ,simpleTitleCaseMapping:0x30C3 - }, - { code:0x30C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C4 - ,simpleLowerCaseMapping:0x30C4 - ,simpleTitleCaseMapping:0x30C4 - }, - { code:0x30C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C5 - ,simpleLowerCaseMapping:0x30C5 - ,simpleTitleCaseMapping:0x30C5 - }, - { code:0x30C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C6 - ,simpleLowerCaseMapping:0x30C6 - ,simpleTitleCaseMapping:0x30C6 - }, - { code:0x30C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C7 - ,simpleLowerCaseMapping:0x30C7 - ,simpleTitleCaseMapping:0x30C7 - }, - { code:0x30C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C8 - ,simpleLowerCaseMapping:0x30C8 - ,simpleTitleCaseMapping:0x30C8 - }, - { code:0x30C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30C9 - ,simpleLowerCaseMapping:0x30C9 - ,simpleTitleCaseMapping:0x30C9 - }, - { code:0x30CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CA - ,simpleLowerCaseMapping:0x30CA - ,simpleTitleCaseMapping:0x30CA - }, - { code:0x30CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CB - ,simpleLowerCaseMapping:0x30CB - ,simpleTitleCaseMapping:0x30CB - }, - { code:0x30CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CC - ,simpleLowerCaseMapping:0x30CC - ,simpleTitleCaseMapping:0x30CC - }, - { code:0x30CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CD - ,simpleLowerCaseMapping:0x30CD - ,simpleTitleCaseMapping:0x30CD - }, - { code:0x30CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CE - ,simpleLowerCaseMapping:0x30CE - ,simpleTitleCaseMapping:0x30CE - }, - { code:0x30CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30CF - ,simpleLowerCaseMapping:0x30CF - ,simpleTitleCaseMapping:0x30CF - }, - { code:0x30D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D0 - ,simpleLowerCaseMapping:0x30D0 - ,simpleTitleCaseMapping:0x30D0 - }, - { code:0x30D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D1 - ,simpleLowerCaseMapping:0x30D1 - ,simpleTitleCaseMapping:0x30D1 - }, - { code:0x30D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D2 - ,simpleLowerCaseMapping:0x30D2 - ,simpleTitleCaseMapping:0x30D2 - }, - { code:0x30D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D3 - ,simpleLowerCaseMapping:0x30D3 - ,simpleTitleCaseMapping:0x30D3 - }, - { code:0x30D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D4 - ,simpleLowerCaseMapping:0x30D4 - ,simpleTitleCaseMapping:0x30D4 - }, - { code:0x30D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D5 - ,simpleLowerCaseMapping:0x30D5 - ,simpleTitleCaseMapping:0x30D5 - }, - { code:0x30D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D6 - ,simpleLowerCaseMapping:0x30D6 - ,simpleTitleCaseMapping:0x30D6 - }, - { code:0x30D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D7 - ,simpleLowerCaseMapping:0x30D7 - ,simpleTitleCaseMapping:0x30D7 - }, - { code:0x30D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D8 - ,simpleLowerCaseMapping:0x30D8 - ,simpleTitleCaseMapping:0x30D8 - }, - { code:0x30D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30D9 - ,simpleLowerCaseMapping:0x30D9 - ,simpleTitleCaseMapping:0x30D9 - }, - { code:0x30DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DA - ,simpleLowerCaseMapping:0x30DA - ,simpleTitleCaseMapping:0x30DA - }, - { code:0x30DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DB - ,simpleLowerCaseMapping:0x30DB - ,simpleTitleCaseMapping:0x30DB - }, - { code:0x30DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DC - ,simpleLowerCaseMapping:0x30DC - ,simpleTitleCaseMapping:0x30DC - }, - { code:0x30DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DD - ,simpleLowerCaseMapping:0x30DD - ,simpleTitleCaseMapping:0x30DD - }, - { code:0x30DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DE - ,simpleLowerCaseMapping:0x30DE - ,simpleTitleCaseMapping:0x30DE - }, - { code:0x30DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30DF - ,simpleLowerCaseMapping:0x30DF - ,simpleTitleCaseMapping:0x30DF - }, - { code:0x30E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E0 - ,simpleLowerCaseMapping:0x30E0 - ,simpleTitleCaseMapping:0x30E0 - }, - { code:0x30E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E1 - ,simpleLowerCaseMapping:0x30E1 - ,simpleTitleCaseMapping:0x30E1 - }, - { code:0x30E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E2 - ,simpleLowerCaseMapping:0x30E2 - ,simpleTitleCaseMapping:0x30E2 - }, - { code:0x30E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E3 - ,simpleLowerCaseMapping:0x30E3 - ,simpleTitleCaseMapping:0x30E3 - }, - { code:0x30E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E4 - ,simpleLowerCaseMapping:0x30E4 - ,simpleTitleCaseMapping:0x30E4 - }, - { code:0x30E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E5 - ,simpleLowerCaseMapping:0x30E5 - ,simpleTitleCaseMapping:0x30E5 - }, - { code:0x30E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E6 - ,simpleLowerCaseMapping:0x30E6 - ,simpleTitleCaseMapping:0x30E6 - }, - { code:0x30E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E7 - ,simpleLowerCaseMapping:0x30E7 - ,simpleTitleCaseMapping:0x30E7 - }, - { code:0x30E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E8 - ,simpleLowerCaseMapping:0x30E8 - ,simpleTitleCaseMapping:0x30E8 - }, - { code:0x30E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30E9 - ,simpleLowerCaseMapping:0x30E9 - ,simpleTitleCaseMapping:0x30E9 - }, - { code:0x30EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30EA - ,simpleLowerCaseMapping:0x30EA - ,simpleTitleCaseMapping:0x30EA - }, - { code:0x30EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30EB - ,simpleLowerCaseMapping:0x30EB - ,simpleTitleCaseMapping:0x30EB - }, - { code:0x30EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30EC - ,simpleLowerCaseMapping:0x30EC - ,simpleTitleCaseMapping:0x30EC - }, - { code:0x30ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30ED - ,simpleLowerCaseMapping:0x30ED - ,simpleTitleCaseMapping:0x30ED - }, - { code:0x30EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30EE - ,simpleLowerCaseMapping:0x30EE - ,simpleTitleCaseMapping:0x30EE - }, - { code:0x30EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30EF - ,simpleLowerCaseMapping:0x30EF - ,simpleTitleCaseMapping:0x30EF - }, - { code:0x30F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F0 - ,simpleLowerCaseMapping:0x30F0 - ,simpleTitleCaseMapping:0x30F0 - }, - { code:0x30F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F1 - ,simpleLowerCaseMapping:0x30F1 - ,simpleTitleCaseMapping:0x30F1 - }, - { code:0x30F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F2 - ,simpleLowerCaseMapping:0x30F2 - ,simpleTitleCaseMapping:0x30F2 - }, - { code:0x30F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F3 - ,simpleLowerCaseMapping:0x30F3 - ,simpleTitleCaseMapping:0x30F3 - }, - { code:0x30F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F4 - ,simpleLowerCaseMapping:0x30F4 - ,simpleTitleCaseMapping:0x30F4 - }, - { code:0x30F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F5 - ,simpleLowerCaseMapping:0x30F5 - ,simpleTitleCaseMapping:0x30F5 - }, - { code:0x30F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F6 - ,simpleLowerCaseMapping:0x30F6 - ,simpleTitleCaseMapping:0x30F6 - }, - { code:0x30F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F7 - ,simpleLowerCaseMapping:0x30F7 - ,simpleTitleCaseMapping:0x30F7 - }, - { code:0x30F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F8 - ,simpleLowerCaseMapping:0x30F8 - ,simpleTitleCaseMapping:0x30F8 - }, - { code:0x30F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30F9 - ,simpleLowerCaseMapping:0x30F9 - ,simpleTitleCaseMapping:0x30F9 - }, - { code:0x30FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30FA - ,simpleLowerCaseMapping:0x30FA - ,simpleTitleCaseMapping:0x30FA - }, - { code:0x30FB - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x30FB - ,simpleLowerCaseMapping:0x30FB - ,simpleTitleCaseMapping:0x30FB - }, - { code:0x30FC - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x30FC - ,simpleLowerCaseMapping:0x30FC - ,simpleTitleCaseMapping:0x30FC - }, - { code:0x30FD - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x30FD - ,simpleLowerCaseMapping:0x30FD - ,simpleTitleCaseMapping:0x30FD - }, - { code:0x30FE - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0x30FE - ,simpleLowerCaseMapping:0x30FE - ,simpleTitleCaseMapping:0x30FE - }, - { code:0x30FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x30FF - ,simpleLowerCaseMapping:0x30FF - ,simpleTitleCaseMapping:0x30FF - }, - { code:0x3105 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3105 - ,simpleLowerCaseMapping:0x3105 - ,simpleTitleCaseMapping:0x3105 - }, - { code:0x3106 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3106 - ,simpleLowerCaseMapping:0x3106 - ,simpleTitleCaseMapping:0x3106 - }, - { code:0x3107 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3107 - ,simpleLowerCaseMapping:0x3107 - ,simpleTitleCaseMapping:0x3107 - }, - { code:0x3108 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3108 - ,simpleLowerCaseMapping:0x3108 - ,simpleTitleCaseMapping:0x3108 - }, - { code:0x3109 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3109 - ,simpleLowerCaseMapping:0x3109 - ,simpleTitleCaseMapping:0x3109 - }, - { code:0x310A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310A - ,simpleLowerCaseMapping:0x310A - ,simpleTitleCaseMapping:0x310A - }, - { code:0x310B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310B - ,simpleLowerCaseMapping:0x310B - ,simpleTitleCaseMapping:0x310B - }, - { code:0x310C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310C - ,simpleLowerCaseMapping:0x310C - ,simpleTitleCaseMapping:0x310C - }, - { code:0x310D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310D - ,simpleLowerCaseMapping:0x310D - ,simpleTitleCaseMapping:0x310D - }, - { code:0x310E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310E - ,simpleLowerCaseMapping:0x310E - ,simpleTitleCaseMapping:0x310E - }, - { code:0x310F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x310F - ,simpleLowerCaseMapping:0x310F - ,simpleTitleCaseMapping:0x310F - }, - { code:0x3110 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3110 - ,simpleLowerCaseMapping:0x3110 - ,simpleTitleCaseMapping:0x3110 - }, - { code:0x3111 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3111 - ,simpleLowerCaseMapping:0x3111 - ,simpleTitleCaseMapping:0x3111 - }, - { code:0x3112 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3112 - ,simpleLowerCaseMapping:0x3112 - ,simpleTitleCaseMapping:0x3112 - }, - { code:0x3113 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3113 - ,simpleLowerCaseMapping:0x3113 - ,simpleTitleCaseMapping:0x3113 - }, - { code:0x3114 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3114 - ,simpleLowerCaseMapping:0x3114 - ,simpleTitleCaseMapping:0x3114 - }, - { code:0x3115 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3115 - ,simpleLowerCaseMapping:0x3115 - ,simpleTitleCaseMapping:0x3115 - }, - { code:0x3116 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3116 - ,simpleLowerCaseMapping:0x3116 - ,simpleTitleCaseMapping:0x3116 - }, - { code:0x3117 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3117 - ,simpleLowerCaseMapping:0x3117 - ,simpleTitleCaseMapping:0x3117 - }, - { code:0x3118 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3118 - ,simpleLowerCaseMapping:0x3118 - ,simpleTitleCaseMapping:0x3118 - }, - { code:0x3119 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3119 - ,simpleLowerCaseMapping:0x3119 - ,simpleTitleCaseMapping:0x3119 - }, - { code:0x311A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311A - ,simpleLowerCaseMapping:0x311A - ,simpleTitleCaseMapping:0x311A - }, - { code:0x311B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311B - ,simpleLowerCaseMapping:0x311B - ,simpleTitleCaseMapping:0x311B - }, - { code:0x311C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311C - ,simpleLowerCaseMapping:0x311C - ,simpleTitleCaseMapping:0x311C - }, - { code:0x311D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311D - ,simpleLowerCaseMapping:0x311D - ,simpleTitleCaseMapping:0x311D - }, - { code:0x311E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311E - ,simpleLowerCaseMapping:0x311E - ,simpleTitleCaseMapping:0x311E - }, - { code:0x311F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x311F - ,simpleLowerCaseMapping:0x311F - ,simpleTitleCaseMapping:0x311F - }, - { code:0x3120 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3120 - ,simpleLowerCaseMapping:0x3120 - ,simpleTitleCaseMapping:0x3120 - }, - { code:0x3121 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3121 - ,simpleLowerCaseMapping:0x3121 - ,simpleTitleCaseMapping:0x3121 - }, - { code:0x3122 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3122 - ,simpleLowerCaseMapping:0x3122 - ,simpleTitleCaseMapping:0x3122 - }, - { code:0x3123 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3123 - ,simpleLowerCaseMapping:0x3123 - ,simpleTitleCaseMapping:0x3123 - }, - { code:0x3124 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3124 - ,simpleLowerCaseMapping:0x3124 - ,simpleTitleCaseMapping:0x3124 - }, - { code:0x3125 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3125 - ,simpleLowerCaseMapping:0x3125 - ,simpleTitleCaseMapping:0x3125 - }, - { code:0x3126 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3126 - ,simpleLowerCaseMapping:0x3126 - ,simpleTitleCaseMapping:0x3126 - }, - { code:0x3127 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3127 - ,simpleLowerCaseMapping:0x3127 - ,simpleTitleCaseMapping:0x3127 - }, - { code:0x3128 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3128 - ,simpleLowerCaseMapping:0x3128 - ,simpleTitleCaseMapping:0x3128 - }, - { code:0x3129 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3129 - ,simpleLowerCaseMapping:0x3129 - ,simpleTitleCaseMapping:0x3129 - }, - { code:0x312A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x312A - ,simpleLowerCaseMapping:0x312A - ,simpleTitleCaseMapping:0x312A - }, - { code:0x312B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x312B - ,simpleLowerCaseMapping:0x312B - ,simpleTitleCaseMapping:0x312B - }, - { code:0x312C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x312C - ,simpleLowerCaseMapping:0x312C - ,simpleTitleCaseMapping:0x312C - }, - { code:0x3131 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3131 - ,simpleLowerCaseMapping:0x3131 - ,simpleTitleCaseMapping:0x3131 - }, - { code:0x3132 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3132 - ,simpleLowerCaseMapping:0x3132 - ,simpleTitleCaseMapping:0x3132 - }, - { code:0x3133 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3133 - ,simpleLowerCaseMapping:0x3133 - ,simpleTitleCaseMapping:0x3133 - }, - { code:0x3134 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3134 - ,simpleLowerCaseMapping:0x3134 - ,simpleTitleCaseMapping:0x3134 - }, - { code:0x3135 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3135 - ,simpleLowerCaseMapping:0x3135 - ,simpleTitleCaseMapping:0x3135 - }, - { code:0x3136 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3136 - ,simpleLowerCaseMapping:0x3136 - ,simpleTitleCaseMapping:0x3136 - }, - { code:0x3137 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3137 - ,simpleLowerCaseMapping:0x3137 - ,simpleTitleCaseMapping:0x3137 - }, - { code:0x3138 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3138 - ,simpleLowerCaseMapping:0x3138 - ,simpleTitleCaseMapping:0x3138 - }, - { code:0x3139 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3139 - ,simpleLowerCaseMapping:0x3139 - ,simpleTitleCaseMapping:0x3139 - }, - { code:0x313A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313A - ,simpleLowerCaseMapping:0x313A - ,simpleTitleCaseMapping:0x313A - }, - { code:0x313B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313B - ,simpleLowerCaseMapping:0x313B - ,simpleTitleCaseMapping:0x313B - }, - { code:0x313C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313C - ,simpleLowerCaseMapping:0x313C - ,simpleTitleCaseMapping:0x313C - }, - { code:0x313D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313D - ,simpleLowerCaseMapping:0x313D - ,simpleTitleCaseMapping:0x313D - }, - { code:0x313E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313E - ,simpleLowerCaseMapping:0x313E - ,simpleTitleCaseMapping:0x313E - }, - { code:0x313F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x313F - ,simpleLowerCaseMapping:0x313F - ,simpleTitleCaseMapping:0x313F - }, - { code:0x3140 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3140 - ,simpleLowerCaseMapping:0x3140 - ,simpleTitleCaseMapping:0x3140 - }, - { code:0x3141 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3141 - ,simpleLowerCaseMapping:0x3141 - ,simpleTitleCaseMapping:0x3141 - }, - { code:0x3142 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3142 - ,simpleLowerCaseMapping:0x3142 - ,simpleTitleCaseMapping:0x3142 - }, - { code:0x3143 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3143 - ,simpleLowerCaseMapping:0x3143 - ,simpleTitleCaseMapping:0x3143 - }, - { code:0x3144 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3144 - ,simpleLowerCaseMapping:0x3144 - ,simpleTitleCaseMapping:0x3144 - }, - { code:0x3145 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3145 - ,simpleLowerCaseMapping:0x3145 - ,simpleTitleCaseMapping:0x3145 - }, - { code:0x3146 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3146 - ,simpleLowerCaseMapping:0x3146 - ,simpleTitleCaseMapping:0x3146 - }, - { code:0x3147 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3147 - ,simpleLowerCaseMapping:0x3147 - ,simpleTitleCaseMapping:0x3147 - }, - { code:0x3148 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3148 - ,simpleLowerCaseMapping:0x3148 - ,simpleTitleCaseMapping:0x3148 - }, - { code:0x3149 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3149 - ,simpleLowerCaseMapping:0x3149 - ,simpleTitleCaseMapping:0x3149 - }, - { code:0x314A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314A - ,simpleLowerCaseMapping:0x314A - ,simpleTitleCaseMapping:0x314A - }, - { code:0x314B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314B - ,simpleLowerCaseMapping:0x314B - ,simpleTitleCaseMapping:0x314B - }, - { code:0x314C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314C - ,simpleLowerCaseMapping:0x314C - ,simpleTitleCaseMapping:0x314C - }, - { code:0x314D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314D - ,simpleLowerCaseMapping:0x314D - ,simpleTitleCaseMapping:0x314D - }, - { code:0x314E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314E - ,simpleLowerCaseMapping:0x314E - ,simpleTitleCaseMapping:0x314E - }, - { code:0x314F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x314F - ,simpleLowerCaseMapping:0x314F - ,simpleTitleCaseMapping:0x314F - }, - { code:0x3150 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3150 - ,simpleLowerCaseMapping:0x3150 - ,simpleTitleCaseMapping:0x3150 - }, - { code:0x3151 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3151 - ,simpleLowerCaseMapping:0x3151 - ,simpleTitleCaseMapping:0x3151 - }, - { code:0x3152 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3152 - ,simpleLowerCaseMapping:0x3152 - ,simpleTitleCaseMapping:0x3152 - }, - { code:0x3153 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3153 - ,simpleLowerCaseMapping:0x3153 - ,simpleTitleCaseMapping:0x3153 - }, - { code:0x3154 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3154 - ,simpleLowerCaseMapping:0x3154 - ,simpleTitleCaseMapping:0x3154 - }, - { code:0x3155 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3155 - ,simpleLowerCaseMapping:0x3155 - ,simpleTitleCaseMapping:0x3155 - }, - { code:0x3156 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3156 - ,simpleLowerCaseMapping:0x3156 - ,simpleTitleCaseMapping:0x3156 - }, - { code:0x3157 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3157 - ,simpleLowerCaseMapping:0x3157 - ,simpleTitleCaseMapping:0x3157 - }, - { code:0x3158 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3158 - ,simpleLowerCaseMapping:0x3158 - ,simpleTitleCaseMapping:0x3158 - }, - { code:0x3159 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3159 - ,simpleLowerCaseMapping:0x3159 - ,simpleTitleCaseMapping:0x3159 - }, - { code:0x315A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315A - ,simpleLowerCaseMapping:0x315A - ,simpleTitleCaseMapping:0x315A - }, - { code:0x315B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315B - ,simpleLowerCaseMapping:0x315B - ,simpleTitleCaseMapping:0x315B - }, - { code:0x315C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315C - ,simpleLowerCaseMapping:0x315C - ,simpleTitleCaseMapping:0x315C - }, - { code:0x315D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315D - ,simpleLowerCaseMapping:0x315D - ,simpleTitleCaseMapping:0x315D - }, - { code:0x315E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315E - ,simpleLowerCaseMapping:0x315E - ,simpleTitleCaseMapping:0x315E - }, - { code:0x315F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x315F - ,simpleLowerCaseMapping:0x315F - ,simpleTitleCaseMapping:0x315F - }, - { code:0x3160 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3160 - ,simpleLowerCaseMapping:0x3160 - ,simpleTitleCaseMapping:0x3160 - }, - { code:0x3161 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3161 - ,simpleLowerCaseMapping:0x3161 - ,simpleTitleCaseMapping:0x3161 - }, - { code:0x3162 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3162 - ,simpleLowerCaseMapping:0x3162 - ,simpleTitleCaseMapping:0x3162 - }, - { code:0x3163 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3163 - ,simpleLowerCaseMapping:0x3163 - ,simpleTitleCaseMapping:0x3163 - }, - { code:0x3164 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3164 - ,simpleLowerCaseMapping:0x3164 - ,simpleTitleCaseMapping:0x3164 - }, - { code:0x3165 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3165 - ,simpleLowerCaseMapping:0x3165 - ,simpleTitleCaseMapping:0x3165 - }, - { code:0x3166 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3166 - ,simpleLowerCaseMapping:0x3166 - ,simpleTitleCaseMapping:0x3166 - }, - { code:0x3167 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3167 - ,simpleLowerCaseMapping:0x3167 - ,simpleTitleCaseMapping:0x3167 - }, - { code:0x3168 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3168 - ,simpleLowerCaseMapping:0x3168 - ,simpleTitleCaseMapping:0x3168 - }, - { code:0x3169 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3169 - ,simpleLowerCaseMapping:0x3169 - ,simpleTitleCaseMapping:0x3169 - }, - { code:0x316A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316A - ,simpleLowerCaseMapping:0x316A - ,simpleTitleCaseMapping:0x316A - }, - { code:0x316B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316B - ,simpleLowerCaseMapping:0x316B - ,simpleTitleCaseMapping:0x316B - }, - { code:0x316C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316C - ,simpleLowerCaseMapping:0x316C - ,simpleTitleCaseMapping:0x316C - }, - { code:0x316D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316D - ,simpleLowerCaseMapping:0x316D - ,simpleTitleCaseMapping:0x316D - }, - { code:0x316E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316E - ,simpleLowerCaseMapping:0x316E - ,simpleTitleCaseMapping:0x316E - }, - { code:0x316F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x316F - ,simpleLowerCaseMapping:0x316F - ,simpleTitleCaseMapping:0x316F - }, - { code:0x3170 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3170 - ,simpleLowerCaseMapping:0x3170 - ,simpleTitleCaseMapping:0x3170 - }, - { code:0x3171 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3171 - ,simpleLowerCaseMapping:0x3171 - ,simpleTitleCaseMapping:0x3171 - }, - { code:0x3172 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3172 - ,simpleLowerCaseMapping:0x3172 - ,simpleTitleCaseMapping:0x3172 - }, - { code:0x3173 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3173 - ,simpleLowerCaseMapping:0x3173 - ,simpleTitleCaseMapping:0x3173 - }, - { code:0x3174 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3174 - ,simpleLowerCaseMapping:0x3174 - ,simpleTitleCaseMapping:0x3174 - }, - { code:0x3175 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3175 - ,simpleLowerCaseMapping:0x3175 - ,simpleTitleCaseMapping:0x3175 - }, - { code:0x3176 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3176 - ,simpleLowerCaseMapping:0x3176 - ,simpleTitleCaseMapping:0x3176 - }, - { code:0x3177 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3177 - ,simpleLowerCaseMapping:0x3177 - ,simpleTitleCaseMapping:0x3177 - }, - { code:0x3178 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3178 - ,simpleLowerCaseMapping:0x3178 - ,simpleTitleCaseMapping:0x3178 - }, - { code:0x3179 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3179 - ,simpleLowerCaseMapping:0x3179 - ,simpleTitleCaseMapping:0x3179 - }, - { code:0x317A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317A - ,simpleLowerCaseMapping:0x317A - ,simpleTitleCaseMapping:0x317A - }, - { code:0x317B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317B - ,simpleLowerCaseMapping:0x317B - ,simpleTitleCaseMapping:0x317B - }, - { code:0x317C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317C - ,simpleLowerCaseMapping:0x317C - ,simpleTitleCaseMapping:0x317C - }, - { code:0x317D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317D - ,simpleLowerCaseMapping:0x317D - ,simpleTitleCaseMapping:0x317D - }, - { code:0x317E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317E - ,simpleLowerCaseMapping:0x317E - ,simpleTitleCaseMapping:0x317E - }, - { code:0x317F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x317F - ,simpleLowerCaseMapping:0x317F - ,simpleTitleCaseMapping:0x317F - }, - { code:0x3180 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3180 - ,simpleLowerCaseMapping:0x3180 - ,simpleTitleCaseMapping:0x3180 - }, - { code:0x3181 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3181 - ,simpleLowerCaseMapping:0x3181 - ,simpleTitleCaseMapping:0x3181 - }, - { code:0x3182 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3182 - ,simpleLowerCaseMapping:0x3182 - ,simpleTitleCaseMapping:0x3182 - }, - { code:0x3183 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3183 - ,simpleLowerCaseMapping:0x3183 - ,simpleTitleCaseMapping:0x3183 - }, - { code:0x3184 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3184 - ,simpleLowerCaseMapping:0x3184 - ,simpleTitleCaseMapping:0x3184 - }, - { code:0x3185 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3185 - ,simpleLowerCaseMapping:0x3185 - ,simpleTitleCaseMapping:0x3185 - }, - { code:0x3186 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3186 - ,simpleLowerCaseMapping:0x3186 - ,simpleTitleCaseMapping:0x3186 - }, - { code:0x3187 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3187 - ,simpleLowerCaseMapping:0x3187 - ,simpleTitleCaseMapping:0x3187 - }, - { code:0x3188 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3188 - ,simpleLowerCaseMapping:0x3188 - ,simpleTitleCaseMapping:0x3188 - }, - { code:0x3189 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3189 - ,simpleLowerCaseMapping:0x3189 - ,simpleTitleCaseMapping:0x3189 - }, - { code:0x318A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x318A - ,simpleLowerCaseMapping:0x318A - ,simpleTitleCaseMapping:0x318A - }, - { code:0x318B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x318B - ,simpleLowerCaseMapping:0x318B - ,simpleTitleCaseMapping:0x318B - }, - { code:0x318C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x318C - ,simpleLowerCaseMapping:0x318C - ,simpleTitleCaseMapping:0x318C - }, - { code:0x318D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x318D - ,simpleLowerCaseMapping:0x318D - ,simpleTitleCaseMapping:0x318D - }, - { code:0x318E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x318E - ,simpleLowerCaseMapping:0x318E - ,simpleTitleCaseMapping:0x318E - }, - { code:0x3190 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3190 - ,simpleLowerCaseMapping:0x3190 - ,simpleTitleCaseMapping:0x3190 - }, - { code:0x3191 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3191 - ,simpleLowerCaseMapping:0x3191 - ,simpleTitleCaseMapping:0x3191 - }, - { code:0x3192 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3192 - ,simpleLowerCaseMapping:0x3192 - ,simpleTitleCaseMapping:0x3192 - }, - { code:0x3193 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3193 - ,simpleLowerCaseMapping:0x3193 - ,simpleTitleCaseMapping:0x3193 - }, - { code:0x3194 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3194 - ,simpleLowerCaseMapping:0x3194 - ,simpleTitleCaseMapping:0x3194 - }, - { code:0x3195 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3195 - ,simpleLowerCaseMapping:0x3195 - ,simpleTitleCaseMapping:0x3195 - }, - { code:0x3196 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3196 - ,simpleLowerCaseMapping:0x3196 - ,simpleTitleCaseMapping:0x3196 - }, - { code:0x3197 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3197 - ,simpleLowerCaseMapping:0x3197 - ,simpleTitleCaseMapping:0x3197 - }, - { code:0x3198 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3198 - ,simpleLowerCaseMapping:0x3198 - ,simpleTitleCaseMapping:0x3198 - }, - { code:0x3199 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3199 - ,simpleLowerCaseMapping:0x3199 - ,simpleTitleCaseMapping:0x3199 - }, - { code:0x319A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319A - ,simpleLowerCaseMapping:0x319A - ,simpleTitleCaseMapping:0x319A - }, - { code:0x319B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319B - ,simpleLowerCaseMapping:0x319B - ,simpleTitleCaseMapping:0x319B - }, - { code:0x319C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319C - ,simpleLowerCaseMapping:0x319C - ,simpleTitleCaseMapping:0x319C - }, - { code:0x319D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319D - ,simpleLowerCaseMapping:0x319D - ,simpleTitleCaseMapping:0x319D - }, - { code:0x319E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319E - ,simpleLowerCaseMapping:0x319E - ,simpleTitleCaseMapping:0x319E - }, - { code:0x319F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x319F - ,simpleLowerCaseMapping:0x319F - ,simpleTitleCaseMapping:0x319F - }, - { code:0x31A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A0 - ,simpleLowerCaseMapping:0x31A0 - ,simpleTitleCaseMapping:0x31A0 - }, - { code:0x31A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A1 - ,simpleLowerCaseMapping:0x31A1 - ,simpleTitleCaseMapping:0x31A1 - }, - { code:0x31A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A2 - ,simpleLowerCaseMapping:0x31A2 - ,simpleTitleCaseMapping:0x31A2 - }, - { code:0x31A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A3 - ,simpleLowerCaseMapping:0x31A3 - ,simpleTitleCaseMapping:0x31A3 - }, - { code:0x31A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A4 - ,simpleLowerCaseMapping:0x31A4 - ,simpleTitleCaseMapping:0x31A4 - }, - { code:0x31A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A5 - ,simpleLowerCaseMapping:0x31A5 - ,simpleTitleCaseMapping:0x31A5 - }, - { code:0x31A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A6 - ,simpleLowerCaseMapping:0x31A6 - ,simpleTitleCaseMapping:0x31A6 - }, - { code:0x31A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A7 - ,simpleLowerCaseMapping:0x31A7 - ,simpleTitleCaseMapping:0x31A7 - }, - { code:0x31A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A8 - ,simpleLowerCaseMapping:0x31A8 - ,simpleTitleCaseMapping:0x31A8 - }, - { code:0x31A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31A9 - ,simpleLowerCaseMapping:0x31A9 - ,simpleTitleCaseMapping:0x31A9 - }, - { code:0x31AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AA - ,simpleLowerCaseMapping:0x31AA - ,simpleTitleCaseMapping:0x31AA - }, - { code:0x31AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AB - ,simpleLowerCaseMapping:0x31AB - ,simpleTitleCaseMapping:0x31AB - }, - { code:0x31AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AC - ,simpleLowerCaseMapping:0x31AC - ,simpleTitleCaseMapping:0x31AC - }, - { code:0x31AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AD - ,simpleLowerCaseMapping:0x31AD - ,simpleTitleCaseMapping:0x31AD - }, - { code:0x31AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AE - ,simpleLowerCaseMapping:0x31AE - ,simpleTitleCaseMapping:0x31AE - }, - { code:0x31AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31AF - ,simpleLowerCaseMapping:0x31AF - ,simpleTitleCaseMapping:0x31AF - }, - { code:0x31B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B0 - ,simpleLowerCaseMapping:0x31B0 - ,simpleTitleCaseMapping:0x31B0 - }, - { code:0x31B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B1 - ,simpleLowerCaseMapping:0x31B1 - ,simpleTitleCaseMapping:0x31B1 - }, - { code:0x31B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B2 - ,simpleLowerCaseMapping:0x31B2 - ,simpleTitleCaseMapping:0x31B2 - }, - { code:0x31B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B3 - ,simpleLowerCaseMapping:0x31B3 - ,simpleTitleCaseMapping:0x31B3 - }, - { code:0x31B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B4 - ,simpleLowerCaseMapping:0x31B4 - ,simpleTitleCaseMapping:0x31B4 - }, - { code:0x31B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B5 - ,simpleLowerCaseMapping:0x31B5 - ,simpleTitleCaseMapping:0x31B5 - }, - { code:0x31B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B6 - ,simpleLowerCaseMapping:0x31B6 - ,simpleTitleCaseMapping:0x31B6 - }, - { code:0x31B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31B7 - ,simpleLowerCaseMapping:0x31B7 - ,simpleTitleCaseMapping:0x31B7 - }, - { code:0x31C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C0 - ,simpleLowerCaseMapping:0x31C0 - ,simpleTitleCaseMapping:0x31C0 - }, - { code:0x31C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C1 - ,simpleLowerCaseMapping:0x31C1 - ,simpleTitleCaseMapping:0x31C1 - }, - { code:0x31C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C2 - ,simpleLowerCaseMapping:0x31C2 - ,simpleTitleCaseMapping:0x31C2 - }, - { code:0x31C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C3 - ,simpleLowerCaseMapping:0x31C3 - ,simpleTitleCaseMapping:0x31C3 - }, - { code:0x31C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C4 - ,simpleLowerCaseMapping:0x31C4 - ,simpleTitleCaseMapping:0x31C4 - }, - { code:0x31C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C5 - ,simpleLowerCaseMapping:0x31C5 - ,simpleTitleCaseMapping:0x31C5 - }, - { code:0x31C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C6 - ,simpleLowerCaseMapping:0x31C6 - ,simpleTitleCaseMapping:0x31C6 - }, - { code:0x31C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C7 - ,simpleLowerCaseMapping:0x31C7 - ,simpleTitleCaseMapping:0x31C7 - }, - { code:0x31C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C8 - ,simpleLowerCaseMapping:0x31C8 - ,simpleTitleCaseMapping:0x31C8 - }, - { code:0x31C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31C9 - ,simpleLowerCaseMapping:0x31C9 - ,simpleTitleCaseMapping:0x31C9 - }, - { code:0x31CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CA - ,simpleLowerCaseMapping:0x31CA - ,simpleTitleCaseMapping:0x31CA - }, - { code:0x31CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CB - ,simpleLowerCaseMapping:0x31CB - ,simpleTitleCaseMapping:0x31CB - }, - { code:0x31CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CC - ,simpleLowerCaseMapping:0x31CC - ,simpleTitleCaseMapping:0x31CC - }, - { code:0x31CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CD - ,simpleLowerCaseMapping:0x31CD - ,simpleTitleCaseMapping:0x31CD - }, - { code:0x31CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CE - ,simpleLowerCaseMapping:0x31CE - ,simpleTitleCaseMapping:0x31CE - }, - { code:0x31CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x31CF - ,simpleLowerCaseMapping:0x31CF - ,simpleTitleCaseMapping:0x31CF - }, - { code:0x31F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F0 - ,simpleLowerCaseMapping:0x31F0 - ,simpleTitleCaseMapping:0x31F0 - }, - { code:0x31F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F1 - ,simpleLowerCaseMapping:0x31F1 - ,simpleTitleCaseMapping:0x31F1 - }, - { code:0x31F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F2 - ,simpleLowerCaseMapping:0x31F2 - ,simpleTitleCaseMapping:0x31F2 - }, - { code:0x31F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F3 - ,simpleLowerCaseMapping:0x31F3 - ,simpleTitleCaseMapping:0x31F3 - }, - { code:0x31F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F4 - ,simpleLowerCaseMapping:0x31F4 - ,simpleTitleCaseMapping:0x31F4 - }, - { code:0x31F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F5 - ,simpleLowerCaseMapping:0x31F5 - ,simpleTitleCaseMapping:0x31F5 - }, - { code:0x31F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F6 - ,simpleLowerCaseMapping:0x31F6 - ,simpleTitleCaseMapping:0x31F6 - }, - { code:0x31F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F7 - ,simpleLowerCaseMapping:0x31F7 - ,simpleTitleCaseMapping:0x31F7 - }, - { code:0x31F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F8 - ,simpleLowerCaseMapping:0x31F8 - ,simpleTitleCaseMapping:0x31F8 - }, - { code:0x31F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31F9 - ,simpleLowerCaseMapping:0x31F9 - ,simpleTitleCaseMapping:0x31F9 - }, - { code:0x31FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FA - ,simpleLowerCaseMapping:0x31FA - ,simpleTitleCaseMapping:0x31FA - }, - { code:0x31FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FB - ,simpleLowerCaseMapping:0x31FB - ,simpleTitleCaseMapping:0x31FB - }, - { code:0x31FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FC - ,simpleLowerCaseMapping:0x31FC - ,simpleTitleCaseMapping:0x31FC - }, - { code:0x31FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FD - ,simpleLowerCaseMapping:0x31FD - ,simpleTitleCaseMapping:0x31FD - }, - { code:0x31FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FE - ,simpleLowerCaseMapping:0x31FE - ,simpleTitleCaseMapping:0x31FE - }, - { code:0x31FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x31FF - ,simpleLowerCaseMapping:0x31FF - ,simpleTitleCaseMapping:0x31FF - }, - { code:0x3200 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3200 - ,simpleLowerCaseMapping:0x3200 - ,simpleTitleCaseMapping:0x3200 - }, - { code:0x3201 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3201 - ,simpleLowerCaseMapping:0x3201 - ,simpleTitleCaseMapping:0x3201 - }, - { code:0x3202 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3202 - ,simpleLowerCaseMapping:0x3202 - ,simpleTitleCaseMapping:0x3202 - }, - { code:0x3203 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3203 - ,simpleLowerCaseMapping:0x3203 - ,simpleTitleCaseMapping:0x3203 - }, - { code:0x3204 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3204 - ,simpleLowerCaseMapping:0x3204 - ,simpleTitleCaseMapping:0x3204 - }, - { code:0x3205 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3205 - ,simpleLowerCaseMapping:0x3205 - ,simpleTitleCaseMapping:0x3205 - }, - { code:0x3206 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3206 - ,simpleLowerCaseMapping:0x3206 - ,simpleTitleCaseMapping:0x3206 - }, - { code:0x3207 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3207 - ,simpleLowerCaseMapping:0x3207 - ,simpleTitleCaseMapping:0x3207 - }, - { code:0x3208 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3208 - ,simpleLowerCaseMapping:0x3208 - ,simpleTitleCaseMapping:0x3208 - }, - { code:0x3209 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3209 - ,simpleLowerCaseMapping:0x3209 - ,simpleTitleCaseMapping:0x3209 - }, - { code:0x320A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320A - ,simpleLowerCaseMapping:0x320A - ,simpleTitleCaseMapping:0x320A - }, - { code:0x320B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320B - ,simpleLowerCaseMapping:0x320B - ,simpleTitleCaseMapping:0x320B - }, - { code:0x320C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320C - ,simpleLowerCaseMapping:0x320C - ,simpleTitleCaseMapping:0x320C - }, - { code:0x320D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320D - ,simpleLowerCaseMapping:0x320D - ,simpleTitleCaseMapping:0x320D - }, - { code:0x320E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320E - ,simpleLowerCaseMapping:0x320E - ,simpleTitleCaseMapping:0x320E - }, - { code:0x320F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x320F - ,simpleLowerCaseMapping:0x320F - ,simpleTitleCaseMapping:0x320F - }, - { code:0x3210 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3210 - ,simpleLowerCaseMapping:0x3210 - ,simpleTitleCaseMapping:0x3210 - }, - { code:0x3211 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3211 - ,simpleLowerCaseMapping:0x3211 - ,simpleTitleCaseMapping:0x3211 - }, - { code:0x3212 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3212 - ,simpleLowerCaseMapping:0x3212 - ,simpleTitleCaseMapping:0x3212 - }, - { code:0x3213 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3213 - ,simpleLowerCaseMapping:0x3213 - ,simpleTitleCaseMapping:0x3213 - }, - { code:0x3214 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3214 - ,simpleLowerCaseMapping:0x3214 - ,simpleTitleCaseMapping:0x3214 - }, - { code:0x3215 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3215 - ,simpleLowerCaseMapping:0x3215 - ,simpleTitleCaseMapping:0x3215 - }, - { code:0x3216 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3216 - ,simpleLowerCaseMapping:0x3216 - ,simpleTitleCaseMapping:0x3216 - }, - { code:0x3217 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3217 - ,simpleLowerCaseMapping:0x3217 - ,simpleTitleCaseMapping:0x3217 - }, - { code:0x3218 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3218 - ,simpleLowerCaseMapping:0x3218 - ,simpleTitleCaseMapping:0x3218 - }, - { code:0x3219 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3219 - ,simpleLowerCaseMapping:0x3219 - ,simpleTitleCaseMapping:0x3219 - }, - { code:0x321A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x321A - ,simpleLowerCaseMapping:0x321A - ,simpleTitleCaseMapping:0x321A - }, - { code:0x321B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x321B - ,simpleLowerCaseMapping:0x321B - ,simpleTitleCaseMapping:0x321B - }, - { code:0x321C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x321C - ,simpleLowerCaseMapping:0x321C - ,simpleTitleCaseMapping:0x321C - }, - { code:0x321D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x321D - ,simpleLowerCaseMapping:0x321D - ,simpleTitleCaseMapping:0x321D - }, - { code:0x321E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x321E - ,simpleLowerCaseMapping:0x321E - ,simpleTitleCaseMapping:0x321E - }, - { code:0x3220 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3220 - ,simpleLowerCaseMapping:0x3220 - ,simpleTitleCaseMapping:0x3220 - }, - { code:0x3221 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3221 - ,simpleLowerCaseMapping:0x3221 - ,simpleTitleCaseMapping:0x3221 - }, - { code:0x3222 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3222 - ,simpleLowerCaseMapping:0x3222 - ,simpleTitleCaseMapping:0x3222 - }, - { code:0x3223 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3223 - ,simpleLowerCaseMapping:0x3223 - ,simpleTitleCaseMapping:0x3223 - }, - { code:0x3224 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3224 - ,simpleLowerCaseMapping:0x3224 - ,simpleTitleCaseMapping:0x3224 - }, - { code:0x3225 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3225 - ,simpleLowerCaseMapping:0x3225 - ,simpleTitleCaseMapping:0x3225 - }, - { code:0x3226 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3226 - ,simpleLowerCaseMapping:0x3226 - ,simpleTitleCaseMapping:0x3226 - }, - { code:0x3227 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3227 - ,simpleLowerCaseMapping:0x3227 - ,simpleTitleCaseMapping:0x3227 - }, - { code:0x3228 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3228 - ,simpleLowerCaseMapping:0x3228 - ,simpleTitleCaseMapping:0x3228 - }, - { code:0x3229 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3229 - ,simpleLowerCaseMapping:0x3229 - ,simpleTitleCaseMapping:0x3229 - }, - { code:0x322A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322A - ,simpleLowerCaseMapping:0x322A - ,simpleTitleCaseMapping:0x322A - }, - { code:0x322B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322B - ,simpleLowerCaseMapping:0x322B - ,simpleTitleCaseMapping:0x322B - }, - { code:0x322C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322C - ,simpleLowerCaseMapping:0x322C - ,simpleTitleCaseMapping:0x322C - }, - { code:0x322D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322D - ,simpleLowerCaseMapping:0x322D - ,simpleTitleCaseMapping:0x322D - }, - { code:0x322E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322E - ,simpleLowerCaseMapping:0x322E - ,simpleTitleCaseMapping:0x322E - }, - { code:0x322F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x322F - ,simpleLowerCaseMapping:0x322F - ,simpleTitleCaseMapping:0x322F - }, - { code:0x3230 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3230 - ,simpleLowerCaseMapping:0x3230 - ,simpleTitleCaseMapping:0x3230 - }, - { code:0x3231 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3231 - ,simpleLowerCaseMapping:0x3231 - ,simpleTitleCaseMapping:0x3231 - }, - { code:0x3232 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3232 - ,simpleLowerCaseMapping:0x3232 - ,simpleTitleCaseMapping:0x3232 - }, - { code:0x3233 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3233 - ,simpleLowerCaseMapping:0x3233 - ,simpleTitleCaseMapping:0x3233 - }, - { code:0x3234 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3234 - ,simpleLowerCaseMapping:0x3234 - ,simpleTitleCaseMapping:0x3234 - }, - { code:0x3235 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3235 - ,simpleLowerCaseMapping:0x3235 - ,simpleTitleCaseMapping:0x3235 - }, - { code:0x3236 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3236 - ,simpleLowerCaseMapping:0x3236 - ,simpleTitleCaseMapping:0x3236 - }, - { code:0x3237 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3237 - ,simpleLowerCaseMapping:0x3237 - ,simpleTitleCaseMapping:0x3237 - }, - { code:0x3238 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3238 - ,simpleLowerCaseMapping:0x3238 - ,simpleTitleCaseMapping:0x3238 - }, - { code:0x3239 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3239 - ,simpleLowerCaseMapping:0x3239 - ,simpleTitleCaseMapping:0x3239 - }, - { code:0x323A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323A - ,simpleLowerCaseMapping:0x323A - ,simpleTitleCaseMapping:0x323A - }, - { code:0x323B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323B - ,simpleLowerCaseMapping:0x323B - ,simpleTitleCaseMapping:0x323B - }, - { code:0x323C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323C - ,simpleLowerCaseMapping:0x323C - ,simpleTitleCaseMapping:0x323C - }, - { code:0x323D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323D - ,simpleLowerCaseMapping:0x323D - ,simpleTitleCaseMapping:0x323D - }, - { code:0x323E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323E - ,simpleLowerCaseMapping:0x323E - ,simpleTitleCaseMapping:0x323E - }, - { code:0x323F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x323F - ,simpleLowerCaseMapping:0x323F - ,simpleTitleCaseMapping:0x323F - }, - { code:0x3240 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3240 - ,simpleLowerCaseMapping:0x3240 - ,simpleTitleCaseMapping:0x3240 - }, - { code:0x3241 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3241 - ,simpleLowerCaseMapping:0x3241 - ,simpleTitleCaseMapping:0x3241 - }, - { code:0x3242 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3242 - ,simpleLowerCaseMapping:0x3242 - ,simpleTitleCaseMapping:0x3242 - }, - { code:0x3243 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3243 - ,simpleLowerCaseMapping:0x3243 - ,simpleTitleCaseMapping:0x3243 - }, - { code:0x3250 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3250 - ,simpleLowerCaseMapping:0x3250 - ,simpleTitleCaseMapping:0x3250 - }, - { code:0x3251 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3251 - ,simpleLowerCaseMapping:0x3251 - ,simpleTitleCaseMapping:0x3251 - }, - { code:0x3252 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3252 - ,simpleLowerCaseMapping:0x3252 - ,simpleTitleCaseMapping:0x3252 - }, - { code:0x3253 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3253 - ,simpleLowerCaseMapping:0x3253 - ,simpleTitleCaseMapping:0x3253 - }, - { code:0x3254 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3254 - ,simpleLowerCaseMapping:0x3254 - ,simpleTitleCaseMapping:0x3254 - }, - { code:0x3255 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3255 - ,simpleLowerCaseMapping:0x3255 - ,simpleTitleCaseMapping:0x3255 - }, - { code:0x3256 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3256 - ,simpleLowerCaseMapping:0x3256 - ,simpleTitleCaseMapping:0x3256 - }, - { code:0x3257 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3257 - ,simpleLowerCaseMapping:0x3257 - ,simpleTitleCaseMapping:0x3257 - }, - { code:0x3258 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3258 - ,simpleLowerCaseMapping:0x3258 - ,simpleTitleCaseMapping:0x3258 - }, - { code:0x3259 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3259 - ,simpleLowerCaseMapping:0x3259 - ,simpleTitleCaseMapping:0x3259 - }, - { code:0x325A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325A - ,simpleLowerCaseMapping:0x325A - ,simpleTitleCaseMapping:0x325A - }, - { code:0x325B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325B - ,simpleLowerCaseMapping:0x325B - ,simpleTitleCaseMapping:0x325B - }, - { code:0x325C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325C - ,simpleLowerCaseMapping:0x325C - ,simpleTitleCaseMapping:0x325C - }, - { code:0x325D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325D - ,simpleLowerCaseMapping:0x325D - ,simpleTitleCaseMapping:0x325D - }, - { code:0x325E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325E - ,simpleLowerCaseMapping:0x325E - ,simpleTitleCaseMapping:0x325E - }, - { code:0x325F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x325F - ,simpleLowerCaseMapping:0x325F - ,simpleTitleCaseMapping:0x325F - }, - { code:0x3260 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3260 - ,simpleLowerCaseMapping:0x3260 - ,simpleTitleCaseMapping:0x3260 - }, - { code:0x3261 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3261 - ,simpleLowerCaseMapping:0x3261 - ,simpleTitleCaseMapping:0x3261 - }, - { code:0x3262 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3262 - ,simpleLowerCaseMapping:0x3262 - ,simpleTitleCaseMapping:0x3262 - }, - { code:0x3263 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3263 - ,simpleLowerCaseMapping:0x3263 - ,simpleTitleCaseMapping:0x3263 - }, - { code:0x3264 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3264 - ,simpleLowerCaseMapping:0x3264 - ,simpleTitleCaseMapping:0x3264 - }, - { code:0x3265 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3265 - ,simpleLowerCaseMapping:0x3265 - ,simpleTitleCaseMapping:0x3265 - }, - { code:0x3266 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3266 - ,simpleLowerCaseMapping:0x3266 - ,simpleTitleCaseMapping:0x3266 - }, - { code:0x3267 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3267 - ,simpleLowerCaseMapping:0x3267 - ,simpleTitleCaseMapping:0x3267 - }, - { code:0x3268 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3268 - ,simpleLowerCaseMapping:0x3268 - ,simpleTitleCaseMapping:0x3268 - }, - { code:0x3269 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3269 - ,simpleLowerCaseMapping:0x3269 - ,simpleTitleCaseMapping:0x3269 - }, - { code:0x326A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326A - ,simpleLowerCaseMapping:0x326A - ,simpleTitleCaseMapping:0x326A - }, - { code:0x326B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326B - ,simpleLowerCaseMapping:0x326B - ,simpleTitleCaseMapping:0x326B - }, - { code:0x326C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326C - ,simpleLowerCaseMapping:0x326C - ,simpleTitleCaseMapping:0x326C - }, - { code:0x326D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326D - ,simpleLowerCaseMapping:0x326D - ,simpleTitleCaseMapping:0x326D - }, - { code:0x326E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326E - ,simpleLowerCaseMapping:0x326E - ,simpleTitleCaseMapping:0x326E - }, - { code:0x326F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x326F - ,simpleLowerCaseMapping:0x326F - ,simpleTitleCaseMapping:0x326F - }, - { code:0x3270 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3270 - ,simpleLowerCaseMapping:0x3270 - ,simpleTitleCaseMapping:0x3270 - }, - { code:0x3271 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3271 - ,simpleLowerCaseMapping:0x3271 - ,simpleTitleCaseMapping:0x3271 - }, - { code:0x3272 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3272 - ,simpleLowerCaseMapping:0x3272 - ,simpleTitleCaseMapping:0x3272 - }, - { code:0x3273 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3273 - ,simpleLowerCaseMapping:0x3273 - ,simpleTitleCaseMapping:0x3273 - }, - { code:0x3274 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3274 - ,simpleLowerCaseMapping:0x3274 - ,simpleTitleCaseMapping:0x3274 - }, - { code:0x3275 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3275 - ,simpleLowerCaseMapping:0x3275 - ,simpleTitleCaseMapping:0x3275 - }, - { code:0x3276 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3276 - ,simpleLowerCaseMapping:0x3276 - ,simpleTitleCaseMapping:0x3276 - }, - { code:0x3277 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3277 - ,simpleLowerCaseMapping:0x3277 - ,simpleTitleCaseMapping:0x3277 - }, - { code:0x3278 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3278 - ,simpleLowerCaseMapping:0x3278 - ,simpleTitleCaseMapping:0x3278 - }, - { code:0x3279 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3279 - ,simpleLowerCaseMapping:0x3279 - ,simpleTitleCaseMapping:0x3279 - }, - { code:0x327A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327A - ,simpleLowerCaseMapping:0x327A - ,simpleTitleCaseMapping:0x327A - }, - { code:0x327B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327B - ,simpleLowerCaseMapping:0x327B - ,simpleTitleCaseMapping:0x327B - }, - { code:0x327C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327C - ,simpleLowerCaseMapping:0x327C - ,simpleTitleCaseMapping:0x327C - }, - { code:0x327D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327D - ,simpleLowerCaseMapping:0x327D - ,simpleTitleCaseMapping:0x327D - }, - { code:0x327E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327E - ,simpleLowerCaseMapping:0x327E - ,simpleTitleCaseMapping:0x327E - }, - { code:0x327F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x327F - ,simpleLowerCaseMapping:0x327F - ,simpleTitleCaseMapping:0x327F - }, - { code:0x3280 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3280 - ,simpleLowerCaseMapping:0x3280 - ,simpleTitleCaseMapping:0x3280 - }, - { code:0x3281 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3281 - ,simpleLowerCaseMapping:0x3281 - ,simpleTitleCaseMapping:0x3281 - }, - { code:0x3282 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3282 - ,simpleLowerCaseMapping:0x3282 - ,simpleTitleCaseMapping:0x3282 - }, - { code:0x3283 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3283 - ,simpleLowerCaseMapping:0x3283 - ,simpleTitleCaseMapping:0x3283 - }, - { code:0x3284 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3284 - ,simpleLowerCaseMapping:0x3284 - ,simpleTitleCaseMapping:0x3284 - }, - { code:0x3285 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3285 - ,simpleLowerCaseMapping:0x3285 - ,simpleTitleCaseMapping:0x3285 - }, - { code:0x3286 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3286 - ,simpleLowerCaseMapping:0x3286 - ,simpleTitleCaseMapping:0x3286 - }, - { code:0x3287 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3287 - ,simpleLowerCaseMapping:0x3287 - ,simpleTitleCaseMapping:0x3287 - }, - { code:0x3288 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3288 - ,simpleLowerCaseMapping:0x3288 - ,simpleTitleCaseMapping:0x3288 - }, - { code:0x3289 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x3289 - ,simpleLowerCaseMapping:0x3289 - ,simpleTitleCaseMapping:0x3289 - }, - { code:0x328A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328A - ,simpleLowerCaseMapping:0x328A - ,simpleTitleCaseMapping:0x328A - }, - { code:0x328B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328B - ,simpleLowerCaseMapping:0x328B - ,simpleTitleCaseMapping:0x328B - }, - { code:0x328C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328C - ,simpleLowerCaseMapping:0x328C - ,simpleTitleCaseMapping:0x328C - }, - { code:0x328D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328D - ,simpleLowerCaseMapping:0x328D - ,simpleTitleCaseMapping:0x328D - }, - { code:0x328E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328E - ,simpleLowerCaseMapping:0x328E - ,simpleTitleCaseMapping:0x328E - }, - { code:0x328F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x328F - ,simpleLowerCaseMapping:0x328F - ,simpleTitleCaseMapping:0x328F - }, - { code:0x3290 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3290 - ,simpleLowerCaseMapping:0x3290 - ,simpleTitleCaseMapping:0x3290 - }, - { code:0x3291 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3291 - ,simpleLowerCaseMapping:0x3291 - ,simpleTitleCaseMapping:0x3291 - }, - { code:0x3292 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3292 - ,simpleLowerCaseMapping:0x3292 - ,simpleTitleCaseMapping:0x3292 - }, - { code:0x3293 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3293 - ,simpleLowerCaseMapping:0x3293 - ,simpleTitleCaseMapping:0x3293 - }, - { code:0x3294 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3294 - ,simpleLowerCaseMapping:0x3294 - ,simpleTitleCaseMapping:0x3294 - }, - { code:0x3295 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3295 - ,simpleLowerCaseMapping:0x3295 - ,simpleTitleCaseMapping:0x3295 - }, - { code:0x3296 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3296 - ,simpleLowerCaseMapping:0x3296 - ,simpleTitleCaseMapping:0x3296 - }, - { code:0x3297 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3297 - ,simpleLowerCaseMapping:0x3297 - ,simpleTitleCaseMapping:0x3297 - }, - { code:0x3298 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3298 - ,simpleLowerCaseMapping:0x3298 - ,simpleTitleCaseMapping:0x3298 - }, - { code:0x3299 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3299 - ,simpleLowerCaseMapping:0x3299 - ,simpleTitleCaseMapping:0x3299 - }, - { code:0x329A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329A - ,simpleLowerCaseMapping:0x329A - ,simpleTitleCaseMapping:0x329A - }, - { code:0x329B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329B - ,simpleLowerCaseMapping:0x329B - ,simpleTitleCaseMapping:0x329B - }, - { code:0x329C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329C - ,simpleLowerCaseMapping:0x329C - ,simpleTitleCaseMapping:0x329C - }, - { code:0x329D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329D - ,simpleLowerCaseMapping:0x329D - ,simpleTitleCaseMapping:0x329D - }, - { code:0x329E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329E - ,simpleLowerCaseMapping:0x329E - ,simpleTitleCaseMapping:0x329E - }, - { code:0x329F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x329F - ,simpleLowerCaseMapping:0x329F - ,simpleTitleCaseMapping:0x329F - }, - { code:0x32A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A0 - ,simpleLowerCaseMapping:0x32A0 - ,simpleTitleCaseMapping:0x32A0 - }, - { code:0x32A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A1 - ,simpleLowerCaseMapping:0x32A1 - ,simpleTitleCaseMapping:0x32A1 - }, - { code:0x32A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A2 - ,simpleLowerCaseMapping:0x32A2 - ,simpleTitleCaseMapping:0x32A2 - }, - { code:0x32A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A3 - ,simpleLowerCaseMapping:0x32A3 - ,simpleTitleCaseMapping:0x32A3 - }, - { code:0x32A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A4 - ,simpleLowerCaseMapping:0x32A4 - ,simpleTitleCaseMapping:0x32A4 - }, - { code:0x32A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A5 - ,simpleLowerCaseMapping:0x32A5 - ,simpleTitleCaseMapping:0x32A5 - }, - { code:0x32A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A6 - ,simpleLowerCaseMapping:0x32A6 - ,simpleTitleCaseMapping:0x32A6 - }, - { code:0x32A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A7 - ,simpleLowerCaseMapping:0x32A7 - ,simpleTitleCaseMapping:0x32A7 - }, - { code:0x32A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A8 - ,simpleLowerCaseMapping:0x32A8 - ,simpleTitleCaseMapping:0x32A8 - }, - { code:0x32A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32A9 - ,simpleLowerCaseMapping:0x32A9 - ,simpleTitleCaseMapping:0x32A9 - }, - { code:0x32AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AA - ,simpleLowerCaseMapping:0x32AA - ,simpleTitleCaseMapping:0x32AA - }, - { code:0x32AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AB - ,simpleLowerCaseMapping:0x32AB - ,simpleTitleCaseMapping:0x32AB - }, - { code:0x32AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AC - ,simpleLowerCaseMapping:0x32AC - ,simpleTitleCaseMapping:0x32AC - }, - { code:0x32AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AD - ,simpleLowerCaseMapping:0x32AD - ,simpleTitleCaseMapping:0x32AD - }, - { code:0x32AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AE - ,simpleLowerCaseMapping:0x32AE - ,simpleTitleCaseMapping:0x32AE - }, - { code:0x32AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32AF - ,simpleLowerCaseMapping:0x32AF - ,simpleTitleCaseMapping:0x32AF - }, - { code:0x32B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32B0 - ,simpleLowerCaseMapping:0x32B0 - ,simpleTitleCaseMapping:0x32B0 - }, - { code:0x32B1 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B1 - ,simpleLowerCaseMapping:0x32B1 - ,simpleTitleCaseMapping:0x32B1 - }, - { code:0x32B2 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B2 - ,simpleLowerCaseMapping:0x32B2 - ,simpleTitleCaseMapping:0x32B2 - }, - { code:0x32B3 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B3 - ,simpleLowerCaseMapping:0x32B3 - ,simpleTitleCaseMapping:0x32B3 - }, - { code:0x32B4 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B4 - ,simpleLowerCaseMapping:0x32B4 - ,simpleTitleCaseMapping:0x32B4 - }, - { code:0x32B5 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B5 - ,simpleLowerCaseMapping:0x32B5 - ,simpleTitleCaseMapping:0x32B5 - }, - { code:0x32B6 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B6 - ,simpleLowerCaseMapping:0x32B6 - ,simpleTitleCaseMapping:0x32B6 - }, - { code:0x32B7 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B7 - ,simpleLowerCaseMapping:0x32B7 - ,simpleTitleCaseMapping:0x32B7 - }, - { code:0x32B8 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B8 - ,simpleLowerCaseMapping:0x32B8 - ,simpleTitleCaseMapping:0x32B8 - }, - { code:0x32B9 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32B9 - ,simpleLowerCaseMapping:0x32B9 - ,simpleTitleCaseMapping:0x32B9 - }, - { code:0x32BA - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BA - ,simpleLowerCaseMapping:0x32BA - ,simpleTitleCaseMapping:0x32BA - }, - { code:0x32BB - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BB - ,simpleLowerCaseMapping:0x32BB - ,simpleTitleCaseMapping:0x32BB - }, - { code:0x32BC - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BC - ,simpleLowerCaseMapping:0x32BC - ,simpleTitleCaseMapping:0x32BC - }, - { code:0x32BD - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BD - ,simpleLowerCaseMapping:0x32BD - ,simpleTitleCaseMapping:0x32BD - }, - { code:0x32BE - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BE - ,simpleLowerCaseMapping:0x32BE - ,simpleTitleCaseMapping:0x32BE - }, - { code:0x32BF - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x32BF - ,simpleLowerCaseMapping:0x32BF - ,simpleTitleCaseMapping:0x32BF - }, - { code:0x32C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C0 - ,simpleLowerCaseMapping:0x32C0 - ,simpleTitleCaseMapping:0x32C0 - }, - { code:0x32C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C1 - ,simpleLowerCaseMapping:0x32C1 - ,simpleTitleCaseMapping:0x32C1 - }, - { code:0x32C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C2 - ,simpleLowerCaseMapping:0x32C2 - ,simpleTitleCaseMapping:0x32C2 - }, - { code:0x32C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C3 - ,simpleLowerCaseMapping:0x32C3 - ,simpleTitleCaseMapping:0x32C3 - }, - { code:0x32C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C4 - ,simpleLowerCaseMapping:0x32C4 - ,simpleTitleCaseMapping:0x32C4 - }, - { code:0x32C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C5 - ,simpleLowerCaseMapping:0x32C5 - ,simpleTitleCaseMapping:0x32C5 - }, - { code:0x32C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C6 - ,simpleLowerCaseMapping:0x32C6 - ,simpleTitleCaseMapping:0x32C6 - }, - { code:0x32C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C7 - ,simpleLowerCaseMapping:0x32C7 - ,simpleTitleCaseMapping:0x32C7 - }, - { code:0x32C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C8 - ,simpleLowerCaseMapping:0x32C8 - ,simpleTitleCaseMapping:0x32C8 - }, - { code:0x32C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32C9 - ,simpleLowerCaseMapping:0x32C9 - ,simpleTitleCaseMapping:0x32C9 - }, - { code:0x32CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CA - ,simpleLowerCaseMapping:0x32CA - ,simpleTitleCaseMapping:0x32CA - }, - { code:0x32CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CB - ,simpleLowerCaseMapping:0x32CB - ,simpleTitleCaseMapping:0x32CB - }, - { code:0x32CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CC - ,simpleLowerCaseMapping:0x32CC - ,simpleTitleCaseMapping:0x32CC - }, - { code:0x32CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CD - ,simpleLowerCaseMapping:0x32CD - ,simpleTitleCaseMapping:0x32CD - }, - { code:0x32CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CE - ,simpleLowerCaseMapping:0x32CE - ,simpleTitleCaseMapping:0x32CE - }, - { code:0x32CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32CF - ,simpleLowerCaseMapping:0x32CF - ,simpleTitleCaseMapping:0x32CF - }, - { code:0x32D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D0 - ,simpleLowerCaseMapping:0x32D0 - ,simpleTitleCaseMapping:0x32D0 - }, - { code:0x32D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D1 - ,simpleLowerCaseMapping:0x32D1 - ,simpleTitleCaseMapping:0x32D1 - }, - { code:0x32D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D2 - ,simpleLowerCaseMapping:0x32D2 - ,simpleTitleCaseMapping:0x32D2 - }, - { code:0x32D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D3 - ,simpleLowerCaseMapping:0x32D3 - ,simpleTitleCaseMapping:0x32D3 - }, - { code:0x32D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D4 - ,simpleLowerCaseMapping:0x32D4 - ,simpleTitleCaseMapping:0x32D4 - }, - { code:0x32D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D5 - ,simpleLowerCaseMapping:0x32D5 - ,simpleTitleCaseMapping:0x32D5 - }, - { code:0x32D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D6 - ,simpleLowerCaseMapping:0x32D6 - ,simpleTitleCaseMapping:0x32D6 - }, - { code:0x32D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D7 - ,simpleLowerCaseMapping:0x32D7 - ,simpleTitleCaseMapping:0x32D7 - }, - { code:0x32D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D8 - ,simpleLowerCaseMapping:0x32D8 - ,simpleTitleCaseMapping:0x32D8 - }, - { code:0x32D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32D9 - ,simpleLowerCaseMapping:0x32D9 - ,simpleTitleCaseMapping:0x32D9 - }, - { code:0x32DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DA - ,simpleLowerCaseMapping:0x32DA - ,simpleTitleCaseMapping:0x32DA - }, - { code:0x32DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DB - ,simpleLowerCaseMapping:0x32DB - ,simpleTitleCaseMapping:0x32DB - }, - { code:0x32DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DC - ,simpleLowerCaseMapping:0x32DC - ,simpleTitleCaseMapping:0x32DC - }, - { code:0x32DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DD - ,simpleLowerCaseMapping:0x32DD - ,simpleTitleCaseMapping:0x32DD - }, - { code:0x32DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DE - ,simpleLowerCaseMapping:0x32DE - ,simpleTitleCaseMapping:0x32DE - }, - { code:0x32DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32DF - ,simpleLowerCaseMapping:0x32DF - ,simpleTitleCaseMapping:0x32DF - }, - { code:0x32E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E0 - ,simpleLowerCaseMapping:0x32E0 - ,simpleTitleCaseMapping:0x32E0 - }, - { code:0x32E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E1 - ,simpleLowerCaseMapping:0x32E1 - ,simpleTitleCaseMapping:0x32E1 - }, - { code:0x32E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E2 - ,simpleLowerCaseMapping:0x32E2 - ,simpleTitleCaseMapping:0x32E2 - }, - { code:0x32E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E3 - ,simpleLowerCaseMapping:0x32E3 - ,simpleTitleCaseMapping:0x32E3 - }, - { code:0x32E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E4 - ,simpleLowerCaseMapping:0x32E4 - ,simpleTitleCaseMapping:0x32E4 - }, - { code:0x32E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E5 - ,simpleLowerCaseMapping:0x32E5 - ,simpleTitleCaseMapping:0x32E5 - }, - { code:0x32E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E6 - ,simpleLowerCaseMapping:0x32E6 - ,simpleTitleCaseMapping:0x32E6 - }, - { code:0x32E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E7 - ,simpleLowerCaseMapping:0x32E7 - ,simpleTitleCaseMapping:0x32E7 - }, - { code:0x32E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E8 - ,simpleLowerCaseMapping:0x32E8 - ,simpleTitleCaseMapping:0x32E8 - }, - { code:0x32E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32E9 - ,simpleLowerCaseMapping:0x32E9 - ,simpleTitleCaseMapping:0x32E9 - }, - { code:0x32EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32EA - ,simpleLowerCaseMapping:0x32EA - ,simpleTitleCaseMapping:0x32EA - }, - { code:0x32EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32EB - ,simpleLowerCaseMapping:0x32EB - ,simpleTitleCaseMapping:0x32EB - }, - { code:0x32EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32EC - ,simpleLowerCaseMapping:0x32EC - ,simpleTitleCaseMapping:0x32EC - }, - { code:0x32ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32ED - ,simpleLowerCaseMapping:0x32ED - ,simpleTitleCaseMapping:0x32ED - }, - { code:0x32EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32EE - ,simpleLowerCaseMapping:0x32EE - ,simpleTitleCaseMapping:0x32EE - }, - { code:0x32EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32EF - ,simpleLowerCaseMapping:0x32EF - ,simpleTitleCaseMapping:0x32EF - }, - { code:0x32F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F0 - ,simpleLowerCaseMapping:0x32F0 - ,simpleTitleCaseMapping:0x32F0 - }, - { code:0x32F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F1 - ,simpleLowerCaseMapping:0x32F1 - ,simpleTitleCaseMapping:0x32F1 - }, - { code:0x32F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F2 - ,simpleLowerCaseMapping:0x32F2 - ,simpleTitleCaseMapping:0x32F2 - }, - { code:0x32F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F3 - ,simpleLowerCaseMapping:0x32F3 - ,simpleTitleCaseMapping:0x32F3 - }, - { code:0x32F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F4 - ,simpleLowerCaseMapping:0x32F4 - ,simpleTitleCaseMapping:0x32F4 - }, - { code:0x32F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F5 - ,simpleLowerCaseMapping:0x32F5 - ,simpleTitleCaseMapping:0x32F5 - }, - { code:0x32F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F6 - ,simpleLowerCaseMapping:0x32F6 - ,simpleTitleCaseMapping:0x32F6 - }, - { code:0x32F7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F7 - ,simpleLowerCaseMapping:0x32F7 - ,simpleTitleCaseMapping:0x32F7 - }, - { code:0x32F8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F8 - ,simpleLowerCaseMapping:0x32F8 - ,simpleTitleCaseMapping:0x32F8 - }, - { code:0x32F9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32F9 - ,simpleLowerCaseMapping:0x32F9 - ,simpleTitleCaseMapping:0x32F9 - }, - { code:0x32FA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32FA - ,simpleLowerCaseMapping:0x32FA - ,simpleTitleCaseMapping:0x32FA - }, - { code:0x32FB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32FB - ,simpleLowerCaseMapping:0x32FB - ,simpleTitleCaseMapping:0x32FB - }, - { code:0x32FC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32FC - ,simpleLowerCaseMapping:0x32FC - ,simpleTitleCaseMapping:0x32FC - }, - { code:0x32FD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32FD - ,simpleLowerCaseMapping:0x32FD - ,simpleTitleCaseMapping:0x32FD - }, - { code:0x32FE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x32FE - ,simpleLowerCaseMapping:0x32FE - ,simpleTitleCaseMapping:0x32FE - }, - { code:0x3300 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3300 - ,simpleLowerCaseMapping:0x3300 - ,simpleTitleCaseMapping:0x3300 - }, - { code:0x3301 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3301 - ,simpleLowerCaseMapping:0x3301 - ,simpleTitleCaseMapping:0x3301 - }, - { code:0x3302 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3302 - ,simpleLowerCaseMapping:0x3302 - ,simpleTitleCaseMapping:0x3302 - }, - { code:0x3303 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3303 - ,simpleLowerCaseMapping:0x3303 - ,simpleTitleCaseMapping:0x3303 - }, - { code:0x3304 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3304 - ,simpleLowerCaseMapping:0x3304 - ,simpleTitleCaseMapping:0x3304 - }, - { code:0x3305 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3305 - ,simpleLowerCaseMapping:0x3305 - ,simpleTitleCaseMapping:0x3305 - }, - { code:0x3306 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3306 - ,simpleLowerCaseMapping:0x3306 - ,simpleTitleCaseMapping:0x3306 - }, - { code:0x3307 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3307 - ,simpleLowerCaseMapping:0x3307 - ,simpleTitleCaseMapping:0x3307 - }, - { code:0x3308 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3308 - ,simpleLowerCaseMapping:0x3308 - ,simpleTitleCaseMapping:0x3308 - }, - { code:0x3309 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3309 - ,simpleLowerCaseMapping:0x3309 - ,simpleTitleCaseMapping:0x3309 - }, - { code:0x330A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330A - ,simpleLowerCaseMapping:0x330A - ,simpleTitleCaseMapping:0x330A - }, - { code:0x330B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330B - ,simpleLowerCaseMapping:0x330B - ,simpleTitleCaseMapping:0x330B - }, - { code:0x330C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330C - ,simpleLowerCaseMapping:0x330C - ,simpleTitleCaseMapping:0x330C - }, - { code:0x330D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330D - ,simpleLowerCaseMapping:0x330D - ,simpleTitleCaseMapping:0x330D - }, - { code:0x330E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330E - ,simpleLowerCaseMapping:0x330E - ,simpleTitleCaseMapping:0x330E - }, - { code:0x330F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x330F - ,simpleLowerCaseMapping:0x330F - ,simpleTitleCaseMapping:0x330F - }, - { code:0x3310 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3310 - ,simpleLowerCaseMapping:0x3310 - ,simpleTitleCaseMapping:0x3310 - }, - { code:0x3311 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3311 - ,simpleLowerCaseMapping:0x3311 - ,simpleTitleCaseMapping:0x3311 - }, - { code:0x3312 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3312 - ,simpleLowerCaseMapping:0x3312 - ,simpleTitleCaseMapping:0x3312 - }, - { code:0x3313 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3313 - ,simpleLowerCaseMapping:0x3313 - ,simpleTitleCaseMapping:0x3313 - }, - { code:0x3314 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3314 - ,simpleLowerCaseMapping:0x3314 - ,simpleTitleCaseMapping:0x3314 - }, - { code:0x3315 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3315 - ,simpleLowerCaseMapping:0x3315 - ,simpleTitleCaseMapping:0x3315 - }, - { code:0x3316 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3316 - ,simpleLowerCaseMapping:0x3316 - ,simpleTitleCaseMapping:0x3316 - }, - { code:0x3317 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3317 - ,simpleLowerCaseMapping:0x3317 - ,simpleTitleCaseMapping:0x3317 - }, - { code:0x3318 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3318 - ,simpleLowerCaseMapping:0x3318 - ,simpleTitleCaseMapping:0x3318 - }, - { code:0x3319 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3319 - ,simpleLowerCaseMapping:0x3319 - ,simpleTitleCaseMapping:0x3319 - }, - { code:0x331A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331A - ,simpleLowerCaseMapping:0x331A - ,simpleTitleCaseMapping:0x331A - }, - { code:0x331B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331B - ,simpleLowerCaseMapping:0x331B - ,simpleTitleCaseMapping:0x331B - }, - { code:0x331C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331C - ,simpleLowerCaseMapping:0x331C - ,simpleTitleCaseMapping:0x331C - }, - { code:0x331D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331D - ,simpleLowerCaseMapping:0x331D - ,simpleTitleCaseMapping:0x331D - }, - { code:0x331E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331E - ,simpleLowerCaseMapping:0x331E - ,simpleTitleCaseMapping:0x331E - }, - { code:0x331F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x331F - ,simpleLowerCaseMapping:0x331F - ,simpleTitleCaseMapping:0x331F - }, - { code:0x3320 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3320 - ,simpleLowerCaseMapping:0x3320 - ,simpleTitleCaseMapping:0x3320 - }, - { code:0x3321 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3321 - ,simpleLowerCaseMapping:0x3321 - ,simpleTitleCaseMapping:0x3321 - }, - { code:0x3322 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3322 - ,simpleLowerCaseMapping:0x3322 - ,simpleTitleCaseMapping:0x3322 - }, - { code:0x3323 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3323 - ,simpleLowerCaseMapping:0x3323 - ,simpleTitleCaseMapping:0x3323 - }, - { code:0x3324 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3324 - ,simpleLowerCaseMapping:0x3324 - ,simpleTitleCaseMapping:0x3324 - }, - { code:0x3325 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3325 - ,simpleLowerCaseMapping:0x3325 - ,simpleTitleCaseMapping:0x3325 - }, - { code:0x3326 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3326 - ,simpleLowerCaseMapping:0x3326 - ,simpleTitleCaseMapping:0x3326 - }, - { code:0x3327 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3327 - ,simpleLowerCaseMapping:0x3327 - ,simpleTitleCaseMapping:0x3327 - }, - { code:0x3328 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3328 - ,simpleLowerCaseMapping:0x3328 - ,simpleTitleCaseMapping:0x3328 - }, - { code:0x3329 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3329 - ,simpleLowerCaseMapping:0x3329 - ,simpleTitleCaseMapping:0x3329 - }, - { code:0x332A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332A - ,simpleLowerCaseMapping:0x332A - ,simpleTitleCaseMapping:0x332A - }, - { code:0x332B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332B - ,simpleLowerCaseMapping:0x332B - ,simpleTitleCaseMapping:0x332B - }, - { code:0x332C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332C - ,simpleLowerCaseMapping:0x332C - ,simpleTitleCaseMapping:0x332C - }, - { code:0x332D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332D - ,simpleLowerCaseMapping:0x332D - ,simpleTitleCaseMapping:0x332D - }, - { code:0x332E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332E - ,simpleLowerCaseMapping:0x332E - ,simpleTitleCaseMapping:0x332E - }, - { code:0x332F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x332F - ,simpleLowerCaseMapping:0x332F - ,simpleTitleCaseMapping:0x332F - }, - { code:0x3330 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3330 - ,simpleLowerCaseMapping:0x3330 - ,simpleTitleCaseMapping:0x3330 - }, - { code:0x3331 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3331 - ,simpleLowerCaseMapping:0x3331 - ,simpleTitleCaseMapping:0x3331 - }, - { code:0x3332 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3332 - ,simpleLowerCaseMapping:0x3332 - ,simpleTitleCaseMapping:0x3332 - }, - { code:0x3333 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3333 - ,simpleLowerCaseMapping:0x3333 - ,simpleTitleCaseMapping:0x3333 - }, - { code:0x3334 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3334 - ,simpleLowerCaseMapping:0x3334 - ,simpleTitleCaseMapping:0x3334 - }, - { code:0x3335 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3335 - ,simpleLowerCaseMapping:0x3335 - ,simpleTitleCaseMapping:0x3335 - }, - { code:0x3336 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3336 - ,simpleLowerCaseMapping:0x3336 - ,simpleTitleCaseMapping:0x3336 - }, - { code:0x3337 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3337 - ,simpleLowerCaseMapping:0x3337 - ,simpleTitleCaseMapping:0x3337 - }, - { code:0x3338 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3338 - ,simpleLowerCaseMapping:0x3338 - ,simpleTitleCaseMapping:0x3338 - }, - { code:0x3339 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3339 - ,simpleLowerCaseMapping:0x3339 - ,simpleTitleCaseMapping:0x3339 - }, - { code:0x333A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333A - ,simpleLowerCaseMapping:0x333A - ,simpleTitleCaseMapping:0x333A - }, - { code:0x333B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333B - ,simpleLowerCaseMapping:0x333B - ,simpleTitleCaseMapping:0x333B - }, - { code:0x333C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333C - ,simpleLowerCaseMapping:0x333C - ,simpleTitleCaseMapping:0x333C - }, - { code:0x333D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333D - ,simpleLowerCaseMapping:0x333D - ,simpleTitleCaseMapping:0x333D - }, - { code:0x333E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333E - ,simpleLowerCaseMapping:0x333E - ,simpleTitleCaseMapping:0x333E - }, - { code:0x333F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x333F - ,simpleLowerCaseMapping:0x333F - ,simpleTitleCaseMapping:0x333F - }, - { code:0x3340 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3340 - ,simpleLowerCaseMapping:0x3340 - ,simpleTitleCaseMapping:0x3340 - }, - { code:0x3341 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3341 - ,simpleLowerCaseMapping:0x3341 - ,simpleTitleCaseMapping:0x3341 - }, - { code:0x3342 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3342 - ,simpleLowerCaseMapping:0x3342 - ,simpleTitleCaseMapping:0x3342 - }, - { code:0x3343 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3343 - ,simpleLowerCaseMapping:0x3343 - ,simpleTitleCaseMapping:0x3343 - }, - { code:0x3344 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3344 - ,simpleLowerCaseMapping:0x3344 - ,simpleTitleCaseMapping:0x3344 - }, - { code:0x3345 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3345 - ,simpleLowerCaseMapping:0x3345 - ,simpleTitleCaseMapping:0x3345 - }, - { code:0x3346 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3346 - ,simpleLowerCaseMapping:0x3346 - ,simpleTitleCaseMapping:0x3346 - }, - { code:0x3347 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3347 - ,simpleLowerCaseMapping:0x3347 - ,simpleTitleCaseMapping:0x3347 - }, - { code:0x3348 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3348 - ,simpleLowerCaseMapping:0x3348 - ,simpleTitleCaseMapping:0x3348 - }, - { code:0x3349 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3349 - ,simpleLowerCaseMapping:0x3349 - ,simpleTitleCaseMapping:0x3349 - }, - { code:0x334A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334A - ,simpleLowerCaseMapping:0x334A - ,simpleTitleCaseMapping:0x334A - }, - { code:0x334B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334B - ,simpleLowerCaseMapping:0x334B - ,simpleTitleCaseMapping:0x334B - }, - { code:0x334C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334C - ,simpleLowerCaseMapping:0x334C - ,simpleTitleCaseMapping:0x334C - }, - { code:0x334D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334D - ,simpleLowerCaseMapping:0x334D - ,simpleTitleCaseMapping:0x334D - }, - { code:0x334E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334E - ,simpleLowerCaseMapping:0x334E - ,simpleTitleCaseMapping:0x334E - }, - { code:0x334F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x334F - ,simpleLowerCaseMapping:0x334F - ,simpleTitleCaseMapping:0x334F - }, - { code:0x3350 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3350 - ,simpleLowerCaseMapping:0x3350 - ,simpleTitleCaseMapping:0x3350 - }, - { code:0x3351 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3351 - ,simpleLowerCaseMapping:0x3351 - ,simpleTitleCaseMapping:0x3351 - }, - { code:0x3352 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3352 - ,simpleLowerCaseMapping:0x3352 - ,simpleTitleCaseMapping:0x3352 - }, - { code:0x3353 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3353 - ,simpleLowerCaseMapping:0x3353 - ,simpleTitleCaseMapping:0x3353 - }, - { code:0x3354 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3354 - ,simpleLowerCaseMapping:0x3354 - ,simpleTitleCaseMapping:0x3354 - }, - { code:0x3355 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3355 - ,simpleLowerCaseMapping:0x3355 - ,simpleTitleCaseMapping:0x3355 - }, - { code:0x3356 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3356 - ,simpleLowerCaseMapping:0x3356 - ,simpleTitleCaseMapping:0x3356 - }, - { code:0x3357 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3357 - ,simpleLowerCaseMapping:0x3357 - ,simpleTitleCaseMapping:0x3357 - }, - { code:0x3358 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3358 - ,simpleLowerCaseMapping:0x3358 - ,simpleTitleCaseMapping:0x3358 - }, - { code:0x3359 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3359 - ,simpleLowerCaseMapping:0x3359 - ,simpleTitleCaseMapping:0x3359 - }, - { code:0x335A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335A - ,simpleLowerCaseMapping:0x335A - ,simpleTitleCaseMapping:0x335A - }, - { code:0x335B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335B - ,simpleLowerCaseMapping:0x335B - ,simpleTitleCaseMapping:0x335B - }, - { code:0x335C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335C - ,simpleLowerCaseMapping:0x335C - ,simpleTitleCaseMapping:0x335C - }, - { code:0x335D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335D - ,simpleLowerCaseMapping:0x335D - ,simpleTitleCaseMapping:0x335D - }, - { code:0x335E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335E - ,simpleLowerCaseMapping:0x335E - ,simpleTitleCaseMapping:0x335E - }, - { code:0x335F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x335F - ,simpleLowerCaseMapping:0x335F - ,simpleTitleCaseMapping:0x335F - }, - { code:0x3360 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3360 - ,simpleLowerCaseMapping:0x3360 - ,simpleTitleCaseMapping:0x3360 - }, - { code:0x3361 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3361 - ,simpleLowerCaseMapping:0x3361 - ,simpleTitleCaseMapping:0x3361 - }, - { code:0x3362 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3362 - ,simpleLowerCaseMapping:0x3362 - ,simpleTitleCaseMapping:0x3362 - }, - { code:0x3363 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3363 - ,simpleLowerCaseMapping:0x3363 - ,simpleTitleCaseMapping:0x3363 - }, - { code:0x3364 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3364 - ,simpleLowerCaseMapping:0x3364 - ,simpleTitleCaseMapping:0x3364 - }, - { code:0x3365 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3365 - ,simpleLowerCaseMapping:0x3365 - ,simpleTitleCaseMapping:0x3365 - }, - { code:0x3366 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3366 - ,simpleLowerCaseMapping:0x3366 - ,simpleTitleCaseMapping:0x3366 - }, - { code:0x3367 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3367 - ,simpleLowerCaseMapping:0x3367 - ,simpleTitleCaseMapping:0x3367 - }, - { code:0x3368 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3368 - ,simpleLowerCaseMapping:0x3368 - ,simpleTitleCaseMapping:0x3368 - }, - { code:0x3369 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3369 - ,simpleLowerCaseMapping:0x3369 - ,simpleTitleCaseMapping:0x3369 - }, - { code:0x336A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336A - ,simpleLowerCaseMapping:0x336A - ,simpleTitleCaseMapping:0x336A - }, - { code:0x336B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336B - ,simpleLowerCaseMapping:0x336B - ,simpleTitleCaseMapping:0x336B - }, - { code:0x336C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336C - ,simpleLowerCaseMapping:0x336C - ,simpleTitleCaseMapping:0x336C - }, - { code:0x336D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336D - ,simpleLowerCaseMapping:0x336D - ,simpleTitleCaseMapping:0x336D - }, - { code:0x336E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336E - ,simpleLowerCaseMapping:0x336E - ,simpleTitleCaseMapping:0x336E - }, - { code:0x336F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x336F - ,simpleLowerCaseMapping:0x336F - ,simpleTitleCaseMapping:0x336F - }, - { code:0x3370 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3370 - ,simpleLowerCaseMapping:0x3370 - ,simpleTitleCaseMapping:0x3370 - }, - { code:0x3371 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3371 - ,simpleLowerCaseMapping:0x3371 - ,simpleTitleCaseMapping:0x3371 - }, - { code:0x3372 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3372 - ,simpleLowerCaseMapping:0x3372 - ,simpleTitleCaseMapping:0x3372 - }, - { code:0x3373 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3373 - ,simpleLowerCaseMapping:0x3373 - ,simpleTitleCaseMapping:0x3373 - }, - { code:0x3374 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3374 - ,simpleLowerCaseMapping:0x3374 - ,simpleTitleCaseMapping:0x3374 - }, - { code:0x3375 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3375 - ,simpleLowerCaseMapping:0x3375 - ,simpleTitleCaseMapping:0x3375 - }, - { code:0x3376 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3376 - ,simpleLowerCaseMapping:0x3376 - ,simpleTitleCaseMapping:0x3376 - }, - { code:0x3377 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3377 - ,simpleLowerCaseMapping:0x3377 - ,simpleTitleCaseMapping:0x3377 - }, - { code:0x3378 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3378 - ,simpleLowerCaseMapping:0x3378 - ,simpleTitleCaseMapping:0x3378 - }, - { code:0x3379 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3379 - ,simpleLowerCaseMapping:0x3379 - ,simpleTitleCaseMapping:0x3379 - }, - { code:0x337A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337A - ,simpleLowerCaseMapping:0x337A - ,simpleTitleCaseMapping:0x337A - }, - { code:0x337B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337B - ,simpleLowerCaseMapping:0x337B - ,simpleTitleCaseMapping:0x337B - }, - { code:0x337C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337C - ,simpleLowerCaseMapping:0x337C - ,simpleTitleCaseMapping:0x337C - }, - { code:0x337D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337D - ,simpleLowerCaseMapping:0x337D - ,simpleTitleCaseMapping:0x337D - }, - { code:0x337E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337E - ,simpleLowerCaseMapping:0x337E - ,simpleTitleCaseMapping:0x337E - }, - { code:0x337F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x337F - ,simpleLowerCaseMapping:0x337F - ,simpleTitleCaseMapping:0x337F - }, - { code:0x3380 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3380 - ,simpleLowerCaseMapping:0x3380 - ,simpleTitleCaseMapping:0x3380 - }, - { code:0x3381 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3381 - ,simpleLowerCaseMapping:0x3381 - ,simpleTitleCaseMapping:0x3381 - }, - { code:0x3382 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3382 - ,simpleLowerCaseMapping:0x3382 - ,simpleTitleCaseMapping:0x3382 - }, - { code:0x3383 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3383 - ,simpleLowerCaseMapping:0x3383 - ,simpleTitleCaseMapping:0x3383 - }, - { code:0x3384 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3384 - ,simpleLowerCaseMapping:0x3384 - ,simpleTitleCaseMapping:0x3384 - }, - { code:0x3385 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3385 - ,simpleLowerCaseMapping:0x3385 - ,simpleTitleCaseMapping:0x3385 - }, - { code:0x3386 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3386 - ,simpleLowerCaseMapping:0x3386 - ,simpleTitleCaseMapping:0x3386 - }, - { code:0x3387 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3387 - ,simpleLowerCaseMapping:0x3387 - ,simpleTitleCaseMapping:0x3387 - }, - { code:0x3388 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3388 - ,simpleLowerCaseMapping:0x3388 - ,simpleTitleCaseMapping:0x3388 - }, - { code:0x3389 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3389 - ,simpleLowerCaseMapping:0x3389 - ,simpleTitleCaseMapping:0x3389 - }, - { code:0x338A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338A - ,simpleLowerCaseMapping:0x338A - ,simpleTitleCaseMapping:0x338A - }, - { code:0x338B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338B - ,simpleLowerCaseMapping:0x338B - ,simpleTitleCaseMapping:0x338B - }, - { code:0x338C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338C - ,simpleLowerCaseMapping:0x338C - ,simpleTitleCaseMapping:0x338C - }, - { code:0x338D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338D - ,simpleLowerCaseMapping:0x338D - ,simpleTitleCaseMapping:0x338D - }, - { code:0x338E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338E - ,simpleLowerCaseMapping:0x338E - ,simpleTitleCaseMapping:0x338E - }, - { code:0x338F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x338F - ,simpleLowerCaseMapping:0x338F - ,simpleTitleCaseMapping:0x338F - }, - { code:0x3390 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3390 - ,simpleLowerCaseMapping:0x3390 - ,simpleTitleCaseMapping:0x3390 - }, - { code:0x3391 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3391 - ,simpleLowerCaseMapping:0x3391 - ,simpleTitleCaseMapping:0x3391 - }, - { code:0x3392 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3392 - ,simpleLowerCaseMapping:0x3392 - ,simpleTitleCaseMapping:0x3392 - }, - { code:0x3393 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3393 - ,simpleLowerCaseMapping:0x3393 - ,simpleTitleCaseMapping:0x3393 - }, - { code:0x3394 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3394 - ,simpleLowerCaseMapping:0x3394 - ,simpleTitleCaseMapping:0x3394 - }, - { code:0x3395 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3395 - ,simpleLowerCaseMapping:0x3395 - ,simpleTitleCaseMapping:0x3395 - }, - { code:0x3396 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3396 - ,simpleLowerCaseMapping:0x3396 - ,simpleTitleCaseMapping:0x3396 - }, - { code:0x3397 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3397 - ,simpleLowerCaseMapping:0x3397 - ,simpleTitleCaseMapping:0x3397 - }, - { code:0x3398 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3398 - ,simpleLowerCaseMapping:0x3398 - ,simpleTitleCaseMapping:0x3398 - }, - { code:0x3399 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x3399 - ,simpleLowerCaseMapping:0x3399 - ,simpleTitleCaseMapping:0x3399 - }, - { code:0x339A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339A - ,simpleLowerCaseMapping:0x339A - ,simpleTitleCaseMapping:0x339A - }, - { code:0x339B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339B - ,simpleLowerCaseMapping:0x339B - ,simpleTitleCaseMapping:0x339B - }, - { code:0x339C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339C - ,simpleLowerCaseMapping:0x339C - ,simpleTitleCaseMapping:0x339C - }, - { code:0x339D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339D - ,simpleLowerCaseMapping:0x339D - ,simpleTitleCaseMapping:0x339D - }, - { code:0x339E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339E - ,simpleLowerCaseMapping:0x339E - ,simpleTitleCaseMapping:0x339E - }, - { code:0x339F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x339F - ,simpleLowerCaseMapping:0x339F - ,simpleTitleCaseMapping:0x339F - }, - { code:0x33A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A0 - ,simpleLowerCaseMapping:0x33A0 - ,simpleTitleCaseMapping:0x33A0 - }, - { code:0x33A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A1 - ,simpleLowerCaseMapping:0x33A1 - ,simpleTitleCaseMapping:0x33A1 - }, - { code:0x33A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A2 - ,simpleLowerCaseMapping:0x33A2 - ,simpleTitleCaseMapping:0x33A2 - }, - { code:0x33A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A3 - ,simpleLowerCaseMapping:0x33A3 - ,simpleTitleCaseMapping:0x33A3 - }, - { code:0x33A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A4 - ,simpleLowerCaseMapping:0x33A4 - ,simpleTitleCaseMapping:0x33A4 - }, - { code:0x33A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A5 - ,simpleLowerCaseMapping:0x33A5 - ,simpleTitleCaseMapping:0x33A5 - }, - { code:0x33A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A6 - ,simpleLowerCaseMapping:0x33A6 - ,simpleTitleCaseMapping:0x33A6 - }, - { code:0x33A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A7 - ,simpleLowerCaseMapping:0x33A7 - ,simpleTitleCaseMapping:0x33A7 - }, - { code:0x33A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A8 - ,simpleLowerCaseMapping:0x33A8 - ,simpleTitleCaseMapping:0x33A8 - }, - { code:0x33A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33A9 - ,simpleLowerCaseMapping:0x33A9 - ,simpleTitleCaseMapping:0x33A9 - }, - { code:0x33AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AA - ,simpleLowerCaseMapping:0x33AA - ,simpleTitleCaseMapping:0x33AA - }, - { code:0x33AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AB - ,simpleLowerCaseMapping:0x33AB - ,simpleTitleCaseMapping:0x33AB - }, - { code:0x33AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AC - ,simpleLowerCaseMapping:0x33AC - ,simpleTitleCaseMapping:0x33AC - }, - { code:0x33AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AD - ,simpleLowerCaseMapping:0x33AD - ,simpleTitleCaseMapping:0x33AD - }, - { code:0x33AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AE - ,simpleLowerCaseMapping:0x33AE - ,simpleTitleCaseMapping:0x33AE - }, - { code:0x33AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33AF - ,simpleLowerCaseMapping:0x33AF - ,simpleTitleCaseMapping:0x33AF - }, - { code:0x33B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B0 - ,simpleLowerCaseMapping:0x33B0 - ,simpleTitleCaseMapping:0x33B0 - }, - { code:0x33B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B1 - ,simpleLowerCaseMapping:0x33B1 - ,simpleTitleCaseMapping:0x33B1 - }, - { code:0x33B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B2 - ,simpleLowerCaseMapping:0x33B2 - ,simpleTitleCaseMapping:0x33B2 - }, - { code:0x33B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B3 - ,simpleLowerCaseMapping:0x33B3 - ,simpleTitleCaseMapping:0x33B3 - }, - { code:0x33B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B4 - ,simpleLowerCaseMapping:0x33B4 - ,simpleTitleCaseMapping:0x33B4 - }, - { code:0x33B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B5 - ,simpleLowerCaseMapping:0x33B5 - ,simpleTitleCaseMapping:0x33B5 - }, - { code:0x33B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B6 - ,simpleLowerCaseMapping:0x33B6 - ,simpleTitleCaseMapping:0x33B6 - }, - { code:0x33B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B7 - ,simpleLowerCaseMapping:0x33B7 - ,simpleTitleCaseMapping:0x33B7 - }, - { code:0x33B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B8 - ,simpleLowerCaseMapping:0x33B8 - ,simpleTitleCaseMapping:0x33B8 - }, - { code:0x33B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33B9 - ,simpleLowerCaseMapping:0x33B9 - ,simpleTitleCaseMapping:0x33B9 - }, - { code:0x33BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BA - ,simpleLowerCaseMapping:0x33BA - ,simpleTitleCaseMapping:0x33BA - }, - { code:0x33BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BB - ,simpleLowerCaseMapping:0x33BB - ,simpleTitleCaseMapping:0x33BB - }, - { code:0x33BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BC - ,simpleLowerCaseMapping:0x33BC - ,simpleTitleCaseMapping:0x33BC - }, - { code:0x33BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BD - ,simpleLowerCaseMapping:0x33BD - ,simpleTitleCaseMapping:0x33BD - }, - { code:0x33BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BE - ,simpleLowerCaseMapping:0x33BE - ,simpleTitleCaseMapping:0x33BE - }, - { code:0x33BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33BF - ,simpleLowerCaseMapping:0x33BF - ,simpleTitleCaseMapping:0x33BF - }, - { code:0x33C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C0 - ,simpleLowerCaseMapping:0x33C0 - ,simpleTitleCaseMapping:0x33C0 - }, - { code:0x33C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C1 - ,simpleLowerCaseMapping:0x33C1 - ,simpleTitleCaseMapping:0x33C1 - }, - { code:0x33C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C2 - ,simpleLowerCaseMapping:0x33C2 - ,simpleTitleCaseMapping:0x33C2 - }, - { code:0x33C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C3 - ,simpleLowerCaseMapping:0x33C3 - ,simpleTitleCaseMapping:0x33C3 - }, - { code:0x33C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C4 - ,simpleLowerCaseMapping:0x33C4 - ,simpleTitleCaseMapping:0x33C4 - }, - { code:0x33C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C5 - ,simpleLowerCaseMapping:0x33C5 - ,simpleTitleCaseMapping:0x33C5 - }, - { code:0x33C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C6 - ,simpleLowerCaseMapping:0x33C6 - ,simpleTitleCaseMapping:0x33C6 - }, - { code:0x33C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C7 - ,simpleLowerCaseMapping:0x33C7 - ,simpleTitleCaseMapping:0x33C7 - }, - { code:0x33C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C8 - ,simpleLowerCaseMapping:0x33C8 - ,simpleTitleCaseMapping:0x33C8 - }, - { code:0x33C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33C9 - ,simpleLowerCaseMapping:0x33C9 - ,simpleTitleCaseMapping:0x33C9 - }, - { code:0x33CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CA - ,simpleLowerCaseMapping:0x33CA - ,simpleTitleCaseMapping:0x33CA - }, - { code:0x33CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CB - ,simpleLowerCaseMapping:0x33CB - ,simpleTitleCaseMapping:0x33CB - }, - { code:0x33CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CC - ,simpleLowerCaseMapping:0x33CC - ,simpleTitleCaseMapping:0x33CC - }, - { code:0x33CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CD - ,simpleLowerCaseMapping:0x33CD - ,simpleTitleCaseMapping:0x33CD - }, - { code:0x33CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CE - ,simpleLowerCaseMapping:0x33CE - ,simpleTitleCaseMapping:0x33CE - }, - { code:0x33CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33CF - ,simpleLowerCaseMapping:0x33CF - ,simpleTitleCaseMapping:0x33CF - }, - { code:0x33D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D0 - ,simpleLowerCaseMapping:0x33D0 - ,simpleTitleCaseMapping:0x33D0 - }, - { code:0x33D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D1 - ,simpleLowerCaseMapping:0x33D1 - ,simpleTitleCaseMapping:0x33D1 - }, - { code:0x33D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D2 - ,simpleLowerCaseMapping:0x33D2 - ,simpleTitleCaseMapping:0x33D2 - }, - { code:0x33D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D3 - ,simpleLowerCaseMapping:0x33D3 - ,simpleTitleCaseMapping:0x33D3 - }, - { code:0x33D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D4 - ,simpleLowerCaseMapping:0x33D4 - ,simpleTitleCaseMapping:0x33D4 - }, - { code:0x33D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D5 - ,simpleLowerCaseMapping:0x33D5 - ,simpleTitleCaseMapping:0x33D5 - }, - { code:0x33D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D6 - ,simpleLowerCaseMapping:0x33D6 - ,simpleTitleCaseMapping:0x33D6 - }, - { code:0x33D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D7 - ,simpleLowerCaseMapping:0x33D7 - ,simpleTitleCaseMapping:0x33D7 - }, - { code:0x33D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D8 - ,simpleLowerCaseMapping:0x33D8 - ,simpleTitleCaseMapping:0x33D8 - }, - { code:0x33D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33D9 - ,simpleLowerCaseMapping:0x33D9 - ,simpleTitleCaseMapping:0x33D9 - }, - { code:0x33DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DA - ,simpleLowerCaseMapping:0x33DA - ,simpleTitleCaseMapping:0x33DA - }, - { code:0x33DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DB - ,simpleLowerCaseMapping:0x33DB - ,simpleTitleCaseMapping:0x33DB - }, - { code:0x33DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DC - ,simpleLowerCaseMapping:0x33DC - ,simpleTitleCaseMapping:0x33DC - }, - { code:0x33DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DD - ,simpleLowerCaseMapping:0x33DD - ,simpleTitleCaseMapping:0x33DD - }, - { code:0x33DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DE - ,simpleLowerCaseMapping:0x33DE - ,simpleTitleCaseMapping:0x33DE - }, - { code:0x33DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33DF - ,simpleLowerCaseMapping:0x33DF - ,simpleTitleCaseMapping:0x33DF - }, - { code:0x33E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E0 - ,simpleLowerCaseMapping:0x33E0 - ,simpleTitleCaseMapping:0x33E0 - }, - { code:0x33E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E1 - ,simpleLowerCaseMapping:0x33E1 - ,simpleTitleCaseMapping:0x33E1 - }, - { code:0x33E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E2 - ,simpleLowerCaseMapping:0x33E2 - ,simpleTitleCaseMapping:0x33E2 - }, - { code:0x33E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E3 - ,simpleLowerCaseMapping:0x33E3 - ,simpleTitleCaseMapping:0x33E3 - }, - { code:0x33E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E4 - ,simpleLowerCaseMapping:0x33E4 - ,simpleTitleCaseMapping:0x33E4 - }, - { code:0x33E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E5 - ,simpleLowerCaseMapping:0x33E5 - ,simpleTitleCaseMapping:0x33E5 - }, - { code:0x33E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E6 - ,simpleLowerCaseMapping:0x33E6 - ,simpleTitleCaseMapping:0x33E6 - }, - { code:0x33E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E7 - ,simpleLowerCaseMapping:0x33E7 - ,simpleTitleCaseMapping:0x33E7 - }, - { code:0x33E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E8 - ,simpleLowerCaseMapping:0x33E8 - ,simpleTitleCaseMapping:0x33E8 - }, - { code:0x33E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33E9 - ,simpleLowerCaseMapping:0x33E9 - ,simpleTitleCaseMapping:0x33E9 - }, - { code:0x33EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33EA - ,simpleLowerCaseMapping:0x33EA - ,simpleTitleCaseMapping:0x33EA - }, - { code:0x33EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33EB - ,simpleLowerCaseMapping:0x33EB - ,simpleTitleCaseMapping:0x33EB - }, - { code:0x33EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33EC - ,simpleLowerCaseMapping:0x33EC - ,simpleTitleCaseMapping:0x33EC - }, - { code:0x33ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33ED - ,simpleLowerCaseMapping:0x33ED - ,simpleTitleCaseMapping:0x33ED - }, - { code:0x33EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33EE - ,simpleLowerCaseMapping:0x33EE - ,simpleTitleCaseMapping:0x33EE - }, - { code:0x33EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33EF - ,simpleLowerCaseMapping:0x33EF - ,simpleTitleCaseMapping:0x33EF - }, - { code:0x33F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F0 - ,simpleLowerCaseMapping:0x33F0 - ,simpleTitleCaseMapping:0x33F0 - }, - { code:0x33F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F1 - ,simpleLowerCaseMapping:0x33F1 - ,simpleTitleCaseMapping:0x33F1 - }, - { code:0x33F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F2 - ,simpleLowerCaseMapping:0x33F2 - ,simpleTitleCaseMapping:0x33F2 - }, - { code:0x33F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F3 - ,simpleLowerCaseMapping:0x33F3 - ,simpleTitleCaseMapping:0x33F3 - }, - { code:0x33F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F4 - ,simpleLowerCaseMapping:0x33F4 - ,simpleTitleCaseMapping:0x33F4 - }, - { code:0x33F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F5 - ,simpleLowerCaseMapping:0x33F5 - ,simpleTitleCaseMapping:0x33F5 - }, - { code:0x33F6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F6 - ,simpleLowerCaseMapping:0x33F6 - ,simpleTitleCaseMapping:0x33F6 - }, - { code:0x33F7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F7 - ,simpleLowerCaseMapping:0x33F7 - ,simpleTitleCaseMapping:0x33F7 - }, - { code:0x33F8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F8 - ,simpleLowerCaseMapping:0x33F8 - ,simpleTitleCaseMapping:0x33F8 - }, - { code:0x33F9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33F9 - ,simpleLowerCaseMapping:0x33F9 - ,simpleTitleCaseMapping:0x33F9 - }, - { code:0x33FA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FA - ,simpleLowerCaseMapping:0x33FA - ,simpleTitleCaseMapping:0x33FA - }, - { code:0x33FB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FB - ,simpleLowerCaseMapping:0x33FB - ,simpleTitleCaseMapping:0x33FB - }, - { code:0x33FC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FC - ,simpleLowerCaseMapping:0x33FC - ,simpleTitleCaseMapping:0x33FC - }, - { code:0x33FD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FD - ,simpleLowerCaseMapping:0x33FD - ,simpleTitleCaseMapping:0x33FD - }, - { code:0x33FE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FE - ,simpleLowerCaseMapping:0x33FE - ,simpleTitleCaseMapping:0x33FE - }, - { code:0x33FF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x33FF - ,simpleLowerCaseMapping:0x33FF - ,simpleTitleCaseMapping:0x33FF - }, - { code:0x3400 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x3400 - ,simpleLowerCaseMapping:0x3400 - ,simpleTitleCaseMapping:0x3400 - }, - { code:0x4DB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x4DB5 - ,simpleLowerCaseMapping:0x4DB5 - ,simpleTitleCaseMapping:0x4DB5 - }, - { code:0x4DC0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC0 - ,simpleLowerCaseMapping:0x4DC0 - ,simpleTitleCaseMapping:0x4DC0 - }, - { code:0x4DC1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC1 - ,simpleLowerCaseMapping:0x4DC1 - ,simpleTitleCaseMapping:0x4DC1 - }, - { code:0x4DC2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC2 - ,simpleLowerCaseMapping:0x4DC2 - ,simpleTitleCaseMapping:0x4DC2 - }, - { code:0x4DC3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC3 - ,simpleLowerCaseMapping:0x4DC3 - ,simpleTitleCaseMapping:0x4DC3 - }, - { code:0x4DC4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC4 - ,simpleLowerCaseMapping:0x4DC4 - ,simpleTitleCaseMapping:0x4DC4 - }, - { code:0x4DC5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC5 - ,simpleLowerCaseMapping:0x4DC5 - ,simpleTitleCaseMapping:0x4DC5 - }, - { code:0x4DC6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC6 - ,simpleLowerCaseMapping:0x4DC6 - ,simpleTitleCaseMapping:0x4DC6 - }, - { code:0x4DC7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC7 - ,simpleLowerCaseMapping:0x4DC7 - ,simpleTitleCaseMapping:0x4DC7 - }, - { code:0x4DC8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC8 - ,simpleLowerCaseMapping:0x4DC8 - ,simpleTitleCaseMapping:0x4DC8 - }, - { code:0x4DC9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DC9 - ,simpleLowerCaseMapping:0x4DC9 - ,simpleTitleCaseMapping:0x4DC9 - }, - { code:0x4DCA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCA - ,simpleLowerCaseMapping:0x4DCA - ,simpleTitleCaseMapping:0x4DCA - }, - { code:0x4DCB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCB - ,simpleLowerCaseMapping:0x4DCB - ,simpleTitleCaseMapping:0x4DCB - }, - { code:0x4DCC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCC - ,simpleLowerCaseMapping:0x4DCC - ,simpleTitleCaseMapping:0x4DCC - }, - { code:0x4DCD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCD - ,simpleLowerCaseMapping:0x4DCD - ,simpleTitleCaseMapping:0x4DCD - }, - { code:0x4DCE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCE - ,simpleLowerCaseMapping:0x4DCE - ,simpleTitleCaseMapping:0x4DCE - }, - { code:0x4DCF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DCF - ,simpleLowerCaseMapping:0x4DCF - ,simpleTitleCaseMapping:0x4DCF - }, - { code:0x4DD0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD0 - ,simpleLowerCaseMapping:0x4DD0 - ,simpleTitleCaseMapping:0x4DD0 - }, - { code:0x4DD1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD1 - ,simpleLowerCaseMapping:0x4DD1 - ,simpleTitleCaseMapping:0x4DD1 - }, - { code:0x4DD2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD2 - ,simpleLowerCaseMapping:0x4DD2 - ,simpleTitleCaseMapping:0x4DD2 - }, - { code:0x4DD3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD3 - ,simpleLowerCaseMapping:0x4DD3 - ,simpleTitleCaseMapping:0x4DD3 - }, - { code:0x4DD4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD4 - ,simpleLowerCaseMapping:0x4DD4 - ,simpleTitleCaseMapping:0x4DD4 - }, - { code:0x4DD5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD5 - ,simpleLowerCaseMapping:0x4DD5 - ,simpleTitleCaseMapping:0x4DD5 - }, - { code:0x4DD6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD6 - ,simpleLowerCaseMapping:0x4DD6 - ,simpleTitleCaseMapping:0x4DD6 - }, - { code:0x4DD7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD7 - ,simpleLowerCaseMapping:0x4DD7 - ,simpleTitleCaseMapping:0x4DD7 - }, - { code:0x4DD8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD8 - ,simpleLowerCaseMapping:0x4DD8 - ,simpleTitleCaseMapping:0x4DD8 - }, - { code:0x4DD9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DD9 - ,simpleLowerCaseMapping:0x4DD9 - ,simpleTitleCaseMapping:0x4DD9 - }, - { code:0x4DDA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDA - ,simpleLowerCaseMapping:0x4DDA - ,simpleTitleCaseMapping:0x4DDA - }, - { code:0x4DDB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDB - ,simpleLowerCaseMapping:0x4DDB - ,simpleTitleCaseMapping:0x4DDB - }, - { code:0x4DDC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDC - ,simpleLowerCaseMapping:0x4DDC - ,simpleTitleCaseMapping:0x4DDC - }, - { code:0x4DDD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDD - ,simpleLowerCaseMapping:0x4DDD - ,simpleTitleCaseMapping:0x4DDD - }, - { code:0x4DDE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDE - ,simpleLowerCaseMapping:0x4DDE - ,simpleTitleCaseMapping:0x4DDE - }, - { code:0x4DDF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DDF - ,simpleLowerCaseMapping:0x4DDF - ,simpleTitleCaseMapping:0x4DDF - }, - { code:0x4DE0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE0 - ,simpleLowerCaseMapping:0x4DE0 - ,simpleTitleCaseMapping:0x4DE0 - }, - { code:0x4DE1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE1 - ,simpleLowerCaseMapping:0x4DE1 - ,simpleTitleCaseMapping:0x4DE1 - }, - { code:0x4DE2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE2 - ,simpleLowerCaseMapping:0x4DE2 - ,simpleTitleCaseMapping:0x4DE2 - }, - { code:0x4DE3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE3 - ,simpleLowerCaseMapping:0x4DE3 - ,simpleTitleCaseMapping:0x4DE3 - }, - { code:0x4DE4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE4 - ,simpleLowerCaseMapping:0x4DE4 - ,simpleTitleCaseMapping:0x4DE4 - }, - { code:0x4DE5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE5 - ,simpleLowerCaseMapping:0x4DE5 - ,simpleTitleCaseMapping:0x4DE5 - }, - { code:0x4DE6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE6 - ,simpleLowerCaseMapping:0x4DE6 - ,simpleTitleCaseMapping:0x4DE6 - }, - { code:0x4DE7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE7 - ,simpleLowerCaseMapping:0x4DE7 - ,simpleTitleCaseMapping:0x4DE7 - }, - { code:0x4DE8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE8 - ,simpleLowerCaseMapping:0x4DE8 - ,simpleTitleCaseMapping:0x4DE8 - }, - { code:0x4DE9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DE9 - ,simpleLowerCaseMapping:0x4DE9 - ,simpleTitleCaseMapping:0x4DE9 - }, - { code:0x4DEA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DEA - ,simpleLowerCaseMapping:0x4DEA - ,simpleTitleCaseMapping:0x4DEA - }, - { code:0x4DEB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DEB - ,simpleLowerCaseMapping:0x4DEB - ,simpleTitleCaseMapping:0x4DEB - }, - { code:0x4DEC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DEC - ,simpleLowerCaseMapping:0x4DEC - ,simpleTitleCaseMapping:0x4DEC - }, - { code:0x4DED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DED - ,simpleLowerCaseMapping:0x4DED - ,simpleTitleCaseMapping:0x4DED - }, - { code:0x4DEE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DEE - ,simpleLowerCaseMapping:0x4DEE - ,simpleTitleCaseMapping:0x4DEE - }, - { code:0x4DEF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DEF - ,simpleLowerCaseMapping:0x4DEF - ,simpleTitleCaseMapping:0x4DEF - }, - { code:0x4DF0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF0 - ,simpleLowerCaseMapping:0x4DF0 - ,simpleTitleCaseMapping:0x4DF0 - }, - { code:0x4DF1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF1 - ,simpleLowerCaseMapping:0x4DF1 - ,simpleTitleCaseMapping:0x4DF1 - }, - { code:0x4DF2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF2 - ,simpleLowerCaseMapping:0x4DF2 - ,simpleTitleCaseMapping:0x4DF2 - }, - { code:0x4DF3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF3 - ,simpleLowerCaseMapping:0x4DF3 - ,simpleTitleCaseMapping:0x4DF3 - }, - { code:0x4DF4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF4 - ,simpleLowerCaseMapping:0x4DF4 - ,simpleTitleCaseMapping:0x4DF4 - }, - { code:0x4DF5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF5 - ,simpleLowerCaseMapping:0x4DF5 - ,simpleTitleCaseMapping:0x4DF5 - }, - { code:0x4DF6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF6 - ,simpleLowerCaseMapping:0x4DF6 - ,simpleTitleCaseMapping:0x4DF6 - }, - { code:0x4DF7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF7 - ,simpleLowerCaseMapping:0x4DF7 - ,simpleTitleCaseMapping:0x4DF7 - }, - { code:0x4DF8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF8 - ,simpleLowerCaseMapping:0x4DF8 - ,simpleTitleCaseMapping:0x4DF8 - }, - { code:0x4DF9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DF9 - ,simpleLowerCaseMapping:0x4DF9 - ,simpleTitleCaseMapping:0x4DF9 - }, - { code:0x4DFA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFA - ,simpleLowerCaseMapping:0x4DFA - ,simpleTitleCaseMapping:0x4DFA - }, - { code:0x4DFB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFB - ,simpleLowerCaseMapping:0x4DFB - ,simpleTitleCaseMapping:0x4DFB - }, - { code:0x4DFC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFC - ,simpleLowerCaseMapping:0x4DFC - ,simpleTitleCaseMapping:0x4DFC - }, - { code:0x4DFD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFD - ,simpleLowerCaseMapping:0x4DFD - ,simpleTitleCaseMapping:0x4DFD - }, - { code:0x4DFE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFE - ,simpleLowerCaseMapping:0x4DFE - ,simpleTitleCaseMapping:0x4DFE - }, - { code:0x4DFF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x4DFF - ,simpleLowerCaseMapping:0x4DFF - ,simpleTitleCaseMapping:0x4DFF - }, - { code:0x4E00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x4E00 - ,simpleLowerCaseMapping:0x4E00 - ,simpleTitleCaseMapping:0x4E00 - }, - { code:0x9FBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x9FBB - ,simpleLowerCaseMapping:0x9FBB - ,simpleTitleCaseMapping:0x9FBB - }, - { code:0xA000 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA000 - ,simpleLowerCaseMapping:0xA000 - ,simpleTitleCaseMapping:0xA000 - }, - { code:0xA001 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA001 - ,simpleLowerCaseMapping:0xA001 - ,simpleTitleCaseMapping:0xA001 - }, - { code:0xA002 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA002 - ,simpleLowerCaseMapping:0xA002 - ,simpleTitleCaseMapping:0xA002 - }, - { code:0xA003 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA003 - ,simpleLowerCaseMapping:0xA003 - ,simpleTitleCaseMapping:0xA003 - }, - { code:0xA004 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA004 - ,simpleLowerCaseMapping:0xA004 - ,simpleTitleCaseMapping:0xA004 - }, - { code:0xA005 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA005 - ,simpleLowerCaseMapping:0xA005 - ,simpleTitleCaseMapping:0xA005 - }, - { code:0xA006 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA006 - ,simpleLowerCaseMapping:0xA006 - ,simpleTitleCaseMapping:0xA006 - }, - { code:0xA007 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA007 - ,simpleLowerCaseMapping:0xA007 - ,simpleTitleCaseMapping:0xA007 - }, - { code:0xA008 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA008 - ,simpleLowerCaseMapping:0xA008 - ,simpleTitleCaseMapping:0xA008 - }, - { code:0xA009 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA009 - ,simpleLowerCaseMapping:0xA009 - ,simpleTitleCaseMapping:0xA009 - }, - { code:0xA00A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00A - ,simpleLowerCaseMapping:0xA00A - ,simpleTitleCaseMapping:0xA00A - }, - { code:0xA00B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00B - ,simpleLowerCaseMapping:0xA00B - ,simpleTitleCaseMapping:0xA00B - }, - { code:0xA00C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00C - ,simpleLowerCaseMapping:0xA00C - ,simpleTitleCaseMapping:0xA00C - }, - { code:0xA00D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00D - ,simpleLowerCaseMapping:0xA00D - ,simpleTitleCaseMapping:0xA00D - }, - { code:0xA00E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00E - ,simpleLowerCaseMapping:0xA00E - ,simpleTitleCaseMapping:0xA00E - }, - { code:0xA00F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA00F - ,simpleLowerCaseMapping:0xA00F - ,simpleTitleCaseMapping:0xA00F - }, - { code:0xA010 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA010 - ,simpleLowerCaseMapping:0xA010 - ,simpleTitleCaseMapping:0xA010 - }, - { code:0xA011 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA011 - ,simpleLowerCaseMapping:0xA011 - ,simpleTitleCaseMapping:0xA011 - }, - { code:0xA012 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA012 - ,simpleLowerCaseMapping:0xA012 - ,simpleTitleCaseMapping:0xA012 - }, - { code:0xA013 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA013 - ,simpleLowerCaseMapping:0xA013 - ,simpleTitleCaseMapping:0xA013 - }, - { code:0xA014 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA014 - ,simpleLowerCaseMapping:0xA014 - ,simpleTitleCaseMapping:0xA014 - }, - { code:0xA015 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xA015 - ,simpleLowerCaseMapping:0xA015 - ,simpleTitleCaseMapping:0xA015 - }, - { code:0xA016 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA016 - ,simpleLowerCaseMapping:0xA016 - ,simpleTitleCaseMapping:0xA016 - }, - { code:0xA017 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA017 - ,simpleLowerCaseMapping:0xA017 - ,simpleTitleCaseMapping:0xA017 - }, - { code:0xA018 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA018 - ,simpleLowerCaseMapping:0xA018 - ,simpleTitleCaseMapping:0xA018 - }, - { code:0xA019 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA019 - ,simpleLowerCaseMapping:0xA019 - ,simpleTitleCaseMapping:0xA019 - }, - { code:0xA01A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01A - ,simpleLowerCaseMapping:0xA01A - ,simpleTitleCaseMapping:0xA01A - }, - { code:0xA01B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01B - ,simpleLowerCaseMapping:0xA01B - ,simpleTitleCaseMapping:0xA01B - }, - { code:0xA01C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01C - ,simpleLowerCaseMapping:0xA01C - ,simpleTitleCaseMapping:0xA01C - }, - { code:0xA01D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01D - ,simpleLowerCaseMapping:0xA01D - ,simpleTitleCaseMapping:0xA01D - }, - { code:0xA01E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01E - ,simpleLowerCaseMapping:0xA01E - ,simpleTitleCaseMapping:0xA01E - }, - { code:0xA01F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA01F - ,simpleLowerCaseMapping:0xA01F - ,simpleTitleCaseMapping:0xA01F - }, - { code:0xA020 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA020 - ,simpleLowerCaseMapping:0xA020 - ,simpleTitleCaseMapping:0xA020 - }, - { code:0xA021 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA021 - ,simpleLowerCaseMapping:0xA021 - ,simpleTitleCaseMapping:0xA021 - }, - { code:0xA022 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA022 - ,simpleLowerCaseMapping:0xA022 - ,simpleTitleCaseMapping:0xA022 - }, - { code:0xA023 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA023 - ,simpleLowerCaseMapping:0xA023 - ,simpleTitleCaseMapping:0xA023 - }, - { code:0xA024 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA024 - ,simpleLowerCaseMapping:0xA024 - ,simpleTitleCaseMapping:0xA024 - }, - { code:0xA025 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA025 - ,simpleLowerCaseMapping:0xA025 - ,simpleTitleCaseMapping:0xA025 - }, - { code:0xA026 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA026 - ,simpleLowerCaseMapping:0xA026 - ,simpleTitleCaseMapping:0xA026 - }, - { code:0xA027 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA027 - ,simpleLowerCaseMapping:0xA027 - ,simpleTitleCaseMapping:0xA027 - }, - { code:0xA028 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA028 - ,simpleLowerCaseMapping:0xA028 - ,simpleTitleCaseMapping:0xA028 - }, - { code:0xA029 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA029 - ,simpleLowerCaseMapping:0xA029 - ,simpleTitleCaseMapping:0xA029 - }, - { code:0xA02A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02A - ,simpleLowerCaseMapping:0xA02A - ,simpleTitleCaseMapping:0xA02A - }, - { code:0xA02B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02B - ,simpleLowerCaseMapping:0xA02B - ,simpleTitleCaseMapping:0xA02B - }, - { code:0xA02C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02C - ,simpleLowerCaseMapping:0xA02C - ,simpleTitleCaseMapping:0xA02C - }, - { code:0xA02D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02D - ,simpleLowerCaseMapping:0xA02D - ,simpleTitleCaseMapping:0xA02D - }, - { code:0xA02E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02E - ,simpleLowerCaseMapping:0xA02E - ,simpleTitleCaseMapping:0xA02E - }, - { code:0xA02F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA02F - ,simpleLowerCaseMapping:0xA02F - ,simpleTitleCaseMapping:0xA02F - }, - { code:0xA030 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA030 - ,simpleLowerCaseMapping:0xA030 - ,simpleTitleCaseMapping:0xA030 - }, - { code:0xA031 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA031 - ,simpleLowerCaseMapping:0xA031 - ,simpleTitleCaseMapping:0xA031 - }, - { code:0xA032 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA032 - ,simpleLowerCaseMapping:0xA032 - ,simpleTitleCaseMapping:0xA032 - }, - { code:0xA033 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA033 - ,simpleLowerCaseMapping:0xA033 - ,simpleTitleCaseMapping:0xA033 - }, - { code:0xA034 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA034 - ,simpleLowerCaseMapping:0xA034 - ,simpleTitleCaseMapping:0xA034 - }, - { code:0xA035 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA035 - ,simpleLowerCaseMapping:0xA035 - ,simpleTitleCaseMapping:0xA035 - }, - { code:0xA036 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA036 - ,simpleLowerCaseMapping:0xA036 - ,simpleTitleCaseMapping:0xA036 - }, - { code:0xA037 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA037 - ,simpleLowerCaseMapping:0xA037 - ,simpleTitleCaseMapping:0xA037 - }, - { code:0xA038 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA038 - ,simpleLowerCaseMapping:0xA038 - ,simpleTitleCaseMapping:0xA038 - }, - { code:0xA039 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA039 - ,simpleLowerCaseMapping:0xA039 - ,simpleTitleCaseMapping:0xA039 - }, - { code:0xA03A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03A - ,simpleLowerCaseMapping:0xA03A - ,simpleTitleCaseMapping:0xA03A - }, - { code:0xA03B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03B - ,simpleLowerCaseMapping:0xA03B - ,simpleTitleCaseMapping:0xA03B - }, - { code:0xA03C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03C - ,simpleLowerCaseMapping:0xA03C - ,simpleTitleCaseMapping:0xA03C - }, - { code:0xA03D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03D - ,simpleLowerCaseMapping:0xA03D - ,simpleTitleCaseMapping:0xA03D - }, - { code:0xA03E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03E - ,simpleLowerCaseMapping:0xA03E - ,simpleTitleCaseMapping:0xA03E - }, - { code:0xA03F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA03F - ,simpleLowerCaseMapping:0xA03F - ,simpleTitleCaseMapping:0xA03F - }, - { code:0xA040 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA040 - ,simpleLowerCaseMapping:0xA040 - ,simpleTitleCaseMapping:0xA040 - }, - { code:0xA041 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA041 - ,simpleLowerCaseMapping:0xA041 - ,simpleTitleCaseMapping:0xA041 - }, - { code:0xA042 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA042 - ,simpleLowerCaseMapping:0xA042 - ,simpleTitleCaseMapping:0xA042 - }, - { code:0xA043 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA043 - ,simpleLowerCaseMapping:0xA043 - ,simpleTitleCaseMapping:0xA043 - }, - { code:0xA044 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA044 - ,simpleLowerCaseMapping:0xA044 - ,simpleTitleCaseMapping:0xA044 - }, - { code:0xA045 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA045 - ,simpleLowerCaseMapping:0xA045 - ,simpleTitleCaseMapping:0xA045 - }, - { code:0xA046 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA046 - ,simpleLowerCaseMapping:0xA046 - ,simpleTitleCaseMapping:0xA046 - }, - { code:0xA047 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA047 - ,simpleLowerCaseMapping:0xA047 - ,simpleTitleCaseMapping:0xA047 - }, - { code:0xA048 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA048 - ,simpleLowerCaseMapping:0xA048 - ,simpleTitleCaseMapping:0xA048 - }, - { code:0xA049 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA049 - ,simpleLowerCaseMapping:0xA049 - ,simpleTitleCaseMapping:0xA049 - }, - { code:0xA04A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04A - ,simpleLowerCaseMapping:0xA04A - ,simpleTitleCaseMapping:0xA04A - }, - { code:0xA04B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04B - ,simpleLowerCaseMapping:0xA04B - ,simpleTitleCaseMapping:0xA04B - }, - { code:0xA04C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04C - ,simpleLowerCaseMapping:0xA04C - ,simpleTitleCaseMapping:0xA04C - }, - { code:0xA04D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04D - ,simpleLowerCaseMapping:0xA04D - ,simpleTitleCaseMapping:0xA04D - }, - { code:0xA04E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04E - ,simpleLowerCaseMapping:0xA04E - ,simpleTitleCaseMapping:0xA04E - }, - { code:0xA04F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA04F - ,simpleLowerCaseMapping:0xA04F - ,simpleTitleCaseMapping:0xA04F - }, - { code:0xA050 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA050 - ,simpleLowerCaseMapping:0xA050 - ,simpleTitleCaseMapping:0xA050 - }, - { code:0xA051 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA051 - ,simpleLowerCaseMapping:0xA051 - ,simpleTitleCaseMapping:0xA051 - }, - { code:0xA052 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA052 - ,simpleLowerCaseMapping:0xA052 - ,simpleTitleCaseMapping:0xA052 - }, - { code:0xA053 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA053 - ,simpleLowerCaseMapping:0xA053 - ,simpleTitleCaseMapping:0xA053 - }, - { code:0xA054 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA054 - ,simpleLowerCaseMapping:0xA054 - ,simpleTitleCaseMapping:0xA054 - }, - { code:0xA055 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA055 - ,simpleLowerCaseMapping:0xA055 - ,simpleTitleCaseMapping:0xA055 - }, - { code:0xA056 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA056 - ,simpleLowerCaseMapping:0xA056 - ,simpleTitleCaseMapping:0xA056 - }, - { code:0xA057 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA057 - ,simpleLowerCaseMapping:0xA057 - ,simpleTitleCaseMapping:0xA057 - }, - { code:0xA058 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA058 - ,simpleLowerCaseMapping:0xA058 - ,simpleTitleCaseMapping:0xA058 - }, - { code:0xA059 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA059 - ,simpleLowerCaseMapping:0xA059 - ,simpleTitleCaseMapping:0xA059 - }, - { code:0xA05A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05A - ,simpleLowerCaseMapping:0xA05A - ,simpleTitleCaseMapping:0xA05A - }, - { code:0xA05B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05B - ,simpleLowerCaseMapping:0xA05B - ,simpleTitleCaseMapping:0xA05B - }, - { code:0xA05C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05C - ,simpleLowerCaseMapping:0xA05C - ,simpleTitleCaseMapping:0xA05C - }, - { code:0xA05D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05D - ,simpleLowerCaseMapping:0xA05D - ,simpleTitleCaseMapping:0xA05D - }, - { code:0xA05E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05E - ,simpleLowerCaseMapping:0xA05E - ,simpleTitleCaseMapping:0xA05E - }, - { code:0xA05F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA05F - ,simpleLowerCaseMapping:0xA05F - ,simpleTitleCaseMapping:0xA05F - }, - { code:0xA060 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA060 - ,simpleLowerCaseMapping:0xA060 - ,simpleTitleCaseMapping:0xA060 - }, - { code:0xA061 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA061 - ,simpleLowerCaseMapping:0xA061 - ,simpleTitleCaseMapping:0xA061 - }, - { code:0xA062 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA062 - ,simpleLowerCaseMapping:0xA062 - ,simpleTitleCaseMapping:0xA062 - }, - { code:0xA063 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA063 - ,simpleLowerCaseMapping:0xA063 - ,simpleTitleCaseMapping:0xA063 - }, - { code:0xA064 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA064 - ,simpleLowerCaseMapping:0xA064 - ,simpleTitleCaseMapping:0xA064 - }, - { code:0xA065 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA065 - ,simpleLowerCaseMapping:0xA065 - ,simpleTitleCaseMapping:0xA065 - }, - { code:0xA066 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA066 - ,simpleLowerCaseMapping:0xA066 - ,simpleTitleCaseMapping:0xA066 - }, - { code:0xA067 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA067 - ,simpleLowerCaseMapping:0xA067 - ,simpleTitleCaseMapping:0xA067 - }, - { code:0xA068 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA068 - ,simpleLowerCaseMapping:0xA068 - ,simpleTitleCaseMapping:0xA068 - }, - { code:0xA069 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA069 - ,simpleLowerCaseMapping:0xA069 - ,simpleTitleCaseMapping:0xA069 - }, - { code:0xA06A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06A - ,simpleLowerCaseMapping:0xA06A - ,simpleTitleCaseMapping:0xA06A - }, - { code:0xA06B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06B - ,simpleLowerCaseMapping:0xA06B - ,simpleTitleCaseMapping:0xA06B - }, - { code:0xA06C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06C - ,simpleLowerCaseMapping:0xA06C - ,simpleTitleCaseMapping:0xA06C - }, - { code:0xA06D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06D - ,simpleLowerCaseMapping:0xA06D - ,simpleTitleCaseMapping:0xA06D - }, - { code:0xA06E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06E - ,simpleLowerCaseMapping:0xA06E - ,simpleTitleCaseMapping:0xA06E - }, - { code:0xA06F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA06F - ,simpleLowerCaseMapping:0xA06F - ,simpleTitleCaseMapping:0xA06F - }, - { code:0xA070 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA070 - ,simpleLowerCaseMapping:0xA070 - ,simpleTitleCaseMapping:0xA070 - }, - { code:0xA071 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA071 - ,simpleLowerCaseMapping:0xA071 - ,simpleTitleCaseMapping:0xA071 - }, - { code:0xA072 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA072 - ,simpleLowerCaseMapping:0xA072 - ,simpleTitleCaseMapping:0xA072 - }, - { code:0xA073 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA073 - ,simpleLowerCaseMapping:0xA073 - ,simpleTitleCaseMapping:0xA073 - }, - { code:0xA074 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA074 - ,simpleLowerCaseMapping:0xA074 - ,simpleTitleCaseMapping:0xA074 - }, - { code:0xA075 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA075 - ,simpleLowerCaseMapping:0xA075 - ,simpleTitleCaseMapping:0xA075 - }, - { code:0xA076 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA076 - ,simpleLowerCaseMapping:0xA076 - ,simpleTitleCaseMapping:0xA076 - }, - { code:0xA077 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA077 - ,simpleLowerCaseMapping:0xA077 - ,simpleTitleCaseMapping:0xA077 - }, - { code:0xA078 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA078 - ,simpleLowerCaseMapping:0xA078 - ,simpleTitleCaseMapping:0xA078 - }, - { code:0xA079 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA079 - ,simpleLowerCaseMapping:0xA079 - ,simpleTitleCaseMapping:0xA079 - }, - { code:0xA07A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07A - ,simpleLowerCaseMapping:0xA07A - ,simpleTitleCaseMapping:0xA07A - }, - { code:0xA07B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07B - ,simpleLowerCaseMapping:0xA07B - ,simpleTitleCaseMapping:0xA07B - }, - { code:0xA07C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07C - ,simpleLowerCaseMapping:0xA07C - ,simpleTitleCaseMapping:0xA07C - }, - { code:0xA07D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07D - ,simpleLowerCaseMapping:0xA07D - ,simpleTitleCaseMapping:0xA07D - }, - { code:0xA07E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07E - ,simpleLowerCaseMapping:0xA07E - ,simpleTitleCaseMapping:0xA07E - }, - { code:0xA07F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA07F - ,simpleLowerCaseMapping:0xA07F - ,simpleTitleCaseMapping:0xA07F - }, - { code:0xA080 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA080 - ,simpleLowerCaseMapping:0xA080 - ,simpleTitleCaseMapping:0xA080 - }, - { code:0xA081 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA081 - ,simpleLowerCaseMapping:0xA081 - ,simpleTitleCaseMapping:0xA081 - }, - { code:0xA082 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA082 - ,simpleLowerCaseMapping:0xA082 - ,simpleTitleCaseMapping:0xA082 - }, - { code:0xA083 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA083 - ,simpleLowerCaseMapping:0xA083 - ,simpleTitleCaseMapping:0xA083 - }, - { code:0xA084 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA084 - ,simpleLowerCaseMapping:0xA084 - ,simpleTitleCaseMapping:0xA084 - }, - { code:0xA085 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA085 - ,simpleLowerCaseMapping:0xA085 - ,simpleTitleCaseMapping:0xA085 - }, - { code:0xA086 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA086 - ,simpleLowerCaseMapping:0xA086 - ,simpleTitleCaseMapping:0xA086 - }, - { code:0xA087 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA087 - ,simpleLowerCaseMapping:0xA087 - ,simpleTitleCaseMapping:0xA087 - }, - { code:0xA088 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA088 - ,simpleLowerCaseMapping:0xA088 - ,simpleTitleCaseMapping:0xA088 - }, - { code:0xA089 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA089 - ,simpleLowerCaseMapping:0xA089 - ,simpleTitleCaseMapping:0xA089 - }, - { code:0xA08A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08A - ,simpleLowerCaseMapping:0xA08A - ,simpleTitleCaseMapping:0xA08A - }, - { code:0xA08B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08B - ,simpleLowerCaseMapping:0xA08B - ,simpleTitleCaseMapping:0xA08B - }, - { code:0xA08C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08C - ,simpleLowerCaseMapping:0xA08C - ,simpleTitleCaseMapping:0xA08C - }, - { code:0xA08D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08D - ,simpleLowerCaseMapping:0xA08D - ,simpleTitleCaseMapping:0xA08D - }, - { code:0xA08E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08E - ,simpleLowerCaseMapping:0xA08E - ,simpleTitleCaseMapping:0xA08E - }, - { code:0xA08F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA08F - ,simpleLowerCaseMapping:0xA08F - ,simpleTitleCaseMapping:0xA08F - }, - { code:0xA090 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA090 - ,simpleLowerCaseMapping:0xA090 - ,simpleTitleCaseMapping:0xA090 - }, - { code:0xA091 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA091 - ,simpleLowerCaseMapping:0xA091 - ,simpleTitleCaseMapping:0xA091 - }, - { code:0xA092 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA092 - ,simpleLowerCaseMapping:0xA092 - ,simpleTitleCaseMapping:0xA092 - }, - { code:0xA093 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA093 - ,simpleLowerCaseMapping:0xA093 - ,simpleTitleCaseMapping:0xA093 - }, - { code:0xA094 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA094 - ,simpleLowerCaseMapping:0xA094 - ,simpleTitleCaseMapping:0xA094 - }, - { code:0xA095 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA095 - ,simpleLowerCaseMapping:0xA095 - ,simpleTitleCaseMapping:0xA095 - }, - { code:0xA096 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA096 - ,simpleLowerCaseMapping:0xA096 - ,simpleTitleCaseMapping:0xA096 - }, - { code:0xA097 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA097 - ,simpleLowerCaseMapping:0xA097 - ,simpleTitleCaseMapping:0xA097 - }, - { code:0xA098 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA098 - ,simpleLowerCaseMapping:0xA098 - ,simpleTitleCaseMapping:0xA098 - }, - { code:0xA099 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA099 - ,simpleLowerCaseMapping:0xA099 - ,simpleTitleCaseMapping:0xA099 - }, - { code:0xA09A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09A - ,simpleLowerCaseMapping:0xA09A - ,simpleTitleCaseMapping:0xA09A - }, - { code:0xA09B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09B - ,simpleLowerCaseMapping:0xA09B - ,simpleTitleCaseMapping:0xA09B - }, - { code:0xA09C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09C - ,simpleLowerCaseMapping:0xA09C - ,simpleTitleCaseMapping:0xA09C - }, - { code:0xA09D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09D - ,simpleLowerCaseMapping:0xA09D - ,simpleTitleCaseMapping:0xA09D - }, - { code:0xA09E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09E - ,simpleLowerCaseMapping:0xA09E - ,simpleTitleCaseMapping:0xA09E - }, - { code:0xA09F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA09F - ,simpleLowerCaseMapping:0xA09F - ,simpleTitleCaseMapping:0xA09F - }, - { code:0xA0A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A0 - ,simpleLowerCaseMapping:0xA0A0 - ,simpleTitleCaseMapping:0xA0A0 - }, - { code:0xA0A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A1 - ,simpleLowerCaseMapping:0xA0A1 - ,simpleTitleCaseMapping:0xA0A1 - }, - { code:0xA0A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A2 - ,simpleLowerCaseMapping:0xA0A2 - ,simpleTitleCaseMapping:0xA0A2 - }, - { code:0xA0A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A3 - ,simpleLowerCaseMapping:0xA0A3 - ,simpleTitleCaseMapping:0xA0A3 - }, - { code:0xA0A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A4 - ,simpleLowerCaseMapping:0xA0A4 - ,simpleTitleCaseMapping:0xA0A4 - }, - { code:0xA0A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A5 - ,simpleLowerCaseMapping:0xA0A5 - ,simpleTitleCaseMapping:0xA0A5 - }, - { code:0xA0A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A6 - ,simpleLowerCaseMapping:0xA0A6 - ,simpleTitleCaseMapping:0xA0A6 - }, - { code:0xA0A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A7 - ,simpleLowerCaseMapping:0xA0A7 - ,simpleTitleCaseMapping:0xA0A7 - }, - { code:0xA0A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A8 - ,simpleLowerCaseMapping:0xA0A8 - ,simpleTitleCaseMapping:0xA0A8 - }, - { code:0xA0A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0A9 - ,simpleLowerCaseMapping:0xA0A9 - ,simpleTitleCaseMapping:0xA0A9 - }, - { code:0xA0AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AA - ,simpleLowerCaseMapping:0xA0AA - ,simpleTitleCaseMapping:0xA0AA - }, - { code:0xA0AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AB - ,simpleLowerCaseMapping:0xA0AB - ,simpleTitleCaseMapping:0xA0AB - }, - { code:0xA0AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AC - ,simpleLowerCaseMapping:0xA0AC - ,simpleTitleCaseMapping:0xA0AC - }, - { code:0xA0AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AD - ,simpleLowerCaseMapping:0xA0AD - ,simpleTitleCaseMapping:0xA0AD - }, - { code:0xA0AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AE - ,simpleLowerCaseMapping:0xA0AE - ,simpleTitleCaseMapping:0xA0AE - }, - { code:0xA0AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0AF - ,simpleLowerCaseMapping:0xA0AF - ,simpleTitleCaseMapping:0xA0AF - }, - { code:0xA0B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B0 - ,simpleLowerCaseMapping:0xA0B0 - ,simpleTitleCaseMapping:0xA0B0 - }, - { code:0xA0B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B1 - ,simpleLowerCaseMapping:0xA0B1 - ,simpleTitleCaseMapping:0xA0B1 - }, - { code:0xA0B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B2 - ,simpleLowerCaseMapping:0xA0B2 - ,simpleTitleCaseMapping:0xA0B2 - }, - { code:0xA0B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B3 - ,simpleLowerCaseMapping:0xA0B3 - ,simpleTitleCaseMapping:0xA0B3 - }, - { code:0xA0B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B4 - ,simpleLowerCaseMapping:0xA0B4 - ,simpleTitleCaseMapping:0xA0B4 - }, - { code:0xA0B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B5 - ,simpleLowerCaseMapping:0xA0B5 - ,simpleTitleCaseMapping:0xA0B5 - }, - { code:0xA0B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B6 - ,simpleLowerCaseMapping:0xA0B6 - ,simpleTitleCaseMapping:0xA0B6 - }, - { code:0xA0B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B7 - ,simpleLowerCaseMapping:0xA0B7 - ,simpleTitleCaseMapping:0xA0B7 - }, - { code:0xA0B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B8 - ,simpleLowerCaseMapping:0xA0B8 - ,simpleTitleCaseMapping:0xA0B8 - }, - { code:0xA0B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0B9 - ,simpleLowerCaseMapping:0xA0B9 - ,simpleTitleCaseMapping:0xA0B9 - }, - { code:0xA0BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BA - ,simpleLowerCaseMapping:0xA0BA - ,simpleTitleCaseMapping:0xA0BA - }, - { code:0xA0BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BB - ,simpleLowerCaseMapping:0xA0BB - ,simpleTitleCaseMapping:0xA0BB - }, - { code:0xA0BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BC - ,simpleLowerCaseMapping:0xA0BC - ,simpleTitleCaseMapping:0xA0BC - }, - { code:0xA0BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BD - ,simpleLowerCaseMapping:0xA0BD - ,simpleTitleCaseMapping:0xA0BD - }, - { code:0xA0BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BE - ,simpleLowerCaseMapping:0xA0BE - ,simpleTitleCaseMapping:0xA0BE - }, - { code:0xA0BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0BF - ,simpleLowerCaseMapping:0xA0BF - ,simpleTitleCaseMapping:0xA0BF - }, - { code:0xA0C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C0 - ,simpleLowerCaseMapping:0xA0C0 - ,simpleTitleCaseMapping:0xA0C0 - }, - { code:0xA0C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C1 - ,simpleLowerCaseMapping:0xA0C1 - ,simpleTitleCaseMapping:0xA0C1 - }, - { code:0xA0C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C2 - ,simpleLowerCaseMapping:0xA0C2 - ,simpleTitleCaseMapping:0xA0C2 - }, - { code:0xA0C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C3 - ,simpleLowerCaseMapping:0xA0C3 - ,simpleTitleCaseMapping:0xA0C3 - }, - { code:0xA0C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C4 - ,simpleLowerCaseMapping:0xA0C4 - ,simpleTitleCaseMapping:0xA0C4 - }, - { code:0xA0C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C5 - ,simpleLowerCaseMapping:0xA0C5 - ,simpleTitleCaseMapping:0xA0C5 - }, - { code:0xA0C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C6 - ,simpleLowerCaseMapping:0xA0C6 - ,simpleTitleCaseMapping:0xA0C6 - }, - { code:0xA0C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C7 - ,simpleLowerCaseMapping:0xA0C7 - ,simpleTitleCaseMapping:0xA0C7 - }, - { code:0xA0C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C8 - ,simpleLowerCaseMapping:0xA0C8 - ,simpleTitleCaseMapping:0xA0C8 - }, - { code:0xA0C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0C9 - ,simpleLowerCaseMapping:0xA0C9 - ,simpleTitleCaseMapping:0xA0C9 - }, - { code:0xA0CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CA - ,simpleLowerCaseMapping:0xA0CA - ,simpleTitleCaseMapping:0xA0CA - }, - { code:0xA0CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CB - ,simpleLowerCaseMapping:0xA0CB - ,simpleTitleCaseMapping:0xA0CB - }, - { code:0xA0CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CC - ,simpleLowerCaseMapping:0xA0CC - ,simpleTitleCaseMapping:0xA0CC - }, - { code:0xA0CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CD - ,simpleLowerCaseMapping:0xA0CD - ,simpleTitleCaseMapping:0xA0CD - }, - { code:0xA0CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CE - ,simpleLowerCaseMapping:0xA0CE - ,simpleTitleCaseMapping:0xA0CE - }, - { code:0xA0CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0CF - ,simpleLowerCaseMapping:0xA0CF - ,simpleTitleCaseMapping:0xA0CF - }, - { code:0xA0D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D0 - ,simpleLowerCaseMapping:0xA0D0 - ,simpleTitleCaseMapping:0xA0D0 - }, - { code:0xA0D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D1 - ,simpleLowerCaseMapping:0xA0D1 - ,simpleTitleCaseMapping:0xA0D1 - }, - { code:0xA0D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D2 - ,simpleLowerCaseMapping:0xA0D2 - ,simpleTitleCaseMapping:0xA0D2 - }, - { code:0xA0D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D3 - ,simpleLowerCaseMapping:0xA0D3 - ,simpleTitleCaseMapping:0xA0D3 - }, - { code:0xA0D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D4 - ,simpleLowerCaseMapping:0xA0D4 - ,simpleTitleCaseMapping:0xA0D4 - }, - { code:0xA0D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D5 - ,simpleLowerCaseMapping:0xA0D5 - ,simpleTitleCaseMapping:0xA0D5 - }, - { code:0xA0D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D6 - ,simpleLowerCaseMapping:0xA0D6 - ,simpleTitleCaseMapping:0xA0D6 - }, - { code:0xA0D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D7 - ,simpleLowerCaseMapping:0xA0D7 - ,simpleTitleCaseMapping:0xA0D7 - }, - { code:0xA0D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D8 - ,simpleLowerCaseMapping:0xA0D8 - ,simpleTitleCaseMapping:0xA0D8 - }, - { code:0xA0D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0D9 - ,simpleLowerCaseMapping:0xA0D9 - ,simpleTitleCaseMapping:0xA0D9 - }, - { code:0xA0DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DA - ,simpleLowerCaseMapping:0xA0DA - ,simpleTitleCaseMapping:0xA0DA - }, - { code:0xA0DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DB - ,simpleLowerCaseMapping:0xA0DB - ,simpleTitleCaseMapping:0xA0DB - }, - { code:0xA0DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DC - ,simpleLowerCaseMapping:0xA0DC - ,simpleTitleCaseMapping:0xA0DC - }, - { code:0xA0DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DD - ,simpleLowerCaseMapping:0xA0DD - ,simpleTitleCaseMapping:0xA0DD - }, - { code:0xA0DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DE - ,simpleLowerCaseMapping:0xA0DE - ,simpleTitleCaseMapping:0xA0DE - }, - { code:0xA0DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0DF - ,simpleLowerCaseMapping:0xA0DF - ,simpleTitleCaseMapping:0xA0DF - }, - { code:0xA0E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E0 - ,simpleLowerCaseMapping:0xA0E0 - ,simpleTitleCaseMapping:0xA0E0 - }, - { code:0xA0E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E1 - ,simpleLowerCaseMapping:0xA0E1 - ,simpleTitleCaseMapping:0xA0E1 - }, - { code:0xA0E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E2 - ,simpleLowerCaseMapping:0xA0E2 - ,simpleTitleCaseMapping:0xA0E2 - }, - { code:0xA0E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E3 - ,simpleLowerCaseMapping:0xA0E3 - ,simpleTitleCaseMapping:0xA0E3 - }, - { code:0xA0E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E4 - ,simpleLowerCaseMapping:0xA0E4 - ,simpleTitleCaseMapping:0xA0E4 - }, - { code:0xA0E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E5 - ,simpleLowerCaseMapping:0xA0E5 - ,simpleTitleCaseMapping:0xA0E5 - }, - { code:0xA0E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E6 - ,simpleLowerCaseMapping:0xA0E6 - ,simpleTitleCaseMapping:0xA0E6 - }, - { code:0xA0E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E7 - ,simpleLowerCaseMapping:0xA0E7 - ,simpleTitleCaseMapping:0xA0E7 - }, - { code:0xA0E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E8 - ,simpleLowerCaseMapping:0xA0E8 - ,simpleTitleCaseMapping:0xA0E8 - }, - { code:0xA0E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0E9 - ,simpleLowerCaseMapping:0xA0E9 - ,simpleTitleCaseMapping:0xA0E9 - }, - { code:0xA0EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0EA - ,simpleLowerCaseMapping:0xA0EA - ,simpleTitleCaseMapping:0xA0EA - }, - { code:0xA0EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0EB - ,simpleLowerCaseMapping:0xA0EB - ,simpleTitleCaseMapping:0xA0EB - }, - { code:0xA0EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0EC - ,simpleLowerCaseMapping:0xA0EC - ,simpleTitleCaseMapping:0xA0EC - }, - { code:0xA0ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0ED - ,simpleLowerCaseMapping:0xA0ED - ,simpleTitleCaseMapping:0xA0ED - }, - { code:0xA0EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0EE - ,simpleLowerCaseMapping:0xA0EE - ,simpleTitleCaseMapping:0xA0EE - }, - { code:0xA0EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0EF - ,simpleLowerCaseMapping:0xA0EF - ,simpleTitleCaseMapping:0xA0EF - }, - { code:0xA0F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F0 - ,simpleLowerCaseMapping:0xA0F0 - ,simpleTitleCaseMapping:0xA0F0 - }, - { code:0xA0F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F1 - ,simpleLowerCaseMapping:0xA0F1 - ,simpleTitleCaseMapping:0xA0F1 - }, - { code:0xA0F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F2 - ,simpleLowerCaseMapping:0xA0F2 - ,simpleTitleCaseMapping:0xA0F2 - }, - { code:0xA0F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F3 - ,simpleLowerCaseMapping:0xA0F3 - ,simpleTitleCaseMapping:0xA0F3 - }, - { code:0xA0F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F4 - ,simpleLowerCaseMapping:0xA0F4 - ,simpleTitleCaseMapping:0xA0F4 - }, - { code:0xA0F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F5 - ,simpleLowerCaseMapping:0xA0F5 - ,simpleTitleCaseMapping:0xA0F5 - }, - { code:0xA0F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F6 - ,simpleLowerCaseMapping:0xA0F6 - ,simpleTitleCaseMapping:0xA0F6 - }, - { code:0xA0F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F7 - ,simpleLowerCaseMapping:0xA0F7 - ,simpleTitleCaseMapping:0xA0F7 - }, - { code:0xA0F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F8 - ,simpleLowerCaseMapping:0xA0F8 - ,simpleTitleCaseMapping:0xA0F8 - }, - { code:0xA0F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0F9 - ,simpleLowerCaseMapping:0xA0F9 - ,simpleTitleCaseMapping:0xA0F9 - }, - { code:0xA0FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FA - ,simpleLowerCaseMapping:0xA0FA - ,simpleTitleCaseMapping:0xA0FA - }, - { code:0xA0FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FB - ,simpleLowerCaseMapping:0xA0FB - ,simpleTitleCaseMapping:0xA0FB - }, - { code:0xA0FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FC - ,simpleLowerCaseMapping:0xA0FC - ,simpleTitleCaseMapping:0xA0FC - }, - { code:0xA0FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FD - ,simpleLowerCaseMapping:0xA0FD - ,simpleTitleCaseMapping:0xA0FD - }, - { code:0xA0FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FE - ,simpleLowerCaseMapping:0xA0FE - ,simpleTitleCaseMapping:0xA0FE - }, - { code:0xA0FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA0FF - ,simpleLowerCaseMapping:0xA0FF - ,simpleTitleCaseMapping:0xA0FF - }, - { code:0xA100 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA100 - ,simpleLowerCaseMapping:0xA100 - ,simpleTitleCaseMapping:0xA100 - }, - { code:0xA101 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA101 - ,simpleLowerCaseMapping:0xA101 - ,simpleTitleCaseMapping:0xA101 - }, - { code:0xA102 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA102 - ,simpleLowerCaseMapping:0xA102 - ,simpleTitleCaseMapping:0xA102 - }, - { code:0xA103 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA103 - ,simpleLowerCaseMapping:0xA103 - ,simpleTitleCaseMapping:0xA103 - }, - { code:0xA104 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA104 - ,simpleLowerCaseMapping:0xA104 - ,simpleTitleCaseMapping:0xA104 - }, - { code:0xA105 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA105 - ,simpleLowerCaseMapping:0xA105 - ,simpleTitleCaseMapping:0xA105 - }, - { code:0xA106 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA106 - ,simpleLowerCaseMapping:0xA106 - ,simpleTitleCaseMapping:0xA106 - }, - { code:0xA107 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA107 - ,simpleLowerCaseMapping:0xA107 - ,simpleTitleCaseMapping:0xA107 - }, - { code:0xA108 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA108 - ,simpleLowerCaseMapping:0xA108 - ,simpleTitleCaseMapping:0xA108 - }, - { code:0xA109 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA109 - ,simpleLowerCaseMapping:0xA109 - ,simpleTitleCaseMapping:0xA109 - }, - { code:0xA10A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10A - ,simpleLowerCaseMapping:0xA10A - ,simpleTitleCaseMapping:0xA10A - }, - { code:0xA10B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10B - ,simpleLowerCaseMapping:0xA10B - ,simpleTitleCaseMapping:0xA10B - }, - { code:0xA10C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10C - ,simpleLowerCaseMapping:0xA10C - ,simpleTitleCaseMapping:0xA10C - }, - { code:0xA10D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10D - ,simpleLowerCaseMapping:0xA10D - ,simpleTitleCaseMapping:0xA10D - }, - { code:0xA10E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10E - ,simpleLowerCaseMapping:0xA10E - ,simpleTitleCaseMapping:0xA10E - }, - { code:0xA10F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA10F - ,simpleLowerCaseMapping:0xA10F - ,simpleTitleCaseMapping:0xA10F - }, - { code:0xA110 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA110 - ,simpleLowerCaseMapping:0xA110 - ,simpleTitleCaseMapping:0xA110 - }, - { code:0xA111 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA111 - ,simpleLowerCaseMapping:0xA111 - ,simpleTitleCaseMapping:0xA111 - }, - { code:0xA112 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA112 - ,simpleLowerCaseMapping:0xA112 - ,simpleTitleCaseMapping:0xA112 - }, - { code:0xA113 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA113 - ,simpleLowerCaseMapping:0xA113 - ,simpleTitleCaseMapping:0xA113 - }, - { code:0xA114 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA114 - ,simpleLowerCaseMapping:0xA114 - ,simpleTitleCaseMapping:0xA114 - }, - { code:0xA115 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA115 - ,simpleLowerCaseMapping:0xA115 - ,simpleTitleCaseMapping:0xA115 - }, - { code:0xA116 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA116 - ,simpleLowerCaseMapping:0xA116 - ,simpleTitleCaseMapping:0xA116 - }, - { code:0xA117 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA117 - ,simpleLowerCaseMapping:0xA117 - ,simpleTitleCaseMapping:0xA117 - }, - { code:0xA118 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA118 - ,simpleLowerCaseMapping:0xA118 - ,simpleTitleCaseMapping:0xA118 - }, - { code:0xA119 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA119 - ,simpleLowerCaseMapping:0xA119 - ,simpleTitleCaseMapping:0xA119 - }, - { code:0xA11A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11A - ,simpleLowerCaseMapping:0xA11A - ,simpleTitleCaseMapping:0xA11A - }, - { code:0xA11B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11B - ,simpleLowerCaseMapping:0xA11B - ,simpleTitleCaseMapping:0xA11B - }, - { code:0xA11C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11C - ,simpleLowerCaseMapping:0xA11C - ,simpleTitleCaseMapping:0xA11C - }, - { code:0xA11D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11D - ,simpleLowerCaseMapping:0xA11D - ,simpleTitleCaseMapping:0xA11D - }, - { code:0xA11E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11E - ,simpleLowerCaseMapping:0xA11E - ,simpleTitleCaseMapping:0xA11E - }, - { code:0xA11F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA11F - ,simpleLowerCaseMapping:0xA11F - ,simpleTitleCaseMapping:0xA11F - }, - { code:0xA120 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA120 - ,simpleLowerCaseMapping:0xA120 - ,simpleTitleCaseMapping:0xA120 - }, - { code:0xA121 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA121 - ,simpleLowerCaseMapping:0xA121 - ,simpleTitleCaseMapping:0xA121 - }, - { code:0xA122 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA122 - ,simpleLowerCaseMapping:0xA122 - ,simpleTitleCaseMapping:0xA122 - }, - { code:0xA123 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA123 - ,simpleLowerCaseMapping:0xA123 - ,simpleTitleCaseMapping:0xA123 - }, - { code:0xA124 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA124 - ,simpleLowerCaseMapping:0xA124 - ,simpleTitleCaseMapping:0xA124 - }, - { code:0xA125 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA125 - ,simpleLowerCaseMapping:0xA125 - ,simpleTitleCaseMapping:0xA125 - }, - { code:0xA126 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA126 - ,simpleLowerCaseMapping:0xA126 - ,simpleTitleCaseMapping:0xA126 - }, - { code:0xA127 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA127 - ,simpleLowerCaseMapping:0xA127 - ,simpleTitleCaseMapping:0xA127 - }, - { code:0xA128 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA128 - ,simpleLowerCaseMapping:0xA128 - ,simpleTitleCaseMapping:0xA128 - }, - { code:0xA129 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA129 - ,simpleLowerCaseMapping:0xA129 - ,simpleTitleCaseMapping:0xA129 - }, - { code:0xA12A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12A - ,simpleLowerCaseMapping:0xA12A - ,simpleTitleCaseMapping:0xA12A - }, - { code:0xA12B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12B - ,simpleLowerCaseMapping:0xA12B - ,simpleTitleCaseMapping:0xA12B - }, - { code:0xA12C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12C - ,simpleLowerCaseMapping:0xA12C - ,simpleTitleCaseMapping:0xA12C - }, - { code:0xA12D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12D - ,simpleLowerCaseMapping:0xA12D - ,simpleTitleCaseMapping:0xA12D - }, - { code:0xA12E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12E - ,simpleLowerCaseMapping:0xA12E - ,simpleTitleCaseMapping:0xA12E - }, - { code:0xA12F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA12F - ,simpleLowerCaseMapping:0xA12F - ,simpleTitleCaseMapping:0xA12F - }, - { code:0xA130 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA130 - ,simpleLowerCaseMapping:0xA130 - ,simpleTitleCaseMapping:0xA130 - }, - { code:0xA131 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA131 - ,simpleLowerCaseMapping:0xA131 - ,simpleTitleCaseMapping:0xA131 - }, - { code:0xA132 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA132 - ,simpleLowerCaseMapping:0xA132 - ,simpleTitleCaseMapping:0xA132 - }, - { code:0xA133 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA133 - ,simpleLowerCaseMapping:0xA133 - ,simpleTitleCaseMapping:0xA133 - }, - { code:0xA134 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA134 - ,simpleLowerCaseMapping:0xA134 - ,simpleTitleCaseMapping:0xA134 - }, - { code:0xA135 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA135 - ,simpleLowerCaseMapping:0xA135 - ,simpleTitleCaseMapping:0xA135 - }, - { code:0xA136 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA136 - ,simpleLowerCaseMapping:0xA136 - ,simpleTitleCaseMapping:0xA136 - }, - { code:0xA137 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA137 - ,simpleLowerCaseMapping:0xA137 - ,simpleTitleCaseMapping:0xA137 - }, - { code:0xA138 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA138 - ,simpleLowerCaseMapping:0xA138 - ,simpleTitleCaseMapping:0xA138 - }, - { code:0xA139 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA139 - ,simpleLowerCaseMapping:0xA139 - ,simpleTitleCaseMapping:0xA139 - }, - { code:0xA13A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13A - ,simpleLowerCaseMapping:0xA13A - ,simpleTitleCaseMapping:0xA13A - }, - { code:0xA13B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13B - ,simpleLowerCaseMapping:0xA13B - ,simpleTitleCaseMapping:0xA13B - }, - { code:0xA13C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13C - ,simpleLowerCaseMapping:0xA13C - ,simpleTitleCaseMapping:0xA13C - }, - { code:0xA13D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13D - ,simpleLowerCaseMapping:0xA13D - ,simpleTitleCaseMapping:0xA13D - }, - { code:0xA13E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13E - ,simpleLowerCaseMapping:0xA13E - ,simpleTitleCaseMapping:0xA13E - }, - { code:0xA13F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA13F - ,simpleLowerCaseMapping:0xA13F - ,simpleTitleCaseMapping:0xA13F - }, - { code:0xA140 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA140 - ,simpleLowerCaseMapping:0xA140 - ,simpleTitleCaseMapping:0xA140 - }, - { code:0xA141 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA141 - ,simpleLowerCaseMapping:0xA141 - ,simpleTitleCaseMapping:0xA141 - }, - { code:0xA142 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA142 - ,simpleLowerCaseMapping:0xA142 - ,simpleTitleCaseMapping:0xA142 - }, - { code:0xA143 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA143 - ,simpleLowerCaseMapping:0xA143 - ,simpleTitleCaseMapping:0xA143 - }, - { code:0xA144 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA144 - ,simpleLowerCaseMapping:0xA144 - ,simpleTitleCaseMapping:0xA144 - }, - { code:0xA145 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA145 - ,simpleLowerCaseMapping:0xA145 - ,simpleTitleCaseMapping:0xA145 - }, - { code:0xA146 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA146 - ,simpleLowerCaseMapping:0xA146 - ,simpleTitleCaseMapping:0xA146 - }, - { code:0xA147 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA147 - ,simpleLowerCaseMapping:0xA147 - ,simpleTitleCaseMapping:0xA147 - }, - { code:0xA148 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA148 - ,simpleLowerCaseMapping:0xA148 - ,simpleTitleCaseMapping:0xA148 - }, - { code:0xA149 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA149 - ,simpleLowerCaseMapping:0xA149 - ,simpleTitleCaseMapping:0xA149 - }, - { code:0xA14A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14A - ,simpleLowerCaseMapping:0xA14A - ,simpleTitleCaseMapping:0xA14A - }, - { code:0xA14B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14B - ,simpleLowerCaseMapping:0xA14B - ,simpleTitleCaseMapping:0xA14B - }, - { code:0xA14C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14C - ,simpleLowerCaseMapping:0xA14C - ,simpleTitleCaseMapping:0xA14C - }, - { code:0xA14D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14D - ,simpleLowerCaseMapping:0xA14D - ,simpleTitleCaseMapping:0xA14D - }, - { code:0xA14E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14E - ,simpleLowerCaseMapping:0xA14E - ,simpleTitleCaseMapping:0xA14E - }, - { code:0xA14F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA14F - ,simpleLowerCaseMapping:0xA14F - ,simpleTitleCaseMapping:0xA14F - }, - { code:0xA150 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA150 - ,simpleLowerCaseMapping:0xA150 - ,simpleTitleCaseMapping:0xA150 - }, - { code:0xA151 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA151 - ,simpleLowerCaseMapping:0xA151 - ,simpleTitleCaseMapping:0xA151 - }, - { code:0xA152 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA152 - ,simpleLowerCaseMapping:0xA152 - ,simpleTitleCaseMapping:0xA152 - }, - { code:0xA153 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA153 - ,simpleLowerCaseMapping:0xA153 - ,simpleTitleCaseMapping:0xA153 - }, - { code:0xA154 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA154 - ,simpleLowerCaseMapping:0xA154 - ,simpleTitleCaseMapping:0xA154 - }, - { code:0xA155 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA155 - ,simpleLowerCaseMapping:0xA155 - ,simpleTitleCaseMapping:0xA155 - }, - { code:0xA156 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA156 - ,simpleLowerCaseMapping:0xA156 - ,simpleTitleCaseMapping:0xA156 - }, - { code:0xA157 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA157 - ,simpleLowerCaseMapping:0xA157 - ,simpleTitleCaseMapping:0xA157 - }, - { code:0xA158 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA158 - ,simpleLowerCaseMapping:0xA158 - ,simpleTitleCaseMapping:0xA158 - }, - { code:0xA159 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA159 - ,simpleLowerCaseMapping:0xA159 - ,simpleTitleCaseMapping:0xA159 - }, - { code:0xA15A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15A - ,simpleLowerCaseMapping:0xA15A - ,simpleTitleCaseMapping:0xA15A - }, - { code:0xA15B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15B - ,simpleLowerCaseMapping:0xA15B - ,simpleTitleCaseMapping:0xA15B - }, - { code:0xA15C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15C - ,simpleLowerCaseMapping:0xA15C - ,simpleTitleCaseMapping:0xA15C - }, - { code:0xA15D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15D - ,simpleLowerCaseMapping:0xA15D - ,simpleTitleCaseMapping:0xA15D - }, - { code:0xA15E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15E - ,simpleLowerCaseMapping:0xA15E - ,simpleTitleCaseMapping:0xA15E - }, - { code:0xA15F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA15F - ,simpleLowerCaseMapping:0xA15F - ,simpleTitleCaseMapping:0xA15F - }, - { code:0xA160 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA160 - ,simpleLowerCaseMapping:0xA160 - ,simpleTitleCaseMapping:0xA160 - }, - { code:0xA161 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA161 - ,simpleLowerCaseMapping:0xA161 - ,simpleTitleCaseMapping:0xA161 - }, - { code:0xA162 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA162 - ,simpleLowerCaseMapping:0xA162 - ,simpleTitleCaseMapping:0xA162 - }, - { code:0xA163 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA163 - ,simpleLowerCaseMapping:0xA163 - ,simpleTitleCaseMapping:0xA163 - }, - { code:0xA164 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA164 - ,simpleLowerCaseMapping:0xA164 - ,simpleTitleCaseMapping:0xA164 - }, - { code:0xA165 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA165 - ,simpleLowerCaseMapping:0xA165 - ,simpleTitleCaseMapping:0xA165 - }, - { code:0xA166 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA166 - ,simpleLowerCaseMapping:0xA166 - ,simpleTitleCaseMapping:0xA166 - }, - { code:0xA167 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA167 - ,simpleLowerCaseMapping:0xA167 - ,simpleTitleCaseMapping:0xA167 - }, - { code:0xA168 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA168 - ,simpleLowerCaseMapping:0xA168 - ,simpleTitleCaseMapping:0xA168 - }, - { code:0xA169 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA169 - ,simpleLowerCaseMapping:0xA169 - ,simpleTitleCaseMapping:0xA169 - }, - { code:0xA16A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16A - ,simpleLowerCaseMapping:0xA16A - ,simpleTitleCaseMapping:0xA16A - }, - { code:0xA16B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16B - ,simpleLowerCaseMapping:0xA16B - ,simpleTitleCaseMapping:0xA16B - }, - { code:0xA16C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16C - ,simpleLowerCaseMapping:0xA16C - ,simpleTitleCaseMapping:0xA16C - }, - { code:0xA16D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16D - ,simpleLowerCaseMapping:0xA16D - ,simpleTitleCaseMapping:0xA16D - }, - { code:0xA16E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16E - ,simpleLowerCaseMapping:0xA16E - ,simpleTitleCaseMapping:0xA16E - }, - { code:0xA16F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA16F - ,simpleLowerCaseMapping:0xA16F - ,simpleTitleCaseMapping:0xA16F - }, - { code:0xA170 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA170 - ,simpleLowerCaseMapping:0xA170 - ,simpleTitleCaseMapping:0xA170 - }, - { code:0xA171 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA171 - ,simpleLowerCaseMapping:0xA171 - ,simpleTitleCaseMapping:0xA171 - }, - { code:0xA172 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA172 - ,simpleLowerCaseMapping:0xA172 - ,simpleTitleCaseMapping:0xA172 - }, - { code:0xA173 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA173 - ,simpleLowerCaseMapping:0xA173 - ,simpleTitleCaseMapping:0xA173 - }, - { code:0xA174 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA174 - ,simpleLowerCaseMapping:0xA174 - ,simpleTitleCaseMapping:0xA174 - }, - { code:0xA175 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA175 - ,simpleLowerCaseMapping:0xA175 - ,simpleTitleCaseMapping:0xA175 - }, - { code:0xA176 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA176 - ,simpleLowerCaseMapping:0xA176 - ,simpleTitleCaseMapping:0xA176 - }, - { code:0xA177 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA177 - ,simpleLowerCaseMapping:0xA177 - ,simpleTitleCaseMapping:0xA177 - }, - { code:0xA178 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA178 - ,simpleLowerCaseMapping:0xA178 - ,simpleTitleCaseMapping:0xA178 - }, - { code:0xA179 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA179 - ,simpleLowerCaseMapping:0xA179 - ,simpleTitleCaseMapping:0xA179 - }, - { code:0xA17A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17A - ,simpleLowerCaseMapping:0xA17A - ,simpleTitleCaseMapping:0xA17A - }, - { code:0xA17B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17B - ,simpleLowerCaseMapping:0xA17B - ,simpleTitleCaseMapping:0xA17B - }, - { code:0xA17C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17C - ,simpleLowerCaseMapping:0xA17C - ,simpleTitleCaseMapping:0xA17C - }, - { code:0xA17D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17D - ,simpleLowerCaseMapping:0xA17D - ,simpleTitleCaseMapping:0xA17D - }, - { code:0xA17E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17E - ,simpleLowerCaseMapping:0xA17E - ,simpleTitleCaseMapping:0xA17E - }, - { code:0xA17F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA17F - ,simpleLowerCaseMapping:0xA17F - ,simpleTitleCaseMapping:0xA17F - }, - { code:0xA180 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA180 - ,simpleLowerCaseMapping:0xA180 - ,simpleTitleCaseMapping:0xA180 - }, - { code:0xA181 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA181 - ,simpleLowerCaseMapping:0xA181 - ,simpleTitleCaseMapping:0xA181 - }, - { code:0xA182 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA182 - ,simpleLowerCaseMapping:0xA182 - ,simpleTitleCaseMapping:0xA182 - }, - { code:0xA183 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA183 - ,simpleLowerCaseMapping:0xA183 - ,simpleTitleCaseMapping:0xA183 - }, - { code:0xA184 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA184 - ,simpleLowerCaseMapping:0xA184 - ,simpleTitleCaseMapping:0xA184 - }, - { code:0xA185 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA185 - ,simpleLowerCaseMapping:0xA185 - ,simpleTitleCaseMapping:0xA185 - }, - { code:0xA186 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA186 - ,simpleLowerCaseMapping:0xA186 - ,simpleTitleCaseMapping:0xA186 - }, - { code:0xA187 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA187 - ,simpleLowerCaseMapping:0xA187 - ,simpleTitleCaseMapping:0xA187 - }, - { code:0xA188 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA188 - ,simpleLowerCaseMapping:0xA188 - ,simpleTitleCaseMapping:0xA188 - }, - { code:0xA189 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA189 - ,simpleLowerCaseMapping:0xA189 - ,simpleTitleCaseMapping:0xA189 - }, - { code:0xA18A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18A - ,simpleLowerCaseMapping:0xA18A - ,simpleTitleCaseMapping:0xA18A - }, - { code:0xA18B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18B - ,simpleLowerCaseMapping:0xA18B - ,simpleTitleCaseMapping:0xA18B - }, - { code:0xA18C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18C - ,simpleLowerCaseMapping:0xA18C - ,simpleTitleCaseMapping:0xA18C - }, - { code:0xA18D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18D - ,simpleLowerCaseMapping:0xA18D - ,simpleTitleCaseMapping:0xA18D - }, - { code:0xA18E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18E - ,simpleLowerCaseMapping:0xA18E - ,simpleTitleCaseMapping:0xA18E - }, - { code:0xA18F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA18F - ,simpleLowerCaseMapping:0xA18F - ,simpleTitleCaseMapping:0xA18F - }, - { code:0xA190 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA190 - ,simpleLowerCaseMapping:0xA190 - ,simpleTitleCaseMapping:0xA190 - }, - { code:0xA191 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA191 - ,simpleLowerCaseMapping:0xA191 - ,simpleTitleCaseMapping:0xA191 - }, - { code:0xA192 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA192 - ,simpleLowerCaseMapping:0xA192 - ,simpleTitleCaseMapping:0xA192 - }, - { code:0xA193 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA193 - ,simpleLowerCaseMapping:0xA193 - ,simpleTitleCaseMapping:0xA193 - }, - { code:0xA194 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA194 - ,simpleLowerCaseMapping:0xA194 - ,simpleTitleCaseMapping:0xA194 - }, - { code:0xA195 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA195 - ,simpleLowerCaseMapping:0xA195 - ,simpleTitleCaseMapping:0xA195 - }, - { code:0xA196 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA196 - ,simpleLowerCaseMapping:0xA196 - ,simpleTitleCaseMapping:0xA196 - }, - { code:0xA197 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA197 - ,simpleLowerCaseMapping:0xA197 - ,simpleTitleCaseMapping:0xA197 - }, - { code:0xA198 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA198 - ,simpleLowerCaseMapping:0xA198 - ,simpleTitleCaseMapping:0xA198 - }, - { code:0xA199 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA199 - ,simpleLowerCaseMapping:0xA199 - ,simpleTitleCaseMapping:0xA199 - }, - { code:0xA19A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19A - ,simpleLowerCaseMapping:0xA19A - ,simpleTitleCaseMapping:0xA19A - }, - { code:0xA19B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19B - ,simpleLowerCaseMapping:0xA19B - ,simpleTitleCaseMapping:0xA19B - }, - { code:0xA19C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19C - ,simpleLowerCaseMapping:0xA19C - ,simpleTitleCaseMapping:0xA19C - }, - { code:0xA19D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19D - ,simpleLowerCaseMapping:0xA19D - ,simpleTitleCaseMapping:0xA19D - }, - { code:0xA19E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19E - ,simpleLowerCaseMapping:0xA19E - ,simpleTitleCaseMapping:0xA19E - }, - { code:0xA19F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA19F - ,simpleLowerCaseMapping:0xA19F - ,simpleTitleCaseMapping:0xA19F - }, - { code:0xA1A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A0 - ,simpleLowerCaseMapping:0xA1A0 - ,simpleTitleCaseMapping:0xA1A0 - }, - { code:0xA1A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A1 - ,simpleLowerCaseMapping:0xA1A1 - ,simpleTitleCaseMapping:0xA1A1 - }, - { code:0xA1A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A2 - ,simpleLowerCaseMapping:0xA1A2 - ,simpleTitleCaseMapping:0xA1A2 - }, - { code:0xA1A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A3 - ,simpleLowerCaseMapping:0xA1A3 - ,simpleTitleCaseMapping:0xA1A3 - }, - { code:0xA1A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A4 - ,simpleLowerCaseMapping:0xA1A4 - ,simpleTitleCaseMapping:0xA1A4 - }, - { code:0xA1A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A5 - ,simpleLowerCaseMapping:0xA1A5 - ,simpleTitleCaseMapping:0xA1A5 - }, - { code:0xA1A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A6 - ,simpleLowerCaseMapping:0xA1A6 - ,simpleTitleCaseMapping:0xA1A6 - }, - { code:0xA1A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A7 - ,simpleLowerCaseMapping:0xA1A7 - ,simpleTitleCaseMapping:0xA1A7 - }, - { code:0xA1A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A8 - ,simpleLowerCaseMapping:0xA1A8 - ,simpleTitleCaseMapping:0xA1A8 - }, - { code:0xA1A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1A9 - ,simpleLowerCaseMapping:0xA1A9 - ,simpleTitleCaseMapping:0xA1A9 - }, - { code:0xA1AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AA - ,simpleLowerCaseMapping:0xA1AA - ,simpleTitleCaseMapping:0xA1AA - }, - { code:0xA1AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AB - ,simpleLowerCaseMapping:0xA1AB - ,simpleTitleCaseMapping:0xA1AB - }, - { code:0xA1AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AC - ,simpleLowerCaseMapping:0xA1AC - ,simpleTitleCaseMapping:0xA1AC - }, - { code:0xA1AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AD - ,simpleLowerCaseMapping:0xA1AD - ,simpleTitleCaseMapping:0xA1AD - }, - { code:0xA1AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AE - ,simpleLowerCaseMapping:0xA1AE - ,simpleTitleCaseMapping:0xA1AE - }, - { code:0xA1AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1AF - ,simpleLowerCaseMapping:0xA1AF - ,simpleTitleCaseMapping:0xA1AF - }, - { code:0xA1B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B0 - ,simpleLowerCaseMapping:0xA1B0 - ,simpleTitleCaseMapping:0xA1B0 - }, - { code:0xA1B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B1 - ,simpleLowerCaseMapping:0xA1B1 - ,simpleTitleCaseMapping:0xA1B1 - }, - { code:0xA1B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B2 - ,simpleLowerCaseMapping:0xA1B2 - ,simpleTitleCaseMapping:0xA1B2 - }, - { code:0xA1B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B3 - ,simpleLowerCaseMapping:0xA1B3 - ,simpleTitleCaseMapping:0xA1B3 - }, - { code:0xA1B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B4 - ,simpleLowerCaseMapping:0xA1B4 - ,simpleTitleCaseMapping:0xA1B4 - }, - { code:0xA1B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B5 - ,simpleLowerCaseMapping:0xA1B5 - ,simpleTitleCaseMapping:0xA1B5 - }, - { code:0xA1B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B6 - ,simpleLowerCaseMapping:0xA1B6 - ,simpleTitleCaseMapping:0xA1B6 - }, - { code:0xA1B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B7 - ,simpleLowerCaseMapping:0xA1B7 - ,simpleTitleCaseMapping:0xA1B7 - }, - { code:0xA1B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B8 - ,simpleLowerCaseMapping:0xA1B8 - ,simpleTitleCaseMapping:0xA1B8 - }, - { code:0xA1B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1B9 - ,simpleLowerCaseMapping:0xA1B9 - ,simpleTitleCaseMapping:0xA1B9 - }, - { code:0xA1BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BA - ,simpleLowerCaseMapping:0xA1BA - ,simpleTitleCaseMapping:0xA1BA - }, - { code:0xA1BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BB - ,simpleLowerCaseMapping:0xA1BB - ,simpleTitleCaseMapping:0xA1BB - }, - { code:0xA1BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BC - ,simpleLowerCaseMapping:0xA1BC - ,simpleTitleCaseMapping:0xA1BC - }, - { code:0xA1BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BD - ,simpleLowerCaseMapping:0xA1BD - ,simpleTitleCaseMapping:0xA1BD - }, - { code:0xA1BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BE - ,simpleLowerCaseMapping:0xA1BE - ,simpleTitleCaseMapping:0xA1BE - }, - { code:0xA1BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1BF - ,simpleLowerCaseMapping:0xA1BF - ,simpleTitleCaseMapping:0xA1BF - }, - { code:0xA1C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C0 - ,simpleLowerCaseMapping:0xA1C0 - ,simpleTitleCaseMapping:0xA1C0 - }, - { code:0xA1C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C1 - ,simpleLowerCaseMapping:0xA1C1 - ,simpleTitleCaseMapping:0xA1C1 - }, - { code:0xA1C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C2 - ,simpleLowerCaseMapping:0xA1C2 - ,simpleTitleCaseMapping:0xA1C2 - }, - { code:0xA1C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C3 - ,simpleLowerCaseMapping:0xA1C3 - ,simpleTitleCaseMapping:0xA1C3 - }, - { code:0xA1C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C4 - ,simpleLowerCaseMapping:0xA1C4 - ,simpleTitleCaseMapping:0xA1C4 - }, - { code:0xA1C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C5 - ,simpleLowerCaseMapping:0xA1C5 - ,simpleTitleCaseMapping:0xA1C5 - }, - { code:0xA1C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C6 - ,simpleLowerCaseMapping:0xA1C6 - ,simpleTitleCaseMapping:0xA1C6 - }, - { code:0xA1C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C7 - ,simpleLowerCaseMapping:0xA1C7 - ,simpleTitleCaseMapping:0xA1C7 - }, - { code:0xA1C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C8 - ,simpleLowerCaseMapping:0xA1C8 - ,simpleTitleCaseMapping:0xA1C8 - }, - { code:0xA1C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1C9 - ,simpleLowerCaseMapping:0xA1C9 - ,simpleTitleCaseMapping:0xA1C9 - }, - { code:0xA1CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CA - ,simpleLowerCaseMapping:0xA1CA - ,simpleTitleCaseMapping:0xA1CA - }, - { code:0xA1CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CB - ,simpleLowerCaseMapping:0xA1CB - ,simpleTitleCaseMapping:0xA1CB - }, - { code:0xA1CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CC - ,simpleLowerCaseMapping:0xA1CC - ,simpleTitleCaseMapping:0xA1CC - }, - { code:0xA1CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CD - ,simpleLowerCaseMapping:0xA1CD - ,simpleTitleCaseMapping:0xA1CD - }, - { code:0xA1CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CE - ,simpleLowerCaseMapping:0xA1CE - ,simpleTitleCaseMapping:0xA1CE - }, - { code:0xA1CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1CF - ,simpleLowerCaseMapping:0xA1CF - ,simpleTitleCaseMapping:0xA1CF - }, - { code:0xA1D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D0 - ,simpleLowerCaseMapping:0xA1D0 - ,simpleTitleCaseMapping:0xA1D0 - }, - { code:0xA1D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D1 - ,simpleLowerCaseMapping:0xA1D1 - ,simpleTitleCaseMapping:0xA1D1 - }, - { code:0xA1D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D2 - ,simpleLowerCaseMapping:0xA1D2 - ,simpleTitleCaseMapping:0xA1D2 - }, - { code:0xA1D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D3 - ,simpleLowerCaseMapping:0xA1D3 - ,simpleTitleCaseMapping:0xA1D3 - }, - { code:0xA1D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D4 - ,simpleLowerCaseMapping:0xA1D4 - ,simpleTitleCaseMapping:0xA1D4 - }, - { code:0xA1D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D5 - ,simpleLowerCaseMapping:0xA1D5 - ,simpleTitleCaseMapping:0xA1D5 - }, - { code:0xA1D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D6 - ,simpleLowerCaseMapping:0xA1D6 - ,simpleTitleCaseMapping:0xA1D6 - }, - { code:0xA1D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D7 - ,simpleLowerCaseMapping:0xA1D7 - ,simpleTitleCaseMapping:0xA1D7 - }, - { code:0xA1D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D8 - ,simpleLowerCaseMapping:0xA1D8 - ,simpleTitleCaseMapping:0xA1D8 - }, - { code:0xA1D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1D9 - ,simpleLowerCaseMapping:0xA1D9 - ,simpleTitleCaseMapping:0xA1D9 - }, - { code:0xA1DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DA - ,simpleLowerCaseMapping:0xA1DA - ,simpleTitleCaseMapping:0xA1DA - }, - { code:0xA1DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DB - ,simpleLowerCaseMapping:0xA1DB - ,simpleTitleCaseMapping:0xA1DB - }, - { code:0xA1DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DC - ,simpleLowerCaseMapping:0xA1DC - ,simpleTitleCaseMapping:0xA1DC - }, - { code:0xA1DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DD - ,simpleLowerCaseMapping:0xA1DD - ,simpleTitleCaseMapping:0xA1DD - }, - { code:0xA1DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DE - ,simpleLowerCaseMapping:0xA1DE - ,simpleTitleCaseMapping:0xA1DE - }, - { code:0xA1DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1DF - ,simpleLowerCaseMapping:0xA1DF - ,simpleTitleCaseMapping:0xA1DF - }, - { code:0xA1E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E0 - ,simpleLowerCaseMapping:0xA1E0 - ,simpleTitleCaseMapping:0xA1E0 - }, - { code:0xA1E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E1 - ,simpleLowerCaseMapping:0xA1E1 - ,simpleTitleCaseMapping:0xA1E1 - }, - { code:0xA1E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E2 - ,simpleLowerCaseMapping:0xA1E2 - ,simpleTitleCaseMapping:0xA1E2 - }, - { code:0xA1E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E3 - ,simpleLowerCaseMapping:0xA1E3 - ,simpleTitleCaseMapping:0xA1E3 - }, - { code:0xA1E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E4 - ,simpleLowerCaseMapping:0xA1E4 - ,simpleTitleCaseMapping:0xA1E4 - }, - { code:0xA1E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E5 - ,simpleLowerCaseMapping:0xA1E5 - ,simpleTitleCaseMapping:0xA1E5 - }, - { code:0xA1E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E6 - ,simpleLowerCaseMapping:0xA1E6 - ,simpleTitleCaseMapping:0xA1E6 - }, - { code:0xA1E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E7 - ,simpleLowerCaseMapping:0xA1E7 - ,simpleTitleCaseMapping:0xA1E7 - }, - { code:0xA1E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E8 - ,simpleLowerCaseMapping:0xA1E8 - ,simpleTitleCaseMapping:0xA1E8 - }, - { code:0xA1E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1E9 - ,simpleLowerCaseMapping:0xA1E9 - ,simpleTitleCaseMapping:0xA1E9 - }, - { code:0xA1EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1EA - ,simpleLowerCaseMapping:0xA1EA - ,simpleTitleCaseMapping:0xA1EA - }, - { code:0xA1EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1EB - ,simpleLowerCaseMapping:0xA1EB - ,simpleTitleCaseMapping:0xA1EB - }, - { code:0xA1EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1EC - ,simpleLowerCaseMapping:0xA1EC - ,simpleTitleCaseMapping:0xA1EC - }, - { code:0xA1ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1ED - ,simpleLowerCaseMapping:0xA1ED - ,simpleTitleCaseMapping:0xA1ED - }, - { code:0xA1EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1EE - ,simpleLowerCaseMapping:0xA1EE - ,simpleTitleCaseMapping:0xA1EE - }, - { code:0xA1EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1EF - ,simpleLowerCaseMapping:0xA1EF - ,simpleTitleCaseMapping:0xA1EF - }, - { code:0xA1F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F0 - ,simpleLowerCaseMapping:0xA1F0 - ,simpleTitleCaseMapping:0xA1F0 - }, - { code:0xA1F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F1 - ,simpleLowerCaseMapping:0xA1F1 - ,simpleTitleCaseMapping:0xA1F1 - }, - { code:0xA1F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F2 - ,simpleLowerCaseMapping:0xA1F2 - ,simpleTitleCaseMapping:0xA1F2 - }, - { code:0xA1F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F3 - ,simpleLowerCaseMapping:0xA1F3 - ,simpleTitleCaseMapping:0xA1F3 - }, - { code:0xA1F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F4 - ,simpleLowerCaseMapping:0xA1F4 - ,simpleTitleCaseMapping:0xA1F4 - }, - { code:0xA1F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F5 - ,simpleLowerCaseMapping:0xA1F5 - ,simpleTitleCaseMapping:0xA1F5 - }, - { code:0xA1F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F6 - ,simpleLowerCaseMapping:0xA1F6 - ,simpleTitleCaseMapping:0xA1F6 - }, - { code:0xA1F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F7 - ,simpleLowerCaseMapping:0xA1F7 - ,simpleTitleCaseMapping:0xA1F7 - }, - { code:0xA1F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F8 - ,simpleLowerCaseMapping:0xA1F8 - ,simpleTitleCaseMapping:0xA1F8 - }, - { code:0xA1F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1F9 - ,simpleLowerCaseMapping:0xA1F9 - ,simpleTitleCaseMapping:0xA1F9 - }, - { code:0xA1FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FA - ,simpleLowerCaseMapping:0xA1FA - ,simpleTitleCaseMapping:0xA1FA - }, - { code:0xA1FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FB - ,simpleLowerCaseMapping:0xA1FB - ,simpleTitleCaseMapping:0xA1FB - }, - { code:0xA1FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FC - ,simpleLowerCaseMapping:0xA1FC - ,simpleTitleCaseMapping:0xA1FC - }, - { code:0xA1FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FD - ,simpleLowerCaseMapping:0xA1FD - ,simpleTitleCaseMapping:0xA1FD - }, - { code:0xA1FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FE - ,simpleLowerCaseMapping:0xA1FE - ,simpleTitleCaseMapping:0xA1FE - }, - { code:0xA1FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA1FF - ,simpleLowerCaseMapping:0xA1FF - ,simpleTitleCaseMapping:0xA1FF - }, - { code:0xA200 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA200 - ,simpleLowerCaseMapping:0xA200 - ,simpleTitleCaseMapping:0xA200 - }, - { code:0xA201 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA201 - ,simpleLowerCaseMapping:0xA201 - ,simpleTitleCaseMapping:0xA201 - }, - { code:0xA202 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA202 - ,simpleLowerCaseMapping:0xA202 - ,simpleTitleCaseMapping:0xA202 - }, - { code:0xA203 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA203 - ,simpleLowerCaseMapping:0xA203 - ,simpleTitleCaseMapping:0xA203 - }, - { code:0xA204 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA204 - ,simpleLowerCaseMapping:0xA204 - ,simpleTitleCaseMapping:0xA204 - }, - { code:0xA205 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA205 - ,simpleLowerCaseMapping:0xA205 - ,simpleTitleCaseMapping:0xA205 - }, - { code:0xA206 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA206 - ,simpleLowerCaseMapping:0xA206 - ,simpleTitleCaseMapping:0xA206 - }, - { code:0xA207 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA207 - ,simpleLowerCaseMapping:0xA207 - ,simpleTitleCaseMapping:0xA207 - }, - { code:0xA208 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA208 - ,simpleLowerCaseMapping:0xA208 - ,simpleTitleCaseMapping:0xA208 - }, - { code:0xA209 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA209 - ,simpleLowerCaseMapping:0xA209 - ,simpleTitleCaseMapping:0xA209 - }, - { code:0xA20A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20A - ,simpleLowerCaseMapping:0xA20A - ,simpleTitleCaseMapping:0xA20A - }, - { code:0xA20B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20B - ,simpleLowerCaseMapping:0xA20B - ,simpleTitleCaseMapping:0xA20B - }, - { code:0xA20C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20C - ,simpleLowerCaseMapping:0xA20C - ,simpleTitleCaseMapping:0xA20C - }, - { code:0xA20D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20D - ,simpleLowerCaseMapping:0xA20D - ,simpleTitleCaseMapping:0xA20D - }, - { code:0xA20E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20E - ,simpleLowerCaseMapping:0xA20E - ,simpleTitleCaseMapping:0xA20E - }, - { code:0xA20F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA20F - ,simpleLowerCaseMapping:0xA20F - ,simpleTitleCaseMapping:0xA20F - }, - { code:0xA210 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA210 - ,simpleLowerCaseMapping:0xA210 - ,simpleTitleCaseMapping:0xA210 - }, - { code:0xA211 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA211 - ,simpleLowerCaseMapping:0xA211 - ,simpleTitleCaseMapping:0xA211 - }, - { code:0xA212 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA212 - ,simpleLowerCaseMapping:0xA212 - ,simpleTitleCaseMapping:0xA212 - }, - { code:0xA213 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA213 - ,simpleLowerCaseMapping:0xA213 - ,simpleTitleCaseMapping:0xA213 - }, - { code:0xA214 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA214 - ,simpleLowerCaseMapping:0xA214 - ,simpleTitleCaseMapping:0xA214 - }, - { code:0xA215 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA215 - ,simpleLowerCaseMapping:0xA215 - ,simpleTitleCaseMapping:0xA215 - }, - { code:0xA216 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA216 - ,simpleLowerCaseMapping:0xA216 - ,simpleTitleCaseMapping:0xA216 - }, - { code:0xA217 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA217 - ,simpleLowerCaseMapping:0xA217 - ,simpleTitleCaseMapping:0xA217 - }, - { code:0xA218 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA218 - ,simpleLowerCaseMapping:0xA218 - ,simpleTitleCaseMapping:0xA218 - }, - { code:0xA219 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA219 - ,simpleLowerCaseMapping:0xA219 - ,simpleTitleCaseMapping:0xA219 - }, - { code:0xA21A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21A - ,simpleLowerCaseMapping:0xA21A - ,simpleTitleCaseMapping:0xA21A - }, - { code:0xA21B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21B - ,simpleLowerCaseMapping:0xA21B - ,simpleTitleCaseMapping:0xA21B - }, - { code:0xA21C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21C - ,simpleLowerCaseMapping:0xA21C - ,simpleTitleCaseMapping:0xA21C - }, - { code:0xA21D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21D - ,simpleLowerCaseMapping:0xA21D - ,simpleTitleCaseMapping:0xA21D - }, - { code:0xA21E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21E - ,simpleLowerCaseMapping:0xA21E - ,simpleTitleCaseMapping:0xA21E - }, - { code:0xA21F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA21F - ,simpleLowerCaseMapping:0xA21F - ,simpleTitleCaseMapping:0xA21F - }, - { code:0xA220 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA220 - ,simpleLowerCaseMapping:0xA220 - ,simpleTitleCaseMapping:0xA220 - }, - { code:0xA221 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA221 - ,simpleLowerCaseMapping:0xA221 - ,simpleTitleCaseMapping:0xA221 - }, - { code:0xA222 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA222 - ,simpleLowerCaseMapping:0xA222 - ,simpleTitleCaseMapping:0xA222 - }, - { code:0xA223 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA223 - ,simpleLowerCaseMapping:0xA223 - ,simpleTitleCaseMapping:0xA223 - }, - { code:0xA224 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA224 - ,simpleLowerCaseMapping:0xA224 - ,simpleTitleCaseMapping:0xA224 - }, - { code:0xA225 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA225 - ,simpleLowerCaseMapping:0xA225 - ,simpleTitleCaseMapping:0xA225 - }, - { code:0xA226 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA226 - ,simpleLowerCaseMapping:0xA226 - ,simpleTitleCaseMapping:0xA226 - }, - { code:0xA227 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA227 - ,simpleLowerCaseMapping:0xA227 - ,simpleTitleCaseMapping:0xA227 - }, - { code:0xA228 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA228 - ,simpleLowerCaseMapping:0xA228 - ,simpleTitleCaseMapping:0xA228 - }, - { code:0xA229 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA229 - ,simpleLowerCaseMapping:0xA229 - ,simpleTitleCaseMapping:0xA229 - }, - { code:0xA22A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22A - ,simpleLowerCaseMapping:0xA22A - ,simpleTitleCaseMapping:0xA22A - }, - { code:0xA22B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22B - ,simpleLowerCaseMapping:0xA22B - ,simpleTitleCaseMapping:0xA22B - }, - { code:0xA22C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22C - ,simpleLowerCaseMapping:0xA22C - ,simpleTitleCaseMapping:0xA22C - }, - { code:0xA22D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22D - ,simpleLowerCaseMapping:0xA22D - ,simpleTitleCaseMapping:0xA22D - }, - { code:0xA22E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22E - ,simpleLowerCaseMapping:0xA22E - ,simpleTitleCaseMapping:0xA22E - }, - { code:0xA22F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA22F - ,simpleLowerCaseMapping:0xA22F - ,simpleTitleCaseMapping:0xA22F - }, - { code:0xA230 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA230 - ,simpleLowerCaseMapping:0xA230 - ,simpleTitleCaseMapping:0xA230 - }, - { code:0xA231 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA231 - ,simpleLowerCaseMapping:0xA231 - ,simpleTitleCaseMapping:0xA231 - }, - { code:0xA232 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA232 - ,simpleLowerCaseMapping:0xA232 - ,simpleTitleCaseMapping:0xA232 - }, - { code:0xA233 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA233 - ,simpleLowerCaseMapping:0xA233 - ,simpleTitleCaseMapping:0xA233 - }, - { code:0xA234 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA234 - ,simpleLowerCaseMapping:0xA234 - ,simpleTitleCaseMapping:0xA234 - }, - { code:0xA235 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA235 - ,simpleLowerCaseMapping:0xA235 - ,simpleTitleCaseMapping:0xA235 - }, - { code:0xA236 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA236 - ,simpleLowerCaseMapping:0xA236 - ,simpleTitleCaseMapping:0xA236 - }, - { code:0xA237 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA237 - ,simpleLowerCaseMapping:0xA237 - ,simpleTitleCaseMapping:0xA237 - }, - { code:0xA238 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA238 - ,simpleLowerCaseMapping:0xA238 - ,simpleTitleCaseMapping:0xA238 - }, - { code:0xA239 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA239 - ,simpleLowerCaseMapping:0xA239 - ,simpleTitleCaseMapping:0xA239 - }, - { code:0xA23A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23A - ,simpleLowerCaseMapping:0xA23A - ,simpleTitleCaseMapping:0xA23A - }, - { code:0xA23B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23B - ,simpleLowerCaseMapping:0xA23B - ,simpleTitleCaseMapping:0xA23B - }, - { code:0xA23C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23C - ,simpleLowerCaseMapping:0xA23C - ,simpleTitleCaseMapping:0xA23C - }, - { code:0xA23D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23D - ,simpleLowerCaseMapping:0xA23D - ,simpleTitleCaseMapping:0xA23D - }, - { code:0xA23E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23E - ,simpleLowerCaseMapping:0xA23E - ,simpleTitleCaseMapping:0xA23E - }, - { code:0xA23F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA23F - ,simpleLowerCaseMapping:0xA23F - ,simpleTitleCaseMapping:0xA23F - }, - { code:0xA240 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA240 - ,simpleLowerCaseMapping:0xA240 - ,simpleTitleCaseMapping:0xA240 - }, - { code:0xA241 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA241 - ,simpleLowerCaseMapping:0xA241 - ,simpleTitleCaseMapping:0xA241 - }, - { code:0xA242 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA242 - ,simpleLowerCaseMapping:0xA242 - ,simpleTitleCaseMapping:0xA242 - }, - { code:0xA243 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA243 - ,simpleLowerCaseMapping:0xA243 - ,simpleTitleCaseMapping:0xA243 - }, - { code:0xA244 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA244 - ,simpleLowerCaseMapping:0xA244 - ,simpleTitleCaseMapping:0xA244 - }, - { code:0xA245 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA245 - ,simpleLowerCaseMapping:0xA245 - ,simpleTitleCaseMapping:0xA245 - }, - { code:0xA246 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA246 - ,simpleLowerCaseMapping:0xA246 - ,simpleTitleCaseMapping:0xA246 - }, - { code:0xA247 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA247 - ,simpleLowerCaseMapping:0xA247 - ,simpleTitleCaseMapping:0xA247 - }, - { code:0xA248 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA248 - ,simpleLowerCaseMapping:0xA248 - ,simpleTitleCaseMapping:0xA248 - }, - { code:0xA249 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA249 - ,simpleLowerCaseMapping:0xA249 - ,simpleTitleCaseMapping:0xA249 - }, - { code:0xA24A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24A - ,simpleLowerCaseMapping:0xA24A - ,simpleTitleCaseMapping:0xA24A - }, - { code:0xA24B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24B - ,simpleLowerCaseMapping:0xA24B - ,simpleTitleCaseMapping:0xA24B - }, - { code:0xA24C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24C - ,simpleLowerCaseMapping:0xA24C - ,simpleTitleCaseMapping:0xA24C - }, - { code:0xA24D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24D - ,simpleLowerCaseMapping:0xA24D - ,simpleTitleCaseMapping:0xA24D - }, - { code:0xA24E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24E - ,simpleLowerCaseMapping:0xA24E - ,simpleTitleCaseMapping:0xA24E - }, - { code:0xA24F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA24F - ,simpleLowerCaseMapping:0xA24F - ,simpleTitleCaseMapping:0xA24F - }, - { code:0xA250 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA250 - ,simpleLowerCaseMapping:0xA250 - ,simpleTitleCaseMapping:0xA250 - }, - { code:0xA251 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA251 - ,simpleLowerCaseMapping:0xA251 - ,simpleTitleCaseMapping:0xA251 - }, - { code:0xA252 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA252 - ,simpleLowerCaseMapping:0xA252 - ,simpleTitleCaseMapping:0xA252 - }, - { code:0xA253 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA253 - ,simpleLowerCaseMapping:0xA253 - ,simpleTitleCaseMapping:0xA253 - }, - { code:0xA254 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA254 - ,simpleLowerCaseMapping:0xA254 - ,simpleTitleCaseMapping:0xA254 - }, - { code:0xA255 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA255 - ,simpleLowerCaseMapping:0xA255 - ,simpleTitleCaseMapping:0xA255 - }, - { code:0xA256 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA256 - ,simpleLowerCaseMapping:0xA256 - ,simpleTitleCaseMapping:0xA256 - }, - { code:0xA257 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA257 - ,simpleLowerCaseMapping:0xA257 - ,simpleTitleCaseMapping:0xA257 - }, - { code:0xA258 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA258 - ,simpleLowerCaseMapping:0xA258 - ,simpleTitleCaseMapping:0xA258 - }, - { code:0xA259 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA259 - ,simpleLowerCaseMapping:0xA259 - ,simpleTitleCaseMapping:0xA259 - }, - { code:0xA25A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25A - ,simpleLowerCaseMapping:0xA25A - ,simpleTitleCaseMapping:0xA25A - }, - { code:0xA25B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25B - ,simpleLowerCaseMapping:0xA25B - ,simpleTitleCaseMapping:0xA25B - }, - { code:0xA25C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25C - ,simpleLowerCaseMapping:0xA25C - ,simpleTitleCaseMapping:0xA25C - }, - { code:0xA25D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25D - ,simpleLowerCaseMapping:0xA25D - ,simpleTitleCaseMapping:0xA25D - }, - { code:0xA25E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25E - ,simpleLowerCaseMapping:0xA25E - ,simpleTitleCaseMapping:0xA25E - }, - { code:0xA25F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA25F - ,simpleLowerCaseMapping:0xA25F - ,simpleTitleCaseMapping:0xA25F - }, - { code:0xA260 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA260 - ,simpleLowerCaseMapping:0xA260 - ,simpleTitleCaseMapping:0xA260 - }, - { code:0xA261 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA261 - ,simpleLowerCaseMapping:0xA261 - ,simpleTitleCaseMapping:0xA261 - }, - { code:0xA262 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA262 - ,simpleLowerCaseMapping:0xA262 - ,simpleTitleCaseMapping:0xA262 - }, - { code:0xA263 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA263 - ,simpleLowerCaseMapping:0xA263 - ,simpleTitleCaseMapping:0xA263 - }, - { code:0xA264 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA264 - ,simpleLowerCaseMapping:0xA264 - ,simpleTitleCaseMapping:0xA264 - }, - { code:0xA265 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA265 - ,simpleLowerCaseMapping:0xA265 - ,simpleTitleCaseMapping:0xA265 - }, - { code:0xA266 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA266 - ,simpleLowerCaseMapping:0xA266 - ,simpleTitleCaseMapping:0xA266 - }, - { code:0xA267 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA267 - ,simpleLowerCaseMapping:0xA267 - ,simpleTitleCaseMapping:0xA267 - }, - { code:0xA268 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA268 - ,simpleLowerCaseMapping:0xA268 - ,simpleTitleCaseMapping:0xA268 - }, - { code:0xA269 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA269 - ,simpleLowerCaseMapping:0xA269 - ,simpleTitleCaseMapping:0xA269 - }, - { code:0xA26A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26A - ,simpleLowerCaseMapping:0xA26A - ,simpleTitleCaseMapping:0xA26A - }, - { code:0xA26B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26B - ,simpleLowerCaseMapping:0xA26B - ,simpleTitleCaseMapping:0xA26B - }, - { code:0xA26C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26C - ,simpleLowerCaseMapping:0xA26C - ,simpleTitleCaseMapping:0xA26C - }, - { code:0xA26D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26D - ,simpleLowerCaseMapping:0xA26D - ,simpleTitleCaseMapping:0xA26D - }, - { code:0xA26E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26E - ,simpleLowerCaseMapping:0xA26E - ,simpleTitleCaseMapping:0xA26E - }, - { code:0xA26F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA26F - ,simpleLowerCaseMapping:0xA26F - ,simpleTitleCaseMapping:0xA26F - }, - { code:0xA270 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA270 - ,simpleLowerCaseMapping:0xA270 - ,simpleTitleCaseMapping:0xA270 - }, - { code:0xA271 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA271 - ,simpleLowerCaseMapping:0xA271 - ,simpleTitleCaseMapping:0xA271 - }, - { code:0xA272 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA272 - ,simpleLowerCaseMapping:0xA272 - ,simpleTitleCaseMapping:0xA272 - }, - { code:0xA273 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA273 - ,simpleLowerCaseMapping:0xA273 - ,simpleTitleCaseMapping:0xA273 - }, - { code:0xA274 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA274 - ,simpleLowerCaseMapping:0xA274 - ,simpleTitleCaseMapping:0xA274 - }, - { code:0xA275 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA275 - ,simpleLowerCaseMapping:0xA275 - ,simpleTitleCaseMapping:0xA275 - }, - { code:0xA276 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA276 - ,simpleLowerCaseMapping:0xA276 - ,simpleTitleCaseMapping:0xA276 - }, - { code:0xA277 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA277 - ,simpleLowerCaseMapping:0xA277 - ,simpleTitleCaseMapping:0xA277 - }, - { code:0xA278 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA278 - ,simpleLowerCaseMapping:0xA278 - ,simpleTitleCaseMapping:0xA278 - }, - { code:0xA279 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA279 - ,simpleLowerCaseMapping:0xA279 - ,simpleTitleCaseMapping:0xA279 - }, - { code:0xA27A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27A - ,simpleLowerCaseMapping:0xA27A - ,simpleTitleCaseMapping:0xA27A - }, - { code:0xA27B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27B - ,simpleLowerCaseMapping:0xA27B - ,simpleTitleCaseMapping:0xA27B - }, - { code:0xA27C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27C - ,simpleLowerCaseMapping:0xA27C - ,simpleTitleCaseMapping:0xA27C - }, - { code:0xA27D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27D - ,simpleLowerCaseMapping:0xA27D - ,simpleTitleCaseMapping:0xA27D - }, - { code:0xA27E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27E - ,simpleLowerCaseMapping:0xA27E - ,simpleTitleCaseMapping:0xA27E - }, - { code:0xA27F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA27F - ,simpleLowerCaseMapping:0xA27F - ,simpleTitleCaseMapping:0xA27F - }, - { code:0xA280 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA280 - ,simpleLowerCaseMapping:0xA280 - ,simpleTitleCaseMapping:0xA280 - }, - { code:0xA281 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA281 - ,simpleLowerCaseMapping:0xA281 - ,simpleTitleCaseMapping:0xA281 - }, - { code:0xA282 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA282 - ,simpleLowerCaseMapping:0xA282 - ,simpleTitleCaseMapping:0xA282 - }, - { code:0xA283 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA283 - ,simpleLowerCaseMapping:0xA283 - ,simpleTitleCaseMapping:0xA283 - }, - { code:0xA284 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA284 - ,simpleLowerCaseMapping:0xA284 - ,simpleTitleCaseMapping:0xA284 - }, - { code:0xA285 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA285 - ,simpleLowerCaseMapping:0xA285 - ,simpleTitleCaseMapping:0xA285 - }, - { code:0xA286 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA286 - ,simpleLowerCaseMapping:0xA286 - ,simpleTitleCaseMapping:0xA286 - }, - { code:0xA287 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA287 - ,simpleLowerCaseMapping:0xA287 - ,simpleTitleCaseMapping:0xA287 - }, - { code:0xA288 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA288 - ,simpleLowerCaseMapping:0xA288 - ,simpleTitleCaseMapping:0xA288 - }, - { code:0xA289 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA289 - ,simpleLowerCaseMapping:0xA289 - ,simpleTitleCaseMapping:0xA289 - }, - { code:0xA28A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28A - ,simpleLowerCaseMapping:0xA28A - ,simpleTitleCaseMapping:0xA28A - }, - { code:0xA28B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28B - ,simpleLowerCaseMapping:0xA28B - ,simpleTitleCaseMapping:0xA28B - }, - { code:0xA28C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28C - ,simpleLowerCaseMapping:0xA28C - ,simpleTitleCaseMapping:0xA28C - }, - { code:0xA28D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28D - ,simpleLowerCaseMapping:0xA28D - ,simpleTitleCaseMapping:0xA28D - }, - { code:0xA28E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28E - ,simpleLowerCaseMapping:0xA28E - ,simpleTitleCaseMapping:0xA28E - }, - { code:0xA28F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA28F - ,simpleLowerCaseMapping:0xA28F - ,simpleTitleCaseMapping:0xA28F - }, - { code:0xA290 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA290 - ,simpleLowerCaseMapping:0xA290 - ,simpleTitleCaseMapping:0xA290 - }, - { code:0xA291 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA291 - ,simpleLowerCaseMapping:0xA291 - ,simpleTitleCaseMapping:0xA291 - }, - { code:0xA292 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA292 - ,simpleLowerCaseMapping:0xA292 - ,simpleTitleCaseMapping:0xA292 - }, - { code:0xA293 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA293 - ,simpleLowerCaseMapping:0xA293 - ,simpleTitleCaseMapping:0xA293 - }, - { code:0xA294 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA294 - ,simpleLowerCaseMapping:0xA294 - ,simpleTitleCaseMapping:0xA294 - }, - { code:0xA295 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA295 - ,simpleLowerCaseMapping:0xA295 - ,simpleTitleCaseMapping:0xA295 - }, - { code:0xA296 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA296 - ,simpleLowerCaseMapping:0xA296 - ,simpleTitleCaseMapping:0xA296 - }, - { code:0xA297 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA297 - ,simpleLowerCaseMapping:0xA297 - ,simpleTitleCaseMapping:0xA297 - }, - { code:0xA298 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA298 - ,simpleLowerCaseMapping:0xA298 - ,simpleTitleCaseMapping:0xA298 - }, - { code:0xA299 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA299 - ,simpleLowerCaseMapping:0xA299 - ,simpleTitleCaseMapping:0xA299 - }, - { code:0xA29A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29A - ,simpleLowerCaseMapping:0xA29A - ,simpleTitleCaseMapping:0xA29A - }, - { code:0xA29B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29B - ,simpleLowerCaseMapping:0xA29B - ,simpleTitleCaseMapping:0xA29B - }, - { code:0xA29C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29C - ,simpleLowerCaseMapping:0xA29C - ,simpleTitleCaseMapping:0xA29C - }, - { code:0xA29D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29D - ,simpleLowerCaseMapping:0xA29D - ,simpleTitleCaseMapping:0xA29D - }, - { code:0xA29E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29E - ,simpleLowerCaseMapping:0xA29E - ,simpleTitleCaseMapping:0xA29E - }, - { code:0xA29F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA29F - ,simpleLowerCaseMapping:0xA29F - ,simpleTitleCaseMapping:0xA29F - }, - { code:0xA2A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A0 - ,simpleLowerCaseMapping:0xA2A0 - ,simpleTitleCaseMapping:0xA2A0 - }, - { code:0xA2A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A1 - ,simpleLowerCaseMapping:0xA2A1 - ,simpleTitleCaseMapping:0xA2A1 - }, - { code:0xA2A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A2 - ,simpleLowerCaseMapping:0xA2A2 - ,simpleTitleCaseMapping:0xA2A2 - }, - { code:0xA2A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A3 - ,simpleLowerCaseMapping:0xA2A3 - ,simpleTitleCaseMapping:0xA2A3 - }, - { code:0xA2A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A4 - ,simpleLowerCaseMapping:0xA2A4 - ,simpleTitleCaseMapping:0xA2A4 - }, - { code:0xA2A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A5 - ,simpleLowerCaseMapping:0xA2A5 - ,simpleTitleCaseMapping:0xA2A5 - }, - { code:0xA2A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A6 - ,simpleLowerCaseMapping:0xA2A6 - ,simpleTitleCaseMapping:0xA2A6 - }, - { code:0xA2A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A7 - ,simpleLowerCaseMapping:0xA2A7 - ,simpleTitleCaseMapping:0xA2A7 - }, - { code:0xA2A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A8 - ,simpleLowerCaseMapping:0xA2A8 - ,simpleTitleCaseMapping:0xA2A8 - }, - { code:0xA2A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2A9 - ,simpleLowerCaseMapping:0xA2A9 - ,simpleTitleCaseMapping:0xA2A9 - }, - { code:0xA2AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AA - ,simpleLowerCaseMapping:0xA2AA - ,simpleTitleCaseMapping:0xA2AA - }, - { code:0xA2AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AB - ,simpleLowerCaseMapping:0xA2AB - ,simpleTitleCaseMapping:0xA2AB - }, - { code:0xA2AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AC - ,simpleLowerCaseMapping:0xA2AC - ,simpleTitleCaseMapping:0xA2AC - }, - { code:0xA2AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AD - ,simpleLowerCaseMapping:0xA2AD - ,simpleTitleCaseMapping:0xA2AD - }, - { code:0xA2AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AE - ,simpleLowerCaseMapping:0xA2AE - ,simpleTitleCaseMapping:0xA2AE - }, - { code:0xA2AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2AF - ,simpleLowerCaseMapping:0xA2AF - ,simpleTitleCaseMapping:0xA2AF - }, - { code:0xA2B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B0 - ,simpleLowerCaseMapping:0xA2B0 - ,simpleTitleCaseMapping:0xA2B0 - }, - { code:0xA2B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B1 - ,simpleLowerCaseMapping:0xA2B1 - ,simpleTitleCaseMapping:0xA2B1 - }, - { code:0xA2B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B2 - ,simpleLowerCaseMapping:0xA2B2 - ,simpleTitleCaseMapping:0xA2B2 - }, - { code:0xA2B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B3 - ,simpleLowerCaseMapping:0xA2B3 - ,simpleTitleCaseMapping:0xA2B3 - }, - { code:0xA2B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B4 - ,simpleLowerCaseMapping:0xA2B4 - ,simpleTitleCaseMapping:0xA2B4 - }, - { code:0xA2B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B5 - ,simpleLowerCaseMapping:0xA2B5 - ,simpleTitleCaseMapping:0xA2B5 - }, - { code:0xA2B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B6 - ,simpleLowerCaseMapping:0xA2B6 - ,simpleTitleCaseMapping:0xA2B6 - }, - { code:0xA2B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B7 - ,simpleLowerCaseMapping:0xA2B7 - ,simpleTitleCaseMapping:0xA2B7 - }, - { code:0xA2B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B8 - ,simpleLowerCaseMapping:0xA2B8 - ,simpleTitleCaseMapping:0xA2B8 - }, - { code:0xA2B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2B9 - ,simpleLowerCaseMapping:0xA2B9 - ,simpleTitleCaseMapping:0xA2B9 - }, - { code:0xA2BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BA - ,simpleLowerCaseMapping:0xA2BA - ,simpleTitleCaseMapping:0xA2BA - }, - { code:0xA2BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BB - ,simpleLowerCaseMapping:0xA2BB - ,simpleTitleCaseMapping:0xA2BB - }, - { code:0xA2BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BC - ,simpleLowerCaseMapping:0xA2BC - ,simpleTitleCaseMapping:0xA2BC - }, - { code:0xA2BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BD - ,simpleLowerCaseMapping:0xA2BD - ,simpleTitleCaseMapping:0xA2BD - }, - { code:0xA2BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BE - ,simpleLowerCaseMapping:0xA2BE - ,simpleTitleCaseMapping:0xA2BE - }, - { code:0xA2BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2BF - ,simpleLowerCaseMapping:0xA2BF - ,simpleTitleCaseMapping:0xA2BF - }, - { code:0xA2C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C0 - ,simpleLowerCaseMapping:0xA2C0 - ,simpleTitleCaseMapping:0xA2C0 - }, - { code:0xA2C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C1 - ,simpleLowerCaseMapping:0xA2C1 - ,simpleTitleCaseMapping:0xA2C1 - }, - { code:0xA2C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C2 - ,simpleLowerCaseMapping:0xA2C2 - ,simpleTitleCaseMapping:0xA2C2 - }, - { code:0xA2C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C3 - ,simpleLowerCaseMapping:0xA2C3 - ,simpleTitleCaseMapping:0xA2C3 - }, - { code:0xA2C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C4 - ,simpleLowerCaseMapping:0xA2C4 - ,simpleTitleCaseMapping:0xA2C4 - }, - { code:0xA2C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C5 - ,simpleLowerCaseMapping:0xA2C5 - ,simpleTitleCaseMapping:0xA2C5 - }, - { code:0xA2C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C6 - ,simpleLowerCaseMapping:0xA2C6 - ,simpleTitleCaseMapping:0xA2C6 - }, - { code:0xA2C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C7 - ,simpleLowerCaseMapping:0xA2C7 - ,simpleTitleCaseMapping:0xA2C7 - }, - { code:0xA2C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C8 - ,simpleLowerCaseMapping:0xA2C8 - ,simpleTitleCaseMapping:0xA2C8 - }, - { code:0xA2C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2C9 - ,simpleLowerCaseMapping:0xA2C9 - ,simpleTitleCaseMapping:0xA2C9 - }, - { code:0xA2CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CA - ,simpleLowerCaseMapping:0xA2CA - ,simpleTitleCaseMapping:0xA2CA - }, - { code:0xA2CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CB - ,simpleLowerCaseMapping:0xA2CB - ,simpleTitleCaseMapping:0xA2CB - }, - { code:0xA2CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CC - ,simpleLowerCaseMapping:0xA2CC - ,simpleTitleCaseMapping:0xA2CC - }, - { code:0xA2CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CD - ,simpleLowerCaseMapping:0xA2CD - ,simpleTitleCaseMapping:0xA2CD - }, - { code:0xA2CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CE - ,simpleLowerCaseMapping:0xA2CE - ,simpleTitleCaseMapping:0xA2CE - }, - { code:0xA2CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2CF - ,simpleLowerCaseMapping:0xA2CF - ,simpleTitleCaseMapping:0xA2CF - }, - { code:0xA2D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D0 - ,simpleLowerCaseMapping:0xA2D0 - ,simpleTitleCaseMapping:0xA2D0 - }, - { code:0xA2D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D1 - ,simpleLowerCaseMapping:0xA2D1 - ,simpleTitleCaseMapping:0xA2D1 - }, - { code:0xA2D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D2 - ,simpleLowerCaseMapping:0xA2D2 - ,simpleTitleCaseMapping:0xA2D2 - }, - { code:0xA2D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D3 - ,simpleLowerCaseMapping:0xA2D3 - ,simpleTitleCaseMapping:0xA2D3 - }, - { code:0xA2D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D4 - ,simpleLowerCaseMapping:0xA2D4 - ,simpleTitleCaseMapping:0xA2D4 - }, - { code:0xA2D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D5 - ,simpleLowerCaseMapping:0xA2D5 - ,simpleTitleCaseMapping:0xA2D5 - }, - { code:0xA2D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D6 - ,simpleLowerCaseMapping:0xA2D6 - ,simpleTitleCaseMapping:0xA2D6 - }, - { code:0xA2D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D7 - ,simpleLowerCaseMapping:0xA2D7 - ,simpleTitleCaseMapping:0xA2D7 - }, - { code:0xA2D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D8 - ,simpleLowerCaseMapping:0xA2D8 - ,simpleTitleCaseMapping:0xA2D8 - }, - { code:0xA2D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2D9 - ,simpleLowerCaseMapping:0xA2D9 - ,simpleTitleCaseMapping:0xA2D9 - }, - { code:0xA2DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DA - ,simpleLowerCaseMapping:0xA2DA - ,simpleTitleCaseMapping:0xA2DA - }, - { code:0xA2DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DB - ,simpleLowerCaseMapping:0xA2DB - ,simpleTitleCaseMapping:0xA2DB - }, - { code:0xA2DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DC - ,simpleLowerCaseMapping:0xA2DC - ,simpleTitleCaseMapping:0xA2DC - }, - { code:0xA2DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DD - ,simpleLowerCaseMapping:0xA2DD - ,simpleTitleCaseMapping:0xA2DD - }, - { code:0xA2DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DE - ,simpleLowerCaseMapping:0xA2DE - ,simpleTitleCaseMapping:0xA2DE - }, - { code:0xA2DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2DF - ,simpleLowerCaseMapping:0xA2DF - ,simpleTitleCaseMapping:0xA2DF - }, - { code:0xA2E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E0 - ,simpleLowerCaseMapping:0xA2E0 - ,simpleTitleCaseMapping:0xA2E0 - }, - { code:0xA2E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E1 - ,simpleLowerCaseMapping:0xA2E1 - ,simpleTitleCaseMapping:0xA2E1 - }, - { code:0xA2E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E2 - ,simpleLowerCaseMapping:0xA2E2 - ,simpleTitleCaseMapping:0xA2E2 - }, - { code:0xA2E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E3 - ,simpleLowerCaseMapping:0xA2E3 - ,simpleTitleCaseMapping:0xA2E3 - }, - { code:0xA2E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E4 - ,simpleLowerCaseMapping:0xA2E4 - ,simpleTitleCaseMapping:0xA2E4 - }, - { code:0xA2E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E5 - ,simpleLowerCaseMapping:0xA2E5 - ,simpleTitleCaseMapping:0xA2E5 - }, - { code:0xA2E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E6 - ,simpleLowerCaseMapping:0xA2E6 - ,simpleTitleCaseMapping:0xA2E6 - }, - { code:0xA2E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E7 - ,simpleLowerCaseMapping:0xA2E7 - ,simpleTitleCaseMapping:0xA2E7 - }, - { code:0xA2E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E8 - ,simpleLowerCaseMapping:0xA2E8 - ,simpleTitleCaseMapping:0xA2E8 - }, - { code:0xA2E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2E9 - ,simpleLowerCaseMapping:0xA2E9 - ,simpleTitleCaseMapping:0xA2E9 - }, - { code:0xA2EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2EA - ,simpleLowerCaseMapping:0xA2EA - ,simpleTitleCaseMapping:0xA2EA - }, - { code:0xA2EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2EB - ,simpleLowerCaseMapping:0xA2EB - ,simpleTitleCaseMapping:0xA2EB - }, - { code:0xA2EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2EC - ,simpleLowerCaseMapping:0xA2EC - ,simpleTitleCaseMapping:0xA2EC - }, - { code:0xA2ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2ED - ,simpleLowerCaseMapping:0xA2ED - ,simpleTitleCaseMapping:0xA2ED - }, - { code:0xA2EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2EE - ,simpleLowerCaseMapping:0xA2EE - ,simpleTitleCaseMapping:0xA2EE - }, - { code:0xA2EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2EF - ,simpleLowerCaseMapping:0xA2EF - ,simpleTitleCaseMapping:0xA2EF - }, - { code:0xA2F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F0 - ,simpleLowerCaseMapping:0xA2F0 - ,simpleTitleCaseMapping:0xA2F0 - }, - { code:0xA2F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F1 - ,simpleLowerCaseMapping:0xA2F1 - ,simpleTitleCaseMapping:0xA2F1 - }, - { code:0xA2F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F2 - ,simpleLowerCaseMapping:0xA2F2 - ,simpleTitleCaseMapping:0xA2F2 - }, - { code:0xA2F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F3 - ,simpleLowerCaseMapping:0xA2F3 - ,simpleTitleCaseMapping:0xA2F3 - }, - { code:0xA2F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F4 - ,simpleLowerCaseMapping:0xA2F4 - ,simpleTitleCaseMapping:0xA2F4 - }, - { code:0xA2F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F5 - ,simpleLowerCaseMapping:0xA2F5 - ,simpleTitleCaseMapping:0xA2F5 - }, - { code:0xA2F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F6 - ,simpleLowerCaseMapping:0xA2F6 - ,simpleTitleCaseMapping:0xA2F6 - }, - { code:0xA2F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F7 - ,simpleLowerCaseMapping:0xA2F7 - ,simpleTitleCaseMapping:0xA2F7 - }, - { code:0xA2F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F8 - ,simpleLowerCaseMapping:0xA2F8 - ,simpleTitleCaseMapping:0xA2F8 - }, - { code:0xA2F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2F9 - ,simpleLowerCaseMapping:0xA2F9 - ,simpleTitleCaseMapping:0xA2F9 - }, - { code:0xA2FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FA - ,simpleLowerCaseMapping:0xA2FA - ,simpleTitleCaseMapping:0xA2FA - }, - { code:0xA2FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FB - ,simpleLowerCaseMapping:0xA2FB - ,simpleTitleCaseMapping:0xA2FB - }, - { code:0xA2FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FC - ,simpleLowerCaseMapping:0xA2FC - ,simpleTitleCaseMapping:0xA2FC - }, - { code:0xA2FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FD - ,simpleLowerCaseMapping:0xA2FD - ,simpleTitleCaseMapping:0xA2FD - }, - { code:0xA2FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FE - ,simpleLowerCaseMapping:0xA2FE - ,simpleTitleCaseMapping:0xA2FE - }, - { code:0xA2FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA2FF - ,simpleLowerCaseMapping:0xA2FF - ,simpleTitleCaseMapping:0xA2FF - }, - { code:0xA300 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA300 - ,simpleLowerCaseMapping:0xA300 - ,simpleTitleCaseMapping:0xA300 - }, - { code:0xA301 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA301 - ,simpleLowerCaseMapping:0xA301 - ,simpleTitleCaseMapping:0xA301 - }, - { code:0xA302 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA302 - ,simpleLowerCaseMapping:0xA302 - ,simpleTitleCaseMapping:0xA302 - }, - { code:0xA303 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA303 - ,simpleLowerCaseMapping:0xA303 - ,simpleTitleCaseMapping:0xA303 - }, - { code:0xA304 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA304 - ,simpleLowerCaseMapping:0xA304 - ,simpleTitleCaseMapping:0xA304 - }, - { code:0xA305 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA305 - ,simpleLowerCaseMapping:0xA305 - ,simpleTitleCaseMapping:0xA305 - }, - { code:0xA306 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA306 - ,simpleLowerCaseMapping:0xA306 - ,simpleTitleCaseMapping:0xA306 - }, - { code:0xA307 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA307 - ,simpleLowerCaseMapping:0xA307 - ,simpleTitleCaseMapping:0xA307 - }, - { code:0xA308 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA308 - ,simpleLowerCaseMapping:0xA308 - ,simpleTitleCaseMapping:0xA308 - }, - { code:0xA309 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA309 - ,simpleLowerCaseMapping:0xA309 - ,simpleTitleCaseMapping:0xA309 - }, - { code:0xA30A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30A - ,simpleLowerCaseMapping:0xA30A - ,simpleTitleCaseMapping:0xA30A - }, - { code:0xA30B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30B - ,simpleLowerCaseMapping:0xA30B - ,simpleTitleCaseMapping:0xA30B - }, - { code:0xA30C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30C - ,simpleLowerCaseMapping:0xA30C - ,simpleTitleCaseMapping:0xA30C - }, - { code:0xA30D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30D - ,simpleLowerCaseMapping:0xA30D - ,simpleTitleCaseMapping:0xA30D - }, - { code:0xA30E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30E - ,simpleLowerCaseMapping:0xA30E - ,simpleTitleCaseMapping:0xA30E - }, - { code:0xA30F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA30F - ,simpleLowerCaseMapping:0xA30F - ,simpleTitleCaseMapping:0xA30F - }, - { code:0xA310 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA310 - ,simpleLowerCaseMapping:0xA310 - ,simpleTitleCaseMapping:0xA310 - }, - { code:0xA311 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA311 - ,simpleLowerCaseMapping:0xA311 - ,simpleTitleCaseMapping:0xA311 - }, - { code:0xA312 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA312 - ,simpleLowerCaseMapping:0xA312 - ,simpleTitleCaseMapping:0xA312 - }, - { code:0xA313 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA313 - ,simpleLowerCaseMapping:0xA313 - ,simpleTitleCaseMapping:0xA313 - }, - { code:0xA314 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA314 - ,simpleLowerCaseMapping:0xA314 - ,simpleTitleCaseMapping:0xA314 - }, - { code:0xA315 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA315 - ,simpleLowerCaseMapping:0xA315 - ,simpleTitleCaseMapping:0xA315 - }, - { code:0xA316 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA316 - ,simpleLowerCaseMapping:0xA316 - ,simpleTitleCaseMapping:0xA316 - }, - { code:0xA317 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA317 - ,simpleLowerCaseMapping:0xA317 - ,simpleTitleCaseMapping:0xA317 - }, - { code:0xA318 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA318 - ,simpleLowerCaseMapping:0xA318 - ,simpleTitleCaseMapping:0xA318 - }, - { code:0xA319 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA319 - ,simpleLowerCaseMapping:0xA319 - ,simpleTitleCaseMapping:0xA319 - }, - { code:0xA31A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31A - ,simpleLowerCaseMapping:0xA31A - ,simpleTitleCaseMapping:0xA31A - }, - { code:0xA31B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31B - ,simpleLowerCaseMapping:0xA31B - ,simpleTitleCaseMapping:0xA31B - }, - { code:0xA31C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31C - ,simpleLowerCaseMapping:0xA31C - ,simpleTitleCaseMapping:0xA31C - }, - { code:0xA31D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31D - ,simpleLowerCaseMapping:0xA31D - ,simpleTitleCaseMapping:0xA31D - }, - { code:0xA31E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31E - ,simpleLowerCaseMapping:0xA31E - ,simpleTitleCaseMapping:0xA31E - }, - { code:0xA31F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA31F - ,simpleLowerCaseMapping:0xA31F - ,simpleTitleCaseMapping:0xA31F - }, - { code:0xA320 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA320 - ,simpleLowerCaseMapping:0xA320 - ,simpleTitleCaseMapping:0xA320 - }, - { code:0xA321 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA321 - ,simpleLowerCaseMapping:0xA321 - ,simpleTitleCaseMapping:0xA321 - }, - { code:0xA322 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA322 - ,simpleLowerCaseMapping:0xA322 - ,simpleTitleCaseMapping:0xA322 - }, - { code:0xA323 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA323 - ,simpleLowerCaseMapping:0xA323 - ,simpleTitleCaseMapping:0xA323 - }, - { code:0xA324 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA324 - ,simpleLowerCaseMapping:0xA324 - ,simpleTitleCaseMapping:0xA324 - }, - { code:0xA325 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA325 - ,simpleLowerCaseMapping:0xA325 - ,simpleTitleCaseMapping:0xA325 - }, - { code:0xA326 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA326 - ,simpleLowerCaseMapping:0xA326 - ,simpleTitleCaseMapping:0xA326 - }, - { code:0xA327 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA327 - ,simpleLowerCaseMapping:0xA327 - ,simpleTitleCaseMapping:0xA327 - }, - { code:0xA328 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA328 - ,simpleLowerCaseMapping:0xA328 - ,simpleTitleCaseMapping:0xA328 - }, - { code:0xA329 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA329 - ,simpleLowerCaseMapping:0xA329 - ,simpleTitleCaseMapping:0xA329 - }, - { code:0xA32A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32A - ,simpleLowerCaseMapping:0xA32A - ,simpleTitleCaseMapping:0xA32A - }, - { code:0xA32B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32B - ,simpleLowerCaseMapping:0xA32B - ,simpleTitleCaseMapping:0xA32B - }, - { code:0xA32C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32C - ,simpleLowerCaseMapping:0xA32C - ,simpleTitleCaseMapping:0xA32C - }, - { code:0xA32D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32D - ,simpleLowerCaseMapping:0xA32D - ,simpleTitleCaseMapping:0xA32D - }, - { code:0xA32E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32E - ,simpleLowerCaseMapping:0xA32E - ,simpleTitleCaseMapping:0xA32E - }, - { code:0xA32F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA32F - ,simpleLowerCaseMapping:0xA32F - ,simpleTitleCaseMapping:0xA32F - }, - { code:0xA330 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA330 - ,simpleLowerCaseMapping:0xA330 - ,simpleTitleCaseMapping:0xA330 - }, - { code:0xA331 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA331 - ,simpleLowerCaseMapping:0xA331 - ,simpleTitleCaseMapping:0xA331 - }, - { code:0xA332 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA332 - ,simpleLowerCaseMapping:0xA332 - ,simpleTitleCaseMapping:0xA332 - }, - { code:0xA333 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA333 - ,simpleLowerCaseMapping:0xA333 - ,simpleTitleCaseMapping:0xA333 - }, - { code:0xA334 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA334 - ,simpleLowerCaseMapping:0xA334 - ,simpleTitleCaseMapping:0xA334 - }, - { code:0xA335 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA335 - ,simpleLowerCaseMapping:0xA335 - ,simpleTitleCaseMapping:0xA335 - }, - { code:0xA336 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA336 - ,simpleLowerCaseMapping:0xA336 - ,simpleTitleCaseMapping:0xA336 - }, - { code:0xA337 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA337 - ,simpleLowerCaseMapping:0xA337 - ,simpleTitleCaseMapping:0xA337 - }, - { code:0xA338 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA338 - ,simpleLowerCaseMapping:0xA338 - ,simpleTitleCaseMapping:0xA338 - }, - { code:0xA339 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA339 - ,simpleLowerCaseMapping:0xA339 - ,simpleTitleCaseMapping:0xA339 - }, - { code:0xA33A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33A - ,simpleLowerCaseMapping:0xA33A - ,simpleTitleCaseMapping:0xA33A - }, - { code:0xA33B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33B - ,simpleLowerCaseMapping:0xA33B - ,simpleTitleCaseMapping:0xA33B - }, - { code:0xA33C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33C - ,simpleLowerCaseMapping:0xA33C - ,simpleTitleCaseMapping:0xA33C - }, - { code:0xA33D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33D - ,simpleLowerCaseMapping:0xA33D - ,simpleTitleCaseMapping:0xA33D - }, - { code:0xA33E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33E - ,simpleLowerCaseMapping:0xA33E - ,simpleTitleCaseMapping:0xA33E - }, - { code:0xA33F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA33F - ,simpleLowerCaseMapping:0xA33F - ,simpleTitleCaseMapping:0xA33F - }, - { code:0xA340 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA340 - ,simpleLowerCaseMapping:0xA340 - ,simpleTitleCaseMapping:0xA340 - }, - { code:0xA341 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA341 - ,simpleLowerCaseMapping:0xA341 - ,simpleTitleCaseMapping:0xA341 - }, - { code:0xA342 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA342 - ,simpleLowerCaseMapping:0xA342 - ,simpleTitleCaseMapping:0xA342 - }, - { code:0xA343 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA343 - ,simpleLowerCaseMapping:0xA343 - ,simpleTitleCaseMapping:0xA343 - }, - { code:0xA344 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA344 - ,simpleLowerCaseMapping:0xA344 - ,simpleTitleCaseMapping:0xA344 - }, - { code:0xA345 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA345 - ,simpleLowerCaseMapping:0xA345 - ,simpleTitleCaseMapping:0xA345 - }, - { code:0xA346 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA346 - ,simpleLowerCaseMapping:0xA346 - ,simpleTitleCaseMapping:0xA346 - }, - { code:0xA347 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA347 - ,simpleLowerCaseMapping:0xA347 - ,simpleTitleCaseMapping:0xA347 - }, - { code:0xA348 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA348 - ,simpleLowerCaseMapping:0xA348 - ,simpleTitleCaseMapping:0xA348 - }, - { code:0xA349 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA349 - ,simpleLowerCaseMapping:0xA349 - ,simpleTitleCaseMapping:0xA349 - }, - { code:0xA34A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34A - ,simpleLowerCaseMapping:0xA34A - ,simpleTitleCaseMapping:0xA34A - }, - { code:0xA34B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34B - ,simpleLowerCaseMapping:0xA34B - ,simpleTitleCaseMapping:0xA34B - }, - { code:0xA34C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34C - ,simpleLowerCaseMapping:0xA34C - ,simpleTitleCaseMapping:0xA34C - }, - { code:0xA34D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34D - ,simpleLowerCaseMapping:0xA34D - ,simpleTitleCaseMapping:0xA34D - }, - { code:0xA34E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34E - ,simpleLowerCaseMapping:0xA34E - ,simpleTitleCaseMapping:0xA34E - }, - { code:0xA34F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA34F - ,simpleLowerCaseMapping:0xA34F - ,simpleTitleCaseMapping:0xA34F - }, - { code:0xA350 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA350 - ,simpleLowerCaseMapping:0xA350 - ,simpleTitleCaseMapping:0xA350 - }, - { code:0xA351 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA351 - ,simpleLowerCaseMapping:0xA351 - ,simpleTitleCaseMapping:0xA351 - }, - { code:0xA352 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA352 - ,simpleLowerCaseMapping:0xA352 - ,simpleTitleCaseMapping:0xA352 - }, - { code:0xA353 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA353 - ,simpleLowerCaseMapping:0xA353 - ,simpleTitleCaseMapping:0xA353 - }, - { code:0xA354 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA354 - ,simpleLowerCaseMapping:0xA354 - ,simpleTitleCaseMapping:0xA354 - }, - { code:0xA355 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA355 - ,simpleLowerCaseMapping:0xA355 - ,simpleTitleCaseMapping:0xA355 - }, - { code:0xA356 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA356 - ,simpleLowerCaseMapping:0xA356 - ,simpleTitleCaseMapping:0xA356 - }, - { code:0xA357 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA357 - ,simpleLowerCaseMapping:0xA357 - ,simpleTitleCaseMapping:0xA357 - }, - { code:0xA358 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA358 - ,simpleLowerCaseMapping:0xA358 - ,simpleTitleCaseMapping:0xA358 - }, - { code:0xA359 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA359 - ,simpleLowerCaseMapping:0xA359 - ,simpleTitleCaseMapping:0xA359 - }, - { code:0xA35A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35A - ,simpleLowerCaseMapping:0xA35A - ,simpleTitleCaseMapping:0xA35A - }, - { code:0xA35B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35B - ,simpleLowerCaseMapping:0xA35B - ,simpleTitleCaseMapping:0xA35B - }, - { code:0xA35C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35C - ,simpleLowerCaseMapping:0xA35C - ,simpleTitleCaseMapping:0xA35C - }, - { code:0xA35D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35D - ,simpleLowerCaseMapping:0xA35D - ,simpleTitleCaseMapping:0xA35D - }, - { code:0xA35E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35E - ,simpleLowerCaseMapping:0xA35E - ,simpleTitleCaseMapping:0xA35E - }, - { code:0xA35F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA35F - ,simpleLowerCaseMapping:0xA35F - ,simpleTitleCaseMapping:0xA35F - }, - { code:0xA360 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA360 - ,simpleLowerCaseMapping:0xA360 - ,simpleTitleCaseMapping:0xA360 - }, - { code:0xA361 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA361 - ,simpleLowerCaseMapping:0xA361 - ,simpleTitleCaseMapping:0xA361 - }, - { code:0xA362 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA362 - ,simpleLowerCaseMapping:0xA362 - ,simpleTitleCaseMapping:0xA362 - }, - { code:0xA363 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA363 - ,simpleLowerCaseMapping:0xA363 - ,simpleTitleCaseMapping:0xA363 - }, - { code:0xA364 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA364 - ,simpleLowerCaseMapping:0xA364 - ,simpleTitleCaseMapping:0xA364 - }, - { code:0xA365 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA365 - ,simpleLowerCaseMapping:0xA365 - ,simpleTitleCaseMapping:0xA365 - }, - { code:0xA366 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA366 - ,simpleLowerCaseMapping:0xA366 - ,simpleTitleCaseMapping:0xA366 - }, - { code:0xA367 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA367 - ,simpleLowerCaseMapping:0xA367 - ,simpleTitleCaseMapping:0xA367 - }, - { code:0xA368 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA368 - ,simpleLowerCaseMapping:0xA368 - ,simpleTitleCaseMapping:0xA368 - }, - { code:0xA369 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA369 - ,simpleLowerCaseMapping:0xA369 - ,simpleTitleCaseMapping:0xA369 - }, - { code:0xA36A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36A - ,simpleLowerCaseMapping:0xA36A - ,simpleTitleCaseMapping:0xA36A - }, - { code:0xA36B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36B - ,simpleLowerCaseMapping:0xA36B - ,simpleTitleCaseMapping:0xA36B - }, - { code:0xA36C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36C - ,simpleLowerCaseMapping:0xA36C - ,simpleTitleCaseMapping:0xA36C - }, - { code:0xA36D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36D - ,simpleLowerCaseMapping:0xA36D - ,simpleTitleCaseMapping:0xA36D - }, - { code:0xA36E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36E - ,simpleLowerCaseMapping:0xA36E - ,simpleTitleCaseMapping:0xA36E - }, - { code:0xA36F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA36F - ,simpleLowerCaseMapping:0xA36F - ,simpleTitleCaseMapping:0xA36F - }, - { code:0xA370 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA370 - ,simpleLowerCaseMapping:0xA370 - ,simpleTitleCaseMapping:0xA370 - }, - { code:0xA371 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA371 - ,simpleLowerCaseMapping:0xA371 - ,simpleTitleCaseMapping:0xA371 - }, - { code:0xA372 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA372 - ,simpleLowerCaseMapping:0xA372 - ,simpleTitleCaseMapping:0xA372 - }, - { code:0xA373 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA373 - ,simpleLowerCaseMapping:0xA373 - ,simpleTitleCaseMapping:0xA373 - }, - { code:0xA374 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA374 - ,simpleLowerCaseMapping:0xA374 - ,simpleTitleCaseMapping:0xA374 - }, - { code:0xA375 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA375 - ,simpleLowerCaseMapping:0xA375 - ,simpleTitleCaseMapping:0xA375 - }, - { code:0xA376 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA376 - ,simpleLowerCaseMapping:0xA376 - ,simpleTitleCaseMapping:0xA376 - }, - { code:0xA377 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA377 - ,simpleLowerCaseMapping:0xA377 - ,simpleTitleCaseMapping:0xA377 - }, - { code:0xA378 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA378 - ,simpleLowerCaseMapping:0xA378 - ,simpleTitleCaseMapping:0xA378 - }, - { code:0xA379 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA379 - ,simpleLowerCaseMapping:0xA379 - ,simpleTitleCaseMapping:0xA379 - }, - { code:0xA37A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37A - ,simpleLowerCaseMapping:0xA37A - ,simpleTitleCaseMapping:0xA37A - }, - { code:0xA37B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37B - ,simpleLowerCaseMapping:0xA37B - ,simpleTitleCaseMapping:0xA37B - }, - { code:0xA37C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37C - ,simpleLowerCaseMapping:0xA37C - ,simpleTitleCaseMapping:0xA37C - }, - { code:0xA37D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37D - ,simpleLowerCaseMapping:0xA37D - ,simpleTitleCaseMapping:0xA37D - }, - { code:0xA37E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37E - ,simpleLowerCaseMapping:0xA37E - ,simpleTitleCaseMapping:0xA37E - }, - { code:0xA37F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA37F - ,simpleLowerCaseMapping:0xA37F - ,simpleTitleCaseMapping:0xA37F - }, - { code:0xA380 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA380 - ,simpleLowerCaseMapping:0xA380 - ,simpleTitleCaseMapping:0xA380 - }, - { code:0xA381 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA381 - ,simpleLowerCaseMapping:0xA381 - ,simpleTitleCaseMapping:0xA381 - }, - { code:0xA382 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA382 - ,simpleLowerCaseMapping:0xA382 - ,simpleTitleCaseMapping:0xA382 - }, - { code:0xA383 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA383 - ,simpleLowerCaseMapping:0xA383 - ,simpleTitleCaseMapping:0xA383 - }, - { code:0xA384 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA384 - ,simpleLowerCaseMapping:0xA384 - ,simpleTitleCaseMapping:0xA384 - }, - { code:0xA385 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA385 - ,simpleLowerCaseMapping:0xA385 - ,simpleTitleCaseMapping:0xA385 - }, - { code:0xA386 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA386 - ,simpleLowerCaseMapping:0xA386 - ,simpleTitleCaseMapping:0xA386 - }, - { code:0xA387 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA387 - ,simpleLowerCaseMapping:0xA387 - ,simpleTitleCaseMapping:0xA387 - }, - { code:0xA388 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA388 - ,simpleLowerCaseMapping:0xA388 - ,simpleTitleCaseMapping:0xA388 - }, - { code:0xA389 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA389 - ,simpleLowerCaseMapping:0xA389 - ,simpleTitleCaseMapping:0xA389 - }, - { code:0xA38A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38A - ,simpleLowerCaseMapping:0xA38A - ,simpleTitleCaseMapping:0xA38A - }, - { code:0xA38B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38B - ,simpleLowerCaseMapping:0xA38B - ,simpleTitleCaseMapping:0xA38B - }, - { code:0xA38C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38C - ,simpleLowerCaseMapping:0xA38C - ,simpleTitleCaseMapping:0xA38C - }, - { code:0xA38D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38D - ,simpleLowerCaseMapping:0xA38D - ,simpleTitleCaseMapping:0xA38D - }, - { code:0xA38E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38E - ,simpleLowerCaseMapping:0xA38E - ,simpleTitleCaseMapping:0xA38E - }, - { code:0xA38F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA38F - ,simpleLowerCaseMapping:0xA38F - ,simpleTitleCaseMapping:0xA38F - }, - { code:0xA390 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA390 - ,simpleLowerCaseMapping:0xA390 - ,simpleTitleCaseMapping:0xA390 - }, - { code:0xA391 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA391 - ,simpleLowerCaseMapping:0xA391 - ,simpleTitleCaseMapping:0xA391 - }, - { code:0xA392 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA392 - ,simpleLowerCaseMapping:0xA392 - ,simpleTitleCaseMapping:0xA392 - }, - { code:0xA393 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA393 - ,simpleLowerCaseMapping:0xA393 - ,simpleTitleCaseMapping:0xA393 - }, - { code:0xA394 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA394 - ,simpleLowerCaseMapping:0xA394 - ,simpleTitleCaseMapping:0xA394 - }, - { code:0xA395 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA395 - ,simpleLowerCaseMapping:0xA395 - ,simpleTitleCaseMapping:0xA395 - }, - { code:0xA396 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA396 - ,simpleLowerCaseMapping:0xA396 - ,simpleTitleCaseMapping:0xA396 - }, - { code:0xA397 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA397 - ,simpleLowerCaseMapping:0xA397 - ,simpleTitleCaseMapping:0xA397 - }, - { code:0xA398 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA398 - ,simpleLowerCaseMapping:0xA398 - ,simpleTitleCaseMapping:0xA398 - }, - { code:0xA399 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA399 - ,simpleLowerCaseMapping:0xA399 - ,simpleTitleCaseMapping:0xA399 - }, - { code:0xA39A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39A - ,simpleLowerCaseMapping:0xA39A - ,simpleTitleCaseMapping:0xA39A - }, - { code:0xA39B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39B - ,simpleLowerCaseMapping:0xA39B - ,simpleTitleCaseMapping:0xA39B - }, - { code:0xA39C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39C - ,simpleLowerCaseMapping:0xA39C - ,simpleTitleCaseMapping:0xA39C - }, - { code:0xA39D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39D - ,simpleLowerCaseMapping:0xA39D - ,simpleTitleCaseMapping:0xA39D - }, - { code:0xA39E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39E - ,simpleLowerCaseMapping:0xA39E - ,simpleTitleCaseMapping:0xA39E - }, - { code:0xA39F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA39F - ,simpleLowerCaseMapping:0xA39F - ,simpleTitleCaseMapping:0xA39F - }, - { code:0xA3A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A0 - ,simpleLowerCaseMapping:0xA3A0 - ,simpleTitleCaseMapping:0xA3A0 - }, - { code:0xA3A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A1 - ,simpleLowerCaseMapping:0xA3A1 - ,simpleTitleCaseMapping:0xA3A1 - }, - { code:0xA3A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A2 - ,simpleLowerCaseMapping:0xA3A2 - ,simpleTitleCaseMapping:0xA3A2 - }, - { code:0xA3A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A3 - ,simpleLowerCaseMapping:0xA3A3 - ,simpleTitleCaseMapping:0xA3A3 - }, - { code:0xA3A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A4 - ,simpleLowerCaseMapping:0xA3A4 - ,simpleTitleCaseMapping:0xA3A4 - }, - { code:0xA3A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A5 - ,simpleLowerCaseMapping:0xA3A5 - ,simpleTitleCaseMapping:0xA3A5 - }, - { code:0xA3A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A6 - ,simpleLowerCaseMapping:0xA3A6 - ,simpleTitleCaseMapping:0xA3A6 - }, - { code:0xA3A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A7 - ,simpleLowerCaseMapping:0xA3A7 - ,simpleTitleCaseMapping:0xA3A7 - }, - { code:0xA3A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A8 - ,simpleLowerCaseMapping:0xA3A8 - ,simpleTitleCaseMapping:0xA3A8 - }, - { code:0xA3A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3A9 - ,simpleLowerCaseMapping:0xA3A9 - ,simpleTitleCaseMapping:0xA3A9 - }, - { code:0xA3AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AA - ,simpleLowerCaseMapping:0xA3AA - ,simpleTitleCaseMapping:0xA3AA - }, - { code:0xA3AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AB - ,simpleLowerCaseMapping:0xA3AB - ,simpleTitleCaseMapping:0xA3AB - }, - { code:0xA3AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AC - ,simpleLowerCaseMapping:0xA3AC - ,simpleTitleCaseMapping:0xA3AC - }, - { code:0xA3AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AD - ,simpleLowerCaseMapping:0xA3AD - ,simpleTitleCaseMapping:0xA3AD - }, - { code:0xA3AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AE - ,simpleLowerCaseMapping:0xA3AE - ,simpleTitleCaseMapping:0xA3AE - }, - { code:0xA3AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3AF - ,simpleLowerCaseMapping:0xA3AF - ,simpleTitleCaseMapping:0xA3AF - }, - { code:0xA3B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B0 - ,simpleLowerCaseMapping:0xA3B0 - ,simpleTitleCaseMapping:0xA3B0 - }, - { code:0xA3B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B1 - ,simpleLowerCaseMapping:0xA3B1 - ,simpleTitleCaseMapping:0xA3B1 - }, - { code:0xA3B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B2 - ,simpleLowerCaseMapping:0xA3B2 - ,simpleTitleCaseMapping:0xA3B2 - }, - { code:0xA3B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B3 - ,simpleLowerCaseMapping:0xA3B3 - ,simpleTitleCaseMapping:0xA3B3 - }, - { code:0xA3B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B4 - ,simpleLowerCaseMapping:0xA3B4 - ,simpleTitleCaseMapping:0xA3B4 - }, - { code:0xA3B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B5 - ,simpleLowerCaseMapping:0xA3B5 - ,simpleTitleCaseMapping:0xA3B5 - }, - { code:0xA3B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B6 - ,simpleLowerCaseMapping:0xA3B6 - ,simpleTitleCaseMapping:0xA3B6 - }, - { code:0xA3B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B7 - ,simpleLowerCaseMapping:0xA3B7 - ,simpleTitleCaseMapping:0xA3B7 - }, - { code:0xA3B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B8 - ,simpleLowerCaseMapping:0xA3B8 - ,simpleTitleCaseMapping:0xA3B8 - }, - { code:0xA3B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3B9 - ,simpleLowerCaseMapping:0xA3B9 - ,simpleTitleCaseMapping:0xA3B9 - }, - { code:0xA3BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BA - ,simpleLowerCaseMapping:0xA3BA - ,simpleTitleCaseMapping:0xA3BA - }, - { code:0xA3BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BB - ,simpleLowerCaseMapping:0xA3BB - ,simpleTitleCaseMapping:0xA3BB - }, - { code:0xA3BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BC - ,simpleLowerCaseMapping:0xA3BC - ,simpleTitleCaseMapping:0xA3BC - }, - { code:0xA3BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BD - ,simpleLowerCaseMapping:0xA3BD - ,simpleTitleCaseMapping:0xA3BD - }, - { code:0xA3BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BE - ,simpleLowerCaseMapping:0xA3BE - ,simpleTitleCaseMapping:0xA3BE - }, - { code:0xA3BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3BF - ,simpleLowerCaseMapping:0xA3BF - ,simpleTitleCaseMapping:0xA3BF - }, - { code:0xA3C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C0 - ,simpleLowerCaseMapping:0xA3C0 - ,simpleTitleCaseMapping:0xA3C0 - }, - { code:0xA3C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C1 - ,simpleLowerCaseMapping:0xA3C1 - ,simpleTitleCaseMapping:0xA3C1 - }, - { code:0xA3C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C2 - ,simpleLowerCaseMapping:0xA3C2 - ,simpleTitleCaseMapping:0xA3C2 - }, - { code:0xA3C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C3 - ,simpleLowerCaseMapping:0xA3C3 - ,simpleTitleCaseMapping:0xA3C3 - }, - { code:0xA3C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C4 - ,simpleLowerCaseMapping:0xA3C4 - ,simpleTitleCaseMapping:0xA3C4 - }, - { code:0xA3C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C5 - ,simpleLowerCaseMapping:0xA3C5 - ,simpleTitleCaseMapping:0xA3C5 - }, - { code:0xA3C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C6 - ,simpleLowerCaseMapping:0xA3C6 - ,simpleTitleCaseMapping:0xA3C6 - }, - { code:0xA3C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C7 - ,simpleLowerCaseMapping:0xA3C7 - ,simpleTitleCaseMapping:0xA3C7 - }, - { code:0xA3C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C8 - ,simpleLowerCaseMapping:0xA3C8 - ,simpleTitleCaseMapping:0xA3C8 - }, - { code:0xA3C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3C9 - ,simpleLowerCaseMapping:0xA3C9 - ,simpleTitleCaseMapping:0xA3C9 - }, - { code:0xA3CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CA - ,simpleLowerCaseMapping:0xA3CA - ,simpleTitleCaseMapping:0xA3CA - }, - { code:0xA3CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CB - ,simpleLowerCaseMapping:0xA3CB - ,simpleTitleCaseMapping:0xA3CB - }, - { code:0xA3CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CC - ,simpleLowerCaseMapping:0xA3CC - ,simpleTitleCaseMapping:0xA3CC - }, - { code:0xA3CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CD - ,simpleLowerCaseMapping:0xA3CD - ,simpleTitleCaseMapping:0xA3CD - }, - { code:0xA3CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CE - ,simpleLowerCaseMapping:0xA3CE - ,simpleTitleCaseMapping:0xA3CE - }, - { code:0xA3CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3CF - ,simpleLowerCaseMapping:0xA3CF - ,simpleTitleCaseMapping:0xA3CF - }, - { code:0xA3D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D0 - ,simpleLowerCaseMapping:0xA3D0 - ,simpleTitleCaseMapping:0xA3D0 - }, - { code:0xA3D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D1 - ,simpleLowerCaseMapping:0xA3D1 - ,simpleTitleCaseMapping:0xA3D1 - }, - { code:0xA3D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D2 - ,simpleLowerCaseMapping:0xA3D2 - ,simpleTitleCaseMapping:0xA3D2 - }, - { code:0xA3D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D3 - ,simpleLowerCaseMapping:0xA3D3 - ,simpleTitleCaseMapping:0xA3D3 - }, - { code:0xA3D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D4 - ,simpleLowerCaseMapping:0xA3D4 - ,simpleTitleCaseMapping:0xA3D4 - }, - { code:0xA3D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D5 - ,simpleLowerCaseMapping:0xA3D5 - ,simpleTitleCaseMapping:0xA3D5 - }, - { code:0xA3D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D6 - ,simpleLowerCaseMapping:0xA3D6 - ,simpleTitleCaseMapping:0xA3D6 - }, - { code:0xA3D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D7 - ,simpleLowerCaseMapping:0xA3D7 - ,simpleTitleCaseMapping:0xA3D7 - }, - { code:0xA3D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D8 - ,simpleLowerCaseMapping:0xA3D8 - ,simpleTitleCaseMapping:0xA3D8 - }, - { code:0xA3D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3D9 - ,simpleLowerCaseMapping:0xA3D9 - ,simpleTitleCaseMapping:0xA3D9 - }, - { code:0xA3DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DA - ,simpleLowerCaseMapping:0xA3DA - ,simpleTitleCaseMapping:0xA3DA - }, - { code:0xA3DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DB - ,simpleLowerCaseMapping:0xA3DB - ,simpleTitleCaseMapping:0xA3DB - }, - { code:0xA3DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DC - ,simpleLowerCaseMapping:0xA3DC - ,simpleTitleCaseMapping:0xA3DC - }, - { code:0xA3DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DD - ,simpleLowerCaseMapping:0xA3DD - ,simpleTitleCaseMapping:0xA3DD - }, - { code:0xA3DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DE - ,simpleLowerCaseMapping:0xA3DE - ,simpleTitleCaseMapping:0xA3DE - }, - { code:0xA3DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3DF - ,simpleLowerCaseMapping:0xA3DF - ,simpleTitleCaseMapping:0xA3DF - }, - { code:0xA3E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E0 - ,simpleLowerCaseMapping:0xA3E0 - ,simpleTitleCaseMapping:0xA3E0 - }, - { code:0xA3E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E1 - ,simpleLowerCaseMapping:0xA3E1 - ,simpleTitleCaseMapping:0xA3E1 - }, - { code:0xA3E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E2 - ,simpleLowerCaseMapping:0xA3E2 - ,simpleTitleCaseMapping:0xA3E2 - }, - { code:0xA3E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E3 - ,simpleLowerCaseMapping:0xA3E3 - ,simpleTitleCaseMapping:0xA3E3 - }, - { code:0xA3E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E4 - ,simpleLowerCaseMapping:0xA3E4 - ,simpleTitleCaseMapping:0xA3E4 - }, - { code:0xA3E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E5 - ,simpleLowerCaseMapping:0xA3E5 - ,simpleTitleCaseMapping:0xA3E5 - }, - { code:0xA3E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E6 - ,simpleLowerCaseMapping:0xA3E6 - ,simpleTitleCaseMapping:0xA3E6 - }, - { code:0xA3E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E7 - ,simpleLowerCaseMapping:0xA3E7 - ,simpleTitleCaseMapping:0xA3E7 - }, - { code:0xA3E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E8 - ,simpleLowerCaseMapping:0xA3E8 - ,simpleTitleCaseMapping:0xA3E8 - }, - { code:0xA3E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3E9 - ,simpleLowerCaseMapping:0xA3E9 - ,simpleTitleCaseMapping:0xA3E9 - }, - { code:0xA3EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3EA - ,simpleLowerCaseMapping:0xA3EA - ,simpleTitleCaseMapping:0xA3EA - }, - { code:0xA3EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3EB - ,simpleLowerCaseMapping:0xA3EB - ,simpleTitleCaseMapping:0xA3EB - }, - { code:0xA3EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3EC - ,simpleLowerCaseMapping:0xA3EC - ,simpleTitleCaseMapping:0xA3EC - }, - { code:0xA3ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3ED - ,simpleLowerCaseMapping:0xA3ED - ,simpleTitleCaseMapping:0xA3ED - }, - { code:0xA3EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3EE - ,simpleLowerCaseMapping:0xA3EE - ,simpleTitleCaseMapping:0xA3EE - }, - { code:0xA3EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3EF - ,simpleLowerCaseMapping:0xA3EF - ,simpleTitleCaseMapping:0xA3EF - }, - { code:0xA3F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F0 - ,simpleLowerCaseMapping:0xA3F0 - ,simpleTitleCaseMapping:0xA3F0 - }, - { code:0xA3F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F1 - ,simpleLowerCaseMapping:0xA3F1 - ,simpleTitleCaseMapping:0xA3F1 - }, - { code:0xA3F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F2 - ,simpleLowerCaseMapping:0xA3F2 - ,simpleTitleCaseMapping:0xA3F2 - }, - { code:0xA3F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F3 - ,simpleLowerCaseMapping:0xA3F3 - ,simpleTitleCaseMapping:0xA3F3 - }, - { code:0xA3F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F4 - ,simpleLowerCaseMapping:0xA3F4 - ,simpleTitleCaseMapping:0xA3F4 - }, - { code:0xA3F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F5 - ,simpleLowerCaseMapping:0xA3F5 - ,simpleTitleCaseMapping:0xA3F5 - }, - { code:0xA3F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F6 - ,simpleLowerCaseMapping:0xA3F6 - ,simpleTitleCaseMapping:0xA3F6 - }, - { code:0xA3F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F7 - ,simpleLowerCaseMapping:0xA3F7 - ,simpleTitleCaseMapping:0xA3F7 - }, - { code:0xA3F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F8 - ,simpleLowerCaseMapping:0xA3F8 - ,simpleTitleCaseMapping:0xA3F8 - }, - { code:0xA3F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3F9 - ,simpleLowerCaseMapping:0xA3F9 - ,simpleTitleCaseMapping:0xA3F9 - }, - { code:0xA3FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FA - ,simpleLowerCaseMapping:0xA3FA - ,simpleTitleCaseMapping:0xA3FA - }, - { code:0xA3FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FB - ,simpleLowerCaseMapping:0xA3FB - ,simpleTitleCaseMapping:0xA3FB - }, - { code:0xA3FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FC - ,simpleLowerCaseMapping:0xA3FC - ,simpleTitleCaseMapping:0xA3FC - }, - { code:0xA3FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FD - ,simpleLowerCaseMapping:0xA3FD - ,simpleTitleCaseMapping:0xA3FD - }, - { code:0xA3FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FE - ,simpleLowerCaseMapping:0xA3FE - ,simpleTitleCaseMapping:0xA3FE - }, - { code:0xA3FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA3FF - ,simpleLowerCaseMapping:0xA3FF - ,simpleTitleCaseMapping:0xA3FF - }, - { code:0xA400 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA400 - ,simpleLowerCaseMapping:0xA400 - ,simpleTitleCaseMapping:0xA400 - }, - { code:0xA401 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA401 - ,simpleLowerCaseMapping:0xA401 - ,simpleTitleCaseMapping:0xA401 - }, - { code:0xA402 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA402 - ,simpleLowerCaseMapping:0xA402 - ,simpleTitleCaseMapping:0xA402 - }, - { code:0xA403 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA403 - ,simpleLowerCaseMapping:0xA403 - ,simpleTitleCaseMapping:0xA403 - }, - { code:0xA404 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA404 - ,simpleLowerCaseMapping:0xA404 - ,simpleTitleCaseMapping:0xA404 - }, - { code:0xA405 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA405 - ,simpleLowerCaseMapping:0xA405 - ,simpleTitleCaseMapping:0xA405 - }, - { code:0xA406 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA406 - ,simpleLowerCaseMapping:0xA406 - ,simpleTitleCaseMapping:0xA406 - }, - { code:0xA407 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA407 - ,simpleLowerCaseMapping:0xA407 - ,simpleTitleCaseMapping:0xA407 - }, - { code:0xA408 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA408 - ,simpleLowerCaseMapping:0xA408 - ,simpleTitleCaseMapping:0xA408 - }, - { code:0xA409 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA409 - ,simpleLowerCaseMapping:0xA409 - ,simpleTitleCaseMapping:0xA409 - }, - { code:0xA40A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40A - ,simpleLowerCaseMapping:0xA40A - ,simpleTitleCaseMapping:0xA40A - }, - { code:0xA40B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40B - ,simpleLowerCaseMapping:0xA40B - ,simpleTitleCaseMapping:0xA40B - }, - { code:0xA40C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40C - ,simpleLowerCaseMapping:0xA40C - ,simpleTitleCaseMapping:0xA40C - }, - { code:0xA40D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40D - ,simpleLowerCaseMapping:0xA40D - ,simpleTitleCaseMapping:0xA40D - }, - { code:0xA40E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40E - ,simpleLowerCaseMapping:0xA40E - ,simpleTitleCaseMapping:0xA40E - }, - { code:0xA40F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA40F - ,simpleLowerCaseMapping:0xA40F - ,simpleTitleCaseMapping:0xA40F - }, - { code:0xA410 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA410 - ,simpleLowerCaseMapping:0xA410 - ,simpleTitleCaseMapping:0xA410 - }, - { code:0xA411 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA411 - ,simpleLowerCaseMapping:0xA411 - ,simpleTitleCaseMapping:0xA411 - }, - { code:0xA412 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA412 - ,simpleLowerCaseMapping:0xA412 - ,simpleTitleCaseMapping:0xA412 - }, - { code:0xA413 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA413 - ,simpleLowerCaseMapping:0xA413 - ,simpleTitleCaseMapping:0xA413 - }, - { code:0xA414 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA414 - ,simpleLowerCaseMapping:0xA414 - ,simpleTitleCaseMapping:0xA414 - }, - { code:0xA415 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA415 - ,simpleLowerCaseMapping:0xA415 - ,simpleTitleCaseMapping:0xA415 - }, - { code:0xA416 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA416 - ,simpleLowerCaseMapping:0xA416 - ,simpleTitleCaseMapping:0xA416 - }, - { code:0xA417 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA417 - ,simpleLowerCaseMapping:0xA417 - ,simpleTitleCaseMapping:0xA417 - }, - { code:0xA418 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA418 - ,simpleLowerCaseMapping:0xA418 - ,simpleTitleCaseMapping:0xA418 - }, - { code:0xA419 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA419 - ,simpleLowerCaseMapping:0xA419 - ,simpleTitleCaseMapping:0xA419 - }, - { code:0xA41A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41A - ,simpleLowerCaseMapping:0xA41A - ,simpleTitleCaseMapping:0xA41A - }, - { code:0xA41B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41B - ,simpleLowerCaseMapping:0xA41B - ,simpleTitleCaseMapping:0xA41B - }, - { code:0xA41C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41C - ,simpleLowerCaseMapping:0xA41C - ,simpleTitleCaseMapping:0xA41C - }, - { code:0xA41D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41D - ,simpleLowerCaseMapping:0xA41D - ,simpleTitleCaseMapping:0xA41D - }, - { code:0xA41E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41E - ,simpleLowerCaseMapping:0xA41E - ,simpleTitleCaseMapping:0xA41E - }, - { code:0xA41F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA41F - ,simpleLowerCaseMapping:0xA41F - ,simpleTitleCaseMapping:0xA41F - }, - { code:0xA420 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA420 - ,simpleLowerCaseMapping:0xA420 - ,simpleTitleCaseMapping:0xA420 - }, - { code:0xA421 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA421 - ,simpleLowerCaseMapping:0xA421 - ,simpleTitleCaseMapping:0xA421 - }, - { code:0xA422 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA422 - ,simpleLowerCaseMapping:0xA422 - ,simpleTitleCaseMapping:0xA422 - }, - { code:0xA423 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA423 - ,simpleLowerCaseMapping:0xA423 - ,simpleTitleCaseMapping:0xA423 - }, - { code:0xA424 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA424 - ,simpleLowerCaseMapping:0xA424 - ,simpleTitleCaseMapping:0xA424 - }, - { code:0xA425 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA425 - ,simpleLowerCaseMapping:0xA425 - ,simpleTitleCaseMapping:0xA425 - }, - { code:0xA426 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA426 - ,simpleLowerCaseMapping:0xA426 - ,simpleTitleCaseMapping:0xA426 - }, - { code:0xA427 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA427 - ,simpleLowerCaseMapping:0xA427 - ,simpleTitleCaseMapping:0xA427 - }, - { code:0xA428 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA428 - ,simpleLowerCaseMapping:0xA428 - ,simpleTitleCaseMapping:0xA428 - }, - { code:0xA429 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA429 - ,simpleLowerCaseMapping:0xA429 - ,simpleTitleCaseMapping:0xA429 - }, - { code:0xA42A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42A - ,simpleLowerCaseMapping:0xA42A - ,simpleTitleCaseMapping:0xA42A - }, - { code:0xA42B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42B - ,simpleLowerCaseMapping:0xA42B - ,simpleTitleCaseMapping:0xA42B - }, - { code:0xA42C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42C - ,simpleLowerCaseMapping:0xA42C - ,simpleTitleCaseMapping:0xA42C - }, - { code:0xA42D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42D - ,simpleLowerCaseMapping:0xA42D - ,simpleTitleCaseMapping:0xA42D - }, - { code:0xA42E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42E - ,simpleLowerCaseMapping:0xA42E - ,simpleTitleCaseMapping:0xA42E - }, - { code:0xA42F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA42F - ,simpleLowerCaseMapping:0xA42F - ,simpleTitleCaseMapping:0xA42F - }, - { code:0xA430 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA430 - ,simpleLowerCaseMapping:0xA430 - ,simpleTitleCaseMapping:0xA430 - }, - { code:0xA431 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA431 - ,simpleLowerCaseMapping:0xA431 - ,simpleTitleCaseMapping:0xA431 - }, - { code:0xA432 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA432 - ,simpleLowerCaseMapping:0xA432 - ,simpleTitleCaseMapping:0xA432 - }, - { code:0xA433 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA433 - ,simpleLowerCaseMapping:0xA433 - ,simpleTitleCaseMapping:0xA433 - }, - { code:0xA434 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA434 - ,simpleLowerCaseMapping:0xA434 - ,simpleTitleCaseMapping:0xA434 - }, - { code:0xA435 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA435 - ,simpleLowerCaseMapping:0xA435 - ,simpleTitleCaseMapping:0xA435 - }, - { code:0xA436 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA436 - ,simpleLowerCaseMapping:0xA436 - ,simpleTitleCaseMapping:0xA436 - }, - { code:0xA437 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA437 - ,simpleLowerCaseMapping:0xA437 - ,simpleTitleCaseMapping:0xA437 - }, - { code:0xA438 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA438 - ,simpleLowerCaseMapping:0xA438 - ,simpleTitleCaseMapping:0xA438 - }, - { code:0xA439 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA439 - ,simpleLowerCaseMapping:0xA439 - ,simpleTitleCaseMapping:0xA439 - }, - { code:0xA43A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43A - ,simpleLowerCaseMapping:0xA43A - ,simpleTitleCaseMapping:0xA43A - }, - { code:0xA43B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43B - ,simpleLowerCaseMapping:0xA43B - ,simpleTitleCaseMapping:0xA43B - }, - { code:0xA43C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43C - ,simpleLowerCaseMapping:0xA43C - ,simpleTitleCaseMapping:0xA43C - }, - { code:0xA43D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43D - ,simpleLowerCaseMapping:0xA43D - ,simpleTitleCaseMapping:0xA43D - }, - { code:0xA43E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43E - ,simpleLowerCaseMapping:0xA43E - ,simpleTitleCaseMapping:0xA43E - }, - { code:0xA43F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA43F - ,simpleLowerCaseMapping:0xA43F - ,simpleTitleCaseMapping:0xA43F - }, - { code:0xA440 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA440 - ,simpleLowerCaseMapping:0xA440 - ,simpleTitleCaseMapping:0xA440 - }, - { code:0xA441 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA441 - ,simpleLowerCaseMapping:0xA441 - ,simpleTitleCaseMapping:0xA441 - }, - { code:0xA442 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA442 - ,simpleLowerCaseMapping:0xA442 - ,simpleTitleCaseMapping:0xA442 - }, - { code:0xA443 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA443 - ,simpleLowerCaseMapping:0xA443 - ,simpleTitleCaseMapping:0xA443 - }, - { code:0xA444 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA444 - ,simpleLowerCaseMapping:0xA444 - ,simpleTitleCaseMapping:0xA444 - }, - { code:0xA445 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA445 - ,simpleLowerCaseMapping:0xA445 - ,simpleTitleCaseMapping:0xA445 - }, - { code:0xA446 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA446 - ,simpleLowerCaseMapping:0xA446 - ,simpleTitleCaseMapping:0xA446 - }, - { code:0xA447 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA447 - ,simpleLowerCaseMapping:0xA447 - ,simpleTitleCaseMapping:0xA447 - }, - { code:0xA448 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA448 - ,simpleLowerCaseMapping:0xA448 - ,simpleTitleCaseMapping:0xA448 - }, - { code:0xA449 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA449 - ,simpleLowerCaseMapping:0xA449 - ,simpleTitleCaseMapping:0xA449 - }, - { code:0xA44A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44A - ,simpleLowerCaseMapping:0xA44A - ,simpleTitleCaseMapping:0xA44A - }, - { code:0xA44B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44B - ,simpleLowerCaseMapping:0xA44B - ,simpleTitleCaseMapping:0xA44B - }, - { code:0xA44C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44C - ,simpleLowerCaseMapping:0xA44C - ,simpleTitleCaseMapping:0xA44C - }, - { code:0xA44D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44D - ,simpleLowerCaseMapping:0xA44D - ,simpleTitleCaseMapping:0xA44D - }, - { code:0xA44E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44E - ,simpleLowerCaseMapping:0xA44E - ,simpleTitleCaseMapping:0xA44E - }, - { code:0xA44F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA44F - ,simpleLowerCaseMapping:0xA44F - ,simpleTitleCaseMapping:0xA44F - }, - { code:0xA450 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA450 - ,simpleLowerCaseMapping:0xA450 - ,simpleTitleCaseMapping:0xA450 - }, - { code:0xA451 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA451 - ,simpleLowerCaseMapping:0xA451 - ,simpleTitleCaseMapping:0xA451 - }, - { code:0xA452 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA452 - ,simpleLowerCaseMapping:0xA452 - ,simpleTitleCaseMapping:0xA452 - }, - { code:0xA453 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA453 - ,simpleLowerCaseMapping:0xA453 - ,simpleTitleCaseMapping:0xA453 - }, - { code:0xA454 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA454 - ,simpleLowerCaseMapping:0xA454 - ,simpleTitleCaseMapping:0xA454 - }, - { code:0xA455 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA455 - ,simpleLowerCaseMapping:0xA455 - ,simpleTitleCaseMapping:0xA455 - }, - { code:0xA456 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA456 - ,simpleLowerCaseMapping:0xA456 - ,simpleTitleCaseMapping:0xA456 - }, - { code:0xA457 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA457 - ,simpleLowerCaseMapping:0xA457 - ,simpleTitleCaseMapping:0xA457 - }, - { code:0xA458 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA458 - ,simpleLowerCaseMapping:0xA458 - ,simpleTitleCaseMapping:0xA458 - }, - { code:0xA459 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA459 - ,simpleLowerCaseMapping:0xA459 - ,simpleTitleCaseMapping:0xA459 - }, - { code:0xA45A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45A - ,simpleLowerCaseMapping:0xA45A - ,simpleTitleCaseMapping:0xA45A - }, - { code:0xA45B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45B - ,simpleLowerCaseMapping:0xA45B - ,simpleTitleCaseMapping:0xA45B - }, - { code:0xA45C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45C - ,simpleLowerCaseMapping:0xA45C - ,simpleTitleCaseMapping:0xA45C - }, - { code:0xA45D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45D - ,simpleLowerCaseMapping:0xA45D - ,simpleTitleCaseMapping:0xA45D - }, - { code:0xA45E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45E - ,simpleLowerCaseMapping:0xA45E - ,simpleTitleCaseMapping:0xA45E - }, - { code:0xA45F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA45F - ,simpleLowerCaseMapping:0xA45F - ,simpleTitleCaseMapping:0xA45F - }, - { code:0xA460 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA460 - ,simpleLowerCaseMapping:0xA460 - ,simpleTitleCaseMapping:0xA460 - }, - { code:0xA461 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA461 - ,simpleLowerCaseMapping:0xA461 - ,simpleTitleCaseMapping:0xA461 - }, - { code:0xA462 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA462 - ,simpleLowerCaseMapping:0xA462 - ,simpleTitleCaseMapping:0xA462 - }, - { code:0xA463 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA463 - ,simpleLowerCaseMapping:0xA463 - ,simpleTitleCaseMapping:0xA463 - }, - { code:0xA464 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA464 - ,simpleLowerCaseMapping:0xA464 - ,simpleTitleCaseMapping:0xA464 - }, - { code:0xA465 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA465 - ,simpleLowerCaseMapping:0xA465 - ,simpleTitleCaseMapping:0xA465 - }, - { code:0xA466 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA466 - ,simpleLowerCaseMapping:0xA466 - ,simpleTitleCaseMapping:0xA466 - }, - { code:0xA467 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA467 - ,simpleLowerCaseMapping:0xA467 - ,simpleTitleCaseMapping:0xA467 - }, - { code:0xA468 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA468 - ,simpleLowerCaseMapping:0xA468 - ,simpleTitleCaseMapping:0xA468 - }, - { code:0xA469 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA469 - ,simpleLowerCaseMapping:0xA469 - ,simpleTitleCaseMapping:0xA469 - }, - { code:0xA46A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46A - ,simpleLowerCaseMapping:0xA46A - ,simpleTitleCaseMapping:0xA46A - }, - { code:0xA46B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46B - ,simpleLowerCaseMapping:0xA46B - ,simpleTitleCaseMapping:0xA46B - }, - { code:0xA46C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46C - ,simpleLowerCaseMapping:0xA46C - ,simpleTitleCaseMapping:0xA46C - }, - { code:0xA46D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46D - ,simpleLowerCaseMapping:0xA46D - ,simpleTitleCaseMapping:0xA46D - }, - { code:0xA46E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46E - ,simpleLowerCaseMapping:0xA46E - ,simpleTitleCaseMapping:0xA46E - }, - { code:0xA46F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA46F - ,simpleLowerCaseMapping:0xA46F - ,simpleTitleCaseMapping:0xA46F - }, - { code:0xA470 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA470 - ,simpleLowerCaseMapping:0xA470 - ,simpleTitleCaseMapping:0xA470 - }, - { code:0xA471 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA471 - ,simpleLowerCaseMapping:0xA471 - ,simpleTitleCaseMapping:0xA471 - }, - { code:0xA472 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA472 - ,simpleLowerCaseMapping:0xA472 - ,simpleTitleCaseMapping:0xA472 - }, - { code:0xA473 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA473 - ,simpleLowerCaseMapping:0xA473 - ,simpleTitleCaseMapping:0xA473 - }, - { code:0xA474 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA474 - ,simpleLowerCaseMapping:0xA474 - ,simpleTitleCaseMapping:0xA474 - }, - { code:0xA475 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA475 - ,simpleLowerCaseMapping:0xA475 - ,simpleTitleCaseMapping:0xA475 - }, - { code:0xA476 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA476 - ,simpleLowerCaseMapping:0xA476 - ,simpleTitleCaseMapping:0xA476 - }, - { code:0xA477 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA477 - ,simpleLowerCaseMapping:0xA477 - ,simpleTitleCaseMapping:0xA477 - }, - { code:0xA478 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA478 - ,simpleLowerCaseMapping:0xA478 - ,simpleTitleCaseMapping:0xA478 - }, - { code:0xA479 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA479 - ,simpleLowerCaseMapping:0xA479 - ,simpleTitleCaseMapping:0xA479 - }, - { code:0xA47A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47A - ,simpleLowerCaseMapping:0xA47A - ,simpleTitleCaseMapping:0xA47A - }, - { code:0xA47B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47B - ,simpleLowerCaseMapping:0xA47B - ,simpleTitleCaseMapping:0xA47B - }, - { code:0xA47C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47C - ,simpleLowerCaseMapping:0xA47C - ,simpleTitleCaseMapping:0xA47C - }, - { code:0xA47D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47D - ,simpleLowerCaseMapping:0xA47D - ,simpleTitleCaseMapping:0xA47D - }, - { code:0xA47E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47E - ,simpleLowerCaseMapping:0xA47E - ,simpleTitleCaseMapping:0xA47E - }, - { code:0xA47F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA47F - ,simpleLowerCaseMapping:0xA47F - ,simpleTitleCaseMapping:0xA47F - }, - { code:0xA480 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA480 - ,simpleLowerCaseMapping:0xA480 - ,simpleTitleCaseMapping:0xA480 - }, - { code:0xA481 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA481 - ,simpleLowerCaseMapping:0xA481 - ,simpleTitleCaseMapping:0xA481 - }, - { code:0xA482 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA482 - ,simpleLowerCaseMapping:0xA482 - ,simpleTitleCaseMapping:0xA482 - }, - { code:0xA483 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA483 - ,simpleLowerCaseMapping:0xA483 - ,simpleTitleCaseMapping:0xA483 - }, - { code:0xA484 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA484 - ,simpleLowerCaseMapping:0xA484 - ,simpleTitleCaseMapping:0xA484 - }, - { code:0xA485 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA485 - ,simpleLowerCaseMapping:0xA485 - ,simpleTitleCaseMapping:0xA485 - }, - { code:0xA486 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA486 - ,simpleLowerCaseMapping:0xA486 - ,simpleTitleCaseMapping:0xA486 - }, - { code:0xA487 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA487 - ,simpleLowerCaseMapping:0xA487 - ,simpleTitleCaseMapping:0xA487 - }, - { code:0xA488 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA488 - ,simpleLowerCaseMapping:0xA488 - ,simpleTitleCaseMapping:0xA488 - }, - { code:0xA489 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA489 - ,simpleLowerCaseMapping:0xA489 - ,simpleTitleCaseMapping:0xA489 - }, - { code:0xA48A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA48A - ,simpleLowerCaseMapping:0xA48A - ,simpleTitleCaseMapping:0xA48A - }, - { code:0xA48B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA48B - ,simpleLowerCaseMapping:0xA48B - ,simpleTitleCaseMapping:0xA48B - }, - { code:0xA48C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA48C - ,simpleLowerCaseMapping:0xA48C - ,simpleTitleCaseMapping:0xA48C - }, - { code:0xA490 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA490 - ,simpleLowerCaseMapping:0xA490 - ,simpleTitleCaseMapping:0xA490 - }, - { code:0xA491 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA491 - ,simpleLowerCaseMapping:0xA491 - ,simpleTitleCaseMapping:0xA491 - }, - { code:0xA492 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA492 - ,simpleLowerCaseMapping:0xA492 - ,simpleTitleCaseMapping:0xA492 - }, - { code:0xA493 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA493 - ,simpleLowerCaseMapping:0xA493 - ,simpleTitleCaseMapping:0xA493 - }, - { code:0xA494 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA494 - ,simpleLowerCaseMapping:0xA494 - ,simpleTitleCaseMapping:0xA494 - }, - { code:0xA495 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA495 - ,simpleLowerCaseMapping:0xA495 - ,simpleTitleCaseMapping:0xA495 - }, - { code:0xA496 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA496 - ,simpleLowerCaseMapping:0xA496 - ,simpleTitleCaseMapping:0xA496 - }, - { code:0xA497 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA497 - ,simpleLowerCaseMapping:0xA497 - ,simpleTitleCaseMapping:0xA497 - }, - { code:0xA498 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA498 - ,simpleLowerCaseMapping:0xA498 - ,simpleTitleCaseMapping:0xA498 - }, - { code:0xA499 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA499 - ,simpleLowerCaseMapping:0xA499 - ,simpleTitleCaseMapping:0xA499 - }, - { code:0xA49A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49A - ,simpleLowerCaseMapping:0xA49A - ,simpleTitleCaseMapping:0xA49A - }, - { code:0xA49B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49B - ,simpleLowerCaseMapping:0xA49B - ,simpleTitleCaseMapping:0xA49B - }, - { code:0xA49C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49C - ,simpleLowerCaseMapping:0xA49C - ,simpleTitleCaseMapping:0xA49C - }, - { code:0xA49D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49D - ,simpleLowerCaseMapping:0xA49D - ,simpleTitleCaseMapping:0xA49D - }, - { code:0xA49E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49E - ,simpleLowerCaseMapping:0xA49E - ,simpleTitleCaseMapping:0xA49E - }, - { code:0xA49F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA49F - ,simpleLowerCaseMapping:0xA49F - ,simpleTitleCaseMapping:0xA49F - }, - { code:0xA4A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A0 - ,simpleLowerCaseMapping:0xA4A0 - ,simpleTitleCaseMapping:0xA4A0 - }, - { code:0xA4A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A1 - ,simpleLowerCaseMapping:0xA4A1 - ,simpleTitleCaseMapping:0xA4A1 - }, - { code:0xA4A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A2 - ,simpleLowerCaseMapping:0xA4A2 - ,simpleTitleCaseMapping:0xA4A2 - }, - { code:0xA4A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A3 - ,simpleLowerCaseMapping:0xA4A3 - ,simpleTitleCaseMapping:0xA4A3 - }, - { code:0xA4A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A4 - ,simpleLowerCaseMapping:0xA4A4 - ,simpleTitleCaseMapping:0xA4A4 - }, - { code:0xA4A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A5 - ,simpleLowerCaseMapping:0xA4A5 - ,simpleTitleCaseMapping:0xA4A5 - }, - { code:0xA4A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A6 - ,simpleLowerCaseMapping:0xA4A6 - ,simpleTitleCaseMapping:0xA4A6 - }, - { code:0xA4A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A7 - ,simpleLowerCaseMapping:0xA4A7 - ,simpleTitleCaseMapping:0xA4A7 - }, - { code:0xA4A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A8 - ,simpleLowerCaseMapping:0xA4A8 - ,simpleTitleCaseMapping:0xA4A8 - }, - { code:0xA4A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4A9 - ,simpleLowerCaseMapping:0xA4A9 - ,simpleTitleCaseMapping:0xA4A9 - }, - { code:0xA4AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AA - ,simpleLowerCaseMapping:0xA4AA - ,simpleTitleCaseMapping:0xA4AA - }, - { code:0xA4AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AB - ,simpleLowerCaseMapping:0xA4AB - ,simpleTitleCaseMapping:0xA4AB - }, - { code:0xA4AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AC - ,simpleLowerCaseMapping:0xA4AC - ,simpleTitleCaseMapping:0xA4AC - }, - { code:0xA4AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AD - ,simpleLowerCaseMapping:0xA4AD - ,simpleTitleCaseMapping:0xA4AD - }, - { code:0xA4AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AE - ,simpleLowerCaseMapping:0xA4AE - ,simpleTitleCaseMapping:0xA4AE - }, - { code:0xA4AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4AF - ,simpleLowerCaseMapping:0xA4AF - ,simpleTitleCaseMapping:0xA4AF - }, - { code:0xA4B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B0 - ,simpleLowerCaseMapping:0xA4B0 - ,simpleTitleCaseMapping:0xA4B0 - }, - { code:0xA4B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B1 - ,simpleLowerCaseMapping:0xA4B1 - ,simpleTitleCaseMapping:0xA4B1 - }, - { code:0xA4B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B2 - ,simpleLowerCaseMapping:0xA4B2 - ,simpleTitleCaseMapping:0xA4B2 - }, - { code:0xA4B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B3 - ,simpleLowerCaseMapping:0xA4B3 - ,simpleTitleCaseMapping:0xA4B3 - }, - { code:0xA4B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B4 - ,simpleLowerCaseMapping:0xA4B4 - ,simpleTitleCaseMapping:0xA4B4 - }, - { code:0xA4B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B5 - ,simpleLowerCaseMapping:0xA4B5 - ,simpleTitleCaseMapping:0xA4B5 - }, - { code:0xA4B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B6 - ,simpleLowerCaseMapping:0xA4B6 - ,simpleTitleCaseMapping:0xA4B6 - }, - { code:0xA4B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B7 - ,simpleLowerCaseMapping:0xA4B7 - ,simpleTitleCaseMapping:0xA4B7 - }, - { code:0xA4B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B8 - ,simpleLowerCaseMapping:0xA4B8 - ,simpleTitleCaseMapping:0xA4B8 - }, - { code:0xA4B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4B9 - ,simpleLowerCaseMapping:0xA4B9 - ,simpleTitleCaseMapping:0xA4B9 - }, - { code:0xA4BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BA - ,simpleLowerCaseMapping:0xA4BA - ,simpleTitleCaseMapping:0xA4BA - }, - { code:0xA4BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BB - ,simpleLowerCaseMapping:0xA4BB - ,simpleTitleCaseMapping:0xA4BB - }, - { code:0xA4BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BC - ,simpleLowerCaseMapping:0xA4BC - ,simpleTitleCaseMapping:0xA4BC - }, - { code:0xA4BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BD - ,simpleLowerCaseMapping:0xA4BD - ,simpleTitleCaseMapping:0xA4BD - }, - { code:0xA4BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BE - ,simpleLowerCaseMapping:0xA4BE - ,simpleTitleCaseMapping:0xA4BE - }, - { code:0xA4BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4BF - ,simpleLowerCaseMapping:0xA4BF - ,simpleTitleCaseMapping:0xA4BF - }, - { code:0xA4C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C0 - ,simpleLowerCaseMapping:0xA4C0 - ,simpleTitleCaseMapping:0xA4C0 - }, - { code:0xA4C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C1 - ,simpleLowerCaseMapping:0xA4C1 - ,simpleTitleCaseMapping:0xA4C1 - }, - { code:0xA4C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C2 - ,simpleLowerCaseMapping:0xA4C2 - ,simpleTitleCaseMapping:0xA4C2 - }, - { code:0xA4C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C3 - ,simpleLowerCaseMapping:0xA4C3 - ,simpleTitleCaseMapping:0xA4C3 - }, - { code:0xA4C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C4 - ,simpleLowerCaseMapping:0xA4C4 - ,simpleTitleCaseMapping:0xA4C4 - }, - { code:0xA4C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C5 - ,simpleLowerCaseMapping:0xA4C5 - ,simpleTitleCaseMapping:0xA4C5 - }, - { code:0xA4C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA4C6 - ,simpleLowerCaseMapping:0xA4C6 - ,simpleTitleCaseMapping:0xA4C6 - }, - { code:0xA700 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA700 - ,simpleLowerCaseMapping:0xA700 - ,simpleTitleCaseMapping:0xA700 - }, - { code:0xA701 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA701 - ,simpleLowerCaseMapping:0xA701 - ,simpleTitleCaseMapping:0xA701 - }, - { code:0xA702 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA702 - ,simpleLowerCaseMapping:0xA702 - ,simpleTitleCaseMapping:0xA702 - }, - { code:0xA703 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA703 - ,simpleLowerCaseMapping:0xA703 - ,simpleTitleCaseMapping:0xA703 - }, - { code:0xA704 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA704 - ,simpleLowerCaseMapping:0xA704 - ,simpleTitleCaseMapping:0xA704 - }, - { code:0xA705 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA705 - ,simpleLowerCaseMapping:0xA705 - ,simpleTitleCaseMapping:0xA705 - }, - { code:0xA706 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA706 - ,simpleLowerCaseMapping:0xA706 - ,simpleTitleCaseMapping:0xA706 - }, - { code:0xA707 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA707 - ,simpleLowerCaseMapping:0xA707 - ,simpleTitleCaseMapping:0xA707 - }, - { code:0xA708 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA708 - ,simpleLowerCaseMapping:0xA708 - ,simpleTitleCaseMapping:0xA708 - }, - { code:0xA709 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA709 - ,simpleLowerCaseMapping:0xA709 - ,simpleTitleCaseMapping:0xA709 - }, - { code:0xA70A - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70A - ,simpleLowerCaseMapping:0xA70A - ,simpleTitleCaseMapping:0xA70A - }, - { code:0xA70B - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70B - ,simpleLowerCaseMapping:0xA70B - ,simpleTitleCaseMapping:0xA70B - }, - { code:0xA70C - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70C - ,simpleLowerCaseMapping:0xA70C - ,simpleTitleCaseMapping:0xA70C - }, - { code:0xA70D - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70D - ,simpleLowerCaseMapping:0xA70D - ,simpleTitleCaseMapping:0xA70D - }, - { code:0xA70E - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70E - ,simpleLowerCaseMapping:0xA70E - ,simpleTitleCaseMapping:0xA70E - }, - { code:0xA70F - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA70F - ,simpleLowerCaseMapping:0xA70F - ,simpleTitleCaseMapping:0xA70F - }, - { code:0xA710 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA710 - ,simpleLowerCaseMapping:0xA710 - ,simpleTitleCaseMapping:0xA710 - }, - { code:0xA711 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA711 - ,simpleLowerCaseMapping:0xA711 - ,simpleTitleCaseMapping:0xA711 - }, - { code:0xA712 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA712 - ,simpleLowerCaseMapping:0xA712 - ,simpleTitleCaseMapping:0xA712 - }, - { code:0xA713 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA713 - ,simpleLowerCaseMapping:0xA713 - ,simpleTitleCaseMapping:0xA713 - }, - { code:0xA714 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA714 - ,simpleLowerCaseMapping:0xA714 - ,simpleTitleCaseMapping:0xA714 - }, - { code:0xA715 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA715 - ,simpleLowerCaseMapping:0xA715 - ,simpleTitleCaseMapping:0xA715 - }, - { code:0xA716 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA716 - ,simpleLowerCaseMapping:0xA716 - ,simpleTitleCaseMapping:0xA716 - }, - { code:0xA717 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xA717 - ,simpleLowerCaseMapping:0xA717 - ,simpleTitleCaseMapping:0xA717 - }, - { code:0xA718 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xA718 - ,simpleLowerCaseMapping:0xA718 - ,simpleTitleCaseMapping:0xA718 - }, - { code:0xA719 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xA719 - ,simpleLowerCaseMapping:0xA719 - ,simpleTitleCaseMapping:0xA719 - }, - { code:0xA71A - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xA71A - ,simpleLowerCaseMapping:0xA71A - ,simpleTitleCaseMapping:0xA71A - }, - { code:0xA720 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA720 - ,simpleLowerCaseMapping:0xA720 - ,simpleTitleCaseMapping:0xA720 - }, - { code:0xA721 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xA721 - ,simpleLowerCaseMapping:0xA721 - ,simpleTitleCaseMapping:0xA721 - }, - { code:0xA800 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA800 - ,simpleLowerCaseMapping:0xA800 - ,simpleTitleCaseMapping:0xA800 - }, - { code:0xA801 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA801 - ,simpleLowerCaseMapping:0xA801 - ,simpleTitleCaseMapping:0xA801 - }, - { code:0xA802 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0xA802 - ,simpleLowerCaseMapping:0xA802 - ,simpleTitleCaseMapping:0xA802 - }, - { code:0xA803 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA803 - ,simpleLowerCaseMapping:0xA803 - ,simpleTitleCaseMapping:0xA803 - }, - { code:0xA804 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA804 - ,simpleLowerCaseMapping:0xA804 - ,simpleTitleCaseMapping:0xA804 - }, - { code:0xA805 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA805 - ,simpleLowerCaseMapping:0xA805 - ,simpleTitleCaseMapping:0xA805 - }, - { code:0xA806 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xA806 - ,simpleLowerCaseMapping:0xA806 - ,simpleTitleCaseMapping:0xA806 - }, - { code:0xA807 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA807 - ,simpleLowerCaseMapping:0xA807 - ,simpleTitleCaseMapping:0xA807 - }, - { code:0xA808 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA808 - ,simpleLowerCaseMapping:0xA808 - ,simpleTitleCaseMapping:0xA808 - }, - { code:0xA809 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA809 - ,simpleLowerCaseMapping:0xA809 - ,simpleTitleCaseMapping:0xA809 - }, - { code:0xA80A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA80A - ,simpleLowerCaseMapping:0xA80A - ,simpleTitleCaseMapping:0xA80A - }, - { code:0xA80B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xA80B - ,simpleLowerCaseMapping:0xA80B - ,simpleTitleCaseMapping:0xA80B - }, - { code:0xA80C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA80C - ,simpleLowerCaseMapping:0xA80C - ,simpleTitleCaseMapping:0xA80C - }, - { code:0xA80D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA80D - ,simpleLowerCaseMapping:0xA80D - ,simpleTitleCaseMapping:0xA80D - }, - { code:0xA80E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA80E - ,simpleLowerCaseMapping:0xA80E - ,simpleTitleCaseMapping:0xA80E - }, - { code:0xA80F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA80F - ,simpleLowerCaseMapping:0xA80F - ,simpleTitleCaseMapping:0xA80F - }, - { code:0xA810 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA810 - ,simpleLowerCaseMapping:0xA810 - ,simpleTitleCaseMapping:0xA810 - }, - { code:0xA811 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA811 - ,simpleLowerCaseMapping:0xA811 - ,simpleTitleCaseMapping:0xA811 - }, - { code:0xA812 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA812 - ,simpleLowerCaseMapping:0xA812 - ,simpleTitleCaseMapping:0xA812 - }, - { code:0xA813 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA813 - ,simpleLowerCaseMapping:0xA813 - ,simpleTitleCaseMapping:0xA813 - }, - { code:0xA814 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA814 - ,simpleLowerCaseMapping:0xA814 - ,simpleTitleCaseMapping:0xA814 - }, - { code:0xA815 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA815 - ,simpleLowerCaseMapping:0xA815 - ,simpleTitleCaseMapping:0xA815 - }, - { code:0xA816 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA816 - ,simpleLowerCaseMapping:0xA816 - ,simpleTitleCaseMapping:0xA816 - }, - { code:0xA817 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA817 - ,simpleLowerCaseMapping:0xA817 - ,simpleTitleCaseMapping:0xA817 - }, - { code:0xA818 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA818 - ,simpleLowerCaseMapping:0xA818 - ,simpleTitleCaseMapping:0xA818 - }, - { code:0xA819 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA819 - ,simpleLowerCaseMapping:0xA819 - ,simpleTitleCaseMapping:0xA819 - }, - { code:0xA81A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81A - ,simpleLowerCaseMapping:0xA81A - ,simpleTitleCaseMapping:0xA81A - }, - { code:0xA81B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81B - ,simpleLowerCaseMapping:0xA81B - ,simpleTitleCaseMapping:0xA81B - }, - { code:0xA81C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81C - ,simpleLowerCaseMapping:0xA81C - ,simpleTitleCaseMapping:0xA81C - }, - { code:0xA81D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81D - ,simpleLowerCaseMapping:0xA81D - ,simpleTitleCaseMapping:0xA81D - }, - { code:0xA81E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81E - ,simpleLowerCaseMapping:0xA81E - ,simpleTitleCaseMapping:0xA81E - }, - { code:0xA81F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA81F - ,simpleLowerCaseMapping:0xA81F - ,simpleTitleCaseMapping:0xA81F - }, - { code:0xA820 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA820 - ,simpleLowerCaseMapping:0xA820 - ,simpleTitleCaseMapping:0xA820 - }, - { code:0xA821 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA821 - ,simpleLowerCaseMapping:0xA821 - ,simpleTitleCaseMapping:0xA821 - }, - { code:0xA822 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA822 - ,simpleLowerCaseMapping:0xA822 - ,simpleTitleCaseMapping:0xA822 - }, - { code:0xA823 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0xA823 - ,simpleLowerCaseMapping:0xA823 - ,simpleTitleCaseMapping:0xA823 - }, - { code:0xA824 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0xA824 - ,simpleLowerCaseMapping:0xA824 - ,simpleTitleCaseMapping:0xA824 - }, - { code:0xA825 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xA825 - ,simpleLowerCaseMapping:0xA825 - ,simpleTitleCaseMapping:0xA825 - }, - { code:0xA826 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xA826 - ,simpleLowerCaseMapping:0xA826 - ,simpleTitleCaseMapping:0xA826 - }, - { code:0xA827 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0xA827 - ,simpleLowerCaseMapping:0xA827 - ,simpleTitleCaseMapping:0xA827 - }, - { code:0xA828 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA828 - ,simpleLowerCaseMapping:0xA828 - ,simpleTitleCaseMapping:0xA828 - }, - { code:0xA829 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA829 - ,simpleLowerCaseMapping:0xA829 - ,simpleTitleCaseMapping:0xA829 - }, - { code:0xA82A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA82A - ,simpleLowerCaseMapping:0xA82A - ,simpleTitleCaseMapping:0xA82A - }, - { code:0xA82B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xA82B - ,simpleLowerCaseMapping:0xA82B - ,simpleTitleCaseMapping:0xA82B - }, - { code:0xA840 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA840 - ,simpleLowerCaseMapping:0xA840 - ,simpleTitleCaseMapping:0xA840 - }, - { code:0xA841 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA841 - ,simpleLowerCaseMapping:0xA841 - ,simpleTitleCaseMapping:0xA841 - }, - { code:0xA842 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA842 - ,simpleLowerCaseMapping:0xA842 - ,simpleTitleCaseMapping:0xA842 - }, - { code:0xA843 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA843 - ,simpleLowerCaseMapping:0xA843 - ,simpleTitleCaseMapping:0xA843 - }, - { code:0xA844 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA844 - ,simpleLowerCaseMapping:0xA844 - ,simpleTitleCaseMapping:0xA844 - }, - { code:0xA845 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA845 - ,simpleLowerCaseMapping:0xA845 - ,simpleTitleCaseMapping:0xA845 - }, - { code:0xA846 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA846 - ,simpleLowerCaseMapping:0xA846 - ,simpleTitleCaseMapping:0xA846 - }, - { code:0xA847 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA847 - ,simpleLowerCaseMapping:0xA847 - ,simpleTitleCaseMapping:0xA847 - }, - { code:0xA848 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA848 - ,simpleLowerCaseMapping:0xA848 - ,simpleTitleCaseMapping:0xA848 - }, - { code:0xA849 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA849 - ,simpleLowerCaseMapping:0xA849 - ,simpleTitleCaseMapping:0xA849 - }, - { code:0xA84A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84A - ,simpleLowerCaseMapping:0xA84A - ,simpleTitleCaseMapping:0xA84A - }, - { code:0xA84B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84B - ,simpleLowerCaseMapping:0xA84B - ,simpleTitleCaseMapping:0xA84B - }, - { code:0xA84C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84C - ,simpleLowerCaseMapping:0xA84C - ,simpleTitleCaseMapping:0xA84C - }, - { code:0xA84D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84D - ,simpleLowerCaseMapping:0xA84D - ,simpleTitleCaseMapping:0xA84D - }, - { code:0xA84E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84E - ,simpleLowerCaseMapping:0xA84E - ,simpleTitleCaseMapping:0xA84E - }, - { code:0xA84F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA84F - ,simpleLowerCaseMapping:0xA84F - ,simpleTitleCaseMapping:0xA84F - }, - { code:0xA850 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA850 - ,simpleLowerCaseMapping:0xA850 - ,simpleTitleCaseMapping:0xA850 - }, - { code:0xA851 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA851 - ,simpleLowerCaseMapping:0xA851 - ,simpleTitleCaseMapping:0xA851 - }, - { code:0xA852 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA852 - ,simpleLowerCaseMapping:0xA852 - ,simpleTitleCaseMapping:0xA852 - }, - { code:0xA853 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA853 - ,simpleLowerCaseMapping:0xA853 - ,simpleTitleCaseMapping:0xA853 - }, - { code:0xA854 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA854 - ,simpleLowerCaseMapping:0xA854 - ,simpleTitleCaseMapping:0xA854 - }, - { code:0xA855 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA855 - ,simpleLowerCaseMapping:0xA855 - ,simpleTitleCaseMapping:0xA855 - }, - { code:0xA856 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA856 - ,simpleLowerCaseMapping:0xA856 - ,simpleTitleCaseMapping:0xA856 - }, - { code:0xA857 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA857 - ,simpleLowerCaseMapping:0xA857 - ,simpleTitleCaseMapping:0xA857 - }, - { code:0xA858 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA858 - ,simpleLowerCaseMapping:0xA858 - ,simpleTitleCaseMapping:0xA858 - }, - { code:0xA859 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA859 - ,simpleLowerCaseMapping:0xA859 - ,simpleTitleCaseMapping:0xA859 - }, - { code:0xA85A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85A - ,simpleLowerCaseMapping:0xA85A - ,simpleTitleCaseMapping:0xA85A - }, - { code:0xA85B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85B - ,simpleLowerCaseMapping:0xA85B - ,simpleTitleCaseMapping:0xA85B - }, - { code:0xA85C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85C - ,simpleLowerCaseMapping:0xA85C - ,simpleTitleCaseMapping:0xA85C - }, - { code:0xA85D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85D - ,simpleLowerCaseMapping:0xA85D - ,simpleTitleCaseMapping:0xA85D - }, - { code:0xA85E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85E - ,simpleLowerCaseMapping:0xA85E - ,simpleTitleCaseMapping:0xA85E - }, - { code:0xA85F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA85F - ,simpleLowerCaseMapping:0xA85F - ,simpleTitleCaseMapping:0xA85F - }, - { code:0xA860 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA860 - ,simpleLowerCaseMapping:0xA860 - ,simpleTitleCaseMapping:0xA860 - }, - { code:0xA861 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA861 - ,simpleLowerCaseMapping:0xA861 - ,simpleTitleCaseMapping:0xA861 - }, - { code:0xA862 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA862 - ,simpleLowerCaseMapping:0xA862 - ,simpleTitleCaseMapping:0xA862 - }, - { code:0xA863 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA863 - ,simpleLowerCaseMapping:0xA863 - ,simpleTitleCaseMapping:0xA863 - }, - { code:0xA864 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA864 - ,simpleLowerCaseMapping:0xA864 - ,simpleTitleCaseMapping:0xA864 - }, - { code:0xA865 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA865 - ,simpleLowerCaseMapping:0xA865 - ,simpleTitleCaseMapping:0xA865 - }, - { code:0xA866 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA866 - ,simpleLowerCaseMapping:0xA866 - ,simpleTitleCaseMapping:0xA866 - }, - { code:0xA867 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA867 - ,simpleLowerCaseMapping:0xA867 - ,simpleTitleCaseMapping:0xA867 - }, - { code:0xA868 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA868 - ,simpleLowerCaseMapping:0xA868 - ,simpleTitleCaseMapping:0xA868 - }, - { code:0xA869 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA869 - ,simpleLowerCaseMapping:0xA869 - ,simpleTitleCaseMapping:0xA869 - }, - { code:0xA86A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86A - ,simpleLowerCaseMapping:0xA86A - ,simpleTitleCaseMapping:0xA86A - }, - { code:0xA86B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86B - ,simpleLowerCaseMapping:0xA86B - ,simpleTitleCaseMapping:0xA86B - }, - { code:0xA86C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86C - ,simpleLowerCaseMapping:0xA86C - ,simpleTitleCaseMapping:0xA86C - }, - { code:0xA86D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86D - ,simpleLowerCaseMapping:0xA86D - ,simpleTitleCaseMapping:0xA86D - }, - { code:0xA86E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86E - ,simpleLowerCaseMapping:0xA86E - ,simpleTitleCaseMapping:0xA86E - }, - { code:0xA86F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA86F - ,simpleLowerCaseMapping:0xA86F - ,simpleTitleCaseMapping:0xA86F - }, - { code:0xA870 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA870 - ,simpleLowerCaseMapping:0xA870 - ,simpleTitleCaseMapping:0xA870 - }, - { code:0xA871 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA871 - ,simpleLowerCaseMapping:0xA871 - ,simpleTitleCaseMapping:0xA871 - }, - { code:0xA872 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA872 - ,simpleLowerCaseMapping:0xA872 - ,simpleTitleCaseMapping:0xA872 - }, - { code:0xA873 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xA873 - ,simpleLowerCaseMapping:0xA873 - ,simpleTitleCaseMapping:0xA873 - }, - { code:0xA874 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xA874 - ,simpleLowerCaseMapping:0xA874 - ,simpleTitleCaseMapping:0xA874 - }, - { code:0xA875 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xA875 - ,simpleLowerCaseMapping:0xA875 - ,simpleTitleCaseMapping:0xA875 - }, - { code:0xA876 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xA876 - ,simpleLowerCaseMapping:0xA876 - ,simpleTitleCaseMapping:0xA876 - }, - { code:0xA877 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xA877 - ,simpleLowerCaseMapping:0xA877 - ,simpleTitleCaseMapping:0xA877 - }, - { code:0xAC00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xAC00 - ,simpleLowerCaseMapping:0xAC00 - ,simpleTitleCaseMapping:0xAC00 - }, - { code:0xD7A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xD7A3 - ,simpleLowerCaseMapping:0xD7A3 - ,simpleTitleCaseMapping:0xD7A3 - }, - { code:0xD800 - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xD800 - ,simpleLowerCaseMapping:0xD800 - ,simpleTitleCaseMapping:0xD800 - }, - { code:0xDB7F - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xDB7F - ,simpleLowerCaseMapping:0xDB7F - ,simpleTitleCaseMapping:0xDB7F - }, - { code:0xDB80 - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xDB80 - ,simpleLowerCaseMapping:0xDB80 - ,simpleTitleCaseMapping:0xDB80 - }, - { code:0xDBFF - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xDBFF - ,simpleLowerCaseMapping:0xDBFF - ,simpleTitleCaseMapping:0xDBFF - }, - { code:0xDC00 - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xDC00 - ,simpleLowerCaseMapping:0xDC00 - ,simpleTitleCaseMapping:0xDC00 - }, - { code:0xDFFF - ,generalCategory:UnicodeData.GeneralCategory.Cs - ,simpleUpperCaseMapping:0xDFFF - ,simpleLowerCaseMapping:0xDFFF - ,simpleTitleCaseMapping:0xDFFF - }, - { code:0xE000 - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0xE000 - ,simpleLowerCaseMapping:0xE000 - ,simpleTitleCaseMapping:0xE000 - }, - { code:0xF8FF - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0xF8FF - ,simpleLowerCaseMapping:0xF8FF - ,simpleTitleCaseMapping:0xF8FF - }, - { code:0xF900 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF900 - ,simpleLowerCaseMapping:0xF900 - ,simpleTitleCaseMapping:0xF900 - }, - { code:0xF901 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF901 - ,simpleLowerCaseMapping:0xF901 - ,simpleTitleCaseMapping:0xF901 - }, - { code:0xF902 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF902 - ,simpleLowerCaseMapping:0xF902 - ,simpleTitleCaseMapping:0xF902 - }, - { code:0xF903 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF903 - ,simpleLowerCaseMapping:0xF903 - ,simpleTitleCaseMapping:0xF903 - }, - { code:0xF904 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF904 - ,simpleLowerCaseMapping:0xF904 - ,simpleTitleCaseMapping:0xF904 - }, - { code:0xF905 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF905 - ,simpleLowerCaseMapping:0xF905 - ,simpleTitleCaseMapping:0xF905 - }, - { code:0xF906 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF906 - ,simpleLowerCaseMapping:0xF906 - ,simpleTitleCaseMapping:0xF906 - }, - { code:0xF907 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF907 - ,simpleLowerCaseMapping:0xF907 - ,simpleTitleCaseMapping:0xF907 - }, - { code:0xF908 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF908 - ,simpleLowerCaseMapping:0xF908 - ,simpleTitleCaseMapping:0xF908 - }, - { code:0xF909 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF909 - ,simpleLowerCaseMapping:0xF909 - ,simpleTitleCaseMapping:0xF909 - }, - { code:0xF90A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90A - ,simpleLowerCaseMapping:0xF90A - ,simpleTitleCaseMapping:0xF90A - }, - { code:0xF90B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90B - ,simpleLowerCaseMapping:0xF90B - ,simpleTitleCaseMapping:0xF90B - }, - { code:0xF90C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90C - ,simpleLowerCaseMapping:0xF90C - ,simpleTitleCaseMapping:0xF90C - }, - { code:0xF90D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90D - ,simpleLowerCaseMapping:0xF90D - ,simpleTitleCaseMapping:0xF90D - }, - { code:0xF90E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90E - ,simpleLowerCaseMapping:0xF90E - ,simpleTitleCaseMapping:0xF90E - }, - { code:0xF90F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF90F - ,simpleLowerCaseMapping:0xF90F - ,simpleTitleCaseMapping:0xF90F - }, - { code:0xF910 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF910 - ,simpleLowerCaseMapping:0xF910 - ,simpleTitleCaseMapping:0xF910 - }, - { code:0xF911 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF911 - ,simpleLowerCaseMapping:0xF911 - ,simpleTitleCaseMapping:0xF911 - }, - { code:0xF912 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF912 - ,simpleLowerCaseMapping:0xF912 - ,simpleTitleCaseMapping:0xF912 - }, - { code:0xF913 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF913 - ,simpleLowerCaseMapping:0xF913 - ,simpleTitleCaseMapping:0xF913 - }, - { code:0xF914 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF914 - ,simpleLowerCaseMapping:0xF914 - ,simpleTitleCaseMapping:0xF914 - }, - { code:0xF915 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF915 - ,simpleLowerCaseMapping:0xF915 - ,simpleTitleCaseMapping:0xF915 - }, - { code:0xF916 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF916 - ,simpleLowerCaseMapping:0xF916 - ,simpleTitleCaseMapping:0xF916 - }, - { code:0xF917 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF917 - ,simpleLowerCaseMapping:0xF917 - ,simpleTitleCaseMapping:0xF917 - }, - { code:0xF918 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF918 - ,simpleLowerCaseMapping:0xF918 - ,simpleTitleCaseMapping:0xF918 - }, - { code:0xF919 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF919 - ,simpleLowerCaseMapping:0xF919 - ,simpleTitleCaseMapping:0xF919 - }, - { code:0xF91A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91A - ,simpleLowerCaseMapping:0xF91A - ,simpleTitleCaseMapping:0xF91A - }, - { code:0xF91B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91B - ,simpleLowerCaseMapping:0xF91B - ,simpleTitleCaseMapping:0xF91B - }, - { code:0xF91C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91C - ,simpleLowerCaseMapping:0xF91C - ,simpleTitleCaseMapping:0xF91C - }, - { code:0xF91D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91D - ,simpleLowerCaseMapping:0xF91D - ,simpleTitleCaseMapping:0xF91D - }, - { code:0xF91E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91E - ,simpleLowerCaseMapping:0xF91E - ,simpleTitleCaseMapping:0xF91E - }, - { code:0xF91F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF91F - ,simpleLowerCaseMapping:0xF91F - ,simpleTitleCaseMapping:0xF91F - }, - { code:0xF920 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF920 - ,simpleLowerCaseMapping:0xF920 - ,simpleTitleCaseMapping:0xF920 - }, - { code:0xF921 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF921 - ,simpleLowerCaseMapping:0xF921 - ,simpleTitleCaseMapping:0xF921 - }, - { code:0xF922 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF922 - ,simpleLowerCaseMapping:0xF922 - ,simpleTitleCaseMapping:0xF922 - }, - { code:0xF923 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF923 - ,simpleLowerCaseMapping:0xF923 - ,simpleTitleCaseMapping:0xF923 - }, - { code:0xF924 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF924 - ,simpleLowerCaseMapping:0xF924 - ,simpleTitleCaseMapping:0xF924 - }, - { code:0xF925 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF925 - ,simpleLowerCaseMapping:0xF925 - ,simpleTitleCaseMapping:0xF925 - }, - { code:0xF926 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF926 - ,simpleLowerCaseMapping:0xF926 - ,simpleTitleCaseMapping:0xF926 - }, - { code:0xF927 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF927 - ,simpleLowerCaseMapping:0xF927 - ,simpleTitleCaseMapping:0xF927 - }, - { code:0xF928 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF928 - ,simpleLowerCaseMapping:0xF928 - ,simpleTitleCaseMapping:0xF928 - }, - { code:0xF929 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF929 - ,simpleLowerCaseMapping:0xF929 - ,simpleTitleCaseMapping:0xF929 - }, - { code:0xF92A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92A - ,simpleLowerCaseMapping:0xF92A - ,simpleTitleCaseMapping:0xF92A - }, - { code:0xF92B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92B - ,simpleLowerCaseMapping:0xF92B - ,simpleTitleCaseMapping:0xF92B - }, - { code:0xF92C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92C - ,simpleLowerCaseMapping:0xF92C - ,simpleTitleCaseMapping:0xF92C - }, - { code:0xF92D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92D - ,simpleLowerCaseMapping:0xF92D - ,simpleTitleCaseMapping:0xF92D - }, - { code:0xF92E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92E - ,simpleLowerCaseMapping:0xF92E - ,simpleTitleCaseMapping:0xF92E - }, - { code:0xF92F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF92F - ,simpleLowerCaseMapping:0xF92F - ,simpleTitleCaseMapping:0xF92F - }, - { code:0xF930 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF930 - ,simpleLowerCaseMapping:0xF930 - ,simpleTitleCaseMapping:0xF930 - }, - { code:0xF931 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF931 - ,simpleLowerCaseMapping:0xF931 - ,simpleTitleCaseMapping:0xF931 - }, - { code:0xF932 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF932 - ,simpleLowerCaseMapping:0xF932 - ,simpleTitleCaseMapping:0xF932 - }, - { code:0xF933 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF933 - ,simpleLowerCaseMapping:0xF933 - ,simpleTitleCaseMapping:0xF933 - }, - { code:0xF934 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF934 - ,simpleLowerCaseMapping:0xF934 - ,simpleTitleCaseMapping:0xF934 - }, - { code:0xF935 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF935 - ,simpleLowerCaseMapping:0xF935 - ,simpleTitleCaseMapping:0xF935 - }, - { code:0xF936 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF936 - ,simpleLowerCaseMapping:0xF936 - ,simpleTitleCaseMapping:0xF936 - }, - { code:0xF937 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF937 - ,simpleLowerCaseMapping:0xF937 - ,simpleTitleCaseMapping:0xF937 - }, - { code:0xF938 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF938 - ,simpleLowerCaseMapping:0xF938 - ,simpleTitleCaseMapping:0xF938 - }, - { code:0xF939 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF939 - ,simpleLowerCaseMapping:0xF939 - ,simpleTitleCaseMapping:0xF939 - }, - { code:0xF93A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93A - ,simpleLowerCaseMapping:0xF93A - ,simpleTitleCaseMapping:0xF93A - }, - { code:0xF93B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93B - ,simpleLowerCaseMapping:0xF93B - ,simpleTitleCaseMapping:0xF93B - }, - { code:0xF93C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93C - ,simpleLowerCaseMapping:0xF93C - ,simpleTitleCaseMapping:0xF93C - }, - { code:0xF93D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93D - ,simpleLowerCaseMapping:0xF93D - ,simpleTitleCaseMapping:0xF93D - }, - { code:0xF93E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93E - ,simpleLowerCaseMapping:0xF93E - ,simpleTitleCaseMapping:0xF93E - }, - { code:0xF93F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF93F - ,simpleLowerCaseMapping:0xF93F - ,simpleTitleCaseMapping:0xF93F - }, - { code:0xF940 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF940 - ,simpleLowerCaseMapping:0xF940 - ,simpleTitleCaseMapping:0xF940 - }, - { code:0xF941 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF941 - ,simpleLowerCaseMapping:0xF941 - ,simpleTitleCaseMapping:0xF941 - }, - { code:0xF942 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF942 - ,simpleLowerCaseMapping:0xF942 - ,simpleTitleCaseMapping:0xF942 - }, - { code:0xF943 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF943 - ,simpleLowerCaseMapping:0xF943 - ,simpleTitleCaseMapping:0xF943 - }, - { code:0xF944 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF944 - ,simpleLowerCaseMapping:0xF944 - ,simpleTitleCaseMapping:0xF944 - }, - { code:0xF945 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF945 - ,simpleLowerCaseMapping:0xF945 - ,simpleTitleCaseMapping:0xF945 - }, - { code:0xF946 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF946 - ,simpleLowerCaseMapping:0xF946 - ,simpleTitleCaseMapping:0xF946 - }, - { code:0xF947 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF947 - ,simpleLowerCaseMapping:0xF947 - ,simpleTitleCaseMapping:0xF947 - }, - { code:0xF948 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF948 - ,simpleLowerCaseMapping:0xF948 - ,simpleTitleCaseMapping:0xF948 - }, - { code:0xF949 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF949 - ,simpleLowerCaseMapping:0xF949 - ,simpleTitleCaseMapping:0xF949 - }, - { code:0xF94A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94A - ,simpleLowerCaseMapping:0xF94A - ,simpleTitleCaseMapping:0xF94A - }, - { code:0xF94B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94B - ,simpleLowerCaseMapping:0xF94B - ,simpleTitleCaseMapping:0xF94B - }, - { code:0xF94C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94C - ,simpleLowerCaseMapping:0xF94C - ,simpleTitleCaseMapping:0xF94C - }, - { code:0xF94D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94D - ,simpleLowerCaseMapping:0xF94D - ,simpleTitleCaseMapping:0xF94D - }, - { code:0xF94E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94E - ,simpleLowerCaseMapping:0xF94E - ,simpleTitleCaseMapping:0xF94E - }, - { code:0xF94F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF94F - ,simpleLowerCaseMapping:0xF94F - ,simpleTitleCaseMapping:0xF94F - }, - { code:0xF950 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF950 - ,simpleLowerCaseMapping:0xF950 - ,simpleTitleCaseMapping:0xF950 - }, - { code:0xF951 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF951 - ,simpleLowerCaseMapping:0xF951 - ,simpleTitleCaseMapping:0xF951 - }, - { code:0xF952 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF952 - ,simpleLowerCaseMapping:0xF952 - ,simpleTitleCaseMapping:0xF952 - }, - { code:0xF953 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF953 - ,simpleLowerCaseMapping:0xF953 - ,simpleTitleCaseMapping:0xF953 - }, - { code:0xF954 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF954 - ,simpleLowerCaseMapping:0xF954 - ,simpleTitleCaseMapping:0xF954 - }, - { code:0xF955 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF955 - ,simpleLowerCaseMapping:0xF955 - ,simpleTitleCaseMapping:0xF955 - }, - { code:0xF956 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF956 - ,simpleLowerCaseMapping:0xF956 - ,simpleTitleCaseMapping:0xF956 - }, - { code:0xF957 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF957 - ,simpleLowerCaseMapping:0xF957 - ,simpleTitleCaseMapping:0xF957 - }, - { code:0xF958 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF958 - ,simpleLowerCaseMapping:0xF958 - ,simpleTitleCaseMapping:0xF958 - }, - { code:0xF959 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF959 - ,simpleLowerCaseMapping:0xF959 - ,simpleTitleCaseMapping:0xF959 - }, - { code:0xF95A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95A - ,simpleLowerCaseMapping:0xF95A - ,simpleTitleCaseMapping:0xF95A - }, - { code:0xF95B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95B - ,simpleLowerCaseMapping:0xF95B - ,simpleTitleCaseMapping:0xF95B - }, - { code:0xF95C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95C - ,simpleLowerCaseMapping:0xF95C - ,simpleTitleCaseMapping:0xF95C - }, - { code:0xF95D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95D - ,simpleLowerCaseMapping:0xF95D - ,simpleTitleCaseMapping:0xF95D - }, - { code:0xF95E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95E - ,simpleLowerCaseMapping:0xF95E - ,simpleTitleCaseMapping:0xF95E - }, - { code:0xF95F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF95F - ,simpleLowerCaseMapping:0xF95F - ,simpleTitleCaseMapping:0xF95F - }, - { code:0xF960 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF960 - ,simpleLowerCaseMapping:0xF960 - ,simpleTitleCaseMapping:0xF960 - }, - { code:0xF961 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF961 - ,simpleLowerCaseMapping:0xF961 - ,simpleTitleCaseMapping:0xF961 - }, - { code:0xF962 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF962 - ,simpleLowerCaseMapping:0xF962 - ,simpleTitleCaseMapping:0xF962 - }, - { code:0xF963 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF963 - ,simpleLowerCaseMapping:0xF963 - ,simpleTitleCaseMapping:0xF963 - }, - { code:0xF964 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF964 - ,simpleLowerCaseMapping:0xF964 - ,simpleTitleCaseMapping:0xF964 - }, - { code:0xF965 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF965 - ,simpleLowerCaseMapping:0xF965 - ,simpleTitleCaseMapping:0xF965 - }, - { code:0xF966 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF966 - ,simpleLowerCaseMapping:0xF966 - ,simpleTitleCaseMapping:0xF966 - }, - { code:0xF967 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF967 - ,simpleLowerCaseMapping:0xF967 - ,simpleTitleCaseMapping:0xF967 - }, - { code:0xF968 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF968 - ,simpleLowerCaseMapping:0xF968 - ,simpleTitleCaseMapping:0xF968 - }, - { code:0xF969 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF969 - ,simpleLowerCaseMapping:0xF969 - ,simpleTitleCaseMapping:0xF969 - }, - { code:0xF96A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96A - ,simpleLowerCaseMapping:0xF96A - ,simpleTitleCaseMapping:0xF96A - }, - { code:0xF96B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96B - ,simpleLowerCaseMapping:0xF96B - ,simpleTitleCaseMapping:0xF96B - }, - { code:0xF96C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96C - ,simpleLowerCaseMapping:0xF96C - ,simpleTitleCaseMapping:0xF96C - }, - { code:0xF96D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96D - ,simpleLowerCaseMapping:0xF96D - ,simpleTitleCaseMapping:0xF96D - }, - { code:0xF96E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96E - ,simpleLowerCaseMapping:0xF96E - ,simpleTitleCaseMapping:0xF96E - }, - { code:0xF96F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF96F - ,simpleLowerCaseMapping:0xF96F - ,simpleTitleCaseMapping:0xF96F - }, - { code:0xF970 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF970 - ,simpleLowerCaseMapping:0xF970 - ,simpleTitleCaseMapping:0xF970 - }, - { code:0xF971 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF971 - ,simpleLowerCaseMapping:0xF971 - ,simpleTitleCaseMapping:0xF971 - }, - { code:0xF972 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF972 - ,simpleLowerCaseMapping:0xF972 - ,simpleTitleCaseMapping:0xF972 - }, - { code:0xF973 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF973 - ,simpleLowerCaseMapping:0xF973 - ,simpleTitleCaseMapping:0xF973 - }, - { code:0xF974 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF974 - ,simpleLowerCaseMapping:0xF974 - ,simpleTitleCaseMapping:0xF974 - }, - { code:0xF975 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF975 - ,simpleLowerCaseMapping:0xF975 - ,simpleTitleCaseMapping:0xF975 - }, - { code:0xF976 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF976 - ,simpleLowerCaseMapping:0xF976 - ,simpleTitleCaseMapping:0xF976 - }, - { code:0xF977 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF977 - ,simpleLowerCaseMapping:0xF977 - ,simpleTitleCaseMapping:0xF977 - }, - { code:0xF978 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF978 - ,simpleLowerCaseMapping:0xF978 - ,simpleTitleCaseMapping:0xF978 - }, - { code:0xF979 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF979 - ,simpleLowerCaseMapping:0xF979 - ,simpleTitleCaseMapping:0xF979 - }, - { code:0xF97A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97A - ,simpleLowerCaseMapping:0xF97A - ,simpleTitleCaseMapping:0xF97A - }, - { code:0xF97B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97B - ,simpleLowerCaseMapping:0xF97B - ,simpleTitleCaseMapping:0xF97B - }, - { code:0xF97C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97C - ,simpleLowerCaseMapping:0xF97C - ,simpleTitleCaseMapping:0xF97C - }, - { code:0xF97D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97D - ,simpleLowerCaseMapping:0xF97D - ,simpleTitleCaseMapping:0xF97D - }, - { code:0xF97E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97E - ,simpleLowerCaseMapping:0xF97E - ,simpleTitleCaseMapping:0xF97E - }, - { code:0xF97F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF97F - ,simpleLowerCaseMapping:0xF97F - ,simpleTitleCaseMapping:0xF97F - }, - { code:0xF980 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF980 - ,simpleLowerCaseMapping:0xF980 - ,simpleTitleCaseMapping:0xF980 - }, - { code:0xF981 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF981 - ,simpleLowerCaseMapping:0xF981 - ,simpleTitleCaseMapping:0xF981 - }, - { code:0xF982 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF982 - ,simpleLowerCaseMapping:0xF982 - ,simpleTitleCaseMapping:0xF982 - }, - { code:0xF983 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF983 - ,simpleLowerCaseMapping:0xF983 - ,simpleTitleCaseMapping:0xF983 - }, - { code:0xF984 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF984 - ,simpleLowerCaseMapping:0xF984 - ,simpleTitleCaseMapping:0xF984 - }, - { code:0xF985 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF985 - ,simpleLowerCaseMapping:0xF985 - ,simpleTitleCaseMapping:0xF985 - }, - { code:0xF986 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF986 - ,simpleLowerCaseMapping:0xF986 - ,simpleTitleCaseMapping:0xF986 - }, - { code:0xF987 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF987 - ,simpleLowerCaseMapping:0xF987 - ,simpleTitleCaseMapping:0xF987 - }, - { code:0xF988 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF988 - ,simpleLowerCaseMapping:0xF988 - ,simpleTitleCaseMapping:0xF988 - }, - { code:0xF989 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF989 - ,simpleLowerCaseMapping:0xF989 - ,simpleTitleCaseMapping:0xF989 - }, - { code:0xF98A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98A - ,simpleLowerCaseMapping:0xF98A - ,simpleTitleCaseMapping:0xF98A - }, - { code:0xF98B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98B - ,simpleLowerCaseMapping:0xF98B - ,simpleTitleCaseMapping:0xF98B - }, - { code:0xF98C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98C - ,simpleLowerCaseMapping:0xF98C - ,simpleTitleCaseMapping:0xF98C - }, - { code:0xF98D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98D - ,simpleLowerCaseMapping:0xF98D - ,simpleTitleCaseMapping:0xF98D - }, - { code:0xF98E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98E - ,simpleLowerCaseMapping:0xF98E - ,simpleTitleCaseMapping:0xF98E - }, - { code:0xF98F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF98F - ,simpleLowerCaseMapping:0xF98F - ,simpleTitleCaseMapping:0xF98F - }, - { code:0xF990 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF990 - ,simpleLowerCaseMapping:0xF990 - ,simpleTitleCaseMapping:0xF990 - }, - { code:0xF991 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF991 - ,simpleLowerCaseMapping:0xF991 - ,simpleTitleCaseMapping:0xF991 - }, - { code:0xF992 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF992 - ,simpleLowerCaseMapping:0xF992 - ,simpleTitleCaseMapping:0xF992 - }, - { code:0xF993 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF993 - ,simpleLowerCaseMapping:0xF993 - ,simpleTitleCaseMapping:0xF993 - }, - { code:0xF994 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF994 - ,simpleLowerCaseMapping:0xF994 - ,simpleTitleCaseMapping:0xF994 - }, - { code:0xF995 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF995 - ,simpleLowerCaseMapping:0xF995 - ,simpleTitleCaseMapping:0xF995 - }, - { code:0xF996 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF996 - ,simpleLowerCaseMapping:0xF996 - ,simpleTitleCaseMapping:0xF996 - }, - { code:0xF997 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF997 - ,simpleLowerCaseMapping:0xF997 - ,simpleTitleCaseMapping:0xF997 - }, - { code:0xF998 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF998 - ,simpleLowerCaseMapping:0xF998 - ,simpleTitleCaseMapping:0xF998 - }, - { code:0xF999 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF999 - ,simpleLowerCaseMapping:0xF999 - ,simpleTitleCaseMapping:0xF999 - }, - { code:0xF99A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99A - ,simpleLowerCaseMapping:0xF99A - ,simpleTitleCaseMapping:0xF99A - }, - { code:0xF99B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99B - ,simpleLowerCaseMapping:0xF99B - ,simpleTitleCaseMapping:0xF99B - }, - { code:0xF99C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99C - ,simpleLowerCaseMapping:0xF99C - ,simpleTitleCaseMapping:0xF99C - }, - { code:0xF99D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99D - ,simpleLowerCaseMapping:0xF99D - ,simpleTitleCaseMapping:0xF99D - }, - { code:0xF99E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99E - ,simpleLowerCaseMapping:0xF99E - ,simpleTitleCaseMapping:0xF99E - }, - { code:0xF99F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF99F - ,simpleLowerCaseMapping:0xF99F - ,simpleTitleCaseMapping:0xF99F - }, - { code:0xF9A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A0 - ,simpleLowerCaseMapping:0xF9A0 - ,simpleTitleCaseMapping:0xF9A0 - }, - { code:0xF9A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A1 - ,simpleLowerCaseMapping:0xF9A1 - ,simpleTitleCaseMapping:0xF9A1 - }, - { code:0xF9A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A2 - ,simpleLowerCaseMapping:0xF9A2 - ,simpleTitleCaseMapping:0xF9A2 - }, - { code:0xF9A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A3 - ,simpleLowerCaseMapping:0xF9A3 - ,simpleTitleCaseMapping:0xF9A3 - }, - { code:0xF9A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A4 - ,simpleLowerCaseMapping:0xF9A4 - ,simpleTitleCaseMapping:0xF9A4 - }, - { code:0xF9A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A5 - ,simpleLowerCaseMapping:0xF9A5 - ,simpleTitleCaseMapping:0xF9A5 - }, - { code:0xF9A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A6 - ,simpleLowerCaseMapping:0xF9A6 - ,simpleTitleCaseMapping:0xF9A6 - }, - { code:0xF9A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A7 - ,simpleLowerCaseMapping:0xF9A7 - ,simpleTitleCaseMapping:0xF9A7 - }, - { code:0xF9A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A8 - ,simpleLowerCaseMapping:0xF9A8 - ,simpleTitleCaseMapping:0xF9A8 - }, - { code:0xF9A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9A9 - ,simpleLowerCaseMapping:0xF9A9 - ,simpleTitleCaseMapping:0xF9A9 - }, - { code:0xF9AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AA - ,simpleLowerCaseMapping:0xF9AA - ,simpleTitleCaseMapping:0xF9AA - }, - { code:0xF9AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AB - ,simpleLowerCaseMapping:0xF9AB - ,simpleTitleCaseMapping:0xF9AB - }, - { code:0xF9AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AC - ,simpleLowerCaseMapping:0xF9AC - ,simpleTitleCaseMapping:0xF9AC - }, - { code:0xF9AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AD - ,simpleLowerCaseMapping:0xF9AD - ,simpleTitleCaseMapping:0xF9AD - }, - { code:0xF9AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AE - ,simpleLowerCaseMapping:0xF9AE - ,simpleTitleCaseMapping:0xF9AE - }, - { code:0xF9AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9AF - ,simpleLowerCaseMapping:0xF9AF - ,simpleTitleCaseMapping:0xF9AF - }, - { code:0xF9B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B0 - ,simpleLowerCaseMapping:0xF9B0 - ,simpleTitleCaseMapping:0xF9B0 - }, - { code:0xF9B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B1 - ,simpleLowerCaseMapping:0xF9B1 - ,simpleTitleCaseMapping:0xF9B1 - }, - { code:0xF9B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B2 - ,simpleLowerCaseMapping:0xF9B2 - ,simpleTitleCaseMapping:0xF9B2 - }, - { code:0xF9B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B3 - ,simpleLowerCaseMapping:0xF9B3 - ,simpleTitleCaseMapping:0xF9B3 - }, - { code:0xF9B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B4 - ,simpleLowerCaseMapping:0xF9B4 - ,simpleTitleCaseMapping:0xF9B4 - }, - { code:0xF9B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B5 - ,simpleLowerCaseMapping:0xF9B5 - ,simpleTitleCaseMapping:0xF9B5 - }, - { code:0xF9B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B6 - ,simpleLowerCaseMapping:0xF9B6 - ,simpleTitleCaseMapping:0xF9B6 - }, - { code:0xF9B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B7 - ,simpleLowerCaseMapping:0xF9B7 - ,simpleTitleCaseMapping:0xF9B7 - }, - { code:0xF9B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B8 - ,simpleLowerCaseMapping:0xF9B8 - ,simpleTitleCaseMapping:0xF9B8 - }, - { code:0xF9B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9B9 - ,simpleLowerCaseMapping:0xF9B9 - ,simpleTitleCaseMapping:0xF9B9 - }, - { code:0xF9BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BA - ,simpleLowerCaseMapping:0xF9BA - ,simpleTitleCaseMapping:0xF9BA - }, - { code:0xF9BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BB - ,simpleLowerCaseMapping:0xF9BB - ,simpleTitleCaseMapping:0xF9BB - }, - { code:0xF9BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BC - ,simpleLowerCaseMapping:0xF9BC - ,simpleTitleCaseMapping:0xF9BC - }, - { code:0xF9BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BD - ,simpleLowerCaseMapping:0xF9BD - ,simpleTitleCaseMapping:0xF9BD - }, - { code:0xF9BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BE - ,simpleLowerCaseMapping:0xF9BE - ,simpleTitleCaseMapping:0xF9BE - }, - { code:0xF9BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9BF - ,simpleLowerCaseMapping:0xF9BF - ,simpleTitleCaseMapping:0xF9BF - }, - { code:0xF9C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C0 - ,simpleLowerCaseMapping:0xF9C0 - ,simpleTitleCaseMapping:0xF9C0 - }, - { code:0xF9C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C1 - ,simpleLowerCaseMapping:0xF9C1 - ,simpleTitleCaseMapping:0xF9C1 - }, - { code:0xF9C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C2 - ,simpleLowerCaseMapping:0xF9C2 - ,simpleTitleCaseMapping:0xF9C2 - }, - { code:0xF9C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C3 - ,simpleLowerCaseMapping:0xF9C3 - ,simpleTitleCaseMapping:0xF9C3 - }, - { code:0xF9C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C4 - ,simpleLowerCaseMapping:0xF9C4 - ,simpleTitleCaseMapping:0xF9C4 - }, - { code:0xF9C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C5 - ,simpleLowerCaseMapping:0xF9C5 - ,simpleTitleCaseMapping:0xF9C5 - }, - { code:0xF9C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C6 - ,simpleLowerCaseMapping:0xF9C6 - ,simpleTitleCaseMapping:0xF9C6 - }, - { code:0xF9C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C7 - ,simpleLowerCaseMapping:0xF9C7 - ,simpleTitleCaseMapping:0xF9C7 - }, - { code:0xF9C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C8 - ,simpleLowerCaseMapping:0xF9C8 - ,simpleTitleCaseMapping:0xF9C8 - }, - { code:0xF9C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9C9 - ,simpleLowerCaseMapping:0xF9C9 - ,simpleTitleCaseMapping:0xF9C9 - }, - { code:0xF9CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CA - ,simpleLowerCaseMapping:0xF9CA - ,simpleTitleCaseMapping:0xF9CA - }, - { code:0xF9CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CB - ,simpleLowerCaseMapping:0xF9CB - ,simpleTitleCaseMapping:0xF9CB - }, - { code:0xF9CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CC - ,simpleLowerCaseMapping:0xF9CC - ,simpleTitleCaseMapping:0xF9CC - }, - { code:0xF9CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CD - ,simpleLowerCaseMapping:0xF9CD - ,simpleTitleCaseMapping:0xF9CD - }, - { code:0xF9CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CE - ,simpleLowerCaseMapping:0xF9CE - ,simpleTitleCaseMapping:0xF9CE - }, - { code:0xF9CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9CF - ,simpleLowerCaseMapping:0xF9CF - ,simpleTitleCaseMapping:0xF9CF - }, - { code:0xF9D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D0 - ,simpleLowerCaseMapping:0xF9D0 - ,simpleTitleCaseMapping:0xF9D0 - }, - { code:0xF9D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D1 - ,simpleLowerCaseMapping:0xF9D1 - ,simpleTitleCaseMapping:0xF9D1 - }, - { code:0xF9D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D2 - ,simpleLowerCaseMapping:0xF9D2 - ,simpleTitleCaseMapping:0xF9D2 - }, - { code:0xF9D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D3 - ,simpleLowerCaseMapping:0xF9D3 - ,simpleTitleCaseMapping:0xF9D3 - }, - { code:0xF9D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D4 - ,simpleLowerCaseMapping:0xF9D4 - ,simpleTitleCaseMapping:0xF9D4 - }, - { code:0xF9D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D5 - ,simpleLowerCaseMapping:0xF9D5 - ,simpleTitleCaseMapping:0xF9D5 - }, - { code:0xF9D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D6 - ,simpleLowerCaseMapping:0xF9D6 - ,simpleTitleCaseMapping:0xF9D6 - }, - { code:0xF9D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D7 - ,simpleLowerCaseMapping:0xF9D7 - ,simpleTitleCaseMapping:0xF9D7 - }, - { code:0xF9D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D8 - ,simpleLowerCaseMapping:0xF9D8 - ,simpleTitleCaseMapping:0xF9D8 - }, - { code:0xF9D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9D9 - ,simpleLowerCaseMapping:0xF9D9 - ,simpleTitleCaseMapping:0xF9D9 - }, - { code:0xF9DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DA - ,simpleLowerCaseMapping:0xF9DA - ,simpleTitleCaseMapping:0xF9DA - }, - { code:0xF9DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DB - ,simpleLowerCaseMapping:0xF9DB - ,simpleTitleCaseMapping:0xF9DB - }, - { code:0xF9DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DC - ,simpleLowerCaseMapping:0xF9DC - ,simpleTitleCaseMapping:0xF9DC - }, - { code:0xF9DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DD - ,simpleLowerCaseMapping:0xF9DD - ,simpleTitleCaseMapping:0xF9DD - }, - { code:0xF9DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DE - ,simpleLowerCaseMapping:0xF9DE - ,simpleTitleCaseMapping:0xF9DE - }, - { code:0xF9DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9DF - ,simpleLowerCaseMapping:0xF9DF - ,simpleTitleCaseMapping:0xF9DF - }, - { code:0xF9E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E0 - ,simpleLowerCaseMapping:0xF9E0 - ,simpleTitleCaseMapping:0xF9E0 - }, - { code:0xF9E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E1 - ,simpleLowerCaseMapping:0xF9E1 - ,simpleTitleCaseMapping:0xF9E1 - }, - { code:0xF9E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E2 - ,simpleLowerCaseMapping:0xF9E2 - ,simpleTitleCaseMapping:0xF9E2 - }, - { code:0xF9E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E3 - ,simpleLowerCaseMapping:0xF9E3 - ,simpleTitleCaseMapping:0xF9E3 - }, - { code:0xF9E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E4 - ,simpleLowerCaseMapping:0xF9E4 - ,simpleTitleCaseMapping:0xF9E4 - }, - { code:0xF9E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E5 - ,simpleLowerCaseMapping:0xF9E5 - ,simpleTitleCaseMapping:0xF9E5 - }, - { code:0xF9E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E6 - ,simpleLowerCaseMapping:0xF9E6 - ,simpleTitleCaseMapping:0xF9E6 - }, - { code:0xF9E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E7 - ,simpleLowerCaseMapping:0xF9E7 - ,simpleTitleCaseMapping:0xF9E7 - }, - { code:0xF9E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E8 - ,simpleLowerCaseMapping:0xF9E8 - ,simpleTitleCaseMapping:0xF9E8 - }, - { code:0xF9E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9E9 - ,simpleLowerCaseMapping:0xF9E9 - ,simpleTitleCaseMapping:0xF9E9 - }, - { code:0xF9EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9EA - ,simpleLowerCaseMapping:0xF9EA - ,simpleTitleCaseMapping:0xF9EA - }, - { code:0xF9EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9EB - ,simpleLowerCaseMapping:0xF9EB - ,simpleTitleCaseMapping:0xF9EB - }, - { code:0xF9EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9EC - ,simpleLowerCaseMapping:0xF9EC - ,simpleTitleCaseMapping:0xF9EC - }, - { code:0xF9ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9ED - ,simpleLowerCaseMapping:0xF9ED - ,simpleTitleCaseMapping:0xF9ED - }, - { code:0xF9EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9EE - ,simpleLowerCaseMapping:0xF9EE - ,simpleTitleCaseMapping:0xF9EE - }, - { code:0xF9EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9EF - ,simpleLowerCaseMapping:0xF9EF - ,simpleTitleCaseMapping:0xF9EF - }, - { code:0xF9F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F0 - ,simpleLowerCaseMapping:0xF9F0 - ,simpleTitleCaseMapping:0xF9F0 - }, - { code:0xF9F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F1 - ,simpleLowerCaseMapping:0xF9F1 - ,simpleTitleCaseMapping:0xF9F1 - }, - { code:0xF9F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F2 - ,simpleLowerCaseMapping:0xF9F2 - ,simpleTitleCaseMapping:0xF9F2 - }, - { code:0xF9F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F3 - ,simpleLowerCaseMapping:0xF9F3 - ,simpleTitleCaseMapping:0xF9F3 - }, - { code:0xF9F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F4 - ,simpleLowerCaseMapping:0xF9F4 - ,simpleTitleCaseMapping:0xF9F4 - }, - { code:0xF9F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F5 - ,simpleLowerCaseMapping:0xF9F5 - ,simpleTitleCaseMapping:0xF9F5 - }, - { code:0xF9F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F6 - ,simpleLowerCaseMapping:0xF9F6 - ,simpleTitleCaseMapping:0xF9F6 - }, - { code:0xF9F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F7 - ,simpleLowerCaseMapping:0xF9F7 - ,simpleTitleCaseMapping:0xF9F7 - }, - { code:0xF9F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F8 - ,simpleLowerCaseMapping:0xF9F8 - ,simpleTitleCaseMapping:0xF9F8 - }, - { code:0xF9F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9F9 - ,simpleLowerCaseMapping:0xF9F9 - ,simpleTitleCaseMapping:0xF9F9 - }, - { code:0xF9FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FA - ,simpleLowerCaseMapping:0xF9FA - ,simpleTitleCaseMapping:0xF9FA - }, - { code:0xF9FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FB - ,simpleLowerCaseMapping:0xF9FB - ,simpleTitleCaseMapping:0xF9FB - }, - { code:0xF9FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FC - ,simpleLowerCaseMapping:0xF9FC - ,simpleTitleCaseMapping:0xF9FC - }, - { code:0xF9FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FD - ,simpleLowerCaseMapping:0xF9FD - ,simpleTitleCaseMapping:0xF9FD - }, - { code:0xF9FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FE - ,simpleLowerCaseMapping:0xF9FE - ,simpleTitleCaseMapping:0xF9FE - }, - { code:0xF9FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xF9FF - ,simpleLowerCaseMapping:0xF9FF - ,simpleTitleCaseMapping:0xF9FF - }, - { code:0xFA00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA00 - ,simpleLowerCaseMapping:0xFA00 - ,simpleTitleCaseMapping:0xFA00 - }, - { code:0xFA01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA01 - ,simpleLowerCaseMapping:0xFA01 - ,simpleTitleCaseMapping:0xFA01 - }, - { code:0xFA02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA02 - ,simpleLowerCaseMapping:0xFA02 - ,simpleTitleCaseMapping:0xFA02 - }, - { code:0xFA03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA03 - ,simpleLowerCaseMapping:0xFA03 - ,simpleTitleCaseMapping:0xFA03 - }, - { code:0xFA04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA04 - ,simpleLowerCaseMapping:0xFA04 - ,simpleTitleCaseMapping:0xFA04 - }, - { code:0xFA05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA05 - ,simpleLowerCaseMapping:0xFA05 - ,simpleTitleCaseMapping:0xFA05 - }, - { code:0xFA06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA06 - ,simpleLowerCaseMapping:0xFA06 - ,simpleTitleCaseMapping:0xFA06 - }, - { code:0xFA07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA07 - ,simpleLowerCaseMapping:0xFA07 - ,simpleTitleCaseMapping:0xFA07 - }, - { code:0xFA08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA08 - ,simpleLowerCaseMapping:0xFA08 - ,simpleTitleCaseMapping:0xFA08 - }, - { code:0xFA09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA09 - ,simpleLowerCaseMapping:0xFA09 - ,simpleTitleCaseMapping:0xFA09 - }, - { code:0xFA0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0A - ,simpleLowerCaseMapping:0xFA0A - ,simpleTitleCaseMapping:0xFA0A - }, - { code:0xFA0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0B - ,simpleLowerCaseMapping:0xFA0B - ,simpleTitleCaseMapping:0xFA0B - }, - { code:0xFA0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0C - ,simpleLowerCaseMapping:0xFA0C - ,simpleTitleCaseMapping:0xFA0C - }, - { code:0xFA0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0D - ,simpleLowerCaseMapping:0xFA0D - ,simpleTitleCaseMapping:0xFA0D - }, - { code:0xFA0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0E - ,simpleLowerCaseMapping:0xFA0E - ,simpleTitleCaseMapping:0xFA0E - }, - { code:0xFA0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA0F - ,simpleLowerCaseMapping:0xFA0F - ,simpleTitleCaseMapping:0xFA0F - }, - { code:0xFA10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA10 - ,simpleLowerCaseMapping:0xFA10 - ,simpleTitleCaseMapping:0xFA10 - }, - { code:0xFA11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA11 - ,simpleLowerCaseMapping:0xFA11 - ,simpleTitleCaseMapping:0xFA11 - }, - { code:0xFA12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA12 - ,simpleLowerCaseMapping:0xFA12 - ,simpleTitleCaseMapping:0xFA12 - }, - { code:0xFA13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA13 - ,simpleLowerCaseMapping:0xFA13 - ,simpleTitleCaseMapping:0xFA13 - }, - { code:0xFA14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA14 - ,simpleLowerCaseMapping:0xFA14 - ,simpleTitleCaseMapping:0xFA14 - }, - { code:0xFA15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA15 - ,simpleLowerCaseMapping:0xFA15 - ,simpleTitleCaseMapping:0xFA15 - }, - { code:0xFA16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA16 - ,simpleLowerCaseMapping:0xFA16 - ,simpleTitleCaseMapping:0xFA16 - }, - { code:0xFA17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA17 - ,simpleLowerCaseMapping:0xFA17 - ,simpleTitleCaseMapping:0xFA17 - }, - { code:0xFA18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA18 - ,simpleLowerCaseMapping:0xFA18 - ,simpleTitleCaseMapping:0xFA18 - }, - { code:0xFA19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA19 - ,simpleLowerCaseMapping:0xFA19 - ,simpleTitleCaseMapping:0xFA19 - }, - { code:0xFA1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1A - ,simpleLowerCaseMapping:0xFA1A - ,simpleTitleCaseMapping:0xFA1A - }, - { code:0xFA1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1B - ,simpleLowerCaseMapping:0xFA1B - ,simpleTitleCaseMapping:0xFA1B - }, - { code:0xFA1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1C - ,simpleLowerCaseMapping:0xFA1C - ,simpleTitleCaseMapping:0xFA1C - }, - { code:0xFA1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1D - ,simpleLowerCaseMapping:0xFA1D - ,simpleTitleCaseMapping:0xFA1D - }, - { code:0xFA1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1E - ,simpleLowerCaseMapping:0xFA1E - ,simpleTitleCaseMapping:0xFA1E - }, - { code:0xFA1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA1F - ,simpleLowerCaseMapping:0xFA1F - ,simpleTitleCaseMapping:0xFA1F - }, - { code:0xFA20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA20 - ,simpleLowerCaseMapping:0xFA20 - ,simpleTitleCaseMapping:0xFA20 - }, - { code:0xFA21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA21 - ,simpleLowerCaseMapping:0xFA21 - ,simpleTitleCaseMapping:0xFA21 - }, - { code:0xFA22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA22 - ,simpleLowerCaseMapping:0xFA22 - ,simpleTitleCaseMapping:0xFA22 - }, - { code:0xFA23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA23 - ,simpleLowerCaseMapping:0xFA23 - ,simpleTitleCaseMapping:0xFA23 - }, - { code:0xFA24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA24 - ,simpleLowerCaseMapping:0xFA24 - ,simpleTitleCaseMapping:0xFA24 - }, - { code:0xFA25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA25 - ,simpleLowerCaseMapping:0xFA25 - ,simpleTitleCaseMapping:0xFA25 - }, - { code:0xFA26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA26 - ,simpleLowerCaseMapping:0xFA26 - ,simpleTitleCaseMapping:0xFA26 - }, - { code:0xFA27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA27 - ,simpleLowerCaseMapping:0xFA27 - ,simpleTitleCaseMapping:0xFA27 - }, - { code:0xFA28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA28 - ,simpleLowerCaseMapping:0xFA28 - ,simpleTitleCaseMapping:0xFA28 - }, - { code:0xFA29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA29 - ,simpleLowerCaseMapping:0xFA29 - ,simpleTitleCaseMapping:0xFA29 - }, - { code:0xFA2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA2A - ,simpleLowerCaseMapping:0xFA2A - ,simpleTitleCaseMapping:0xFA2A - }, - { code:0xFA2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA2B - ,simpleLowerCaseMapping:0xFA2B - ,simpleTitleCaseMapping:0xFA2B - }, - { code:0xFA2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA2C - ,simpleLowerCaseMapping:0xFA2C - ,simpleTitleCaseMapping:0xFA2C - }, - { code:0xFA2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA2D - ,simpleLowerCaseMapping:0xFA2D - ,simpleTitleCaseMapping:0xFA2D - }, - { code:0xFA30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA30 - ,simpleLowerCaseMapping:0xFA30 - ,simpleTitleCaseMapping:0xFA30 - }, - { code:0xFA31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA31 - ,simpleLowerCaseMapping:0xFA31 - ,simpleTitleCaseMapping:0xFA31 - }, - { code:0xFA32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA32 - ,simpleLowerCaseMapping:0xFA32 - ,simpleTitleCaseMapping:0xFA32 - }, - { code:0xFA33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA33 - ,simpleLowerCaseMapping:0xFA33 - ,simpleTitleCaseMapping:0xFA33 - }, - { code:0xFA34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA34 - ,simpleLowerCaseMapping:0xFA34 - ,simpleTitleCaseMapping:0xFA34 - }, - { code:0xFA35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA35 - ,simpleLowerCaseMapping:0xFA35 - ,simpleTitleCaseMapping:0xFA35 - }, - { code:0xFA36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA36 - ,simpleLowerCaseMapping:0xFA36 - ,simpleTitleCaseMapping:0xFA36 - }, - { code:0xFA37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA37 - ,simpleLowerCaseMapping:0xFA37 - ,simpleTitleCaseMapping:0xFA37 - }, - { code:0xFA38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA38 - ,simpleLowerCaseMapping:0xFA38 - ,simpleTitleCaseMapping:0xFA38 - }, - { code:0xFA39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA39 - ,simpleLowerCaseMapping:0xFA39 - ,simpleTitleCaseMapping:0xFA39 - }, - { code:0xFA3A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3A - ,simpleLowerCaseMapping:0xFA3A - ,simpleTitleCaseMapping:0xFA3A - }, - { code:0xFA3B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3B - ,simpleLowerCaseMapping:0xFA3B - ,simpleTitleCaseMapping:0xFA3B - }, - { code:0xFA3C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3C - ,simpleLowerCaseMapping:0xFA3C - ,simpleTitleCaseMapping:0xFA3C - }, - { code:0xFA3D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3D - ,simpleLowerCaseMapping:0xFA3D - ,simpleTitleCaseMapping:0xFA3D - }, - { code:0xFA3E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3E - ,simpleLowerCaseMapping:0xFA3E - ,simpleTitleCaseMapping:0xFA3E - }, - { code:0xFA3F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA3F - ,simpleLowerCaseMapping:0xFA3F - ,simpleTitleCaseMapping:0xFA3F - }, - { code:0xFA40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA40 - ,simpleLowerCaseMapping:0xFA40 - ,simpleTitleCaseMapping:0xFA40 - }, - { code:0xFA41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA41 - ,simpleLowerCaseMapping:0xFA41 - ,simpleTitleCaseMapping:0xFA41 - }, - { code:0xFA42 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA42 - ,simpleLowerCaseMapping:0xFA42 - ,simpleTitleCaseMapping:0xFA42 - }, - { code:0xFA43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA43 - ,simpleLowerCaseMapping:0xFA43 - ,simpleTitleCaseMapping:0xFA43 - }, - { code:0xFA44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA44 - ,simpleLowerCaseMapping:0xFA44 - ,simpleTitleCaseMapping:0xFA44 - }, - { code:0xFA45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA45 - ,simpleLowerCaseMapping:0xFA45 - ,simpleTitleCaseMapping:0xFA45 - }, - { code:0xFA46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA46 - ,simpleLowerCaseMapping:0xFA46 - ,simpleTitleCaseMapping:0xFA46 - }, - { code:0xFA47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA47 - ,simpleLowerCaseMapping:0xFA47 - ,simpleTitleCaseMapping:0xFA47 - }, - { code:0xFA48 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA48 - ,simpleLowerCaseMapping:0xFA48 - ,simpleTitleCaseMapping:0xFA48 - }, - { code:0xFA49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA49 - ,simpleLowerCaseMapping:0xFA49 - ,simpleTitleCaseMapping:0xFA49 - }, - { code:0xFA4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4A - ,simpleLowerCaseMapping:0xFA4A - ,simpleTitleCaseMapping:0xFA4A - }, - { code:0xFA4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4B - ,simpleLowerCaseMapping:0xFA4B - ,simpleTitleCaseMapping:0xFA4B - }, - { code:0xFA4C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4C - ,simpleLowerCaseMapping:0xFA4C - ,simpleTitleCaseMapping:0xFA4C - }, - { code:0xFA4D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4D - ,simpleLowerCaseMapping:0xFA4D - ,simpleTitleCaseMapping:0xFA4D - }, - { code:0xFA4E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4E - ,simpleLowerCaseMapping:0xFA4E - ,simpleTitleCaseMapping:0xFA4E - }, - { code:0xFA4F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA4F - ,simpleLowerCaseMapping:0xFA4F - ,simpleTitleCaseMapping:0xFA4F - }, - { code:0xFA50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA50 - ,simpleLowerCaseMapping:0xFA50 - ,simpleTitleCaseMapping:0xFA50 - }, - { code:0xFA51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA51 - ,simpleLowerCaseMapping:0xFA51 - ,simpleTitleCaseMapping:0xFA51 - }, - { code:0xFA52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA52 - ,simpleLowerCaseMapping:0xFA52 - ,simpleTitleCaseMapping:0xFA52 - }, - { code:0xFA53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA53 - ,simpleLowerCaseMapping:0xFA53 - ,simpleTitleCaseMapping:0xFA53 - }, - { code:0xFA54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA54 - ,simpleLowerCaseMapping:0xFA54 - ,simpleTitleCaseMapping:0xFA54 - }, - { code:0xFA55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA55 - ,simpleLowerCaseMapping:0xFA55 - ,simpleTitleCaseMapping:0xFA55 - }, - { code:0xFA56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA56 - ,simpleLowerCaseMapping:0xFA56 - ,simpleTitleCaseMapping:0xFA56 - }, - { code:0xFA57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA57 - ,simpleLowerCaseMapping:0xFA57 - ,simpleTitleCaseMapping:0xFA57 - }, - { code:0xFA58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA58 - ,simpleLowerCaseMapping:0xFA58 - ,simpleTitleCaseMapping:0xFA58 - }, - { code:0xFA59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA59 - ,simpleLowerCaseMapping:0xFA59 - ,simpleTitleCaseMapping:0xFA59 - }, - { code:0xFA5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5A - ,simpleLowerCaseMapping:0xFA5A - ,simpleTitleCaseMapping:0xFA5A - }, - { code:0xFA5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5B - ,simpleLowerCaseMapping:0xFA5B - ,simpleTitleCaseMapping:0xFA5B - }, - { code:0xFA5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5C - ,simpleLowerCaseMapping:0xFA5C - ,simpleTitleCaseMapping:0xFA5C - }, - { code:0xFA5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5D - ,simpleLowerCaseMapping:0xFA5D - ,simpleTitleCaseMapping:0xFA5D - }, - { code:0xFA5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5E - ,simpleLowerCaseMapping:0xFA5E - ,simpleTitleCaseMapping:0xFA5E - }, - { code:0xFA5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA5F - ,simpleLowerCaseMapping:0xFA5F - ,simpleTitleCaseMapping:0xFA5F - }, - { code:0xFA60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA60 - ,simpleLowerCaseMapping:0xFA60 - ,simpleTitleCaseMapping:0xFA60 - }, - { code:0xFA61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA61 - ,simpleLowerCaseMapping:0xFA61 - ,simpleTitleCaseMapping:0xFA61 - }, - { code:0xFA62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA62 - ,simpleLowerCaseMapping:0xFA62 - ,simpleTitleCaseMapping:0xFA62 - }, - { code:0xFA63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA63 - ,simpleLowerCaseMapping:0xFA63 - ,simpleTitleCaseMapping:0xFA63 - }, - { code:0xFA64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA64 - ,simpleLowerCaseMapping:0xFA64 - ,simpleTitleCaseMapping:0xFA64 - }, - { code:0xFA65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA65 - ,simpleLowerCaseMapping:0xFA65 - ,simpleTitleCaseMapping:0xFA65 - }, - { code:0xFA66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA66 - ,simpleLowerCaseMapping:0xFA66 - ,simpleTitleCaseMapping:0xFA66 - }, - { code:0xFA67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA67 - ,simpleLowerCaseMapping:0xFA67 - ,simpleTitleCaseMapping:0xFA67 - }, - { code:0xFA68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA68 - ,simpleLowerCaseMapping:0xFA68 - ,simpleTitleCaseMapping:0xFA68 - }, - { code:0xFA69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA69 - ,simpleLowerCaseMapping:0xFA69 - ,simpleTitleCaseMapping:0xFA69 - }, - { code:0xFA6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA6A - ,simpleLowerCaseMapping:0xFA6A - ,simpleTitleCaseMapping:0xFA6A - }, - { code:0xFA70 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA70 - ,simpleLowerCaseMapping:0xFA70 - ,simpleTitleCaseMapping:0xFA70 - }, - { code:0xFA71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA71 - ,simpleLowerCaseMapping:0xFA71 - ,simpleTitleCaseMapping:0xFA71 - }, - { code:0xFA72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA72 - ,simpleLowerCaseMapping:0xFA72 - ,simpleTitleCaseMapping:0xFA72 - }, - { code:0xFA73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA73 - ,simpleLowerCaseMapping:0xFA73 - ,simpleTitleCaseMapping:0xFA73 - }, - { code:0xFA74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA74 - ,simpleLowerCaseMapping:0xFA74 - ,simpleTitleCaseMapping:0xFA74 - }, - { code:0xFA75 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA75 - ,simpleLowerCaseMapping:0xFA75 - ,simpleTitleCaseMapping:0xFA75 - }, - { code:0xFA76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA76 - ,simpleLowerCaseMapping:0xFA76 - ,simpleTitleCaseMapping:0xFA76 - }, - { code:0xFA77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA77 - ,simpleLowerCaseMapping:0xFA77 - ,simpleTitleCaseMapping:0xFA77 - }, - { code:0xFA78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA78 - ,simpleLowerCaseMapping:0xFA78 - ,simpleTitleCaseMapping:0xFA78 - }, - { code:0xFA79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA79 - ,simpleLowerCaseMapping:0xFA79 - ,simpleTitleCaseMapping:0xFA79 - }, - { code:0xFA7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7A - ,simpleLowerCaseMapping:0xFA7A - ,simpleTitleCaseMapping:0xFA7A - }, - { code:0xFA7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7B - ,simpleLowerCaseMapping:0xFA7B - ,simpleTitleCaseMapping:0xFA7B - }, - { code:0xFA7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7C - ,simpleLowerCaseMapping:0xFA7C - ,simpleTitleCaseMapping:0xFA7C - }, - { code:0xFA7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7D - ,simpleLowerCaseMapping:0xFA7D - ,simpleTitleCaseMapping:0xFA7D - }, - { code:0xFA7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7E - ,simpleLowerCaseMapping:0xFA7E - ,simpleTitleCaseMapping:0xFA7E - }, - { code:0xFA7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA7F - ,simpleLowerCaseMapping:0xFA7F - ,simpleTitleCaseMapping:0xFA7F - }, - { code:0xFA80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA80 - ,simpleLowerCaseMapping:0xFA80 - ,simpleTitleCaseMapping:0xFA80 - }, - { code:0xFA81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA81 - ,simpleLowerCaseMapping:0xFA81 - ,simpleTitleCaseMapping:0xFA81 - }, - { code:0xFA82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA82 - ,simpleLowerCaseMapping:0xFA82 - ,simpleTitleCaseMapping:0xFA82 - }, - { code:0xFA83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA83 - ,simpleLowerCaseMapping:0xFA83 - ,simpleTitleCaseMapping:0xFA83 - }, - { code:0xFA84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA84 - ,simpleLowerCaseMapping:0xFA84 - ,simpleTitleCaseMapping:0xFA84 - }, - { code:0xFA85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA85 - ,simpleLowerCaseMapping:0xFA85 - ,simpleTitleCaseMapping:0xFA85 - }, - { code:0xFA86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA86 - ,simpleLowerCaseMapping:0xFA86 - ,simpleTitleCaseMapping:0xFA86 - }, - { code:0xFA87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA87 - ,simpleLowerCaseMapping:0xFA87 - ,simpleTitleCaseMapping:0xFA87 - }, - { code:0xFA88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA88 - ,simpleLowerCaseMapping:0xFA88 - ,simpleTitleCaseMapping:0xFA88 - }, - { code:0xFA89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA89 - ,simpleLowerCaseMapping:0xFA89 - ,simpleTitleCaseMapping:0xFA89 - }, - { code:0xFA8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8A - ,simpleLowerCaseMapping:0xFA8A - ,simpleTitleCaseMapping:0xFA8A - }, - { code:0xFA8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8B - ,simpleLowerCaseMapping:0xFA8B - ,simpleTitleCaseMapping:0xFA8B - }, - { code:0xFA8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8C - ,simpleLowerCaseMapping:0xFA8C - ,simpleTitleCaseMapping:0xFA8C - }, - { code:0xFA8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8D - ,simpleLowerCaseMapping:0xFA8D - ,simpleTitleCaseMapping:0xFA8D - }, - { code:0xFA8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8E - ,simpleLowerCaseMapping:0xFA8E - ,simpleTitleCaseMapping:0xFA8E - }, - { code:0xFA8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA8F - ,simpleLowerCaseMapping:0xFA8F - ,simpleTitleCaseMapping:0xFA8F - }, - { code:0xFA90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA90 - ,simpleLowerCaseMapping:0xFA90 - ,simpleTitleCaseMapping:0xFA90 - }, - { code:0xFA91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA91 - ,simpleLowerCaseMapping:0xFA91 - ,simpleTitleCaseMapping:0xFA91 - }, - { code:0xFA92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA92 - ,simpleLowerCaseMapping:0xFA92 - ,simpleTitleCaseMapping:0xFA92 - }, - { code:0xFA93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA93 - ,simpleLowerCaseMapping:0xFA93 - ,simpleTitleCaseMapping:0xFA93 - }, - { code:0xFA94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA94 - ,simpleLowerCaseMapping:0xFA94 - ,simpleTitleCaseMapping:0xFA94 - }, - { code:0xFA95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA95 - ,simpleLowerCaseMapping:0xFA95 - ,simpleTitleCaseMapping:0xFA95 - }, - { code:0xFA96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA96 - ,simpleLowerCaseMapping:0xFA96 - ,simpleTitleCaseMapping:0xFA96 - }, - { code:0xFA97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA97 - ,simpleLowerCaseMapping:0xFA97 - ,simpleTitleCaseMapping:0xFA97 - }, - { code:0xFA98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA98 - ,simpleLowerCaseMapping:0xFA98 - ,simpleTitleCaseMapping:0xFA98 - }, - { code:0xFA99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA99 - ,simpleLowerCaseMapping:0xFA99 - ,simpleTitleCaseMapping:0xFA99 - }, - { code:0xFA9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9A - ,simpleLowerCaseMapping:0xFA9A - ,simpleTitleCaseMapping:0xFA9A - }, - { code:0xFA9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9B - ,simpleLowerCaseMapping:0xFA9B - ,simpleTitleCaseMapping:0xFA9B - }, - { code:0xFA9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9C - ,simpleLowerCaseMapping:0xFA9C - ,simpleTitleCaseMapping:0xFA9C - }, - { code:0xFA9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9D - ,simpleLowerCaseMapping:0xFA9D - ,simpleTitleCaseMapping:0xFA9D - }, - { code:0xFA9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9E - ,simpleLowerCaseMapping:0xFA9E - ,simpleTitleCaseMapping:0xFA9E - }, - { code:0xFA9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFA9F - ,simpleLowerCaseMapping:0xFA9F - ,simpleTitleCaseMapping:0xFA9F - }, - { code:0xFAA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA0 - ,simpleLowerCaseMapping:0xFAA0 - ,simpleTitleCaseMapping:0xFAA0 - }, - { code:0xFAA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA1 - ,simpleLowerCaseMapping:0xFAA1 - ,simpleTitleCaseMapping:0xFAA1 - }, - { code:0xFAA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA2 - ,simpleLowerCaseMapping:0xFAA2 - ,simpleTitleCaseMapping:0xFAA2 - }, - { code:0xFAA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA3 - ,simpleLowerCaseMapping:0xFAA3 - ,simpleTitleCaseMapping:0xFAA3 - }, - { code:0xFAA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA4 - ,simpleLowerCaseMapping:0xFAA4 - ,simpleTitleCaseMapping:0xFAA4 - }, - { code:0xFAA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA5 - ,simpleLowerCaseMapping:0xFAA5 - ,simpleTitleCaseMapping:0xFAA5 - }, - { code:0xFAA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA6 - ,simpleLowerCaseMapping:0xFAA6 - ,simpleTitleCaseMapping:0xFAA6 - }, - { code:0xFAA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA7 - ,simpleLowerCaseMapping:0xFAA7 - ,simpleTitleCaseMapping:0xFAA7 - }, - { code:0xFAA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA8 - ,simpleLowerCaseMapping:0xFAA8 - ,simpleTitleCaseMapping:0xFAA8 - }, - { code:0xFAA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAA9 - ,simpleLowerCaseMapping:0xFAA9 - ,simpleTitleCaseMapping:0xFAA9 - }, - { code:0xFAAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAA - ,simpleLowerCaseMapping:0xFAAA - ,simpleTitleCaseMapping:0xFAAA - }, - { code:0xFAAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAB - ,simpleLowerCaseMapping:0xFAAB - ,simpleTitleCaseMapping:0xFAAB - }, - { code:0xFAAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAC - ,simpleLowerCaseMapping:0xFAAC - ,simpleTitleCaseMapping:0xFAAC - }, - { code:0xFAAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAD - ,simpleLowerCaseMapping:0xFAAD - ,simpleTitleCaseMapping:0xFAAD - }, - { code:0xFAAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAE - ,simpleLowerCaseMapping:0xFAAE - ,simpleTitleCaseMapping:0xFAAE - }, - { code:0xFAAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAAF - ,simpleLowerCaseMapping:0xFAAF - ,simpleTitleCaseMapping:0xFAAF - }, - { code:0xFAB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB0 - ,simpleLowerCaseMapping:0xFAB0 - ,simpleTitleCaseMapping:0xFAB0 - }, - { code:0xFAB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB1 - ,simpleLowerCaseMapping:0xFAB1 - ,simpleTitleCaseMapping:0xFAB1 - }, - { code:0xFAB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB2 - ,simpleLowerCaseMapping:0xFAB2 - ,simpleTitleCaseMapping:0xFAB2 - }, - { code:0xFAB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB3 - ,simpleLowerCaseMapping:0xFAB3 - ,simpleTitleCaseMapping:0xFAB3 - }, - { code:0xFAB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB4 - ,simpleLowerCaseMapping:0xFAB4 - ,simpleTitleCaseMapping:0xFAB4 - }, - { code:0xFAB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB5 - ,simpleLowerCaseMapping:0xFAB5 - ,simpleTitleCaseMapping:0xFAB5 - }, - { code:0xFAB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB6 - ,simpleLowerCaseMapping:0xFAB6 - ,simpleTitleCaseMapping:0xFAB6 - }, - { code:0xFAB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB7 - ,simpleLowerCaseMapping:0xFAB7 - ,simpleTitleCaseMapping:0xFAB7 - }, - { code:0xFAB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB8 - ,simpleLowerCaseMapping:0xFAB8 - ,simpleTitleCaseMapping:0xFAB8 - }, - { code:0xFAB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAB9 - ,simpleLowerCaseMapping:0xFAB9 - ,simpleTitleCaseMapping:0xFAB9 - }, - { code:0xFABA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABA - ,simpleLowerCaseMapping:0xFABA - ,simpleTitleCaseMapping:0xFABA - }, - { code:0xFABB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABB - ,simpleLowerCaseMapping:0xFABB - ,simpleTitleCaseMapping:0xFABB - }, - { code:0xFABC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABC - ,simpleLowerCaseMapping:0xFABC - ,simpleTitleCaseMapping:0xFABC - }, - { code:0xFABD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABD - ,simpleLowerCaseMapping:0xFABD - ,simpleTitleCaseMapping:0xFABD - }, - { code:0xFABE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABE - ,simpleLowerCaseMapping:0xFABE - ,simpleTitleCaseMapping:0xFABE - }, - { code:0xFABF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFABF - ,simpleLowerCaseMapping:0xFABF - ,simpleTitleCaseMapping:0xFABF - }, - { code:0xFAC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC0 - ,simpleLowerCaseMapping:0xFAC0 - ,simpleTitleCaseMapping:0xFAC0 - }, - { code:0xFAC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC1 - ,simpleLowerCaseMapping:0xFAC1 - ,simpleTitleCaseMapping:0xFAC1 - }, - { code:0xFAC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC2 - ,simpleLowerCaseMapping:0xFAC2 - ,simpleTitleCaseMapping:0xFAC2 - }, - { code:0xFAC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC3 - ,simpleLowerCaseMapping:0xFAC3 - ,simpleTitleCaseMapping:0xFAC3 - }, - { code:0xFAC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC4 - ,simpleLowerCaseMapping:0xFAC4 - ,simpleTitleCaseMapping:0xFAC4 - }, - { code:0xFAC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC5 - ,simpleLowerCaseMapping:0xFAC5 - ,simpleTitleCaseMapping:0xFAC5 - }, - { code:0xFAC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC6 - ,simpleLowerCaseMapping:0xFAC6 - ,simpleTitleCaseMapping:0xFAC6 - }, - { code:0xFAC7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC7 - ,simpleLowerCaseMapping:0xFAC7 - ,simpleTitleCaseMapping:0xFAC7 - }, - { code:0xFAC8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC8 - ,simpleLowerCaseMapping:0xFAC8 - ,simpleTitleCaseMapping:0xFAC8 - }, - { code:0xFAC9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAC9 - ,simpleLowerCaseMapping:0xFAC9 - ,simpleTitleCaseMapping:0xFAC9 - }, - { code:0xFACA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACA - ,simpleLowerCaseMapping:0xFACA - ,simpleTitleCaseMapping:0xFACA - }, - { code:0xFACB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACB - ,simpleLowerCaseMapping:0xFACB - ,simpleTitleCaseMapping:0xFACB - }, - { code:0xFACC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACC - ,simpleLowerCaseMapping:0xFACC - ,simpleTitleCaseMapping:0xFACC - }, - { code:0xFACD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACD - ,simpleLowerCaseMapping:0xFACD - ,simpleTitleCaseMapping:0xFACD - }, - { code:0xFACE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACE - ,simpleLowerCaseMapping:0xFACE - ,simpleTitleCaseMapping:0xFACE - }, - { code:0xFACF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFACF - ,simpleLowerCaseMapping:0xFACF - ,simpleTitleCaseMapping:0xFACF - }, - { code:0xFAD0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD0 - ,simpleLowerCaseMapping:0xFAD0 - ,simpleTitleCaseMapping:0xFAD0 - }, - { code:0xFAD1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD1 - ,simpleLowerCaseMapping:0xFAD1 - ,simpleTitleCaseMapping:0xFAD1 - }, - { code:0xFAD2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD2 - ,simpleLowerCaseMapping:0xFAD2 - ,simpleTitleCaseMapping:0xFAD2 - }, - { code:0xFAD3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD3 - ,simpleLowerCaseMapping:0xFAD3 - ,simpleTitleCaseMapping:0xFAD3 - }, - { code:0xFAD4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD4 - ,simpleLowerCaseMapping:0xFAD4 - ,simpleTitleCaseMapping:0xFAD4 - }, - { code:0xFAD5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD5 - ,simpleLowerCaseMapping:0xFAD5 - ,simpleTitleCaseMapping:0xFAD5 - }, - { code:0xFAD6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD6 - ,simpleLowerCaseMapping:0xFAD6 - ,simpleTitleCaseMapping:0xFAD6 - }, - { code:0xFAD7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD7 - ,simpleLowerCaseMapping:0xFAD7 - ,simpleTitleCaseMapping:0xFAD7 - }, - { code:0xFAD8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD8 - ,simpleLowerCaseMapping:0xFAD8 - ,simpleTitleCaseMapping:0xFAD8 - }, - { code:0xFAD9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFAD9 - ,simpleLowerCaseMapping:0xFAD9 - ,simpleTitleCaseMapping:0xFAD9 - }, - { code:0xFB00 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB00 - ,simpleLowerCaseMapping:0xFB00 - ,simpleTitleCaseMapping:0xFB00 - }, - { code:0xFB01 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB01 - ,simpleLowerCaseMapping:0xFB01 - ,simpleTitleCaseMapping:0xFB01 - }, - { code:0xFB02 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB02 - ,simpleLowerCaseMapping:0xFB02 - ,simpleTitleCaseMapping:0xFB02 - }, - { code:0xFB03 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB03 - ,simpleLowerCaseMapping:0xFB03 - ,simpleTitleCaseMapping:0xFB03 - }, - { code:0xFB04 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB04 - ,simpleLowerCaseMapping:0xFB04 - ,simpleTitleCaseMapping:0xFB04 - }, - { code:0xFB05 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB05 - ,simpleLowerCaseMapping:0xFB05 - ,simpleTitleCaseMapping:0xFB05 - }, - { code:0xFB06 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB06 - ,simpleLowerCaseMapping:0xFB06 - ,simpleTitleCaseMapping:0xFB06 - }, - { code:0xFB13 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB13 - ,simpleLowerCaseMapping:0xFB13 - ,simpleTitleCaseMapping:0xFB13 - }, - { code:0xFB14 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB14 - ,simpleLowerCaseMapping:0xFB14 - ,simpleTitleCaseMapping:0xFB14 - }, - { code:0xFB15 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB15 - ,simpleLowerCaseMapping:0xFB15 - ,simpleTitleCaseMapping:0xFB15 - }, - { code:0xFB16 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB16 - ,simpleLowerCaseMapping:0xFB16 - ,simpleTitleCaseMapping:0xFB16 - }, - { code:0xFB17 - ,generalCategory:UnicodeData.GeneralCategory.Ll | UnicodeData.GeneralCategory.SpecialMapping - ,simpleUpperCaseMapping:0xFB17 - ,simpleLowerCaseMapping:0xFB17 - ,simpleTitleCaseMapping:0xFB17 - }, - { code:0xFB1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB1D - ,simpleLowerCaseMapping:0xFB1D - ,simpleTitleCaseMapping:0xFB1D - }, - { code:0xFB1E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFB1E - ,simpleLowerCaseMapping:0xFB1E - ,simpleTitleCaseMapping:0xFB1E - }, - { code:0xFB1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB1F - ,simpleLowerCaseMapping:0xFB1F - ,simpleTitleCaseMapping:0xFB1F - }, - { code:0xFB20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB20 - ,simpleLowerCaseMapping:0xFB20 - ,simpleTitleCaseMapping:0xFB20 - }, - { code:0xFB21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB21 - ,simpleLowerCaseMapping:0xFB21 - ,simpleTitleCaseMapping:0xFB21 - }, - { code:0xFB22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB22 - ,simpleLowerCaseMapping:0xFB22 - ,simpleTitleCaseMapping:0xFB22 - }, - { code:0xFB23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB23 - ,simpleLowerCaseMapping:0xFB23 - ,simpleTitleCaseMapping:0xFB23 - }, - { code:0xFB24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB24 - ,simpleLowerCaseMapping:0xFB24 - ,simpleTitleCaseMapping:0xFB24 - }, - { code:0xFB25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB25 - ,simpleLowerCaseMapping:0xFB25 - ,simpleTitleCaseMapping:0xFB25 - }, - { code:0xFB26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB26 - ,simpleLowerCaseMapping:0xFB26 - ,simpleTitleCaseMapping:0xFB26 - }, - { code:0xFB27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB27 - ,simpleLowerCaseMapping:0xFB27 - ,simpleTitleCaseMapping:0xFB27 - }, - { code:0xFB28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB28 - ,simpleLowerCaseMapping:0xFB28 - ,simpleTitleCaseMapping:0xFB28 - }, - { code:0xFB29 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFB29 - ,simpleLowerCaseMapping:0xFB29 - ,simpleTitleCaseMapping:0xFB29 - }, - { code:0xFB2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2A - ,simpleLowerCaseMapping:0xFB2A - ,simpleTitleCaseMapping:0xFB2A - }, - { code:0xFB2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2B - ,simpleLowerCaseMapping:0xFB2B - ,simpleTitleCaseMapping:0xFB2B - }, - { code:0xFB2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2C - ,simpleLowerCaseMapping:0xFB2C - ,simpleTitleCaseMapping:0xFB2C - }, - { code:0xFB2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2D - ,simpleLowerCaseMapping:0xFB2D - ,simpleTitleCaseMapping:0xFB2D - }, - { code:0xFB2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2E - ,simpleLowerCaseMapping:0xFB2E - ,simpleTitleCaseMapping:0xFB2E - }, - { code:0xFB2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB2F - ,simpleLowerCaseMapping:0xFB2F - ,simpleTitleCaseMapping:0xFB2F - }, - { code:0xFB30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB30 - ,simpleLowerCaseMapping:0xFB30 - ,simpleTitleCaseMapping:0xFB30 - }, - { code:0xFB31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB31 - ,simpleLowerCaseMapping:0xFB31 - ,simpleTitleCaseMapping:0xFB31 - }, - { code:0xFB32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB32 - ,simpleLowerCaseMapping:0xFB32 - ,simpleTitleCaseMapping:0xFB32 - }, - { code:0xFB33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB33 - ,simpleLowerCaseMapping:0xFB33 - ,simpleTitleCaseMapping:0xFB33 - }, - { code:0xFB34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB34 - ,simpleLowerCaseMapping:0xFB34 - ,simpleTitleCaseMapping:0xFB34 - }, - { code:0xFB35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB35 - ,simpleLowerCaseMapping:0xFB35 - ,simpleTitleCaseMapping:0xFB35 - }, - { code:0xFB36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB36 - ,simpleLowerCaseMapping:0xFB36 - ,simpleTitleCaseMapping:0xFB36 - }, - { code:0xFB38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB38 - ,simpleLowerCaseMapping:0xFB38 - ,simpleTitleCaseMapping:0xFB38 - }, - { code:0xFB39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB39 - ,simpleLowerCaseMapping:0xFB39 - ,simpleTitleCaseMapping:0xFB39 - }, - { code:0xFB3A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB3A - ,simpleLowerCaseMapping:0xFB3A - ,simpleTitleCaseMapping:0xFB3A - }, - { code:0xFB3B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB3B - ,simpleLowerCaseMapping:0xFB3B - ,simpleTitleCaseMapping:0xFB3B - }, - { code:0xFB3C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB3C - ,simpleLowerCaseMapping:0xFB3C - ,simpleTitleCaseMapping:0xFB3C - }, - { code:0xFB3E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB3E - ,simpleLowerCaseMapping:0xFB3E - ,simpleTitleCaseMapping:0xFB3E - }, - { code:0xFB40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB40 - ,simpleLowerCaseMapping:0xFB40 - ,simpleTitleCaseMapping:0xFB40 - }, - { code:0xFB41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB41 - ,simpleLowerCaseMapping:0xFB41 - ,simpleTitleCaseMapping:0xFB41 - }, - { code:0xFB43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB43 - ,simpleLowerCaseMapping:0xFB43 - ,simpleTitleCaseMapping:0xFB43 - }, - { code:0xFB44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB44 - ,simpleLowerCaseMapping:0xFB44 - ,simpleTitleCaseMapping:0xFB44 - }, - { code:0xFB46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB46 - ,simpleLowerCaseMapping:0xFB46 - ,simpleTitleCaseMapping:0xFB46 - }, - { code:0xFB47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB47 - ,simpleLowerCaseMapping:0xFB47 - ,simpleTitleCaseMapping:0xFB47 - }, - { code:0xFB48 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB48 - ,simpleLowerCaseMapping:0xFB48 - ,simpleTitleCaseMapping:0xFB48 - }, - { code:0xFB49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB49 - ,simpleLowerCaseMapping:0xFB49 - ,simpleTitleCaseMapping:0xFB49 - }, - { code:0xFB4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4A - ,simpleLowerCaseMapping:0xFB4A - ,simpleTitleCaseMapping:0xFB4A - }, - { code:0xFB4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4B - ,simpleLowerCaseMapping:0xFB4B - ,simpleTitleCaseMapping:0xFB4B - }, - { code:0xFB4C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4C - ,simpleLowerCaseMapping:0xFB4C - ,simpleTitleCaseMapping:0xFB4C - }, - { code:0xFB4D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4D - ,simpleLowerCaseMapping:0xFB4D - ,simpleTitleCaseMapping:0xFB4D - }, - { code:0xFB4E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4E - ,simpleLowerCaseMapping:0xFB4E - ,simpleTitleCaseMapping:0xFB4E - }, - { code:0xFB4F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB4F - ,simpleLowerCaseMapping:0xFB4F - ,simpleTitleCaseMapping:0xFB4F - }, - { code:0xFB50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB50 - ,simpleLowerCaseMapping:0xFB50 - ,simpleTitleCaseMapping:0xFB50 - }, - { code:0xFB51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB51 - ,simpleLowerCaseMapping:0xFB51 - ,simpleTitleCaseMapping:0xFB51 - }, - { code:0xFB52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB52 - ,simpleLowerCaseMapping:0xFB52 - ,simpleTitleCaseMapping:0xFB52 - }, - { code:0xFB53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB53 - ,simpleLowerCaseMapping:0xFB53 - ,simpleTitleCaseMapping:0xFB53 - }, - { code:0xFB54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB54 - ,simpleLowerCaseMapping:0xFB54 - ,simpleTitleCaseMapping:0xFB54 - }, - { code:0xFB55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB55 - ,simpleLowerCaseMapping:0xFB55 - ,simpleTitleCaseMapping:0xFB55 - }, - { code:0xFB56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB56 - ,simpleLowerCaseMapping:0xFB56 - ,simpleTitleCaseMapping:0xFB56 - }, - { code:0xFB57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB57 - ,simpleLowerCaseMapping:0xFB57 - ,simpleTitleCaseMapping:0xFB57 - }, - { code:0xFB58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB58 - ,simpleLowerCaseMapping:0xFB58 - ,simpleTitleCaseMapping:0xFB58 - }, - { code:0xFB59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB59 - ,simpleLowerCaseMapping:0xFB59 - ,simpleTitleCaseMapping:0xFB59 - }, - { code:0xFB5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5A - ,simpleLowerCaseMapping:0xFB5A - ,simpleTitleCaseMapping:0xFB5A - }, - { code:0xFB5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5B - ,simpleLowerCaseMapping:0xFB5B - ,simpleTitleCaseMapping:0xFB5B - }, - { code:0xFB5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5C - ,simpleLowerCaseMapping:0xFB5C - ,simpleTitleCaseMapping:0xFB5C - }, - { code:0xFB5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5D - ,simpleLowerCaseMapping:0xFB5D - ,simpleTitleCaseMapping:0xFB5D - }, - { code:0xFB5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5E - ,simpleLowerCaseMapping:0xFB5E - ,simpleTitleCaseMapping:0xFB5E - }, - { code:0xFB5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB5F - ,simpleLowerCaseMapping:0xFB5F - ,simpleTitleCaseMapping:0xFB5F - }, - { code:0xFB60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB60 - ,simpleLowerCaseMapping:0xFB60 - ,simpleTitleCaseMapping:0xFB60 - }, - { code:0xFB61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB61 - ,simpleLowerCaseMapping:0xFB61 - ,simpleTitleCaseMapping:0xFB61 - }, - { code:0xFB62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB62 - ,simpleLowerCaseMapping:0xFB62 - ,simpleTitleCaseMapping:0xFB62 - }, - { code:0xFB63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB63 - ,simpleLowerCaseMapping:0xFB63 - ,simpleTitleCaseMapping:0xFB63 - }, - { code:0xFB64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB64 - ,simpleLowerCaseMapping:0xFB64 - ,simpleTitleCaseMapping:0xFB64 - }, - { code:0xFB65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB65 - ,simpleLowerCaseMapping:0xFB65 - ,simpleTitleCaseMapping:0xFB65 - }, - { code:0xFB66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB66 - ,simpleLowerCaseMapping:0xFB66 - ,simpleTitleCaseMapping:0xFB66 - }, - { code:0xFB67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB67 - ,simpleLowerCaseMapping:0xFB67 - ,simpleTitleCaseMapping:0xFB67 - }, - { code:0xFB68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB68 - ,simpleLowerCaseMapping:0xFB68 - ,simpleTitleCaseMapping:0xFB68 - }, - { code:0xFB69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB69 - ,simpleLowerCaseMapping:0xFB69 - ,simpleTitleCaseMapping:0xFB69 - }, - { code:0xFB6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6A - ,simpleLowerCaseMapping:0xFB6A - ,simpleTitleCaseMapping:0xFB6A - }, - { code:0xFB6B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6B - ,simpleLowerCaseMapping:0xFB6B - ,simpleTitleCaseMapping:0xFB6B - }, - { code:0xFB6C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6C - ,simpleLowerCaseMapping:0xFB6C - ,simpleTitleCaseMapping:0xFB6C - }, - { code:0xFB6D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6D - ,simpleLowerCaseMapping:0xFB6D - ,simpleTitleCaseMapping:0xFB6D - }, - { code:0xFB6E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6E - ,simpleLowerCaseMapping:0xFB6E - ,simpleTitleCaseMapping:0xFB6E - }, - { code:0xFB6F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB6F - ,simpleLowerCaseMapping:0xFB6F - ,simpleTitleCaseMapping:0xFB6F - }, - { code:0xFB70 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB70 - ,simpleLowerCaseMapping:0xFB70 - ,simpleTitleCaseMapping:0xFB70 - }, - { code:0xFB71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB71 - ,simpleLowerCaseMapping:0xFB71 - ,simpleTitleCaseMapping:0xFB71 - }, - { code:0xFB72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB72 - ,simpleLowerCaseMapping:0xFB72 - ,simpleTitleCaseMapping:0xFB72 - }, - { code:0xFB73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB73 - ,simpleLowerCaseMapping:0xFB73 - ,simpleTitleCaseMapping:0xFB73 - }, - { code:0xFB74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB74 - ,simpleLowerCaseMapping:0xFB74 - ,simpleTitleCaseMapping:0xFB74 - }, - { code:0xFB75 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB75 - ,simpleLowerCaseMapping:0xFB75 - ,simpleTitleCaseMapping:0xFB75 - }, - { code:0xFB76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB76 - ,simpleLowerCaseMapping:0xFB76 - ,simpleTitleCaseMapping:0xFB76 - }, - { code:0xFB77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB77 - ,simpleLowerCaseMapping:0xFB77 - ,simpleTitleCaseMapping:0xFB77 - }, - { code:0xFB78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB78 - ,simpleLowerCaseMapping:0xFB78 - ,simpleTitleCaseMapping:0xFB78 - }, - { code:0xFB79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB79 - ,simpleLowerCaseMapping:0xFB79 - ,simpleTitleCaseMapping:0xFB79 - }, - { code:0xFB7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7A - ,simpleLowerCaseMapping:0xFB7A - ,simpleTitleCaseMapping:0xFB7A - }, - { code:0xFB7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7B - ,simpleLowerCaseMapping:0xFB7B - ,simpleTitleCaseMapping:0xFB7B - }, - { code:0xFB7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7C - ,simpleLowerCaseMapping:0xFB7C - ,simpleTitleCaseMapping:0xFB7C - }, - { code:0xFB7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7D - ,simpleLowerCaseMapping:0xFB7D - ,simpleTitleCaseMapping:0xFB7D - }, - { code:0xFB7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7E - ,simpleLowerCaseMapping:0xFB7E - ,simpleTitleCaseMapping:0xFB7E - }, - { code:0xFB7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB7F - ,simpleLowerCaseMapping:0xFB7F - ,simpleTitleCaseMapping:0xFB7F - }, - { code:0xFB80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB80 - ,simpleLowerCaseMapping:0xFB80 - ,simpleTitleCaseMapping:0xFB80 - }, - { code:0xFB81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB81 - ,simpleLowerCaseMapping:0xFB81 - ,simpleTitleCaseMapping:0xFB81 - }, - { code:0xFB82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB82 - ,simpleLowerCaseMapping:0xFB82 - ,simpleTitleCaseMapping:0xFB82 - }, - { code:0xFB83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB83 - ,simpleLowerCaseMapping:0xFB83 - ,simpleTitleCaseMapping:0xFB83 - }, - { code:0xFB84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB84 - ,simpleLowerCaseMapping:0xFB84 - ,simpleTitleCaseMapping:0xFB84 - }, - { code:0xFB85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB85 - ,simpleLowerCaseMapping:0xFB85 - ,simpleTitleCaseMapping:0xFB85 - }, - { code:0xFB86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB86 - ,simpleLowerCaseMapping:0xFB86 - ,simpleTitleCaseMapping:0xFB86 - }, - { code:0xFB87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB87 - ,simpleLowerCaseMapping:0xFB87 - ,simpleTitleCaseMapping:0xFB87 - }, - { code:0xFB88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB88 - ,simpleLowerCaseMapping:0xFB88 - ,simpleTitleCaseMapping:0xFB88 - }, - { code:0xFB89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB89 - ,simpleLowerCaseMapping:0xFB89 - ,simpleTitleCaseMapping:0xFB89 - }, - { code:0xFB8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8A - ,simpleLowerCaseMapping:0xFB8A - ,simpleTitleCaseMapping:0xFB8A - }, - { code:0xFB8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8B - ,simpleLowerCaseMapping:0xFB8B - ,simpleTitleCaseMapping:0xFB8B - }, - { code:0xFB8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8C - ,simpleLowerCaseMapping:0xFB8C - ,simpleTitleCaseMapping:0xFB8C - }, - { code:0xFB8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8D - ,simpleLowerCaseMapping:0xFB8D - ,simpleTitleCaseMapping:0xFB8D - }, - { code:0xFB8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8E - ,simpleLowerCaseMapping:0xFB8E - ,simpleTitleCaseMapping:0xFB8E - }, - { code:0xFB8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB8F - ,simpleLowerCaseMapping:0xFB8F - ,simpleTitleCaseMapping:0xFB8F - }, - { code:0xFB90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB90 - ,simpleLowerCaseMapping:0xFB90 - ,simpleTitleCaseMapping:0xFB90 - }, - { code:0xFB91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB91 - ,simpleLowerCaseMapping:0xFB91 - ,simpleTitleCaseMapping:0xFB91 - }, - { code:0xFB92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB92 - ,simpleLowerCaseMapping:0xFB92 - ,simpleTitleCaseMapping:0xFB92 - }, - { code:0xFB93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB93 - ,simpleLowerCaseMapping:0xFB93 - ,simpleTitleCaseMapping:0xFB93 - }, - { code:0xFB94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB94 - ,simpleLowerCaseMapping:0xFB94 - ,simpleTitleCaseMapping:0xFB94 - }, - { code:0xFB95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB95 - ,simpleLowerCaseMapping:0xFB95 - ,simpleTitleCaseMapping:0xFB95 - }, - { code:0xFB96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB96 - ,simpleLowerCaseMapping:0xFB96 - ,simpleTitleCaseMapping:0xFB96 - }, - { code:0xFB97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB97 - ,simpleLowerCaseMapping:0xFB97 - ,simpleTitleCaseMapping:0xFB97 - }, - { code:0xFB98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB98 - ,simpleLowerCaseMapping:0xFB98 - ,simpleTitleCaseMapping:0xFB98 - }, - { code:0xFB99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB99 - ,simpleLowerCaseMapping:0xFB99 - ,simpleTitleCaseMapping:0xFB99 - }, - { code:0xFB9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9A - ,simpleLowerCaseMapping:0xFB9A - ,simpleTitleCaseMapping:0xFB9A - }, - { code:0xFB9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9B - ,simpleLowerCaseMapping:0xFB9B - ,simpleTitleCaseMapping:0xFB9B - }, - { code:0xFB9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9C - ,simpleLowerCaseMapping:0xFB9C - ,simpleTitleCaseMapping:0xFB9C - }, - { code:0xFB9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9D - ,simpleLowerCaseMapping:0xFB9D - ,simpleTitleCaseMapping:0xFB9D - }, - { code:0xFB9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9E - ,simpleLowerCaseMapping:0xFB9E - ,simpleTitleCaseMapping:0xFB9E - }, - { code:0xFB9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFB9F - ,simpleLowerCaseMapping:0xFB9F - ,simpleTitleCaseMapping:0xFB9F - }, - { code:0xFBA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA0 - ,simpleLowerCaseMapping:0xFBA0 - ,simpleTitleCaseMapping:0xFBA0 - }, - { code:0xFBA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA1 - ,simpleLowerCaseMapping:0xFBA1 - ,simpleTitleCaseMapping:0xFBA1 - }, - { code:0xFBA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA2 - ,simpleLowerCaseMapping:0xFBA2 - ,simpleTitleCaseMapping:0xFBA2 - }, - { code:0xFBA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA3 - ,simpleLowerCaseMapping:0xFBA3 - ,simpleTitleCaseMapping:0xFBA3 - }, - { code:0xFBA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA4 - ,simpleLowerCaseMapping:0xFBA4 - ,simpleTitleCaseMapping:0xFBA4 - }, - { code:0xFBA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA5 - ,simpleLowerCaseMapping:0xFBA5 - ,simpleTitleCaseMapping:0xFBA5 - }, - { code:0xFBA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA6 - ,simpleLowerCaseMapping:0xFBA6 - ,simpleTitleCaseMapping:0xFBA6 - }, - { code:0xFBA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA7 - ,simpleLowerCaseMapping:0xFBA7 - ,simpleTitleCaseMapping:0xFBA7 - }, - { code:0xFBA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA8 - ,simpleLowerCaseMapping:0xFBA8 - ,simpleTitleCaseMapping:0xFBA8 - }, - { code:0xFBA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBA9 - ,simpleLowerCaseMapping:0xFBA9 - ,simpleTitleCaseMapping:0xFBA9 - }, - { code:0xFBAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAA - ,simpleLowerCaseMapping:0xFBAA - ,simpleTitleCaseMapping:0xFBAA - }, - { code:0xFBAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAB - ,simpleLowerCaseMapping:0xFBAB - ,simpleTitleCaseMapping:0xFBAB - }, - { code:0xFBAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAC - ,simpleLowerCaseMapping:0xFBAC - ,simpleTitleCaseMapping:0xFBAC - }, - { code:0xFBAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAD - ,simpleLowerCaseMapping:0xFBAD - ,simpleTitleCaseMapping:0xFBAD - }, - { code:0xFBAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAE - ,simpleLowerCaseMapping:0xFBAE - ,simpleTitleCaseMapping:0xFBAE - }, - { code:0xFBAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBAF - ,simpleLowerCaseMapping:0xFBAF - ,simpleTitleCaseMapping:0xFBAF - }, - { code:0xFBB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBB0 - ,simpleLowerCaseMapping:0xFBB0 - ,simpleTitleCaseMapping:0xFBB0 - }, - { code:0xFBB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBB1 - ,simpleLowerCaseMapping:0xFBB1 - ,simpleTitleCaseMapping:0xFBB1 - }, - { code:0xFBD3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD3 - ,simpleLowerCaseMapping:0xFBD3 - ,simpleTitleCaseMapping:0xFBD3 - }, - { code:0xFBD4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD4 - ,simpleLowerCaseMapping:0xFBD4 - ,simpleTitleCaseMapping:0xFBD4 - }, - { code:0xFBD5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD5 - ,simpleLowerCaseMapping:0xFBD5 - ,simpleTitleCaseMapping:0xFBD5 - }, - { code:0xFBD6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD6 - ,simpleLowerCaseMapping:0xFBD6 - ,simpleTitleCaseMapping:0xFBD6 - }, - { code:0xFBD7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD7 - ,simpleLowerCaseMapping:0xFBD7 - ,simpleTitleCaseMapping:0xFBD7 - }, - { code:0xFBD8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD8 - ,simpleLowerCaseMapping:0xFBD8 - ,simpleTitleCaseMapping:0xFBD8 - }, - { code:0xFBD9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBD9 - ,simpleLowerCaseMapping:0xFBD9 - ,simpleTitleCaseMapping:0xFBD9 - }, - { code:0xFBDA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDA - ,simpleLowerCaseMapping:0xFBDA - ,simpleTitleCaseMapping:0xFBDA - }, - { code:0xFBDB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDB - ,simpleLowerCaseMapping:0xFBDB - ,simpleTitleCaseMapping:0xFBDB - }, - { code:0xFBDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDC - ,simpleLowerCaseMapping:0xFBDC - ,simpleTitleCaseMapping:0xFBDC - }, - { code:0xFBDD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDD - ,simpleLowerCaseMapping:0xFBDD - ,simpleTitleCaseMapping:0xFBDD - }, - { code:0xFBDE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDE - ,simpleLowerCaseMapping:0xFBDE - ,simpleTitleCaseMapping:0xFBDE - }, - { code:0xFBDF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBDF - ,simpleLowerCaseMapping:0xFBDF - ,simpleTitleCaseMapping:0xFBDF - }, - { code:0xFBE0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE0 - ,simpleLowerCaseMapping:0xFBE0 - ,simpleTitleCaseMapping:0xFBE0 - }, - { code:0xFBE1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE1 - ,simpleLowerCaseMapping:0xFBE1 - ,simpleTitleCaseMapping:0xFBE1 - }, - { code:0xFBE2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE2 - ,simpleLowerCaseMapping:0xFBE2 - ,simpleTitleCaseMapping:0xFBE2 - }, - { code:0xFBE3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE3 - ,simpleLowerCaseMapping:0xFBE3 - ,simpleTitleCaseMapping:0xFBE3 - }, - { code:0xFBE4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE4 - ,simpleLowerCaseMapping:0xFBE4 - ,simpleTitleCaseMapping:0xFBE4 - }, - { code:0xFBE5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE5 - ,simpleLowerCaseMapping:0xFBE5 - ,simpleTitleCaseMapping:0xFBE5 - }, - { code:0xFBE6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE6 - ,simpleLowerCaseMapping:0xFBE6 - ,simpleTitleCaseMapping:0xFBE6 - }, - { code:0xFBE7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE7 - ,simpleLowerCaseMapping:0xFBE7 - ,simpleTitleCaseMapping:0xFBE7 - }, - { code:0xFBE8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE8 - ,simpleLowerCaseMapping:0xFBE8 - ,simpleTitleCaseMapping:0xFBE8 - }, - { code:0xFBE9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBE9 - ,simpleLowerCaseMapping:0xFBE9 - ,simpleTitleCaseMapping:0xFBE9 - }, - { code:0xFBEA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBEA - ,simpleLowerCaseMapping:0xFBEA - ,simpleTitleCaseMapping:0xFBEA - }, - { code:0xFBEB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBEB - ,simpleLowerCaseMapping:0xFBEB - ,simpleTitleCaseMapping:0xFBEB - }, - { code:0xFBEC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBEC - ,simpleLowerCaseMapping:0xFBEC - ,simpleTitleCaseMapping:0xFBEC - }, - { code:0xFBED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBED - ,simpleLowerCaseMapping:0xFBED - ,simpleTitleCaseMapping:0xFBED - }, - { code:0xFBEE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBEE - ,simpleLowerCaseMapping:0xFBEE - ,simpleTitleCaseMapping:0xFBEE - }, - { code:0xFBEF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBEF - ,simpleLowerCaseMapping:0xFBEF - ,simpleTitleCaseMapping:0xFBEF - }, - { code:0xFBF0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF0 - ,simpleLowerCaseMapping:0xFBF0 - ,simpleTitleCaseMapping:0xFBF0 - }, - { code:0xFBF1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF1 - ,simpleLowerCaseMapping:0xFBF1 - ,simpleTitleCaseMapping:0xFBF1 - }, - { code:0xFBF2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF2 - ,simpleLowerCaseMapping:0xFBF2 - ,simpleTitleCaseMapping:0xFBF2 - }, - { code:0xFBF3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF3 - ,simpleLowerCaseMapping:0xFBF3 - ,simpleTitleCaseMapping:0xFBF3 - }, - { code:0xFBF4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF4 - ,simpleLowerCaseMapping:0xFBF4 - ,simpleTitleCaseMapping:0xFBF4 - }, - { code:0xFBF5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF5 - ,simpleLowerCaseMapping:0xFBF5 - ,simpleTitleCaseMapping:0xFBF5 - }, - { code:0xFBF6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF6 - ,simpleLowerCaseMapping:0xFBF6 - ,simpleTitleCaseMapping:0xFBF6 - }, - { code:0xFBF7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF7 - ,simpleLowerCaseMapping:0xFBF7 - ,simpleTitleCaseMapping:0xFBF7 - }, - { code:0xFBF8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF8 - ,simpleLowerCaseMapping:0xFBF8 - ,simpleTitleCaseMapping:0xFBF8 - }, - { code:0xFBF9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBF9 - ,simpleLowerCaseMapping:0xFBF9 - ,simpleTitleCaseMapping:0xFBF9 - }, - { code:0xFBFA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFA - ,simpleLowerCaseMapping:0xFBFA - ,simpleTitleCaseMapping:0xFBFA - }, - { code:0xFBFB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFB - ,simpleLowerCaseMapping:0xFBFB - ,simpleTitleCaseMapping:0xFBFB - }, - { code:0xFBFC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFC - ,simpleLowerCaseMapping:0xFBFC - ,simpleTitleCaseMapping:0xFBFC - }, - { code:0xFBFD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFD - ,simpleLowerCaseMapping:0xFBFD - ,simpleTitleCaseMapping:0xFBFD - }, - { code:0xFBFE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFE - ,simpleLowerCaseMapping:0xFBFE - ,simpleTitleCaseMapping:0xFBFE - }, - { code:0xFBFF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFBFF - ,simpleLowerCaseMapping:0xFBFF - ,simpleTitleCaseMapping:0xFBFF - }, - { code:0xFC00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC00 - ,simpleLowerCaseMapping:0xFC00 - ,simpleTitleCaseMapping:0xFC00 - }, - { code:0xFC01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC01 - ,simpleLowerCaseMapping:0xFC01 - ,simpleTitleCaseMapping:0xFC01 - }, - { code:0xFC02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC02 - ,simpleLowerCaseMapping:0xFC02 - ,simpleTitleCaseMapping:0xFC02 - }, - { code:0xFC03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC03 - ,simpleLowerCaseMapping:0xFC03 - ,simpleTitleCaseMapping:0xFC03 - }, - { code:0xFC04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC04 - ,simpleLowerCaseMapping:0xFC04 - ,simpleTitleCaseMapping:0xFC04 - }, - { code:0xFC05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC05 - ,simpleLowerCaseMapping:0xFC05 - ,simpleTitleCaseMapping:0xFC05 - }, - { code:0xFC06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC06 - ,simpleLowerCaseMapping:0xFC06 - ,simpleTitleCaseMapping:0xFC06 - }, - { code:0xFC07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC07 - ,simpleLowerCaseMapping:0xFC07 - ,simpleTitleCaseMapping:0xFC07 - }, - { code:0xFC08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC08 - ,simpleLowerCaseMapping:0xFC08 - ,simpleTitleCaseMapping:0xFC08 - }, - { code:0xFC09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC09 - ,simpleLowerCaseMapping:0xFC09 - ,simpleTitleCaseMapping:0xFC09 - }, - { code:0xFC0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0A - ,simpleLowerCaseMapping:0xFC0A - ,simpleTitleCaseMapping:0xFC0A - }, - { code:0xFC0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0B - ,simpleLowerCaseMapping:0xFC0B - ,simpleTitleCaseMapping:0xFC0B - }, - { code:0xFC0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0C - ,simpleLowerCaseMapping:0xFC0C - ,simpleTitleCaseMapping:0xFC0C - }, - { code:0xFC0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0D - ,simpleLowerCaseMapping:0xFC0D - ,simpleTitleCaseMapping:0xFC0D - }, - { code:0xFC0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0E - ,simpleLowerCaseMapping:0xFC0E - ,simpleTitleCaseMapping:0xFC0E - }, - { code:0xFC0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC0F - ,simpleLowerCaseMapping:0xFC0F - ,simpleTitleCaseMapping:0xFC0F - }, - { code:0xFC10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC10 - ,simpleLowerCaseMapping:0xFC10 - ,simpleTitleCaseMapping:0xFC10 - }, - { code:0xFC11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC11 - ,simpleLowerCaseMapping:0xFC11 - ,simpleTitleCaseMapping:0xFC11 - }, - { code:0xFC12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC12 - ,simpleLowerCaseMapping:0xFC12 - ,simpleTitleCaseMapping:0xFC12 - }, - { code:0xFC13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC13 - ,simpleLowerCaseMapping:0xFC13 - ,simpleTitleCaseMapping:0xFC13 - }, - { code:0xFC14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC14 - ,simpleLowerCaseMapping:0xFC14 - ,simpleTitleCaseMapping:0xFC14 - }, - { code:0xFC15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC15 - ,simpleLowerCaseMapping:0xFC15 - ,simpleTitleCaseMapping:0xFC15 - }, - { code:0xFC16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC16 - ,simpleLowerCaseMapping:0xFC16 - ,simpleTitleCaseMapping:0xFC16 - }, - { code:0xFC17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC17 - ,simpleLowerCaseMapping:0xFC17 - ,simpleTitleCaseMapping:0xFC17 - }, - { code:0xFC18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC18 - ,simpleLowerCaseMapping:0xFC18 - ,simpleTitleCaseMapping:0xFC18 - }, - { code:0xFC19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC19 - ,simpleLowerCaseMapping:0xFC19 - ,simpleTitleCaseMapping:0xFC19 - }, - { code:0xFC1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1A - ,simpleLowerCaseMapping:0xFC1A - ,simpleTitleCaseMapping:0xFC1A - }, - { code:0xFC1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1B - ,simpleLowerCaseMapping:0xFC1B - ,simpleTitleCaseMapping:0xFC1B - }, - { code:0xFC1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1C - ,simpleLowerCaseMapping:0xFC1C - ,simpleTitleCaseMapping:0xFC1C - }, - { code:0xFC1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1D - ,simpleLowerCaseMapping:0xFC1D - ,simpleTitleCaseMapping:0xFC1D - }, - { code:0xFC1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1E - ,simpleLowerCaseMapping:0xFC1E - ,simpleTitleCaseMapping:0xFC1E - }, - { code:0xFC1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC1F - ,simpleLowerCaseMapping:0xFC1F - ,simpleTitleCaseMapping:0xFC1F - }, - { code:0xFC20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC20 - ,simpleLowerCaseMapping:0xFC20 - ,simpleTitleCaseMapping:0xFC20 - }, - { code:0xFC21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC21 - ,simpleLowerCaseMapping:0xFC21 - ,simpleTitleCaseMapping:0xFC21 - }, - { code:0xFC22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC22 - ,simpleLowerCaseMapping:0xFC22 - ,simpleTitleCaseMapping:0xFC22 - }, - { code:0xFC23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC23 - ,simpleLowerCaseMapping:0xFC23 - ,simpleTitleCaseMapping:0xFC23 - }, - { code:0xFC24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC24 - ,simpleLowerCaseMapping:0xFC24 - ,simpleTitleCaseMapping:0xFC24 - }, - { code:0xFC25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC25 - ,simpleLowerCaseMapping:0xFC25 - ,simpleTitleCaseMapping:0xFC25 - }, - { code:0xFC26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC26 - ,simpleLowerCaseMapping:0xFC26 - ,simpleTitleCaseMapping:0xFC26 - }, - { code:0xFC27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC27 - ,simpleLowerCaseMapping:0xFC27 - ,simpleTitleCaseMapping:0xFC27 - }, - { code:0xFC28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC28 - ,simpleLowerCaseMapping:0xFC28 - ,simpleTitleCaseMapping:0xFC28 - }, - { code:0xFC29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC29 - ,simpleLowerCaseMapping:0xFC29 - ,simpleTitleCaseMapping:0xFC29 - }, - { code:0xFC2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2A - ,simpleLowerCaseMapping:0xFC2A - ,simpleTitleCaseMapping:0xFC2A - }, - { code:0xFC2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2B - ,simpleLowerCaseMapping:0xFC2B - ,simpleTitleCaseMapping:0xFC2B - }, - { code:0xFC2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2C - ,simpleLowerCaseMapping:0xFC2C - ,simpleTitleCaseMapping:0xFC2C - }, - { code:0xFC2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2D - ,simpleLowerCaseMapping:0xFC2D - ,simpleTitleCaseMapping:0xFC2D - }, - { code:0xFC2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2E - ,simpleLowerCaseMapping:0xFC2E - ,simpleTitleCaseMapping:0xFC2E - }, - { code:0xFC2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC2F - ,simpleLowerCaseMapping:0xFC2F - ,simpleTitleCaseMapping:0xFC2F - }, - { code:0xFC30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC30 - ,simpleLowerCaseMapping:0xFC30 - ,simpleTitleCaseMapping:0xFC30 - }, - { code:0xFC31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC31 - ,simpleLowerCaseMapping:0xFC31 - ,simpleTitleCaseMapping:0xFC31 - }, - { code:0xFC32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC32 - ,simpleLowerCaseMapping:0xFC32 - ,simpleTitleCaseMapping:0xFC32 - }, - { code:0xFC33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC33 - ,simpleLowerCaseMapping:0xFC33 - ,simpleTitleCaseMapping:0xFC33 - }, - { code:0xFC34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC34 - ,simpleLowerCaseMapping:0xFC34 - ,simpleTitleCaseMapping:0xFC34 - }, - { code:0xFC35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC35 - ,simpleLowerCaseMapping:0xFC35 - ,simpleTitleCaseMapping:0xFC35 - }, - { code:0xFC36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC36 - ,simpleLowerCaseMapping:0xFC36 - ,simpleTitleCaseMapping:0xFC36 - }, - { code:0xFC37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC37 - ,simpleLowerCaseMapping:0xFC37 - ,simpleTitleCaseMapping:0xFC37 - }, - { code:0xFC38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC38 - ,simpleLowerCaseMapping:0xFC38 - ,simpleTitleCaseMapping:0xFC38 - }, - { code:0xFC39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC39 - ,simpleLowerCaseMapping:0xFC39 - ,simpleTitleCaseMapping:0xFC39 - }, - { code:0xFC3A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3A - ,simpleLowerCaseMapping:0xFC3A - ,simpleTitleCaseMapping:0xFC3A - }, - { code:0xFC3B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3B - ,simpleLowerCaseMapping:0xFC3B - ,simpleTitleCaseMapping:0xFC3B - }, - { code:0xFC3C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3C - ,simpleLowerCaseMapping:0xFC3C - ,simpleTitleCaseMapping:0xFC3C - }, - { code:0xFC3D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3D - ,simpleLowerCaseMapping:0xFC3D - ,simpleTitleCaseMapping:0xFC3D - }, - { code:0xFC3E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3E - ,simpleLowerCaseMapping:0xFC3E - ,simpleTitleCaseMapping:0xFC3E - }, - { code:0xFC3F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC3F - ,simpleLowerCaseMapping:0xFC3F - ,simpleTitleCaseMapping:0xFC3F - }, - { code:0xFC40 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC40 - ,simpleLowerCaseMapping:0xFC40 - ,simpleTitleCaseMapping:0xFC40 - }, - { code:0xFC41 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC41 - ,simpleLowerCaseMapping:0xFC41 - ,simpleTitleCaseMapping:0xFC41 - }, - { code:0xFC42 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC42 - ,simpleLowerCaseMapping:0xFC42 - ,simpleTitleCaseMapping:0xFC42 - }, - { code:0xFC43 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC43 - ,simpleLowerCaseMapping:0xFC43 - ,simpleTitleCaseMapping:0xFC43 - }, - { code:0xFC44 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC44 - ,simpleLowerCaseMapping:0xFC44 - ,simpleTitleCaseMapping:0xFC44 - }, - { code:0xFC45 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC45 - ,simpleLowerCaseMapping:0xFC45 - ,simpleTitleCaseMapping:0xFC45 - }, - { code:0xFC46 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC46 - ,simpleLowerCaseMapping:0xFC46 - ,simpleTitleCaseMapping:0xFC46 - }, - { code:0xFC47 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC47 - ,simpleLowerCaseMapping:0xFC47 - ,simpleTitleCaseMapping:0xFC47 - }, - { code:0xFC48 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC48 - ,simpleLowerCaseMapping:0xFC48 - ,simpleTitleCaseMapping:0xFC48 - }, - { code:0xFC49 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC49 - ,simpleLowerCaseMapping:0xFC49 - ,simpleTitleCaseMapping:0xFC49 - }, - { code:0xFC4A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4A - ,simpleLowerCaseMapping:0xFC4A - ,simpleTitleCaseMapping:0xFC4A - }, - { code:0xFC4B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4B - ,simpleLowerCaseMapping:0xFC4B - ,simpleTitleCaseMapping:0xFC4B - }, - { code:0xFC4C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4C - ,simpleLowerCaseMapping:0xFC4C - ,simpleTitleCaseMapping:0xFC4C - }, - { code:0xFC4D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4D - ,simpleLowerCaseMapping:0xFC4D - ,simpleTitleCaseMapping:0xFC4D - }, - { code:0xFC4E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4E - ,simpleLowerCaseMapping:0xFC4E - ,simpleTitleCaseMapping:0xFC4E - }, - { code:0xFC4F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC4F - ,simpleLowerCaseMapping:0xFC4F - ,simpleTitleCaseMapping:0xFC4F - }, - { code:0xFC50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC50 - ,simpleLowerCaseMapping:0xFC50 - ,simpleTitleCaseMapping:0xFC50 - }, - { code:0xFC51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC51 - ,simpleLowerCaseMapping:0xFC51 - ,simpleTitleCaseMapping:0xFC51 - }, - { code:0xFC52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC52 - ,simpleLowerCaseMapping:0xFC52 - ,simpleTitleCaseMapping:0xFC52 - }, - { code:0xFC53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC53 - ,simpleLowerCaseMapping:0xFC53 - ,simpleTitleCaseMapping:0xFC53 - }, - { code:0xFC54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC54 - ,simpleLowerCaseMapping:0xFC54 - ,simpleTitleCaseMapping:0xFC54 - }, - { code:0xFC55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC55 - ,simpleLowerCaseMapping:0xFC55 - ,simpleTitleCaseMapping:0xFC55 - }, - { code:0xFC56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC56 - ,simpleLowerCaseMapping:0xFC56 - ,simpleTitleCaseMapping:0xFC56 - }, - { code:0xFC57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC57 - ,simpleLowerCaseMapping:0xFC57 - ,simpleTitleCaseMapping:0xFC57 - }, - { code:0xFC58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC58 - ,simpleLowerCaseMapping:0xFC58 - ,simpleTitleCaseMapping:0xFC58 - }, - { code:0xFC59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC59 - ,simpleLowerCaseMapping:0xFC59 - ,simpleTitleCaseMapping:0xFC59 - }, - { code:0xFC5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5A - ,simpleLowerCaseMapping:0xFC5A - ,simpleTitleCaseMapping:0xFC5A - }, - { code:0xFC5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5B - ,simpleLowerCaseMapping:0xFC5B - ,simpleTitleCaseMapping:0xFC5B - }, - { code:0xFC5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5C - ,simpleLowerCaseMapping:0xFC5C - ,simpleTitleCaseMapping:0xFC5C - }, - { code:0xFC5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5D - ,simpleLowerCaseMapping:0xFC5D - ,simpleTitleCaseMapping:0xFC5D - }, - { code:0xFC5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5E - ,simpleLowerCaseMapping:0xFC5E - ,simpleTitleCaseMapping:0xFC5E - }, - { code:0xFC5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC5F - ,simpleLowerCaseMapping:0xFC5F - ,simpleTitleCaseMapping:0xFC5F - }, - { code:0xFC60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC60 - ,simpleLowerCaseMapping:0xFC60 - ,simpleTitleCaseMapping:0xFC60 - }, - { code:0xFC61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC61 - ,simpleLowerCaseMapping:0xFC61 - ,simpleTitleCaseMapping:0xFC61 - }, - { code:0xFC62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC62 - ,simpleLowerCaseMapping:0xFC62 - ,simpleTitleCaseMapping:0xFC62 - }, - { code:0xFC63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC63 - ,simpleLowerCaseMapping:0xFC63 - ,simpleTitleCaseMapping:0xFC63 - }, - { code:0xFC64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC64 - ,simpleLowerCaseMapping:0xFC64 - ,simpleTitleCaseMapping:0xFC64 - }, - { code:0xFC65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC65 - ,simpleLowerCaseMapping:0xFC65 - ,simpleTitleCaseMapping:0xFC65 - }, - { code:0xFC66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC66 - ,simpleLowerCaseMapping:0xFC66 - ,simpleTitleCaseMapping:0xFC66 - }, - { code:0xFC67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC67 - ,simpleLowerCaseMapping:0xFC67 - ,simpleTitleCaseMapping:0xFC67 - }, - { code:0xFC68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC68 - ,simpleLowerCaseMapping:0xFC68 - ,simpleTitleCaseMapping:0xFC68 - }, - { code:0xFC69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC69 - ,simpleLowerCaseMapping:0xFC69 - ,simpleTitleCaseMapping:0xFC69 - }, - { code:0xFC6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6A - ,simpleLowerCaseMapping:0xFC6A - ,simpleTitleCaseMapping:0xFC6A - }, - { code:0xFC6B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6B - ,simpleLowerCaseMapping:0xFC6B - ,simpleTitleCaseMapping:0xFC6B - }, - { code:0xFC6C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6C - ,simpleLowerCaseMapping:0xFC6C - ,simpleTitleCaseMapping:0xFC6C - }, - { code:0xFC6D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6D - ,simpleLowerCaseMapping:0xFC6D - ,simpleTitleCaseMapping:0xFC6D - }, - { code:0xFC6E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6E - ,simpleLowerCaseMapping:0xFC6E - ,simpleTitleCaseMapping:0xFC6E - }, - { code:0xFC6F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC6F - ,simpleLowerCaseMapping:0xFC6F - ,simpleTitleCaseMapping:0xFC6F - }, - { code:0xFC70 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC70 - ,simpleLowerCaseMapping:0xFC70 - ,simpleTitleCaseMapping:0xFC70 - }, - { code:0xFC71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC71 - ,simpleLowerCaseMapping:0xFC71 - ,simpleTitleCaseMapping:0xFC71 - }, - { code:0xFC72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC72 - ,simpleLowerCaseMapping:0xFC72 - ,simpleTitleCaseMapping:0xFC72 - }, - { code:0xFC73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC73 - ,simpleLowerCaseMapping:0xFC73 - ,simpleTitleCaseMapping:0xFC73 - }, - { code:0xFC74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC74 - ,simpleLowerCaseMapping:0xFC74 - ,simpleTitleCaseMapping:0xFC74 - }, - { code:0xFC75 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC75 - ,simpleLowerCaseMapping:0xFC75 - ,simpleTitleCaseMapping:0xFC75 - }, - { code:0xFC76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC76 - ,simpleLowerCaseMapping:0xFC76 - ,simpleTitleCaseMapping:0xFC76 - }, - { code:0xFC77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC77 - ,simpleLowerCaseMapping:0xFC77 - ,simpleTitleCaseMapping:0xFC77 - }, - { code:0xFC78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC78 - ,simpleLowerCaseMapping:0xFC78 - ,simpleTitleCaseMapping:0xFC78 - }, - { code:0xFC79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC79 - ,simpleLowerCaseMapping:0xFC79 - ,simpleTitleCaseMapping:0xFC79 - }, - { code:0xFC7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7A - ,simpleLowerCaseMapping:0xFC7A - ,simpleTitleCaseMapping:0xFC7A - }, - { code:0xFC7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7B - ,simpleLowerCaseMapping:0xFC7B - ,simpleTitleCaseMapping:0xFC7B - }, - { code:0xFC7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7C - ,simpleLowerCaseMapping:0xFC7C - ,simpleTitleCaseMapping:0xFC7C - }, - { code:0xFC7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7D - ,simpleLowerCaseMapping:0xFC7D - ,simpleTitleCaseMapping:0xFC7D - }, - { code:0xFC7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7E - ,simpleLowerCaseMapping:0xFC7E - ,simpleTitleCaseMapping:0xFC7E - }, - { code:0xFC7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC7F - ,simpleLowerCaseMapping:0xFC7F - ,simpleTitleCaseMapping:0xFC7F - }, - { code:0xFC80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC80 - ,simpleLowerCaseMapping:0xFC80 - ,simpleTitleCaseMapping:0xFC80 - }, - { code:0xFC81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC81 - ,simpleLowerCaseMapping:0xFC81 - ,simpleTitleCaseMapping:0xFC81 - }, - { code:0xFC82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC82 - ,simpleLowerCaseMapping:0xFC82 - ,simpleTitleCaseMapping:0xFC82 - }, - { code:0xFC83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC83 - ,simpleLowerCaseMapping:0xFC83 - ,simpleTitleCaseMapping:0xFC83 - }, - { code:0xFC84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC84 - ,simpleLowerCaseMapping:0xFC84 - ,simpleTitleCaseMapping:0xFC84 - }, - { code:0xFC85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC85 - ,simpleLowerCaseMapping:0xFC85 - ,simpleTitleCaseMapping:0xFC85 - }, - { code:0xFC86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC86 - ,simpleLowerCaseMapping:0xFC86 - ,simpleTitleCaseMapping:0xFC86 - }, - { code:0xFC87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC87 - ,simpleLowerCaseMapping:0xFC87 - ,simpleTitleCaseMapping:0xFC87 - }, - { code:0xFC88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC88 - ,simpleLowerCaseMapping:0xFC88 - ,simpleTitleCaseMapping:0xFC88 - }, - { code:0xFC89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC89 - ,simpleLowerCaseMapping:0xFC89 - ,simpleTitleCaseMapping:0xFC89 - }, - { code:0xFC8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8A - ,simpleLowerCaseMapping:0xFC8A - ,simpleTitleCaseMapping:0xFC8A - }, - { code:0xFC8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8B - ,simpleLowerCaseMapping:0xFC8B - ,simpleTitleCaseMapping:0xFC8B - }, - { code:0xFC8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8C - ,simpleLowerCaseMapping:0xFC8C - ,simpleTitleCaseMapping:0xFC8C - }, - { code:0xFC8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8D - ,simpleLowerCaseMapping:0xFC8D - ,simpleTitleCaseMapping:0xFC8D - }, - { code:0xFC8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8E - ,simpleLowerCaseMapping:0xFC8E - ,simpleTitleCaseMapping:0xFC8E - }, - { code:0xFC8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC8F - ,simpleLowerCaseMapping:0xFC8F - ,simpleTitleCaseMapping:0xFC8F - }, - { code:0xFC90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC90 - ,simpleLowerCaseMapping:0xFC90 - ,simpleTitleCaseMapping:0xFC90 - }, - { code:0xFC91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC91 - ,simpleLowerCaseMapping:0xFC91 - ,simpleTitleCaseMapping:0xFC91 - }, - { code:0xFC92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC92 - ,simpleLowerCaseMapping:0xFC92 - ,simpleTitleCaseMapping:0xFC92 - }, - { code:0xFC93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC93 - ,simpleLowerCaseMapping:0xFC93 - ,simpleTitleCaseMapping:0xFC93 - }, - { code:0xFC94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC94 - ,simpleLowerCaseMapping:0xFC94 - ,simpleTitleCaseMapping:0xFC94 - }, - { code:0xFC95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC95 - ,simpleLowerCaseMapping:0xFC95 - ,simpleTitleCaseMapping:0xFC95 - }, - { code:0xFC96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC96 - ,simpleLowerCaseMapping:0xFC96 - ,simpleTitleCaseMapping:0xFC96 - }, - { code:0xFC97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC97 - ,simpleLowerCaseMapping:0xFC97 - ,simpleTitleCaseMapping:0xFC97 - }, - { code:0xFC98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC98 - ,simpleLowerCaseMapping:0xFC98 - ,simpleTitleCaseMapping:0xFC98 - }, - { code:0xFC99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC99 - ,simpleLowerCaseMapping:0xFC99 - ,simpleTitleCaseMapping:0xFC99 - }, - { code:0xFC9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9A - ,simpleLowerCaseMapping:0xFC9A - ,simpleTitleCaseMapping:0xFC9A - }, - { code:0xFC9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9B - ,simpleLowerCaseMapping:0xFC9B - ,simpleTitleCaseMapping:0xFC9B - }, - { code:0xFC9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9C - ,simpleLowerCaseMapping:0xFC9C - ,simpleTitleCaseMapping:0xFC9C - }, - { code:0xFC9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9D - ,simpleLowerCaseMapping:0xFC9D - ,simpleTitleCaseMapping:0xFC9D - }, - { code:0xFC9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9E - ,simpleLowerCaseMapping:0xFC9E - ,simpleTitleCaseMapping:0xFC9E - }, - { code:0xFC9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFC9F - ,simpleLowerCaseMapping:0xFC9F - ,simpleTitleCaseMapping:0xFC9F - }, - { code:0xFCA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA0 - ,simpleLowerCaseMapping:0xFCA0 - ,simpleTitleCaseMapping:0xFCA0 - }, - { code:0xFCA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA1 - ,simpleLowerCaseMapping:0xFCA1 - ,simpleTitleCaseMapping:0xFCA1 - }, - { code:0xFCA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA2 - ,simpleLowerCaseMapping:0xFCA2 - ,simpleTitleCaseMapping:0xFCA2 - }, - { code:0xFCA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA3 - ,simpleLowerCaseMapping:0xFCA3 - ,simpleTitleCaseMapping:0xFCA3 - }, - { code:0xFCA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA4 - ,simpleLowerCaseMapping:0xFCA4 - ,simpleTitleCaseMapping:0xFCA4 - }, - { code:0xFCA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA5 - ,simpleLowerCaseMapping:0xFCA5 - ,simpleTitleCaseMapping:0xFCA5 - }, - { code:0xFCA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA6 - ,simpleLowerCaseMapping:0xFCA6 - ,simpleTitleCaseMapping:0xFCA6 - }, - { code:0xFCA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA7 - ,simpleLowerCaseMapping:0xFCA7 - ,simpleTitleCaseMapping:0xFCA7 - }, - { code:0xFCA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA8 - ,simpleLowerCaseMapping:0xFCA8 - ,simpleTitleCaseMapping:0xFCA8 - }, - { code:0xFCA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCA9 - ,simpleLowerCaseMapping:0xFCA9 - ,simpleTitleCaseMapping:0xFCA9 - }, - { code:0xFCAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAA - ,simpleLowerCaseMapping:0xFCAA - ,simpleTitleCaseMapping:0xFCAA - }, - { code:0xFCAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAB - ,simpleLowerCaseMapping:0xFCAB - ,simpleTitleCaseMapping:0xFCAB - }, - { code:0xFCAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAC - ,simpleLowerCaseMapping:0xFCAC - ,simpleTitleCaseMapping:0xFCAC - }, - { code:0xFCAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAD - ,simpleLowerCaseMapping:0xFCAD - ,simpleTitleCaseMapping:0xFCAD - }, - { code:0xFCAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAE - ,simpleLowerCaseMapping:0xFCAE - ,simpleTitleCaseMapping:0xFCAE - }, - { code:0xFCAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCAF - ,simpleLowerCaseMapping:0xFCAF - ,simpleTitleCaseMapping:0xFCAF - }, - { code:0xFCB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB0 - ,simpleLowerCaseMapping:0xFCB0 - ,simpleTitleCaseMapping:0xFCB0 - }, - { code:0xFCB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB1 - ,simpleLowerCaseMapping:0xFCB1 - ,simpleTitleCaseMapping:0xFCB1 - }, - { code:0xFCB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB2 - ,simpleLowerCaseMapping:0xFCB2 - ,simpleTitleCaseMapping:0xFCB2 - }, - { code:0xFCB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB3 - ,simpleLowerCaseMapping:0xFCB3 - ,simpleTitleCaseMapping:0xFCB3 - }, - { code:0xFCB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB4 - ,simpleLowerCaseMapping:0xFCB4 - ,simpleTitleCaseMapping:0xFCB4 - }, - { code:0xFCB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB5 - ,simpleLowerCaseMapping:0xFCB5 - ,simpleTitleCaseMapping:0xFCB5 - }, - { code:0xFCB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB6 - ,simpleLowerCaseMapping:0xFCB6 - ,simpleTitleCaseMapping:0xFCB6 - }, - { code:0xFCB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB7 - ,simpleLowerCaseMapping:0xFCB7 - ,simpleTitleCaseMapping:0xFCB7 - }, - { code:0xFCB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB8 - ,simpleLowerCaseMapping:0xFCB8 - ,simpleTitleCaseMapping:0xFCB8 - }, - { code:0xFCB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCB9 - ,simpleLowerCaseMapping:0xFCB9 - ,simpleTitleCaseMapping:0xFCB9 - }, - { code:0xFCBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBA - ,simpleLowerCaseMapping:0xFCBA - ,simpleTitleCaseMapping:0xFCBA - }, - { code:0xFCBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBB - ,simpleLowerCaseMapping:0xFCBB - ,simpleTitleCaseMapping:0xFCBB - }, - { code:0xFCBC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBC - ,simpleLowerCaseMapping:0xFCBC - ,simpleTitleCaseMapping:0xFCBC - }, - { code:0xFCBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBD - ,simpleLowerCaseMapping:0xFCBD - ,simpleTitleCaseMapping:0xFCBD - }, - { code:0xFCBE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBE - ,simpleLowerCaseMapping:0xFCBE - ,simpleTitleCaseMapping:0xFCBE - }, - { code:0xFCBF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCBF - ,simpleLowerCaseMapping:0xFCBF - ,simpleTitleCaseMapping:0xFCBF - }, - { code:0xFCC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC0 - ,simpleLowerCaseMapping:0xFCC0 - ,simpleTitleCaseMapping:0xFCC0 - }, - { code:0xFCC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC1 - ,simpleLowerCaseMapping:0xFCC1 - ,simpleTitleCaseMapping:0xFCC1 - }, - { code:0xFCC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC2 - ,simpleLowerCaseMapping:0xFCC2 - ,simpleTitleCaseMapping:0xFCC2 - }, - { code:0xFCC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC3 - ,simpleLowerCaseMapping:0xFCC3 - ,simpleTitleCaseMapping:0xFCC3 - }, - { code:0xFCC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC4 - ,simpleLowerCaseMapping:0xFCC4 - ,simpleTitleCaseMapping:0xFCC4 - }, - { code:0xFCC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC5 - ,simpleLowerCaseMapping:0xFCC5 - ,simpleTitleCaseMapping:0xFCC5 - }, - { code:0xFCC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC6 - ,simpleLowerCaseMapping:0xFCC6 - ,simpleTitleCaseMapping:0xFCC6 - }, - { code:0xFCC7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC7 - ,simpleLowerCaseMapping:0xFCC7 - ,simpleTitleCaseMapping:0xFCC7 - }, - { code:0xFCC8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC8 - ,simpleLowerCaseMapping:0xFCC8 - ,simpleTitleCaseMapping:0xFCC8 - }, - { code:0xFCC9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCC9 - ,simpleLowerCaseMapping:0xFCC9 - ,simpleTitleCaseMapping:0xFCC9 - }, - { code:0xFCCA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCA - ,simpleLowerCaseMapping:0xFCCA - ,simpleTitleCaseMapping:0xFCCA - }, - { code:0xFCCB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCB - ,simpleLowerCaseMapping:0xFCCB - ,simpleTitleCaseMapping:0xFCCB - }, - { code:0xFCCC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCC - ,simpleLowerCaseMapping:0xFCCC - ,simpleTitleCaseMapping:0xFCCC - }, - { code:0xFCCD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCD - ,simpleLowerCaseMapping:0xFCCD - ,simpleTitleCaseMapping:0xFCCD - }, - { code:0xFCCE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCE - ,simpleLowerCaseMapping:0xFCCE - ,simpleTitleCaseMapping:0xFCCE - }, - { code:0xFCCF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCCF - ,simpleLowerCaseMapping:0xFCCF - ,simpleTitleCaseMapping:0xFCCF - }, - { code:0xFCD0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD0 - ,simpleLowerCaseMapping:0xFCD0 - ,simpleTitleCaseMapping:0xFCD0 - }, - { code:0xFCD1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD1 - ,simpleLowerCaseMapping:0xFCD1 - ,simpleTitleCaseMapping:0xFCD1 - }, - { code:0xFCD2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD2 - ,simpleLowerCaseMapping:0xFCD2 - ,simpleTitleCaseMapping:0xFCD2 - }, - { code:0xFCD3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD3 - ,simpleLowerCaseMapping:0xFCD3 - ,simpleTitleCaseMapping:0xFCD3 - }, - { code:0xFCD4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD4 - ,simpleLowerCaseMapping:0xFCD4 - ,simpleTitleCaseMapping:0xFCD4 - }, - { code:0xFCD5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD5 - ,simpleLowerCaseMapping:0xFCD5 - ,simpleTitleCaseMapping:0xFCD5 - }, - { code:0xFCD6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD6 - ,simpleLowerCaseMapping:0xFCD6 - ,simpleTitleCaseMapping:0xFCD6 - }, - { code:0xFCD7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD7 - ,simpleLowerCaseMapping:0xFCD7 - ,simpleTitleCaseMapping:0xFCD7 - }, - { code:0xFCD8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD8 - ,simpleLowerCaseMapping:0xFCD8 - ,simpleTitleCaseMapping:0xFCD8 - }, - { code:0xFCD9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCD9 - ,simpleLowerCaseMapping:0xFCD9 - ,simpleTitleCaseMapping:0xFCD9 - }, - { code:0xFCDA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDA - ,simpleLowerCaseMapping:0xFCDA - ,simpleTitleCaseMapping:0xFCDA - }, - { code:0xFCDB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDB - ,simpleLowerCaseMapping:0xFCDB - ,simpleTitleCaseMapping:0xFCDB - }, - { code:0xFCDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDC - ,simpleLowerCaseMapping:0xFCDC - ,simpleTitleCaseMapping:0xFCDC - }, - { code:0xFCDD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDD - ,simpleLowerCaseMapping:0xFCDD - ,simpleTitleCaseMapping:0xFCDD - }, - { code:0xFCDE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDE - ,simpleLowerCaseMapping:0xFCDE - ,simpleTitleCaseMapping:0xFCDE - }, - { code:0xFCDF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCDF - ,simpleLowerCaseMapping:0xFCDF - ,simpleTitleCaseMapping:0xFCDF - }, - { code:0xFCE0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE0 - ,simpleLowerCaseMapping:0xFCE0 - ,simpleTitleCaseMapping:0xFCE0 - }, - { code:0xFCE1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE1 - ,simpleLowerCaseMapping:0xFCE1 - ,simpleTitleCaseMapping:0xFCE1 - }, - { code:0xFCE2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE2 - ,simpleLowerCaseMapping:0xFCE2 - ,simpleTitleCaseMapping:0xFCE2 - }, - { code:0xFCE3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE3 - ,simpleLowerCaseMapping:0xFCE3 - ,simpleTitleCaseMapping:0xFCE3 - }, - { code:0xFCE4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE4 - ,simpleLowerCaseMapping:0xFCE4 - ,simpleTitleCaseMapping:0xFCE4 - }, - { code:0xFCE5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE5 - ,simpleLowerCaseMapping:0xFCE5 - ,simpleTitleCaseMapping:0xFCE5 - }, - { code:0xFCE6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE6 - ,simpleLowerCaseMapping:0xFCE6 - ,simpleTitleCaseMapping:0xFCE6 - }, - { code:0xFCE7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE7 - ,simpleLowerCaseMapping:0xFCE7 - ,simpleTitleCaseMapping:0xFCE7 - }, - { code:0xFCE8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE8 - ,simpleLowerCaseMapping:0xFCE8 - ,simpleTitleCaseMapping:0xFCE8 - }, - { code:0xFCE9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCE9 - ,simpleLowerCaseMapping:0xFCE9 - ,simpleTitleCaseMapping:0xFCE9 - }, - { code:0xFCEA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCEA - ,simpleLowerCaseMapping:0xFCEA - ,simpleTitleCaseMapping:0xFCEA - }, - { code:0xFCEB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCEB - ,simpleLowerCaseMapping:0xFCEB - ,simpleTitleCaseMapping:0xFCEB - }, - { code:0xFCEC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCEC - ,simpleLowerCaseMapping:0xFCEC - ,simpleTitleCaseMapping:0xFCEC - }, - { code:0xFCED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCED - ,simpleLowerCaseMapping:0xFCED - ,simpleTitleCaseMapping:0xFCED - }, - { code:0xFCEE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCEE - ,simpleLowerCaseMapping:0xFCEE - ,simpleTitleCaseMapping:0xFCEE - }, - { code:0xFCEF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCEF - ,simpleLowerCaseMapping:0xFCEF - ,simpleTitleCaseMapping:0xFCEF - }, - { code:0xFCF0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF0 - ,simpleLowerCaseMapping:0xFCF0 - ,simpleTitleCaseMapping:0xFCF0 - }, - { code:0xFCF1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF1 - ,simpleLowerCaseMapping:0xFCF1 - ,simpleTitleCaseMapping:0xFCF1 - }, - { code:0xFCF2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF2 - ,simpleLowerCaseMapping:0xFCF2 - ,simpleTitleCaseMapping:0xFCF2 - }, - { code:0xFCF3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF3 - ,simpleLowerCaseMapping:0xFCF3 - ,simpleTitleCaseMapping:0xFCF3 - }, - { code:0xFCF4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF4 - ,simpleLowerCaseMapping:0xFCF4 - ,simpleTitleCaseMapping:0xFCF4 - }, - { code:0xFCF5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF5 - ,simpleLowerCaseMapping:0xFCF5 - ,simpleTitleCaseMapping:0xFCF5 - }, - { code:0xFCF6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF6 - ,simpleLowerCaseMapping:0xFCF6 - ,simpleTitleCaseMapping:0xFCF6 - }, - { code:0xFCF7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF7 - ,simpleLowerCaseMapping:0xFCF7 - ,simpleTitleCaseMapping:0xFCF7 - }, - { code:0xFCF8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF8 - ,simpleLowerCaseMapping:0xFCF8 - ,simpleTitleCaseMapping:0xFCF8 - }, - { code:0xFCF9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCF9 - ,simpleLowerCaseMapping:0xFCF9 - ,simpleTitleCaseMapping:0xFCF9 - }, - { code:0xFCFA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFA - ,simpleLowerCaseMapping:0xFCFA - ,simpleTitleCaseMapping:0xFCFA - }, - { code:0xFCFB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFB - ,simpleLowerCaseMapping:0xFCFB - ,simpleTitleCaseMapping:0xFCFB - }, - { code:0xFCFC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFC - ,simpleLowerCaseMapping:0xFCFC - ,simpleTitleCaseMapping:0xFCFC - }, - { code:0xFCFD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFD - ,simpleLowerCaseMapping:0xFCFD - ,simpleTitleCaseMapping:0xFCFD - }, - { code:0xFCFE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFE - ,simpleLowerCaseMapping:0xFCFE - ,simpleTitleCaseMapping:0xFCFE - }, - { code:0xFCFF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFCFF - ,simpleLowerCaseMapping:0xFCFF - ,simpleTitleCaseMapping:0xFCFF - }, - { code:0xFD00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD00 - ,simpleLowerCaseMapping:0xFD00 - ,simpleTitleCaseMapping:0xFD00 - }, - { code:0xFD01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD01 - ,simpleLowerCaseMapping:0xFD01 - ,simpleTitleCaseMapping:0xFD01 - }, - { code:0xFD02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD02 - ,simpleLowerCaseMapping:0xFD02 - ,simpleTitleCaseMapping:0xFD02 - }, - { code:0xFD03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD03 - ,simpleLowerCaseMapping:0xFD03 - ,simpleTitleCaseMapping:0xFD03 - }, - { code:0xFD04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD04 - ,simpleLowerCaseMapping:0xFD04 - ,simpleTitleCaseMapping:0xFD04 - }, - { code:0xFD05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD05 - ,simpleLowerCaseMapping:0xFD05 - ,simpleTitleCaseMapping:0xFD05 - }, - { code:0xFD06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD06 - ,simpleLowerCaseMapping:0xFD06 - ,simpleTitleCaseMapping:0xFD06 - }, - { code:0xFD07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD07 - ,simpleLowerCaseMapping:0xFD07 - ,simpleTitleCaseMapping:0xFD07 - }, - { code:0xFD08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD08 - ,simpleLowerCaseMapping:0xFD08 - ,simpleTitleCaseMapping:0xFD08 - }, - { code:0xFD09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD09 - ,simpleLowerCaseMapping:0xFD09 - ,simpleTitleCaseMapping:0xFD09 - }, - { code:0xFD0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0A - ,simpleLowerCaseMapping:0xFD0A - ,simpleTitleCaseMapping:0xFD0A - }, - { code:0xFD0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0B - ,simpleLowerCaseMapping:0xFD0B - ,simpleTitleCaseMapping:0xFD0B - }, - { code:0xFD0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0C - ,simpleLowerCaseMapping:0xFD0C - ,simpleTitleCaseMapping:0xFD0C - }, - { code:0xFD0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0D - ,simpleLowerCaseMapping:0xFD0D - ,simpleTitleCaseMapping:0xFD0D - }, - { code:0xFD0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0E - ,simpleLowerCaseMapping:0xFD0E - ,simpleTitleCaseMapping:0xFD0E - }, - { code:0xFD0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD0F - ,simpleLowerCaseMapping:0xFD0F - ,simpleTitleCaseMapping:0xFD0F - }, - { code:0xFD10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD10 - ,simpleLowerCaseMapping:0xFD10 - ,simpleTitleCaseMapping:0xFD10 - }, - { code:0xFD11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD11 - ,simpleLowerCaseMapping:0xFD11 - ,simpleTitleCaseMapping:0xFD11 - }, - { code:0xFD12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD12 - ,simpleLowerCaseMapping:0xFD12 - ,simpleTitleCaseMapping:0xFD12 - }, - { code:0xFD13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD13 - ,simpleLowerCaseMapping:0xFD13 - ,simpleTitleCaseMapping:0xFD13 - }, - { code:0xFD14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD14 - ,simpleLowerCaseMapping:0xFD14 - ,simpleTitleCaseMapping:0xFD14 - }, - { code:0xFD15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD15 - ,simpleLowerCaseMapping:0xFD15 - ,simpleTitleCaseMapping:0xFD15 - }, - { code:0xFD16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD16 - ,simpleLowerCaseMapping:0xFD16 - ,simpleTitleCaseMapping:0xFD16 - }, - { code:0xFD17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD17 - ,simpleLowerCaseMapping:0xFD17 - ,simpleTitleCaseMapping:0xFD17 - }, - { code:0xFD18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD18 - ,simpleLowerCaseMapping:0xFD18 - ,simpleTitleCaseMapping:0xFD18 - }, - { code:0xFD19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD19 - ,simpleLowerCaseMapping:0xFD19 - ,simpleTitleCaseMapping:0xFD19 - }, - { code:0xFD1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1A - ,simpleLowerCaseMapping:0xFD1A - ,simpleTitleCaseMapping:0xFD1A - }, - { code:0xFD1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1B - ,simpleLowerCaseMapping:0xFD1B - ,simpleTitleCaseMapping:0xFD1B - }, - { code:0xFD1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1C - ,simpleLowerCaseMapping:0xFD1C - ,simpleTitleCaseMapping:0xFD1C - }, - { code:0xFD1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1D - ,simpleLowerCaseMapping:0xFD1D - ,simpleTitleCaseMapping:0xFD1D - }, - { code:0xFD1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1E - ,simpleLowerCaseMapping:0xFD1E - ,simpleTitleCaseMapping:0xFD1E - }, - { code:0xFD1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD1F - ,simpleLowerCaseMapping:0xFD1F - ,simpleTitleCaseMapping:0xFD1F - }, - { code:0xFD20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD20 - ,simpleLowerCaseMapping:0xFD20 - ,simpleTitleCaseMapping:0xFD20 - }, - { code:0xFD21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD21 - ,simpleLowerCaseMapping:0xFD21 - ,simpleTitleCaseMapping:0xFD21 - }, - { code:0xFD22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD22 - ,simpleLowerCaseMapping:0xFD22 - ,simpleTitleCaseMapping:0xFD22 - }, - { code:0xFD23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD23 - ,simpleLowerCaseMapping:0xFD23 - ,simpleTitleCaseMapping:0xFD23 - }, - { code:0xFD24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD24 - ,simpleLowerCaseMapping:0xFD24 - ,simpleTitleCaseMapping:0xFD24 - }, - { code:0xFD25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD25 - ,simpleLowerCaseMapping:0xFD25 - ,simpleTitleCaseMapping:0xFD25 - }, - { code:0xFD26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD26 - ,simpleLowerCaseMapping:0xFD26 - ,simpleTitleCaseMapping:0xFD26 - }, - { code:0xFD27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD27 - ,simpleLowerCaseMapping:0xFD27 - ,simpleTitleCaseMapping:0xFD27 - }, - { code:0xFD28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD28 - ,simpleLowerCaseMapping:0xFD28 - ,simpleTitleCaseMapping:0xFD28 - }, - { code:0xFD29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD29 - ,simpleLowerCaseMapping:0xFD29 - ,simpleTitleCaseMapping:0xFD29 - }, - { code:0xFD2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2A - ,simpleLowerCaseMapping:0xFD2A - ,simpleTitleCaseMapping:0xFD2A - }, - { code:0xFD2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2B - ,simpleLowerCaseMapping:0xFD2B - ,simpleTitleCaseMapping:0xFD2B - }, - { code:0xFD2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2C - ,simpleLowerCaseMapping:0xFD2C - ,simpleTitleCaseMapping:0xFD2C - }, - { code:0xFD2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2D - ,simpleLowerCaseMapping:0xFD2D - ,simpleTitleCaseMapping:0xFD2D - }, - { code:0xFD2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2E - ,simpleLowerCaseMapping:0xFD2E - ,simpleTitleCaseMapping:0xFD2E - }, - { code:0xFD2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD2F - ,simpleLowerCaseMapping:0xFD2F - ,simpleTitleCaseMapping:0xFD2F - }, - { code:0xFD30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD30 - ,simpleLowerCaseMapping:0xFD30 - ,simpleTitleCaseMapping:0xFD30 - }, - { code:0xFD31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD31 - ,simpleLowerCaseMapping:0xFD31 - ,simpleTitleCaseMapping:0xFD31 - }, - { code:0xFD32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD32 - ,simpleLowerCaseMapping:0xFD32 - ,simpleTitleCaseMapping:0xFD32 - }, - { code:0xFD33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD33 - ,simpleLowerCaseMapping:0xFD33 - ,simpleTitleCaseMapping:0xFD33 - }, - { code:0xFD34 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD34 - ,simpleLowerCaseMapping:0xFD34 - ,simpleTitleCaseMapping:0xFD34 - }, - { code:0xFD35 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD35 - ,simpleLowerCaseMapping:0xFD35 - ,simpleTitleCaseMapping:0xFD35 - }, - { code:0xFD36 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD36 - ,simpleLowerCaseMapping:0xFD36 - ,simpleTitleCaseMapping:0xFD36 - }, - { code:0xFD37 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD37 - ,simpleLowerCaseMapping:0xFD37 - ,simpleTitleCaseMapping:0xFD37 - }, - { code:0xFD38 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD38 - ,simpleLowerCaseMapping:0xFD38 - ,simpleTitleCaseMapping:0xFD38 - }, - { code:0xFD39 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD39 - ,simpleLowerCaseMapping:0xFD39 - ,simpleTitleCaseMapping:0xFD39 - }, - { code:0xFD3A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD3A - ,simpleLowerCaseMapping:0xFD3A - ,simpleTitleCaseMapping:0xFD3A - }, - { code:0xFD3B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD3B - ,simpleLowerCaseMapping:0xFD3B - ,simpleTitleCaseMapping:0xFD3B - }, - { code:0xFD3C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD3C - ,simpleLowerCaseMapping:0xFD3C - ,simpleTitleCaseMapping:0xFD3C - }, - { code:0xFD3D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD3D - ,simpleLowerCaseMapping:0xFD3D - ,simpleTitleCaseMapping:0xFD3D - }, - { code:0xFD3E - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFD3E - ,simpleLowerCaseMapping:0xFD3E - ,simpleTitleCaseMapping:0xFD3E - }, - { code:0xFD3F - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFD3F - ,simpleLowerCaseMapping:0xFD3F - ,simpleTitleCaseMapping:0xFD3F - }, - { code:0xFD50 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD50 - ,simpleLowerCaseMapping:0xFD50 - ,simpleTitleCaseMapping:0xFD50 - }, - { code:0xFD51 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD51 - ,simpleLowerCaseMapping:0xFD51 - ,simpleTitleCaseMapping:0xFD51 - }, - { code:0xFD52 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD52 - ,simpleLowerCaseMapping:0xFD52 - ,simpleTitleCaseMapping:0xFD52 - }, - { code:0xFD53 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD53 - ,simpleLowerCaseMapping:0xFD53 - ,simpleTitleCaseMapping:0xFD53 - }, - { code:0xFD54 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD54 - ,simpleLowerCaseMapping:0xFD54 - ,simpleTitleCaseMapping:0xFD54 - }, - { code:0xFD55 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD55 - ,simpleLowerCaseMapping:0xFD55 - ,simpleTitleCaseMapping:0xFD55 - }, - { code:0xFD56 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD56 - ,simpleLowerCaseMapping:0xFD56 - ,simpleTitleCaseMapping:0xFD56 - }, - { code:0xFD57 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD57 - ,simpleLowerCaseMapping:0xFD57 - ,simpleTitleCaseMapping:0xFD57 - }, - { code:0xFD58 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD58 - ,simpleLowerCaseMapping:0xFD58 - ,simpleTitleCaseMapping:0xFD58 - }, - { code:0xFD59 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD59 - ,simpleLowerCaseMapping:0xFD59 - ,simpleTitleCaseMapping:0xFD59 - }, - { code:0xFD5A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5A - ,simpleLowerCaseMapping:0xFD5A - ,simpleTitleCaseMapping:0xFD5A - }, - { code:0xFD5B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5B - ,simpleLowerCaseMapping:0xFD5B - ,simpleTitleCaseMapping:0xFD5B - }, - { code:0xFD5C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5C - ,simpleLowerCaseMapping:0xFD5C - ,simpleTitleCaseMapping:0xFD5C - }, - { code:0xFD5D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5D - ,simpleLowerCaseMapping:0xFD5D - ,simpleTitleCaseMapping:0xFD5D - }, - { code:0xFD5E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5E - ,simpleLowerCaseMapping:0xFD5E - ,simpleTitleCaseMapping:0xFD5E - }, - { code:0xFD5F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD5F - ,simpleLowerCaseMapping:0xFD5F - ,simpleTitleCaseMapping:0xFD5F - }, - { code:0xFD60 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD60 - ,simpleLowerCaseMapping:0xFD60 - ,simpleTitleCaseMapping:0xFD60 - }, - { code:0xFD61 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD61 - ,simpleLowerCaseMapping:0xFD61 - ,simpleTitleCaseMapping:0xFD61 - }, - { code:0xFD62 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD62 - ,simpleLowerCaseMapping:0xFD62 - ,simpleTitleCaseMapping:0xFD62 - }, - { code:0xFD63 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD63 - ,simpleLowerCaseMapping:0xFD63 - ,simpleTitleCaseMapping:0xFD63 - }, - { code:0xFD64 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD64 - ,simpleLowerCaseMapping:0xFD64 - ,simpleTitleCaseMapping:0xFD64 - }, - { code:0xFD65 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD65 - ,simpleLowerCaseMapping:0xFD65 - ,simpleTitleCaseMapping:0xFD65 - }, - { code:0xFD66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD66 - ,simpleLowerCaseMapping:0xFD66 - ,simpleTitleCaseMapping:0xFD66 - }, - { code:0xFD67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD67 - ,simpleLowerCaseMapping:0xFD67 - ,simpleTitleCaseMapping:0xFD67 - }, - { code:0xFD68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD68 - ,simpleLowerCaseMapping:0xFD68 - ,simpleTitleCaseMapping:0xFD68 - }, - { code:0xFD69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD69 - ,simpleLowerCaseMapping:0xFD69 - ,simpleTitleCaseMapping:0xFD69 - }, - { code:0xFD6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6A - ,simpleLowerCaseMapping:0xFD6A - ,simpleTitleCaseMapping:0xFD6A - }, - { code:0xFD6B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6B - ,simpleLowerCaseMapping:0xFD6B - ,simpleTitleCaseMapping:0xFD6B - }, - { code:0xFD6C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6C - ,simpleLowerCaseMapping:0xFD6C - ,simpleTitleCaseMapping:0xFD6C - }, - { code:0xFD6D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6D - ,simpleLowerCaseMapping:0xFD6D - ,simpleTitleCaseMapping:0xFD6D - }, - { code:0xFD6E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6E - ,simpleLowerCaseMapping:0xFD6E - ,simpleTitleCaseMapping:0xFD6E - }, - { code:0xFD6F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD6F - ,simpleLowerCaseMapping:0xFD6F - ,simpleTitleCaseMapping:0xFD6F - }, - { code:0xFD70 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD70 - ,simpleLowerCaseMapping:0xFD70 - ,simpleTitleCaseMapping:0xFD70 - }, - { code:0xFD71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD71 - ,simpleLowerCaseMapping:0xFD71 - ,simpleTitleCaseMapping:0xFD71 - }, - { code:0xFD72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD72 - ,simpleLowerCaseMapping:0xFD72 - ,simpleTitleCaseMapping:0xFD72 - }, - { code:0xFD73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD73 - ,simpleLowerCaseMapping:0xFD73 - ,simpleTitleCaseMapping:0xFD73 - }, - { code:0xFD74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD74 - ,simpleLowerCaseMapping:0xFD74 - ,simpleTitleCaseMapping:0xFD74 - }, - { code:0xFD75 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD75 - ,simpleLowerCaseMapping:0xFD75 - ,simpleTitleCaseMapping:0xFD75 - }, - { code:0xFD76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD76 - ,simpleLowerCaseMapping:0xFD76 - ,simpleTitleCaseMapping:0xFD76 - }, - { code:0xFD77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD77 - ,simpleLowerCaseMapping:0xFD77 - ,simpleTitleCaseMapping:0xFD77 - }, - { code:0xFD78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD78 - ,simpleLowerCaseMapping:0xFD78 - ,simpleTitleCaseMapping:0xFD78 - }, - { code:0xFD79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD79 - ,simpleLowerCaseMapping:0xFD79 - ,simpleTitleCaseMapping:0xFD79 - }, - { code:0xFD7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7A - ,simpleLowerCaseMapping:0xFD7A - ,simpleTitleCaseMapping:0xFD7A - }, - { code:0xFD7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7B - ,simpleLowerCaseMapping:0xFD7B - ,simpleTitleCaseMapping:0xFD7B - }, - { code:0xFD7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7C - ,simpleLowerCaseMapping:0xFD7C - ,simpleTitleCaseMapping:0xFD7C - }, - { code:0xFD7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7D - ,simpleLowerCaseMapping:0xFD7D - ,simpleTitleCaseMapping:0xFD7D - }, - { code:0xFD7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7E - ,simpleLowerCaseMapping:0xFD7E - ,simpleTitleCaseMapping:0xFD7E - }, - { code:0xFD7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD7F - ,simpleLowerCaseMapping:0xFD7F - ,simpleTitleCaseMapping:0xFD7F - }, - { code:0xFD80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD80 - ,simpleLowerCaseMapping:0xFD80 - ,simpleTitleCaseMapping:0xFD80 - }, - { code:0xFD81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD81 - ,simpleLowerCaseMapping:0xFD81 - ,simpleTitleCaseMapping:0xFD81 - }, - { code:0xFD82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD82 - ,simpleLowerCaseMapping:0xFD82 - ,simpleTitleCaseMapping:0xFD82 - }, - { code:0xFD83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD83 - ,simpleLowerCaseMapping:0xFD83 - ,simpleTitleCaseMapping:0xFD83 - }, - { code:0xFD84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD84 - ,simpleLowerCaseMapping:0xFD84 - ,simpleTitleCaseMapping:0xFD84 - }, - { code:0xFD85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD85 - ,simpleLowerCaseMapping:0xFD85 - ,simpleTitleCaseMapping:0xFD85 - }, - { code:0xFD86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD86 - ,simpleLowerCaseMapping:0xFD86 - ,simpleTitleCaseMapping:0xFD86 - }, - { code:0xFD87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD87 - ,simpleLowerCaseMapping:0xFD87 - ,simpleTitleCaseMapping:0xFD87 - }, - { code:0xFD88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD88 - ,simpleLowerCaseMapping:0xFD88 - ,simpleTitleCaseMapping:0xFD88 - }, - { code:0xFD89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD89 - ,simpleLowerCaseMapping:0xFD89 - ,simpleTitleCaseMapping:0xFD89 - }, - { code:0xFD8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8A - ,simpleLowerCaseMapping:0xFD8A - ,simpleTitleCaseMapping:0xFD8A - }, - { code:0xFD8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8B - ,simpleLowerCaseMapping:0xFD8B - ,simpleTitleCaseMapping:0xFD8B - }, - { code:0xFD8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8C - ,simpleLowerCaseMapping:0xFD8C - ,simpleTitleCaseMapping:0xFD8C - }, - { code:0xFD8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8D - ,simpleLowerCaseMapping:0xFD8D - ,simpleTitleCaseMapping:0xFD8D - }, - { code:0xFD8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8E - ,simpleLowerCaseMapping:0xFD8E - ,simpleTitleCaseMapping:0xFD8E - }, - { code:0xFD8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD8F - ,simpleLowerCaseMapping:0xFD8F - ,simpleTitleCaseMapping:0xFD8F - }, - { code:0xFD92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD92 - ,simpleLowerCaseMapping:0xFD92 - ,simpleTitleCaseMapping:0xFD92 - }, - { code:0xFD93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD93 - ,simpleLowerCaseMapping:0xFD93 - ,simpleTitleCaseMapping:0xFD93 - }, - { code:0xFD94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD94 - ,simpleLowerCaseMapping:0xFD94 - ,simpleTitleCaseMapping:0xFD94 - }, - { code:0xFD95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD95 - ,simpleLowerCaseMapping:0xFD95 - ,simpleTitleCaseMapping:0xFD95 - }, - { code:0xFD96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD96 - ,simpleLowerCaseMapping:0xFD96 - ,simpleTitleCaseMapping:0xFD96 - }, - { code:0xFD97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD97 - ,simpleLowerCaseMapping:0xFD97 - ,simpleTitleCaseMapping:0xFD97 - }, - { code:0xFD98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD98 - ,simpleLowerCaseMapping:0xFD98 - ,simpleTitleCaseMapping:0xFD98 - }, - { code:0xFD99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD99 - ,simpleLowerCaseMapping:0xFD99 - ,simpleTitleCaseMapping:0xFD99 - }, - { code:0xFD9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9A - ,simpleLowerCaseMapping:0xFD9A - ,simpleTitleCaseMapping:0xFD9A - }, - { code:0xFD9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9B - ,simpleLowerCaseMapping:0xFD9B - ,simpleTitleCaseMapping:0xFD9B - }, - { code:0xFD9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9C - ,simpleLowerCaseMapping:0xFD9C - ,simpleTitleCaseMapping:0xFD9C - }, - { code:0xFD9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9D - ,simpleLowerCaseMapping:0xFD9D - ,simpleTitleCaseMapping:0xFD9D - }, - { code:0xFD9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9E - ,simpleLowerCaseMapping:0xFD9E - ,simpleTitleCaseMapping:0xFD9E - }, - { code:0xFD9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFD9F - ,simpleLowerCaseMapping:0xFD9F - ,simpleTitleCaseMapping:0xFD9F - }, - { code:0xFDA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA0 - ,simpleLowerCaseMapping:0xFDA0 - ,simpleTitleCaseMapping:0xFDA0 - }, - { code:0xFDA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA1 - ,simpleLowerCaseMapping:0xFDA1 - ,simpleTitleCaseMapping:0xFDA1 - }, - { code:0xFDA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA2 - ,simpleLowerCaseMapping:0xFDA2 - ,simpleTitleCaseMapping:0xFDA2 - }, - { code:0xFDA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA3 - ,simpleLowerCaseMapping:0xFDA3 - ,simpleTitleCaseMapping:0xFDA3 - }, - { code:0xFDA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA4 - ,simpleLowerCaseMapping:0xFDA4 - ,simpleTitleCaseMapping:0xFDA4 - }, - { code:0xFDA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA5 - ,simpleLowerCaseMapping:0xFDA5 - ,simpleTitleCaseMapping:0xFDA5 - }, - { code:0xFDA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA6 - ,simpleLowerCaseMapping:0xFDA6 - ,simpleTitleCaseMapping:0xFDA6 - }, - { code:0xFDA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA7 - ,simpleLowerCaseMapping:0xFDA7 - ,simpleTitleCaseMapping:0xFDA7 - }, - { code:0xFDA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA8 - ,simpleLowerCaseMapping:0xFDA8 - ,simpleTitleCaseMapping:0xFDA8 - }, - { code:0xFDA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDA9 - ,simpleLowerCaseMapping:0xFDA9 - ,simpleTitleCaseMapping:0xFDA9 - }, - { code:0xFDAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAA - ,simpleLowerCaseMapping:0xFDAA - ,simpleTitleCaseMapping:0xFDAA - }, - { code:0xFDAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAB - ,simpleLowerCaseMapping:0xFDAB - ,simpleTitleCaseMapping:0xFDAB - }, - { code:0xFDAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAC - ,simpleLowerCaseMapping:0xFDAC - ,simpleTitleCaseMapping:0xFDAC - }, - { code:0xFDAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAD - ,simpleLowerCaseMapping:0xFDAD - ,simpleTitleCaseMapping:0xFDAD - }, - { code:0xFDAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAE - ,simpleLowerCaseMapping:0xFDAE - ,simpleTitleCaseMapping:0xFDAE - }, - { code:0xFDAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDAF - ,simpleLowerCaseMapping:0xFDAF - ,simpleTitleCaseMapping:0xFDAF - }, - { code:0xFDB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB0 - ,simpleLowerCaseMapping:0xFDB0 - ,simpleTitleCaseMapping:0xFDB0 - }, - { code:0xFDB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB1 - ,simpleLowerCaseMapping:0xFDB1 - ,simpleTitleCaseMapping:0xFDB1 - }, - { code:0xFDB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB2 - ,simpleLowerCaseMapping:0xFDB2 - ,simpleTitleCaseMapping:0xFDB2 - }, - { code:0xFDB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB3 - ,simpleLowerCaseMapping:0xFDB3 - ,simpleTitleCaseMapping:0xFDB3 - }, - { code:0xFDB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB4 - ,simpleLowerCaseMapping:0xFDB4 - ,simpleTitleCaseMapping:0xFDB4 - }, - { code:0xFDB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB5 - ,simpleLowerCaseMapping:0xFDB5 - ,simpleTitleCaseMapping:0xFDB5 - }, - { code:0xFDB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB6 - ,simpleLowerCaseMapping:0xFDB6 - ,simpleTitleCaseMapping:0xFDB6 - }, - { code:0xFDB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB7 - ,simpleLowerCaseMapping:0xFDB7 - ,simpleTitleCaseMapping:0xFDB7 - }, - { code:0xFDB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB8 - ,simpleLowerCaseMapping:0xFDB8 - ,simpleTitleCaseMapping:0xFDB8 - }, - { code:0xFDB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDB9 - ,simpleLowerCaseMapping:0xFDB9 - ,simpleTitleCaseMapping:0xFDB9 - }, - { code:0xFDBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBA - ,simpleLowerCaseMapping:0xFDBA - ,simpleTitleCaseMapping:0xFDBA - }, - { code:0xFDBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBB - ,simpleLowerCaseMapping:0xFDBB - ,simpleTitleCaseMapping:0xFDBB - }, - { code:0xFDBC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBC - ,simpleLowerCaseMapping:0xFDBC - ,simpleTitleCaseMapping:0xFDBC - }, - { code:0xFDBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBD - ,simpleLowerCaseMapping:0xFDBD - ,simpleTitleCaseMapping:0xFDBD - }, - { code:0xFDBE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBE - ,simpleLowerCaseMapping:0xFDBE - ,simpleTitleCaseMapping:0xFDBE - }, - { code:0xFDBF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDBF - ,simpleLowerCaseMapping:0xFDBF - ,simpleTitleCaseMapping:0xFDBF - }, - { code:0xFDC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC0 - ,simpleLowerCaseMapping:0xFDC0 - ,simpleTitleCaseMapping:0xFDC0 - }, - { code:0xFDC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC1 - ,simpleLowerCaseMapping:0xFDC1 - ,simpleTitleCaseMapping:0xFDC1 - }, - { code:0xFDC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC2 - ,simpleLowerCaseMapping:0xFDC2 - ,simpleTitleCaseMapping:0xFDC2 - }, - { code:0xFDC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC3 - ,simpleLowerCaseMapping:0xFDC3 - ,simpleTitleCaseMapping:0xFDC3 - }, - { code:0xFDC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC4 - ,simpleLowerCaseMapping:0xFDC4 - ,simpleTitleCaseMapping:0xFDC4 - }, - { code:0xFDC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC5 - ,simpleLowerCaseMapping:0xFDC5 - ,simpleTitleCaseMapping:0xFDC5 - }, - { code:0xFDC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC6 - ,simpleLowerCaseMapping:0xFDC6 - ,simpleTitleCaseMapping:0xFDC6 - }, - { code:0xFDC7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDC7 - ,simpleLowerCaseMapping:0xFDC7 - ,simpleTitleCaseMapping:0xFDC7 - }, - { code:0xFDF0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF0 - ,simpleLowerCaseMapping:0xFDF0 - ,simpleTitleCaseMapping:0xFDF0 - }, - { code:0xFDF1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF1 - ,simpleLowerCaseMapping:0xFDF1 - ,simpleTitleCaseMapping:0xFDF1 - }, - { code:0xFDF2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF2 - ,simpleLowerCaseMapping:0xFDF2 - ,simpleTitleCaseMapping:0xFDF2 - }, - { code:0xFDF3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF3 - ,simpleLowerCaseMapping:0xFDF3 - ,simpleTitleCaseMapping:0xFDF3 - }, - { code:0xFDF4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF4 - ,simpleLowerCaseMapping:0xFDF4 - ,simpleTitleCaseMapping:0xFDF4 - }, - { code:0xFDF5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF5 - ,simpleLowerCaseMapping:0xFDF5 - ,simpleTitleCaseMapping:0xFDF5 - }, - { code:0xFDF6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF6 - ,simpleLowerCaseMapping:0xFDF6 - ,simpleTitleCaseMapping:0xFDF6 - }, - { code:0xFDF7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF7 - ,simpleLowerCaseMapping:0xFDF7 - ,simpleTitleCaseMapping:0xFDF7 - }, - { code:0xFDF8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF8 - ,simpleLowerCaseMapping:0xFDF8 - ,simpleTitleCaseMapping:0xFDF8 - }, - { code:0xFDF9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDF9 - ,simpleLowerCaseMapping:0xFDF9 - ,simpleTitleCaseMapping:0xFDF9 - }, - { code:0xFDFA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDFA - ,simpleLowerCaseMapping:0xFDFA - ,simpleTitleCaseMapping:0xFDFA - }, - { code:0xFDFB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFDFB - ,simpleLowerCaseMapping:0xFDFB - ,simpleTitleCaseMapping:0xFDFB - }, - { code:0xFDFC - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFDFC - ,simpleLowerCaseMapping:0xFDFC - ,simpleTitleCaseMapping:0xFDFC - }, - { code:0xFDFD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFDFD - ,simpleLowerCaseMapping:0xFDFD - ,simpleTitleCaseMapping:0xFDFD - }, - { code:0xFE00 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE00 - ,simpleLowerCaseMapping:0xFE00 - ,simpleTitleCaseMapping:0xFE00 - }, - { code:0xFE01 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE01 - ,simpleLowerCaseMapping:0xFE01 - ,simpleTitleCaseMapping:0xFE01 - }, - { code:0xFE02 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE02 - ,simpleLowerCaseMapping:0xFE02 - ,simpleTitleCaseMapping:0xFE02 - }, - { code:0xFE03 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE03 - ,simpleLowerCaseMapping:0xFE03 - ,simpleTitleCaseMapping:0xFE03 - }, - { code:0xFE04 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE04 - ,simpleLowerCaseMapping:0xFE04 - ,simpleTitleCaseMapping:0xFE04 - }, - { code:0xFE05 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE05 - ,simpleLowerCaseMapping:0xFE05 - ,simpleTitleCaseMapping:0xFE05 - }, - { code:0xFE06 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE06 - ,simpleLowerCaseMapping:0xFE06 - ,simpleTitleCaseMapping:0xFE06 - }, - { code:0xFE07 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE07 - ,simpleLowerCaseMapping:0xFE07 - ,simpleTitleCaseMapping:0xFE07 - }, - { code:0xFE08 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE08 - ,simpleLowerCaseMapping:0xFE08 - ,simpleTitleCaseMapping:0xFE08 - }, - { code:0xFE09 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE09 - ,simpleLowerCaseMapping:0xFE09 - ,simpleTitleCaseMapping:0xFE09 - }, - { code:0xFE0A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0A - ,simpleLowerCaseMapping:0xFE0A - ,simpleTitleCaseMapping:0xFE0A - }, - { code:0xFE0B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0B - ,simpleLowerCaseMapping:0xFE0B - ,simpleTitleCaseMapping:0xFE0B - }, - { code:0xFE0C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0C - ,simpleLowerCaseMapping:0xFE0C - ,simpleTitleCaseMapping:0xFE0C - }, - { code:0xFE0D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0D - ,simpleLowerCaseMapping:0xFE0D - ,simpleTitleCaseMapping:0xFE0D - }, - { code:0xFE0E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0E - ,simpleLowerCaseMapping:0xFE0E - ,simpleTitleCaseMapping:0xFE0E - }, - { code:0xFE0F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE0F - ,simpleLowerCaseMapping:0xFE0F - ,simpleTitleCaseMapping:0xFE0F - }, - { code:0xFE10 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE10 - ,simpleLowerCaseMapping:0xFE10 - ,simpleTitleCaseMapping:0xFE10 - }, - { code:0xFE11 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE11 - ,simpleLowerCaseMapping:0xFE11 - ,simpleTitleCaseMapping:0xFE11 - }, - { code:0xFE12 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE12 - ,simpleLowerCaseMapping:0xFE12 - ,simpleTitleCaseMapping:0xFE12 - }, - { code:0xFE13 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE13 - ,simpleLowerCaseMapping:0xFE13 - ,simpleTitleCaseMapping:0xFE13 - }, - { code:0xFE14 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE14 - ,simpleLowerCaseMapping:0xFE14 - ,simpleTitleCaseMapping:0xFE14 - }, - { code:0xFE15 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE15 - ,simpleLowerCaseMapping:0xFE15 - ,simpleTitleCaseMapping:0xFE15 - }, - { code:0xFE16 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE16 - ,simpleLowerCaseMapping:0xFE16 - ,simpleTitleCaseMapping:0xFE16 - }, - { code:0xFE17 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE17 - ,simpleLowerCaseMapping:0xFE17 - ,simpleTitleCaseMapping:0xFE17 - }, - { code:0xFE18 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE18 - ,simpleLowerCaseMapping:0xFE18 - ,simpleTitleCaseMapping:0xFE18 - }, - { code:0xFE19 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE19 - ,simpleLowerCaseMapping:0xFE19 - ,simpleTitleCaseMapping:0xFE19 - }, - { code:0xFE20 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE20 - ,simpleLowerCaseMapping:0xFE20 - ,simpleTitleCaseMapping:0xFE20 - }, - { code:0xFE21 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE21 - ,simpleLowerCaseMapping:0xFE21 - ,simpleTitleCaseMapping:0xFE21 - }, - { code:0xFE22 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE22 - ,simpleLowerCaseMapping:0xFE22 - ,simpleTitleCaseMapping:0xFE22 - }, - { code:0xFE23 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xFE23 - ,simpleLowerCaseMapping:0xFE23 - ,simpleTitleCaseMapping:0xFE23 - }, - { code:0xFE30 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE30 - ,simpleLowerCaseMapping:0xFE30 - ,simpleTitleCaseMapping:0xFE30 - }, - { code:0xFE31 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0xFE31 - ,simpleLowerCaseMapping:0xFE31 - ,simpleTitleCaseMapping:0xFE31 - }, - { code:0xFE32 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0xFE32 - ,simpleLowerCaseMapping:0xFE32 - ,simpleTitleCaseMapping:0xFE32 - }, - { code:0xFE33 - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFE33 - ,simpleLowerCaseMapping:0xFE33 - ,simpleTitleCaseMapping:0xFE33 - }, - { code:0xFE34 - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFE34 - ,simpleLowerCaseMapping:0xFE34 - ,simpleTitleCaseMapping:0xFE34 - }, - { code:0xFE35 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE35 - ,simpleLowerCaseMapping:0xFE35 - ,simpleTitleCaseMapping:0xFE35 - }, - { code:0xFE36 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE36 - ,simpleLowerCaseMapping:0xFE36 - ,simpleTitleCaseMapping:0xFE36 - }, - { code:0xFE37 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE37 - ,simpleLowerCaseMapping:0xFE37 - ,simpleTitleCaseMapping:0xFE37 - }, - { code:0xFE38 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE38 - ,simpleLowerCaseMapping:0xFE38 - ,simpleTitleCaseMapping:0xFE38 - }, - { code:0xFE39 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE39 - ,simpleLowerCaseMapping:0xFE39 - ,simpleTitleCaseMapping:0xFE39 - }, - { code:0xFE3A - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE3A - ,simpleLowerCaseMapping:0xFE3A - ,simpleTitleCaseMapping:0xFE3A - }, - { code:0xFE3B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE3B - ,simpleLowerCaseMapping:0xFE3B - ,simpleTitleCaseMapping:0xFE3B - }, - { code:0xFE3C - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE3C - ,simpleLowerCaseMapping:0xFE3C - ,simpleTitleCaseMapping:0xFE3C - }, - { code:0xFE3D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE3D - ,simpleLowerCaseMapping:0xFE3D - ,simpleTitleCaseMapping:0xFE3D - }, - { code:0xFE3E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE3E - ,simpleLowerCaseMapping:0xFE3E - ,simpleTitleCaseMapping:0xFE3E - }, - { code:0xFE3F - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE3F - ,simpleLowerCaseMapping:0xFE3F - ,simpleTitleCaseMapping:0xFE3F - }, - { code:0xFE40 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE40 - ,simpleLowerCaseMapping:0xFE40 - ,simpleTitleCaseMapping:0xFE40 - }, - { code:0xFE41 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE41 - ,simpleLowerCaseMapping:0xFE41 - ,simpleTitleCaseMapping:0xFE41 - }, - { code:0xFE42 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE42 - ,simpleLowerCaseMapping:0xFE42 - ,simpleTitleCaseMapping:0xFE42 - }, - { code:0xFE43 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE43 - ,simpleLowerCaseMapping:0xFE43 - ,simpleTitleCaseMapping:0xFE43 - }, - { code:0xFE44 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE44 - ,simpleLowerCaseMapping:0xFE44 - ,simpleTitleCaseMapping:0xFE44 - }, - { code:0xFE45 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE45 - ,simpleLowerCaseMapping:0xFE45 - ,simpleTitleCaseMapping:0xFE45 - }, - { code:0xFE46 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE46 - ,simpleLowerCaseMapping:0xFE46 - ,simpleTitleCaseMapping:0xFE46 - }, - { code:0xFE47 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE47 - ,simpleLowerCaseMapping:0xFE47 - ,simpleTitleCaseMapping:0xFE47 - }, - { code:0xFE48 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE48 - ,simpleLowerCaseMapping:0xFE48 - ,simpleTitleCaseMapping:0xFE48 - }, - { code:0xFE49 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE49 - ,simpleLowerCaseMapping:0xFE49 - ,simpleTitleCaseMapping:0xFE49 - }, - { code:0xFE4A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE4A - ,simpleLowerCaseMapping:0xFE4A - ,simpleTitleCaseMapping:0xFE4A - }, - { code:0xFE4B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE4B - ,simpleLowerCaseMapping:0xFE4B - ,simpleTitleCaseMapping:0xFE4B - }, - { code:0xFE4C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE4C - ,simpleLowerCaseMapping:0xFE4C - ,simpleTitleCaseMapping:0xFE4C - }, - { code:0xFE4D - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFE4D - ,simpleLowerCaseMapping:0xFE4D - ,simpleTitleCaseMapping:0xFE4D - }, - { code:0xFE4E - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFE4E - ,simpleLowerCaseMapping:0xFE4E - ,simpleTitleCaseMapping:0xFE4E - }, - { code:0xFE4F - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFE4F - ,simpleLowerCaseMapping:0xFE4F - ,simpleTitleCaseMapping:0xFE4F - }, - { code:0xFE50 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE50 - ,simpleLowerCaseMapping:0xFE50 - ,simpleTitleCaseMapping:0xFE50 - }, - { code:0xFE51 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE51 - ,simpleLowerCaseMapping:0xFE51 - ,simpleTitleCaseMapping:0xFE51 - }, - { code:0xFE52 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE52 - ,simpleLowerCaseMapping:0xFE52 - ,simpleTitleCaseMapping:0xFE52 - }, - { code:0xFE54 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE54 - ,simpleLowerCaseMapping:0xFE54 - ,simpleTitleCaseMapping:0xFE54 - }, - { code:0xFE55 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE55 - ,simpleLowerCaseMapping:0xFE55 - ,simpleTitleCaseMapping:0xFE55 - }, - { code:0xFE56 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE56 - ,simpleLowerCaseMapping:0xFE56 - ,simpleTitleCaseMapping:0xFE56 - }, - { code:0xFE57 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE57 - ,simpleLowerCaseMapping:0xFE57 - ,simpleTitleCaseMapping:0xFE57 - }, - { code:0xFE58 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0xFE58 - ,simpleLowerCaseMapping:0xFE58 - ,simpleTitleCaseMapping:0xFE58 - }, - { code:0xFE59 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE59 - ,simpleLowerCaseMapping:0xFE59 - ,simpleTitleCaseMapping:0xFE59 - }, - { code:0xFE5A - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE5A - ,simpleLowerCaseMapping:0xFE5A - ,simpleTitleCaseMapping:0xFE5A - }, - { code:0xFE5B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE5B - ,simpleLowerCaseMapping:0xFE5B - ,simpleTitleCaseMapping:0xFE5B - }, - { code:0xFE5C - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE5C - ,simpleLowerCaseMapping:0xFE5C - ,simpleTitleCaseMapping:0xFE5C - }, - { code:0xFE5D - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFE5D - ,simpleLowerCaseMapping:0xFE5D - ,simpleTitleCaseMapping:0xFE5D - }, - { code:0xFE5E - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFE5E - ,simpleLowerCaseMapping:0xFE5E - ,simpleTitleCaseMapping:0xFE5E - }, - { code:0xFE5F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE5F - ,simpleLowerCaseMapping:0xFE5F - ,simpleTitleCaseMapping:0xFE5F - }, - { code:0xFE60 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE60 - ,simpleLowerCaseMapping:0xFE60 - ,simpleTitleCaseMapping:0xFE60 - }, - { code:0xFE61 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE61 - ,simpleLowerCaseMapping:0xFE61 - ,simpleTitleCaseMapping:0xFE61 - }, - { code:0xFE62 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFE62 - ,simpleLowerCaseMapping:0xFE62 - ,simpleTitleCaseMapping:0xFE62 - }, - { code:0xFE63 - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0xFE63 - ,simpleLowerCaseMapping:0xFE63 - ,simpleTitleCaseMapping:0xFE63 - }, - { code:0xFE64 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFE64 - ,simpleLowerCaseMapping:0xFE64 - ,simpleTitleCaseMapping:0xFE64 - }, - { code:0xFE65 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFE65 - ,simpleLowerCaseMapping:0xFE65 - ,simpleTitleCaseMapping:0xFE65 - }, - { code:0xFE66 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFE66 - ,simpleLowerCaseMapping:0xFE66 - ,simpleTitleCaseMapping:0xFE66 - }, - { code:0xFE68 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE68 - ,simpleLowerCaseMapping:0xFE68 - ,simpleTitleCaseMapping:0xFE68 - }, - { code:0xFE69 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFE69 - ,simpleLowerCaseMapping:0xFE69 - ,simpleTitleCaseMapping:0xFE69 - }, - { code:0xFE6A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE6A - ,simpleLowerCaseMapping:0xFE6A - ,simpleTitleCaseMapping:0xFE6A - }, - { code:0xFE6B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFE6B - ,simpleLowerCaseMapping:0xFE6B - ,simpleTitleCaseMapping:0xFE6B - }, - { code:0xFE70 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE70 - ,simpleLowerCaseMapping:0xFE70 - ,simpleTitleCaseMapping:0xFE70 - }, - { code:0xFE71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE71 - ,simpleLowerCaseMapping:0xFE71 - ,simpleTitleCaseMapping:0xFE71 - }, - { code:0xFE72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE72 - ,simpleLowerCaseMapping:0xFE72 - ,simpleTitleCaseMapping:0xFE72 - }, - { code:0xFE73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE73 - ,simpleLowerCaseMapping:0xFE73 - ,simpleTitleCaseMapping:0xFE73 - }, - { code:0xFE74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE74 - ,simpleLowerCaseMapping:0xFE74 - ,simpleTitleCaseMapping:0xFE74 - }, - { code:0xFE76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE76 - ,simpleLowerCaseMapping:0xFE76 - ,simpleTitleCaseMapping:0xFE76 - }, - { code:0xFE77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE77 - ,simpleLowerCaseMapping:0xFE77 - ,simpleTitleCaseMapping:0xFE77 - }, - { code:0xFE78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE78 - ,simpleLowerCaseMapping:0xFE78 - ,simpleTitleCaseMapping:0xFE78 - }, - { code:0xFE79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE79 - ,simpleLowerCaseMapping:0xFE79 - ,simpleTitleCaseMapping:0xFE79 - }, - { code:0xFE7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7A - ,simpleLowerCaseMapping:0xFE7A - ,simpleTitleCaseMapping:0xFE7A - }, - { code:0xFE7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7B - ,simpleLowerCaseMapping:0xFE7B - ,simpleTitleCaseMapping:0xFE7B - }, - { code:0xFE7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7C - ,simpleLowerCaseMapping:0xFE7C - ,simpleTitleCaseMapping:0xFE7C - }, - { code:0xFE7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7D - ,simpleLowerCaseMapping:0xFE7D - ,simpleTitleCaseMapping:0xFE7D - }, - { code:0xFE7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7E - ,simpleLowerCaseMapping:0xFE7E - ,simpleTitleCaseMapping:0xFE7E - }, - { code:0xFE7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE7F - ,simpleLowerCaseMapping:0xFE7F - ,simpleTitleCaseMapping:0xFE7F - }, - { code:0xFE80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE80 - ,simpleLowerCaseMapping:0xFE80 - ,simpleTitleCaseMapping:0xFE80 - }, - { code:0xFE81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE81 - ,simpleLowerCaseMapping:0xFE81 - ,simpleTitleCaseMapping:0xFE81 - }, - { code:0xFE82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE82 - ,simpleLowerCaseMapping:0xFE82 - ,simpleTitleCaseMapping:0xFE82 - }, - { code:0xFE83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE83 - ,simpleLowerCaseMapping:0xFE83 - ,simpleTitleCaseMapping:0xFE83 - }, - { code:0xFE84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE84 - ,simpleLowerCaseMapping:0xFE84 - ,simpleTitleCaseMapping:0xFE84 - }, - { code:0xFE85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE85 - ,simpleLowerCaseMapping:0xFE85 - ,simpleTitleCaseMapping:0xFE85 - }, - { code:0xFE86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE86 - ,simpleLowerCaseMapping:0xFE86 - ,simpleTitleCaseMapping:0xFE86 - }, - { code:0xFE87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE87 - ,simpleLowerCaseMapping:0xFE87 - ,simpleTitleCaseMapping:0xFE87 - }, - { code:0xFE88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE88 - ,simpleLowerCaseMapping:0xFE88 - ,simpleTitleCaseMapping:0xFE88 - }, - { code:0xFE89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE89 - ,simpleLowerCaseMapping:0xFE89 - ,simpleTitleCaseMapping:0xFE89 - }, - { code:0xFE8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8A - ,simpleLowerCaseMapping:0xFE8A - ,simpleTitleCaseMapping:0xFE8A - }, - { code:0xFE8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8B - ,simpleLowerCaseMapping:0xFE8B - ,simpleTitleCaseMapping:0xFE8B - }, - { code:0xFE8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8C - ,simpleLowerCaseMapping:0xFE8C - ,simpleTitleCaseMapping:0xFE8C - }, - { code:0xFE8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8D - ,simpleLowerCaseMapping:0xFE8D - ,simpleTitleCaseMapping:0xFE8D - }, - { code:0xFE8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8E - ,simpleLowerCaseMapping:0xFE8E - ,simpleTitleCaseMapping:0xFE8E - }, - { code:0xFE8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE8F - ,simpleLowerCaseMapping:0xFE8F - ,simpleTitleCaseMapping:0xFE8F - }, - { code:0xFE90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE90 - ,simpleLowerCaseMapping:0xFE90 - ,simpleTitleCaseMapping:0xFE90 - }, - { code:0xFE91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE91 - ,simpleLowerCaseMapping:0xFE91 - ,simpleTitleCaseMapping:0xFE91 - }, - { code:0xFE92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE92 - ,simpleLowerCaseMapping:0xFE92 - ,simpleTitleCaseMapping:0xFE92 - }, - { code:0xFE93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE93 - ,simpleLowerCaseMapping:0xFE93 - ,simpleTitleCaseMapping:0xFE93 - }, - { code:0xFE94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE94 - ,simpleLowerCaseMapping:0xFE94 - ,simpleTitleCaseMapping:0xFE94 - }, - { code:0xFE95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE95 - ,simpleLowerCaseMapping:0xFE95 - ,simpleTitleCaseMapping:0xFE95 - }, - { code:0xFE96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE96 - ,simpleLowerCaseMapping:0xFE96 - ,simpleTitleCaseMapping:0xFE96 - }, - { code:0xFE97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE97 - ,simpleLowerCaseMapping:0xFE97 - ,simpleTitleCaseMapping:0xFE97 - }, - { code:0xFE98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE98 - ,simpleLowerCaseMapping:0xFE98 - ,simpleTitleCaseMapping:0xFE98 - }, - { code:0xFE99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE99 - ,simpleLowerCaseMapping:0xFE99 - ,simpleTitleCaseMapping:0xFE99 - }, - { code:0xFE9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9A - ,simpleLowerCaseMapping:0xFE9A - ,simpleTitleCaseMapping:0xFE9A - }, - { code:0xFE9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9B - ,simpleLowerCaseMapping:0xFE9B - ,simpleTitleCaseMapping:0xFE9B - }, - { code:0xFE9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9C - ,simpleLowerCaseMapping:0xFE9C - ,simpleTitleCaseMapping:0xFE9C - }, - { code:0xFE9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9D - ,simpleLowerCaseMapping:0xFE9D - ,simpleTitleCaseMapping:0xFE9D - }, - { code:0xFE9E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9E - ,simpleLowerCaseMapping:0xFE9E - ,simpleTitleCaseMapping:0xFE9E - }, - { code:0xFE9F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFE9F - ,simpleLowerCaseMapping:0xFE9F - ,simpleTitleCaseMapping:0xFE9F - }, - { code:0xFEA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA0 - ,simpleLowerCaseMapping:0xFEA0 - ,simpleTitleCaseMapping:0xFEA0 - }, - { code:0xFEA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA1 - ,simpleLowerCaseMapping:0xFEA1 - ,simpleTitleCaseMapping:0xFEA1 - }, - { code:0xFEA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA2 - ,simpleLowerCaseMapping:0xFEA2 - ,simpleTitleCaseMapping:0xFEA2 - }, - { code:0xFEA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA3 - ,simpleLowerCaseMapping:0xFEA3 - ,simpleTitleCaseMapping:0xFEA3 - }, - { code:0xFEA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA4 - ,simpleLowerCaseMapping:0xFEA4 - ,simpleTitleCaseMapping:0xFEA4 - }, - { code:0xFEA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA5 - ,simpleLowerCaseMapping:0xFEA5 - ,simpleTitleCaseMapping:0xFEA5 - }, - { code:0xFEA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA6 - ,simpleLowerCaseMapping:0xFEA6 - ,simpleTitleCaseMapping:0xFEA6 - }, - { code:0xFEA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA7 - ,simpleLowerCaseMapping:0xFEA7 - ,simpleTitleCaseMapping:0xFEA7 - }, - { code:0xFEA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA8 - ,simpleLowerCaseMapping:0xFEA8 - ,simpleTitleCaseMapping:0xFEA8 - }, - { code:0xFEA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEA9 - ,simpleLowerCaseMapping:0xFEA9 - ,simpleTitleCaseMapping:0xFEA9 - }, - { code:0xFEAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAA - ,simpleLowerCaseMapping:0xFEAA - ,simpleTitleCaseMapping:0xFEAA - }, - { code:0xFEAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAB - ,simpleLowerCaseMapping:0xFEAB - ,simpleTitleCaseMapping:0xFEAB - }, - { code:0xFEAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAC - ,simpleLowerCaseMapping:0xFEAC - ,simpleTitleCaseMapping:0xFEAC - }, - { code:0xFEAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAD - ,simpleLowerCaseMapping:0xFEAD - ,simpleTitleCaseMapping:0xFEAD - }, - { code:0xFEAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAE - ,simpleLowerCaseMapping:0xFEAE - ,simpleTitleCaseMapping:0xFEAE - }, - { code:0xFEAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEAF - ,simpleLowerCaseMapping:0xFEAF - ,simpleTitleCaseMapping:0xFEAF - }, - { code:0xFEB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB0 - ,simpleLowerCaseMapping:0xFEB0 - ,simpleTitleCaseMapping:0xFEB0 - }, - { code:0xFEB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB1 - ,simpleLowerCaseMapping:0xFEB1 - ,simpleTitleCaseMapping:0xFEB1 - }, - { code:0xFEB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB2 - ,simpleLowerCaseMapping:0xFEB2 - ,simpleTitleCaseMapping:0xFEB2 - }, - { code:0xFEB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB3 - ,simpleLowerCaseMapping:0xFEB3 - ,simpleTitleCaseMapping:0xFEB3 - }, - { code:0xFEB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB4 - ,simpleLowerCaseMapping:0xFEB4 - ,simpleTitleCaseMapping:0xFEB4 - }, - { code:0xFEB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB5 - ,simpleLowerCaseMapping:0xFEB5 - ,simpleTitleCaseMapping:0xFEB5 - }, - { code:0xFEB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB6 - ,simpleLowerCaseMapping:0xFEB6 - ,simpleTitleCaseMapping:0xFEB6 - }, - { code:0xFEB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB7 - ,simpleLowerCaseMapping:0xFEB7 - ,simpleTitleCaseMapping:0xFEB7 - }, - { code:0xFEB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB8 - ,simpleLowerCaseMapping:0xFEB8 - ,simpleTitleCaseMapping:0xFEB8 - }, - { code:0xFEB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEB9 - ,simpleLowerCaseMapping:0xFEB9 - ,simpleTitleCaseMapping:0xFEB9 - }, - { code:0xFEBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBA - ,simpleLowerCaseMapping:0xFEBA - ,simpleTitleCaseMapping:0xFEBA - }, - { code:0xFEBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBB - ,simpleLowerCaseMapping:0xFEBB - ,simpleTitleCaseMapping:0xFEBB - }, - { code:0xFEBC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBC - ,simpleLowerCaseMapping:0xFEBC - ,simpleTitleCaseMapping:0xFEBC - }, - { code:0xFEBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBD - ,simpleLowerCaseMapping:0xFEBD - ,simpleTitleCaseMapping:0xFEBD - }, - { code:0xFEBE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBE - ,simpleLowerCaseMapping:0xFEBE - ,simpleTitleCaseMapping:0xFEBE - }, - { code:0xFEBF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEBF - ,simpleLowerCaseMapping:0xFEBF - ,simpleTitleCaseMapping:0xFEBF - }, - { code:0xFEC0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC0 - ,simpleLowerCaseMapping:0xFEC0 - ,simpleTitleCaseMapping:0xFEC0 - }, - { code:0xFEC1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC1 - ,simpleLowerCaseMapping:0xFEC1 - ,simpleTitleCaseMapping:0xFEC1 - }, - { code:0xFEC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC2 - ,simpleLowerCaseMapping:0xFEC2 - ,simpleTitleCaseMapping:0xFEC2 - }, - { code:0xFEC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC3 - ,simpleLowerCaseMapping:0xFEC3 - ,simpleTitleCaseMapping:0xFEC3 - }, - { code:0xFEC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC4 - ,simpleLowerCaseMapping:0xFEC4 - ,simpleTitleCaseMapping:0xFEC4 - }, - { code:0xFEC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC5 - ,simpleLowerCaseMapping:0xFEC5 - ,simpleTitleCaseMapping:0xFEC5 - }, - { code:0xFEC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC6 - ,simpleLowerCaseMapping:0xFEC6 - ,simpleTitleCaseMapping:0xFEC6 - }, - { code:0xFEC7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC7 - ,simpleLowerCaseMapping:0xFEC7 - ,simpleTitleCaseMapping:0xFEC7 - }, - { code:0xFEC8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC8 - ,simpleLowerCaseMapping:0xFEC8 - ,simpleTitleCaseMapping:0xFEC8 - }, - { code:0xFEC9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEC9 - ,simpleLowerCaseMapping:0xFEC9 - ,simpleTitleCaseMapping:0xFEC9 - }, - { code:0xFECA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECA - ,simpleLowerCaseMapping:0xFECA - ,simpleTitleCaseMapping:0xFECA - }, - { code:0xFECB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECB - ,simpleLowerCaseMapping:0xFECB - ,simpleTitleCaseMapping:0xFECB - }, - { code:0xFECC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECC - ,simpleLowerCaseMapping:0xFECC - ,simpleTitleCaseMapping:0xFECC - }, - { code:0xFECD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECD - ,simpleLowerCaseMapping:0xFECD - ,simpleTitleCaseMapping:0xFECD - }, - { code:0xFECE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECE - ,simpleLowerCaseMapping:0xFECE - ,simpleTitleCaseMapping:0xFECE - }, - { code:0xFECF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFECF - ,simpleLowerCaseMapping:0xFECF - ,simpleTitleCaseMapping:0xFECF - }, - { code:0xFED0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED0 - ,simpleLowerCaseMapping:0xFED0 - ,simpleTitleCaseMapping:0xFED0 - }, - { code:0xFED1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED1 - ,simpleLowerCaseMapping:0xFED1 - ,simpleTitleCaseMapping:0xFED1 - }, - { code:0xFED2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED2 - ,simpleLowerCaseMapping:0xFED2 - ,simpleTitleCaseMapping:0xFED2 - }, - { code:0xFED3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED3 - ,simpleLowerCaseMapping:0xFED3 - ,simpleTitleCaseMapping:0xFED3 - }, - { code:0xFED4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED4 - ,simpleLowerCaseMapping:0xFED4 - ,simpleTitleCaseMapping:0xFED4 - }, - { code:0xFED5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED5 - ,simpleLowerCaseMapping:0xFED5 - ,simpleTitleCaseMapping:0xFED5 - }, - { code:0xFED6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED6 - ,simpleLowerCaseMapping:0xFED6 - ,simpleTitleCaseMapping:0xFED6 - }, - { code:0xFED7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED7 - ,simpleLowerCaseMapping:0xFED7 - ,simpleTitleCaseMapping:0xFED7 - }, - { code:0xFED8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED8 - ,simpleLowerCaseMapping:0xFED8 - ,simpleTitleCaseMapping:0xFED8 - }, - { code:0xFED9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFED9 - ,simpleLowerCaseMapping:0xFED9 - ,simpleTitleCaseMapping:0xFED9 - }, - { code:0xFEDA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDA - ,simpleLowerCaseMapping:0xFEDA - ,simpleTitleCaseMapping:0xFEDA - }, - { code:0xFEDB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDB - ,simpleLowerCaseMapping:0xFEDB - ,simpleTitleCaseMapping:0xFEDB - }, - { code:0xFEDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDC - ,simpleLowerCaseMapping:0xFEDC - ,simpleTitleCaseMapping:0xFEDC - }, - { code:0xFEDD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDD - ,simpleLowerCaseMapping:0xFEDD - ,simpleTitleCaseMapping:0xFEDD - }, - { code:0xFEDE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDE - ,simpleLowerCaseMapping:0xFEDE - ,simpleTitleCaseMapping:0xFEDE - }, - { code:0xFEDF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEDF - ,simpleLowerCaseMapping:0xFEDF - ,simpleTitleCaseMapping:0xFEDF - }, - { code:0xFEE0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE0 - ,simpleLowerCaseMapping:0xFEE0 - ,simpleTitleCaseMapping:0xFEE0 - }, - { code:0xFEE1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE1 - ,simpleLowerCaseMapping:0xFEE1 - ,simpleTitleCaseMapping:0xFEE1 - }, - { code:0xFEE2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE2 - ,simpleLowerCaseMapping:0xFEE2 - ,simpleTitleCaseMapping:0xFEE2 - }, - { code:0xFEE3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE3 - ,simpleLowerCaseMapping:0xFEE3 - ,simpleTitleCaseMapping:0xFEE3 - }, - { code:0xFEE4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE4 - ,simpleLowerCaseMapping:0xFEE4 - ,simpleTitleCaseMapping:0xFEE4 - }, - { code:0xFEE5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE5 - ,simpleLowerCaseMapping:0xFEE5 - ,simpleTitleCaseMapping:0xFEE5 - }, - { code:0xFEE6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE6 - ,simpleLowerCaseMapping:0xFEE6 - ,simpleTitleCaseMapping:0xFEE6 - }, - { code:0xFEE7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE7 - ,simpleLowerCaseMapping:0xFEE7 - ,simpleTitleCaseMapping:0xFEE7 - }, - { code:0xFEE8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE8 - ,simpleLowerCaseMapping:0xFEE8 - ,simpleTitleCaseMapping:0xFEE8 - }, - { code:0xFEE9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEE9 - ,simpleLowerCaseMapping:0xFEE9 - ,simpleTitleCaseMapping:0xFEE9 - }, - { code:0xFEEA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEEA - ,simpleLowerCaseMapping:0xFEEA - ,simpleTitleCaseMapping:0xFEEA - }, - { code:0xFEEB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEEB - ,simpleLowerCaseMapping:0xFEEB - ,simpleTitleCaseMapping:0xFEEB - }, - { code:0xFEEC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEEC - ,simpleLowerCaseMapping:0xFEEC - ,simpleTitleCaseMapping:0xFEEC - }, - { code:0xFEED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEED - ,simpleLowerCaseMapping:0xFEED - ,simpleTitleCaseMapping:0xFEED - }, - { code:0xFEEE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEEE - ,simpleLowerCaseMapping:0xFEEE - ,simpleTitleCaseMapping:0xFEEE - }, - { code:0xFEEF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEEF - ,simpleLowerCaseMapping:0xFEEF - ,simpleTitleCaseMapping:0xFEEF - }, - { code:0xFEF0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF0 - ,simpleLowerCaseMapping:0xFEF0 - ,simpleTitleCaseMapping:0xFEF0 - }, - { code:0xFEF1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF1 - ,simpleLowerCaseMapping:0xFEF1 - ,simpleTitleCaseMapping:0xFEF1 - }, - { code:0xFEF2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF2 - ,simpleLowerCaseMapping:0xFEF2 - ,simpleTitleCaseMapping:0xFEF2 - }, - { code:0xFEF3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF3 - ,simpleLowerCaseMapping:0xFEF3 - ,simpleTitleCaseMapping:0xFEF3 - }, - { code:0xFEF4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF4 - ,simpleLowerCaseMapping:0xFEF4 - ,simpleTitleCaseMapping:0xFEF4 - }, - { code:0xFEF5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF5 - ,simpleLowerCaseMapping:0xFEF5 - ,simpleTitleCaseMapping:0xFEF5 - }, - { code:0xFEF6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF6 - ,simpleLowerCaseMapping:0xFEF6 - ,simpleTitleCaseMapping:0xFEF6 - }, - { code:0xFEF7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF7 - ,simpleLowerCaseMapping:0xFEF7 - ,simpleTitleCaseMapping:0xFEF7 - }, - { code:0xFEF8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF8 - ,simpleLowerCaseMapping:0xFEF8 - ,simpleTitleCaseMapping:0xFEF8 - }, - { code:0xFEF9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEF9 - ,simpleLowerCaseMapping:0xFEF9 - ,simpleTitleCaseMapping:0xFEF9 - }, - { code:0xFEFA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEFA - ,simpleLowerCaseMapping:0xFEFA - ,simpleTitleCaseMapping:0xFEFA - }, - { code:0xFEFB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEFB - ,simpleLowerCaseMapping:0xFEFB - ,simpleTitleCaseMapping:0xFEFB - }, - { code:0xFEFC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFEFC - ,simpleLowerCaseMapping:0xFEFC - ,simpleTitleCaseMapping:0xFEFC - }, - { code:0xFEFF - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xFEFF - ,simpleLowerCaseMapping:0xFEFF - ,simpleTitleCaseMapping:0xFEFF - }, - { code:0xFF01 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF01 - ,simpleLowerCaseMapping:0xFF01 - ,simpleTitleCaseMapping:0xFF01 - }, - { code:0xFF02 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF02 - ,simpleLowerCaseMapping:0xFF02 - ,simpleTitleCaseMapping:0xFF02 - }, - { code:0xFF03 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF03 - ,simpleLowerCaseMapping:0xFF03 - ,simpleTitleCaseMapping:0xFF03 - }, - { code:0xFF04 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFF04 - ,simpleLowerCaseMapping:0xFF04 - ,simpleTitleCaseMapping:0xFF04 - }, - { code:0xFF05 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF05 - ,simpleLowerCaseMapping:0xFF05 - ,simpleTitleCaseMapping:0xFF05 - }, - { code:0xFF06 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF06 - ,simpleLowerCaseMapping:0xFF06 - ,simpleTitleCaseMapping:0xFF06 - }, - { code:0xFF07 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF07 - ,simpleLowerCaseMapping:0xFF07 - ,simpleTitleCaseMapping:0xFF07 - }, - { code:0xFF08 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFF08 - ,simpleLowerCaseMapping:0xFF08 - ,simpleTitleCaseMapping:0xFF08 - }, - { code:0xFF09 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFF09 - ,simpleLowerCaseMapping:0xFF09 - ,simpleTitleCaseMapping:0xFF09 - }, - { code:0xFF0A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF0A - ,simpleLowerCaseMapping:0xFF0A - ,simpleTitleCaseMapping:0xFF0A - }, - { code:0xFF0B - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF0B - ,simpleLowerCaseMapping:0xFF0B - ,simpleTitleCaseMapping:0xFF0B - }, - { code:0xFF0C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF0C - ,simpleLowerCaseMapping:0xFF0C - ,simpleTitleCaseMapping:0xFF0C - }, - { code:0xFF0D - ,generalCategory:UnicodeData.GeneralCategory.Pd - ,simpleUpperCaseMapping:0xFF0D - ,simpleLowerCaseMapping:0xFF0D - ,simpleTitleCaseMapping:0xFF0D - }, - { code:0xFF0E - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF0E - ,simpleLowerCaseMapping:0xFF0E - ,simpleTitleCaseMapping:0xFF0E - }, - { code:0xFF0F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF0F - ,simpleLowerCaseMapping:0xFF0F - ,simpleTitleCaseMapping:0xFF0F - }, - { code:0xFF10 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF10 - ,simpleLowerCaseMapping:0xFF10 - ,simpleTitleCaseMapping:0xFF10 - }, - { code:0xFF11 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF11 - ,simpleLowerCaseMapping:0xFF11 - ,simpleTitleCaseMapping:0xFF11 - }, - { code:0xFF12 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF12 - ,simpleLowerCaseMapping:0xFF12 - ,simpleTitleCaseMapping:0xFF12 - }, - { code:0xFF13 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF13 - ,simpleLowerCaseMapping:0xFF13 - ,simpleTitleCaseMapping:0xFF13 - }, - { code:0xFF14 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF14 - ,simpleLowerCaseMapping:0xFF14 - ,simpleTitleCaseMapping:0xFF14 - }, - { code:0xFF15 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF15 - ,simpleLowerCaseMapping:0xFF15 - ,simpleTitleCaseMapping:0xFF15 - }, - { code:0xFF16 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF16 - ,simpleLowerCaseMapping:0xFF16 - ,simpleTitleCaseMapping:0xFF16 - }, - { code:0xFF17 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF17 - ,simpleLowerCaseMapping:0xFF17 - ,simpleTitleCaseMapping:0xFF17 - }, - { code:0xFF18 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF18 - ,simpleLowerCaseMapping:0xFF18 - ,simpleTitleCaseMapping:0xFF18 - }, - { code:0xFF19 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0xFF19 - ,simpleLowerCaseMapping:0xFF19 - ,simpleTitleCaseMapping:0xFF19 - }, - { code:0xFF1A - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF1A - ,simpleLowerCaseMapping:0xFF1A - ,simpleTitleCaseMapping:0xFF1A - }, - { code:0xFF1B - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF1B - ,simpleLowerCaseMapping:0xFF1B - ,simpleTitleCaseMapping:0xFF1B - }, - { code:0xFF1C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF1C - ,simpleLowerCaseMapping:0xFF1C - ,simpleTitleCaseMapping:0xFF1C - }, - { code:0xFF1D - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF1D - ,simpleLowerCaseMapping:0xFF1D - ,simpleTitleCaseMapping:0xFF1D - }, - { code:0xFF1E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF1E - ,simpleLowerCaseMapping:0xFF1E - ,simpleTitleCaseMapping:0xFF1E - }, - { code:0xFF1F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF1F - ,simpleLowerCaseMapping:0xFF1F - ,simpleTitleCaseMapping:0xFF1F - }, - { code:0xFF20 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF20 - ,simpleLowerCaseMapping:0xFF20 - ,simpleTitleCaseMapping:0xFF20 - }, - { code:0xFF21 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF21 - ,simpleLowerCaseMapping:0xFF41 - ,simpleTitleCaseMapping:0xFF21 - }, - { code:0xFF22 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF22 - ,simpleLowerCaseMapping:0xFF42 - ,simpleTitleCaseMapping:0xFF22 - }, - { code:0xFF23 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF23 - ,simpleLowerCaseMapping:0xFF43 - ,simpleTitleCaseMapping:0xFF23 - }, - { code:0xFF24 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF24 - ,simpleLowerCaseMapping:0xFF44 - ,simpleTitleCaseMapping:0xFF24 - }, - { code:0xFF25 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF25 - ,simpleLowerCaseMapping:0xFF45 - ,simpleTitleCaseMapping:0xFF25 - }, - { code:0xFF26 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF26 - ,simpleLowerCaseMapping:0xFF46 - ,simpleTitleCaseMapping:0xFF26 - }, - { code:0xFF27 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF27 - ,simpleLowerCaseMapping:0xFF47 - ,simpleTitleCaseMapping:0xFF27 - }, - { code:0xFF28 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF28 - ,simpleLowerCaseMapping:0xFF48 - ,simpleTitleCaseMapping:0xFF28 - }, - { code:0xFF29 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF29 - ,simpleLowerCaseMapping:0xFF49 - ,simpleTitleCaseMapping:0xFF29 - }, - { code:0xFF2A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2A - ,simpleLowerCaseMapping:0xFF4A - ,simpleTitleCaseMapping:0xFF2A - }, - { code:0xFF2B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2B - ,simpleLowerCaseMapping:0xFF4B - ,simpleTitleCaseMapping:0xFF2B - }, - { code:0xFF2C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2C - ,simpleLowerCaseMapping:0xFF4C - ,simpleTitleCaseMapping:0xFF2C - }, - { code:0xFF2D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2D - ,simpleLowerCaseMapping:0xFF4D - ,simpleTitleCaseMapping:0xFF2D - }, - { code:0xFF2E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2E - ,simpleLowerCaseMapping:0xFF4E - ,simpleTitleCaseMapping:0xFF2E - }, - { code:0xFF2F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF2F - ,simpleLowerCaseMapping:0xFF4F - ,simpleTitleCaseMapping:0xFF2F - }, - { code:0xFF30 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF30 - ,simpleLowerCaseMapping:0xFF50 - ,simpleTitleCaseMapping:0xFF30 - }, - { code:0xFF31 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF31 - ,simpleLowerCaseMapping:0xFF51 - ,simpleTitleCaseMapping:0xFF31 - }, - { code:0xFF32 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF32 - ,simpleLowerCaseMapping:0xFF52 - ,simpleTitleCaseMapping:0xFF32 - }, - { code:0xFF33 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF33 - ,simpleLowerCaseMapping:0xFF53 - ,simpleTitleCaseMapping:0xFF33 - }, - { code:0xFF34 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF34 - ,simpleLowerCaseMapping:0xFF54 - ,simpleTitleCaseMapping:0xFF34 - }, - { code:0xFF35 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF35 - ,simpleLowerCaseMapping:0xFF55 - ,simpleTitleCaseMapping:0xFF35 - }, - { code:0xFF36 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF36 - ,simpleLowerCaseMapping:0xFF56 - ,simpleTitleCaseMapping:0xFF36 - }, - { code:0xFF37 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF37 - ,simpleLowerCaseMapping:0xFF57 - ,simpleTitleCaseMapping:0xFF37 - }, - { code:0xFF38 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF38 - ,simpleLowerCaseMapping:0xFF58 - ,simpleTitleCaseMapping:0xFF38 - }, - { code:0xFF39 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF39 - ,simpleLowerCaseMapping:0xFF59 - ,simpleTitleCaseMapping:0xFF39 - }, - { code:0xFF3A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0xFF3A - ,simpleLowerCaseMapping:0xFF5A - ,simpleTitleCaseMapping:0xFF3A - }, - { code:0xFF3B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFF3B - ,simpleLowerCaseMapping:0xFF3B - ,simpleTitleCaseMapping:0xFF3B - }, - { code:0xFF3C - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF3C - ,simpleLowerCaseMapping:0xFF3C - ,simpleTitleCaseMapping:0xFF3C - }, - { code:0xFF3D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFF3D - ,simpleLowerCaseMapping:0xFF3D - ,simpleTitleCaseMapping:0xFF3D - }, - { code:0xFF3E - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xFF3E - ,simpleLowerCaseMapping:0xFF3E - ,simpleTitleCaseMapping:0xFF3E - }, - { code:0xFF3F - ,generalCategory:UnicodeData.GeneralCategory.Pc - ,simpleUpperCaseMapping:0xFF3F - ,simpleLowerCaseMapping:0xFF3F - ,simpleTitleCaseMapping:0xFF3F - }, - { code:0xFF40 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xFF40 - ,simpleLowerCaseMapping:0xFF40 - ,simpleTitleCaseMapping:0xFF40 - }, - { code:0xFF41 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF21 - ,simpleLowerCaseMapping:0xFF41 - ,simpleTitleCaseMapping:0xFF21 - }, - { code:0xFF42 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF22 - ,simpleLowerCaseMapping:0xFF42 - ,simpleTitleCaseMapping:0xFF22 - }, - { code:0xFF43 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF23 - ,simpleLowerCaseMapping:0xFF43 - ,simpleTitleCaseMapping:0xFF23 - }, - { code:0xFF44 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF24 - ,simpleLowerCaseMapping:0xFF44 - ,simpleTitleCaseMapping:0xFF24 - }, - { code:0xFF45 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF25 - ,simpleLowerCaseMapping:0xFF45 - ,simpleTitleCaseMapping:0xFF25 - }, - { code:0xFF46 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF26 - ,simpleLowerCaseMapping:0xFF46 - ,simpleTitleCaseMapping:0xFF26 - }, - { code:0xFF47 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF27 - ,simpleLowerCaseMapping:0xFF47 - ,simpleTitleCaseMapping:0xFF27 - }, - { code:0xFF48 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF28 - ,simpleLowerCaseMapping:0xFF48 - ,simpleTitleCaseMapping:0xFF28 - }, - { code:0xFF49 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF29 - ,simpleLowerCaseMapping:0xFF49 - ,simpleTitleCaseMapping:0xFF29 - }, - { code:0xFF4A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2A - ,simpleLowerCaseMapping:0xFF4A - ,simpleTitleCaseMapping:0xFF2A - }, - { code:0xFF4B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2B - ,simpleLowerCaseMapping:0xFF4B - ,simpleTitleCaseMapping:0xFF2B - }, - { code:0xFF4C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2C - ,simpleLowerCaseMapping:0xFF4C - ,simpleTitleCaseMapping:0xFF2C - }, - { code:0xFF4D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2D - ,simpleLowerCaseMapping:0xFF4D - ,simpleTitleCaseMapping:0xFF2D - }, - { code:0xFF4E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2E - ,simpleLowerCaseMapping:0xFF4E - ,simpleTitleCaseMapping:0xFF2E - }, - { code:0xFF4F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF2F - ,simpleLowerCaseMapping:0xFF4F - ,simpleTitleCaseMapping:0xFF2F - }, - { code:0xFF50 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF30 - ,simpleLowerCaseMapping:0xFF50 - ,simpleTitleCaseMapping:0xFF30 - }, - { code:0xFF51 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF31 - ,simpleLowerCaseMapping:0xFF51 - ,simpleTitleCaseMapping:0xFF31 - }, - { code:0xFF52 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF32 - ,simpleLowerCaseMapping:0xFF52 - ,simpleTitleCaseMapping:0xFF32 - }, - { code:0xFF53 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF33 - ,simpleLowerCaseMapping:0xFF53 - ,simpleTitleCaseMapping:0xFF33 - }, - { code:0xFF54 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF34 - ,simpleLowerCaseMapping:0xFF54 - ,simpleTitleCaseMapping:0xFF34 - }, - { code:0xFF55 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF35 - ,simpleLowerCaseMapping:0xFF55 - ,simpleTitleCaseMapping:0xFF35 - }, - { code:0xFF56 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF36 - ,simpleLowerCaseMapping:0xFF56 - ,simpleTitleCaseMapping:0xFF36 - }, - { code:0xFF57 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF37 - ,simpleLowerCaseMapping:0xFF57 - ,simpleTitleCaseMapping:0xFF37 - }, - { code:0xFF58 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF38 - ,simpleLowerCaseMapping:0xFF58 - ,simpleTitleCaseMapping:0xFF38 - }, - { code:0xFF59 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF39 - ,simpleLowerCaseMapping:0xFF59 - ,simpleTitleCaseMapping:0xFF39 - }, - { code:0xFF5A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0xFF3A - ,simpleLowerCaseMapping:0xFF5A - ,simpleTitleCaseMapping:0xFF3A - }, - { code:0xFF5B - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFF5B - ,simpleLowerCaseMapping:0xFF5B - ,simpleTitleCaseMapping:0xFF5B - }, - { code:0xFF5C - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF5C - ,simpleLowerCaseMapping:0xFF5C - ,simpleTitleCaseMapping:0xFF5C - }, - { code:0xFF5D - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFF5D - ,simpleLowerCaseMapping:0xFF5D - ,simpleTitleCaseMapping:0xFF5D - }, - { code:0xFF5E - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFF5E - ,simpleLowerCaseMapping:0xFF5E - ,simpleTitleCaseMapping:0xFF5E - }, - { code:0xFF5F - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFF5F - ,simpleLowerCaseMapping:0xFF5F - ,simpleTitleCaseMapping:0xFF5F - }, - { code:0xFF60 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFF60 - ,simpleLowerCaseMapping:0xFF60 - ,simpleTitleCaseMapping:0xFF60 - }, - { code:0xFF61 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF61 - ,simpleLowerCaseMapping:0xFF61 - ,simpleTitleCaseMapping:0xFF61 - }, - { code:0xFF62 - ,generalCategory:UnicodeData.GeneralCategory.Ps - ,simpleUpperCaseMapping:0xFF62 - ,simpleLowerCaseMapping:0xFF62 - ,simpleTitleCaseMapping:0xFF62 - }, - { code:0xFF63 - ,generalCategory:UnicodeData.GeneralCategory.Pe - ,simpleUpperCaseMapping:0xFF63 - ,simpleLowerCaseMapping:0xFF63 - ,simpleTitleCaseMapping:0xFF63 - }, - { code:0xFF64 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF64 - ,simpleLowerCaseMapping:0xFF64 - ,simpleTitleCaseMapping:0xFF64 - }, - { code:0xFF65 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0xFF65 - ,simpleLowerCaseMapping:0xFF65 - ,simpleTitleCaseMapping:0xFF65 - }, - { code:0xFF66 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF66 - ,simpleLowerCaseMapping:0xFF66 - ,simpleTitleCaseMapping:0xFF66 - }, - { code:0xFF67 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF67 - ,simpleLowerCaseMapping:0xFF67 - ,simpleTitleCaseMapping:0xFF67 - }, - { code:0xFF68 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF68 - ,simpleLowerCaseMapping:0xFF68 - ,simpleTitleCaseMapping:0xFF68 - }, - { code:0xFF69 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF69 - ,simpleLowerCaseMapping:0xFF69 - ,simpleTitleCaseMapping:0xFF69 - }, - { code:0xFF6A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6A - ,simpleLowerCaseMapping:0xFF6A - ,simpleTitleCaseMapping:0xFF6A - }, - { code:0xFF6B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6B - ,simpleLowerCaseMapping:0xFF6B - ,simpleTitleCaseMapping:0xFF6B - }, - { code:0xFF6C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6C - ,simpleLowerCaseMapping:0xFF6C - ,simpleTitleCaseMapping:0xFF6C - }, - { code:0xFF6D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6D - ,simpleLowerCaseMapping:0xFF6D - ,simpleTitleCaseMapping:0xFF6D - }, - { code:0xFF6E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6E - ,simpleLowerCaseMapping:0xFF6E - ,simpleTitleCaseMapping:0xFF6E - }, - { code:0xFF6F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF6F - ,simpleLowerCaseMapping:0xFF6F - ,simpleTitleCaseMapping:0xFF6F - }, - { code:0xFF70 - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xFF70 - ,simpleLowerCaseMapping:0xFF70 - ,simpleTitleCaseMapping:0xFF70 - }, - { code:0xFF71 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF71 - ,simpleLowerCaseMapping:0xFF71 - ,simpleTitleCaseMapping:0xFF71 - }, - { code:0xFF72 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF72 - ,simpleLowerCaseMapping:0xFF72 - ,simpleTitleCaseMapping:0xFF72 - }, - { code:0xFF73 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF73 - ,simpleLowerCaseMapping:0xFF73 - ,simpleTitleCaseMapping:0xFF73 - }, - { code:0xFF74 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF74 - ,simpleLowerCaseMapping:0xFF74 - ,simpleTitleCaseMapping:0xFF74 - }, - { code:0xFF75 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF75 - ,simpleLowerCaseMapping:0xFF75 - ,simpleTitleCaseMapping:0xFF75 - }, - { code:0xFF76 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF76 - ,simpleLowerCaseMapping:0xFF76 - ,simpleTitleCaseMapping:0xFF76 - }, - { code:0xFF77 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF77 - ,simpleLowerCaseMapping:0xFF77 - ,simpleTitleCaseMapping:0xFF77 - }, - { code:0xFF78 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF78 - ,simpleLowerCaseMapping:0xFF78 - ,simpleTitleCaseMapping:0xFF78 - }, - { code:0xFF79 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF79 - ,simpleLowerCaseMapping:0xFF79 - ,simpleTitleCaseMapping:0xFF79 - }, - { code:0xFF7A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7A - ,simpleLowerCaseMapping:0xFF7A - ,simpleTitleCaseMapping:0xFF7A - }, - { code:0xFF7B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7B - ,simpleLowerCaseMapping:0xFF7B - ,simpleTitleCaseMapping:0xFF7B - }, - { code:0xFF7C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7C - ,simpleLowerCaseMapping:0xFF7C - ,simpleTitleCaseMapping:0xFF7C - }, - { code:0xFF7D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7D - ,simpleLowerCaseMapping:0xFF7D - ,simpleTitleCaseMapping:0xFF7D - }, - { code:0xFF7E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7E - ,simpleLowerCaseMapping:0xFF7E - ,simpleTitleCaseMapping:0xFF7E - }, - { code:0xFF7F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF7F - ,simpleLowerCaseMapping:0xFF7F - ,simpleTitleCaseMapping:0xFF7F - }, - { code:0xFF80 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF80 - ,simpleLowerCaseMapping:0xFF80 - ,simpleTitleCaseMapping:0xFF80 - }, - { code:0xFF81 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF81 - ,simpleLowerCaseMapping:0xFF81 - ,simpleTitleCaseMapping:0xFF81 - }, - { code:0xFF82 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF82 - ,simpleLowerCaseMapping:0xFF82 - ,simpleTitleCaseMapping:0xFF82 - }, - { code:0xFF83 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF83 - ,simpleLowerCaseMapping:0xFF83 - ,simpleTitleCaseMapping:0xFF83 - }, - { code:0xFF84 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF84 - ,simpleLowerCaseMapping:0xFF84 - ,simpleTitleCaseMapping:0xFF84 - }, - { code:0xFF85 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF85 - ,simpleLowerCaseMapping:0xFF85 - ,simpleTitleCaseMapping:0xFF85 - }, - { code:0xFF86 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF86 - ,simpleLowerCaseMapping:0xFF86 - ,simpleTitleCaseMapping:0xFF86 - }, - { code:0xFF87 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF87 - ,simpleLowerCaseMapping:0xFF87 - ,simpleTitleCaseMapping:0xFF87 - }, - { code:0xFF88 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF88 - ,simpleLowerCaseMapping:0xFF88 - ,simpleTitleCaseMapping:0xFF88 - }, - { code:0xFF89 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF89 - ,simpleLowerCaseMapping:0xFF89 - ,simpleTitleCaseMapping:0xFF89 - }, - { code:0xFF8A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8A - ,simpleLowerCaseMapping:0xFF8A - ,simpleTitleCaseMapping:0xFF8A - }, - { code:0xFF8B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8B - ,simpleLowerCaseMapping:0xFF8B - ,simpleTitleCaseMapping:0xFF8B - }, - { code:0xFF8C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8C - ,simpleLowerCaseMapping:0xFF8C - ,simpleTitleCaseMapping:0xFF8C - }, - { code:0xFF8D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8D - ,simpleLowerCaseMapping:0xFF8D - ,simpleTitleCaseMapping:0xFF8D - }, - { code:0xFF8E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8E - ,simpleLowerCaseMapping:0xFF8E - ,simpleTitleCaseMapping:0xFF8E - }, - { code:0xFF8F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF8F - ,simpleLowerCaseMapping:0xFF8F - ,simpleTitleCaseMapping:0xFF8F - }, - { code:0xFF90 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF90 - ,simpleLowerCaseMapping:0xFF90 - ,simpleTitleCaseMapping:0xFF90 - }, - { code:0xFF91 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF91 - ,simpleLowerCaseMapping:0xFF91 - ,simpleTitleCaseMapping:0xFF91 - }, - { code:0xFF92 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF92 - ,simpleLowerCaseMapping:0xFF92 - ,simpleTitleCaseMapping:0xFF92 - }, - { code:0xFF93 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF93 - ,simpleLowerCaseMapping:0xFF93 - ,simpleTitleCaseMapping:0xFF93 - }, - { code:0xFF94 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF94 - ,simpleLowerCaseMapping:0xFF94 - ,simpleTitleCaseMapping:0xFF94 - }, - { code:0xFF95 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF95 - ,simpleLowerCaseMapping:0xFF95 - ,simpleTitleCaseMapping:0xFF95 - }, - { code:0xFF96 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF96 - ,simpleLowerCaseMapping:0xFF96 - ,simpleTitleCaseMapping:0xFF96 - }, - { code:0xFF97 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF97 - ,simpleLowerCaseMapping:0xFF97 - ,simpleTitleCaseMapping:0xFF97 - }, - { code:0xFF98 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF98 - ,simpleLowerCaseMapping:0xFF98 - ,simpleTitleCaseMapping:0xFF98 - }, - { code:0xFF99 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF99 - ,simpleLowerCaseMapping:0xFF99 - ,simpleTitleCaseMapping:0xFF99 - }, - { code:0xFF9A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF9A - ,simpleLowerCaseMapping:0xFF9A - ,simpleTitleCaseMapping:0xFF9A - }, - { code:0xFF9B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF9B - ,simpleLowerCaseMapping:0xFF9B - ,simpleTitleCaseMapping:0xFF9B - }, - { code:0xFF9C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF9C - ,simpleLowerCaseMapping:0xFF9C - ,simpleTitleCaseMapping:0xFF9C - }, - { code:0xFF9D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFF9D - ,simpleLowerCaseMapping:0xFF9D - ,simpleTitleCaseMapping:0xFF9D - }, - { code:0xFF9E - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xFF9E - ,simpleLowerCaseMapping:0xFF9E - ,simpleTitleCaseMapping:0xFF9E - }, - { code:0xFF9F - ,generalCategory:UnicodeData.GeneralCategory.Lm - ,simpleUpperCaseMapping:0xFF9F - ,simpleLowerCaseMapping:0xFF9F - ,simpleTitleCaseMapping:0xFF9F - }, - { code:0xFFA0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA0 - ,simpleLowerCaseMapping:0xFFA0 - ,simpleTitleCaseMapping:0xFFA0 - }, - { code:0xFFA1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA1 - ,simpleLowerCaseMapping:0xFFA1 - ,simpleTitleCaseMapping:0xFFA1 - }, - { code:0xFFA2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA2 - ,simpleLowerCaseMapping:0xFFA2 - ,simpleTitleCaseMapping:0xFFA2 - }, - { code:0xFFA3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA3 - ,simpleLowerCaseMapping:0xFFA3 - ,simpleTitleCaseMapping:0xFFA3 - }, - { code:0xFFA4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA4 - ,simpleLowerCaseMapping:0xFFA4 - ,simpleTitleCaseMapping:0xFFA4 - }, - { code:0xFFA5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA5 - ,simpleLowerCaseMapping:0xFFA5 - ,simpleTitleCaseMapping:0xFFA5 - }, - { code:0xFFA6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA6 - ,simpleLowerCaseMapping:0xFFA6 - ,simpleTitleCaseMapping:0xFFA6 - }, - { code:0xFFA7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA7 - ,simpleLowerCaseMapping:0xFFA7 - ,simpleTitleCaseMapping:0xFFA7 - }, - { code:0xFFA8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA8 - ,simpleLowerCaseMapping:0xFFA8 - ,simpleTitleCaseMapping:0xFFA8 - }, - { code:0xFFA9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFA9 - ,simpleLowerCaseMapping:0xFFA9 - ,simpleTitleCaseMapping:0xFFA9 - }, - { code:0xFFAA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAA - ,simpleLowerCaseMapping:0xFFAA - ,simpleTitleCaseMapping:0xFFAA - }, - { code:0xFFAB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAB - ,simpleLowerCaseMapping:0xFFAB - ,simpleTitleCaseMapping:0xFFAB - }, - { code:0xFFAC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAC - ,simpleLowerCaseMapping:0xFFAC - ,simpleTitleCaseMapping:0xFFAC - }, - { code:0xFFAD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAD - ,simpleLowerCaseMapping:0xFFAD - ,simpleTitleCaseMapping:0xFFAD - }, - { code:0xFFAE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAE - ,simpleLowerCaseMapping:0xFFAE - ,simpleTitleCaseMapping:0xFFAE - }, - { code:0xFFAF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFAF - ,simpleLowerCaseMapping:0xFFAF - ,simpleTitleCaseMapping:0xFFAF - }, - { code:0xFFB0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB0 - ,simpleLowerCaseMapping:0xFFB0 - ,simpleTitleCaseMapping:0xFFB0 - }, - { code:0xFFB1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB1 - ,simpleLowerCaseMapping:0xFFB1 - ,simpleTitleCaseMapping:0xFFB1 - }, - { code:0xFFB2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB2 - ,simpleLowerCaseMapping:0xFFB2 - ,simpleTitleCaseMapping:0xFFB2 - }, - { code:0xFFB3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB3 - ,simpleLowerCaseMapping:0xFFB3 - ,simpleTitleCaseMapping:0xFFB3 - }, - { code:0xFFB4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB4 - ,simpleLowerCaseMapping:0xFFB4 - ,simpleTitleCaseMapping:0xFFB4 - }, - { code:0xFFB5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB5 - ,simpleLowerCaseMapping:0xFFB5 - ,simpleTitleCaseMapping:0xFFB5 - }, - { code:0xFFB6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB6 - ,simpleLowerCaseMapping:0xFFB6 - ,simpleTitleCaseMapping:0xFFB6 - }, - { code:0xFFB7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB7 - ,simpleLowerCaseMapping:0xFFB7 - ,simpleTitleCaseMapping:0xFFB7 - }, - { code:0xFFB8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB8 - ,simpleLowerCaseMapping:0xFFB8 - ,simpleTitleCaseMapping:0xFFB8 - }, - { code:0xFFB9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFB9 - ,simpleLowerCaseMapping:0xFFB9 - ,simpleTitleCaseMapping:0xFFB9 - }, - { code:0xFFBA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFBA - ,simpleLowerCaseMapping:0xFFBA - ,simpleTitleCaseMapping:0xFFBA - }, - { code:0xFFBB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFBB - ,simpleLowerCaseMapping:0xFFBB - ,simpleTitleCaseMapping:0xFFBB - }, - { code:0xFFBC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFBC - ,simpleLowerCaseMapping:0xFFBC - ,simpleTitleCaseMapping:0xFFBC - }, - { code:0xFFBD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFBD - ,simpleLowerCaseMapping:0xFFBD - ,simpleTitleCaseMapping:0xFFBD - }, - { code:0xFFBE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFBE - ,simpleLowerCaseMapping:0xFFBE - ,simpleTitleCaseMapping:0xFFBE - }, - { code:0xFFC2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC2 - ,simpleLowerCaseMapping:0xFFC2 - ,simpleTitleCaseMapping:0xFFC2 - }, - { code:0xFFC3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC3 - ,simpleLowerCaseMapping:0xFFC3 - ,simpleTitleCaseMapping:0xFFC3 - }, - { code:0xFFC4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC4 - ,simpleLowerCaseMapping:0xFFC4 - ,simpleTitleCaseMapping:0xFFC4 - }, - { code:0xFFC5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC5 - ,simpleLowerCaseMapping:0xFFC5 - ,simpleTitleCaseMapping:0xFFC5 - }, - { code:0xFFC6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC6 - ,simpleLowerCaseMapping:0xFFC6 - ,simpleTitleCaseMapping:0xFFC6 - }, - { code:0xFFC7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFC7 - ,simpleLowerCaseMapping:0xFFC7 - ,simpleTitleCaseMapping:0xFFC7 - }, - { code:0xFFCA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCA - ,simpleLowerCaseMapping:0xFFCA - ,simpleTitleCaseMapping:0xFFCA - }, - { code:0xFFCB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCB - ,simpleLowerCaseMapping:0xFFCB - ,simpleTitleCaseMapping:0xFFCB - }, - { code:0xFFCC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCC - ,simpleLowerCaseMapping:0xFFCC - ,simpleTitleCaseMapping:0xFFCC - }, - { code:0xFFCD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCD - ,simpleLowerCaseMapping:0xFFCD - ,simpleTitleCaseMapping:0xFFCD - }, - { code:0xFFCE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCE - ,simpleLowerCaseMapping:0xFFCE - ,simpleTitleCaseMapping:0xFFCE - }, - { code:0xFFCF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFCF - ,simpleLowerCaseMapping:0xFFCF - ,simpleTitleCaseMapping:0xFFCF - }, - { code:0xFFD2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD2 - ,simpleLowerCaseMapping:0xFFD2 - ,simpleTitleCaseMapping:0xFFD2 - }, - { code:0xFFD3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD3 - ,simpleLowerCaseMapping:0xFFD3 - ,simpleTitleCaseMapping:0xFFD3 - }, - { code:0xFFD4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD4 - ,simpleLowerCaseMapping:0xFFD4 - ,simpleTitleCaseMapping:0xFFD4 - }, - { code:0xFFD5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD5 - ,simpleLowerCaseMapping:0xFFD5 - ,simpleTitleCaseMapping:0xFFD5 - }, - { code:0xFFD6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD6 - ,simpleLowerCaseMapping:0xFFD6 - ,simpleTitleCaseMapping:0xFFD6 - }, - { code:0xFFD7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFD7 - ,simpleLowerCaseMapping:0xFFD7 - ,simpleTitleCaseMapping:0xFFD7 - }, - { code:0xFFDA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFDA - ,simpleLowerCaseMapping:0xFFDA - ,simpleTitleCaseMapping:0xFFDA - }, - { code:0xFFDB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFDB - ,simpleLowerCaseMapping:0xFFDB - ,simpleTitleCaseMapping:0xFFDB - }, - { code:0xFFDC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0xFFDC - ,simpleLowerCaseMapping:0xFFDC - ,simpleTitleCaseMapping:0xFFDC - }, - { code:0xFFE0 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFFE0 - ,simpleLowerCaseMapping:0xFFE0 - ,simpleTitleCaseMapping:0xFFE0 - }, - { code:0xFFE1 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFFE1 - ,simpleLowerCaseMapping:0xFFE1 - ,simpleTitleCaseMapping:0xFFE1 - }, - { code:0xFFE2 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFFE2 - ,simpleLowerCaseMapping:0xFFE2 - ,simpleTitleCaseMapping:0xFFE2 - }, - { code:0xFFE3 - ,generalCategory:UnicodeData.GeneralCategory.Sk - ,simpleUpperCaseMapping:0xFFE3 - ,simpleLowerCaseMapping:0xFFE3 - ,simpleTitleCaseMapping:0xFFE3 - }, - { code:0xFFE4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFE4 - ,simpleLowerCaseMapping:0xFFE4 - ,simpleTitleCaseMapping:0xFFE4 - }, - { code:0xFFE5 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFFE5 - ,simpleLowerCaseMapping:0xFFE5 - ,simpleTitleCaseMapping:0xFFE5 - }, - { code:0xFFE6 - ,generalCategory:UnicodeData.GeneralCategory.Sc - ,simpleUpperCaseMapping:0xFFE6 - ,simpleLowerCaseMapping:0xFFE6 - ,simpleTitleCaseMapping:0xFFE6 - }, - { code:0xFFE8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFE8 - ,simpleLowerCaseMapping:0xFFE8 - ,simpleTitleCaseMapping:0xFFE8 - }, - { code:0xFFE9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFFE9 - ,simpleLowerCaseMapping:0xFFE9 - ,simpleTitleCaseMapping:0xFFE9 - }, - { code:0xFFEA - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFFEA - ,simpleLowerCaseMapping:0xFFEA - ,simpleTitleCaseMapping:0xFFEA - }, - { code:0xFFEB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFFEB - ,simpleLowerCaseMapping:0xFFEB - ,simpleTitleCaseMapping:0xFFEB - }, - { code:0xFFEC - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0xFFEC - ,simpleLowerCaseMapping:0xFFEC - ,simpleTitleCaseMapping:0xFFEC - }, - { code:0xFFED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFED - ,simpleLowerCaseMapping:0xFFED - ,simpleTitleCaseMapping:0xFFED - }, - { code:0xFFEE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFEE - ,simpleLowerCaseMapping:0xFFEE - ,simpleTitleCaseMapping:0xFFEE - }, - { code:0xFFF9 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xFFF9 - ,simpleLowerCaseMapping:0xFFF9 - ,simpleTitleCaseMapping:0xFFF9 - }, - { code:0xFFFA - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xFFFA - ,simpleLowerCaseMapping:0xFFFA - ,simpleTitleCaseMapping:0xFFFA - }, - { code:0xFFFB - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xFFFB - ,simpleLowerCaseMapping:0xFFFB - ,simpleTitleCaseMapping:0xFFFB - }, - { code:0xFFFC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFFC - ,simpleLowerCaseMapping:0xFFFC - ,simpleTitleCaseMapping:0xFFFC - }, - { code:0xFFFD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0xFFFD - ,simpleLowerCaseMapping:0xFFFD - ,simpleTitleCaseMapping:0xFFFD - }, - { code:0x10000 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10000 - ,simpleLowerCaseMapping:0x10000 - ,simpleTitleCaseMapping:0x10000 - }, - { code:0x10001 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10001 - ,simpleLowerCaseMapping:0x10001 - ,simpleTitleCaseMapping:0x10001 - }, - { code:0x10002 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10002 - ,simpleLowerCaseMapping:0x10002 - ,simpleTitleCaseMapping:0x10002 - }, - { code:0x10003 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10003 - ,simpleLowerCaseMapping:0x10003 - ,simpleTitleCaseMapping:0x10003 - }, - { code:0x10004 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10004 - ,simpleLowerCaseMapping:0x10004 - ,simpleTitleCaseMapping:0x10004 - }, - { code:0x10005 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10005 - ,simpleLowerCaseMapping:0x10005 - ,simpleTitleCaseMapping:0x10005 - }, - { code:0x10006 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10006 - ,simpleLowerCaseMapping:0x10006 - ,simpleTitleCaseMapping:0x10006 - }, - { code:0x10007 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10007 - ,simpleLowerCaseMapping:0x10007 - ,simpleTitleCaseMapping:0x10007 - }, - { code:0x10008 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10008 - ,simpleLowerCaseMapping:0x10008 - ,simpleTitleCaseMapping:0x10008 - }, - { code:0x10009 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10009 - ,simpleLowerCaseMapping:0x10009 - ,simpleTitleCaseMapping:0x10009 - }, - { code:0x1000A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000A - ,simpleLowerCaseMapping:0x1000A - ,simpleTitleCaseMapping:0x1000A - }, - { code:0x1000B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000B - ,simpleLowerCaseMapping:0x1000B - ,simpleTitleCaseMapping:0x1000B - }, - { code:0x1000D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000D - ,simpleLowerCaseMapping:0x1000D - ,simpleTitleCaseMapping:0x1000D - }, - { code:0x1000E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000E - ,simpleLowerCaseMapping:0x1000E - ,simpleTitleCaseMapping:0x1000E - }, - { code:0x1000F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1000F - ,simpleLowerCaseMapping:0x1000F - ,simpleTitleCaseMapping:0x1000F - }, - { code:0x10010 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10010 - ,simpleLowerCaseMapping:0x10010 - ,simpleTitleCaseMapping:0x10010 - }, - { code:0x10011 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10011 - ,simpleLowerCaseMapping:0x10011 - ,simpleTitleCaseMapping:0x10011 - }, - { code:0x10012 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10012 - ,simpleLowerCaseMapping:0x10012 - ,simpleTitleCaseMapping:0x10012 - }, - { code:0x10013 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10013 - ,simpleLowerCaseMapping:0x10013 - ,simpleTitleCaseMapping:0x10013 - }, - { code:0x10014 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10014 - ,simpleLowerCaseMapping:0x10014 - ,simpleTitleCaseMapping:0x10014 - }, - { code:0x10015 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10015 - ,simpleLowerCaseMapping:0x10015 - ,simpleTitleCaseMapping:0x10015 - }, - { code:0x10016 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10016 - ,simpleLowerCaseMapping:0x10016 - ,simpleTitleCaseMapping:0x10016 - }, - { code:0x10017 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10017 - ,simpleLowerCaseMapping:0x10017 - ,simpleTitleCaseMapping:0x10017 - }, - { code:0x10018 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10018 - ,simpleLowerCaseMapping:0x10018 - ,simpleTitleCaseMapping:0x10018 - }, - { code:0x10019 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10019 - ,simpleLowerCaseMapping:0x10019 - ,simpleTitleCaseMapping:0x10019 - }, - { code:0x1001A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001A - ,simpleLowerCaseMapping:0x1001A - ,simpleTitleCaseMapping:0x1001A - }, - { code:0x1001B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001B - ,simpleLowerCaseMapping:0x1001B - ,simpleTitleCaseMapping:0x1001B - }, - { code:0x1001C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001C - ,simpleLowerCaseMapping:0x1001C - ,simpleTitleCaseMapping:0x1001C - }, - { code:0x1001D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001D - ,simpleLowerCaseMapping:0x1001D - ,simpleTitleCaseMapping:0x1001D - }, - { code:0x1001E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001E - ,simpleLowerCaseMapping:0x1001E - ,simpleTitleCaseMapping:0x1001E - }, - { code:0x1001F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1001F - ,simpleLowerCaseMapping:0x1001F - ,simpleTitleCaseMapping:0x1001F - }, - { code:0x10020 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10020 - ,simpleLowerCaseMapping:0x10020 - ,simpleTitleCaseMapping:0x10020 - }, - { code:0x10021 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10021 - ,simpleLowerCaseMapping:0x10021 - ,simpleTitleCaseMapping:0x10021 - }, - { code:0x10022 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10022 - ,simpleLowerCaseMapping:0x10022 - ,simpleTitleCaseMapping:0x10022 - }, - { code:0x10023 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10023 - ,simpleLowerCaseMapping:0x10023 - ,simpleTitleCaseMapping:0x10023 - }, - { code:0x10024 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10024 - ,simpleLowerCaseMapping:0x10024 - ,simpleTitleCaseMapping:0x10024 - }, - { code:0x10025 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10025 - ,simpleLowerCaseMapping:0x10025 - ,simpleTitleCaseMapping:0x10025 - }, - { code:0x10026 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10026 - ,simpleLowerCaseMapping:0x10026 - ,simpleTitleCaseMapping:0x10026 - }, - { code:0x10028 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10028 - ,simpleLowerCaseMapping:0x10028 - ,simpleTitleCaseMapping:0x10028 - }, - { code:0x10029 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10029 - ,simpleLowerCaseMapping:0x10029 - ,simpleTitleCaseMapping:0x10029 - }, - { code:0x1002A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002A - ,simpleLowerCaseMapping:0x1002A - ,simpleTitleCaseMapping:0x1002A - }, - { code:0x1002B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002B - ,simpleLowerCaseMapping:0x1002B - ,simpleTitleCaseMapping:0x1002B - }, - { code:0x1002C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002C - ,simpleLowerCaseMapping:0x1002C - ,simpleTitleCaseMapping:0x1002C - }, - { code:0x1002D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002D - ,simpleLowerCaseMapping:0x1002D - ,simpleTitleCaseMapping:0x1002D - }, - { code:0x1002E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002E - ,simpleLowerCaseMapping:0x1002E - ,simpleTitleCaseMapping:0x1002E - }, - { code:0x1002F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1002F - ,simpleLowerCaseMapping:0x1002F - ,simpleTitleCaseMapping:0x1002F - }, - { code:0x10030 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10030 - ,simpleLowerCaseMapping:0x10030 - ,simpleTitleCaseMapping:0x10030 - }, - { code:0x10031 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10031 - ,simpleLowerCaseMapping:0x10031 - ,simpleTitleCaseMapping:0x10031 - }, - { code:0x10032 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10032 - ,simpleLowerCaseMapping:0x10032 - ,simpleTitleCaseMapping:0x10032 - }, - { code:0x10033 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10033 - ,simpleLowerCaseMapping:0x10033 - ,simpleTitleCaseMapping:0x10033 - }, - { code:0x10034 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10034 - ,simpleLowerCaseMapping:0x10034 - ,simpleTitleCaseMapping:0x10034 - }, - { code:0x10035 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10035 - ,simpleLowerCaseMapping:0x10035 - ,simpleTitleCaseMapping:0x10035 - }, - { code:0x10036 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10036 - ,simpleLowerCaseMapping:0x10036 - ,simpleTitleCaseMapping:0x10036 - }, - { code:0x10037 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10037 - ,simpleLowerCaseMapping:0x10037 - ,simpleTitleCaseMapping:0x10037 - }, - { code:0x10038 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10038 - ,simpleLowerCaseMapping:0x10038 - ,simpleTitleCaseMapping:0x10038 - }, - { code:0x10039 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10039 - ,simpleLowerCaseMapping:0x10039 - ,simpleTitleCaseMapping:0x10039 - }, - { code:0x1003A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1003A - ,simpleLowerCaseMapping:0x1003A - ,simpleTitleCaseMapping:0x1003A - }, - { code:0x1003C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1003C - ,simpleLowerCaseMapping:0x1003C - ,simpleTitleCaseMapping:0x1003C - }, - { code:0x1003D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1003D - ,simpleLowerCaseMapping:0x1003D - ,simpleTitleCaseMapping:0x1003D - }, - { code:0x1003F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1003F - ,simpleLowerCaseMapping:0x1003F - ,simpleTitleCaseMapping:0x1003F - }, - { code:0x10040 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10040 - ,simpleLowerCaseMapping:0x10040 - ,simpleTitleCaseMapping:0x10040 - }, - { code:0x10041 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10041 - ,simpleLowerCaseMapping:0x10041 - ,simpleTitleCaseMapping:0x10041 - }, - { code:0x10042 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10042 - ,simpleLowerCaseMapping:0x10042 - ,simpleTitleCaseMapping:0x10042 - }, - { code:0x10043 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10043 - ,simpleLowerCaseMapping:0x10043 - ,simpleTitleCaseMapping:0x10043 - }, - { code:0x10044 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10044 - ,simpleLowerCaseMapping:0x10044 - ,simpleTitleCaseMapping:0x10044 - }, - { code:0x10045 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10045 - ,simpleLowerCaseMapping:0x10045 - ,simpleTitleCaseMapping:0x10045 - }, - { code:0x10046 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10046 - ,simpleLowerCaseMapping:0x10046 - ,simpleTitleCaseMapping:0x10046 - }, - { code:0x10047 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10047 - ,simpleLowerCaseMapping:0x10047 - ,simpleTitleCaseMapping:0x10047 - }, - { code:0x10048 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10048 - ,simpleLowerCaseMapping:0x10048 - ,simpleTitleCaseMapping:0x10048 - }, - { code:0x10049 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10049 - ,simpleLowerCaseMapping:0x10049 - ,simpleTitleCaseMapping:0x10049 - }, - { code:0x1004A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1004A - ,simpleLowerCaseMapping:0x1004A - ,simpleTitleCaseMapping:0x1004A - }, - { code:0x1004B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1004B - ,simpleLowerCaseMapping:0x1004B - ,simpleTitleCaseMapping:0x1004B - }, - { code:0x1004C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1004C - ,simpleLowerCaseMapping:0x1004C - ,simpleTitleCaseMapping:0x1004C - }, - { code:0x1004D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1004D - ,simpleLowerCaseMapping:0x1004D - ,simpleTitleCaseMapping:0x1004D - }, - { code:0x10050 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10050 - ,simpleLowerCaseMapping:0x10050 - ,simpleTitleCaseMapping:0x10050 - }, - { code:0x10051 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10051 - ,simpleLowerCaseMapping:0x10051 - ,simpleTitleCaseMapping:0x10051 - }, - { code:0x10052 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10052 - ,simpleLowerCaseMapping:0x10052 - ,simpleTitleCaseMapping:0x10052 - }, - { code:0x10053 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10053 - ,simpleLowerCaseMapping:0x10053 - ,simpleTitleCaseMapping:0x10053 - }, - { code:0x10054 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10054 - ,simpleLowerCaseMapping:0x10054 - ,simpleTitleCaseMapping:0x10054 - }, - { code:0x10055 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10055 - ,simpleLowerCaseMapping:0x10055 - ,simpleTitleCaseMapping:0x10055 - }, - { code:0x10056 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10056 - ,simpleLowerCaseMapping:0x10056 - ,simpleTitleCaseMapping:0x10056 - }, - { code:0x10057 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10057 - ,simpleLowerCaseMapping:0x10057 - ,simpleTitleCaseMapping:0x10057 - }, - { code:0x10058 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10058 - ,simpleLowerCaseMapping:0x10058 - ,simpleTitleCaseMapping:0x10058 - }, - { code:0x10059 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10059 - ,simpleLowerCaseMapping:0x10059 - ,simpleTitleCaseMapping:0x10059 - }, - { code:0x1005A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1005A - ,simpleLowerCaseMapping:0x1005A - ,simpleTitleCaseMapping:0x1005A - }, - { code:0x1005B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1005B - ,simpleLowerCaseMapping:0x1005B - ,simpleTitleCaseMapping:0x1005B - }, - { code:0x1005C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1005C - ,simpleLowerCaseMapping:0x1005C - ,simpleTitleCaseMapping:0x1005C - }, - { code:0x1005D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1005D - ,simpleLowerCaseMapping:0x1005D - ,simpleTitleCaseMapping:0x1005D - }, - { code:0x10080 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10080 - ,simpleLowerCaseMapping:0x10080 - ,simpleTitleCaseMapping:0x10080 - }, - { code:0x10081 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10081 - ,simpleLowerCaseMapping:0x10081 - ,simpleTitleCaseMapping:0x10081 - }, - { code:0x10082 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10082 - ,simpleLowerCaseMapping:0x10082 - ,simpleTitleCaseMapping:0x10082 - }, - { code:0x10083 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10083 - ,simpleLowerCaseMapping:0x10083 - ,simpleTitleCaseMapping:0x10083 - }, - { code:0x10084 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10084 - ,simpleLowerCaseMapping:0x10084 - ,simpleTitleCaseMapping:0x10084 - }, - { code:0x10085 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10085 - ,simpleLowerCaseMapping:0x10085 - ,simpleTitleCaseMapping:0x10085 - }, - { code:0x10086 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10086 - ,simpleLowerCaseMapping:0x10086 - ,simpleTitleCaseMapping:0x10086 - }, - { code:0x10087 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10087 - ,simpleLowerCaseMapping:0x10087 - ,simpleTitleCaseMapping:0x10087 - }, - { code:0x10088 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10088 - ,simpleLowerCaseMapping:0x10088 - ,simpleTitleCaseMapping:0x10088 - }, - { code:0x10089 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10089 - ,simpleLowerCaseMapping:0x10089 - ,simpleTitleCaseMapping:0x10089 - }, - { code:0x1008A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008A - ,simpleLowerCaseMapping:0x1008A - ,simpleTitleCaseMapping:0x1008A - }, - { code:0x1008B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008B - ,simpleLowerCaseMapping:0x1008B - ,simpleTitleCaseMapping:0x1008B - }, - { code:0x1008C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008C - ,simpleLowerCaseMapping:0x1008C - ,simpleTitleCaseMapping:0x1008C - }, - { code:0x1008D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008D - ,simpleLowerCaseMapping:0x1008D - ,simpleTitleCaseMapping:0x1008D - }, - { code:0x1008E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008E - ,simpleLowerCaseMapping:0x1008E - ,simpleTitleCaseMapping:0x1008E - }, - { code:0x1008F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1008F - ,simpleLowerCaseMapping:0x1008F - ,simpleTitleCaseMapping:0x1008F - }, - { code:0x10090 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10090 - ,simpleLowerCaseMapping:0x10090 - ,simpleTitleCaseMapping:0x10090 - }, - { code:0x10091 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10091 - ,simpleLowerCaseMapping:0x10091 - ,simpleTitleCaseMapping:0x10091 - }, - { code:0x10092 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10092 - ,simpleLowerCaseMapping:0x10092 - ,simpleTitleCaseMapping:0x10092 - }, - { code:0x10093 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10093 - ,simpleLowerCaseMapping:0x10093 - ,simpleTitleCaseMapping:0x10093 - }, - { code:0x10094 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10094 - ,simpleLowerCaseMapping:0x10094 - ,simpleTitleCaseMapping:0x10094 - }, - { code:0x10095 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10095 - ,simpleLowerCaseMapping:0x10095 - ,simpleTitleCaseMapping:0x10095 - }, - { code:0x10096 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10096 - ,simpleLowerCaseMapping:0x10096 - ,simpleTitleCaseMapping:0x10096 - }, - { code:0x10097 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10097 - ,simpleLowerCaseMapping:0x10097 - ,simpleTitleCaseMapping:0x10097 - }, - { code:0x10098 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10098 - ,simpleLowerCaseMapping:0x10098 - ,simpleTitleCaseMapping:0x10098 - }, - { code:0x10099 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10099 - ,simpleLowerCaseMapping:0x10099 - ,simpleTitleCaseMapping:0x10099 - }, - { code:0x1009A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009A - ,simpleLowerCaseMapping:0x1009A - ,simpleTitleCaseMapping:0x1009A - }, - { code:0x1009B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009B - ,simpleLowerCaseMapping:0x1009B - ,simpleTitleCaseMapping:0x1009B - }, - { code:0x1009C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009C - ,simpleLowerCaseMapping:0x1009C - ,simpleTitleCaseMapping:0x1009C - }, - { code:0x1009D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009D - ,simpleLowerCaseMapping:0x1009D - ,simpleTitleCaseMapping:0x1009D - }, - { code:0x1009E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009E - ,simpleLowerCaseMapping:0x1009E - ,simpleTitleCaseMapping:0x1009E - }, - { code:0x1009F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1009F - ,simpleLowerCaseMapping:0x1009F - ,simpleTitleCaseMapping:0x1009F - }, - { code:0x100A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A0 - ,simpleLowerCaseMapping:0x100A0 - ,simpleTitleCaseMapping:0x100A0 - }, - { code:0x100A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A1 - ,simpleLowerCaseMapping:0x100A1 - ,simpleTitleCaseMapping:0x100A1 - }, - { code:0x100A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A2 - ,simpleLowerCaseMapping:0x100A2 - ,simpleTitleCaseMapping:0x100A2 - }, - { code:0x100A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A3 - ,simpleLowerCaseMapping:0x100A3 - ,simpleTitleCaseMapping:0x100A3 - }, - { code:0x100A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A4 - ,simpleLowerCaseMapping:0x100A4 - ,simpleTitleCaseMapping:0x100A4 - }, - { code:0x100A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A5 - ,simpleLowerCaseMapping:0x100A5 - ,simpleTitleCaseMapping:0x100A5 - }, - { code:0x100A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A6 - ,simpleLowerCaseMapping:0x100A6 - ,simpleTitleCaseMapping:0x100A6 - }, - { code:0x100A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A7 - ,simpleLowerCaseMapping:0x100A7 - ,simpleTitleCaseMapping:0x100A7 - }, - { code:0x100A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A8 - ,simpleLowerCaseMapping:0x100A8 - ,simpleTitleCaseMapping:0x100A8 - }, - { code:0x100A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100A9 - ,simpleLowerCaseMapping:0x100A9 - ,simpleTitleCaseMapping:0x100A9 - }, - { code:0x100AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AA - ,simpleLowerCaseMapping:0x100AA - ,simpleTitleCaseMapping:0x100AA - }, - { code:0x100AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AB - ,simpleLowerCaseMapping:0x100AB - ,simpleTitleCaseMapping:0x100AB - }, - { code:0x100AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AC - ,simpleLowerCaseMapping:0x100AC - ,simpleTitleCaseMapping:0x100AC - }, - { code:0x100AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AD - ,simpleLowerCaseMapping:0x100AD - ,simpleTitleCaseMapping:0x100AD - }, - { code:0x100AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AE - ,simpleLowerCaseMapping:0x100AE - ,simpleTitleCaseMapping:0x100AE - }, - { code:0x100AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100AF - ,simpleLowerCaseMapping:0x100AF - ,simpleTitleCaseMapping:0x100AF - }, - { code:0x100B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B0 - ,simpleLowerCaseMapping:0x100B0 - ,simpleTitleCaseMapping:0x100B0 - }, - { code:0x100B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B1 - ,simpleLowerCaseMapping:0x100B1 - ,simpleTitleCaseMapping:0x100B1 - }, - { code:0x100B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B2 - ,simpleLowerCaseMapping:0x100B2 - ,simpleTitleCaseMapping:0x100B2 - }, - { code:0x100B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B3 - ,simpleLowerCaseMapping:0x100B3 - ,simpleTitleCaseMapping:0x100B3 - }, - { code:0x100B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B4 - ,simpleLowerCaseMapping:0x100B4 - ,simpleTitleCaseMapping:0x100B4 - }, - { code:0x100B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B5 - ,simpleLowerCaseMapping:0x100B5 - ,simpleTitleCaseMapping:0x100B5 - }, - { code:0x100B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B6 - ,simpleLowerCaseMapping:0x100B6 - ,simpleTitleCaseMapping:0x100B6 - }, - { code:0x100B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B7 - ,simpleLowerCaseMapping:0x100B7 - ,simpleTitleCaseMapping:0x100B7 - }, - { code:0x100B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B8 - ,simpleLowerCaseMapping:0x100B8 - ,simpleTitleCaseMapping:0x100B8 - }, - { code:0x100B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100B9 - ,simpleLowerCaseMapping:0x100B9 - ,simpleTitleCaseMapping:0x100B9 - }, - { code:0x100BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BA - ,simpleLowerCaseMapping:0x100BA - ,simpleTitleCaseMapping:0x100BA - }, - { code:0x100BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BB - ,simpleLowerCaseMapping:0x100BB - ,simpleTitleCaseMapping:0x100BB - }, - { code:0x100BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BC - ,simpleLowerCaseMapping:0x100BC - ,simpleTitleCaseMapping:0x100BC - }, - { code:0x100BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BD - ,simpleLowerCaseMapping:0x100BD - ,simpleTitleCaseMapping:0x100BD - }, - { code:0x100BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BE - ,simpleLowerCaseMapping:0x100BE - ,simpleTitleCaseMapping:0x100BE - }, - { code:0x100BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100BF - ,simpleLowerCaseMapping:0x100BF - ,simpleTitleCaseMapping:0x100BF - }, - { code:0x100C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C0 - ,simpleLowerCaseMapping:0x100C0 - ,simpleTitleCaseMapping:0x100C0 - }, - { code:0x100C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C1 - ,simpleLowerCaseMapping:0x100C1 - ,simpleTitleCaseMapping:0x100C1 - }, - { code:0x100C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C2 - ,simpleLowerCaseMapping:0x100C2 - ,simpleTitleCaseMapping:0x100C2 - }, - { code:0x100C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C3 - ,simpleLowerCaseMapping:0x100C3 - ,simpleTitleCaseMapping:0x100C3 - }, - { code:0x100C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C4 - ,simpleLowerCaseMapping:0x100C4 - ,simpleTitleCaseMapping:0x100C4 - }, - { code:0x100C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C5 - ,simpleLowerCaseMapping:0x100C5 - ,simpleTitleCaseMapping:0x100C5 - }, - { code:0x100C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C6 - ,simpleLowerCaseMapping:0x100C6 - ,simpleTitleCaseMapping:0x100C6 - }, - { code:0x100C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C7 - ,simpleLowerCaseMapping:0x100C7 - ,simpleTitleCaseMapping:0x100C7 - }, - { code:0x100C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C8 - ,simpleLowerCaseMapping:0x100C8 - ,simpleTitleCaseMapping:0x100C8 - }, - { code:0x100C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100C9 - ,simpleLowerCaseMapping:0x100C9 - ,simpleTitleCaseMapping:0x100C9 - }, - { code:0x100CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CA - ,simpleLowerCaseMapping:0x100CA - ,simpleTitleCaseMapping:0x100CA - }, - { code:0x100CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CB - ,simpleLowerCaseMapping:0x100CB - ,simpleTitleCaseMapping:0x100CB - }, - { code:0x100CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CC - ,simpleLowerCaseMapping:0x100CC - ,simpleTitleCaseMapping:0x100CC - }, - { code:0x100CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CD - ,simpleLowerCaseMapping:0x100CD - ,simpleTitleCaseMapping:0x100CD - }, - { code:0x100CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CE - ,simpleLowerCaseMapping:0x100CE - ,simpleTitleCaseMapping:0x100CE - }, - { code:0x100CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100CF - ,simpleLowerCaseMapping:0x100CF - ,simpleTitleCaseMapping:0x100CF - }, - { code:0x100D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D0 - ,simpleLowerCaseMapping:0x100D0 - ,simpleTitleCaseMapping:0x100D0 - }, - { code:0x100D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D1 - ,simpleLowerCaseMapping:0x100D1 - ,simpleTitleCaseMapping:0x100D1 - }, - { code:0x100D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D2 - ,simpleLowerCaseMapping:0x100D2 - ,simpleTitleCaseMapping:0x100D2 - }, - { code:0x100D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D3 - ,simpleLowerCaseMapping:0x100D3 - ,simpleTitleCaseMapping:0x100D3 - }, - { code:0x100D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D4 - ,simpleLowerCaseMapping:0x100D4 - ,simpleTitleCaseMapping:0x100D4 - }, - { code:0x100D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D5 - ,simpleLowerCaseMapping:0x100D5 - ,simpleTitleCaseMapping:0x100D5 - }, - { code:0x100D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D6 - ,simpleLowerCaseMapping:0x100D6 - ,simpleTitleCaseMapping:0x100D6 - }, - { code:0x100D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D7 - ,simpleLowerCaseMapping:0x100D7 - ,simpleTitleCaseMapping:0x100D7 - }, - { code:0x100D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D8 - ,simpleLowerCaseMapping:0x100D8 - ,simpleTitleCaseMapping:0x100D8 - }, - { code:0x100D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100D9 - ,simpleLowerCaseMapping:0x100D9 - ,simpleTitleCaseMapping:0x100D9 - }, - { code:0x100DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DA - ,simpleLowerCaseMapping:0x100DA - ,simpleTitleCaseMapping:0x100DA - }, - { code:0x100DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DB - ,simpleLowerCaseMapping:0x100DB - ,simpleTitleCaseMapping:0x100DB - }, - { code:0x100DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DC - ,simpleLowerCaseMapping:0x100DC - ,simpleTitleCaseMapping:0x100DC - }, - { code:0x100DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DD - ,simpleLowerCaseMapping:0x100DD - ,simpleTitleCaseMapping:0x100DD - }, - { code:0x100DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DE - ,simpleLowerCaseMapping:0x100DE - ,simpleTitleCaseMapping:0x100DE - }, - { code:0x100DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100DF - ,simpleLowerCaseMapping:0x100DF - ,simpleTitleCaseMapping:0x100DF - }, - { code:0x100E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E0 - ,simpleLowerCaseMapping:0x100E0 - ,simpleTitleCaseMapping:0x100E0 - }, - { code:0x100E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E1 - ,simpleLowerCaseMapping:0x100E1 - ,simpleTitleCaseMapping:0x100E1 - }, - { code:0x100E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E2 - ,simpleLowerCaseMapping:0x100E2 - ,simpleTitleCaseMapping:0x100E2 - }, - { code:0x100E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E3 - ,simpleLowerCaseMapping:0x100E3 - ,simpleTitleCaseMapping:0x100E3 - }, - { code:0x100E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E4 - ,simpleLowerCaseMapping:0x100E4 - ,simpleTitleCaseMapping:0x100E4 - }, - { code:0x100E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E5 - ,simpleLowerCaseMapping:0x100E5 - ,simpleTitleCaseMapping:0x100E5 - }, - { code:0x100E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E6 - ,simpleLowerCaseMapping:0x100E6 - ,simpleTitleCaseMapping:0x100E6 - }, - { code:0x100E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E7 - ,simpleLowerCaseMapping:0x100E7 - ,simpleTitleCaseMapping:0x100E7 - }, - { code:0x100E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E8 - ,simpleLowerCaseMapping:0x100E8 - ,simpleTitleCaseMapping:0x100E8 - }, - { code:0x100E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100E9 - ,simpleLowerCaseMapping:0x100E9 - ,simpleTitleCaseMapping:0x100E9 - }, - { code:0x100EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100EA - ,simpleLowerCaseMapping:0x100EA - ,simpleTitleCaseMapping:0x100EA - }, - { code:0x100EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100EB - ,simpleLowerCaseMapping:0x100EB - ,simpleTitleCaseMapping:0x100EB - }, - { code:0x100EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100EC - ,simpleLowerCaseMapping:0x100EC - ,simpleTitleCaseMapping:0x100EC - }, - { code:0x100ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100ED - ,simpleLowerCaseMapping:0x100ED - ,simpleTitleCaseMapping:0x100ED - }, - { code:0x100EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100EE - ,simpleLowerCaseMapping:0x100EE - ,simpleTitleCaseMapping:0x100EE - }, - { code:0x100EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100EF - ,simpleLowerCaseMapping:0x100EF - ,simpleTitleCaseMapping:0x100EF - }, - { code:0x100F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F0 - ,simpleLowerCaseMapping:0x100F0 - ,simpleTitleCaseMapping:0x100F0 - }, - { code:0x100F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F1 - ,simpleLowerCaseMapping:0x100F1 - ,simpleTitleCaseMapping:0x100F1 - }, - { code:0x100F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F2 - ,simpleLowerCaseMapping:0x100F2 - ,simpleTitleCaseMapping:0x100F2 - }, - { code:0x100F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F3 - ,simpleLowerCaseMapping:0x100F3 - ,simpleTitleCaseMapping:0x100F3 - }, - { code:0x100F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F4 - ,simpleLowerCaseMapping:0x100F4 - ,simpleTitleCaseMapping:0x100F4 - }, - { code:0x100F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F5 - ,simpleLowerCaseMapping:0x100F5 - ,simpleTitleCaseMapping:0x100F5 - }, - { code:0x100F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F6 - ,simpleLowerCaseMapping:0x100F6 - ,simpleTitleCaseMapping:0x100F6 - }, - { code:0x100F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F7 - ,simpleLowerCaseMapping:0x100F7 - ,simpleTitleCaseMapping:0x100F7 - }, - { code:0x100F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F8 - ,simpleLowerCaseMapping:0x100F8 - ,simpleTitleCaseMapping:0x100F8 - }, - { code:0x100F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100F9 - ,simpleLowerCaseMapping:0x100F9 - ,simpleTitleCaseMapping:0x100F9 - }, - { code:0x100FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x100FA - ,simpleLowerCaseMapping:0x100FA - ,simpleTitleCaseMapping:0x100FA - }, - { code:0x10100 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10100 - ,simpleLowerCaseMapping:0x10100 - ,simpleTitleCaseMapping:0x10100 - }, - { code:0x10101 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10101 - ,simpleLowerCaseMapping:0x10101 - ,simpleTitleCaseMapping:0x10101 - }, - { code:0x10102 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10102 - ,simpleLowerCaseMapping:0x10102 - ,simpleTitleCaseMapping:0x10102 - }, - { code:0x10107 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10107 - ,simpleLowerCaseMapping:0x10107 - ,simpleTitleCaseMapping:0x10107 - }, - { code:0x10108 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10108 - ,simpleLowerCaseMapping:0x10108 - ,simpleTitleCaseMapping:0x10108 - }, - { code:0x10109 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10109 - ,simpleLowerCaseMapping:0x10109 - ,simpleTitleCaseMapping:0x10109 - }, - { code:0x1010A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010A - ,simpleLowerCaseMapping:0x1010A - ,simpleTitleCaseMapping:0x1010A - }, - { code:0x1010B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010B - ,simpleLowerCaseMapping:0x1010B - ,simpleTitleCaseMapping:0x1010B - }, - { code:0x1010C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010C - ,simpleLowerCaseMapping:0x1010C - ,simpleTitleCaseMapping:0x1010C - }, - { code:0x1010D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010D - ,simpleLowerCaseMapping:0x1010D - ,simpleTitleCaseMapping:0x1010D - }, - { code:0x1010E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010E - ,simpleLowerCaseMapping:0x1010E - ,simpleTitleCaseMapping:0x1010E - }, - { code:0x1010F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1010F - ,simpleLowerCaseMapping:0x1010F - ,simpleTitleCaseMapping:0x1010F - }, - { code:0x10110 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10110 - ,simpleLowerCaseMapping:0x10110 - ,simpleTitleCaseMapping:0x10110 - }, - { code:0x10111 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10111 - ,simpleLowerCaseMapping:0x10111 - ,simpleTitleCaseMapping:0x10111 - }, - { code:0x10112 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10112 - ,simpleLowerCaseMapping:0x10112 - ,simpleTitleCaseMapping:0x10112 - }, - { code:0x10113 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10113 - ,simpleLowerCaseMapping:0x10113 - ,simpleTitleCaseMapping:0x10113 - }, - { code:0x10114 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10114 - ,simpleLowerCaseMapping:0x10114 - ,simpleTitleCaseMapping:0x10114 - }, - { code:0x10115 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10115 - ,simpleLowerCaseMapping:0x10115 - ,simpleTitleCaseMapping:0x10115 - }, - { code:0x10116 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10116 - ,simpleLowerCaseMapping:0x10116 - ,simpleTitleCaseMapping:0x10116 - }, - { code:0x10117 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10117 - ,simpleLowerCaseMapping:0x10117 - ,simpleTitleCaseMapping:0x10117 - }, - { code:0x10118 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10118 - ,simpleLowerCaseMapping:0x10118 - ,simpleTitleCaseMapping:0x10118 - }, - { code:0x10119 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10119 - ,simpleLowerCaseMapping:0x10119 - ,simpleTitleCaseMapping:0x10119 - }, - { code:0x1011A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011A - ,simpleLowerCaseMapping:0x1011A - ,simpleTitleCaseMapping:0x1011A - }, - { code:0x1011B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011B - ,simpleLowerCaseMapping:0x1011B - ,simpleTitleCaseMapping:0x1011B - }, - { code:0x1011C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011C - ,simpleLowerCaseMapping:0x1011C - ,simpleTitleCaseMapping:0x1011C - }, - { code:0x1011D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011D - ,simpleLowerCaseMapping:0x1011D - ,simpleTitleCaseMapping:0x1011D - }, - { code:0x1011E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011E - ,simpleLowerCaseMapping:0x1011E - ,simpleTitleCaseMapping:0x1011E - }, - { code:0x1011F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1011F - ,simpleLowerCaseMapping:0x1011F - ,simpleTitleCaseMapping:0x1011F - }, - { code:0x10120 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10120 - ,simpleLowerCaseMapping:0x10120 - ,simpleTitleCaseMapping:0x10120 - }, - { code:0x10121 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10121 - ,simpleLowerCaseMapping:0x10121 - ,simpleTitleCaseMapping:0x10121 - }, - { code:0x10122 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10122 - ,simpleLowerCaseMapping:0x10122 - ,simpleTitleCaseMapping:0x10122 - }, - { code:0x10123 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10123 - ,simpleLowerCaseMapping:0x10123 - ,simpleTitleCaseMapping:0x10123 - }, - { code:0x10124 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10124 - ,simpleLowerCaseMapping:0x10124 - ,simpleTitleCaseMapping:0x10124 - }, - { code:0x10125 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10125 - ,simpleLowerCaseMapping:0x10125 - ,simpleTitleCaseMapping:0x10125 - }, - { code:0x10126 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10126 - ,simpleLowerCaseMapping:0x10126 - ,simpleTitleCaseMapping:0x10126 - }, - { code:0x10127 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10127 - ,simpleLowerCaseMapping:0x10127 - ,simpleTitleCaseMapping:0x10127 - }, - { code:0x10128 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10128 - ,simpleLowerCaseMapping:0x10128 - ,simpleTitleCaseMapping:0x10128 - }, - { code:0x10129 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10129 - ,simpleLowerCaseMapping:0x10129 - ,simpleTitleCaseMapping:0x10129 - }, - { code:0x1012A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012A - ,simpleLowerCaseMapping:0x1012A - ,simpleTitleCaseMapping:0x1012A - }, - { code:0x1012B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012B - ,simpleLowerCaseMapping:0x1012B - ,simpleTitleCaseMapping:0x1012B - }, - { code:0x1012C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012C - ,simpleLowerCaseMapping:0x1012C - ,simpleTitleCaseMapping:0x1012C - }, - { code:0x1012D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012D - ,simpleLowerCaseMapping:0x1012D - ,simpleTitleCaseMapping:0x1012D - }, - { code:0x1012E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012E - ,simpleLowerCaseMapping:0x1012E - ,simpleTitleCaseMapping:0x1012E - }, - { code:0x1012F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1012F - ,simpleLowerCaseMapping:0x1012F - ,simpleTitleCaseMapping:0x1012F - }, - { code:0x10130 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10130 - ,simpleLowerCaseMapping:0x10130 - ,simpleTitleCaseMapping:0x10130 - }, - { code:0x10131 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10131 - ,simpleLowerCaseMapping:0x10131 - ,simpleTitleCaseMapping:0x10131 - }, - { code:0x10132 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10132 - ,simpleLowerCaseMapping:0x10132 - ,simpleTitleCaseMapping:0x10132 - }, - { code:0x10133 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10133 - ,simpleLowerCaseMapping:0x10133 - ,simpleTitleCaseMapping:0x10133 - }, - { code:0x10137 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10137 - ,simpleLowerCaseMapping:0x10137 - ,simpleTitleCaseMapping:0x10137 - }, - { code:0x10138 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10138 - ,simpleLowerCaseMapping:0x10138 - ,simpleTitleCaseMapping:0x10138 - }, - { code:0x10139 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10139 - ,simpleLowerCaseMapping:0x10139 - ,simpleTitleCaseMapping:0x10139 - }, - { code:0x1013A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013A - ,simpleLowerCaseMapping:0x1013A - ,simpleTitleCaseMapping:0x1013A - }, - { code:0x1013B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013B - ,simpleLowerCaseMapping:0x1013B - ,simpleTitleCaseMapping:0x1013B - }, - { code:0x1013C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013C - ,simpleLowerCaseMapping:0x1013C - ,simpleTitleCaseMapping:0x1013C - }, - { code:0x1013D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013D - ,simpleLowerCaseMapping:0x1013D - ,simpleTitleCaseMapping:0x1013D - }, - { code:0x1013E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013E - ,simpleLowerCaseMapping:0x1013E - ,simpleTitleCaseMapping:0x1013E - }, - { code:0x1013F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1013F - ,simpleLowerCaseMapping:0x1013F - ,simpleTitleCaseMapping:0x1013F - }, - { code:0x10140 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10140 - ,simpleLowerCaseMapping:0x10140 - ,simpleTitleCaseMapping:0x10140 - }, - { code:0x10141 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10141 - ,simpleLowerCaseMapping:0x10141 - ,simpleTitleCaseMapping:0x10141 - }, - { code:0x10142 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10142 - ,simpleLowerCaseMapping:0x10142 - ,simpleTitleCaseMapping:0x10142 - }, - { code:0x10143 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10143 - ,simpleLowerCaseMapping:0x10143 - ,simpleTitleCaseMapping:0x10143 - }, - { code:0x10144 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10144 - ,simpleLowerCaseMapping:0x10144 - ,simpleTitleCaseMapping:0x10144 - }, - { code:0x10145 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10145 - ,simpleLowerCaseMapping:0x10145 - ,simpleTitleCaseMapping:0x10145 - }, - { code:0x10146 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10146 - ,simpleLowerCaseMapping:0x10146 - ,simpleTitleCaseMapping:0x10146 - }, - { code:0x10147 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10147 - ,simpleLowerCaseMapping:0x10147 - ,simpleTitleCaseMapping:0x10147 - }, - { code:0x10148 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10148 - ,simpleLowerCaseMapping:0x10148 - ,simpleTitleCaseMapping:0x10148 - }, - { code:0x10149 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10149 - ,simpleLowerCaseMapping:0x10149 - ,simpleTitleCaseMapping:0x10149 - }, - { code:0x1014A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014A - ,simpleLowerCaseMapping:0x1014A - ,simpleTitleCaseMapping:0x1014A - }, - { code:0x1014B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014B - ,simpleLowerCaseMapping:0x1014B - ,simpleTitleCaseMapping:0x1014B - }, - { code:0x1014C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014C - ,simpleLowerCaseMapping:0x1014C - ,simpleTitleCaseMapping:0x1014C - }, - { code:0x1014D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014D - ,simpleLowerCaseMapping:0x1014D - ,simpleTitleCaseMapping:0x1014D - }, - { code:0x1014E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014E - ,simpleLowerCaseMapping:0x1014E - ,simpleTitleCaseMapping:0x1014E - }, - { code:0x1014F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1014F - ,simpleLowerCaseMapping:0x1014F - ,simpleTitleCaseMapping:0x1014F - }, - { code:0x10150 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10150 - ,simpleLowerCaseMapping:0x10150 - ,simpleTitleCaseMapping:0x10150 - }, - { code:0x10151 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10151 - ,simpleLowerCaseMapping:0x10151 - ,simpleTitleCaseMapping:0x10151 - }, - { code:0x10152 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10152 - ,simpleLowerCaseMapping:0x10152 - ,simpleTitleCaseMapping:0x10152 - }, - { code:0x10153 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10153 - ,simpleLowerCaseMapping:0x10153 - ,simpleTitleCaseMapping:0x10153 - }, - { code:0x10154 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10154 - ,simpleLowerCaseMapping:0x10154 - ,simpleTitleCaseMapping:0x10154 - }, - { code:0x10155 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10155 - ,simpleLowerCaseMapping:0x10155 - ,simpleTitleCaseMapping:0x10155 - }, - { code:0x10156 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10156 - ,simpleLowerCaseMapping:0x10156 - ,simpleTitleCaseMapping:0x10156 - }, - { code:0x10157 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10157 - ,simpleLowerCaseMapping:0x10157 - ,simpleTitleCaseMapping:0x10157 - }, - { code:0x10158 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10158 - ,simpleLowerCaseMapping:0x10158 - ,simpleTitleCaseMapping:0x10158 - }, - { code:0x10159 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10159 - ,simpleLowerCaseMapping:0x10159 - ,simpleTitleCaseMapping:0x10159 - }, - { code:0x1015A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015A - ,simpleLowerCaseMapping:0x1015A - ,simpleTitleCaseMapping:0x1015A - }, - { code:0x1015B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015B - ,simpleLowerCaseMapping:0x1015B - ,simpleTitleCaseMapping:0x1015B - }, - { code:0x1015C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015C - ,simpleLowerCaseMapping:0x1015C - ,simpleTitleCaseMapping:0x1015C - }, - { code:0x1015D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015D - ,simpleLowerCaseMapping:0x1015D - ,simpleTitleCaseMapping:0x1015D - }, - { code:0x1015E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015E - ,simpleLowerCaseMapping:0x1015E - ,simpleTitleCaseMapping:0x1015E - }, - { code:0x1015F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1015F - ,simpleLowerCaseMapping:0x1015F - ,simpleTitleCaseMapping:0x1015F - }, - { code:0x10160 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10160 - ,simpleLowerCaseMapping:0x10160 - ,simpleTitleCaseMapping:0x10160 - }, - { code:0x10161 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10161 - ,simpleLowerCaseMapping:0x10161 - ,simpleTitleCaseMapping:0x10161 - }, - { code:0x10162 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10162 - ,simpleLowerCaseMapping:0x10162 - ,simpleTitleCaseMapping:0x10162 - }, - { code:0x10163 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10163 - ,simpleLowerCaseMapping:0x10163 - ,simpleTitleCaseMapping:0x10163 - }, - { code:0x10164 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10164 - ,simpleLowerCaseMapping:0x10164 - ,simpleTitleCaseMapping:0x10164 - }, - { code:0x10165 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10165 - ,simpleLowerCaseMapping:0x10165 - ,simpleTitleCaseMapping:0x10165 - }, - { code:0x10166 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10166 - ,simpleLowerCaseMapping:0x10166 - ,simpleTitleCaseMapping:0x10166 - }, - { code:0x10167 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10167 - ,simpleLowerCaseMapping:0x10167 - ,simpleTitleCaseMapping:0x10167 - }, - { code:0x10168 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10168 - ,simpleLowerCaseMapping:0x10168 - ,simpleTitleCaseMapping:0x10168 - }, - { code:0x10169 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10169 - ,simpleLowerCaseMapping:0x10169 - ,simpleTitleCaseMapping:0x10169 - }, - { code:0x1016A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016A - ,simpleLowerCaseMapping:0x1016A - ,simpleTitleCaseMapping:0x1016A - }, - { code:0x1016B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016B - ,simpleLowerCaseMapping:0x1016B - ,simpleTitleCaseMapping:0x1016B - }, - { code:0x1016C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016C - ,simpleLowerCaseMapping:0x1016C - ,simpleTitleCaseMapping:0x1016C - }, - { code:0x1016D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016D - ,simpleLowerCaseMapping:0x1016D - ,simpleTitleCaseMapping:0x1016D - }, - { code:0x1016E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016E - ,simpleLowerCaseMapping:0x1016E - ,simpleTitleCaseMapping:0x1016E - }, - { code:0x1016F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1016F - ,simpleLowerCaseMapping:0x1016F - ,simpleTitleCaseMapping:0x1016F - }, - { code:0x10170 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10170 - ,simpleLowerCaseMapping:0x10170 - ,simpleTitleCaseMapping:0x10170 - }, - { code:0x10171 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10171 - ,simpleLowerCaseMapping:0x10171 - ,simpleTitleCaseMapping:0x10171 - }, - { code:0x10172 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10172 - ,simpleLowerCaseMapping:0x10172 - ,simpleTitleCaseMapping:0x10172 - }, - { code:0x10173 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10173 - ,simpleLowerCaseMapping:0x10173 - ,simpleTitleCaseMapping:0x10173 - }, - { code:0x10174 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10174 - ,simpleLowerCaseMapping:0x10174 - ,simpleTitleCaseMapping:0x10174 - }, - { code:0x10175 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10175 - ,simpleLowerCaseMapping:0x10175 - ,simpleTitleCaseMapping:0x10175 - }, - { code:0x10176 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10176 - ,simpleLowerCaseMapping:0x10176 - ,simpleTitleCaseMapping:0x10176 - }, - { code:0x10177 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10177 - ,simpleLowerCaseMapping:0x10177 - ,simpleTitleCaseMapping:0x10177 - }, - { code:0x10178 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10178 - ,simpleLowerCaseMapping:0x10178 - ,simpleTitleCaseMapping:0x10178 - }, - { code:0x10179 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10179 - ,simpleLowerCaseMapping:0x10179 - ,simpleTitleCaseMapping:0x10179 - }, - { code:0x1017A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017A - ,simpleLowerCaseMapping:0x1017A - ,simpleTitleCaseMapping:0x1017A - }, - { code:0x1017B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017B - ,simpleLowerCaseMapping:0x1017B - ,simpleTitleCaseMapping:0x1017B - }, - { code:0x1017C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017C - ,simpleLowerCaseMapping:0x1017C - ,simpleTitleCaseMapping:0x1017C - }, - { code:0x1017D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017D - ,simpleLowerCaseMapping:0x1017D - ,simpleTitleCaseMapping:0x1017D - }, - { code:0x1017E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017E - ,simpleLowerCaseMapping:0x1017E - ,simpleTitleCaseMapping:0x1017E - }, - { code:0x1017F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1017F - ,simpleLowerCaseMapping:0x1017F - ,simpleTitleCaseMapping:0x1017F - }, - { code:0x10180 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10180 - ,simpleLowerCaseMapping:0x10180 - ,simpleTitleCaseMapping:0x10180 - }, - { code:0x10181 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10181 - ,simpleLowerCaseMapping:0x10181 - ,simpleTitleCaseMapping:0x10181 - }, - { code:0x10182 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10182 - ,simpleLowerCaseMapping:0x10182 - ,simpleTitleCaseMapping:0x10182 - }, - { code:0x10183 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10183 - ,simpleLowerCaseMapping:0x10183 - ,simpleTitleCaseMapping:0x10183 - }, - { code:0x10184 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10184 - ,simpleLowerCaseMapping:0x10184 - ,simpleTitleCaseMapping:0x10184 - }, - { code:0x10185 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10185 - ,simpleLowerCaseMapping:0x10185 - ,simpleTitleCaseMapping:0x10185 - }, - { code:0x10186 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10186 - ,simpleLowerCaseMapping:0x10186 - ,simpleTitleCaseMapping:0x10186 - }, - { code:0x10187 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10187 - ,simpleLowerCaseMapping:0x10187 - ,simpleTitleCaseMapping:0x10187 - }, - { code:0x10188 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10188 - ,simpleLowerCaseMapping:0x10188 - ,simpleTitleCaseMapping:0x10188 - }, - { code:0x10189 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x10189 - ,simpleLowerCaseMapping:0x10189 - ,simpleTitleCaseMapping:0x10189 - }, - { code:0x1018A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1018A - ,simpleLowerCaseMapping:0x1018A - ,simpleTitleCaseMapping:0x1018A - }, - { code:0x10300 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10300 - ,simpleLowerCaseMapping:0x10300 - ,simpleTitleCaseMapping:0x10300 - }, - { code:0x10301 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10301 - ,simpleLowerCaseMapping:0x10301 - ,simpleTitleCaseMapping:0x10301 - }, - { code:0x10302 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10302 - ,simpleLowerCaseMapping:0x10302 - ,simpleTitleCaseMapping:0x10302 - }, - { code:0x10303 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10303 - ,simpleLowerCaseMapping:0x10303 - ,simpleTitleCaseMapping:0x10303 - }, - { code:0x10304 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10304 - ,simpleLowerCaseMapping:0x10304 - ,simpleTitleCaseMapping:0x10304 - }, - { code:0x10305 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10305 - ,simpleLowerCaseMapping:0x10305 - ,simpleTitleCaseMapping:0x10305 - }, - { code:0x10306 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10306 - ,simpleLowerCaseMapping:0x10306 - ,simpleTitleCaseMapping:0x10306 - }, - { code:0x10307 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10307 - ,simpleLowerCaseMapping:0x10307 - ,simpleTitleCaseMapping:0x10307 - }, - { code:0x10308 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10308 - ,simpleLowerCaseMapping:0x10308 - ,simpleTitleCaseMapping:0x10308 - }, - { code:0x10309 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10309 - ,simpleLowerCaseMapping:0x10309 - ,simpleTitleCaseMapping:0x10309 - }, - { code:0x1030A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030A - ,simpleLowerCaseMapping:0x1030A - ,simpleTitleCaseMapping:0x1030A - }, - { code:0x1030B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030B - ,simpleLowerCaseMapping:0x1030B - ,simpleTitleCaseMapping:0x1030B - }, - { code:0x1030C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030C - ,simpleLowerCaseMapping:0x1030C - ,simpleTitleCaseMapping:0x1030C - }, - { code:0x1030D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030D - ,simpleLowerCaseMapping:0x1030D - ,simpleTitleCaseMapping:0x1030D - }, - { code:0x1030E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030E - ,simpleLowerCaseMapping:0x1030E - ,simpleTitleCaseMapping:0x1030E - }, - { code:0x1030F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1030F - ,simpleLowerCaseMapping:0x1030F - ,simpleTitleCaseMapping:0x1030F - }, - { code:0x10310 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10310 - ,simpleLowerCaseMapping:0x10310 - ,simpleTitleCaseMapping:0x10310 - }, - { code:0x10311 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10311 - ,simpleLowerCaseMapping:0x10311 - ,simpleTitleCaseMapping:0x10311 - }, - { code:0x10312 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10312 - ,simpleLowerCaseMapping:0x10312 - ,simpleTitleCaseMapping:0x10312 - }, - { code:0x10313 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10313 - ,simpleLowerCaseMapping:0x10313 - ,simpleTitleCaseMapping:0x10313 - }, - { code:0x10314 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10314 - ,simpleLowerCaseMapping:0x10314 - ,simpleTitleCaseMapping:0x10314 - }, - { code:0x10315 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10315 - ,simpleLowerCaseMapping:0x10315 - ,simpleTitleCaseMapping:0x10315 - }, - { code:0x10316 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10316 - ,simpleLowerCaseMapping:0x10316 - ,simpleTitleCaseMapping:0x10316 - }, - { code:0x10317 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10317 - ,simpleLowerCaseMapping:0x10317 - ,simpleTitleCaseMapping:0x10317 - }, - { code:0x10318 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10318 - ,simpleLowerCaseMapping:0x10318 - ,simpleTitleCaseMapping:0x10318 - }, - { code:0x10319 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10319 - ,simpleLowerCaseMapping:0x10319 - ,simpleTitleCaseMapping:0x10319 - }, - { code:0x1031A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1031A - ,simpleLowerCaseMapping:0x1031A - ,simpleTitleCaseMapping:0x1031A - }, - { code:0x1031B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1031B - ,simpleLowerCaseMapping:0x1031B - ,simpleTitleCaseMapping:0x1031B - }, - { code:0x1031C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1031C - ,simpleLowerCaseMapping:0x1031C - ,simpleTitleCaseMapping:0x1031C - }, - { code:0x1031D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1031D - ,simpleLowerCaseMapping:0x1031D - ,simpleTitleCaseMapping:0x1031D - }, - { code:0x1031E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1031E - ,simpleLowerCaseMapping:0x1031E - ,simpleTitleCaseMapping:0x1031E - }, - { code:0x10320 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10320 - ,simpleLowerCaseMapping:0x10320 - ,simpleTitleCaseMapping:0x10320 - }, - { code:0x10321 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10321 - ,simpleLowerCaseMapping:0x10321 - ,simpleTitleCaseMapping:0x10321 - }, - { code:0x10322 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10322 - ,simpleLowerCaseMapping:0x10322 - ,simpleTitleCaseMapping:0x10322 - }, - { code:0x10323 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10323 - ,simpleLowerCaseMapping:0x10323 - ,simpleTitleCaseMapping:0x10323 - }, - { code:0x10330 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10330 - ,simpleLowerCaseMapping:0x10330 - ,simpleTitleCaseMapping:0x10330 - }, - { code:0x10331 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10331 - ,simpleLowerCaseMapping:0x10331 - ,simpleTitleCaseMapping:0x10331 - }, - { code:0x10332 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10332 - ,simpleLowerCaseMapping:0x10332 - ,simpleTitleCaseMapping:0x10332 - }, - { code:0x10333 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10333 - ,simpleLowerCaseMapping:0x10333 - ,simpleTitleCaseMapping:0x10333 - }, - { code:0x10334 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10334 - ,simpleLowerCaseMapping:0x10334 - ,simpleTitleCaseMapping:0x10334 - }, - { code:0x10335 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10335 - ,simpleLowerCaseMapping:0x10335 - ,simpleTitleCaseMapping:0x10335 - }, - { code:0x10336 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10336 - ,simpleLowerCaseMapping:0x10336 - ,simpleTitleCaseMapping:0x10336 - }, - { code:0x10337 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10337 - ,simpleLowerCaseMapping:0x10337 - ,simpleTitleCaseMapping:0x10337 - }, - { code:0x10338 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10338 - ,simpleLowerCaseMapping:0x10338 - ,simpleTitleCaseMapping:0x10338 - }, - { code:0x10339 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10339 - ,simpleLowerCaseMapping:0x10339 - ,simpleTitleCaseMapping:0x10339 - }, - { code:0x1033A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033A - ,simpleLowerCaseMapping:0x1033A - ,simpleTitleCaseMapping:0x1033A - }, - { code:0x1033B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033B - ,simpleLowerCaseMapping:0x1033B - ,simpleTitleCaseMapping:0x1033B - }, - { code:0x1033C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033C - ,simpleLowerCaseMapping:0x1033C - ,simpleTitleCaseMapping:0x1033C - }, - { code:0x1033D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033D - ,simpleLowerCaseMapping:0x1033D - ,simpleTitleCaseMapping:0x1033D - }, - { code:0x1033E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033E - ,simpleLowerCaseMapping:0x1033E - ,simpleTitleCaseMapping:0x1033E - }, - { code:0x1033F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1033F - ,simpleLowerCaseMapping:0x1033F - ,simpleTitleCaseMapping:0x1033F - }, - { code:0x10340 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10340 - ,simpleLowerCaseMapping:0x10340 - ,simpleTitleCaseMapping:0x10340 - }, - { code:0x10341 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x10341 - ,simpleLowerCaseMapping:0x10341 - ,simpleTitleCaseMapping:0x10341 - }, - { code:0x10342 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10342 - ,simpleLowerCaseMapping:0x10342 - ,simpleTitleCaseMapping:0x10342 - }, - { code:0x10343 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10343 - ,simpleLowerCaseMapping:0x10343 - ,simpleTitleCaseMapping:0x10343 - }, - { code:0x10344 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10344 - ,simpleLowerCaseMapping:0x10344 - ,simpleTitleCaseMapping:0x10344 - }, - { code:0x10345 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10345 - ,simpleLowerCaseMapping:0x10345 - ,simpleTitleCaseMapping:0x10345 - }, - { code:0x10346 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10346 - ,simpleLowerCaseMapping:0x10346 - ,simpleTitleCaseMapping:0x10346 - }, - { code:0x10347 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10347 - ,simpleLowerCaseMapping:0x10347 - ,simpleTitleCaseMapping:0x10347 - }, - { code:0x10348 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10348 - ,simpleLowerCaseMapping:0x10348 - ,simpleTitleCaseMapping:0x10348 - }, - { code:0x10349 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10349 - ,simpleLowerCaseMapping:0x10349 - ,simpleTitleCaseMapping:0x10349 - }, - { code:0x1034A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1034A - ,simpleLowerCaseMapping:0x1034A - ,simpleTitleCaseMapping:0x1034A - }, - { code:0x10380 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10380 - ,simpleLowerCaseMapping:0x10380 - ,simpleTitleCaseMapping:0x10380 - }, - { code:0x10381 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10381 - ,simpleLowerCaseMapping:0x10381 - ,simpleTitleCaseMapping:0x10381 - }, - { code:0x10382 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10382 - ,simpleLowerCaseMapping:0x10382 - ,simpleTitleCaseMapping:0x10382 - }, - { code:0x10383 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10383 - ,simpleLowerCaseMapping:0x10383 - ,simpleTitleCaseMapping:0x10383 - }, - { code:0x10384 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10384 - ,simpleLowerCaseMapping:0x10384 - ,simpleTitleCaseMapping:0x10384 - }, - { code:0x10385 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10385 - ,simpleLowerCaseMapping:0x10385 - ,simpleTitleCaseMapping:0x10385 - }, - { code:0x10386 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10386 - ,simpleLowerCaseMapping:0x10386 - ,simpleTitleCaseMapping:0x10386 - }, - { code:0x10387 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10387 - ,simpleLowerCaseMapping:0x10387 - ,simpleTitleCaseMapping:0x10387 - }, - { code:0x10388 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10388 - ,simpleLowerCaseMapping:0x10388 - ,simpleTitleCaseMapping:0x10388 - }, - { code:0x10389 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10389 - ,simpleLowerCaseMapping:0x10389 - ,simpleTitleCaseMapping:0x10389 - }, - { code:0x1038A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038A - ,simpleLowerCaseMapping:0x1038A - ,simpleTitleCaseMapping:0x1038A - }, - { code:0x1038B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038B - ,simpleLowerCaseMapping:0x1038B - ,simpleTitleCaseMapping:0x1038B - }, - { code:0x1038C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038C - ,simpleLowerCaseMapping:0x1038C - ,simpleTitleCaseMapping:0x1038C - }, - { code:0x1038D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038D - ,simpleLowerCaseMapping:0x1038D - ,simpleTitleCaseMapping:0x1038D - }, - { code:0x1038E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038E - ,simpleLowerCaseMapping:0x1038E - ,simpleTitleCaseMapping:0x1038E - }, - { code:0x1038F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1038F - ,simpleLowerCaseMapping:0x1038F - ,simpleTitleCaseMapping:0x1038F - }, - { code:0x10390 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10390 - ,simpleLowerCaseMapping:0x10390 - ,simpleTitleCaseMapping:0x10390 - }, - { code:0x10391 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10391 - ,simpleLowerCaseMapping:0x10391 - ,simpleTitleCaseMapping:0x10391 - }, - { code:0x10392 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10392 - ,simpleLowerCaseMapping:0x10392 - ,simpleTitleCaseMapping:0x10392 - }, - { code:0x10393 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10393 - ,simpleLowerCaseMapping:0x10393 - ,simpleTitleCaseMapping:0x10393 - }, - { code:0x10394 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10394 - ,simpleLowerCaseMapping:0x10394 - ,simpleTitleCaseMapping:0x10394 - }, - { code:0x10395 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10395 - ,simpleLowerCaseMapping:0x10395 - ,simpleTitleCaseMapping:0x10395 - }, - { code:0x10396 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10396 - ,simpleLowerCaseMapping:0x10396 - ,simpleTitleCaseMapping:0x10396 - }, - { code:0x10397 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10397 - ,simpleLowerCaseMapping:0x10397 - ,simpleTitleCaseMapping:0x10397 - }, - { code:0x10398 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10398 - ,simpleLowerCaseMapping:0x10398 - ,simpleTitleCaseMapping:0x10398 - }, - { code:0x10399 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10399 - ,simpleLowerCaseMapping:0x10399 - ,simpleTitleCaseMapping:0x10399 - }, - { code:0x1039A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1039A - ,simpleLowerCaseMapping:0x1039A - ,simpleTitleCaseMapping:0x1039A - }, - { code:0x1039B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1039B - ,simpleLowerCaseMapping:0x1039B - ,simpleTitleCaseMapping:0x1039B - }, - { code:0x1039C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1039C - ,simpleLowerCaseMapping:0x1039C - ,simpleTitleCaseMapping:0x1039C - }, - { code:0x1039D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1039D - ,simpleLowerCaseMapping:0x1039D - ,simpleTitleCaseMapping:0x1039D - }, - { code:0x1039F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1039F - ,simpleLowerCaseMapping:0x1039F - ,simpleTitleCaseMapping:0x1039F - }, - { code:0x103A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A0 - ,simpleLowerCaseMapping:0x103A0 - ,simpleTitleCaseMapping:0x103A0 - }, - { code:0x103A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A1 - ,simpleLowerCaseMapping:0x103A1 - ,simpleTitleCaseMapping:0x103A1 - }, - { code:0x103A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A2 - ,simpleLowerCaseMapping:0x103A2 - ,simpleTitleCaseMapping:0x103A2 - }, - { code:0x103A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A3 - ,simpleLowerCaseMapping:0x103A3 - ,simpleTitleCaseMapping:0x103A3 - }, - { code:0x103A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A4 - ,simpleLowerCaseMapping:0x103A4 - ,simpleTitleCaseMapping:0x103A4 - }, - { code:0x103A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A5 - ,simpleLowerCaseMapping:0x103A5 - ,simpleTitleCaseMapping:0x103A5 - }, - { code:0x103A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A6 - ,simpleLowerCaseMapping:0x103A6 - ,simpleTitleCaseMapping:0x103A6 - }, - { code:0x103A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A7 - ,simpleLowerCaseMapping:0x103A7 - ,simpleTitleCaseMapping:0x103A7 - }, - { code:0x103A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A8 - ,simpleLowerCaseMapping:0x103A8 - ,simpleTitleCaseMapping:0x103A8 - }, - { code:0x103A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103A9 - ,simpleLowerCaseMapping:0x103A9 - ,simpleTitleCaseMapping:0x103A9 - }, - { code:0x103AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AA - ,simpleLowerCaseMapping:0x103AA - ,simpleTitleCaseMapping:0x103AA - }, - { code:0x103AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AB - ,simpleLowerCaseMapping:0x103AB - ,simpleTitleCaseMapping:0x103AB - }, - { code:0x103AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AC - ,simpleLowerCaseMapping:0x103AC - ,simpleTitleCaseMapping:0x103AC - }, - { code:0x103AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AD - ,simpleLowerCaseMapping:0x103AD - ,simpleTitleCaseMapping:0x103AD - }, - { code:0x103AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AE - ,simpleLowerCaseMapping:0x103AE - ,simpleTitleCaseMapping:0x103AE - }, - { code:0x103AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103AF - ,simpleLowerCaseMapping:0x103AF - ,simpleTitleCaseMapping:0x103AF - }, - { code:0x103B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B0 - ,simpleLowerCaseMapping:0x103B0 - ,simpleTitleCaseMapping:0x103B0 - }, - { code:0x103B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B1 - ,simpleLowerCaseMapping:0x103B1 - ,simpleTitleCaseMapping:0x103B1 - }, - { code:0x103B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B2 - ,simpleLowerCaseMapping:0x103B2 - ,simpleTitleCaseMapping:0x103B2 - }, - { code:0x103B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B3 - ,simpleLowerCaseMapping:0x103B3 - ,simpleTitleCaseMapping:0x103B3 - }, - { code:0x103B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B4 - ,simpleLowerCaseMapping:0x103B4 - ,simpleTitleCaseMapping:0x103B4 - }, - { code:0x103B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B5 - ,simpleLowerCaseMapping:0x103B5 - ,simpleTitleCaseMapping:0x103B5 - }, - { code:0x103B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B6 - ,simpleLowerCaseMapping:0x103B6 - ,simpleTitleCaseMapping:0x103B6 - }, - { code:0x103B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B7 - ,simpleLowerCaseMapping:0x103B7 - ,simpleTitleCaseMapping:0x103B7 - }, - { code:0x103B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B8 - ,simpleLowerCaseMapping:0x103B8 - ,simpleTitleCaseMapping:0x103B8 - }, - { code:0x103B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103B9 - ,simpleLowerCaseMapping:0x103B9 - ,simpleTitleCaseMapping:0x103B9 - }, - { code:0x103BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BA - ,simpleLowerCaseMapping:0x103BA - ,simpleTitleCaseMapping:0x103BA - }, - { code:0x103BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BB - ,simpleLowerCaseMapping:0x103BB - ,simpleTitleCaseMapping:0x103BB - }, - { code:0x103BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BC - ,simpleLowerCaseMapping:0x103BC - ,simpleTitleCaseMapping:0x103BC - }, - { code:0x103BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BD - ,simpleLowerCaseMapping:0x103BD - ,simpleTitleCaseMapping:0x103BD - }, - { code:0x103BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BE - ,simpleLowerCaseMapping:0x103BE - ,simpleTitleCaseMapping:0x103BE - }, - { code:0x103BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103BF - ,simpleLowerCaseMapping:0x103BF - ,simpleTitleCaseMapping:0x103BF - }, - { code:0x103C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C0 - ,simpleLowerCaseMapping:0x103C0 - ,simpleTitleCaseMapping:0x103C0 - }, - { code:0x103C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C1 - ,simpleLowerCaseMapping:0x103C1 - ,simpleTitleCaseMapping:0x103C1 - }, - { code:0x103C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C2 - ,simpleLowerCaseMapping:0x103C2 - ,simpleTitleCaseMapping:0x103C2 - }, - { code:0x103C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C3 - ,simpleLowerCaseMapping:0x103C3 - ,simpleTitleCaseMapping:0x103C3 - }, - { code:0x103C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C8 - ,simpleLowerCaseMapping:0x103C8 - ,simpleTitleCaseMapping:0x103C8 - }, - { code:0x103C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103C9 - ,simpleLowerCaseMapping:0x103C9 - ,simpleTitleCaseMapping:0x103C9 - }, - { code:0x103CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CA - ,simpleLowerCaseMapping:0x103CA - ,simpleTitleCaseMapping:0x103CA - }, - { code:0x103CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CB - ,simpleLowerCaseMapping:0x103CB - ,simpleTitleCaseMapping:0x103CB - }, - { code:0x103CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CC - ,simpleLowerCaseMapping:0x103CC - ,simpleTitleCaseMapping:0x103CC - }, - { code:0x103CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CD - ,simpleLowerCaseMapping:0x103CD - ,simpleTitleCaseMapping:0x103CD - }, - { code:0x103CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CE - ,simpleLowerCaseMapping:0x103CE - ,simpleTitleCaseMapping:0x103CE - }, - { code:0x103CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x103CF - ,simpleLowerCaseMapping:0x103CF - ,simpleTitleCaseMapping:0x103CF - }, - { code:0x103D0 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x103D0 - ,simpleLowerCaseMapping:0x103D0 - ,simpleTitleCaseMapping:0x103D0 - }, - { code:0x103D1 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x103D1 - ,simpleLowerCaseMapping:0x103D1 - ,simpleTitleCaseMapping:0x103D1 - }, - { code:0x103D2 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x103D2 - ,simpleLowerCaseMapping:0x103D2 - ,simpleTitleCaseMapping:0x103D2 - }, - { code:0x103D3 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x103D3 - ,simpleLowerCaseMapping:0x103D3 - ,simpleTitleCaseMapping:0x103D3 - }, - { code:0x103D4 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x103D4 - ,simpleLowerCaseMapping:0x103D4 - ,simpleTitleCaseMapping:0x103D4 - }, - { code:0x103D5 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x103D5 - ,simpleLowerCaseMapping:0x103D5 - ,simpleTitleCaseMapping:0x103D5 - }, - { code:0x10400 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10400 - ,simpleLowerCaseMapping:0x10428 - ,simpleTitleCaseMapping:0x10400 - }, - { code:0x10401 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10401 - ,simpleLowerCaseMapping:0x10429 - ,simpleTitleCaseMapping:0x10401 - }, - { code:0x10402 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10402 - ,simpleLowerCaseMapping:0x1042A - ,simpleTitleCaseMapping:0x10402 - }, - { code:0x10403 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10403 - ,simpleLowerCaseMapping:0x1042B - ,simpleTitleCaseMapping:0x10403 - }, - { code:0x10404 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10404 - ,simpleLowerCaseMapping:0x1042C - ,simpleTitleCaseMapping:0x10404 - }, - { code:0x10405 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10405 - ,simpleLowerCaseMapping:0x1042D - ,simpleTitleCaseMapping:0x10405 - }, - { code:0x10406 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10406 - ,simpleLowerCaseMapping:0x1042E - ,simpleTitleCaseMapping:0x10406 - }, - { code:0x10407 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10407 - ,simpleLowerCaseMapping:0x1042F - ,simpleTitleCaseMapping:0x10407 - }, - { code:0x10408 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10408 - ,simpleLowerCaseMapping:0x10430 - ,simpleTitleCaseMapping:0x10408 - }, - { code:0x10409 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10409 - ,simpleLowerCaseMapping:0x10431 - ,simpleTitleCaseMapping:0x10409 - }, - { code:0x1040A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040A - ,simpleLowerCaseMapping:0x10432 - ,simpleTitleCaseMapping:0x1040A - }, - { code:0x1040B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040B - ,simpleLowerCaseMapping:0x10433 - ,simpleTitleCaseMapping:0x1040B - }, - { code:0x1040C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040C - ,simpleLowerCaseMapping:0x10434 - ,simpleTitleCaseMapping:0x1040C - }, - { code:0x1040D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040D - ,simpleLowerCaseMapping:0x10435 - ,simpleTitleCaseMapping:0x1040D - }, - { code:0x1040E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040E - ,simpleLowerCaseMapping:0x10436 - ,simpleTitleCaseMapping:0x1040E - }, - { code:0x1040F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1040F - ,simpleLowerCaseMapping:0x10437 - ,simpleTitleCaseMapping:0x1040F - }, - { code:0x10410 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10410 - ,simpleLowerCaseMapping:0x10438 - ,simpleTitleCaseMapping:0x10410 - }, - { code:0x10411 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10411 - ,simpleLowerCaseMapping:0x10439 - ,simpleTitleCaseMapping:0x10411 - }, - { code:0x10412 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10412 - ,simpleLowerCaseMapping:0x1043A - ,simpleTitleCaseMapping:0x10412 - }, - { code:0x10413 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10413 - ,simpleLowerCaseMapping:0x1043B - ,simpleTitleCaseMapping:0x10413 - }, - { code:0x10414 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10414 - ,simpleLowerCaseMapping:0x1043C - ,simpleTitleCaseMapping:0x10414 - }, - { code:0x10415 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10415 - ,simpleLowerCaseMapping:0x1043D - ,simpleTitleCaseMapping:0x10415 - }, - { code:0x10416 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10416 - ,simpleLowerCaseMapping:0x1043E - ,simpleTitleCaseMapping:0x10416 - }, - { code:0x10417 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10417 - ,simpleLowerCaseMapping:0x1043F - ,simpleTitleCaseMapping:0x10417 - }, - { code:0x10418 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10418 - ,simpleLowerCaseMapping:0x10440 - ,simpleTitleCaseMapping:0x10418 - }, - { code:0x10419 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10419 - ,simpleLowerCaseMapping:0x10441 - ,simpleTitleCaseMapping:0x10419 - }, - { code:0x1041A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041A - ,simpleLowerCaseMapping:0x10442 - ,simpleTitleCaseMapping:0x1041A - }, - { code:0x1041B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041B - ,simpleLowerCaseMapping:0x10443 - ,simpleTitleCaseMapping:0x1041B - }, - { code:0x1041C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041C - ,simpleLowerCaseMapping:0x10444 - ,simpleTitleCaseMapping:0x1041C - }, - { code:0x1041D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041D - ,simpleLowerCaseMapping:0x10445 - ,simpleTitleCaseMapping:0x1041D - }, - { code:0x1041E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041E - ,simpleLowerCaseMapping:0x10446 - ,simpleTitleCaseMapping:0x1041E - }, - { code:0x1041F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1041F - ,simpleLowerCaseMapping:0x10447 - ,simpleTitleCaseMapping:0x1041F - }, - { code:0x10420 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10420 - ,simpleLowerCaseMapping:0x10448 - ,simpleTitleCaseMapping:0x10420 - }, - { code:0x10421 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10421 - ,simpleLowerCaseMapping:0x10449 - ,simpleTitleCaseMapping:0x10421 - }, - { code:0x10422 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10422 - ,simpleLowerCaseMapping:0x1044A - ,simpleTitleCaseMapping:0x10422 - }, - { code:0x10423 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10423 - ,simpleLowerCaseMapping:0x1044B - ,simpleTitleCaseMapping:0x10423 - }, - { code:0x10424 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10424 - ,simpleLowerCaseMapping:0x1044C - ,simpleTitleCaseMapping:0x10424 - }, - { code:0x10425 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10425 - ,simpleLowerCaseMapping:0x1044D - ,simpleTitleCaseMapping:0x10425 - }, - { code:0x10426 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10426 - ,simpleLowerCaseMapping:0x1044E - ,simpleTitleCaseMapping:0x10426 - }, - { code:0x10427 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x10427 - ,simpleLowerCaseMapping:0x1044F - ,simpleTitleCaseMapping:0x10427 - }, - { code:0x10428 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10400 - ,simpleLowerCaseMapping:0x10428 - ,simpleTitleCaseMapping:0x10400 - }, - { code:0x10429 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10401 - ,simpleLowerCaseMapping:0x10429 - ,simpleTitleCaseMapping:0x10401 - }, - { code:0x1042A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10402 - ,simpleLowerCaseMapping:0x1042A - ,simpleTitleCaseMapping:0x10402 - }, - { code:0x1042B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10403 - ,simpleLowerCaseMapping:0x1042B - ,simpleTitleCaseMapping:0x10403 - }, - { code:0x1042C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10404 - ,simpleLowerCaseMapping:0x1042C - ,simpleTitleCaseMapping:0x10404 - }, - { code:0x1042D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10405 - ,simpleLowerCaseMapping:0x1042D - ,simpleTitleCaseMapping:0x10405 - }, - { code:0x1042E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10406 - ,simpleLowerCaseMapping:0x1042E - ,simpleTitleCaseMapping:0x10406 - }, - { code:0x1042F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10407 - ,simpleLowerCaseMapping:0x1042F - ,simpleTitleCaseMapping:0x10407 - }, - { code:0x10430 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10408 - ,simpleLowerCaseMapping:0x10430 - ,simpleTitleCaseMapping:0x10408 - }, - { code:0x10431 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10409 - ,simpleLowerCaseMapping:0x10431 - ,simpleTitleCaseMapping:0x10409 - }, - { code:0x10432 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040A - ,simpleLowerCaseMapping:0x10432 - ,simpleTitleCaseMapping:0x1040A - }, - { code:0x10433 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040B - ,simpleLowerCaseMapping:0x10433 - ,simpleTitleCaseMapping:0x1040B - }, - { code:0x10434 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040C - ,simpleLowerCaseMapping:0x10434 - ,simpleTitleCaseMapping:0x1040C - }, - { code:0x10435 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040D - ,simpleLowerCaseMapping:0x10435 - ,simpleTitleCaseMapping:0x1040D - }, - { code:0x10436 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040E - ,simpleLowerCaseMapping:0x10436 - ,simpleTitleCaseMapping:0x1040E - }, - { code:0x10437 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1040F - ,simpleLowerCaseMapping:0x10437 - ,simpleTitleCaseMapping:0x1040F - }, - { code:0x10438 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10410 - ,simpleLowerCaseMapping:0x10438 - ,simpleTitleCaseMapping:0x10410 - }, - { code:0x10439 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10411 - ,simpleLowerCaseMapping:0x10439 - ,simpleTitleCaseMapping:0x10411 - }, - { code:0x1043A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10412 - ,simpleLowerCaseMapping:0x1043A - ,simpleTitleCaseMapping:0x10412 - }, - { code:0x1043B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10413 - ,simpleLowerCaseMapping:0x1043B - ,simpleTitleCaseMapping:0x10413 - }, - { code:0x1043C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10414 - ,simpleLowerCaseMapping:0x1043C - ,simpleTitleCaseMapping:0x10414 - }, - { code:0x1043D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10415 - ,simpleLowerCaseMapping:0x1043D - ,simpleTitleCaseMapping:0x10415 - }, - { code:0x1043E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10416 - ,simpleLowerCaseMapping:0x1043E - ,simpleTitleCaseMapping:0x10416 - }, - { code:0x1043F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10417 - ,simpleLowerCaseMapping:0x1043F - ,simpleTitleCaseMapping:0x10417 - }, - { code:0x10440 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10418 - ,simpleLowerCaseMapping:0x10440 - ,simpleTitleCaseMapping:0x10418 - }, - { code:0x10441 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10419 - ,simpleLowerCaseMapping:0x10441 - ,simpleTitleCaseMapping:0x10419 - }, - { code:0x10442 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041A - ,simpleLowerCaseMapping:0x10442 - ,simpleTitleCaseMapping:0x1041A - }, - { code:0x10443 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041B - ,simpleLowerCaseMapping:0x10443 - ,simpleTitleCaseMapping:0x1041B - }, - { code:0x10444 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041C - ,simpleLowerCaseMapping:0x10444 - ,simpleTitleCaseMapping:0x1041C - }, - { code:0x10445 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041D - ,simpleLowerCaseMapping:0x10445 - ,simpleTitleCaseMapping:0x1041D - }, - { code:0x10446 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041E - ,simpleLowerCaseMapping:0x10446 - ,simpleTitleCaseMapping:0x1041E - }, - { code:0x10447 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1041F - ,simpleLowerCaseMapping:0x10447 - ,simpleTitleCaseMapping:0x1041F - }, - { code:0x10448 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10420 - ,simpleLowerCaseMapping:0x10448 - ,simpleTitleCaseMapping:0x10420 - }, - { code:0x10449 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10421 - ,simpleLowerCaseMapping:0x10449 - ,simpleTitleCaseMapping:0x10421 - }, - { code:0x1044A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10422 - ,simpleLowerCaseMapping:0x1044A - ,simpleTitleCaseMapping:0x10422 - }, - { code:0x1044B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10423 - ,simpleLowerCaseMapping:0x1044B - ,simpleTitleCaseMapping:0x10423 - }, - { code:0x1044C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10424 - ,simpleLowerCaseMapping:0x1044C - ,simpleTitleCaseMapping:0x10424 - }, - { code:0x1044D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10425 - ,simpleLowerCaseMapping:0x1044D - ,simpleTitleCaseMapping:0x10425 - }, - { code:0x1044E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10426 - ,simpleLowerCaseMapping:0x1044E - ,simpleTitleCaseMapping:0x10426 - }, - { code:0x1044F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x10427 - ,simpleLowerCaseMapping:0x1044F - ,simpleTitleCaseMapping:0x10427 - }, - { code:0x10450 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10450 - ,simpleLowerCaseMapping:0x10450 - ,simpleTitleCaseMapping:0x10450 - }, - { code:0x10451 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10451 - ,simpleLowerCaseMapping:0x10451 - ,simpleTitleCaseMapping:0x10451 - }, - { code:0x10452 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10452 - ,simpleLowerCaseMapping:0x10452 - ,simpleTitleCaseMapping:0x10452 - }, - { code:0x10453 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10453 - ,simpleLowerCaseMapping:0x10453 - ,simpleTitleCaseMapping:0x10453 - }, - { code:0x10454 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10454 - ,simpleLowerCaseMapping:0x10454 - ,simpleTitleCaseMapping:0x10454 - }, - { code:0x10455 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10455 - ,simpleLowerCaseMapping:0x10455 - ,simpleTitleCaseMapping:0x10455 - }, - { code:0x10456 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10456 - ,simpleLowerCaseMapping:0x10456 - ,simpleTitleCaseMapping:0x10456 - }, - { code:0x10457 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10457 - ,simpleLowerCaseMapping:0x10457 - ,simpleTitleCaseMapping:0x10457 - }, - { code:0x10458 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10458 - ,simpleLowerCaseMapping:0x10458 - ,simpleTitleCaseMapping:0x10458 - }, - { code:0x10459 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10459 - ,simpleLowerCaseMapping:0x10459 - ,simpleTitleCaseMapping:0x10459 - }, - { code:0x1045A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045A - ,simpleLowerCaseMapping:0x1045A - ,simpleTitleCaseMapping:0x1045A - }, - { code:0x1045B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045B - ,simpleLowerCaseMapping:0x1045B - ,simpleTitleCaseMapping:0x1045B - }, - { code:0x1045C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045C - ,simpleLowerCaseMapping:0x1045C - ,simpleTitleCaseMapping:0x1045C - }, - { code:0x1045D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045D - ,simpleLowerCaseMapping:0x1045D - ,simpleTitleCaseMapping:0x1045D - }, - { code:0x1045E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045E - ,simpleLowerCaseMapping:0x1045E - ,simpleTitleCaseMapping:0x1045E - }, - { code:0x1045F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1045F - ,simpleLowerCaseMapping:0x1045F - ,simpleTitleCaseMapping:0x1045F - }, - { code:0x10460 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10460 - ,simpleLowerCaseMapping:0x10460 - ,simpleTitleCaseMapping:0x10460 - }, - { code:0x10461 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10461 - ,simpleLowerCaseMapping:0x10461 - ,simpleTitleCaseMapping:0x10461 - }, - { code:0x10462 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10462 - ,simpleLowerCaseMapping:0x10462 - ,simpleTitleCaseMapping:0x10462 - }, - { code:0x10463 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10463 - ,simpleLowerCaseMapping:0x10463 - ,simpleTitleCaseMapping:0x10463 - }, - { code:0x10464 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10464 - ,simpleLowerCaseMapping:0x10464 - ,simpleTitleCaseMapping:0x10464 - }, - { code:0x10465 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10465 - ,simpleLowerCaseMapping:0x10465 - ,simpleTitleCaseMapping:0x10465 - }, - { code:0x10466 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10466 - ,simpleLowerCaseMapping:0x10466 - ,simpleTitleCaseMapping:0x10466 - }, - { code:0x10467 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10467 - ,simpleLowerCaseMapping:0x10467 - ,simpleTitleCaseMapping:0x10467 - }, - { code:0x10468 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10468 - ,simpleLowerCaseMapping:0x10468 - ,simpleTitleCaseMapping:0x10468 - }, - { code:0x10469 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10469 - ,simpleLowerCaseMapping:0x10469 - ,simpleTitleCaseMapping:0x10469 - }, - { code:0x1046A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046A - ,simpleLowerCaseMapping:0x1046A - ,simpleTitleCaseMapping:0x1046A - }, - { code:0x1046B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046B - ,simpleLowerCaseMapping:0x1046B - ,simpleTitleCaseMapping:0x1046B - }, - { code:0x1046C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046C - ,simpleLowerCaseMapping:0x1046C - ,simpleTitleCaseMapping:0x1046C - }, - { code:0x1046D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046D - ,simpleLowerCaseMapping:0x1046D - ,simpleTitleCaseMapping:0x1046D - }, - { code:0x1046E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046E - ,simpleLowerCaseMapping:0x1046E - ,simpleTitleCaseMapping:0x1046E - }, - { code:0x1046F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1046F - ,simpleLowerCaseMapping:0x1046F - ,simpleTitleCaseMapping:0x1046F - }, - { code:0x10470 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10470 - ,simpleLowerCaseMapping:0x10470 - ,simpleTitleCaseMapping:0x10470 - }, - { code:0x10471 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10471 - ,simpleLowerCaseMapping:0x10471 - ,simpleTitleCaseMapping:0x10471 - }, - { code:0x10472 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10472 - ,simpleLowerCaseMapping:0x10472 - ,simpleTitleCaseMapping:0x10472 - }, - { code:0x10473 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10473 - ,simpleLowerCaseMapping:0x10473 - ,simpleTitleCaseMapping:0x10473 - }, - { code:0x10474 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10474 - ,simpleLowerCaseMapping:0x10474 - ,simpleTitleCaseMapping:0x10474 - }, - { code:0x10475 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10475 - ,simpleLowerCaseMapping:0x10475 - ,simpleTitleCaseMapping:0x10475 - }, - { code:0x10476 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10476 - ,simpleLowerCaseMapping:0x10476 - ,simpleTitleCaseMapping:0x10476 - }, - { code:0x10477 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10477 - ,simpleLowerCaseMapping:0x10477 - ,simpleTitleCaseMapping:0x10477 - }, - { code:0x10478 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10478 - ,simpleLowerCaseMapping:0x10478 - ,simpleTitleCaseMapping:0x10478 - }, - { code:0x10479 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10479 - ,simpleLowerCaseMapping:0x10479 - ,simpleTitleCaseMapping:0x10479 - }, - { code:0x1047A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047A - ,simpleLowerCaseMapping:0x1047A - ,simpleTitleCaseMapping:0x1047A - }, - { code:0x1047B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047B - ,simpleLowerCaseMapping:0x1047B - ,simpleTitleCaseMapping:0x1047B - }, - { code:0x1047C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047C - ,simpleLowerCaseMapping:0x1047C - ,simpleTitleCaseMapping:0x1047C - }, - { code:0x1047D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047D - ,simpleLowerCaseMapping:0x1047D - ,simpleTitleCaseMapping:0x1047D - }, - { code:0x1047E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047E - ,simpleLowerCaseMapping:0x1047E - ,simpleTitleCaseMapping:0x1047E - }, - { code:0x1047F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1047F - ,simpleLowerCaseMapping:0x1047F - ,simpleTitleCaseMapping:0x1047F - }, - { code:0x10480 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10480 - ,simpleLowerCaseMapping:0x10480 - ,simpleTitleCaseMapping:0x10480 - }, - { code:0x10481 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10481 - ,simpleLowerCaseMapping:0x10481 - ,simpleTitleCaseMapping:0x10481 - }, - { code:0x10482 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10482 - ,simpleLowerCaseMapping:0x10482 - ,simpleTitleCaseMapping:0x10482 - }, - { code:0x10483 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10483 - ,simpleLowerCaseMapping:0x10483 - ,simpleTitleCaseMapping:0x10483 - }, - { code:0x10484 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10484 - ,simpleLowerCaseMapping:0x10484 - ,simpleTitleCaseMapping:0x10484 - }, - { code:0x10485 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10485 - ,simpleLowerCaseMapping:0x10485 - ,simpleTitleCaseMapping:0x10485 - }, - { code:0x10486 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10486 - ,simpleLowerCaseMapping:0x10486 - ,simpleTitleCaseMapping:0x10486 - }, - { code:0x10487 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10487 - ,simpleLowerCaseMapping:0x10487 - ,simpleTitleCaseMapping:0x10487 - }, - { code:0x10488 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10488 - ,simpleLowerCaseMapping:0x10488 - ,simpleTitleCaseMapping:0x10488 - }, - { code:0x10489 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10489 - ,simpleLowerCaseMapping:0x10489 - ,simpleTitleCaseMapping:0x10489 - }, - { code:0x1048A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048A - ,simpleLowerCaseMapping:0x1048A - ,simpleTitleCaseMapping:0x1048A - }, - { code:0x1048B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048B - ,simpleLowerCaseMapping:0x1048B - ,simpleTitleCaseMapping:0x1048B - }, - { code:0x1048C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048C - ,simpleLowerCaseMapping:0x1048C - ,simpleTitleCaseMapping:0x1048C - }, - { code:0x1048D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048D - ,simpleLowerCaseMapping:0x1048D - ,simpleTitleCaseMapping:0x1048D - }, - { code:0x1048E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048E - ,simpleLowerCaseMapping:0x1048E - ,simpleTitleCaseMapping:0x1048E - }, - { code:0x1048F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1048F - ,simpleLowerCaseMapping:0x1048F - ,simpleTitleCaseMapping:0x1048F - }, - { code:0x10490 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10490 - ,simpleLowerCaseMapping:0x10490 - ,simpleTitleCaseMapping:0x10490 - }, - { code:0x10491 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10491 - ,simpleLowerCaseMapping:0x10491 - ,simpleTitleCaseMapping:0x10491 - }, - { code:0x10492 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10492 - ,simpleLowerCaseMapping:0x10492 - ,simpleTitleCaseMapping:0x10492 - }, - { code:0x10493 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10493 - ,simpleLowerCaseMapping:0x10493 - ,simpleTitleCaseMapping:0x10493 - }, - { code:0x10494 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10494 - ,simpleLowerCaseMapping:0x10494 - ,simpleTitleCaseMapping:0x10494 - }, - { code:0x10495 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10495 - ,simpleLowerCaseMapping:0x10495 - ,simpleTitleCaseMapping:0x10495 - }, - { code:0x10496 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10496 - ,simpleLowerCaseMapping:0x10496 - ,simpleTitleCaseMapping:0x10496 - }, - { code:0x10497 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10497 - ,simpleLowerCaseMapping:0x10497 - ,simpleTitleCaseMapping:0x10497 - }, - { code:0x10498 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10498 - ,simpleLowerCaseMapping:0x10498 - ,simpleTitleCaseMapping:0x10498 - }, - { code:0x10499 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10499 - ,simpleLowerCaseMapping:0x10499 - ,simpleTitleCaseMapping:0x10499 - }, - { code:0x1049A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1049A - ,simpleLowerCaseMapping:0x1049A - ,simpleTitleCaseMapping:0x1049A - }, - { code:0x1049B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1049B - ,simpleLowerCaseMapping:0x1049B - ,simpleTitleCaseMapping:0x1049B - }, - { code:0x1049C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1049C - ,simpleLowerCaseMapping:0x1049C - ,simpleTitleCaseMapping:0x1049C - }, - { code:0x1049D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1049D - ,simpleLowerCaseMapping:0x1049D - ,simpleTitleCaseMapping:0x1049D - }, - { code:0x104A0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A0 - ,simpleLowerCaseMapping:0x104A0 - ,simpleTitleCaseMapping:0x104A0 - }, - { code:0x104A1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A1 - ,simpleLowerCaseMapping:0x104A1 - ,simpleTitleCaseMapping:0x104A1 - }, - { code:0x104A2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A2 - ,simpleLowerCaseMapping:0x104A2 - ,simpleTitleCaseMapping:0x104A2 - }, - { code:0x104A3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A3 - ,simpleLowerCaseMapping:0x104A3 - ,simpleTitleCaseMapping:0x104A3 - }, - { code:0x104A4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A4 - ,simpleLowerCaseMapping:0x104A4 - ,simpleTitleCaseMapping:0x104A4 - }, - { code:0x104A5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A5 - ,simpleLowerCaseMapping:0x104A5 - ,simpleTitleCaseMapping:0x104A5 - }, - { code:0x104A6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A6 - ,simpleLowerCaseMapping:0x104A6 - ,simpleTitleCaseMapping:0x104A6 - }, - { code:0x104A7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A7 - ,simpleLowerCaseMapping:0x104A7 - ,simpleTitleCaseMapping:0x104A7 - }, - { code:0x104A8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A8 - ,simpleLowerCaseMapping:0x104A8 - ,simpleTitleCaseMapping:0x104A8 - }, - { code:0x104A9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x104A9 - ,simpleLowerCaseMapping:0x104A9 - ,simpleTitleCaseMapping:0x104A9 - }, - { code:0x10800 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10800 - ,simpleLowerCaseMapping:0x10800 - ,simpleTitleCaseMapping:0x10800 - }, - { code:0x10801 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10801 - ,simpleLowerCaseMapping:0x10801 - ,simpleTitleCaseMapping:0x10801 - }, - { code:0x10802 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10802 - ,simpleLowerCaseMapping:0x10802 - ,simpleTitleCaseMapping:0x10802 - }, - { code:0x10803 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10803 - ,simpleLowerCaseMapping:0x10803 - ,simpleTitleCaseMapping:0x10803 - }, - { code:0x10804 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10804 - ,simpleLowerCaseMapping:0x10804 - ,simpleTitleCaseMapping:0x10804 - }, - { code:0x10805 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10805 - ,simpleLowerCaseMapping:0x10805 - ,simpleTitleCaseMapping:0x10805 - }, - { code:0x10808 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10808 - ,simpleLowerCaseMapping:0x10808 - ,simpleTitleCaseMapping:0x10808 - }, - { code:0x1080A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080A - ,simpleLowerCaseMapping:0x1080A - ,simpleTitleCaseMapping:0x1080A - }, - { code:0x1080B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080B - ,simpleLowerCaseMapping:0x1080B - ,simpleTitleCaseMapping:0x1080B - }, - { code:0x1080C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080C - ,simpleLowerCaseMapping:0x1080C - ,simpleTitleCaseMapping:0x1080C - }, - { code:0x1080D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080D - ,simpleLowerCaseMapping:0x1080D - ,simpleTitleCaseMapping:0x1080D - }, - { code:0x1080E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080E - ,simpleLowerCaseMapping:0x1080E - ,simpleTitleCaseMapping:0x1080E - }, - { code:0x1080F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1080F - ,simpleLowerCaseMapping:0x1080F - ,simpleTitleCaseMapping:0x1080F - }, - { code:0x10810 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10810 - ,simpleLowerCaseMapping:0x10810 - ,simpleTitleCaseMapping:0x10810 - }, - { code:0x10811 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10811 - ,simpleLowerCaseMapping:0x10811 - ,simpleTitleCaseMapping:0x10811 - }, - { code:0x10812 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10812 - ,simpleLowerCaseMapping:0x10812 - ,simpleTitleCaseMapping:0x10812 - }, - { code:0x10813 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10813 - ,simpleLowerCaseMapping:0x10813 - ,simpleTitleCaseMapping:0x10813 - }, - { code:0x10814 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10814 - ,simpleLowerCaseMapping:0x10814 - ,simpleTitleCaseMapping:0x10814 - }, - { code:0x10815 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10815 - ,simpleLowerCaseMapping:0x10815 - ,simpleTitleCaseMapping:0x10815 - }, - { code:0x10816 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10816 - ,simpleLowerCaseMapping:0x10816 - ,simpleTitleCaseMapping:0x10816 - }, - { code:0x10817 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10817 - ,simpleLowerCaseMapping:0x10817 - ,simpleTitleCaseMapping:0x10817 - }, - { code:0x10818 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10818 - ,simpleLowerCaseMapping:0x10818 - ,simpleTitleCaseMapping:0x10818 - }, - { code:0x10819 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10819 - ,simpleLowerCaseMapping:0x10819 - ,simpleTitleCaseMapping:0x10819 - }, - { code:0x1081A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081A - ,simpleLowerCaseMapping:0x1081A - ,simpleTitleCaseMapping:0x1081A - }, - { code:0x1081B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081B - ,simpleLowerCaseMapping:0x1081B - ,simpleTitleCaseMapping:0x1081B - }, - { code:0x1081C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081C - ,simpleLowerCaseMapping:0x1081C - ,simpleTitleCaseMapping:0x1081C - }, - { code:0x1081D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081D - ,simpleLowerCaseMapping:0x1081D - ,simpleTitleCaseMapping:0x1081D - }, - { code:0x1081E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081E - ,simpleLowerCaseMapping:0x1081E - ,simpleTitleCaseMapping:0x1081E - }, - { code:0x1081F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1081F - ,simpleLowerCaseMapping:0x1081F - ,simpleTitleCaseMapping:0x1081F - }, - { code:0x10820 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10820 - ,simpleLowerCaseMapping:0x10820 - ,simpleTitleCaseMapping:0x10820 - }, - { code:0x10821 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10821 - ,simpleLowerCaseMapping:0x10821 - ,simpleTitleCaseMapping:0x10821 - }, - { code:0x10822 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10822 - ,simpleLowerCaseMapping:0x10822 - ,simpleTitleCaseMapping:0x10822 - }, - { code:0x10823 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10823 - ,simpleLowerCaseMapping:0x10823 - ,simpleTitleCaseMapping:0x10823 - }, - { code:0x10824 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10824 - ,simpleLowerCaseMapping:0x10824 - ,simpleTitleCaseMapping:0x10824 - }, - { code:0x10825 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10825 - ,simpleLowerCaseMapping:0x10825 - ,simpleTitleCaseMapping:0x10825 - }, - { code:0x10826 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10826 - ,simpleLowerCaseMapping:0x10826 - ,simpleTitleCaseMapping:0x10826 - }, - { code:0x10827 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10827 - ,simpleLowerCaseMapping:0x10827 - ,simpleTitleCaseMapping:0x10827 - }, - { code:0x10828 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10828 - ,simpleLowerCaseMapping:0x10828 - ,simpleTitleCaseMapping:0x10828 - }, - { code:0x10829 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10829 - ,simpleLowerCaseMapping:0x10829 - ,simpleTitleCaseMapping:0x10829 - }, - { code:0x1082A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082A - ,simpleLowerCaseMapping:0x1082A - ,simpleTitleCaseMapping:0x1082A - }, - { code:0x1082B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082B - ,simpleLowerCaseMapping:0x1082B - ,simpleTitleCaseMapping:0x1082B - }, - { code:0x1082C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082C - ,simpleLowerCaseMapping:0x1082C - ,simpleTitleCaseMapping:0x1082C - }, - { code:0x1082D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082D - ,simpleLowerCaseMapping:0x1082D - ,simpleTitleCaseMapping:0x1082D - }, - { code:0x1082E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082E - ,simpleLowerCaseMapping:0x1082E - ,simpleTitleCaseMapping:0x1082E - }, - { code:0x1082F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1082F - ,simpleLowerCaseMapping:0x1082F - ,simpleTitleCaseMapping:0x1082F - }, - { code:0x10830 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10830 - ,simpleLowerCaseMapping:0x10830 - ,simpleTitleCaseMapping:0x10830 - }, - { code:0x10831 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10831 - ,simpleLowerCaseMapping:0x10831 - ,simpleTitleCaseMapping:0x10831 - }, - { code:0x10832 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10832 - ,simpleLowerCaseMapping:0x10832 - ,simpleTitleCaseMapping:0x10832 - }, - { code:0x10833 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10833 - ,simpleLowerCaseMapping:0x10833 - ,simpleTitleCaseMapping:0x10833 - }, - { code:0x10834 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10834 - ,simpleLowerCaseMapping:0x10834 - ,simpleTitleCaseMapping:0x10834 - }, - { code:0x10835 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10835 - ,simpleLowerCaseMapping:0x10835 - ,simpleTitleCaseMapping:0x10835 - }, - { code:0x10837 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10837 - ,simpleLowerCaseMapping:0x10837 - ,simpleTitleCaseMapping:0x10837 - }, - { code:0x10838 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10838 - ,simpleLowerCaseMapping:0x10838 - ,simpleTitleCaseMapping:0x10838 - }, - { code:0x1083C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1083C - ,simpleLowerCaseMapping:0x1083C - ,simpleTitleCaseMapping:0x1083C - }, - { code:0x1083F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1083F - ,simpleLowerCaseMapping:0x1083F - ,simpleTitleCaseMapping:0x1083F - }, - { code:0x10900 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10900 - ,simpleLowerCaseMapping:0x10900 - ,simpleTitleCaseMapping:0x10900 - }, - { code:0x10901 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10901 - ,simpleLowerCaseMapping:0x10901 - ,simpleTitleCaseMapping:0x10901 - }, - { code:0x10902 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10902 - ,simpleLowerCaseMapping:0x10902 - ,simpleTitleCaseMapping:0x10902 - }, - { code:0x10903 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10903 - ,simpleLowerCaseMapping:0x10903 - ,simpleTitleCaseMapping:0x10903 - }, - { code:0x10904 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10904 - ,simpleLowerCaseMapping:0x10904 - ,simpleTitleCaseMapping:0x10904 - }, - { code:0x10905 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10905 - ,simpleLowerCaseMapping:0x10905 - ,simpleTitleCaseMapping:0x10905 - }, - { code:0x10906 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10906 - ,simpleLowerCaseMapping:0x10906 - ,simpleTitleCaseMapping:0x10906 - }, - { code:0x10907 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10907 - ,simpleLowerCaseMapping:0x10907 - ,simpleTitleCaseMapping:0x10907 - }, - { code:0x10908 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10908 - ,simpleLowerCaseMapping:0x10908 - ,simpleTitleCaseMapping:0x10908 - }, - { code:0x10909 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10909 - ,simpleLowerCaseMapping:0x10909 - ,simpleTitleCaseMapping:0x10909 - }, - { code:0x1090A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090A - ,simpleLowerCaseMapping:0x1090A - ,simpleTitleCaseMapping:0x1090A - }, - { code:0x1090B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090B - ,simpleLowerCaseMapping:0x1090B - ,simpleTitleCaseMapping:0x1090B - }, - { code:0x1090C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090C - ,simpleLowerCaseMapping:0x1090C - ,simpleTitleCaseMapping:0x1090C - }, - { code:0x1090D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090D - ,simpleLowerCaseMapping:0x1090D - ,simpleTitleCaseMapping:0x1090D - }, - { code:0x1090E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090E - ,simpleLowerCaseMapping:0x1090E - ,simpleTitleCaseMapping:0x1090E - }, - { code:0x1090F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1090F - ,simpleLowerCaseMapping:0x1090F - ,simpleTitleCaseMapping:0x1090F - }, - { code:0x10910 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10910 - ,simpleLowerCaseMapping:0x10910 - ,simpleTitleCaseMapping:0x10910 - }, - { code:0x10911 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10911 - ,simpleLowerCaseMapping:0x10911 - ,simpleTitleCaseMapping:0x10911 - }, - { code:0x10912 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10912 - ,simpleLowerCaseMapping:0x10912 - ,simpleTitleCaseMapping:0x10912 - }, - { code:0x10913 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10913 - ,simpleLowerCaseMapping:0x10913 - ,simpleTitleCaseMapping:0x10913 - }, - { code:0x10914 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10914 - ,simpleLowerCaseMapping:0x10914 - ,simpleTitleCaseMapping:0x10914 - }, - { code:0x10915 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10915 - ,simpleLowerCaseMapping:0x10915 - ,simpleTitleCaseMapping:0x10915 - }, - { code:0x10916 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10916 - ,simpleLowerCaseMapping:0x10916 - ,simpleTitleCaseMapping:0x10916 - }, - { code:0x10917 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10917 - ,simpleLowerCaseMapping:0x10917 - ,simpleTitleCaseMapping:0x10917 - }, - { code:0x10918 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10918 - ,simpleLowerCaseMapping:0x10918 - ,simpleTitleCaseMapping:0x10918 - }, - { code:0x10919 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10919 - ,simpleLowerCaseMapping:0x10919 - ,simpleTitleCaseMapping:0x10919 - }, - { code:0x1091F - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x1091F - ,simpleLowerCaseMapping:0x1091F - ,simpleTitleCaseMapping:0x1091F - }, - { code:0x10A00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A00 - ,simpleLowerCaseMapping:0x10A00 - ,simpleTitleCaseMapping:0x10A00 - }, - { code:0x10A01 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A01 - ,simpleLowerCaseMapping:0x10A01 - ,simpleTitleCaseMapping:0x10A01 - }, - { code:0x10A02 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A02 - ,simpleLowerCaseMapping:0x10A02 - ,simpleTitleCaseMapping:0x10A02 - }, - { code:0x10A03 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A03 - ,simpleLowerCaseMapping:0x10A03 - ,simpleTitleCaseMapping:0x10A03 - }, - { code:0x10A05 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A05 - ,simpleLowerCaseMapping:0x10A05 - ,simpleTitleCaseMapping:0x10A05 - }, - { code:0x10A06 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A06 - ,simpleLowerCaseMapping:0x10A06 - ,simpleTitleCaseMapping:0x10A06 - }, - { code:0x10A0C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A0C - ,simpleLowerCaseMapping:0x10A0C - ,simpleTitleCaseMapping:0x10A0C - }, - { code:0x10A0D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A0D - ,simpleLowerCaseMapping:0x10A0D - ,simpleTitleCaseMapping:0x10A0D - }, - { code:0x10A0E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A0E - ,simpleLowerCaseMapping:0x10A0E - ,simpleTitleCaseMapping:0x10A0E - }, - { code:0x10A0F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A0F - ,simpleLowerCaseMapping:0x10A0F - ,simpleTitleCaseMapping:0x10A0F - }, - { code:0x10A10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A10 - ,simpleLowerCaseMapping:0x10A10 - ,simpleTitleCaseMapping:0x10A10 - }, - { code:0x10A11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A11 - ,simpleLowerCaseMapping:0x10A11 - ,simpleTitleCaseMapping:0x10A11 - }, - { code:0x10A12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A12 - ,simpleLowerCaseMapping:0x10A12 - ,simpleTitleCaseMapping:0x10A12 - }, - { code:0x10A13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A13 - ,simpleLowerCaseMapping:0x10A13 - ,simpleTitleCaseMapping:0x10A13 - }, - { code:0x10A15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A15 - ,simpleLowerCaseMapping:0x10A15 - ,simpleTitleCaseMapping:0x10A15 - }, - { code:0x10A16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A16 - ,simpleLowerCaseMapping:0x10A16 - ,simpleTitleCaseMapping:0x10A16 - }, - { code:0x10A17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A17 - ,simpleLowerCaseMapping:0x10A17 - ,simpleTitleCaseMapping:0x10A17 - }, - { code:0x10A19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A19 - ,simpleLowerCaseMapping:0x10A19 - ,simpleTitleCaseMapping:0x10A19 - }, - { code:0x10A1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1A - ,simpleLowerCaseMapping:0x10A1A - ,simpleTitleCaseMapping:0x10A1A - }, - { code:0x10A1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1B - ,simpleLowerCaseMapping:0x10A1B - ,simpleTitleCaseMapping:0x10A1B - }, - { code:0x10A1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1C - ,simpleLowerCaseMapping:0x10A1C - ,simpleTitleCaseMapping:0x10A1C - }, - { code:0x10A1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1D - ,simpleLowerCaseMapping:0x10A1D - ,simpleTitleCaseMapping:0x10A1D - }, - { code:0x10A1E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1E - ,simpleLowerCaseMapping:0x10A1E - ,simpleTitleCaseMapping:0x10A1E - }, - { code:0x10A1F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A1F - ,simpleLowerCaseMapping:0x10A1F - ,simpleTitleCaseMapping:0x10A1F - }, - { code:0x10A20 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A20 - ,simpleLowerCaseMapping:0x10A20 - ,simpleTitleCaseMapping:0x10A20 - }, - { code:0x10A21 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A21 - ,simpleLowerCaseMapping:0x10A21 - ,simpleTitleCaseMapping:0x10A21 - }, - { code:0x10A22 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A22 - ,simpleLowerCaseMapping:0x10A22 - ,simpleTitleCaseMapping:0x10A22 - }, - { code:0x10A23 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A23 - ,simpleLowerCaseMapping:0x10A23 - ,simpleTitleCaseMapping:0x10A23 - }, - { code:0x10A24 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A24 - ,simpleLowerCaseMapping:0x10A24 - ,simpleTitleCaseMapping:0x10A24 - }, - { code:0x10A25 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A25 - ,simpleLowerCaseMapping:0x10A25 - ,simpleTitleCaseMapping:0x10A25 - }, - { code:0x10A26 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A26 - ,simpleLowerCaseMapping:0x10A26 - ,simpleTitleCaseMapping:0x10A26 - }, - { code:0x10A27 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A27 - ,simpleLowerCaseMapping:0x10A27 - ,simpleTitleCaseMapping:0x10A27 - }, - { code:0x10A28 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A28 - ,simpleLowerCaseMapping:0x10A28 - ,simpleTitleCaseMapping:0x10A28 - }, - { code:0x10A29 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A29 - ,simpleLowerCaseMapping:0x10A29 - ,simpleTitleCaseMapping:0x10A29 - }, - { code:0x10A2A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2A - ,simpleLowerCaseMapping:0x10A2A - ,simpleTitleCaseMapping:0x10A2A - }, - { code:0x10A2B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2B - ,simpleLowerCaseMapping:0x10A2B - ,simpleTitleCaseMapping:0x10A2B - }, - { code:0x10A2C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2C - ,simpleLowerCaseMapping:0x10A2C - ,simpleTitleCaseMapping:0x10A2C - }, - { code:0x10A2D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2D - ,simpleLowerCaseMapping:0x10A2D - ,simpleTitleCaseMapping:0x10A2D - }, - { code:0x10A2E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2E - ,simpleLowerCaseMapping:0x10A2E - ,simpleTitleCaseMapping:0x10A2E - }, - { code:0x10A2F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A2F - ,simpleLowerCaseMapping:0x10A2F - ,simpleTitleCaseMapping:0x10A2F - }, - { code:0x10A30 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A30 - ,simpleLowerCaseMapping:0x10A30 - ,simpleTitleCaseMapping:0x10A30 - }, - { code:0x10A31 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A31 - ,simpleLowerCaseMapping:0x10A31 - ,simpleTitleCaseMapping:0x10A31 - }, - { code:0x10A32 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A32 - ,simpleLowerCaseMapping:0x10A32 - ,simpleTitleCaseMapping:0x10A32 - }, - { code:0x10A33 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x10A33 - ,simpleLowerCaseMapping:0x10A33 - ,simpleTitleCaseMapping:0x10A33 - }, - { code:0x10A38 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A38 - ,simpleLowerCaseMapping:0x10A38 - ,simpleTitleCaseMapping:0x10A38 - }, - { code:0x10A39 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A39 - ,simpleLowerCaseMapping:0x10A39 - ,simpleTitleCaseMapping:0x10A39 - }, - { code:0x10A3A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A3A - ,simpleLowerCaseMapping:0x10A3A - ,simpleTitleCaseMapping:0x10A3A - }, - { code:0x10A3F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x10A3F - ,simpleLowerCaseMapping:0x10A3F - ,simpleTitleCaseMapping:0x10A3F - }, - { code:0x10A40 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A40 - ,simpleLowerCaseMapping:0x10A40 - ,simpleTitleCaseMapping:0x10A40 - }, - { code:0x10A41 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A41 - ,simpleLowerCaseMapping:0x10A41 - ,simpleTitleCaseMapping:0x10A41 - }, - { code:0x10A42 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A42 - ,simpleLowerCaseMapping:0x10A42 - ,simpleTitleCaseMapping:0x10A42 - }, - { code:0x10A43 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A43 - ,simpleLowerCaseMapping:0x10A43 - ,simpleTitleCaseMapping:0x10A43 - }, - { code:0x10A44 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A44 - ,simpleLowerCaseMapping:0x10A44 - ,simpleTitleCaseMapping:0x10A44 - }, - { code:0x10A45 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A45 - ,simpleLowerCaseMapping:0x10A45 - ,simpleTitleCaseMapping:0x10A45 - }, - { code:0x10A46 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A46 - ,simpleLowerCaseMapping:0x10A46 - ,simpleTitleCaseMapping:0x10A46 - }, - { code:0x10A47 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x10A47 - ,simpleLowerCaseMapping:0x10A47 - ,simpleTitleCaseMapping:0x10A47 - }, - { code:0x10A50 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A50 - ,simpleLowerCaseMapping:0x10A50 - ,simpleTitleCaseMapping:0x10A50 - }, - { code:0x10A51 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A51 - ,simpleLowerCaseMapping:0x10A51 - ,simpleTitleCaseMapping:0x10A51 - }, - { code:0x10A52 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A52 - ,simpleLowerCaseMapping:0x10A52 - ,simpleTitleCaseMapping:0x10A52 - }, - { code:0x10A53 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A53 - ,simpleLowerCaseMapping:0x10A53 - ,simpleTitleCaseMapping:0x10A53 - }, - { code:0x10A54 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A54 - ,simpleLowerCaseMapping:0x10A54 - ,simpleTitleCaseMapping:0x10A54 - }, - { code:0x10A55 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A55 - ,simpleLowerCaseMapping:0x10A55 - ,simpleTitleCaseMapping:0x10A55 - }, - { code:0x10A56 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A56 - ,simpleLowerCaseMapping:0x10A56 - ,simpleTitleCaseMapping:0x10A56 - }, - { code:0x10A57 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A57 - ,simpleLowerCaseMapping:0x10A57 - ,simpleTitleCaseMapping:0x10A57 - }, - { code:0x10A58 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x10A58 - ,simpleLowerCaseMapping:0x10A58 - ,simpleTitleCaseMapping:0x10A58 - }, - { code:0x12000 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12000 - ,simpleLowerCaseMapping:0x12000 - ,simpleTitleCaseMapping:0x12000 - }, - { code:0x12001 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12001 - ,simpleLowerCaseMapping:0x12001 - ,simpleTitleCaseMapping:0x12001 - }, - { code:0x12002 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12002 - ,simpleLowerCaseMapping:0x12002 - ,simpleTitleCaseMapping:0x12002 - }, - { code:0x12003 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12003 - ,simpleLowerCaseMapping:0x12003 - ,simpleTitleCaseMapping:0x12003 - }, - { code:0x12004 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12004 - ,simpleLowerCaseMapping:0x12004 - ,simpleTitleCaseMapping:0x12004 - }, - { code:0x12005 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12005 - ,simpleLowerCaseMapping:0x12005 - ,simpleTitleCaseMapping:0x12005 - }, - { code:0x12006 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12006 - ,simpleLowerCaseMapping:0x12006 - ,simpleTitleCaseMapping:0x12006 - }, - { code:0x12007 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12007 - ,simpleLowerCaseMapping:0x12007 - ,simpleTitleCaseMapping:0x12007 - }, - { code:0x12008 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12008 - ,simpleLowerCaseMapping:0x12008 - ,simpleTitleCaseMapping:0x12008 - }, - { code:0x12009 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12009 - ,simpleLowerCaseMapping:0x12009 - ,simpleTitleCaseMapping:0x12009 - }, - { code:0x1200A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200A - ,simpleLowerCaseMapping:0x1200A - ,simpleTitleCaseMapping:0x1200A - }, - { code:0x1200B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200B - ,simpleLowerCaseMapping:0x1200B - ,simpleTitleCaseMapping:0x1200B - }, - { code:0x1200C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200C - ,simpleLowerCaseMapping:0x1200C - ,simpleTitleCaseMapping:0x1200C - }, - { code:0x1200D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200D - ,simpleLowerCaseMapping:0x1200D - ,simpleTitleCaseMapping:0x1200D - }, - { code:0x1200E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200E - ,simpleLowerCaseMapping:0x1200E - ,simpleTitleCaseMapping:0x1200E - }, - { code:0x1200F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1200F - ,simpleLowerCaseMapping:0x1200F - ,simpleTitleCaseMapping:0x1200F - }, - { code:0x12010 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12010 - ,simpleLowerCaseMapping:0x12010 - ,simpleTitleCaseMapping:0x12010 - }, - { code:0x12011 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12011 - ,simpleLowerCaseMapping:0x12011 - ,simpleTitleCaseMapping:0x12011 - }, - { code:0x12012 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12012 - ,simpleLowerCaseMapping:0x12012 - ,simpleTitleCaseMapping:0x12012 - }, - { code:0x12013 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12013 - ,simpleLowerCaseMapping:0x12013 - ,simpleTitleCaseMapping:0x12013 - }, - { code:0x12014 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12014 - ,simpleLowerCaseMapping:0x12014 - ,simpleTitleCaseMapping:0x12014 - }, - { code:0x12015 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12015 - ,simpleLowerCaseMapping:0x12015 - ,simpleTitleCaseMapping:0x12015 - }, - { code:0x12016 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12016 - ,simpleLowerCaseMapping:0x12016 - ,simpleTitleCaseMapping:0x12016 - }, - { code:0x12017 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12017 - ,simpleLowerCaseMapping:0x12017 - ,simpleTitleCaseMapping:0x12017 - }, - { code:0x12018 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12018 - ,simpleLowerCaseMapping:0x12018 - ,simpleTitleCaseMapping:0x12018 - }, - { code:0x12019 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12019 - ,simpleLowerCaseMapping:0x12019 - ,simpleTitleCaseMapping:0x12019 - }, - { code:0x1201A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201A - ,simpleLowerCaseMapping:0x1201A - ,simpleTitleCaseMapping:0x1201A - }, - { code:0x1201B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201B - ,simpleLowerCaseMapping:0x1201B - ,simpleTitleCaseMapping:0x1201B - }, - { code:0x1201C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201C - ,simpleLowerCaseMapping:0x1201C - ,simpleTitleCaseMapping:0x1201C - }, - { code:0x1201D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201D - ,simpleLowerCaseMapping:0x1201D - ,simpleTitleCaseMapping:0x1201D - }, - { code:0x1201E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201E - ,simpleLowerCaseMapping:0x1201E - ,simpleTitleCaseMapping:0x1201E - }, - { code:0x1201F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1201F - ,simpleLowerCaseMapping:0x1201F - ,simpleTitleCaseMapping:0x1201F - }, - { code:0x12020 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12020 - ,simpleLowerCaseMapping:0x12020 - ,simpleTitleCaseMapping:0x12020 - }, - { code:0x12021 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12021 - ,simpleLowerCaseMapping:0x12021 - ,simpleTitleCaseMapping:0x12021 - }, - { code:0x12022 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12022 - ,simpleLowerCaseMapping:0x12022 - ,simpleTitleCaseMapping:0x12022 - }, - { code:0x12023 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12023 - ,simpleLowerCaseMapping:0x12023 - ,simpleTitleCaseMapping:0x12023 - }, - { code:0x12024 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12024 - ,simpleLowerCaseMapping:0x12024 - ,simpleTitleCaseMapping:0x12024 - }, - { code:0x12025 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12025 - ,simpleLowerCaseMapping:0x12025 - ,simpleTitleCaseMapping:0x12025 - }, - { code:0x12026 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12026 - ,simpleLowerCaseMapping:0x12026 - ,simpleTitleCaseMapping:0x12026 - }, - { code:0x12027 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12027 - ,simpleLowerCaseMapping:0x12027 - ,simpleTitleCaseMapping:0x12027 - }, - { code:0x12028 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12028 - ,simpleLowerCaseMapping:0x12028 - ,simpleTitleCaseMapping:0x12028 - }, - { code:0x12029 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12029 - ,simpleLowerCaseMapping:0x12029 - ,simpleTitleCaseMapping:0x12029 - }, - { code:0x1202A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202A - ,simpleLowerCaseMapping:0x1202A - ,simpleTitleCaseMapping:0x1202A - }, - { code:0x1202B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202B - ,simpleLowerCaseMapping:0x1202B - ,simpleTitleCaseMapping:0x1202B - }, - { code:0x1202C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202C - ,simpleLowerCaseMapping:0x1202C - ,simpleTitleCaseMapping:0x1202C - }, - { code:0x1202D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202D - ,simpleLowerCaseMapping:0x1202D - ,simpleTitleCaseMapping:0x1202D - }, - { code:0x1202E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202E - ,simpleLowerCaseMapping:0x1202E - ,simpleTitleCaseMapping:0x1202E - }, - { code:0x1202F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1202F - ,simpleLowerCaseMapping:0x1202F - ,simpleTitleCaseMapping:0x1202F - }, - { code:0x12030 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12030 - ,simpleLowerCaseMapping:0x12030 - ,simpleTitleCaseMapping:0x12030 - }, - { code:0x12031 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12031 - ,simpleLowerCaseMapping:0x12031 - ,simpleTitleCaseMapping:0x12031 - }, - { code:0x12032 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12032 - ,simpleLowerCaseMapping:0x12032 - ,simpleTitleCaseMapping:0x12032 - }, - { code:0x12033 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12033 - ,simpleLowerCaseMapping:0x12033 - ,simpleTitleCaseMapping:0x12033 - }, - { code:0x12034 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12034 - ,simpleLowerCaseMapping:0x12034 - ,simpleTitleCaseMapping:0x12034 - }, - { code:0x12035 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12035 - ,simpleLowerCaseMapping:0x12035 - ,simpleTitleCaseMapping:0x12035 - }, - { code:0x12036 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12036 - ,simpleLowerCaseMapping:0x12036 - ,simpleTitleCaseMapping:0x12036 - }, - { code:0x12037 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12037 - ,simpleLowerCaseMapping:0x12037 - ,simpleTitleCaseMapping:0x12037 - }, - { code:0x12038 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12038 - ,simpleLowerCaseMapping:0x12038 - ,simpleTitleCaseMapping:0x12038 - }, - { code:0x12039 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12039 - ,simpleLowerCaseMapping:0x12039 - ,simpleTitleCaseMapping:0x12039 - }, - { code:0x1203A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203A - ,simpleLowerCaseMapping:0x1203A - ,simpleTitleCaseMapping:0x1203A - }, - { code:0x1203B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203B - ,simpleLowerCaseMapping:0x1203B - ,simpleTitleCaseMapping:0x1203B - }, - { code:0x1203C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203C - ,simpleLowerCaseMapping:0x1203C - ,simpleTitleCaseMapping:0x1203C - }, - { code:0x1203D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203D - ,simpleLowerCaseMapping:0x1203D - ,simpleTitleCaseMapping:0x1203D - }, - { code:0x1203E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203E - ,simpleLowerCaseMapping:0x1203E - ,simpleTitleCaseMapping:0x1203E - }, - { code:0x1203F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1203F - ,simpleLowerCaseMapping:0x1203F - ,simpleTitleCaseMapping:0x1203F - }, - { code:0x12040 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12040 - ,simpleLowerCaseMapping:0x12040 - ,simpleTitleCaseMapping:0x12040 - }, - { code:0x12041 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12041 - ,simpleLowerCaseMapping:0x12041 - ,simpleTitleCaseMapping:0x12041 - }, - { code:0x12042 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12042 - ,simpleLowerCaseMapping:0x12042 - ,simpleTitleCaseMapping:0x12042 - }, - { code:0x12043 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12043 - ,simpleLowerCaseMapping:0x12043 - ,simpleTitleCaseMapping:0x12043 - }, - { code:0x12044 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12044 - ,simpleLowerCaseMapping:0x12044 - ,simpleTitleCaseMapping:0x12044 - }, - { code:0x12045 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12045 - ,simpleLowerCaseMapping:0x12045 - ,simpleTitleCaseMapping:0x12045 - }, - { code:0x12046 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12046 - ,simpleLowerCaseMapping:0x12046 - ,simpleTitleCaseMapping:0x12046 - }, - { code:0x12047 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12047 - ,simpleLowerCaseMapping:0x12047 - ,simpleTitleCaseMapping:0x12047 - }, - { code:0x12048 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12048 - ,simpleLowerCaseMapping:0x12048 - ,simpleTitleCaseMapping:0x12048 - }, - { code:0x12049 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12049 - ,simpleLowerCaseMapping:0x12049 - ,simpleTitleCaseMapping:0x12049 - }, - { code:0x1204A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204A - ,simpleLowerCaseMapping:0x1204A - ,simpleTitleCaseMapping:0x1204A - }, - { code:0x1204B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204B - ,simpleLowerCaseMapping:0x1204B - ,simpleTitleCaseMapping:0x1204B - }, - { code:0x1204C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204C - ,simpleLowerCaseMapping:0x1204C - ,simpleTitleCaseMapping:0x1204C - }, - { code:0x1204D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204D - ,simpleLowerCaseMapping:0x1204D - ,simpleTitleCaseMapping:0x1204D - }, - { code:0x1204E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204E - ,simpleLowerCaseMapping:0x1204E - ,simpleTitleCaseMapping:0x1204E - }, - { code:0x1204F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1204F - ,simpleLowerCaseMapping:0x1204F - ,simpleTitleCaseMapping:0x1204F - }, - { code:0x12050 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12050 - ,simpleLowerCaseMapping:0x12050 - ,simpleTitleCaseMapping:0x12050 - }, - { code:0x12051 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12051 - ,simpleLowerCaseMapping:0x12051 - ,simpleTitleCaseMapping:0x12051 - }, - { code:0x12052 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12052 - ,simpleLowerCaseMapping:0x12052 - ,simpleTitleCaseMapping:0x12052 - }, - { code:0x12053 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12053 - ,simpleLowerCaseMapping:0x12053 - ,simpleTitleCaseMapping:0x12053 - }, - { code:0x12054 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12054 - ,simpleLowerCaseMapping:0x12054 - ,simpleTitleCaseMapping:0x12054 - }, - { code:0x12055 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12055 - ,simpleLowerCaseMapping:0x12055 - ,simpleTitleCaseMapping:0x12055 - }, - { code:0x12056 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12056 - ,simpleLowerCaseMapping:0x12056 - ,simpleTitleCaseMapping:0x12056 - }, - { code:0x12057 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12057 - ,simpleLowerCaseMapping:0x12057 - ,simpleTitleCaseMapping:0x12057 - }, - { code:0x12058 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12058 - ,simpleLowerCaseMapping:0x12058 - ,simpleTitleCaseMapping:0x12058 - }, - { code:0x12059 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12059 - ,simpleLowerCaseMapping:0x12059 - ,simpleTitleCaseMapping:0x12059 - }, - { code:0x1205A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205A - ,simpleLowerCaseMapping:0x1205A - ,simpleTitleCaseMapping:0x1205A - }, - { code:0x1205B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205B - ,simpleLowerCaseMapping:0x1205B - ,simpleTitleCaseMapping:0x1205B - }, - { code:0x1205C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205C - ,simpleLowerCaseMapping:0x1205C - ,simpleTitleCaseMapping:0x1205C - }, - { code:0x1205D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205D - ,simpleLowerCaseMapping:0x1205D - ,simpleTitleCaseMapping:0x1205D - }, - { code:0x1205E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205E - ,simpleLowerCaseMapping:0x1205E - ,simpleTitleCaseMapping:0x1205E - }, - { code:0x1205F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1205F - ,simpleLowerCaseMapping:0x1205F - ,simpleTitleCaseMapping:0x1205F - }, - { code:0x12060 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12060 - ,simpleLowerCaseMapping:0x12060 - ,simpleTitleCaseMapping:0x12060 - }, - { code:0x12061 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12061 - ,simpleLowerCaseMapping:0x12061 - ,simpleTitleCaseMapping:0x12061 - }, - { code:0x12062 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12062 - ,simpleLowerCaseMapping:0x12062 - ,simpleTitleCaseMapping:0x12062 - }, - { code:0x12063 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12063 - ,simpleLowerCaseMapping:0x12063 - ,simpleTitleCaseMapping:0x12063 - }, - { code:0x12064 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12064 - ,simpleLowerCaseMapping:0x12064 - ,simpleTitleCaseMapping:0x12064 - }, - { code:0x12065 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12065 - ,simpleLowerCaseMapping:0x12065 - ,simpleTitleCaseMapping:0x12065 - }, - { code:0x12066 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12066 - ,simpleLowerCaseMapping:0x12066 - ,simpleTitleCaseMapping:0x12066 - }, - { code:0x12067 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12067 - ,simpleLowerCaseMapping:0x12067 - ,simpleTitleCaseMapping:0x12067 - }, - { code:0x12068 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12068 - ,simpleLowerCaseMapping:0x12068 - ,simpleTitleCaseMapping:0x12068 - }, - { code:0x12069 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12069 - ,simpleLowerCaseMapping:0x12069 - ,simpleTitleCaseMapping:0x12069 - }, - { code:0x1206A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206A - ,simpleLowerCaseMapping:0x1206A - ,simpleTitleCaseMapping:0x1206A - }, - { code:0x1206B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206B - ,simpleLowerCaseMapping:0x1206B - ,simpleTitleCaseMapping:0x1206B - }, - { code:0x1206C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206C - ,simpleLowerCaseMapping:0x1206C - ,simpleTitleCaseMapping:0x1206C - }, - { code:0x1206D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206D - ,simpleLowerCaseMapping:0x1206D - ,simpleTitleCaseMapping:0x1206D - }, - { code:0x1206E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206E - ,simpleLowerCaseMapping:0x1206E - ,simpleTitleCaseMapping:0x1206E - }, - { code:0x1206F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1206F - ,simpleLowerCaseMapping:0x1206F - ,simpleTitleCaseMapping:0x1206F - }, - { code:0x12070 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12070 - ,simpleLowerCaseMapping:0x12070 - ,simpleTitleCaseMapping:0x12070 - }, - { code:0x12071 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12071 - ,simpleLowerCaseMapping:0x12071 - ,simpleTitleCaseMapping:0x12071 - }, - { code:0x12072 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12072 - ,simpleLowerCaseMapping:0x12072 - ,simpleTitleCaseMapping:0x12072 - }, - { code:0x12073 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12073 - ,simpleLowerCaseMapping:0x12073 - ,simpleTitleCaseMapping:0x12073 - }, - { code:0x12074 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12074 - ,simpleLowerCaseMapping:0x12074 - ,simpleTitleCaseMapping:0x12074 - }, - { code:0x12075 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12075 - ,simpleLowerCaseMapping:0x12075 - ,simpleTitleCaseMapping:0x12075 - }, - { code:0x12076 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12076 - ,simpleLowerCaseMapping:0x12076 - ,simpleTitleCaseMapping:0x12076 - }, - { code:0x12077 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12077 - ,simpleLowerCaseMapping:0x12077 - ,simpleTitleCaseMapping:0x12077 - }, - { code:0x12078 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12078 - ,simpleLowerCaseMapping:0x12078 - ,simpleTitleCaseMapping:0x12078 - }, - { code:0x12079 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12079 - ,simpleLowerCaseMapping:0x12079 - ,simpleTitleCaseMapping:0x12079 - }, - { code:0x1207A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207A - ,simpleLowerCaseMapping:0x1207A - ,simpleTitleCaseMapping:0x1207A - }, - { code:0x1207B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207B - ,simpleLowerCaseMapping:0x1207B - ,simpleTitleCaseMapping:0x1207B - }, - { code:0x1207C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207C - ,simpleLowerCaseMapping:0x1207C - ,simpleTitleCaseMapping:0x1207C - }, - { code:0x1207D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207D - ,simpleLowerCaseMapping:0x1207D - ,simpleTitleCaseMapping:0x1207D - }, - { code:0x1207E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207E - ,simpleLowerCaseMapping:0x1207E - ,simpleTitleCaseMapping:0x1207E - }, - { code:0x1207F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1207F - ,simpleLowerCaseMapping:0x1207F - ,simpleTitleCaseMapping:0x1207F - }, - { code:0x12080 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12080 - ,simpleLowerCaseMapping:0x12080 - ,simpleTitleCaseMapping:0x12080 - }, - { code:0x12081 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12081 - ,simpleLowerCaseMapping:0x12081 - ,simpleTitleCaseMapping:0x12081 - }, - { code:0x12082 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12082 - ,simpleLowerCaseMapping:0x12082 - ,simpleTitleCaseMapping:0x12082 - }, - { code:0x12083 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12083 - ,simpleLowerCaseMapping:0x12083 - ,simpleTitleCaseMapping:0x12083 - }, - { code:0x12084 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12084 - ,simpleLowerCaseMapping:0x12084 - ,simpleTitleCaseMapping:0x12084 - }, - { code:0x12085 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12085 - ,simpleLowerCaseMapping:0x12085 - ,simpleTitleCaseMapping:0x12085 - }, - { code:0x12086 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12086 - ,simpleLowerCaseMapping:0x12086 - ,simpleTitleCaseMapping:0x12086 - }, - { code:0x12087 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12087 - ,simpleLowerCaseMapping:0x12087 - ,simpleTitleCaseMapping:0x12087 - }, - { code:0x12088 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12088 - ,simpleLowerCaseMapping:0x12088 - ,simpleTitleCaseMapping:0x12088 - }, - { code:0x12089 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12089 - ,simpleLowerCaseMapping:0x12089 - ,simpleTitleCaseMapping:0x12089 - }, - { code:0x1208A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208A - ,simpleLowerCaseMapping:0x1208A - ,simpleTitleCaseMapping:0x1208A - }, - { code:0x1208B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208B - ,simpleLowerCaseMapping:0x1208B - ,simpleTitleCaseMapping:0x1208B - }, - { code:0x1208C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208C - ,simpleLowerCaseMapping:0x1208C - ,simpleTitleCaseMapping:0x1208C - }, - { code:0x1208D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208D - ,simpleLowerCaseMapping:0x1208D - ,simpleTitleCaseMapping:0x1208D - }, - { code:0x1208E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208E - ,simpleLowerCaseMapping:0x1208E - ,simpleTitleCaseMapping:0x1208E - }, - { code:0x1208F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1208F - ,simpleLowerCaseMapping:0x1208F - ,simpleTitleCaseMapping:0x1208F - }, - { code:0x12090 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12090 - ,simpleLowerCaseMapping:0x12090 - ,simpleTitleCaseMapping:0x12090 - }, - { code:0x12091 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12091 - ,simpleLowerCaseMapping:0x12091 - ,simpleTitleCaseMapping:0x12091 - }, - { code:0x12092 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12092 - ,simpleLowerCaseMapping:0x12092 - ,simpleTitleCaseMapping:0x12092 - }, - { code:0x12093 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12093 - ,simpleLowerCaseMapping:0x12093 - ,simpleTitleCaseMapping:0x12093 - }, - { code:0x12094 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12094 - ,simpleLowerCaseMapping:0x12094 - ,simpleTitleCaseMapping:0x12094 - }, - { code:0x12095 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12095 - ,simpleLowerCaseMapping:0x12095 - ,simpleTitleCaseMapping:0x12095 - }, - { code:0x12096 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12096 - ,simpleLowerCaseMapping:0x12096 - ,simpleTitleCaseMapping:0x12096 - }, - { code:0x12097 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12097 - ,simpleLowerCaseMapping:0x12097 - ,simpleTitleCaseMapping:0x12097 - }, - { code:0x12098 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12098 - ,simpleLowerCaseMapping:0x12098 - ,simpleTitleCaseMapping:0x12098 - }, - { code:0x12099 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12099 - ,simpleLowerCaseMapping:0x12099 - ,simpleTitleCaseMapping:0x12099 - }, - { code:0x1209A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209A - ,simpleLowerCaseMapping:0x1209A - ,simpleTitleCaseMapping:0x1209A - }, - { code:0x1209B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209B - ,simpleLowerCaseMapping:0x1209B - ,simpleTitleCaseMapping:0x1209B - }, - { code:0x1209C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209C - ,simpleLowerCaseMapping:0x1209C - ,simpleTitleCaseMapping:0x1209C - }, - { code:0x1209D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209D - ,simpleLowerCaseMapping:0x1209D - ,simpleTitleCaseMapping:0x1209D - }, - { code:0x1209E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209E - ,simpleLowerCaseMapping:0x1209E - ,simpleTitleCaseMapping:0x1209E - }, - { code:0x1209F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1209F - ,simpleLowerCaseMapping:0x1209F - ,simpleTitleCaseMapping:0x1209F - }, - { code:0x120A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A0 - ,simpleLowerCaseMapping:0x120A0 - ,simpleTitleCaseMapping:0x120A0 - }, - { code:0x120A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A1 - ,simpleLowerCaseMapping:0x120A1 - ,simpleTitleCaseMapping:0x120A1 - }, - { code:0x120A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A2 - ,simpleLowerCaseMapping:0x120A2 - ,simpleTitleCaseMapping:0x120A2 - }, - { code:0x120A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A3 - ,simpleLowerCaseMapping:0x120A3 - ,simpleTitleCaseMapping:0x120A3 - }, - { code:0x120A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A4 - ,simpleLowerCaseMapping:0x120A4 - ,simpleTitleCaseMapping:0x120A4 - }, - { code:0x120A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A5 - ,simpleLowerCaseMapping:0x120A5 - ,simpleTitleCaseMapping:0x120A5 - }, - { code:0x120A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A6 - ,simpleLowerCaseMapping:0x120A6 - ,simpleTitleCaseMapping:0x120A6 - }, - { code:0x120A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A7 - ,simpleLowerCaseMapping:0x120A7 - ,simpleTitleCaseMapping:0x120A7 - }, - { code:0x120A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A8 - ,simpleLowerCaseMapping:0x120A8 - ,simpleTitleCaseMapping:0x120A8 - }, - { code:0x120A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120A9 - ,simpleLowerCaseMapping:0x120A9 - ,simpleTitleCaseMapping:0x120A9 - }, - { code:0x120AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AA - ,simpleLowerCaseMapping:0x120AA - ,simpleTitleCaseMapping:0x120AA - }, - { code:0x120AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AB - ,simpleLowerCaseMapping:0x120AB - ,simpleTitleCaseMapping:0x120AB - }, - { code:0x120AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AC - ,simpleLowerCaseMapping:0x120AC - ,simpleTitleCaseMapping:0x120AC - }, - { code:0x120AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AD - ,simpleLowerCaseMapping:0x120AD - ,simpleTitleCaseMapping:0x120AD - }, - { code:0x120AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AE - ,simpleLowerCaseMapping:0x120AE - ,simpleTitleCaseMapping:0x120AE - }, - { code:0x120AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120AF - ,simpleLowerCaseMapping:0x120AF - ,simpleTitleCaseMapping:0x120AF - }, - { code:0x120B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B0 - ,simpleLowerCaseMapping:0x120B0 - ,simpleTitleCaseMapping:0x120B0 - }, - { code:0x120B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B1 - ,simpleLowerCaseMapping:0x120B1 - ,simpleTitleCaseMapping:0x120B1 - }, - { code:0x120B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B2 - ,simpleLowerCaseMapping:0x120B2 - ,simpleTitleCaseMapping:0x120B2 - }, - { code:0x120B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B3 - ,simpleLowerCaseMapping:0x120B3 - ,simpleTitleCaseMapping:0x120B3 - }, - { code:0x120B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B4 - ,simpleLowerCaseMapping:0x120B4 - ,simpleTitleCaseMapping:0x120B4 - }, - { code:0x120B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B5 - ,simpleLowerCaseMapping:0x120B5 - ,simpleTitleCaseMapping:0x120B5 - }, - { code:0x120B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B6 - ,simpleLowerCaseMapping:0x120B6 - ,simpleTitleCaseMapping:0x120B6 - }, - { code:0x120B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B7 - ,simpleLowerCaseMapping:0x120B7 - ,simpleTitleCaseMapping:0x120B7 - }, - { code:0x120B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B8 - ,simpleLowerCaseMapping:0x120B8 - ,simpleTitleCaseMapping:0x120B8 - }, - { code:0x120B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120B9 - ,simpleLowerCaseMapping:0x120B9 - ,simpleTitleCaseMapping:0x120B9 - }, - { code:0x120BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BA - ,simpleLowerCaseMapping:0x120BA - ,simpleTitleCaseMapping:0x120BA - }, - { code:0x120BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BB - ,simpleLowerCaseMapping:0x120BB - ,simpleTitleCaseMapping:0x120BB - }, - { code:0x120BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BC - ,simpleLowerCaseMapping:0x120BC - ,simpleTitleCaseMapping:0x120BC - }, - { code:0x120BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BD - ,simpleLowerCaseMapping:0x120BD - ,simpleTitleCaseMapping:0x120BD - }, - { code:0x120BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BE - ,simpleLowerCaseMapping:0x120BE - ,simpleTitleCaseMapping:0x120BE - }, - { code:0x120BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120BF - ,simpleLowerCaseMapping:0x120BF - ,simpleTitleCaseMapping:0x120BF - }, - { code:0x120C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C0 - ,simpleLowerCaseMapping:0x120C0 - ,simpleTitleCaseMapping:0x120C0 - }, - { code:0x120C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C1 - ,simpleLowerCaseMapping:0x120C1 - ,simpleTitleCaseMapping:0x120C1 - }, - { code:0x120C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C2 - ,simpleLowerCaseMapping:0x120C2 - ,simpleTitleCaseMapping:0x120C2 - }, - { code:0x120C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C3 - ,simpleLowerCaseMapping:0x120C3 - ,simpleTitleCaseMapping:0x120C3 - }, - { code:0x120C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C4 - ,simpleLowerCaseMapping:0x120C4 - ,simpleTitleCaseMapping:0x120C4 - }, - { code:0x120C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C5 - ,simpleLowerCaseMapping:0x120C5 - ,simpleTitleCaseMapping:0x120C5 - }, - { code:0x120C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C6 - ,simpleLowerCaseMapping:0x120C6 - ,simpleTitleCaseMapping:0x120C6 - }, - { code:0x120C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C7 - ,simpleLowerCaseMapping:0x120C7 - ,simpleTitleCaseMapping:0x120C7 - }, - { code:0x120C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C8 - ,simpleLowerCaseMapping:0x120C8 - ,simpleTitleCaseMapping:0x120C8 - }, - { code:0x120C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120C9 - ,simpleLowerCaseMapping:0x120C9 - ,simpleTitleCaseMapping:0x120C9 - }, - { code:0x120CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CA - ,simpleLowerCaseMapping:0x120CA - ,simpleTitleCaseMapping:0x120CA - }, - { code:0x120CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CB - ,simpleLowerCaseMapping:0x120CB - ,simpleTitleCaseMapping:0x120CB - }, - { code:0x120CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CC - ,simpleLowerCaseMapping:0x120CC - ,simpleTitleCaseMapping:0x120CC - }, - { code:0x120CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CD - ,simpleLowerCaseMapping:0x120CD - ,simpleTitleCaseMapping:0x120CD - }, - { code:0x120CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CE - ,simpleLowerCaseMapping:0x120CE - ,simpleTitleCaseMapping:0x120CE - }, - { code:0x120CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120CF - ,simpleLowerCaseMapping:0x120CF - ,simpleTitleCaseMapping:0x120CF - }, - { code:0x120D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D0 - ,simpleLowerCaseMapping:0x120D0 - ,simpleTitleCaseMapping:0x120D0 - }, - { code:0x120D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D1 - ,simpleLowerCaseMapping:0x120D1 - ,simpleTitleCaseMapping:0x120D1 - }, - { code:0x120D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D2 - ,simpleLowerCaseMapping:0x120D2 - ,simpleTitleCaseMapping:0x120D2 - }, - { code:0x120D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D3 - ,simpleLowerCaseMapping:0x120D3 - ,simpleTitleCaseMapping:0x120D3 - }, - { code:0x120D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D4 - ,simpleLowerCaseMapping:0x120D4 - ,simpleTitleCaseMapping:0x120D4 - }, - { code:0x120D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D5 - ,simpleLowerCaseMapping:0x120D5 - ,simpleTitleCaseMapping:0x120D5 - }, - { code:0x120D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D6 - ,simpleLowerCaseMapping:0x120D6 - ,simpleTitleCaseMapping:0x120D6 - }, - { code:0x120D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D7 - ,simpleLowerCaseMapping:0x120D7 - ,simpleTitleCaseMapping:0x120D7 - }, - { code:0x120D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D8 - ,simpleLowerCaseMapping:0x120D8 - ,simpleTitleCaseMapping:0x120D8 - }, - { code:0x120D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120D9 - ,simpleLowerCaseMapping:0x120D9 - ,simpleTitleCaseMapping:0x120D9 - }, - { code:0x120DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DA - ,simpleLowerCaseMapping:0x120DA - ,simpleTitleCaseMapping:0x120DA - }, - { code:0x120DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DB - ,simpleLowerCaseMapping:0x120DB - ,simpleTitleCaseMapping:0x120DB - }, - { code:0x120DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DC - ,simpleLowerCaseMapping:0x120DC - ,simpleTitleCaseMapping:0x120DC - }, - { code:0x120DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DD - ,simpleLowerCaseMapping:0x120DD - ,simpleTitleCaseMapping:0x120DD - }, - { code:0x120DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DE - ,simpleLowerCaseMapping:0x120DE - ,simpleTitleCaseMapping:0x120DE - }, - { code:0x120DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120DF - ,simpleLowerCaseMapping:0x120DF - ,simpleTitleCaseMapping:0x120DF - }, - { code:0x120E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E0 - ,simpleLowerCaseMapping:0x120E0 - ,simpleTitleCaseMapping:0x120E0 - }, - { code:0x120E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E1 - ,simpleLowerCaseMapping:0x120E1 - ,simpleTitleCaseMapping:0x120E1 - }, - { code:0x120E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E2 - ,simpleLowerCaseMapping:0x120E2 - ,simpleTitleCaseMapping:0x120E2 - }, - { code:0x120E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E3 - ,simpleLowerCaseMapping:0x120E3 - ,simpleTitleCaseMapping:0x120E3 - }, - { code:0x120E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E4 - ,simpleLowerCaseMapping:0x120E4 - ,simpleTitleCaseMapping:0x120E4 - }, - { code:0x120E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E5 - ,simpleLowerCaseMapping:0x120E5 - ,simpleTitleCaseMapping:0x120E5 - }, - { code:0x120E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E6 - ,simpleLowerCaseMapping:0x120E6 - ,simpleTitleCaseMapping:0x120E6 - }, - { code:0x120E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E7 - ,simpleLowerCaseMapping:0x120E7 - ,simpleTitleCaseMapping:0x120E7 - }, - { code:0x120E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E8 - ,simpleLowerCaseMapping:0x120E8 - ,simpleTitleCaseMapping:0x120E8 - }, - { code:0x120E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120E9 - ,simpleLowerCaseMapping:0x120E9 - ,simpleTitleCaseMapping:0x120E9 - }, - { code:0x120EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120EA - ,simpleLowerCaseMapping:0x120EA - ,simpleTitleCaseMapping:0x120EA - }, - { code:0x120EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120EB - ,simpleLowerCaseMapping:0x120EB - ,simpleTitleCaseMapping:0x120EB - }, - { code:0x120EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120EC - ,simpleLowerCaseMapping:0x120EC - ,simpleTitleCaseMapping:0x120EC - }, - { code:0x120ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120ED - ,simpleLowerCaseMapping:0x120ED - ,simpleTitleCaseMapping:0x120ED - }, - { code:0x120EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120EE - ,simpleLowerCaseMapping:0x120EE - ,simpleTitleCaseMapping:0x120EE - }, - { code:0x120EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120EF - ,simpleLowerCaseMapping:0x120EF - ,simpleTitleCaseMapping:0x120EF - }, - { code:0x120F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F0 - ,simpleLowerCaseMapping:0x120F0 - ,simpleTitleCaseMapping:0x120F0 - }, - { code:0x120F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F1 - ,simpleLowerCaseMapping:0x120F1 - ,simpleTitleCaseMapping:0x120F1 - }, - { code:0x120F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F2 - ,simpleLowerCaseMapping:0x120F2 - ,simpleTitleCaseMapping:0x120F2 - }, - { code:0x120F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F3 - ,simpleLowerCaseMapping:0x120F3 - ,simpleTitleCaseMapping:0x120F3 - }, - { code:0x120F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F4 - ,simpleLowerCaseMapping:0x120F4 - ,simpleTitleCaseMapping:0x120F4 - }, - { code:0x120F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F5 - ,simpleLowerCaseMapping:0x120F5 - ,simpleTitleCaseMapping:0x120F5 - }, - { code:0x120F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F6 - ,simpleLowerCaseMapping:0x120F6 - ,simpleTitleCaseMapping:0x120F6 - }, - { code:0x120F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F7 - ,simpleLowerCaseMapping:0x120F7 - ,simpleTitleCaseMapping:0x120F7 - }, - { code:0x120F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F8 - ,simpleLowerCaseMapping:0x120F8 - ,simpleTitleCaseMapping:0x120F8 - }, - { code:0x120F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120F9 - ,simpleLowerCaseMapping:0x120F9 - ,simpleTitleCaseMapping:0x120F9 - }, - { code:0x120FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FA - ,simpleLowerCaseMapping:0x120FA - ,simpleTitleCaseMapping:0x120FA - }, - { code:0x120FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FB - ,simpleLowerCaseMapping:0x120FB - ,simpleTitleCaseMapping:0x120FB - }, - { code:0x120FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FC - ,simpleLowerCaseMapping:0x120FC - ,simpleTitleCaseMapping:0x120FC - }, - { code:0x120FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FD - ,simpleLowerCaseMapping:0x120FD - ,simpleTitleCaseMapping:0x120FD - }, - { code:0x120FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FE - ,simpleLowerCaseMapping:0x120FE - ,simpleTitleCaseMapping:0x120FE - }, - { code:0x120FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x120FF - ,simpleLowerCaseMapping:0x120FF - ,simpleTitleCaseMapping:0x120FF - }, - { code:0x12100 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12100 - ,simpleLowerCaseMapping:0x12100 - ,simpleTitleCaseMapping:0x12100 - }, - { code:0x12101 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12101 - ,simpleLowerCaseMapping:0x12101 - ,simpleTitleCaseMapping:0x12101 - }, - { code:0x12102 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12102 - ,simpleLowerCaseMapping:0x12102 - ,simpleTitleCaseMapping:0x12102 - }, - { code:0x12103 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12103 - ,simpleLowerCaseMapping:0x12103 - ,simpleTitleCaseMapping:0x12103 - }, - { code:0x12104 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12104 - ,simpleLowerCaseMapping:0x12104 - ,simpleTitleCaseMapping:0x12104 - }, - { code:0x12105 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12105 - ,simpleLowerCaseMapping:0x12105 - ,simpleTitleCaseMapping:0x12105 - }, - { code:0x12106 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12106 - ,simpleLowerCaseMapping:0x12106 - ,simpleTitleCaseMapping:0x12106 - }, - { code:0x12107 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12107 - ,simpleLowerCaseMapping:0x12107 - ,simpleTitleCaseMapping:0x12107 - }, - { code:0x12108 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12108 - ,simpleLowerCaseMapping:0x12108 - ,simpleTitleCaseMapping:0x12108 - }, - { code:0x12109 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12109 - ,simpleLowerCaseMapping:0x12109 - ,simpleTitleCaseMapping:0x12109 - }, - { code:0x1210A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210A - ,simpleLowerCaseMapping:0x1210A - ,simpleTitleCaseMapping:0x1210A - }, - { code:0x1210B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210B - ,simpleLowerCaseMapping:0x1210B - ,simpleTitleCaseMapping:0x1210B - }, - { code:0x1210C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210C - ,simpleLowerCaseMapping:0x1210C - ,simpleTitleCaseMapping:0x1210C - }, - { code:0x1210D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210D - ,simpleLowerCaseMapping:0x1210D - ,simpleTitleCaseMapping:0x1210D - }, - { code:0x1210E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210E - ,simpleLowerCaseMapping:0x1210E - ,simpleTitleCaseMapping:0x1210E - }, - { code:0x1210F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1210F - ,simpleLowerCaseMapping:0x1210F - ,simpleTitleCaseMapping:0x1210F - }, - { code:0x12110 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12110 - ,simpleLowerCaseMapping:0x12110 - ,simpleTitleCaseMapping:0x12110 - }, - { code:0x12111 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12111 - ,simpleLowerCaseMapping:0x12111 - ,simpleTitleCaseMapping:0x12111 - }, - { code:0x12112 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12112 - ,simpleLowerCaseMapping:0x12112 - ,simpleTitleCaseMapping:0x12112 - }, - { code:0x12113 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12113 - ,simpleLowerCaseMapping:0x12113 - ,simpleTitleCaseMapping:0x12113 - }, - { code:0x12114 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12114 - ,simpleLowerCaseMapping:0x12114 - ,simpleTitleCaseMapping:0x12114 - }, - { code:0x12115 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12115 - ,simpleLowerCaseMapping:0x12115 - ,simpleTitleCaseMapping:0x12115 - }, - { code:0x12116 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12116 - ,simpleLowerCaseMapping:0x12116 - ,simpleTitleCaseMapping:0x12116 - }, - { code:0x12117 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12117 - ,simpleLowerCaseMapping:0x12117 - ,simpleTitleCaseMapping:0x12117 - }, - { code:0x12118 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12118 - ,simpleLowerCaseMapping:0x12118 - ,simpleTitleCaseMapping:0x12118 - }, - { code:0x12119 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12119 - ,simpleLowerCaseMapping:0x12119 - ,simpleTitleCaseMapping:0x12119 - }, - { code:0x1211A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211A - ,simpleLowerCaseMapping:0x1211A - ,simpleTitleCaseMapping:0x1211A - }, - { code:0x1211B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211B - ,simpleLowerCaseMapping:0x1211B - ,simpleTitleCaseMapping:0x1211B - }, - { code:0x1211C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211C - ,simpleLowerCaseMapping:0x1211C - ,simpleTitleCaseMapping:0x1211C - }, - { code:0x1211D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211D - ,simpleLowerCaseMapping:0x1211D - ,simpleTitleCaseMapping:0x1211D - }, - { code:0x1211E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211E - ,simpleLowerCaseMapping:0x1211E - ,simpleTitleCaseMapping:0x1211E - }, - { code:0x1211F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1211F - ,simpleLowerCaseMapping:0x1211F - ,simpleTitleCaseMapping:0x1211F - }, - { code:0x12120 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12120 - ,simpleLowerCaseMapping:0x12120 - ,simpleTitleCaseMapping:0x12120 - }, - { code:0x12121 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12121 - ,simpleLowerCaseMapping:0x12121 - ,simpleTitleCaseMapping:0x12121 - }, - { code:0x12122 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12122 - ,simpleLowerCaseMapping:0x12122 - ,simpleTitleCaseMapping:0x12122 - }, - { code:0x12123 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12123 - ,simpleLowerCaseMapping:0x12123 - ,simpleTitleCaseMapping:0x12123 - }, - { code:0x12124 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12124 - ,simpleLowerCaseMapping:0x12124 - ,simpleTitleCaseMapping:0x12124 - }, - { code:0x12125 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12125 - ,simpleLowerCaseMapping:0x12125 - ,simpleTitleCaseMapping:0x12125 - }, - { code:0x12126 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12126 - ,simpleLowerCaseMapping:0x12126 - ,simpleTitleCaseMapping:0x12126 - }, - { code:0x12127 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12127 - ,simpleLowerCaseMapping:0x12127 - ,simpleTitleCaseMapping:0x12127 - }, - { code:0x12128 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12128 - ,simpleLowerCaseMapping:0x12128 - ,simpleTitleCaseMapping:0x12128 - }, - { code:0x12129 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12129 - ,simpleLowerCaseMapping:0x12129 - ,simpleTitleCaseMapping:0x12129 - }, - { code:0x1212A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212A - ,simpleLowerCaseMapping:0x1212A - ,simpleTitleCaseMapping:0x1212A - }, - { code:0x1212B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212B - ,simpleLowerCaseMapping:0x1212B - ,simpleTitleCaseMapping:0x1212B - }, - { code:0x1212C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212C - ,simpleLowerCaseMapping:0x1212C - ,simpleTitleCaseMapping:0x1212C - }, - { code:0x1212D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212D - ,simpleLowerCaseMapping:0x1212D - ,simpleTitleCaseMapping:0x1212D - }, - { code:0x1212E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212E - ,simpleLowerCaseMapping:0x1212E - ,simpleTitleCaseMapping:0x1212E - }, - { code:0x1212F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1212F - ,simpleLowerCaseMapping:0x1212F - ,simpleTitleCaseMapping:0x1212F - }, - { code:0x12130 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12130 - ,simpleLowerCaseMapping:0x12130 - ,simpleTitleCaseMapping:0x12130 - }, - { code:0x12131 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12131 - ,simpleLowerCaseMapping:0x12131 - ,simpleTitleCaseMapping:0x12131 - }, - { code:0x12132 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12132 - ,simpleLowerCaseMapping:0x12132 - ,simpleTitleCaseMapping:0x12132 - }, - { code:0x12133 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12133 - ,simpleLowerCaseMapping:0x12133 - ,simpleTitleCaseMapping:0x12133 - }, - { code:0x12134 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12134 - ,simpleLowerCaseMapping:0x12134 - ,simpleTitleCaseMapping:0x12134 - }, - { code:0x12135 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12135 - ,simpleLowerCaseMapping:0x12135 - ,simpleTitleCaseMapping:0x12135 - }, - { code:0x12136 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12136 - ,simpleLowerCaseMapping:0x12136 - ,simpleTitleCaseMapping:0x12136 - }, - { code:0x12137 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12137 - ,simpleLowerCaseMapping:0x12137 - ,simpleTitleCaseMapping:0x12137 - }, - { code:0x12138 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12138 - ,simpleLowerCaseMapping:0x12138 - ,simpleTitleCaseMapping:0x12138 - }, - { code:0x12139 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12139 - ,simpleLowerCaseMapping:0x12139 - ,simpleTitleCaseMapping:0x12139 - }, - { code:0x1213A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213A - ,simpleLowerCaseMapping:0x1213A - ,simpleTitleCaseMapping:0x1213A - }, - { code:0x1213B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213B - ,simpleLowerCaseMapping:0x1213B - ,simpleTitleCaseMapping:0x1213B - }, - { code:0x1213C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213C - ,simpleLowerCaseMapping:0x1213C - ,simpleTitleCaseMapping:0x1213C - }, - { code:0x1213D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213D - ,simpleLowerCaseMapping:0x1213D - ,simpleTitleCaseMapping:0x1213D - }, - { code:0x1213E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213E - ,simpleLowerCaseMapping:0x1213E - ,simpleTitleCaseMapping:0x1213E - }, - { code:0x1213F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1213F - ,simpleLowerCaseMapping:0x1213F - ,simpleTitleCaseMapping:0x1213F - }, - { code:0x12140 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12140 - ,simpleLowerCaseMapping:0x12140 - ,simpleTitleCaseMapping:0x12140 - }, - { code:0x12141 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12141 - ,simpleLowerCaseMapping:0x12141 - ,simpleTitleCaseMapping:0x12141 - }, - { code:0x12142 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12142 - ,simpleLowerCaseMapping:0x12142 - ,simpleTitleCaseMapping:0x12142 - }, - { code:0x12143 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12143 - ,simpleLowerCaseMapping:0x12143 - ,simpleTitleCaseMapping:0x12143 - }, - { code:0x12144 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12144 - ,simpleLowerCaseMapping:0x12144 - ,simpleTitleCaseMapping:0x12144 - }, - { code:0x12145 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12145 - ,simpleLowerCaseMapping:0x12145 - ,simpleTitleCaseMapping:0x12145 - }, - { code:0x12146 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12146 - ,simpleLowerCaseMapping:0x12146 - ,simpleTitleCaseMapping:0x12146 - }, - { code:0x12147 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12147 - ,simpleLowerCaseMapping:0x12147 - ,simpleTitleCaseMapping:0x12147 - }, - { code:0x12148 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12148 - ,simpleLowerCaseMapping:0x12148 - ,simpleTitleCaseMapping:0x12148 - }, - { code:0x12149 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12149 - ,simpleLowerCaseMapping:0x12149 - ,simpleTitleCaseMapping:0x12149 - }, - { code:0x1214A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214A - ,simpleLowerCaseMapping:0x1214A - ,simpleTitleCaseMapping:0x1214A - }, - { code:0x1214B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214B - ,simpleLowerCaseMapping:0x1214B - ,simpleTitleCaseMapping:0x1214B - }, - { code:0x1214C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214C - ,simpleLowerCaseMapping:0x1214C - ,simpleTitleCaseMapping:0x1214C - }, - { code:0x1214D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214D - ,simpleLowerCaseMapping:0x1214D - ,simpleTitleCaseMapping:0x1214D - }, - { code:0x1214E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214E - ,simpleLowerCaseMapping:0x1214E - ,simpleTitleCaseMapping:0x1214E - }, - { code:0x1214F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1214F - ,simpleLowerCaseMapping:0x1214F - ,simpleTitleCaseMapping:0x1214F - }, - { code:0x12150 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12150 - ,simpleLowerCaseMapping:0x12150 - ,simpleTitleCaseMapping:0x12150 - }, - { code:0x12151 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12151 - ,simpleLowerCaseMapping:0x12151 - ,simpleTitleCaseMapping:0x12151 - }, - { code:0x12152 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12152 - ,simpleLowerCaseMapping:0x12152 - ,simpleTitleCaseMapping:0x12152 - }, - { code:0x12153 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12153 - ,simpleLowerCaseMapping:0x12153 - ,simpleTitleCaseMapping:0x12153 - }, - { code:0x12154 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12154 - ,simpleLowerCaseMapping:0x12154 - ,simpleTitleCaseMapping:0x12154 - }, - { code:0x12155 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12155 - ,simpleLowerCaseMapping:0x12155 - ,simpleTitleCaseMapping:0x12155 - }, - { code:0x12156 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12156 - ,simpleLowerCaseMapping:0x12156 - ,simpleTitleCaseMapping:0x12156 - }, - { code:0x12157 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12157 - ,simpleLowerCaseMapping:0x12157 - ,simpleTitleCaseMapping:0x12157 - }, - { code:0x12158 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12158 - ,simpleLowerCaseMapping:0x12158 - ,simpleTitleCaseMapping:0x12158 - }, - { code:0x12159 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12159 - ,simpleLowerCaseMapping:0x12159 - ,simpleTitleCaseMapping:0x12159 - }, - { code:0x1215A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215A - ,simpleLowerCaseMapping:0x1215A - ,simpleTitleCaseMapping:0x1215A - }, - { code:0x1215B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215B - ,simpleLowerCaseMapping:0x1215B - ,simpleTitleCaseMapping:0x1215B - }, - { code:0x1215C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215C - ,simpleLowerCaseMapping:0x1215C - ,simpleTitleCaseMapping:0x1215C - }, - { code:0x1215D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215D - ,simpleLowerCaseMapping:0x1215D - ,simpleTitleCaseMapping:0x1215D - }, - { code:0x1215E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215E - ,simpleLowerCaseMapping:0x1215E - ,simpleTitleCaseMapping:0x1215E - }, - { code:0x1215F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1215F - ,simpleLowerCaseMapping:0x1215F - ,simpleTitleCaseMapping:0x1215F - }, - { code:0x12160 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12160 - ,simpleLowerCaseMapping:0x12160 - ,simpleTitleCaseMapping:0x12160 - }, - { code:0x12161 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12161 - ,simpleLowerCaseMapping:0x12161 - ,simpleTitleCaseMapping:0x12161 - }, - { code:0x12162 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12162 - ,simpleLowerCaseMapping:0x12162 - ,simpleTitleCaseMapping:0x12162 - }, - { code:0x12163 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12163 - ,simpleLowerCaseMapping:0x12163 - ,simpleTitleCaseMapping:0x12163 - }, - { code:0x12164 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12164 - ,simpleLowerCaseMapping:0x12164 - ,simpleTitleCaseMapping:0x12164 - }, - { code:0x12165 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12165 - ,simpleLowerCaseMapping:0x12165 - ,simpleTitleCaseMapping:0x12165 - }, - { code:0x12166 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12166 - ,simpleLowerCaseMapping:0x12166 - ,simpleTitleCaseMapping:0x12166 - }, - { code:0x12167 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12167 - ,simpleLowerCaseMapping:0x12167 - ,simpleTitleCaseMapping:0x12167 - }, - { code:0x12168 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12168 - ,simpleLowerCaseMapping:0x12168 - ,simpleTitleCaseMapping:0x12168 - }, - { code:0x12169 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12169 - ,simpleLowerCaseMapping:0x12169 - ,simpleTitleCaseMapping:0x12169 - }, - { code:0x1216A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216A - ,simpleLowerCaseMapping:0x1216A - ,simpleTitleCaseMapping:0x1216A - }, - { code:0x1216B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216B - ,simpleLowerCaseMapping:0x1216B - ,simpleTitleCaseMapping:0x1216B - }, - { code:0x1216C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216C - ,simpleLowerCaseMapping:0x1216C - ,simpleTitleCaseMapping:0x1216C - }, - { code:0x1216D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216D - ,simpleLowerCaseMapping:0x1216D - ,simpleTitleCaseMapping:0x1216D - }, - { code:0x1216E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216E - ,simpleLowerCaseMapping:0x1216E - ,simpleTitleCaseMapping:0x1216E - }, - { code:0x1216F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1216F - ,simpleLowerCaseMapping:0x1216F - ,simpleTitleCaseMapping:0x1216F - }, - { code:0x12170 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12170 - ,simpleLowerCaseMapping:0x12170 - ,simpleTitleCaseMapping:0x12170 - }, - { code:0x12171 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12171 - ,simpleLowerCaseMapping:0x12171 - ,simpleTitleCaseMapping:0x12171 - }, - { code:0x12172 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12172 - ,simpleLowerCaseMapping:0x12172 - ,simpleTitleCaseMapping:0x12172 - }, - { code:0x12173 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12173 - ,simpleLowerCaseMapping:0x12173 - ,simpleTitleCaseMapping:0x12173 - }, - { code:0x12174 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12174 - ,simpleLowerCaseMapping:0x12174 - ,simpleTitleCaseMapping:0x12174 - }, - { code:0x12175 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12175 - ,simpleLowerCaseMapping:0x12175 - ,simpleTitleCaseMapping:0x12175 - }, - { code:0x12176 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12176 - ,simpleLowerCaseMapping:0x12176 - ,simpleTitleCaseMapping:0x12176 - }, - { code:0x12177 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12177 - ,simpleLowerCaseMapping:0x12177 - ,simpleTitleCaseMapping:0x12177 - }, - { code:0x12178 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12178 - ,simpleLowerCaseMapping:0x12178 - ,simpleTitleCaseMapping:0x12178 - }, - { code:0x12179 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12179 - ,simpleLowerCaseMapping:0x12179 - ,simpleTitleCaseMapping:0x12179 - }, - { code:0x1217A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217A - ,simpleLowerCaseMapping:0x1217A - ,simpleTitleCaseMapping:0x1217A - }, - { code:0x1217B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217B - ,simpleLowerCaseMapping:0x1217B - ,simpleTitleCaseMapping:0x1217B - }, - { code:0x1217C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217C - ,simpleLowerCaseMapping:0x1217C - ,simpleTitleCaseMapping:0x1217C - }, - { code:0x1217D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217D - ,simpleLowerCaseMapping:0x1217D - ,simpleTitleCaseMapping:0x1217D - }, - { code:0x1217E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217E - ,simpleLowerCaseMapping:0x1217E - ,simpleTitleCaseMapping:0x1217E - }, - { code:0x1217F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1217F - ,simpleLowerCaseMapping:0x1217F - ,simpleTitleCaseMapping:0x1217F - }, - { code:0x12180 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12180 - ,simpleLowerCaseMapping:0x12180 - ,simpleTitleCaseMapping:0x12180 - }, - { code:0x12181 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12181 - ,simpleLowerCaseMapping:0x12181 - ,simpleTitleCaseMapping:0x12181 - }, - { code:0x12182 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12182 - ,simpleLowerCaseMapping:0x12182 - ,simpleTitleCaseMapping:0x12182 - }, - { code:0x12183 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12183 - ,simpleLowerCaseMapping:0x12183 - ,simpleTitleCaseMapping:0x12183 - }, - { code:0x12184 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12184 - ,simpleLowerCaseMapping:0x12184 - ,simpleTitleCaseMapping:0x12184 - }, - { code:0x12185 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12185 - ,simpleLowerCaseMapping:0x12185 - ,simpleTitleCaseMapping:0x12185 - }, - { code:0x12186 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12186 - ,simpleLowerCaseMapping:0x12186 - ,simpleTitleCaseMapping:0x12186 - }, - { code:0x12187 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12187 - ,simpleLowerCaseMapping:0x12187 - ,simpleTitleCaseMapping:0x12187 - }, - { code:0x12188 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12188 - ,simpleLowerCaseMapping:0x12188 - ,simpleTitleCaseMapping:0x12188 - }, - { code:0x12189 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12189 - ,simpleLowerCaseMapping:0x12189 - ,simpleTitleCaseMapping:0x12189 - }, - { code:0x1218A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218A - ,simpleLowerCaseMapping:0x1218A - ,simpleTitleCaseMapping:0x1218A - }, - { code:0x1218B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218B - ,simpleLowerCaseMapping:0x1218B - ,simpleTitleCaseMapping:0x1218B - }, - { code:0x1218C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218C - ,simpleLowerCaseMapping:0x1218C - ,simpleTitleCaseMapping:0x1218C - }, - { code:0x1218D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218D - ,simpleLowerCaseMapping:0x1218D - ,simpleTitleCaseMapping:0x1218D - }, - { code:0x1218E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218E - ,simpleLowerCaseMapping:0x1218E - ,simpleTitleCaseMapping:0x1218E - }, - { code:0x1218F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1218F - ,simpleLowerCaseMapping:0x1218F - ,simpleTitleCaseMapping:0x1218F - }, - { code:0x12190 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12190 - ,simpleLowerCaseMapping:0x12190 - ,simpleTitleCaseMapping:0x12190 - }, - { code:0x12191 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12191 - ,simpleLowerCaseMapping:0x12191 - ,simpleTitleCaseMapping:0x12191 - }, - { code:0x12192 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12192 - ,simpleLowerCaseMapping:0x12192 - ,simpleTitleCaseMapping:0x12192 - }, - { code:0x12193 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12193 - ,simpleLowerCaseMapping:0x12193 - ,simpleTitleCaseMapping:0x12193 - }, - { code:0x12194 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12194 - ,simpleLowerCaseMapping:0x12194 - ,simpleTitleCaseMapping:0x12194 - }, - { code:0x12195 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12195 - ,simpleLowerCaseMapping:0x12195 - ,simpleTitleCaseMapping:0x12195 - }, - { code:0x12196 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12196 - ,simpleLowerCaseMapping:0x12196 - ,simpleTitleCaseMapping:0x12196 - }, - { code:0x12197 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12197 - ,simpleLowerCaseMapping:0x12197 - ,simpleTitleCaseMapping:0x12197 - }, - { code:0x12198 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12198 - ,simpleLowerCaseMapping:0x12198 - ,simpleTitleCaseMapping:0x12198 - }, - { code:0x12199 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12199 - ,simpleLowerCaseMapping:0x12199 - ,simpleTitleCaseMapping:0x12199 - }, - { code:0x1219A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219A - ,simpleLowerCaseMapping:0x1219A - ,simpleTitleCaseMapping:0x1219A - }, - { code:0x1219B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219B - ,simpleLowerCaseMapping:0x1219B - ,simpleTitleCaseMapping:0x1219B - }, - { code:0x1219C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219C - ,simpleLowerCaseMapping:0x1219C - ,simpleTitleCaseMapping:0x1219C - }, - { code:0x1219D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219D - ,simpleLowerCaseMapping:0x1219D - ,simpleTitleCaseMapping:0x1219D - }, - { code:0x1219E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219E - ,simpleLowerCaseMapping:0x1219E - ,simpleTitleCaseMapping:0x1219E - }, - { code:0x1219F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1219F - ,simpleLowerCaseMapping:0x1219F - ,simpleTitleCaseMapping:0x1219F - }, - { code:0x121A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A0 - ,simpleLowerCaseMapping:0x121A0 - ,simpleTitleCaseMapping:0x121A0 - }, - { code:0x121A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A1 - ,simpleLowerCaseMapping:0x121A1 - ,simpleTitleCaseMapping:0x121A1 - }, - { code:0x121A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A2 - ,simpleLowerCaseMapping:0x121A2 - ,simpleTitleCaseMapping:0x121A2 - }, - { code:0x121A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A3 - ,simpleLowerCaseMapping:0x121A3 - ,simpleTitleCaseMapping:0x121A3 - }, - { code:0x121A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A4 - ,simpleLowerCaseMapping:0x121A4 - ,simpleTitleCaseMapping:0x121A4 - }, - { code:0x121A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A5 - ,simpleLowerCaseMapping:0x121A5 - ,simpleTitleCaseMapping:0x121A5 - }, - { code:0x121A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A6 - ,simpleLowerCaseMapping:0x121A6 - ,simpleTitleCaseMapping:0x121A6 - }, - { code:0x121A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A7 - ,simpleLowerCaseMapping:0x121A7 - ,simpleTitleCaseMapping:0x121A7 - }, - { code:0x121A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A8 - ,simpleLowerCaseMapping:0x121A8 - ,simpleTitleCaseMapping:0x121A8 - }, - { code:0x121A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121A9 - ,simpleLowerCaseMapping:0x121A9 - ,simpleTitleCaseMapping:0x121A9 - }, - { code:0x121AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AA - ,simpleLowerCaseMapping:0x121AA - ,simpleTitleCaseMapping:0x121AA - }, - { code:0x121AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AB - ,simpleLowerCaseMapping:0x121AB - ,simpleTitleCaseMapping:0x121AB - }, - { code:0x121AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AC - ,simpleLowerCaseMapping:0x121AC - ,simpleTitleCaseMapping:0x121AC - }, - { code:0x121AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AD - ,simpleLowerCaseMapping:0x121AD - ,simpleTitleCaseMapping:0x121AD - }, - { code:0x121AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AE - ,simpleLowerCaseMapping:0x121AE - ,simpleTitleCaseMapping:0x121AE - }, - { code:0x121AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121AF - ,simpleLowerCaseMapping:0x121AF - ,simpleTitleCaseMapping:0x121AF - }, - { code:0x121B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B0 - ,simpleLowerCaseMapping:0x121B0 - ,simpleTitleCaseMapping:0x121B0 - }, - { code:0x121B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B1 - ,simpleLowerCaseMapping:0x121B1 - ,simpleTitleCaseMapping:0x121B1 - }, - { code:0x121B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B2 - ,simpleLowerCaseMapping:0x121B2 - ,simpleTitleCaseMapping:0x121B2 - }, - { code:0x121B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B3 - ,simpleLowerCaseMapping:0x121B3 - ,simpleTitleCaseMapping:0x121B3 - }, - { code:0x121B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B4 - ,simpleLowerCaseMapping:0x121B4 - ,simpleTitleCaseMapping:0x121B4 - }, - { code:0x121B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B5 - ,simpleLowerCaseMapping:0x121B5 - ,simpleTitleCaseMapping:0x121B5 - }, - { code:0x121B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B6 - ,simpleLowerCaseMapping:0x121B6 - ,simpleTitleCaseMapping:0x121B6 - }, - { code:0x121B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B7 - ,simpleLowerCaseMapping:0x121B7 - ,simpleTitleCaseMapping:0x121B7 - }, - { code:0x121B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B8 - ,simpleLowerCaseMapping:0x121B8 - ,simpleTitleCaseMapping:0x121B8 - }, - { code:0x121B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121B9 - ,simpleLowerCaseMapping:0x121B9 - ,simpleTitleCaseMapping:0x121B9 - }, - { code:0x121BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BA - ,simpleLowerCaseMapping:0x121BA - ,simpleTitleCaseMapping:0x121BA - }, - { code:0x121BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BB - ,simpleLowerCaseMapping:0x121BB - ,simpleTitleCaseMapping:0x121BB - }, - { code:0x121BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BC - ,simpleLowerCaseMapping:0x121BC - ,simpleTitleCaseMapping:0x121BC - }, - { code:0x121BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BD - ,simpleLowerCaseMapping:0x121BD - ,simpleTitleCaseMapping:0x121BD - }, - { code:0x121BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BE - ,simpleLowerCaseMapping:0x121BE - ,simpleTitleCaseMapping:0x121BE - }, - { code:0x121BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121BF - ,simpleLowerCaseMapping:0x121BF - ,simpleTitleCaseMapping:0x121BF - }, - { code:0x121C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C0 - ,simpleLowerCaseMapping:0x121C0 - ,simpleTitleCaseMapping:0x121C0 - }, - { code:0x121C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C1 - ,simpleLowerCaseMapping:0x121C1 - ,simpleTitleCaseMapping:0x121C1 - }, - { code:0x121C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C2 - ,simpleLowerCaseMapping:0x121C2 - ,simpleTitleCaseMapping:0x121C2 - }, - { code:0x121C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C3 - ,simpleLowerCaseMapping:0x121C3 - ,simpleTitleCaseMapping:0x121C3 - }, - { code:0x121C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C4 - ,simpleLowerCaseMapping:0x121C4 - ,simpleTitleCaseMapping:0x121C4 - }, - { code:0x121C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C5 - ,simpleLowerCaseMapping:0x121C5 - ,simpleTitleCaseMapping:0x121C5 - }, - { code:0x121C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C6 - ,simpleLowerCaseMapping:0x121C6 - ,simpleTitleCaseMapping:0x121C6 - }, - { code:0x121C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C7 - ,simpleLowerCaseMapping:0x121C7 - ,simpleTitleCaseMapping:0x121C7 - }, - { code:0x121C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C8 - ,simpleLowerCaseMapping:0x121C8 - ,simpleTitleCaseMapping:0x121C8 - }, - { code:0x121C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121C9 - ,simpleLowerCaseMapping:0x121C9 - ,simpleTitleCaseMapping:0x121C9 - }, - { code:0x121CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CA - ,simpleLowerCaseMapping:0x121CA - ,simpleTitleCaseMapping:0x121CA - }, - { code:0x121CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CB - ,simpleLowerCaseMapping:0x121CB - ,simpleTitleCaseMapping:0x121CB - }, - { code:0x121CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CC - ,simpleLowerCaseMapping:0x121CC - ,simpleTitleCaseMapping:0x121CC - }, - { code:0x121CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CD - ,simpleLowerCaseMapping:0x121CD - ,simpleTitleCaseMapping:0x121CD - }, - { code:0x121CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CE - ,simpleLowerCaseMapping:0x121CE - ,simpleTitleCaseMapping:0x121CE - }, - { code:0x121CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121CF - ,simpleLowerCaseMapping:0x121CF - ,simpleTitleCaseMapping:0x121CF - }, - { code:0x121D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D0 - ,simpleLowerCaseMapping:0x121D0 - ,simpleTitleCaseMapping:0x121D0 - }, - { code:0x121D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D1 - ,simpleLowerCaseMapping:0x121D1 - ,simpleTitleCaseMapping:0x121D1 - }, - { code:0x121D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D2 - ,simpleLowerCaseMapping:0x121D2 - ,simpleTitleCaseMapping:0x121D2 - }, - { code:0x121D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D3 - ,simpleLowerCaseMapping:0x121D3 - ,simpleTitleCaseMapping:0x121D3 - }, - { code:0x121D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D4 - ,simpleLowerCaseMapping:0x121D4 - ,simpleTitleCaseMapping:0x121D4 - }, - { code:0x121D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D5 - ,simpleLowerCaseMapping:0x121D5 - ,simpleTitleCaseMapping:0x121D5 - }, - { code:0x121D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D6 - ,simpleLowerCaseMapping:0x121D6 - ,simpleTitleCaseMapping:0x121D6 - }, - { code:0x121D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D7 - ,simpleLowerCaseMapping:0x121D7 - ,simpleTitleCaseMapping:0x121D7 - }, - { code:0x121D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D8 - ,simpleLowerCaseMapping:0x121D8 - ,simpleTitleCaseMapping:0x121D8 - }, - { code:0x121D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121D9 - ,simpleLowerCaseMapping:0x121D9 - ,simpleTitleCaseMapping:0x121D9 - }, - { code:0x121DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DA - ,simpleLowerCaseMapping:0x121DA - ,simpleTitleCaseMapping:0x121DA - }, - { code:0x121DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DB - ,simpleLowerCaseMapping:0x121DB - ,simpleTitleCaseMapping:0x121DB - }, - { code:0x121DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DC - ,simpleLowerCaseMapping:0x121DC - ,simpleTitleCaseMapping:0x121DC - }, - { code:0x121DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DD - ,simpleLowerCaseMapping:0x121DD - ,simpleTitleCaseMapping:0x121DD - }, - { code:0x121DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DE - ,simpleLowerCaseMapping:0x121DE - ,simpleTitleCaseMapping:0x121DE - }, - { code:0x121DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121DF - ,simpleLowerCaseMapping:0x121DF - ,simpleTitleCaseMapping:0x121DF - }, - { code:0x121E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E0 - ,simpleLowerCaseMapping:0x121E0 - ,simpleTitleCaseMapping:0x121E0 - }, - { code:0x121E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E1 - ,simpleLowerCaseMapping:0x121E1 - ,simpleTitleCaseMapping:0x121E1 - }, - { code:0x121E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E2 - ,simpleLowerCaseMapping:0x121E2 - ,simpleTitleCaseMapping:0x121E2 - }, - { code:0x121E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E3 - ,simpleLowerCaseMapping:0x121E3 - ,simpleTitleCaseMapping:0x121E3 - }, - { code:0x121E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E4 - ,simpleLowerCaseMapping:0x121E4 - ,simpleTitleCaseMapping:0x121E4 - }, - { code:0x121E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E5 - ,simpleLowerCaseMapping:0x121E5 - ,simpleTitleCaseMapping:0x121E5 - }, - { code:0x121E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E6 - ,simpleLowerCaseMapping:0x121E6 - ,simpleTitleCaseMapping:0x121E6 - }, - { code:0x121E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E7 - ,simpleLowerCaseMapping:0x121E7 - ,simpleTitleCaseMapping:0x121E7 - }, - { code:0x121E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E8 - ,simpleLowerCaseMapping:0x121E8 - ,simpleTitleCaseMapping:0x121E8 - }, - { code:0x121E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121E9 - ,simpleLowerCaseMapping:0x121E9 - ,simpleTitleCaseMapping:0x121E9 - }, - { code:0x121EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121EA - ,simpleLowerCaseMapping:0x121EA - ,simpleTitleCaseMapping:0x121EA - }, - { code:0x121EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121EB - ,simpleLowerCaseMapping:0x121EB - ,simpleTitleCaseMapping:0x121EB - }, - { code:0x121EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121EC - ,simpleLowerCaseMapping:0x121EC - ,simpleTitleCaseMapping:0x121EC - }, - { code:0x121ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121ED - ,simpleLowerCaseMapping:0x121ED - ,simpleTitleCaseMapping:0x121ED - }, - { code:0x121EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121EE - ,simpleLowerCaseMapping:0x121EE - ,simpleTitleCaseMapping:0x121EE - }, - { code:0x121EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121EF - ,simpleLowerCaseMapping:0x121EF - ,simpleTitleCaseMapping:0x121EF - }, - { code:0x121F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F0 - ,simpleLowerCaseMapping:0x121F0 - ,simpleTitleCaseMapping:0x121F0 - }, - { code:0x121F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F1 - ,simpleLowerCaseMapping:0x121F1 - ,simpleTitleCaseMapping:0x121F1 - }, - { code:0x121F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F2 - ,simpleLowerCaseMapping:0x121F2 - ,simpleTitleCaseMapping:0x121F2 - }, - { code:0x121F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F3 - ,simpleLowerCaseMapping:0x121F3 - ,simpleTitleCaseMapping:0x121F3 - }, - { code:0x121F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F4 - ,simpleLowerCaseMapping:0x121F4 - ,simpleTitleCaseMapping:0x121F4 - }, - { code:0x121F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F5 - ,simpleLowerCaseMapping:0x121F5 - ,simpleTitleCaseMapping:0x121F5 - }, - { code:0x121F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F6 - ,simpleLowerCaseMapping:0x121F6 - ,simpleTitleCaseMapping:0x121F6 - }, - { code:0x121F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F7 - ,simpleLowerCaseMapping:0x121F7 - ,simpleTitleCaseMapping:0x121F7 - }, - { code:0x121F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F8 - ,simpleLowerCaseMapping:0x121F8 - ,simpleTitleCaseMapping:0x121F8 - }, - { code:0x121F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121F9 - ,simpleLowerCaseMapping:0x121F9 - ,simpleTitleCaseMapping:0x121F9 - }, - { code:0x121FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FA - ,simpleLowerCaseMapping:0x121FA - ,simpleTitleCaseMapping:0x121FA - }, - { code:0x121FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FB - ,simpleLowerCaseMapping:0x121FB - ,simpleTitleCaseMapping:0x121FB - }, - { code:0x121FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FC - ,simpleLowerCaseMapping:0x121FC - ,simpleTitleCaseMapping:0x121FC - }, - { code:0x121FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FD - ,simpleLowerCaseMapping:0x121FD - ,simpleTitleCaseMapping:0x121FD - }, - { code:0x121FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FE - ,simpleLowerCaseMapping:0x121FE - ,simpleTitleCaseMapping:0x121FE - }, - { code:0x121FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x121FF - ,simpleLowerCaseMapping:0x121FF - ,simpleTitleCaseMapping:0x121FF - }, - { code:0x12200 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12200 - ,simpleLowerCaseMapping:0x12200 - ,simpleTitleCaseMapping:0x12200 - }, - { code:0x12201 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12201 - ,simpleLowerCaseMapping:0x12201 - ,simpleTitleCaseMapping:0x12201 - }, - { code:0x12202 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12202 - ,simpleLowerCaseMapping:0x12202 - ,simpleTitleCaseMapping:0x12202 - }, - { code:0x12203 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12203 - ,simpleLowerCaseMapping:0x12203 - ,simpleTitleCaseMapping:0x12203 - }, - { code:0x12204 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12204 - ,simpleLowerCaseMapping:0x12204 - ,simpleTitleCaseMapping:0x12204 - }, - { code:0x12205 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12205 - ,simpleLowerCaseMapping:0x12205 - ,simpleTitleCaseMapping:0x12205 - }, - { code:0x12206 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12206 - ,simpleLowerCaseMapping:0x12206 - ,simpleTitleCaseMapping:0x12206 - }, - { code:0x12207 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12207 - ,simpleLowerCaseMapping:0x12207 - ,simpleTitleCaseMapping:0x12207 - }, - { code:0x12208 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12208 - ,simpleLowerCaseMapping:0x12208 - ,simpleTitleCaseMapping:0x12208 - }, - { code:0x12209 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12209 - ,simpleLowerCaseMapping:0x12209 - ,simpleTitleCaseMapping:0x12209 - }, - { code:0x1220A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220A - ,simpleLowerCaseMapping:0x1220A - ,simpleTitleCaseMapping:0x1220A - }, - { code:0x1220B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220B - ,simpleLowerCaseMapping:0x1220B - ,simpleTitleCaseMapping:0x1220B - }, - { code:0x1220C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220C - ,simpleLowerCaseMapping:0x1220C - ,simpleTitleCaseMapping:0x1220C - }, - { code:0x1220D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220D - ,simpleLowerCaseMapping:0x1220D - ,simpleTitleCaseMapping:0x1220D - }, - { code:0x1220E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220E - ,simpleLowerCaseMapping:0x1220E - ,simpleTitleCaseMapping:0x1220E - }, - { code:0x1220F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1220F - ,simpleLowerCaseMapping:0x1220F - ,simpleTitleCaseMapping:0x1220F - }, - { code:0x12210 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12210 - ,simpleLowerCaseMapping:0x12210 - ,simpleTitleCaseMapping:0x12210 - }, - { code:0x12211 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12211 - ,simpleLowerCaseMapping:0x12211 - ,simpleTitleCaseMapping:0x12211 - }, - { code:0x12212 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12212 - ,simpleLowerCaseMapping:0x12212 - ,simpleTitleCaseMapping:0x12212 - }, - { code:0x12213 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12213 - ,simpleLowerCaseMapping:0x12213 - ,simpleTitleCaseMapping:0x12213 - }, - { code:0x12214 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12214 - ,simpleLowerCaseMapping:0x12214 - ,simpleTitleCaseMapping:0x12214 - }, - { code:0x12215 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12215 - ,simpleLowerCaseMapping:0x12215 - ,simpleTitleCaseMapping:0x12215 - }, - { code:0x12216 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12216 - ,simpleLowerCaseMapping:0x12216 - ,simpleTitleCaseMapping:0x12216 - }, - { code:0x12217 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12217 - ,simpleLowerCaseMapping:0x12217 - ,simpleTitleCaseMapping:0x12217 - }, - { code:0x12218 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12218 - ,simpleLowerCaseMapping:0x12218 - ,simpleTitleCaseMapping:0x12218 - }, - { code:0x12219 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12219 - ,simpleLowerCaseMapping:0x12219 - ,simpleTitleCaseMapping:0x12219 - }, - { code:0x1221A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221A - ,simpleLowerCaseMapping:0x1221A - ,simpleTitleCaseMapping:0x1221A - }, - { code:0x1221B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221B - ,simpleLowerCaseMapping:0x1221B - ,simpleTitleCaseMapping:0x1221B - }, - { code:0x1221C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221C - ,simpleLowerCaseMapping:0x1221C - ,simpleTitleCaseMapping:0x1221C - }, - { code:0x1221D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221D - ,simpleLowerCaseMapping:0x1221D - ,simpleTitleCaseMapping:0x1221D - }, - { code:0x1221E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221E - ,simpleLowerCaseMapping:0x1221E - ,simpleTitleCaseMapping:0x1221E - }, - { code:0x1221F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1221F - ,simpleLowerCaseMapping:0x1221F - ,simpleTitleCaseMapping:0x1221F - }, - { code:0x12220 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12220 - ,simpleLowerCaseMapping:0x12220 - ,simpleTitleCaseMapping:0x12220 - }, - { code:0x12221 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12221 - ,simpleLowerCaseMapping:0x12221 - ,simpleTitleCaseMapping:0x12221 - }, - { code:0x12222 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12222 - ,simpleLowerCaseMapping:0x12222 - ,simpleTitleCaseMapping:0x12222 - }, - { code:0x12223 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12223 - ,simpleLowerCaseMapping:0x12223 - ,simpleTitleCaseMapping:0x12223 - }, - { code:0x12224 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12224 - ,simpleLowerCaseMapping:0x12224 - ,simpleTitleCaseMapping:0x12224 - }, - { code:0x12225 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12225 - ,simpleLowerCaseMapping:0x12225 - ,simpleTitleCaseMapping:0x12225 - }, - { code:0x12226 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12226 - ,simpleLowerCaseMapping:0x12226 - ,simpleTitleCaseMapping:0x12226 - }, - { code:0x12227 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12227 - ,simpleLowerCaseMapping:0x12227 - ,simpleTitleCaseMapping:0x12227 - }, - { code:0x12228 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12228 - ,simpleLowerCaseMapping:0x12228 - ,simpleTitleCaseMapping:0x12228 - }, - { code:0x12229 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12229 - ,simpleLowerCaseMapping:0x12229 - ,simpleTitleCaseMapping:0x12229 - }, - { code:0x1222A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222A - ,simpleLowerCaseMapping:0x1222A - ,simpleTitleCaseMapping:0x1222A - }, - { code:0x1222B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222B - ,simpleLowerCaseMapping:0x1222B - ,simpleTitleCaseMapping:0x1222B - }, - { code:0x1222C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222C - ,simpleLowerCaseMapping:0x1222C - ,simpleTitleCaseMapping:0x1222C - }, - { code:0x1222D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222D - ,simpleLowerCaseMapping:0x1222D - ,simpleTitleCaseMapping:0x1222D - }, - { code:0x1222E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222E - ,simpleLowerCaseMapping:0x1222E - ,simpleTitleCaseMapping:0x1222E - }, - { code:0x1222F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1222F - ,simpleLowerCaseMapping:0x1222F - ,simpleTitleCaseMapping:0x1222F - }, - { code:0x12230 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12230 - ,simpleLowerCaseMapping:0x12230 - ,simpleTitleCaseMapping:0x12230 - }, - { code:0x12231 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12231 - ,simpleLowerCaseMapping:0x12231 - ,simpleTitleCaseMapping:0x12231 - }, - { code:0x12232 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12232 - ,simpleLowerCaseMapping:0x12232 - ,simpleTitleCaseMapping:0x12232 - }, - { code:0x12233 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12233 - ,simpleLowerCaseMapping:0x12233 - ,simpleTitleCaseMapping:0x12233 - }, - { code:0x12234 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12234 - ,simpleLowerCaseMapping:0x12234 - ,simpleTitleCaseMapping:0x12234 - }, - { code:0x12235 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12235 - ,simpleLowerCaseMapping:0x12235 - ,simpleTitleCaseMapping:0x12235 - }, - { code:0x12236 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12236 - ,simpleLowerCaseMapping:0x12236 - ,simpleTitleCaseMapping:0x12236 - }, - { code:0x12237 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12237 - ,simpleLowerCaseMapping:0x12237 - ,simpleTitleCaseMapping:0x12237 - }, - { code:0x12238 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12238 - ,simpleLowerCaseMapping:0x12238 - ,simpleTitleCaseMapping:0x12238 - }, - { code:0x12239 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12239 - ,simpleLowerCaseMapping:0x12239 - ,simpleTitleCaseMapping:0x12239 - }, - { code:0x1223A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223A - ,simpleLowerCaseMapping:0x1223A - ,simpleTitleCaseMapping:0x1223A - }, - { code:0x1223B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223B - ,simpleLowerCaseMapping:0x1223B - ,simpleTitleCaseMapping:0x1223B - }, - { code:0x1223C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223C - ,simpleLowerCaseMapping:0x1223C - ,simpleTitleCaseMapping:0x1223C - }, - { code:0x1223D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223D - ,simpleLowerCaseMapping:0x1223D - ,simpleTitleCaseMapping:0x1223D - }, - { code:0x1223E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223E - ,simpleLowerCaseMapping:0x1223E - ,simpleTitleCaseMapping:0x1223E - }, - { code:0x1223F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1223F - ,simpleLowerCaseMapping:0x1223F - ,simpleTitleCaseMapping:0x1223F - }, - { code:0x12240 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12240 - ,simpleLowerCaseMapping:0x12240 - ,simpleTitleCaseMapping:0x12240 - }, - { code:0x12241 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12241 - ,simpleLowerCaseMapping:0x12241 - ,simpleTitleCaseMapping:0x12241 - }, - { code:0x12242 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12242 - ,simpleLowerCaseMapping:0x12242 - ,simpleTitleCaseMapping:0x12242 - }, - { code:0x12243 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12243 - ,simpleLowerCaseMapping:0x12243 - ,simpleTitleCaseMapping:0x12243 - }, - { code:0x12244 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12244 - ,simpleLowerCaseMapping:0x12244 - ,simpleTitleCaseMapping:0x12244 - }, - { code:0x12245 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12245 - ,simpleLowerCaseMapping:0x12245 - ,simpleTitleCaseMapping:0x12245 - }, - { code:0x12246 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12246 - ,simpleLowerCaseMapping:0x12246 - ,simpleTitleCaseMapping:0x12246 - }, - { code:0x12247 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12247 - ,simpleLowerCaseMapping:0x12247 - ,simpleTitleCaseMapping:0x12247 - }, - { code:0x12248 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12248 - ,simpleLowerCaseMapping:0x12248 - ,simpleTitleCaseMapping:0x12248 - }, - { code:0x12249 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12249 - ,simpleLowerCaseMapping:0x12249 - ,simpleTitleCaseMapping:0x12249 - }, - { code:0x1224A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224A - ,simpleLowerCaseMapping:0x1224A - ,simpleTitleCaseMapping:0x1224A - }, - { code:0x1224B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224B - ,simpleLowerCaseMapping:0x1224B - ,simpleTitleCaseMapping:0x1224B - }, - { code:0x1224C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224C - ,simpleLowerCaseMapping:0x1224C - ,simpleTitleCaseMapping:0x1224C - }, - { code:0x1224D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224D - ,simpleLowerCaseMapping:0x1224D - ,simpleTitleCaseMapping:0x1224D - }, - { code:0x1224E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224E - ,simpleLowerCaseMapping:0x1224E - ,simpleTitleCaseMapping:0x1224E - }, - { code:0x1224F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1224F - ,simpleLowerCaseMapping:0x1224F - ,simpleTitleCaseMapping:0x1224F - }, - { code:0x12250 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12250 - ,simpleLowerCaseMapping:0x12250 - ,simpleTitleCaseMapping:0x12250 - }, - { code:0x12251 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12251 - ,simpleLowerCaseMapping:0x12251 - ,simpleTitleCaseMapping:0x12251 - }, - { code:0x12252 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12252 - ,simpleLowerCaseMapping:0x12252 - ,simpleTitleCaseMapping:0x12252 - }, - { code:0x12253 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12253 - ,simpleLowerCaseMapping:0x12253 - ,simpleTitleCaseMapping:0x12253 - }, - { code:0x12254 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12254 - ,simpleLowerCaseMapping:0x12254 - ,simpleTitleCaseMapping:0x12254 - }, - { code:0x12255 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12255 - ,simpleLowerCaseMapping:0x12255 - ,simpleTitleCaseMapping:0x12255 - }, - { code:0x12256 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12256 - ,simpleLowerCaseMapping:0x12256 - ,simpleTitleCaseMapping:0x12256 - }, - { code:0x12257 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12257 - ,simpleLowerCaseMapping:0x12257 - ,simpleTitleCaseMapping:0x12257 - }, - { code:0x12258 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12258 - ,simpleLowerCaseMapping:0x12258 - ,simpleTitleCaseMapping:0x12258 - }, - { code:0x12259 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12259 - ,simpleLowerCaseMapping:0x12259 - ,simpleTitleCaseMapping:0x12259 - }, - { code:0x1225A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225A - ,simpleLowerCaseMapping:0x1225A - ,simpleTitleCaseMapping:0x1225A - }, - { code:0x1225B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225B - ,simpleLowerCaseMapping:0x1225B - ,simpleTitleCaseMapping:0x1225B - }, - { code:0x1225C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225C - ,simpleLowerCaseMapping:0x1225C - ,simpleTitleCaseMapping:0x1225C - }, - { code:0x1225D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225D - ,simpleLowerCaseMapping:0x1225D - ,simpleTitleCaseMapping:0x1225D - }, - { code:0x1225E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225E - ,simpleLowerCaseMapping:0x1225E - ,simpleTitleCaseMapping:0x1225E - }, - { code:0x1225F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1225F - ,simpleLowerCaseMapping:0x1225F - ,simpleTitleCaseMapping:0x1225F - }, - { code:0x12260 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12260 - ,simpleLowerCaseMapping:0x12260 - ,simpleTitleCaseMapping:0x12260 - }, - { code:0x12261 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12261 - ,simpleLowerCaseMapping:0x12261 - ,simpleTitleCaseMapping:0x12261 - }, - { code:0x12262 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12262 - ,simpleLowerCaseMapping:0x12262 - ,simpleTitleCaseMapping:0x12262 - }, - { code:0x12263 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12263 - ,simpleLowerCaseMapping:0x12263 - ,simpleTitleCaseMapping:0x12263 - }, - { code:0x12264 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12264 - ,simpleLowerCaseMapping:0x12264 - ,simpleTitleCaseMapping:0x12264 - }, - { code:0x12265 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12265 - ,simpleLowerCaseMapping:0x12265 - ,simpleTitleCaseMapping:0x12265 - }, - { code:0x12266 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12266 - ,simpleLowerCaseMapping:0x12266 - ,simpleTitleCaseMapping:0x12266 - }, - { code:0x12267 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12267 - ,simpleLowerCaseMapping:0x12267 - ,simpleTitleCaseMapping:0x12267 - }, - { code:0x12268 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12268 - ,simpleLowerCaseMapping:0x12268 - ,simpleTitleCaseMapping:0x12268 - }, - { code:0x12269 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12269 - ,simpleLowerCaseMapping:0x12269 - ,simpleTitleCaseMapping:0x12269 - }, - { code:0x1226A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226A - ,simpleLowerCaseMapping:0x1226A - ,simpleTitleCaseMapping:0x1226A - }, - { code:0x1226B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226B - ,simpleLowerCaseMapping:0x1226B - ,simpleTitleCaseMapping:0x1226B - }, - { code:0x1226C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226C - ,simpleLowerCaseMapping:0x1226C - ,simpleTitleCaseMapping:0x1226C - }, - { code:0x1226D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226D - ,simpleLowerCaseMapping:0x1226D - ,simpleTitleCaseMapping:0x1226D - }, - { code:0x1226E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226E - ,simpleLowerCaseMapping:0x1226E - ,simpleTitleCaseMapping:0x1226E - }, - { code:0x1226F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1226F - ,simpleLowerCaseMapping:0x1226F - ,simpleTitleCaseMapping:0x1226F - }, - { code:0x12270 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12270 - ,simpleLowerCaseMapping:0x12270 - ,simpleTitleCaseMapping:0x12270 - }, - { code:0x12271 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12271 - ,simpleLowerCaseMapping:0x12271 - ,simpleTitleCaseMapping:0x12271 - }, - { code:0x12272 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12272 - ,simpleLowerCaseMapping:0x12272 - ,simpleTitleCaseMapping:0x12272 - }, - { code:0x12273 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12273 - ,simpleLowerCaseMapping:0x12273 - ,simpleTitleCaseMapping:0x12273 - }, - { code:0x12274 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12274 - ,simpleLowerCaseMapping:0x12274 - ,simpleTitleCaseMapping:0x12274 - }, - { code:0x12275 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12275 - ,simpleLowerCaseMapping:0x12275 - ,simpleTitleCaseMapping:0x12275 - }, - { code:0x12276 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12276 - ,simpleLowerCaseMapping:0x12276 - ,simpleTitleCaseMapping:0x12276 - }, - { code:0x12277 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12277 - ,simpleLowerCaseMapping:0x12277 - ,simpleTitleCaseMapping:0x12277 - }, - { code:0x12278 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12278 - ,simpleLowerCaseMapping:0x12278 - ,simpleTitleCaseMapping:0x12278 - }, - { code:0x12279 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12279 - ,simpleLowerCaseMapping:0x12279 - ,simpleTitleCaseMapping:0x12279 - }, - { code:0x1227A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227A - ,simpleLowerCaseMapping:0x1227A - ,simpleTitleCaseMapping:0x1227A - }, - { code:0x1227B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227B - ,simpleLowerCaseMapping:0x1227B - ,simpleTitleCaseMapping:0x1227B - }, - { code:0x1227C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227C - ,simpleLowerCaseMapping:0x1227C - ,simpleTitleCaseMapping:0x1227C - }, - { code:0x1227D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227D - ,simpleLowerCaseMapping:0x1227D - ,simpleTitleCaseMapping:0x1227D - }, - { code:0x1227E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227E - ,simpleLowerCaseMapping:0x1227E - ,simpleTitleCaseMapping:0x1227E - }, - { code:0x1227F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1227F - ,simpleLowerCaseMapping:0x1227F - ,simpleTitleCaseMapping:0x1227F - }, - { code:0x12280 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12280 - ,simpleLowerCaseMapping:0x12280 - ,simpleTitleCaseMapping:0x12280 - }, - { code:0x12281 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12281 - ,simpleLowerCaseMapping:0x12281 - ,simpleTitleCaseMapping:0x12281 - }, - { code:0x12282 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12282 - ,simpleLowerCaseMapping:0x12282 - ,simpleTitleCaseMapping:0x12282 - }, - { code:0x12283 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12283 - ,simpleLowerCaseMapping:0x12283 - ,simpleTitleCaseMapping:0x12283 - }, - { code:0x12284 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12284 - ,simpleLowerCaseMapping:0x12284 - ,simpleTitleCaseMapping:0x12284 - }, - { code:0x12285 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12285 - ,simpleLowerCaseMapping:0x12285 - ,simpleTitleCaseMapping:0x12285 - }, - { code:0x12286 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12286 - ,simpleLowerCaseMapping:0x12286 - ,simpleTitleCaseMapping:0x12286 - }, - { code:0x12287 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12287 - ,simpleLowerCaseMapping:0x12287 - ,simpleTitleCaseMapping:0x12287 - }, - { code:0x12288 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12288 - ,simpleLowerCaseMapping:0x12288 - ,simpleTitleCaseMapping:0x12288 - }, - { code:0x12289 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12289 - ,simpleLowerCaseMapping:0x12289 - ,simpleTitleCaseMapping:0x12289 - }, - { code:0x1228A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228A - ,simpleLowerCaseMapping:0x1228A - ,simpleTitleCaseMapping:0x1228A - }, - { code:0x1228B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228B - ,simpleLowerCaseMapping:0x1228B - ,simpleTitleCaseMapping:0x1228B - }, - { code:0x1228C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228C - ,simpleLowerCaseMapping:0x1228C - ,simpleTitleCaseMapping:0x1228C - }, - { code:0x1228D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228D - ,simpleLowerCaseMapping:0x1228D - ,simpleTitleCaseMapping:0x1228D - }, - { code:0x1228E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228E - ,simpleLowerCaseMapping:0x1228E - ,simpleTitleCaseMapping:0x1228E - }, - { code:0x1228F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1228F - ,simpleLowerCaseMapping:0x1228F - ,simpleTitleCaseMapping:0x1228F - }, - { code:0x12290 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12290 - ,simpleLowerCaseMapping:0x12290 - ,simpleTitleCaseMapping:0x12290 - }, - { code:0x12291 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12291 - ,simpleLowerCaseMapping:0x12291 - ,simpleTitleCaseMapping:0x12291 - }, - { code:0x12292 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12292 - ,simpleLowerCaseMapping:0x12292 - ,simpleTitleCaseMapping:0x12292 - }, - { code:0x12293 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12293 - ,simpleLowerCaseMapping:0x12293 - ,simpleTitleCaseMapping:0x12293 - }, - { code:0x12294 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12294 - ,simpleLowerCaseMapping:0x12294 - ,simpleTitleCaseMapping:0x12294 - }, - { code:0x12295 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12295 - ,simpleLowerCaseMapping:0x12295 - ,simpleTitleCaseMapping:0x12295 - }, - { code:0x12296 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12296 - ,simpleLowerCaseMapping:0x12296 - ,simpleTitleCaseMapping:0x12296 - }, - { code:0x12297 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12297 - ,simpleLowerCaseMapping:0x12297 - ,simpleTitleCaseMapping:0x12297 - }, - { code:0x12298 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12298 - ,simpleLowerCaseMapping:0x12298 - ,simpleTitleCaseMapping:0x12298 - }, - { code:0x12299 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12299 - ,simpleLowerCaseMapping:0x12299 - ,simpleTitleCaseMapping:0x12299 - }, - { code:0x1229A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229A - ,simpleLowerCaseMapping:0x1229A - ,simpleTitleCaseMapping:0x1229A - }, - { code:0x1229B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229B - ,simpleLowerCaseMapping:0x1229B - ,simpleTitleCaseMapping:0x1229B - }, - { code:0x1229C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229C - ,simpleLowerCaseMapping:0x1229C - ,simpleTitleCaseMapping:0x1229C - }, - { code:0x1229D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229D - ,simpleLowerCaseMapping:0x1229D - ,simpleTitleCaseMapping:0x1229D - }, - { code:0x1229E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229E - ,simpleLowerCaseMapping:0x1229E - ,simpleTitleCaseMapping:0x1229E - }, - { code:0x1229F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1229F - ,simpleLowerCaseMapping:0x1229F - ,simpleTitleCaseMapping:0x1229F - }, - { code:0x122A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A0 - ,simpleLowerCaseMapping:0x122A0 - ,simpleTitleCaseMapping:0x122A0 - }, - { code:0x122A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A1 - ,simpleLowerCaseMapping:0x122A1 - ,simpleTitleCaseMapping:0x122A1 - }, - { code:0x122A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A2 - ,simpleLowerCaseMapping:0x122A2 - ,simpleTitleCaseMapping:0x122A2 - }, - { code:0x122A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A3 - ,simpleLowerCaseMapping:0x122A3 - ,simpleTitleCaseMapping:0x122A3 - }, - { code:0x122A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A4 - ,simpleLowerCaseMapping:0x122A4 - ,simpleTitleCaseMapping:0x122A4 - }, - { code:0x122A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A5 - ,simpleLowerCaseMapping:0x122A5 - ,simpleTitleCaseMapping:0x122A5 - }, - { code:0x122A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A6 - ,simpleLowerCaseMapping:0x122A6 - ,simpleTitleCaseMapping:0x122A6 - }, - { code:0x122A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A7 - ,simpleLowerCaseMapping:0x122A7 - ,simpleTitleCaseMapping:0x122A7 - }, - { code:0x122A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A8 - ,simpleLowerCaseMapping:0x122A8 - ,simpleTitleCaseMapping:0x122A8 - }, - { code:0x122A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122A9 - ,simpleLowerCaseMapping:0x122A9 - ,simpleTitleCaseMapping:0x122A9 - }, - { code:0x122AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AA - ,simpleLowerCaseMapping:0x122AA - ,simpleTitleCaseMapping:0x122AA - }, - { code:0x122AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AB - ,simpleLowerCaseMapping:0x122AB - ,simpleTitleCaseMapping:0x122AB - }, - { code:0x122AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AC - ,simpleLowerCaseMapping:0x122AC - ,simpleTitleCaseMapping:0x122AC - }, - { code:0x122AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AD - ,simpleLowerCaseMapping:0x122AD - ,simpleTitleCaseMapping:0x122AD - }, - { code:0x122AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AE - ,simpleLowerCaseMapping:0x122AE - ,simpleTitleCaseMapping:0x122AE - }, - { code:0x122AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122AF - ,simpleLowerCaseMapping:0x122AF - ,simpleTitleCaseMapping:0x122AF - }, - { code:0x122B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B0 - ,simpleLowerCaseMapping:0x122B0 - ,simpleTitleCaseMapping:0x122B0 - }, - { code:0x122B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B1 - ,simpleLowerCaseMapping:0x122B1 - ,simpleTitleCaseMapping:0x122B1 - }, - { code:0x122B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B2 - ,simpleLowerCaseMapping:0x122B2 - ,simpleTitleCaseMapping:0x122B2 - }, - { code:0x122B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B3 - ,simpleLowerCaseMapping:0x122B3 - ,simpleTitleCaseMapping:0x122B3 - }, - { code:0x122B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B4 - ,simpleLowerCaseMapping:0x122B4 - ,simpleTitleCaseMapping:0x122B4 - }, - { code:0x122B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B5 - ,simpleLowerCaseMapping:0x122B5 - ,simpleTitleCaseMapping:0x122B5 - }, - { code:0x122B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B6 - ,simpleLowerCaseMapping:0x122B6 - ,simpleTitleCaseMapping:0x122B6 - }, - { code:0x122B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B7 - ,simpleLowerCaseMapping:0x122B7 - ,simpleTitleCaseMapping:0x122B7 - }, - { code:0x122B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B8 - ,simpleLowerCaseMapping:0x122B8 - ,simpleTitleCaseMapping:0x122B8 - }, - { code:0x122B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122B9 - ,simpleLowerCaseMapping:0x122B9 - ,simpleTitleCaseMapping:0x122B9 - }, - { code:0x122BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BA - ,simpleLowerCaseMapping:0x122BA - ,simpleTitleCaseMapping:0x122BA - }, - { code:0x122BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BB - ,simpleLowerCaseMapping:0x122BB - ,simpleTitleCaseMapping:0x122BB - }, - { code:0x122BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BC - ,simpleLowerCaseMapping:0x122BC - ,simpleTitleCaseMapping:0x122BC - }, - { code:0x122BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BD - ,simpleLowerCaseMapping:0x122BD - ,simpleTitleCaseMapping:0x122BD - }, - { code:0x122BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BE - ,simpleLowerCaseMapping:0x122BE - ,simpleTitleCaseMapping:0x122BE - }, - { code:0x122BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122BF - ,simpleLowerCaseMapping:0x122BF - ,simpleTitleCaseMapping:0x122BF - }, - { code:0x122C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C0 - ,simpleLowerCaseMapping:0x122C0 - ,simpleTitleCaseMapping:0x122C0 - }, - { code:0x122C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C1 - ,simpleLowerCaseMapping:0x122C1 - ,simpleTitleCaseMapping:0x122C1 - }, - { code:0x122C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C2 - ,simpleLowerCaseMapping:0x122C2 - ,simpleTitleCaseMapping:0x122C2 - }, - { code:0x122C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C3 - ,simpleLowerCaseMapping:0x122C3 - ,simpleTitleCaseMapping:0x122C3 - }, - { code:0x122C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C4 - ,simpleLowerCaseMapping:0x122C4 - ,simpleTitleCaseMapping:0x122C4 - }, - { code:0x122C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C5 - ,simpleLowerCaseMapping:0x122C5 - ,simpleTitleCaseMapping:0x122C5 - }, - { code:0x122C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C6 - ,simpleLowerCaseMapping:0x122C6 - ,simpleTitleCaseMapping:0x122C6 - }, - { code:0x122C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C7 - ,simpleLowerCaseMapping:0x122C7 - ,simpleTitleCaseMapping:0x122C7 - }, - { code:0x122C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C8 - ,simpleLowerCaseMapping:0x122C8 - ,simpleTitleCaseMapping:0x122C8 - }, - { code:0x122C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122C9 - ,simpleLowerCaseMapping:0x122C9 - ,simpleTitleCaseMapping:0x122C9 - }, - { code:0x122CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CA - ,simpleLowerCaseMapping:0x122CA - ,simpleTitleCaseMapping:0x122CA - }, - { code:0x122CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CB - ,simpleLowerCaseMapping:0x122CB - ,simpleTitleCaseMapping:0x122CB - }, - { code:0x122CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CC - ,simpleLowerCaseMapping:0x122CC - ,simpleTitleCaseMapping:0x122CC - }, - { code:0x122CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CD - ,simpleLowerCaseMapping:0x122CD - ,simpleTitleCaseMapping:0x122CD - }, - { code:0x122CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CE - ,simpleLowerCaseMapping:0x122CE - ,simpleTitleCaseMapping:0x122CE - }, - { code:0x122CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122CF - ,simpleLowerCaseMapping:0x122CF - ,simpleTitleCaseMapping:0x122CF - }, - { code:0x122D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D0 - ,simpleLowerCaseMapping:0x122D0 - ,simpleTitleCaseMapping:0x122D0 - }, - { code:0x122D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D1 - ,simpleLowerCaseMapping:0x122D1 - ,simpleTitleCaseMapping:0x122D1 - }, - { code:0x122D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D2 - ,simpleLowerCaseMapping:0x122D2 - ,simpleTitleCaseMapping:0x122D2 - }, - { code:0x122D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D3 - ,simpleLowerCaseMapping:0x122D3 - ,simpleTitleCaseMapping:0x122D3 - }, - { code:0x122D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D4 - ,simpleLowerCaseMapping:0x122D4 - ,simpleTitleCaseMapping:0x122D4 - }, - { code:0x122D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D5 - ,simpleLowerCaseMapping:0x122D5 - ,simpleTitleCaseMapping:0x122D5 - }, - { code:0x122D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D6 - ,simpleLowerCaseMapping:0x122D6 - ,simpleTitleCaseMapping:0x122D6 - }, - { code:0x122D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D7 - ,simpleLowerCaseMapping:0x122D7 - ,simpleTitleCaseMapping:0x122D7 - }, - { code:0x122D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D8 - ,simpleLowerCaseMapping:0x122D8 - ,simpleTitleCaseMapping:0x122D8 - }, - { code:0x122D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122D9 - ,simpleLowerCaseMapping:0x122D9 - ,simpleTitleCaseMapping:0x122D9 - }, - { code:0x122DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DA - ,simpleLowerCaseMapping:0x122DA - ,simpleTitleCaseMapping:0x122DA - }, - { code:0x122DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DB - ,simpleLowerCaseMapping:0x122DB - ,simpleTitleCaseMapping:0x122DB - }, - { code:0x122DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DC - ,simpleLowerCaseMapping:0x122DC - ,simpleTitleCaseMapping:0x122DC - }, - { code:0x122DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DD - ,simpleLowerCaseMapping:0x122DD - ,simpleTitleCaseMapping:0x122DD - }, - { code:0x122DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DE - ,simpleLowerCaseMapping:0x122DE - ,simpleTitleCaseMapping:0x122DE - }, - { code:0x122DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122DF - ,simpleLowerCaseMapping:0x122DF - ,simpleTitleCaseMapping:0x122DF - }, - { code:0x122E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E0 - ,simpleLowerCaseMapping:0x122E0 - ,simpleTitleCaseMapping:0x122E0 - }, - { code:0x122E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E1 - ,simpleLowerCaseMapping:0x122E1 - ,simpleTitleCaseMapping:0x122E1 - }, - { code:0x122E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E2 - ,simpleLowerCaseMapping:0x122E2 - ,simpleTitleCaseMapping:0x122E2 - }, - { code:0x122E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E3 - ,simpleLowerCaseMapping:0x122E3 - ,simpleTitleCaseMapping:0x122E3 - }, - { code:0x122E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E4 - ,simpleLowerCaseMapping:0x122E4 - ,simpleTitleCaseMapping:0x122E4 - }, - { code:0x122E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E5 - ,simpleLowerCaseMapping:0x122E5 - ,simpleTitleCaseMapping:0x122E5 - }, - { code:0x122E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E6 - ,simpleLowerCaseMapping:0x122E6 - ,simpleTitleCaseMapping:0x122E6 - }, - { code:0x122E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E7 - ,simpleLowerCaseMapping:0x122E7 - ,simpleTitleCaseMapping:0x122E7 - }, - { code:0x122E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E8 - ,simpleLowerCaseMapping:0x122E8 - ,simpleTitleCaseMapping:0x122E8 - }, - { code:0x122E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122E9 - ,simpleLowerCaseMapping:0x122E9 - ,simpleTitleCaseMapping:0x122E9 - }, - { code:0x122EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122EA - ,simpleLowerCaseMapping:0x122EA - ,simpleTitleCaseMapping:0x122EA - }, - { code:0x122EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122EB - ,simpleLowerCaseMapping:0x122EB - ,simpleTitleCaseMapping:0x122EB - }, - { code:0x122EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122EC - ,simpleLowerCaseMapping:0x122EC - ,simpleTitleCaseMapping:0x122EC - }, - { code:0x122ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122ED - ,simpleLowerCaseMapping:0x122ED - ,simpleTitleCaseMapping:0x122ED - }, - { code:0x122EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122EE - ,simpleLowerCaseMapping:0x122EE - ,simpleTitleCaseMapping:0x122EE - }, - { code:0x122EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122EF - ,simpleLowerCaseMapping:0x122EF - ,simpleTitleCaseMapping:0x122EF - }, - { code:0x122F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F0 - ,simpleLowerCaseMapping:0x122F0 - ,simpleTitleCaseMapping:0x122F0 - }, - { code:0x122F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F1 - ,simpleLowerCaseMapping:0x122F1 - ,simpleTitleCaseMapping:0x122F1 - }, - { code:0x122F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F2 - ,simpleLowerCaseMapping:0x122F2 - ,simpleTitleCaseMapping:0x122F2 - }, - { code:0x122F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F3 - ,simpleLowerCaseMapping:0x122F3 - ,simpleTitleCaseMapping:0x122F3 - }, - { code:0x122F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F4 - ,simpleLowerCaseMapping:0x122F4 - ,simpleTitleCaseMapping:0x122F4 - }, - { code:0x122F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F5 - ,simpleLowerCaseMapping:0x122F5 - ,simpleTitleCaseMapping:0x122F5 - }, - { code:0x122F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F6 - ,simpleLowerCaseMapping:0x122F6 - ,simpleTitleCaseMapping:0x122F6 - }, - { code:0x122F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F7 - ,simpleLowerCaseMapping:0x122F7 - ,simpleTitleCaseMapping:0x122F7 - }, - { code:0x122F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F8 - ,simpleLowerCaseMapping:0x122F8 - ,simpleTitleCaseMapping:0x122F8 - }, - { code:0x122F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122F9 - ,simpleLowerCaseMapping:0x122F9 - ,simpleTitleCaseMapping:0x122F9 - }, - { code:0x122FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FA - ,simpleLowerCaseMapping:0x122FA - ,simpleTitleCaseMapping:0x122FA - }, - { code:0x122FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FB - ,simpleLowerCaseMapping:0x122FB - ,simpleTitleCaseMapping:0x122FB - }, - { code:0x122FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FC - ,simpleLowerCaseMapping:0x122FC - ,simpleTitleCaseMapping:0x122FC - }, - { code:0x122FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FD - ,simpleLowerCaseMapping:0x122FD - ,simpleTitleCaseMapping:0x122FD - }, - { code:0x122FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FE - ,simpleLowerCaseMapping:0x122FE - ,simpleTitleCaseMapping:0x122FE - }, - { code:0x122FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x122FF - ,simpleLowerCaseMapping:0x122FF - ,simpleTitleCaseMapping:0x122FF - }, - { code:0x12300 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12300 - ,simpleLowerCaseMapping:0x12300 - ,simpleTitleCaseMapping:0x12300 - }, - { code:0x12301 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12301 - ,simpleLowerCaseMapping:0x12301 - ,simpleTitleCaseMapping:0x12301 - }, - { code:0x12302 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12302 - ,simpleLowerCaseMapping:0x12302 - ,simpleTitleCaseMapping:0x12302 - }, - { code:0x12303 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12303 - ,simpleLowerCaseMapping:0x12303 - ,simpleTitleCaseMapping:0x12303 - }, - { code:0x12304 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12304 - ,simpleLowerCaseMapping:0x12304 - ,simpleTitleCaseMapping:0x12304 - }, - { code:0x12305 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12305 - ,simpleLowerCaseMapping:0x12305 - ,simpleTitleCaseMapping:0x12305 - }, - { code:0x12306 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12306 - ,simpleLowerCaseMapping:0x12306 - ,simpleTitleCaseMapping:0x12306 - }, - { code:0x12307 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12307 - ,simpleLowerCaseMapping:0x12307 - ,simpleTitleCaseMapping:0x12307 - }, - { code:0x12308 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12308 - ,simpleLowerCaseMapping:0x12308 - ,simpleTitleCaseMapping:0x12308 - }, - { code:0x12309 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12309 - ,simpleLowerCaseMapping:0x12309 - ,simpleTitleCaseMapping:0x12309 - }, - { code:0x1230A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230A - ,simpleLowerCaseMapping:0x1230A - ,simpleTitleCaseMapping:0x1230A - }, - { code:0x1230B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230B - ,simpleLowerCaseMapping:0x1230B - ,simpleTitleCaseMapping:0x1230B - }, - { code:0x1230C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230C - ,simpleLowerCaseMapping:0x1230C - ,simpleTitleCaseMapping:0x1230C - }, - { code:0x1230D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230D - ,simpleLowerCaseMapping:0x1230D - ,simpleTitleCaseMapping:0x1230D - }, - { code:0x1230E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230E - ,simpleLowerCaseMapping:0x1230E - ,simpleTitleCaseMapping:0x1230E - }, - { code:0x1230F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1230F - ,simpleLowerCaseMapping:0x1230F - ,simpleTitleCaseMapping:0x1230F - }, - { code:0x12310 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12310 - ,simpleLowerCaseMapping:0x12310 - ,simpleTitleCaseMapping:0x12310 - }, - { code:0x12311 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12311 - ,simpleLowerCaseMapping:0x12311 - ,simpleTitleCaseMapping:0x12311 - }, - { code:0x12312 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12312 - ,simpleLowerCaseMapping:0x12312 - ,simpleTitleCaseMapping:0x12312 - }, - { code:0x12313 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12313 - ,simpleLowerCaseMapping:0x12313 - ,simpleTitleCaseMapping:0x12313 - }, - { code:0x12314 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12314 - ,simpleLowerCaseMapping:0x12314 - ,simpleTitleCaseMapping:0x12314 - }, - { code:0x12315 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12315 - ,simpleLowerCaseMapping:0x12315 - ,simpleTitleCaseMapping:0x12315 - }, - { code:0x12316 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12316 - ,simpleLowerCaseMapping:0x12316 - ,simpleTitleCaseMapping:0x12316 - }, - { code:0x12317 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12317 - ,simpleLowerCaseMapping:0x12317 - ,simpleTitleCaseMapping:0x12317 - }, - { code:0x12318 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12318 - ,simpleLowerCaseMapping:0x12318 - ,simpleTitleCaseMapping:0x12318 - }, - { code:0x12319 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12319 - ,simpleLowerCaseMapping:0x12319 - ,simpleTitleCaseMapping:0x12319 - }, - { code:0x1231A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231A - ,simpleLowerCaseMapping:0x1231A - ,simpleTitleCaseMapping:0x1231A - }, - { code:0x1231B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231B - ,simpleLowerCaseMapping:0x1231B - ,simpleTitleCaseMapping:0x1231B - }, - { code:0x1231C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231C - ,simpleLowerCaseMapping:0x1231C - ,simpleTitleCaseMapping:0x1231C - }, - { code:0x1231D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231D - ,simpleLowerCaseMapping:0x1231D - ,simpleTitleCaseMapping:0x1231D - }, - { code:0x1231E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231E - ,simpleLowerCaseMapping:0x1231E - ,simpleTitleCaseMapping:0x1231E - }, - { code:0x1231F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1231F - ,simpleLowerCaseMapping:0x1231F - ,simpleTitleCaseMapping:0x1231F - }, - { code:0x12320 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12320 - ,simpleLowerCaseMapping:0x12320 - ,simpleTitleCaseMapping:0x12320 - }, - { code:0x12321 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12321 - ,simpleLowerCaseMapping:0x12321 - ,simpleTitleCaseMapping:0x12321 - }, - { code:0x12322 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12322 - ,simpleLowerCaseMapping:0x12322 - ,simpleTitleCaseMapping:0x12322 - }, - { code:0x12323 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12323 - ,simpleLowerCaseMapping:0x12323 - ,simpleTitleCaseMapping:0x12323 - }, - { code:0x12324 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12324 - ,simpleLowerCaseMapping:0x12324 - ,simpleTitleCaseMapping:0x12324 - }, - { code:0x12325 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12325 - ,simpleLowerCaseMapping:0x12325 - ,simpleTitleCaseMapping:0x12325 - }, - { code:0x12326 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12326 - ,simpleLowerCaseMapping:0x12326 - ,simpleTitleCaseMapping:0x12326 - }, - { code:0x12327 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12327 - ,simpleLowerCaseMapping:0x12327 - ,simpleTitleCaseMapping:0x12327 - }, - { code:0x12328 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12328 - ,simpleLowerCaseMapping:0x12328 - ,simpleTitleCaseMapping:0x12328 - }, - { code:0x12329 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12329 - ,simpleLowerCaseMapping:0x12329 - ,simpleTitleCaseMapping:0x12329 - }, - { code:0x1232A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232A - ,simpleLowerCaseMapping:0x1232A - ,simpleTitleCaseMapping:0x1232A - }, - { code:0x1232B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232B - ,simpleLowerCaseMapping:0x1232B - ,simpleTitleCaseMapping:0x1232B - }, - { code:0x1232C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232C - ,simpleLowerCaseMapping:0x1232C - ,simpleTitleCaseMapping:0x1232C - }, - { code:0x1232D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232D - ,simpleLowerCaseMapping:0x1232D - ,simpleTitleCaseMapping:0x1232D - }, - { code:0x1232E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232E - ,simpleLowerCaseMapping:0x1232E - ,simpleTitleCaseMapping:0x1232E - }, - { code:0x1232F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1232F - ,simpleLowerCaseMapping:0x1232F - ,simpleTitleCaseMapping:0x1232F - }, - { code:0x12330 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12330 - ,simpleLowerCaseMapping:0x12330 - ,simpleTitleCaseMapping:0x12330 - }, - { code:0x12331 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12331 - ,simpleLowerCaseMapping:0x12331 - ,simpleTitleCaseMapping:0x12331 - }, - { code:0x12332 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12332 - ,simpleLowerCaseMapping:0x12332 - ,simpleTitleCaseMapping:0x12332 - }, - { code:0x12333 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12333 - ,simpleLowerCaseMapping:0x12333 - ,simpleTitleCaseMapping:0x12333 - }, - { code:0x12334 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12334 - ,simpleLowerCaseMapping:0x12334 - ,simpleTitleCaseMapping:0x12334 - }, - { code:0x12335 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12335 - ,simpleLowerCaseMapping:0x12335 - ,simpleTitleCaseMapping:0x12335 - }, - { code:0x12336 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12336 - ,simpleLowerCaseMapping:0x12336 - ,simpleTitleCaseMapping:0x12336 - }, - { code:0x12337 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12337 - ,simpleLowerCaseMapping:0x12337 - ,simpleTitleCaseMapping:0x12337 - }, - { code:0x12338 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12338 - ,simpleLowerCaseMapping:0x12338 - ,simpleTitleCaseMapping:0x12338 - }, - { code:0x12339 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12339 - ,simpleLowerCaseMapping:0x12339 - ,simpleTitleCaseMapping:0x12339 - }, - { code:0x1233A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233A - ,simpleLowerCaseMapping:0x1233A - ,simpleTitleCaseMapping:0x1233A - }, - { code:0x1233B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233B - ,simpleLowerCaseMapping:0x1233B - ,simpleTitleCaseMapping:0x1233B - }, - { code:0x1233C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233C - ,simpleLowerCaseMapping:0x1233C - ,simpleTitleCaseMapping:0x1233C - }, - { code:0x1233D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233D - ,simpleLowerCaseMapping:0x1233D - ,simpleTitleCaseMapping:0x1233D - }, - { code:0x1233E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233E - ,simpleLowerCaseMapping:0x1233E - ,simpleTitleCaseMapping:0x1233E - }, - { code:0x1233F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1233F - ,simpleLowerCaseMapping:0x1233F - ,simpleTitleCaseMapping:0x1233F - }, - { code:0x12340 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12340 - ,simpleLowerCaseMapping:0x12340 - ,simpleTitleCaseMapping:0x12340 - }, - { code:0x12341 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12341 - ,simpleLowerCaseMapping:0x12341 - ,simpleTitleCaseMapping:0x12341 - }, - { code:0x12342 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12342 - ,simpleLowerCaseMapping:0x12342 - ,simpleTitleCaseMapping:0x12342 - }, - { code:0x12343 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12343 - ,simpleLowerCaseMapping:0x12343 - ,simpleTitleCaseMapping:0x12343 - }, - { code:0x12344 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12344 - ,simpleLowerCaseMapping:0x12344 - ,simpleTitleCaseMapping:0x12344 - }, - { code:0x12345 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12345 - ,simpleLowerCaseMapping:0x12345 - ,simpleTitleCaseMapping:0x12345 - }, - { code:0x12346 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12346 - ,simpleLowerCaseMapping:0x12346 - ,simpleTitleCaseMapping:0x12346 - }, - { code:0x12347 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12347 - ,simpleLowerCaseMapping:0x12347 - ,simpleTitleCaseMapping:0x12347 - }, - { code:0x12348 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12348 - ,simpleLowerCaseMapping:0x12348 - ,simpleTitleCaseMapping:0x12348 - }, - { code:0x12349 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12349 - ,simpleLowerCaseMapping:0x12349 - ,simpleTitleCaseMapping:0x12349 - }, - { code:0x1234A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234A - ,simpleLowerCaseMapping:0x1234A - ,simpleTitleCaseMapping:0x1234A - }, - { code:0x1234B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234B - ,simpleLowerCaseMapping:0x1234B - ,simpleTitleCaseMapping:0x1234B - }, - { code:0x1234C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234C - ,simpleLowerCaseMapping:0x1234C - ,simpleTitleCaseMapping:0x1234C - }, - { code:0x1234D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234D - ,simpleLowerCaseMapping:0x1234D - ,simpleTitleCaseMapping:0x1234D - }, - { code:0x1234E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234E - ,simpleLowerCaseMapping:0x1234E - ,simpleTitleCaseMapping:0x1234E - }, - { code:0x1234F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1234F - ,simpleLowerCaseMapping:0x1234F - ,simpleTitleCaseMapping:0x1234F - }, - { code:0x12350 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12350 - ,simpleLowerCaseMapping:0x12350 - ,simpleTitleCaseMapping:0x12350 - }, - { code:0x12351 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12351 - ,simpleLowerCaseMapping:0x12351 - ,simpleTitleCaseMapping:0x12351 - }, - { code:0x12352 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12352 - ,simpleLowerCaseMapping:0x12352 - ,simpleTitleCaseMapping:0x12352 - }, - { code:0x12353 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12353 - ,simpleLowerCaseMapping:0x12353 - ,simpleTitleCaseMapping:0x12353 - }, - { code:0x12354 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12354 - ,simpleLowerCaseMapping:0x12354 - ,simpleTitleCaseMapping:0x12354 - }, - { code:0x12355 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12355 - ,simpleLowerCaseMapping:0x12355 - ,simpleTitleCaseMapping:0x12355 - }, - { code:0x12356 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12356 - ,simpleLowerCaseMapping:0x12356 - ,simpleTitleCaseMapping:0x12356 - }, - { code:0x12357 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12357 - ,simpleLowerCaseMapping:0x12357 - ,simpleTitleCaseMapping:0x12357 - }, - { code:0x12358 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12358 - ,simpleLowerCaseMapping:0x12358 - ,simpleTitleCaseMapping:0x12358 - }, - { code:0x12359 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12359 - ,simpleLowerCaseMapping:0x12359 - ,simpleTitleCaseMapping:0x12359 - }, - { code:0x1235A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235A - ,simpleLowerCaseMapping:0x1235A - ,simpleTitleCaseMapping:0x1235A - }, - { code:0x1235B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235B - ,simpleLowerCaseMapping:0x1235B - ,simpleTitleCaseMapping:0x1235B - }, - { code:0x1235C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235C - ,simpleLowerCaseMapping:0x1235C - ,simpleTitleCaseMapping:0x1235C - }, - { code:0x1235D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235D - ,simpleLowerCaseMapping:0x1235D - ,simpleTitleCaseMapping:0x1235D - }, - { code:0x1235E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235E - ,simpleLowerCaseMapping:0x1235E - ,simpleTitleCaseMapping:0x1235E - }, - { code:0x1235F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1235F - ,simpleLowerCaseMapping:0x1235F - ,simpleTitleCaseMapping:0x1235F - }, - { code:0x12360 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12360 - ,simpleLowerCaseMapping:0x12360 - ,simpleTitleCaseMapping:0x12360 - }, - { code:0x12361 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12361 - ,simpleLowerCaseMapping:0x12361 - ,simpleTitleCaseMapping:0x12361 - }, - { code:0x12362 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12362 - ,simpleLowerCaseMapping:0x12362 - ,simpleTitleCaseMapping:0x12362 - }, - { code:0x12363 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12363 - ,simpleLowerCaseMapping:0x12363 - ,simpleTitleCaseMapping:0x12363 - }, - { code:0x12364 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12364 - ,simpleLowerCaseMapping:0x12364 - ,simpleTitleCaseMapping:0x12364 - }, - { code:0x12365 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12365 - ,simpleLowerCaseMapping:0x12365 - ,simpleTitleCaseMapping:0x12365 - }, - { code:0x12366 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12366 - ,simpleLowerCaseMapping:0x12366 - ,simpleTitleCaseMapping:0x12366 - }, - { code:0x12367 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12367 - ,simpleLowerCaseMapping:0x12367 - ,simpleTitleCaseMapping:0x12367 - }, - { code:0x12368 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12368 - ,simpleLowerCaseMapping:0x12368 - ,simpleTitleCaseMapping:0x12368 - }, - { code:0x12369 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x12369 - ,simpleLowerCaseMapping:0x12369 - ,simpleTitleCaseMapping:0x12369 - }, - { code:0x1236A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236A - ,simpleLowerCaseMapping:0x1236A - ,simpleTitleCaseMapping:0x1236A - }, - { code:0x1236B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236B - ,simpleLowerCaseMapping:0x1236B - ,simpleTitleCaseMapping:0x1236B - }, - { code:0x1236C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236C - ,simpleLowerCaseMapping:0x1236C - ,simpleTitleCaseMapping:0x1236C - }, - { code:0x1236D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236D - ,simpleLowerCaseMapping:0x1236D - ,simpleTitleCaseMapping:0x1236D - }, - { code:0x1236E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x1236E - ,simpleLowerCaseMapping:0x1236E - ,simpleTitleCaseMapping:0x1236E - }, - { code:0x12400 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12400 - ,simpleLowerCaseMapping:0x12400 - ,simpleTitleCaseMapping:0x12400 - }, - { code:0x12401 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12401 - ,simpleLowerCaseMapping:0x12401 - ,simpleTitleCaseMapping:0x12401 - }, - { code:0x12402 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12402 - ,simpleLowerCaseMapping:0x12402 - ,simpleTitleCaseMapping:0x12402 - }, - { code:0x12403 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12403 - ,simpleLowerCaseMapping:0x12403 - ,simpleTitleCaseMapping:0x12403 - }, - { code:0x12404 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12404 - ,simpleLowerCaseMapping:0x12404 - ,simpleTitleCaseMapping:0x12404 - }, - { code:0x12405 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12405 - ,simpleLowerCaseMapping:0x12405 - ,simpleTitleCaseMapping:0x12405 - }, - { code:0x12406 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12406 - ,simpleLowerCaseMapping:0x12406 - ,simpleTitleCaseMapping:0x12406 - }, - { code:0x12407 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12407 - ,simpleLowerCaseMapping:0x12407 - ,simpleTitleCaseMapping:0x12407 - }, - { code:0x12408 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12408 - ,simpleLowerCaseMapping:0x12408 - ,simpleTitleCaseMapping:0x12408 - }, - { code:0x12409 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12409 - ,simpleLowerCaseMapping:0x12409 - ,simpleTitleCaseMapping:0x12409 - }, - { code:0x1240A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240A - ,simpleLowerCaseMapping:0x1240A - ,simpleTitleCaseMapping:0x1240A - }, - { code:0x1240B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240B - ,simpleLowerCaseMapping:0x1240B - ,simpleTitleCaseMapping:0x1240B - }, - { code:0x1240C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240C - ,simpleLowerCaseMapping:0x1240C - ,simpleTitleCaseMapping:0x1240C - }, - { code:0x1240D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240D - ,simpleLowerCaseMapping:0x1240D - ,simpleTitleCaseMapping:0x1240D - }, - { code:0x1240E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240E - ,simpleLowerCaseMapping:0x1240E - ,simpleTitleCaseMapping:0x1240E - }, - { code:0x1240F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1240F - ,simpleLowerCaseMapping:0x1240F - ,simpleTitleCaseMapping:0x1240F - }, - { code:0x12410 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12410 - ,simpleLowerCaseMapping:0x12410 - ,simpleTitleCaseMapping:0x12410 - }, - { code:0x12411 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12411 - ,simpleLowerCaseMapping:0x12411 - ,simpleTitleCaseMapping:0x12411 - }, - { code:0x12412 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12412 - ,simpleLowerCaseMapping:0x12412 - ,simpleTitleCaseMapping:0x12412 - }, - { code:0x12413 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12413 - ,simpleLowerCaseMapping:0x12413 - ,simpleTitleCaseMapping:0x12413 - }, - { code:0x12414 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12414 - ,simpleLowerCaseMapping:0x12414 - ,simpleTitleCaseMapping:0x12414 - }, - { code:0x12415 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12415 - ,simpleLowerCaseMapping:0x12415 - ,simpleTitleCaseMapping:0x12415 - }, - { code:0x12416 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12416 - ,simpleLowerCaseMapping:0x12416 - ,simpleTitleCaseMapping:0x12416 - }, - { code:0x12417 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12417 - ,simpleLowerCaseMapping:0x12417 - ,simpleTitleCaseMapping:0x12417 - }, - { code:0x12418 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12418 - ,simpleLowerCaseMapping:0x12418 - ,simpleTitleCaseMapping:0x12418 - }, - { code:0x12419 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12419 - ,simpleLowerCaseMapping:0x12419 - ,simpleTitleCaseMapping:0x12419 - }, - { code:0x1241A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241A - ,simpleLowerCaseMapping:0x1241A - ,simpleTitleCaseMapping:0x1241A - }, - { code:0x1241B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241B - ,simpleLowerCaseMapping:0x1241B - ,simpleTitleCaseMapping:0x1241B - }, - { code:0x1241C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241C - ,simpleLowerCaseMapping:0x1241C - ,simpleTitleCaseMapping:0x1241C - }, - { code:0x1241D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241D - ,simpleLowerCaseMapping:0x1241D - ,simpleTitleCaseMapping:0x1241D - }, - { code:0x1241E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241E - ,simpleLowerCaseMapping:0x1241E - ,simpleTitleCaseMapping:0x1241E - }, - { code:0x1241F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1241F - ,simpleLowerCaseMapping:0x1241F - ,simpleTitleCaseMapping:0x1241F - }, - { code:0x12420 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12420 - ,simpleLowerCaseMapping:0x12420 - ,simpleTitleCaseMapping:0x12420 - }, - { code:0x12421 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12421 - ,simpleLowerCaseMapping:0x12421 - ,simpleTitleCaseMapping:0x12421 - }, - { code:0x12422 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12422 - ,simpleLowerCaseMapping:0x12422 - ,simpleTitleCaseMapping:0x12422 - }, - { code:0x12423 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12423 - ,simpleLowerCaseMapping:0x12423 - ,simpleTitleCaseMapping:0x12423 - }, - { code:0x12424 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12424 - ,simpleLowerCaseMapping:0x12424 - ,simpleTitleCaseMapping:0x12424 - }, - { code:0x12425 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12425 - ,simpleLowerCaseMapping:0x12425 - ,simpleTitleCaseMapping:0x12425 - }, - { code:0x12426 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12426 - ,simpleLowerCaseMapping:0x12426 - ,simpleTitleCaseMapping:0x12426 - }, - { code:0x12427 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12427 - ,simpleLowerCaseMapping:0x12427 - ,simpleTitleCaseMapping:0x12427 - }, - { code:0x12428 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12428 - ,simpleLowerCaseMapping:0x12428 - ,simpleTitleCaseMapping:0x12428 - }, - { code:0x12429 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12429 - ,simpleLowerCaseMapping:0x12429 - ,simpleTitleCaseMapping:0x12429 - }, - { code:0x1242A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242A - ,simpleLowerCaseMapping:0x1242A - ,simpleTitleCaseMapping:0x1242A - }, - { code:0x1242B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242B - ,simpleLowerCaseMapping:0x1242B - ,simpleTitleCaseMapping:0x1242B - }, - { code:0x1242C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242C - ,simpleLowerCaseMapping:0x1242C - ,simpleTitleCaseMapping:0x1242C - }, - { code:0x1242D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242D - ,simpleLowerCaseMapping:0x1242D - ,simpleTitleCaseMapping:0x1242D - }, - { code:0x1242E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242E - ,simpleLowerCaseMapping:0x1242E - ,simpleTitleCaseMapping:0x1242E - }, - { code:0x1242F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1242F - ,simpleLowerCaseMapping:0x1242F - ,simpleTitleCaseMapping:0x1242F - }, - { code:0x12430 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12430 - ,simpleLowerCaseMapping:0x12430 - ,simpleTitleCaseMapping:0x12430 - }, - { code:0x12431 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12431 - ,simpleLowerCaseMapping:0x12431 - ,simpleTitleCaseMapping:0x12431 - }, - { code:0x12432 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12432 - ,simpleLowerCaseMapping:0x12432 - ,simpleTitleCaseMapping:0x12432 - }, - { code:0x12433 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12433 - ,simpleLowerCaseMapping:0x12433 - ,simpleTitleCaseMapping:0x12433 - }, - { code:0x12434 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12434 - ,simpleLowerCaseMapping:0x12434 - ,simpleTitleCaseMapping:0x12434 - }, - { code:0x12435 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12435 - ,simpleLowerCaseMapping:0x12435 - ,simpleTitleCaseMapping:0x12435 - }, - { code:0x12436 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12436 - ,simpleLowerCaseMapping:0x12436 - ,simpleTitleCaseMapping:0x12436 - }, - { code:0x12437 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12437 - ,simpleLowerCaseMapping:0x12437 - ,simpleTitleCaseMapping:0x12437 - }, - { code:0x12438 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12438 - ,simpleLowerCaseMapping:0x12438 - ,simpleTitleCaseMapping:0x12438 - }, - { code:0x12439 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12439 - ,simpleLowerCaseMapping:0x12439 - ,simpleTitleCaseMapping:0x12439 - }, - { code:0x1243A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243A - ,simpleLowerCaseMapping:0x1243A - ,simpleTitleCaseMapping:0x1243A - }, - { code:0x1243B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243B - ,simpleLowerCaseMapping:0x1243B - ,simpleTitleCaseMapping:0x1243B - }, - { code:0x1243C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243C - ,simpleLowerCaseMapping:0x1243C - ,simpleTitleCaseMapping:0x1243C - }, - { code:0x1243D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243D - ,simpleLowerCaseMapping:0x1243D - ,simpleTitleCaseMapping:0x1243D - }, - { code:0x1243E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243E - ,simpleLowerCaseMapping:0x1243E - ,simpleTitleCaseMapping:0x1243E - }, - { code:0x1243F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1243F - ,simpleLowerCaseMapping:0x1243F - ,simpleTitleCaseMapping:0x1243F - }, - { code:0x12440 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12440 - ,simpleLowerCaseMapping:0x12440 - ,simpleTitleCaseMapping:0x12440 - }, - { code:0x12441 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12441 - ,simpleLowerCaseMapping:0x12441 - ,simpleTitleCaseMapping:0x12441 - }, - { code:0x12442 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12442 - ,simpleLowerCaseMapping:0x12442 - ,simpleTitleCaseMapping:0x12442 - }, - { code:0x12443 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12443 - ,simpleLowerCaseMapping:0x12443 - ,simpleTitleCaseMapping:0x12443 - }, - { code:0x12444 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12444 - ,simpleLowerCaseMapping:0x12444 - ,simpleTitleCaseMapping:0x12444 - }, - { code:0x12445 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12445 - ,simpleLowerCaseMapping:0x12445 - ,simpleTitleCaseMapping:0x12445 - }, - { code:0x12446 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12446 - ,simpleLowerCaseMapping:0x12446 - ,simpleTitleCaseMapping:0x12446 - }, - { code:0x12447 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12447 - ,simpleLowerCaseMapping:0x12447 - ,simpleTitleCaseMapping:0x12447 - }, - { code:0x12448 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12448 - ,simpleLowerCaseMapping:0x12448 - ,simpleTitleCaseMapping:0x12448 - }, - { code:0x12449 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12449 - ,simpleLowerCaseMapping:0x12449 - ,simpleTitleCaseMapping:0x12449 - }, - { code:0x1244A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244A - ,simpleLowerCaseMapping:0x1244A - ,simpleTitleCaseMapping:0x1244A - }, - { code:0x1244B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244B - ,simpleLowerCaseMapping:0x1244B - ,simpleTitleCaseMapping:0x1244B - }, - { code:0x1244C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244C - ,simpleLowerCaseMapping:0x1244C - ,simpleTitleCaseMapping:0x1244C - }, - { code:0x1244D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244D - ,simpleLowerCaseMapping:0x1244D - ,simpleTitleCaseMapping:0x1244D - }, - { code:0x1244E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244E - ,simpleLowerCaseMapping:0x1244E - ,simpleTitleCaseMapping:0x1244E - }, - { code:0x1244F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1244F - ,simpleLowerCaseMapping:0x1244F - ,simpleTitleCaseMapping:0x1244F - }, - { code:0x12450 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12450 - ,simpleLowerCaseMapping:0x12450 - ,simpleTitleCaseMapping:0x12450 - }, - { code:0x12451 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12451 - ,simpleLowerCaseMapping:0x12451 - ,simpleTitleCaseMapping:0x12451 - }, - { code:0x12452 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12452 - ,simpleLowerCaseMapping:0x12452 - ,simpleTitleCaseMapping:0x12452 - }, - { code:0x12453 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12453 - ,simpleLowerCaseMapping:0x12453 - ,simpleTitleCaseMapping:0x12453 - }, - { code:0x12454 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12454 - ,simpleLowerCaseMapping:0x12454 - ,simpleTitleCaseMapping:0x12454 - }, - { code:0x12455 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12455 - ,simpleLowerCaseMapping:0x12455 - ,simpleTitleCaseMapping:0x12455 - }, - { code:0x12456 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12456 - ,simpleLowerCaseMapping:0x12456 - ,simpleTitleCaseMapping:0x12456 - }, - { code:0x12457 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12457 - ,simpleLowerCaseMapping:0x12457 - ,simpleTitleCaseMapping:0x12457 - }, - { code:0x12458 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12458 - ,simpleLowerCaseMapping:0x12458 - ,simpleTitleCaseMapping:0x12458 - }, - { code:0x12459 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12459 - ,simpleLowerCaseMapping:0x12459 - ,simpleTitleCaseMapping:0x12459 - }, - { code:0x1245A - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245A - ,simpleLowerCaseMapping:0x1245A - ,simpleTitleCaseMapping:0x1245A - }, - { code:0x1245B - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245B - ,simpleLowerCaseMapping:0x1245B - ,simpleTitleCaseMapping:0x1245B - }, - { code:0x1245C - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245C - ,simpleLowerCaseMapping:0x1245C - ,simpleTitleCaseMapping:0x1245C - }, - { code:0x1245D - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245D - ,simpleLowerCaseMapping:0x1245D - ,simpleTitleCaseMapping:0x1245D - }, - { code:0x1245E - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245E - ,simpleLowerCaseMapping:0x1245E - ,simpleTitleCaseMapping:0x1245E - }, - { code:0x1245F - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x1245F - ,simpleLowerCaseMapping:0x1245F - ,simpleTitleCaseMapping:0x1245F - }, - { code:0x12460 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12460 - ,simpleLowerCaseMapping:0x12460 - ,simpleTitleCaseMapping:0x12460 - }, - { code:0x12461 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12461 - ,simpleLowerCaseMapping:0x12461 - ,simpleTitleCaseMapping:0x12461 - }, - { code:0x12462 - ,generalCategory:UnicodeData.GeneralCategory.Nl - ,simpleUpperCaseMapping:0x12462 - ,simpleLowerCaseMapping:0x12462 - ,simpleTitleCaseMapping:0x12462 - }, - { code:0x12470 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x12470 - ,simpleLowerCaseMapping:0x12470 - ,simpleTitleCaseMapping:0x12470 - }, - { code:0x12471 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x12471 - ,simpleLowerCaseMapping:0x12471 - ,simpleTitleCaseMapping:0x12471 - }, - { code:0x12472 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x12472 - ,simpleLowerCaseMapping:0x12472 - ,simpleTitleCaseMapping:0x12472 - }, - { code:0x12473 - ,generalCategory:UnicodeData.GeneralCategory.Po - ,simpleUpperCaseMapping:0x12473 - ,simpleLowerCaseMapping:0x12473 - ,simpleTitleCaseMapping:0x12473 - }, - { code:0x1D000 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D000 - ,simpleLowerCaseMapping:0x1D000 - ,simpleTitleCaseMapping:0x1D000 - }, - { code:0x1D001 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D001 - ,simpleLowerCaseMapping:0x1D001 - ,simpleTitleCaseMapping:0x1D001 - }, - { code:0x1D002 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D002 - ,simpleLowerCaseMapping:0x1D002 - ,simpleTitleCaseMapping:0x1D002 - }, - { code:0x1D003 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D003 - ,simpleLowerCaseMapping:0x1D003 - ,simpleTitleCaseMapping:0x1D003 - }, - { code:0x1D004 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D004 - ,simpleLowerCaseMapping:0x1D004 - ,simpleTitleCaseMapping:0x1D004 - }, - { code:0x1D005 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D005 - ,simpleLowerCaseMapping:0x1D005 - ,simpleTitleCaseMapping:0x1D005 - }, - { code:0x1D006 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D006 - ,simpleLowerCaseMapping:0x1D006 - ,simpleTitleCaseMapping:0x1D006 - }, - { code:0x1D007 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D007 - ,simpleLowerCaseMapping:0x1D007 - ,simpleTitleCaseMapping:0x1D007 - }, - { code:0x1D008 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D008 - ,simpleLowerCaseMapping:0x1D008 - ,simpleTitleCaseMapping:0x1D008 - }, - { code:0x1D009 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D009 - ,simpleLowerCaseMapping:0x1D009 - ,simpleTitleCaseMapping:0x1D009 - }, - { code:0x1D00A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00A - ,simpleLowerCaseMapping:0x1D00A - ,simpleTitleCaseMapping:0x1D00A - }, - { code:0x1D00B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00B - ,simpleLowerCaseMapping:0x1D00B - ,simpleTitleCaseMapping:0x1D00B - }, - { code:0x1D00C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00C - ,simpleLowerCaseMapping:0x1D00C - ,simpleTitleCaseMapping:0x1D00C - }, - { code:0x1D00D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00D - ,simpleLowerCaseMapping:0x1D00D - ,simpleTitleCaseMapping:0x1D00D - }, - { code:0x1D00E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00E - ,simpleLowerCaseMapping:0x1D00E - ,simpleTitleCaseMapping:0x1D00E - }, - { code:0x1D00F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D00F - ,simpleLowerCaseMapping:0x1D00F - ,simpleTitleCaseMapping:0x1D00F - }, - { code:0x1D010 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D010 - ,simpleLowerCaseMapping:0x1D010 - ,simpleTitleCaseMapping:0x1D010 - }, - { code:0x1D011 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D011 - ,simpleLowerCaseMapping:0x1D011 - ,simpleTitleCaseMapping:0x1D011 - }, - { code:0x1D012 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D012 - ,simpleLowerCaseMapping:0x1D012 - ,simpleTitleCaseMapping:0x1D012 - }, - { code:0x1D013 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D013 - ,simpleLowerCaseMapping:0x1D013 - ,simpleTitleCaseMapping:0x1D013 - }, - { code:0x1D014 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D014 - ,simpleLowerCaseMapping:0x1D014 - ,simpleTitleCaseMapping:0x1D014 - }, - { code:0x1D015 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D015 - ,simpleLowerCaseMapping:0x1D015 - ,simpleTitleCaseMapping:0x1D015 - }, - { code:0x1D016 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D016 - ,simpleLowerCaseMapping:0x1D016 - ,simpleTitleCaseMapping:0x1D016 - }, - { code:0x1D017 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D017 - ,simpleLowerCaseMapping:0x1D017 - ,simpleTitleCaseMapping:0x1D017 - }, - { code:0x1D018 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D018 - ,simpleLowerCaseMapping:0x1D018 - ,simpleTitleCaseMapping:0x1D018 - }, - { code:0x1D019 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D019 - ,simpleLowerCaseMapping:0x1D019 - ,simpleTitleCaseMapping:0x1D019 - }, - { code:0x1D01A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01A - ,simpleLowerCaseMapping:0x1D01A - ,simpleTitleCaseMapping:0x1D01A - }, - { code:0x1D01B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01B - ,simpleLowerCaseMapping:0x1D01B - ,simpleTitleCaseMapping:0x1D01B - }, - { code:0x1D01C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01C - ,simpleLowerCaseMapping:0x1D01C - ,simpleTitleCaseMapping:0x1D01C - }, - { code:0x1D01D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01D - ,simpleLowerCaseMapping:0x1D01D - ,simpleTitleCaseMapping:0x1D01D - }, - { code:0x1D01E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01E - ,simpleLowerCaseMapping:0x1D01E - ,simpleTitleCaseMapping:0x1D01E - }, - { code:0x1D01F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D01F - ,simpleLowerCaseMapping:0x1D01F - ,simpleTitleCaseMapping:0x1D01F - }, - { code:0x1D020 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D020 - ,simpleLowerCaseMapping:0x1D020 - ,simpleTitleCaseMapping:0x1D020 - }, - { code:0x1D021 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D021 - ,simpleLowerCaseMapping:0x1D021 - ,simpleTitleCaseMapping:0x1D021 - }, - { code:0x1D022 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D022 - ,simpleLowerCaseMapping:0x1D022 - ,simpleTitleCaseMapping:0x1D022 - }, - { code:0x1D023 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D023 - ,simpleLowerCaseMapping:0x1D023 - ,simpleTitleCaseMapping:0x1D023 - }, - { code:0x1D024 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D024 - ,simpleLowerCaseMapping:0x1D024 - ,simpleTitleCaseMapping:0x1D024 - }, - { code:0x1D025 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D025 - ,simpleLowerCaseMapping:0x1D025 - ,simpleTitleCaseMapping:0x1D025 - }, - { code:0x1D026 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D026 - ,simpleLowerCaseMapping:0x1D026 - ,simpleTitleCaseMapping:0x1D026 - }, - { code:0x1D027 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D027 - ,simpleLowerCaseMapping:0x1D027 - ,simpleTitleCaseMapping:0x1D027 - }, - { code:0x1D028 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D028 - ,simpleLowerCaseMapping:0x1D028 - ,simpleTitleCaseMapping:0x1D028 - }, - { code:0x1D029 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D029 - ,simpleLowerCaseMapping:0x1D029 - ,simpleTitleCaseMapping:0x1D029 - }, - { code:0x1D02A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02A - ,simpleLowerCaseMapping:0x1D02A - ,simpleTitleCaseMapping:0x1D02A - }, - { code:0x1D02B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02B - ,simpleLowerCaseMapping:0x1D02B - ,simpleTitleCaseMapping:0x1D02B - }, - { code:0x1D02C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02C - ,simpleLowerCaseMapping:0x1D02C - ,simpleTitleCaseMapping:0x1D02C - }, - { code:0x1D02D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02D - ,simpleLowerCaseMapping:0x1D02D - ,simpleTitleCaseMapping:0x1D02D - }, - { code:0x1D02E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02E - ,simpleLowerCaseMapping:0x1D02E - ,simpleTitleCaseMapping:0x1D02E - }, - { code:0x1D02F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D02F - ,simpleLowerCaseMapping:0x1D02F - ,simpleTitleCaseMapping:0x1D02F - }, - { code:0x1D030 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D030 - ,simpleLowerCaseMapping:0x1D030 - ,simpleTitleCaseMapping:0x1D030 - }, - { code:0x1D031 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D031 - ,simpleLowerCaseMapping:0x1D031 - ,simpleTitleCaseMapping:0x1D031 - }, - { code:0x1D032 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D032 - ,simpleLowerCaseMapping:0x1D032 - ,simpleTitleCaseMapping:0x1D032 - }, - { code:0x1D033 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D033 - ,simpleLowerCaseMapping:0x1D033 - ,simpleTitleCaseMapping:0x1D033 - }, - { code:0x1D034 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D034 - ,simpleLowerCaseMapping:0x1D034 - ,simpleTitleCaseMapping:0x1D034 - }, - { code:0x1D035 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D035 - ,simpleLowerCaseMapping:0x1D035 - ,simpleTitleCaseMapping:0x1D035 - }, - { code:0x1D036 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D036 - ,simpleLowerCaseMapping:0x1D036 - ,simpleTitleCaseMapping:0x1D036 - }, - { code:0x1D037 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D037 - ,simpleLowerCaseMapping:0x1D037 - ,simpleTitleCaseMapping:0x1D037 - }, - { code:0x1D038 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D038 - ,simpleLowerCaseMapping:0x1D038 - ,simpleTitleCaseMapping:0x1D038 - }, - { code:0x1D039 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D039 - ,simpleLowerCaseMapping:0x1D039 - ,simpleTitleCaseMapping:0x1D039 - }, - { code:0x1D03A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03A - ,simpleLowerCaseMapping:0x1D03A - ,simpleTitleCaseMapping:0x1D03A - }, - { code:0x1D03B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03B - ,simpleLowerCaseMapping:0x1D03B - ,simpleTitleCaseMapping:0x1D03B - }, - { code:0x1D03C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03C - ,simpleLowerCaseMapping:0x1D03C - ,simpleTitleCaseMapping:0x1D03C - }, - { code:0x1D03D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03D - ,simpleLowerCaseMapping:0x1D03D - ,simpleTitleCaseMapping:0x1D03D - }, - { code:0x1D03E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03E - ,simpleLowerCaseMapping:0x1D03E - ,simpleTitleCaseMapping:0x1D03E - }, - { code:0x1D03F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D03F - ,simpleLowerCaseMapping:0x1D03F - ,simpleTitleCaseMapping:0x1D03F - }, - { code:0x1D040 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D040 - ,simpleLowerCaseMapping:0x1D040 - ,simpleTitleCaseMapping:0x1D040 - }, - { code:0x1D041 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D041 - ,simpleLowerCaseMapping:0x1D041 - ,simpleTitleCaseMapping:0x1D041 - }, - { code:0x1D042 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D042 - ,simpleLowerCaseMapping:0x1D042 - ,simpleTitleCaseMapping:0x1D042 - }, - { code:0x1D043 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D043 - ,simpleLowerCaseMapping:0x1D043 - ,simpleTitleCaseMapping:0x1D043 - }, - { code:0x1D044 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D044 - ,simpleLowerCaseMapping:0x1D044 - ,simpleTitleCaseMapping:0x1D044 - }, - { code:0x1D045 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D045 - ,simpleLowerCaseMapping:0x1D045 - ,simpleTitleCaseMapping:0x1D045 - }, - { code:0x1D046 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D046 - ,simpleLowerCaseMapping:0x1D046 - ,simpleTitleCaseMapping:0x1D046 - }, - { code:0x1D047 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D047 - ,simpleLowerCaseMapping:0x1D047 - ,simpleTitleCaseMapping:0x1D047 - }, - { code:0x1D048 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D048 - ,simpleLowerCaseMapping:0x1D048 - ,simpleTitleCaseMapping:0x1D048 - }, - { code:0x1D049 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D049 - ,simpleLowerCaseMapping:0x1D049 - ,simpleTitleCaseMapping:0x1D049 - }, - { code:0x1D04A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04A - ,simpleLowerCaseMapping:0x1D04A - ,simpleTitleCaseMapping:0x1D04A - }, - { code:0x1D04B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04B - ,simpleLowerCaseMapping:0x1D04B - ,simpleTitleCaseMapping:0x1D04B - }, - { code:0x1D04C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04C - ,simpleLowerCaseMapping:0x1D04C - ,simpleTitleCaseMapping:0x1D04C - }, - { code:0x1D04D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04D - ,simpleLowerCaseMapping:0x1D04D - ,simpleTitleCaseMapping:0x1D04D - }, - { code:0x1D04E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04E - ,simpleLowerCaseMapping:0x1D04E - ,simpleTitleCaseMapping:0x1D04E - }, - { code:0x1D04F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D04F - ,simpleLowerCaseMapping:0x1D04F - ,simpleTitleCaseMapping:0x1D04F - }, - { code:0x1D050 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D050 - ,simpleLowerCaseMapping:0x1D050 - ,simpleTitleCaseMapping:0x1D050 - }, - { code:0x1D051 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D051 - ,simpleLowerCaseMapping:0x1D051 - ,simpleTitleCaseMapping:0x1D051 - }, - { code:0x1D052 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D052 - ,simpleLowerCaseMapping:0x1D052 - ,simpleTitleCaseMapping:0x1D052 - }, - { code:0x1D053 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D053 - ,simpleLowerCaseMapping:0x1D053 - ,simpleTitleCaseMapping:0x1D053 - }, - { code:0x1D054 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D054 - ,simpleLowerCaseMapping:0x1D054 - ,simpleTitleCaseMapping:0x1D054 - }, - { code:0x1D055 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D055 - ,simpleLowerCaseMapping:0x1D055 - ,simpleTitleCaseMapping:0x1D055 - }, - { code:0x1D056 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D056 - ,simpleLowerCaseMapping:0x1D056 - ,simpleTitleCaseMapping:0x1D056 - }, - { code:0x1D057 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D057 - ,simpleLowerCaseMapping:0x1D057 - ,simpleTitleCaseMapping:0x1D057 - }, - { code:0x1D058 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D058 - ,simpleLowerCaseMapping:0x1D058 - ,simpleTitleCaseMapping:0x1D058 - }, - { code:0x1D059 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D059 - ,simpleLowerCaseMapping:0x1D059 - ,simpleTitleCaseMapping:0x1D059 - }, - { code:0x1D05A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05A - ,simpleLowerCaseMapping:0x1D05A - ,simpleTitleCaseMapping:0x1D05A - }, - { code:0x1D05B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05B - ,simpleLowerCaseMapping:0x1D05B - ,simpleTitleCaseMapping:0x1D05B - }, - { code:0x1D05C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05C - ,simpleLowerCaseMapping:0x1D05C - ,simpleTitleCaseMapping:0x1D05C - }, - { code:0x1D05D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05D - ,simpleLowerCaseMapping:0x1D05D - ,simpleTitleCaseMapping:0x1D05D - }, - { code:0x1D05E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05E - ,simpleLowerCaseMapping:0x1D05E - ,simpleTitleCaseMapping:0x1D05E - }, - { code:0x1D05F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D05F - ,simpleLowerCaseMapping:0x1D05F - ,simpleTitleCaseMapping:0x1D05F - }, - { code:0x1D060 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D060 - ,simpleLowerCaseMapping:0x1D060 - ,simpleTitleCaseMapping:0x1D060 - }, - { code:0x1D061 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D061 - ,simpleLowerCaseMapping:0x1D061 - ,simpleTitleCaseMapping:0x1D061 - }, - { code:0x1D062 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D062 - ,simpleLowerCaseMapping:0x1D062 - ,simpleTitleCaseMapping:0x1D062 - }, - { code:0x1D063 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D063 - ,simpleLowerCaseMapping:0x1D063 - ,simpleTitleCaseMapping:0x1D063 - }, - { code:0x1D064 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D064 - ,simpleLowerCaseMapping:0x1D064 - ,simpleTitleCaseMapping:0x1D064 - }, - { code:0x1D065 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D065 - ,simpleLowerCaseMapping:0x1D065 - ,simpleTitleCaseMapping:0x1D065 - }, - { code:0x1D066 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D066 - ,simpleLowerCaseMapping:0x1D066 - ,simpleTitleCaseMapping:0x1D066 - }, - { code:0x1D067 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D067 - ,simpleLowerCaseMapping:0x1D067 - ,simpleTitleCaseMapping:0x1D067 - }, - { code:0x1D068 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D068 - ,simpleLowerCaseMapping:0x1D068 - ,simpleTitleCaseMapping:0x1D068 - }, - { code:0x1D069 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D069 - ,simpleLowerCaseMapping:0x1D069 - ,simpleTitleCaseMapping:0x1D069 - }, - { code:0x1D06A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06A - ,simpleLowerCaseMapping:0x1D06A - ,simpleTitleCaseMapping:0x1D06A - }, - { code:0x1D06B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06B - ,simpleLowerCaseMapping:0x1D06B - ,simpleTitleCaseMapping:0x1D06B - }, - { code:0x1D06C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06C - ,simpleLowerCaseMapping:0x1D06C - ,simpleTitleCaseMapping:0x1D06C - }, - { code:0x1D06D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06D - ,simpleLowerCaseMapping:0x1D06D - ,simpleTitleCaseMapping:0x1D06D - }, - { code:0x1D06E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06E - ,simpleLowerCaseMapping:0x1D06E - ,simpleTitleCaseMapping:0x1D06E - }, - { code:0x1D06F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D06F - ,simpleLowerCaseMapping:0x1D06F - ,simpleTitleCaseMapping:0x1D06F - }, - { code:0x1D070 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D070 - ,simpleLowerCaseMapping:0x1D070 - ,simpleTitleCaseMapping:0x1D070 - }, - { code:0x1D071 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D071 - ,simpleLowerCaseMapping:0x1D071 - ,simpleTitleCaseMapping:0x1D071 - }, - { code:0x1D072 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D072 - ,simpleLowerCaseMapping:0x1D072 - ,simpleTitleCaseMapping:0x1D072 - }, - { code:0x1D073 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D073 - ,simpleLowerCaseMapping:0x1D073 - ,simpleTitleCaseMapping:0x1D073 - }, - { code:0x1D074 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D074 - ,simpleLowerCaseMapping:0x1D074 - ,simpleTitleCaseMapping:0x1D074 - }, - { code:0x1D075 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D075 - ,simpleLowerCaseMapping:0x1D075 - ,simpleTitleCaseMapping:0x1D075 - }, - { code:0x1D076 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D076 - ,simpleLowerCaseMapping:0x1D076 - ,simpleTitleCaseMapping:0x1D076 - }, - { code:0x1D077 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D077 - ,simpleLowerCaseMapping:0x1D077 - ,simpleTitleCaseMapping:0x1D077 - }, - { code:0x1D078 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D078 - ,simpleLowerCaseMapping:0x1D078 - ,simpleTitleCaseMapping:0x1D078 - }, - { code:0x1D079 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D079 - ,simpleLowerCaseMapping:0x1D079 - ,simpleTitleCaseMapping:0x1D079 - }, - { code:0x1D07A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07A - ,simpleLowerCaseMapping:0x1D07A - ,simpleTitleCaseMapping:0x1D07A - }, - { code:0x1D07B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07B - ,simpleLowerCaseMapping:0x1D07B - ,simpleTitleCaseMapping:0x1D07B - }, - { code:0x1D07C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07C - ,simpleLowerCaseMapping:0x1D07C - ,simpleTitleCaseMapping:0x1D07C - }, - { code:0x1D07D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07D - ,simpleLowerCaseMapping:0x1D07D - ,simpleTitleCaseMapping:0x1D07D - }, - { code:0x1D07E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07E - ,simpleLowerCaseMapping:0x1D07E - ,simpleTitleCaseMapping:0x1D07E - }, - { code:0x1D07F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D07F - ,simpleLowerCaseMapping:0x1D07F - ,simpleTitleCaseMapping:0x1D07F - }, - { code:0x1D080 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D080 - ,simpleLowerCaseMapping:0x1D080 - ,simpleTitleCaseMapping:0x1D080 - }, - { code:0x1D081 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D081 - ,simpleLowerCaseMapping:0x1D081 - ,simpleTitleCaseMapping:0x1D081 - }, - { code:0x1D082 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D082 - ,simpleLowerCaseMapping:0x1D082 - ,simpleTitleCaseMapping:0x1D082 - }, - { code:0x1D083 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D083 - ,simpleLowerCaseMapping:0x1D083 - ,simpleTitleCaseMapping:0x1D083 - }, - { code:0x1D084 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D084 - ,simpleLowerCaseMapping:0x1D084 - ,simpleTitleCaseMapping:0x1D084 - }, - { code:0x1D085 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D085 - ,simpleLowerCaseMapping:0x1D085 - ,simpleTitleCaseMapping:0x1D085 - }, - { code:0x1D086 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D086 - ,simpleLowerCaseMapping:0x1D086 - ,simpleTitleCaseMapping:0x1D086 - }, - { code:0x1D087 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D087 - ,simpleLowerCaseMapping:0x1D087 - ,simpleTitleCaseMapping:0x1D087 - }, - { code:0x1D088 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D088 - ,simpleLowerCaseMapping:0x1D088 - ,simpleTitleCaseMapping:0x1D088 - }, - { code:0x1D089 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D089 - ,simpleLowerCaseMapping:0x1D089 - ,simpleTitleCaseMapping:0x1D089 - }, - { code:0x1D08A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08A - ,simpleLowerCaseMapping:0x1D08A - ,simpleTitleCaseMapping:0x1D08A - }, - { code:0x1D08B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08B - ,simpleLowerCaseMapping:0x1D08B - ,simpleTitleCaseMapping:0x1D08B - }, - { code:0x1D08C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08C - ,simpleLowerCaseMapping:0x1D08C - ,simpleTitleCaseMapping:0x1D08C - }, - { code:0x1D08D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08D - ,simpleLowerCaseMapping:0x1D08D - ,simpleTitleCaseMapping:0x1D08D - }, - { code:0x1D08E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08E - ,simpleLowerCaseMapping:0x1D08E - ,simpleTitleCaseMapping:0x1D08E - }, - { code:0x1D08F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D08F - ,simpleLowerCaseMapping:0x1D08F - ,simpleTitleCaseMapping:0x1D08F - }, - { code:0x1D090 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D090 - ,simpleLowerCaseMapping:0x1D090 - ,simpleTitleCaseMapping:0x1D090 - }, - { code:0x1D091 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D091 - ,simpleLowerCaseMapping:0x1D091 - ,simpleTitleCaseMapping:0x1D091 - }, - { code:0x1D092 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D092 - ,simpleLowerCaseMapping:0x1D092 - ,simpleTitleCaseMapping:0x1D092 - }, - { code:0x1D093 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D093 - ,simpleLowerCaseMapping:0x1D093 - ,simpleTitleCaseMapping:0x1D093 - }, - { code:0x1D094 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D094 - ,simpleLowerCaseMapping:0x1D094 - ,simpleTitleCaseMapping:0x1D094 - }, - { code:0x1D095 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D095 - ,simpleLowerCaseMapping:0x1D095 - ,simpleTitleCaseMapping:0x1D095 - }, - { code:0x1D096 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D096 - ,simpleLowerCaseMapping:0x1D096 - ,simpleTitleCaseMapping:0x1D096 - }, - { code:0x1D097 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D097 - ,simpleLowerCaseMapping:0x1D097 - ,simpleTitleCaseMapping:0x1D097 - }, - { code:0x1D098 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D098 - ,simpleLowerCaseMapping:0x1D098 - ,simpleTitleCaseMapping:0x1D098 - }, - { code:0x1D099 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D099 - ,simpleLowerCaseMapping:0x1D099 - ,simpleTitleCaseMapping:0x1D099 - }, - { code:0x1D09A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09A - ,simpleLowerCaseMapping:0x1D09A - ,simpleTitleCaseMapping:0x1D09A - }, - { code:0x1D09B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09B - ,simpleLowerCaseMapping:0x1D09B - ,simpleTitleCaseMapping:0x1D09B - }, - { code:0x1D09C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09C - ,simpleLowerCaseMapping:0x1D09C - ,simpleTitleCaseMapping:0x1D09C - }, - { code:0x1D09D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09D - ,simpleLowerCaseMapping:0x1D09D - ,simpleTitleCaseMapping:0x1D09D - }, - { code:0x1D09E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09E - ,simpleLowerCaseMapping:0x1D09E - ,simpleTitleCaseMapping:0x1D09E - }, - { code:0x1D09F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D09F - ,simpleLowerCaseMapping:0x1D09F - ,simpleTitleCaseMapping:0x1D09F - }, - { code:0x1D0A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A0 - ,simpleLowerCaseMapping:0x1D0A0 - ,simpleTitleCaseMapping:0x1D0A0 - }, - { code:0x1D0A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A1 - ,simpleLowerCaseMapping:0x1D0A1 - ,simpleTitleCaseMapping:0x1D0A1 - }, - { code:0x1D0A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A2 - ,simpleLowerCaseMapping:0x1D0A2 - ,simpleTitleCaseMapping:0x1D0A2 - }, - { code:0x1D0A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A3 - ,simpleLowerCaseMapping:0x1D0A3 - ,simpleTitleCaseMapping:0x1D0A3 - }, - { code:0x1D0A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A4 - ,simpleLowerCaseMapping:0x1D0A4 - ,simpleTitleCaseMapping:0x1D0A4 - }, - { code:0x1D0A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A5 - ,simpleLowerCaseMapping:0x1D0A5 - ,simpleTitleCaseMapping:0x1D0A5 - }, - { code:0x1D0A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A6 - ,simpleLowerCaseMapping:0x1D0A6 - ,simpleTitleCaseMapping:0x1D0A6 - }, - { code:0x1D0A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A7 - ,simpleLowerCaseMapping:0x1D0A7 - ,simpleTitleCaseMapping:0x1D0A7 - }, - { code:0x1D0A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A8 - ,simpleLowerCaseMapping:0x1D0A8 - ,simpleTitleCaseMapping:0x1D0A8 - }, - { code:0x1D0A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0A9 - ,simpleLowerCaseMapping:0x1D0A9 - ,simpleTitleCaseMapping:0x1D0A9 - }, - { code:0x1D0AA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AA - ,simpleLowerCaseMapping:0x1D0AA - ,simpleTitleCaseMapping:0x1D0AA - }, - { code:0x1D0AB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AB - ,simpleLowerCaseMapping:0x1D0AB - ,simpleTitleCaseMapping:0x1D0AB - }, - { code:0x1D0AC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AC - ,simpleLowerCaseMapping:0x1D0AC - ,simpleTitleCaseMapping:0x1D0AC - }, - { code:0x1D0AD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AD - ,simpleLowerCaseMapping:0x1D0AD - ,simpleTitleCaseMapping:0x1D0AD - }, - { code:0x1D0AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AE - ,simpleLowerCaseMapping:0x1D0AE - ,simpleTitleCaseMapping:0x1D0AE - }, - { code:0x1D0AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0AF - ,simpleLowerCaseMapping:0x1D0AF - ,simpleTitleCaseMapping:0x1D0AF - }, - { code:0x1D0B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B0 - ,simpleLowerCaseMapping:0x1D0B0 - ,simpleTitleCaseMapping:0x1D0B0 - }, - { code:0x1D0B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B1 - ,simpleLowerCaseMapping:0x1D0B1 - ,simpleTitleCaseMapping:0x1D0B1 - }, - { code:0x1D0B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B2 - ,simpleLowerCaseMapping:0x1D0B2 - ,simpleTitleCaseMapping:0x1D0B2 - }, - { code:0x1D0B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B3 - ,simpleLowerCaseMapping:0x1D0B3 - ,simpleTitleCaseMapping:0x1D0B3 - }, - { code:0x1D0B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B4 - ,simpleLowerCaseMapping:0x1D0B4 - ,simpleTitleCaseMapping:0x1D0B4 - }, - { code:0x1D0B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B5 - ,simpleLowerCaseMapping:0x1D0B5 - ,simpleTitleCaseMapping:0x1D0B5 - }, - { code:0x1D0B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B6 - ,simpleLowerCaseMapping:0x1D0B6 - ,simpleTitleCaseMapping:0x1D0B6 - }, - { code:0x1D0B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B7 - ,simpleLowerCaseMapping:0x1D0B7 - ,simpleTitleCaseMapping:0x1D0B7 - }, - { code:0x1D0B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B8 - ,simpleLowerCaseMapping:0x1D0B8 - ,simpleTitleCaseMapping:0x1D0B8 - }, - { code:0x1D0B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0B9 - ,simpleLowerCaseMapping:0x1D0B9 - ,simpleTitleCaseMapping:0x1D0B9 - }, - { code:0x1D0BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BA - ,simpleLowerCaseMapping:0x1D0BA - ,simpleTitleCaseMapping:0x1D0BA - }, - { code:0x1D0BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BB - ,simpleLowerCaseMapping:0x1D0BB - ,simpleTitleCaseMapping:0x1D0BB - }, - { code:0x1D0BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BC - ,simpleLowerCaseMapping:0x1D0BC - ,simpleTitleCaseMapping:0x1D0BC - }, - { code:0x1D0BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BD - ,simpleLowerCaseMapping:0x1D0BD - ,simpleTitleCaseMapping:0x1D0BD - }, - { code:0x1D0BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BE - ,simpleLowerCaseMapping:0x1D0BE - ,simpleTitleCaseMapping:0x1D0BE - }, - { code:0x1D0BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0BF - ,simpleLowerCaseMapping:0x1D0BF - ,simpleTitleCaseMapping:0x1D0BF - }, - { code:0x1D0C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C0 - ,simpleLowerCaseMapping:0x1D0C0 - ,simpleTitleCaseMapping:0x1D0C0 - }, - { code:0x1D0C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C1 - ,simpleLowerCaseMapping:0x1D0C1 - ,simpleTitleCaseMapping:0x1D0C1 - }, - { code:0x1D0C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C2 - ,simpleLowerCaseMapping:0x1D0C2 - ,simpleTitleCaseMapping:0x1D0C2 - }, - { code:0x1D0C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C3 - ,simpleLowerCaseMapping:0x1D0C3 - ,simpleTitleCaseMapping:0x1D0C3 - }, - { code:0x1D0C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C4 - ,simpleLowerCaseMapping:0x1D0C4 - ,simpleTitleCaseMapping:0x1D0C4 - }, - { code:0x1D0C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C5 - ,simpleLowerCaseMapping:0x1D0C5 - ,simpleTitleCaseMapping:0x1D0C5 - }, - { code:0x1D0C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C6 - ,simpleLowerCaseMapping:0x1D0C6 - ,simpleTitleCaseMapping:0x1D0C6 - }, - { code:0x1D0C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C7 - ,simpleLowerCaseMapping:0x1D0C7 - ,simpleTitleCaseMapping:0x1D0C7 - }, - { code:0x1D0C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C8 - ,simpleLowerCaseMapping:0x1D0C8 - ,simpleTitleCaseMapping:0x1D0C8 - }, - { code:0x1D0C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0C9 - ,simpleLowerCaseMapping:0x1D0C9 - ,simpleTitleCaseMapping:0x1D0C9 - }, - { code:0x1D0CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CA - ,simpleLowerCaseMapping:0x1D0CA - ,simpleTitleCaseMapping:0x1D0CA - }, - { code:0x1D0CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CB - ,simpleLowerCaseMapping:0x1D0CB - ,simpleTitleCaseMapping:0x1D0CB - }, - { code:0x1D0CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CC - ,simpleLowerCaseMapping:0x1D0CC - ,simpleTitleCaseMapping:0x1D0CC - }, - { code:0x1D0CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CD - ,simpleLowerCaseMapping:0x1D0CD - ,simpleTitleCaseMapping:0x1D0CD - }, - { code:0x1D0CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CE - ,simpleLowerCaseMapping:0x1D0CE - ,simpleTitleCaseMapping:0x1D0CE - }, - { code:0x1D0CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0CF - ,simpleLowerCaseMapping:0x1D0CF - ,simpleTitleCaseMapping:0x1D0CF - }, - { code:0x1D0D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D0 - ,simpleLowerCaseMapping:0x1D0D0 - ,simpleTitleCaseMapping:0x1D0D0 - }, - { code:0x1D0D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D1 - ,simpleLowerCaseMapping:0x1D0D1 - ,simpleTitleCaseMapping:0x1D0D1 - }, - { code:0x1D0D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D2 - ,simpleLowerCaseMapping:0x1D0D2 - ,simpleTitleCaseMapping:0x1D0D2 - }, - { code:0x1D0D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D3 - ,simpleLowerCaseMapping:0x1D0D3 - ,simpleTitleCaseMapping:0x1D0D3 - }, - { code:0x1D0D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D4 - ,simpleLowerCaseMapping:0x1D0D4 - ,simpleTitleCaseMapping:0x1D0D4 - }, - { code:0x1D0D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D5 - ,simpleLowerCaseMapping:0x1D0D5 - ,simpleTitleCaseMapping:0x1D0D5 - }, - { code:0x1D0D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D6 - ,simpleLowerCaseMapping:0x1D0D6 - ,simpleTitleCaseMapping:0x1D0D6 - }, - { code:0x1D0D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D7 - ,simpleLowerCaseMapping:0x1D0D7 - ,simpleTitleCaseMapping:0x1D0D7 - }, - { code:0x1D0D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D8 - ,simpleLowerCaseMapping:0x1D0D8 - ,simpleTitleCaseMapping:0x1D0D8 - }, - { code:0x1D0D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0D9 - ,simpleLowerCaseMapping:0x1D0D9 - ,simpleTitleCaseMapping:0x1D0D9 - }, - { code:0x1D0DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DA - ,simpleLowerCaseMapping:0x1D0DA - ,simpleTitleCaseMapping:0x1D0DA - }, - { code:0x1D0DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DB - ,simpleLowerCaseMapping:0x1D0DB - ,simpleTitleCaseMapping:0x1D0DB - }, - { code:0x1D0DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DC - ,simpleLowerCaseMapping:0x1D0DC - ,simpleTitleCaseMapping:0x1D0DC - }, - { code:0x1D0DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DD - ,simpleLowerCaseMapping:0x1D0DD - ,simpleTitleCaseMapping:0x1D0DD - }, - { code:0x1D0DE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DE - ,simpleLowerCaseMapping:0x1D0DE - ,simpleTitleCaseMapping:0x1D0DE - }, - { code:0x1D0DF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0DF - ,simpleLowerCaseMapping:0x1D0DF - ,simpleTitleCaseMapping:0x1D0DF - }, - { code:0x1D0E0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E0 - ,simpleLowerCaseMapping:0x1D0E0 - ,simpleTitleCaseMapping:0x1D0E0 - }, - { code:0x1D0E1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E1 - ,simpleLowerCaseMapping:0x1D0E1 - ,simpleTitleCaseMapping:0x1D0E1 - }, - { code:0x1D0E2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E2 - ,simpleLowerCaseMapping:0x1D0E2 - ,simpleTitleCaseMapping:0x1D0E2 - }, - { code:0x1D0E3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E3 - ,simpleLowerCaseMapping:0x1D0E3 - ,simpleTitleCaseMapping:0x1D0E3 - }, - { code:0x1D0E4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E4 - ,simpleLowerCaseMapping:0x1D0E4 - ,simpleTitleCaseMapping:0x1D0E4 - }, - { code:0x1D0E5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E5 - ,simpleLowerCaseMapping:0x1D0E5 - ,simpleTitleCaseMapping:0x1D0E5 - }, - { code:0x1D0E6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E6 - ,simpleLowerCaseMapping:0x1D0E6 - ,simpleTitleCaseMapping:0x1D0E6 - }, - { code:0x1D0E7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E7 - ,simpleLowerCaseMapping:0x1D0E7 - ,simpleTitleCaseMapping:0x1D0E7 - }, - { code:0x1D0E8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E8 - ,simpleLowerCaseMapping:0x1D0E8 - ,simpleTitleCaseMapping:0x1D0E8 - }, - { code:0x1D0E9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0E9 - ,simpleLowerCaseMapping:0x1D0E9 - ,simpleTitleCaseMapping:0x1D0E9 - }, - { code:0x1D0EA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0EA - ,simpleLowerCaseMapping:0x1D0EA - ,simpleTitleCaseMapping:0x1D0EA - }, - { code:0x1D0EB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0EB - ,simpleLowerCaseMapping:0x1D0EB - ,simpleTitleCaseMapping:0x1D0EB - }, - { code:0x1D0EC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0EC - ,simpleLowerCaseMapping:0x1D0EC - ,simpleTitleCaseMapping:0x1D0EC - }, - { code:0x1D0ED - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0ED - ,simpleLowerCaseMapping:0x1D0ED - ,simpleTitleCaseMapping:0x1D0ED - }, - { code:0x1D0EE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0EE - ,simpleLowerCaseMapping:0x1D0EE - ,simpleTitleCaseMapping:0x1D0EE - }, - { code:0x1D0EF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0EF - ,simpleLowerCaseMapping:0x1D0EF - ,simpleTitleCaseMapping:0x1D0EF - }, - { code:0x1D0F0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F0 - ,simpleLowerCaseMapping:0x1D0F0 - ,simpleTitleCaseMapping:0x1D0F0 - }, - { code:0x1D0F1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F1 - ,simpleLowerCaseMapping:0x1D0F1 - ,simpleTitleCaseMapping:0x1D0F1 - }, - { code:0x1D0F2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F2 - ,simpleLowerCaseMapping:0x1D0F2 - ,simpleTitleCaseMapping:0x1D0F2 - }, - { code:0x1D0F3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F3 - ,simpleLowerCaseMapping:0x1D0F3 - ,simpleTitleCaseMapping:0x1D0F3 - }, - { code:0x1D0F4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F4 - ,simpleLowerCaseMapping:0x1D0F4 - ,simpleTitleCaseMapping:0x1D0F4 - }, - { code:0x1D0F5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D0F5 - ,simpleLowerCaseMapping:0x1D0F5 - ,simpleTitleCaseMapping:0x1D0F5 - }, - { code:0x1D100 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D100 - ,simpleLowerCaseMapping:0x1D100 - ,simpleTitleCaseMapping:0x1D100 - }, - { code:0x1D101 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D101 - ,simpleLowerCaseMapping:0x1D101 - ,simpleTitleCaseMapping:0x1D101 - }, - { code:0x1D102 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D102 - ,simpleLowerCaseMapping:0x1D102 - ,simpleTitleCaseMapping:0x1D102 - }, - { code:0x1D103 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D103 - ,simpleLowerCaseMapping:0x1D103 - ,simpleTitleCaseMapping:0x1D103 - }, - { code:0x1D104 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D104 - ,simpleLowerCaseMapping:0x1D104 - ,simpleTitleCaseMapping:0x1D104 - }, - { code:0x1D105 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D105 - ,simpleLowerCaseMapping:0x1D105 - ,simpleTitleCaseMapping:0x1D105 - }, - { code:0x1D106 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D106 - ,simpleLowerCaseMapping:0x1D106 - ,simpleTitleCaseMapping:0x1D106 - }, - { code:0x1D107 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D107 - ,simpleLowerCaseMapping:0x1D107 - ,simpleTitleCaseMapping:0x1D107 - }, - { code:0x1D108 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D108 - ,simpleLowerCaseMapping:0x1D108 - ,simpleTitleCaseMapping:0x1D108 - }, - { code:0x1D109 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D109 - ,simpleLowerCaseMapping:0x1D109 - ,simpleTitleCaseMapping:0x1D109 - }, - { code:0x1D10A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10A - ,simpleLowerCaseMapping:0x1D10A - ,simpleTitleCaseMapping:0x1D10A - }, - { code:0x1D10B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10B - ,simpleLowerCaseMapping:0x1D10B - ,simpleTitleCaseMapping:0x1D10B - }, - { code:0x1D10C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10C - ,simpleLowerCaseMapping:0x1D10C - ,simpleTitleCaseMapping:0x1D10C - }, - { code:0x1D10D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10D - ,simpleLowerCaseMapping:0x1D10D - ,simpleTitleCaseMapping:0x1D10D - }, - { code:0x1D10E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10E - ,simpleLowerCaseMapping:0x1D10E - ,simpleTitleCaseMapping:0x1D10E - }, - { code:0x1D10F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D10F - ,simpleLowerCaseMapping:0x1D10F - ,simpleTitleCaseMapping:0x1D10F - }, - { code:0x1D110 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D110 - ,simpleLowerCaseMapping:0x1D110 - ,simpleTitleCaseMapping:0x1D110 - }, - { code:0x1D111 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D111 - ,simpleLowerCaseMapping:0x1D111 - ,simpleTitleCaseMapping:0x1D111 - }, - { code:0x1D112 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D112 - ,simpleLowerCaseMapping:0x1D112 - ,simpleTitleCaseMapping:0x1D112 - }, - { code:0x1D113 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D113 - ,simpleLowerCaseMapping:0x1D113 - ,simpleTitleCaseMapping:0x1D113 - }, - { code:0x1D114 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D114 - ,simpleLowerCaseMapping:0x1D114 - ,simpleTitleCaseMapping:0x1D114 - }, - { code:0x1D115 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D115 - ,simpleLowerCaseMapping:0x1D115 - ,simpleTitleCaseMapping:0x1D115 - }, - { code:0x1D116 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D116 - ,simpleLowerCaseMapping:0x1D116 - ,simpleTitleCaseMapping:0x1D116 - }, - { code:0x1D117 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D117 - ,simpleLowerCaseMapping:0x1D117 - ,simpleTitleCaseMapping:0x1D117 - }, - { code:0x1D118 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D118 - ,simpleLowerCaseMapping:0x1D118 - ,simpleTitleCaseMapping:0x1D118 - }, - { code:0x1D119 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D119 - ,simpleLowerCaseMapping:0x1D119 - ,simpleTitleCaseMapping:0x1D119 - }, - { code:0x1D11A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11A - ,simpleLowerCaseMapping:0x1D11A - ,simpleTitleCaseMapping:0x1D11A - }, - { code:0x1D11B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11B - ,simpleLowerCaseMapping:0x1D11B - ,simpleTitleCaseMapping:0x1D11B - }, - { code:0x1D11C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11C - ,simpleLowerCaseMapping:0x1D11C - ,simpleTitleCaseMapping:0x1D11C - }, - { code:0x1D11D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11D - ,simpleLowerCaseMapping:0x1D11D - ,simpleTitleCaseMapping:0x1D11D - }, - { code:0x1D11E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11E - ,simpleLowerCaseMapping:0x1D11E - ,simpleTitleCaseMapping:0x1D11E - }, - { code:0x1D11F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D11F - ,simpleLowerCaseMapping:0x1D11F - ,simpleTitleCaseMapping:0x1D11F - }, - { code:0x1D120 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D120 - ,simpleLowerCaseMapping:0x1D120 - ,simpleTitleCaseMapping:0x1D120 - }, - { code:0x1D121 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D121 - ,simpleLowerCaseMapping:0x1D121 - ,simpleTitleCaseMapping:0x1D121 - }, - { code:0x1D122 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D122 - ,simpleLowerCaseMapping:0x1D122 - ,simpleTitleCaseMapping:0x1D122 - }, - { code:0x1D123 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D123 - ,simpleLowerCaseMapping:0x1D123 - ,simpleTitleCaseMapping:0x1D123 - }, - { code:0x1D124 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D124 - ,simpleLowerCaseMapping:0x1D124 - ,simpleTitleCaseMapping:0x1D124 - }, - { code:0x1D125 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D125 - ,simpleLowerCaseMapping:0x1D125 - ,simpleTitleCaseMapping:0x1D125 - }, - { code:0x1D126 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D126 - ,simpleLowerCaseMapping:0x1D126 - ,simpleTitleCaseMapping:0x1D126 - }, - { code:0x1D12A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12A - ,simpleLowerCaseMapping:0x1D12A - ,simpleTitleCaseMapping:0x1D12A - }, - { code:0x1D12B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12B - ,simpleLowerCaseMapping:0x1D12B - ,simpleTitleCaseMapping:0x1D12B - }, - { code:0x1D12C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12C - ,simpleLowerCaseMapping:0x1D12C - ,simpleTitleCaseMapping:0x1D12C - }, - { code:0x1D12D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12D - ,simpleLowerCaseMapping:0x1D12D - ,simpleTitleCaseMapping:0x1D12D - }, - { code:0x1D12E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12E - ,simpleLowerCaseMapping:0x1D12E - ,simpleTitleCaseMapping:0x1D12E - }, - { code:0x1D12F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D12F - ,simpleLowerCaseMapping:0x1D12F - ,simpleTitleCaseMapping:0x1D12F - }, - { code:0x1D130 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D130 - ,simpleLowerCaseMapping:0x1D130 - ,simpleTitleCaseMapping:0x1D130 - }, - { code:0x1D131 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D131 - ,simpleLowerCaseMapping:0x1D131 - ,simpleTitleCaseMapping:0x1D131 - }, - { code:0x1D132 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D132 - ,simpleLowerCaseMapping:0x1D132 - ,simpleTitleCaseMapping:0x1D132 - }, - { code:0x1D133 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D133 - ,simpleLowerCaseMapping:0x1D133 - ,simpleTitleCaseMapping:0x1D133 - }, - { code:0x1D134 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D134 - ,simpleLowerCaseMapping:0x1D134 - ,simpleTitleCaseMapping:0x1D134 - }, - { code:0x1D135 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D135 - ,simpleLowerCaseMapping:0x1D135 - ,simpleTitleCaseMapping:0x1D135 - }, - { code:0x1D136 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D136 - ,simpleLowerCaseMapping:0x1D136 - ,simpleTitleCaseMapping:0x1D136 - }, - { code:0x1D137 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D137 - ,simpleLowerCaseMapping:0x1D137 - ,simpleTitleCaseMapping:0x1D137 - }, - { code:0x1D138 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D138 - ,simpleLowerCaseMapping:0x1D138 - ,simpleTitleCaseMapping:0x1D138 - }, - { code:0x1D139 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D139 - ,simpleLowerCaseMapping:0x1D139 - ,simpleTitleCaseMapping:0x1D139 - }, - { code:0x1D13A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13A - ,simpleLowerCaseMapping:0x1D13A - ,simpleTitleCaseMapping:0x1D13A - }, - { code:0x1D13B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13B - ,simpleLowerCaseMapping:0x1D13B - ,simpleTitleCaseMapping:0x1D13B - }, - { code:0x1D13C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13C - ,simpleLowerCaseMapping:0x1D13C - ,simpleTitleCaseMapping:0x1D13C - }, - { code:0x1D13D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13D - ,simpleLowerCaseMapping:0x1D13D - ,simpleTitleCaseMapping:0x1D13D - }, - { code:0x1D13E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13E - ,simpleLowerCaseMapping:0x1D13E - ,simpleTitleCaseMapping:0x1D13E - }, - { code:0x1D13F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D13F - ,simpleLowerCaseMapping:0x1D13F - ,simpleTitleCaseMapping:0x1D13F - }, - { code:0x1D140 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D140 - ,simpleLowerCaseMapping:0x1D140 - ,simpleTitleCaseMapping:0x1D140 - }, - { code:0x1D141 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D141 - ,simpleLowerCaseMapping:0x1D141 - ,simpleTitleCaseMapping:0x1D141 - }, - { code:0x1D142 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D142 - ,simpleLowerCaseMapping:0x1D142 - ,simpleTitleCaseMapping:0x1D142 - }, - { code:0x1D143 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D143 - ,simpleLowerCaseMapping:0x1D143 - ,simpleTitleCaseMapping:0x1D143 - }, - { code:0x1D144 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D144 - ,simpleLowerCaseMapping:0x1D144 - ,simpleTitleCaseMapping:0x1D144 - }, - { code:0x1D145 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D145 - ,simpleLowerCaseMapping:0x1D145 - ,simpleTitleCaseMapping:0x1D145 - }, - { code:0x1D146 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D146 - ,simpleLowerCaseMapping:0x1D146 - ,simpleTitleCaseMapping:0x1D146 - }, - { code:0x1D147 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D147 - ,simpleLowerCaseMapping:0x1D147 - ,simpleTitleCaseMapping:0x1D147 - }, - { code:0x1D148 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D148 - ,simpleLowerCaseMapping:0x1D148 - ,simpleTitleCaseMapping:0x1D148 - }, - { code:0x1D149 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D149 - ,simpleLowerCaseMapping:0x1D149 - ,simpleTitleCaseMapping:0x1D149 - }, - { code:0x1D14A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14A - ,simpleLowerCaseMapping:0x1D14A - ,simpleTitleCaseMapping:0x1D14A - }, - { code:0x1D14B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14B - ,simpleLowerCaseMapping:0x1D14B - ,simpleTitleCaseMapping:0x1D14B - }, - { code:0x1D14C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14C - ,simpleLowerCaseMapping:0x1D14C - ,simpleTitleCaseMapping:0x1D14C - }, - { code:0x1D14D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14D - ,simpleLowerCaseMapping:0x1D14D - ,simpleTitleCaseMapping:0x1D14D - }, - { code:0x1D14E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14E - ,simpleLowerCaseMapping:0x1D14E - ,simpleTitleCaseMapping:0x1D14E - }, - { code:0x1D14F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D14F - ,simpleLowerCaseMapping:0x1D14F - ,simpleTitleCaseMapping:0x1D14F - }, - { code:0x1D150 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D150 - ,simpleLowerCaseMapping:0x1D150 - ,simpleTitleCaseMapping:0x1D150 - }, - { code:0x1D151 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D151 - ,simpleLowerCaseMapping:0x1D151 - ,simpleTitleCaseMapping:0x1D151 - }, - { code:0x1D152 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D152 - ,simpleLowerCaseMapping:0x1D152 - ,simpleTitleCaseMapping:0x1D152 - }, - { code:0x1D153 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D153 - ,simpleLowerCaseMapping:0x1D153 - ,simpleTitleCaseMapping:0x1D153 - }, - { code:0x1D154 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D154 - ,simpleLowerCaseMapping:0x1D154 - ,simpleTitleCaseMapping:0x1D154 - }, - { code:0x1D155 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D155 - ,simpleLowerCaseMapping:0x1D155 - ,simpleTitleCaseMapping:0x1D155 - }, - { code:0x1D156 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D156 - ,simpleLowerCaseMapping:0x1D156 - ,simpleTitleCaseMapping:0x1D156 - }, - { code:0x1D157 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D157 - ,simpleLowerCaseMapping:0x1D157 - ,simpleTitleCaseMapping:0x1D157 - }, - { code:0x1D158 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D158 - ,simpleLowerCaseMapping:0x1D158 - ,simpleTitleCaseMapping:0x1D158 - }, - { code:0x1D159 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D159 - ,simpleLowerCaseMapping:0x1D159 - ,simpleTitleCaseMapping:0x1D159 - }, - { code:0x1D15A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15A - ,simpleLowerCaseMapping:0x1D15A - ,simpleTitleCaseMapping:0x1D15A - }, - { code:0x1D15B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15B - ,simpleLowerCaseMapping:0x1D15B - ,simpleTitleCaseMapping:0x1D15B - }, - { code:0x1D15C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15C - ,simpleLowerCaseMapping:0x1D15C - ,simpleTitleCaseMapping:0x1D15C - }, - { code:0x1D15D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15D - ,simpleLowerCaseMapping:0x1D15D - ,simpleTitleCaseMapping:0x1D15D - }, - { code:0x1D15E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15E - ,simpleLowerCaseMapping:0x1D15E - ,simpleTitleCaseMapping:0x1D15E - }, - { code:0x1D15F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D15F - ,simpleLowerCaseMapping:0x1D15F - ,simpleTitleCaseMapping:0x1D15F - }, - { code:0x1D160 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D160 - ,simpleLowerCaseMapping:0x1D160 - ,simpleTitleCaseMapping:0x1D160 - }, - { code:0x1D161 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D161 - ,simpleLowerCaseMapping:0x1D161 - ,simpleTitleCaseMapping:0x1D161 - }, - { code:0x1D162 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D162 - ,simpleLowerCaseMapping:0x1D162 - ,simpleTitleCaseMapping:0x1D162 - }, - { code:0x1D163 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D163 - ,simpleLowerCaseMapping:0x1D163 - ,simpleTitleCaseMapping:0x1D163 - }, - { code:0x1D164 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D164 - ,simpleLowerCaseMapping:0x1D164 - ,simpleTitleCaseMapping:0x1D164 - }, - { code:0x1D165 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D165 - ,simpleLowerCaseMapping:0x1D165 - ,simpleTitleCaseMapping:0x1D165 - }, - { code:0x1D166 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D166 - ,simpleLowerCaseMapping:0x1D166 - ,simpleTitleCaseMapping:0x1D166 - }, - { code:0x1D167 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D167 - ,simpleLowerCaseMapping:0x1D167 - ,simpleTitleCaseMapping:0x1D167 - }, - { code:0x1D168 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D168 - ,simpleLowerCaseMapping:0x1D168 - ,simpleTitleCaseMapping:0x1D168 - }, - { code:0x1D169 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D169 - ,simpleLowerCaseMapping:0x1D169 - ,simpleTitleCaseMapping:0x1D169 - }, - { code:0x1D16A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D16A - ,simpleLowerCaseMapping:0x1D16A - ,simpleTitleCaseMapping:0x1D16A - }, - { code:0x1D16B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D16B - ,simpleLowerCaseMapping:0x1D16B - ,simpleTitleCaseMapping:0x1D16B - }, - { code:0x1D16C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D16C - ,simpleLowerCaseMapping:0x1D16C - ,simpleTitleCaseMapping:0x1D16C - }, - { code:0x1D16D - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D16D - ,simpleLowerCaseMapping:0x1D16D - ,simpleTitleCaseMapping:0x1D16D - }, - { code:0x1D16E - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D16E - ,simpleLowerCaseMapping:0x1D16E - ,simpleTitleCaseMapping:0x1D16E - }, - { code:0x1D16F - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D16F - ,simpleLowerCaseMapping:0x1D16F - ,simpleTitleCaseMapping:0x1D16F - }, - { code:0x1D170 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D170 - ,simpleLowerCaseMapping:0x1D170 - ,simpleTitleCaseMapping:0x1D170 - }, - { code:0x1D171 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D171 - ,simpleLowerCaseMapping:0x1D171 - ,simpleTitleCaseMapping:0x1D171 - }, - { code:0x1D172 - ,generalCategory:UnicodeData.GeneralCategory.Mc - ,simpleUpperCaseMapping:0x1D172 - ,simpleLowerCaseMapping:0x1D172 - ,simpleTitleCaseMapping:0x1D172 - }, - { code:0x1D173 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D173 - ,simpleLowerCaseMapping:0x1D173 - ,simpleTitleCaseMapping:0x1D173 - }, - { code:0x1D174 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D174 - ,simpleLowerCaseMapping:0x1D174 - ,simpleTitleCaseMapping:0x1D174 - }, - { code:0x1D175 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D175 - ,simpleLowerCaseMapping:0x1D175 - ,simpleTitleCaseMapping:0x1D175 - }, - { code:0x1D176 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D176 - ,simpleLowerCaseMapping:0x1D176 - ,simpleTitleCaseMapping:0x1D176 - }, - { code:0x1D177 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D177 - ,simpleLowerCaseMapping:0x1D177 - ,simpleTitleCaseMapping:0x1D177 - }, - { code:0x1D178 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D178 - ,simpleLowerCaseMapping:0x1D178 - ,simpleTitleCaseMapping:0x1D178 - }, - { code:0x1D179 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D179 - ,simpleLowerCaseMapping:0x1D179 - ,simpleTitleCaseMapping:0x1D179 - }, - { code:0x1D17A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0x1D17A - ,simpleLowerCaseMapping:0x1D17A - ,simpleTitleCaseMapping:0x1D17A - }, - { code:0x1D17B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D17B - ,simpleLowerCaseMapping:0x1D17B - ,simpleTitleCaseMapping:0x1D17B - }, - { code:0x1D17C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D17C - ,simpleLowerCaseMapping:0x1D17C - ,simpleTitleCaseMapping:0x1D17C - }, - { code:0x1D17D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D17D - ,simpleLowerCaseMapping:0x1D17D - ,simpleTitleCaseMapping:0x1D17D - }, - { code:0x1D17E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D17E - ,simpleLowerCaseMapping:0x1D17E - ,simpleTitleCaseMapping:0x1D17E - }, - { code:0x1D17F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D17F - ,simpleLowerCaseMapping:0x1D17F - ,simpleTitleCaseMapping:0x1D17F - }, - { code:0x1D180 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D180 - ,simpleLowerCaseMapping:0x1D180 - ,simpleTitleCaseMapping:0x1D180 - }, - { code:0x1D181 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D181 - ,simpleLowerCaseMapping:0x1D181 - ,simpleTitleCaseMapping:0x1D181 - }, - { code:0x1D182 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D182 - ,simpleLowerCaseMapping:0x1D182 - ,simpleTitleCaseMapping:0x1D182 - }, - { code:0x1D183 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D183 - ,simpleLowerCaseMapping:0x1D183 - ,simpleTitleCaseMapping:0x1D183 - }, - { code:0x1D184 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D184 - ,simpleLowerCaseMapping:0x1D184 - ,simpleTitleCaseMapping:0x1D184 - }, - { code:0x1D185 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D185 - ,simpleLowerCaseMapping:0x1D185 - ,simpleTitleCaseMapping:0x1D185 - }, - { code:0x1D186 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D186 - ,simpleLowerCaseMapping:0x1D186 - ,simpleTitleCaseMapping:0x1D186 - }, - { code:0x1D187 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D187 - ,simpleLowerCaseMapping:0x1D187 - ,simpleTitleCaseMapping:0x1D187 - }, - { code:0x1D188 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D188 - ,simpleLowerCaseMapping:0x1D188 - ,simpleTitleCaseMapping:0x1D188 - }, - { code:0x1D189 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D189 - ,simpleLowerCaseMapping:0x1D189 - ,simpleTitleCaseMapping:0x1D189 - }, - { code:0x1D18A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D18A - ,simpleLowerCaseMapping:0x1D18A - ,simpleTitleCaseMapping:0x1D18A - }, - { code:0x1D18B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D18B - ,simpleLowerCaseMapping:0x1D18B - ,simpleTitleCaseMapping:0x1D18B - }, - { code:0x1D18C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D18C - ,simpleLowerCaseMapping:0x1D18C - ,simpleTitleCaseMapping:0x1D18C - }, - { code:0x1D18D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D18D - ,simpleLowerCaseMapping:0x1D18D - ,simpleTitleCaseMapping:0x1D18D - }, - { code:0x1D18E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D18E - ,simpleLowerCaseMapping:0x1D18E - ,simpleTitleCaseMapping:0x1D18E - }, - { code:0x1D18F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D18F - ,simpleLowerCaseMapping:0x1D18F - ,simpleTitleCaseMapping:0x1D18F - }, - { code:0x1D190 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D190 - ,simpleLowerCaseMapping:0x1D190 - ,simpleTitleCaseMapping:0x1D190 - }, - { code:0x1D191 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D191 - ,simpleLowerCaseMapping:0x1D191 - ,simpleTitleCaseMapping:0x1D191 - }, - { code:0x1D192 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D192 - ,simpleLowerCaseMapping:0x1D192 - ,simpleTitleCaseMapping:0x1D192 - }, - { code:0x1D193 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D193 - ,simpleLowerCaseMapping:0x1D193 - ,simpleTitleCaseMapping:0x1D193 - }, - { code:0x1D194 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D194 - ,simpleLowerCaseMapping:0x1D194 - ,simpleTitleCaseMapping:0x1D194 - }, - { code:0x1D195 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D195 - ,simpleLowerCaseMapping:0x1D195 - ,simpleTitleCaseMapping:0x1D195 - }, - { code:0x1D196 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D196 - ,simpleLowerCaseMapping:0x1D196 - ,simpleTitleCaseMapping:0x1D196 - }, - { code:0x1D197 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D197 - ,simpleLowerCaseMapping:0x1D197 - ,simpleTitleCaseMapping:0x1D197 - }, - { code:0x1D198 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D198 - ,simpleLowerCaseMapping:0x1D198 - ,simpleTitleCaseMapping:0x1D198 - }, - { code:0x1D199 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D199 - ,simpleLowerCaseMapping:0x1D199 - ,simpleTitleCaseMapping:0x1D199 - }, - { code:0x1D19A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19A - ,simpleLowerCaseMapping:0x1D19A - ,simpleTitleCaseMapping:0x1D19A - }, - { code:0x1D19B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19B - ,simpleLowerCaseMapping:0x1D19B - ,simpleTitleCaseMapping:0x1D19B - }, - { code:0x1D19C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19C - ,simpleLowerCaseMapping:0x1D19C - ,simpleTitleCaseMapping:0x1D19C - }, - { code:0x1D19D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19D - ,simpleLowerCaseMapping:0x1D19D - ,simpleTitleCaseMapping:0x1D19D - }, - { code:0x1D19E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19E - ,simpleLowerCaseMapping:0x1D19E - ,simpleTitleCaseMapping:0x1D19E - }, - { code:0x1D19F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D19F - ,simpleLowerCaseMapping:0x1D19F - ,simpleTitleCaseMapping:0x1D19F - }, - { code:0x1D1A0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A0 - ,simpleLowerCaseMapping:0x1D1A0 - ,simpleTitleCaseMapping:0x1D1A0 - }, - { code:0x1D1A1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A1 - ,simpleLowerCaseMapping:0x1D1A1 - ,simpleTitleCaseMapping:0x1D1A1 - }, - { code:0x1D1A2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A2 - ,simpleLowerCaseMapping:0x1D1A2 - ,simpleTitleCaseMapping:0x1D1A2 - }, - { code:0x1D1A3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A3 - ,simpleLowerCaseMapping:0x1D1A3 - ,simpleTitleCaseMapping:0x1D1A3 - }, - { code:0x1D1A4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A4 - ,simpleLowerCaseMapping:0x1D1A4 - ,simpleTitleCaseMapping:0x1D1A4 - }, - { code:0x1D1A5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A5 - ,simpleLowerCaseMapping:0x1D1A5 - ,simpleTitleCaseMapping:0x1D1A5 - }, - { code:0x1D1A6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A6 - ,simpleLowerCaseMapping:0x1D1A6 - ,simpleTitleCaseMapping:0x1D1A6 - }, - { code:0x1D1A7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A7 - ,simpleLowerCaseMapping:0x1D1A7 - ,simpleTitleCaseMapping:0x1D1A7 - }, - { code:0x1D1A8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A8 - ,simpleLowerCaseMapping:0x1D1A8 - ,simpleTitleCaseMapping:0x1D1A8 - }, - { code:0x1D1A9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1A9 - ,simpleLowerCaseMapping:0x1D1A9 - ,simpleTitleCaseMapping:0x1D1A9 - }, - { code:0x1D1AA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D1AA - ,simpleLowerCaseMapping:0x1D1AA - ,simpleTitleCaseMapping:0x1D1AA - }, - { code:0x1D1AB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D1AB - ,simpleLowerCaseMapping:0x1D1AB - ,simpleTitleCaseMapping:0x1D1AB - }, - { code:0x1D1AC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D1AC - ,simpleLowerCaseMapping:0x1D1AC - ,simpleTitleCaseMapping:0x1D1AC - }, - { code:0x1D1AD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D1AD - ,simpleLowerCaseMapping:0x1D1AD - ,simpleTitleCaseMapping:0x1D1AD - }, - { code:0x1D1AE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1AE - ,simpleLowerCaseMapping:0x1D1AE - ,simpleTitleCaseMapping:0x1D1AE - }, - { code:0x1D1AF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1AF - ,simpleLowerCaseMapping:0x1D1AF - ,simpleTitleCaseMapping:0x1D1AF - }, - { code:0x1D1B0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B0 - ,simpleLowerCaseMapping:0x1D1B0 - ,simpleTitleCaseMapping:0x1D1B0 - }, - { code:0x1D1B1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B1 - ,simpleLowerCaseMapping:0x1D1B1 - ,simpleTitleCaseMapping:0x1D1B1 - }, - { code:0x1D1B2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B2 - ,simpleLowerCaseMapping:0x1D1B2 - ,simpleTitleCaseMapping:0x1D1B2 - }, - { code:0x1D1B3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B3 - ,simpleLowerCaseMapping:0x1D1B3 - ,simpleTitleCaseMapping:0x1D1B3 - }, - { code:0x1D1B4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B4 - ,simpleLowerCaseMapping:0x1D1B4 - ,simpleTitleCaseMapping:0x1D1B4 - }, - { code:0x1D1B5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B5 - ,simpleLowerCaseMapping:0x1D1B5 - ,simpleTitleCaseMapping:0x1D1B5 - }, - { code:0x1D1B6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B6 - ,simpleLowerCaseMapping:0x1D1B6 - ,simpleTitleCaseMapping:0x1D1B6 - }, - { code:0x1D1B7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B7 - ,simpleLowerCaseMapping:0x1D1B7 - ,simpleTitleCaseMapping:0x1D1B7 - }, - { code:0x1D1B8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B8 - ,simpleLowerCaseMapping:0x1D1B8 - ,simpleTitleCaseMapping:0x1D1B8 - }, - { code:0x1D1B9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1B9 - ,simpleLowerCaseMapping:0x1D1B9 - ,simpleTitleCaseMapping:0x1D1B9 - }, - { code:0x1D1BA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BA - ,simpleLowerCaseMapping:0x1D1BA - ,simpleTitleCaseMapping:0x1D1BA - }, - { code:0x1D1BB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BB - ,simpleLowerCaseMapping:0x1D1BB - ,simpleTitleCaseMapping:0x1D1BB - }, - { code:0x1D1BC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BC - ,simpleLowerCaseMapping:0x1D1BC - ,simpleTitleCaseMapping:0x1D1BC - }, - { code:0x1D1BD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BD - ,simpleLowerCaseMapping:0x1D1BD - ,simpleTitleCaseMapping:0x1D1BD - }, - { code:0x1D1BE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BE - ,simpleLowerCaseMapping:0x1D1BE - ,simpleTitleCaseMapping:0x1D1BE - }, - { code:0x1D1BF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1BF - ,simpleLowerCaseMapping:0x1D1BF - ,simpleTitleCaseMapping:0x1D1BF - }, - { code:0x1D1C0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C0 - ,simpleLowerCaseMapping:0x1D1C0 - ,simpleTitleCaseMapping:0x1D1C0 - }, - { code:0x1D1C1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C1 - ,simpleLowerCaseMapping:0x1D1C1 - ,simpleTitleCaseMapping:0x1D1C1 - }, - { code:0x1D1C2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C2 - ,simpleLowerCaseMapping:0x1D1C2 - ,simpleTitleCaseMapping:0x1D1C2 - }, - { code:0x1D1C3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C3 - ,simpleLowerCaseMapping:0x1D1C3 - ,simpleTitleCaseMapping:0x1D1C3 - }, - { code:0x1D1C4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C4 - ,simpleLowerCaseMapping:0x1D1C4 - ,simpleTitleCaseMapping:0x1D1C4 - }, - { code:0x1D1C5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C5 - ,simpleLowerCaseMapping:0x1D1C5 - ,simpleTitleCaseMapping:0x1D1C5 - }, - { code:0x1D1C6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C6 - ,simpleLowerCaseMapping:0x1D1C6 - ,simpleTitleCaseMapping:0x1D1C6 - }, - { code:0x1D1C7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C7 - ,simpleLowerCaseMapping:0x1D1C7 - ,simpleTitleCaseMapping:0x1D1C7 - }, - { code:0x1D1C8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C8 - ,simpleLowerCaseMapping:0x1D1C8 - ,simpleTitleCaseMapping:0x1D1C8 - }, - { code:0x1D1C9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1C9 - ,simpleLowerCaseMapping:0x1D1C9 - ,simpleTitleCaseMapping:0x1D1C9 - }, - { code:0x1D1CA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CA - ,simpleLowerCaseMapping:0x1D1CA - ,simpleTitleCaseMapping:0x1D1CA - }, - { code:0x1D1CB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CB - ,simpleLowerCaseMapping:0x1D1CB - ,simpleTitleCaseMapping:0x1D1CB - }, - { code:0x1D1CC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CC - ,simpleLowerCaseMapping:0x1D1CC - ,simpleTitleCaseMapping:0x1D1CC - }, - { code:0x1D1CD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CD - ,simpleLowerCaseMapping:0x1D1CD - ,simpleTitleCaseMapping:0x1D1CD - }, - { code:0x1D1CE - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CE - ,simpleLowerCaseMapping:0x1D1CE - ,simpleTitleCaseMapping:0x1D1CE - }, - { code:0x1D1CF - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1CF - ,simpleLowerCaseMapping:0x1D1CF - ,simpleTitleCaseMapping:0x1D1CF - }, - { code:0x1D1D0 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D0 - ,simpleLowerCaseMapping:0x1D1D0 - ,simpleTitleCaseMapping:0x1D1D0 - }, - { code:0x1D1D1 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D1 - ,simpleLowerCaseMapping:0x1D1D1 - ,simpleTitleCaseMapping:0x1D1D1 - }, - { code:0x1D1D2 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D2 - ,simpleLowerCaseMapping:0x1D1D2 - ,simpleTitleCaseMapping:0x1D1D2 - }, - { code:0x1D1D3 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D3 - ,simpleLowerCaseMapping:0x1D1D3 - ,simpleTitleCaseMapping:0x1D1D3 - }, - { code:0x1D1D4 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D4 - ,simpleLowerCaseMapping:0x1D1D4 - ,simpleTitleCaseMapping:0x1D1D4 - }, - { code:0x1D1D5 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D5 - ,simpleLowerCaseMapping:0x1D1D5 - ,simpleTitleCaseMapping:0x1D1D5 - }, - { code:0x1D1D6 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D6 - ,simpleLowerCaseMapping:0x1D1D6 - ,simpleTitleCaseMapping:0x1D1D6 - }, - { code:0x1D1D7 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D7 - ,simpleLowerCaseMapping:0x1D1D7 - ,simpleTitleCaseMapping:0x1D1D7 - }, - { code:0x1D1D8 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D8 - ,simpleLowerCaseMapping:0x1D1D8 - ,simpleTitleCaseMapping:0x1D1D8 - }, - { code:0x1D1D9 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1D9 - ,simpleLowerCaseMapping:0x1D1D9 - ,simpleTitleCaseMapping:0x1D1D9 - }, - { code:0x1D1DA - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1DA - ,simpleLowerCaseMapping:0x1D1DA - ,simpleTitleCaseMapping:0x1D1DA - }, - { code:0x1D1DB - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1DB - ,simpleLowerCaseMapping:0x1D1DB - ,simpleTitleCaseMapping:0x1D1DB - }, - { code:0x1D1DC - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1DC - ,simpleLowerCaseMapping:0x1D1DC - ,simpleTitleCaseMapping:0x1D1DC - }, - { code:0x1D1DD - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D1DD - ,simpleLowerCaseMapping:0x1D1DD - ,simpleTitleCaseMapping:0x1D1DD - }, - { code:0x1D200 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D200 - ,simpleLowerCaseMapping:0x1D200 - ,simpleTitleCaseMapping:0x1D200 - }, - { code:0x1D201 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D201 - ,simpleLowerCaseMapping:0x1D201 - ,simpleTitleCaseMapping:0x1D201 - }, - { code:0x1D202 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D202 - ,simpleLowerCaseMapping:0x1D202 - ,simpleTitleCaseMapping:0x1D202 - }, - { code:0x1D203 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D203 - ,simpleLowerCaseMapping:0x1D203 - ,simpleTitleCaseMapping:0x1D203 - }, - { code:0x1D204 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D204 - ,simpleLowerCaseMapping:0x1D204 - ,simpleTitleCaseMapping:0x1D204 - }, - { code:0x1D205 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D205 - ,simpleLowerCaseMapping:0x1D205 - ,simpleTitleCaseMapping:0x1D205 - }, - { code:0x1D206 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D206 - ,simpleLowerCaseMapping:0x1D206 - ,simpleTitleCaseMapping:0x1D206 - }, - { code:0x1D207 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D207 - ,simpleLowerCaseMapping:0x1D207 - ,simpleTitleCaseMapping:0x1D207 - }, - { code:0x1D208 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D208 - ,simpleLowerCaseMapping:0x1D208 - ,simpleTitleCaseMapping:0x1D208 - }, - { code:0x1D209 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D209 - ,simpleLowerCaseMapping:0x1D209 - ,simpleTitleCaseMapping:0x1D209 - }, - { code:0x1D20A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20A - ,simpleLowerCaseMapping:0x1D20A - ,simpleTitleCaseMapping:0x1D20A - }, - { code:0x1D20B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20B - ,simpleLowerCaseMapping:0x1D20B - ,simpleTitleCaseMapping:0x1D20B - }, - { code:0x1D20C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20C - ,simpleLowerCaseMapping:0x1D20C - ,simpleTitleCaseMapping:0x1D20C - }, - { code:0x1D20D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20D - ,simpleLowerCaseMapping:0x1D20D - ,simpleTitleCaseMapping:0x1D20D - }, - { code:0x1D20E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20E - ,simpleLowerCaseMapping:0x1D20E - ,simpleTitleCaseMapping:0x1D20E - }, - { code:0x1D20F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D20F - ,simpleLowerCaseMapping:0x1D20F - ,simpleTitleCaseMapping:0x1D20F - }, - { code:0x1D210 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D210 - ,simpleLowerCaseMapping:0x1D210 - ,simpleTitleCaseMapping:0x1D210 - }, - { code:0x1D211 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D211 - ,simpleLowerCaseMapping:0x1D211 - ,simpleTitleCaseMapping:0x1D211 - }, - { code:0x1D212 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D212 - ,simpleLowerCaseMapping:0x1D212 - ,simpleTitleCaseMapping:0x1D212 - }, - { code:0x1D213 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D213 - ,simpleLowerCaseMapping:0x1D213 - ,simpleTitleCaseMapping:0x1D213 - }, - { code:0x1D214 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D214 - ,simpleLowerCaseMapping:0x1D214 - ,simpleTitleCaseMapping:0x1D214 - }, - { code:0x1D215 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D215 - ,simpleLowerCaseMapping:0x1D215 - ,simpleTitleCaseMapping:0x1D215 - }, - { code:0x1D216 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D216 - ,simpleLowerCaseMapping:0x1D216 - ,simpleTitleCaseMapping:0x1D216 - }, - { code:0x1D217 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D217 - ,simpleLowerCaseMapping:0x1D217 - ,simpleTitleCaseMapping:0x1D217 - }, - { code:0x1D218 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D218 - ,simpleLowerCaseMapping:0x1D218 - ,simpleTitleCaseMapping:0x1D218 - }, - { code:0x1D219 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D219 - ,simpleLowerCaseMapping:0x1D219 - ,simpleTitleCaseMapping:0x1D219 - }, - { code:0x1D21A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21A - ,simpleLowerCaseMapping:0x1D21A - ,simpleTitleCaseMapping:0x1D21A - }, - { code:0x1D21B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21B - ,simpleLowerCaseMapping:0x1D21B - ,simpleTitleCaseMapping:0x1D21B - }, - { code:0x1D21C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21C - ,simpleLowerCaseMapping:0x1D21C - ,simpleTitleCaseMapping:0x1D21C - }, - { code:0x1D21D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21D - ,simpleLowerCaseMapping:0x1D21D - ,simpleTitleCaseMapping:0x1D21D - }, - { code:0x1D21E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21E - ,simpleLowerCaseMapping:0x1D21E - ,simpleTitleCaseMapping:0x1D21E - }, - { code:0x1D21F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D21F - ,simpleLowerCaseMapping:0x1D21F - ,simpleTitleCaseMapping:0x1D21F - }, - { code:0x1D220 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D220 - ,simpleLowerCaseMapping:0x1D220 - ,simpleTitleCaseMapping:0x1D220 - }, - { code:0x1D221 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D221 - ,simpleLowerCaseMapping:0x1D221 - ,simpleTitleCaseMapping:0x1D221 - }, - { code:0x1D222 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D222 - ,simpleLowerCaseMapping:0x1D222 - ,simpleTitleCaseMapping:0x1D222 - }, - { code:0x1D223 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D223 - ,simpleLowerCaseMapping:0x1D223 - ,simpleTitleCaseMapping:0x1D223 - }, - { code:0x1D224 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D224 - ,simpleLowerCaseMapping:0x1D224 - ,simpleTitleCaseMapping:0x1D224 - }, - { code:0x1D225 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D225 - ,simpleLowerCaseMapping:0x1D225 - ,simpleTitleCaseMapping:0x1D225 - }, - { code:0x1D226 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D226 - ,simpleLowerCaseMapping:0x1D226 - ,simpleTitleCaseMapping:0x1D226 - }, - { code:0x1D227 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D227 - ,simpleLowerCaseMapping:0x1D227 - ,simpleTitleCaseMapping:0x1D227 - }, - { code:0x1D228 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D228 - ,simpleLowerCaseMapping:0x1D228 - ,simpleTitleCaseMapping:0x1D228 - }, - { code:0x1D229 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D229 - ,simpleLowerCaseMapping:0x1D229 - ,simpleTitleCaseMapping:0x1D229 - }, - { code:0x1D22A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22A - ,simpleLowerCaseMapping:0x1D22A - ,simpleTitleCaseMapping:0x1D22A - }, - { code:0x1D22B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22B - ,simpleLowerCaseMapping:0x1D22B - ,simpleTitleCaseMapping:0x1D22B - }, - { code:0x1D22C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22C - ,simpleLowerCaseMapping:0x1D22C - ,simpleTitleCaseMapping:0x1D22C - }, - { code:0x1D22D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22D - ,simpleLowerCaseMapping:0x1D22D - ,simpleTitleCaseMapping:0x1D22D - }, - { code:0x1D22E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22E - ,simpleLowerCaseMapping:0x1D22E - ,simpleTitleCaseMapping:0x1D22E - }, - { code:0x1D22F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D22F - ,simpleLowerCaseMapping:0x1D22F - ,simpleTitleCaseMapping:0x1D22F - }, - { code:0x1D230 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D230 - ,simpleLowerCaseMapping:0x1D230 - ,simpleTitleCaseMapping:0x1D230 - }, - { code:0x1D231 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D231 - ,simpleLowerCaseMapping:0x1D231 - ,simpleTitleCaseMapping:0x1D231 - }, - { code:0x1D232 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D232 - ,simpleLowerCaseMapping:0x1D232 - ,simpleTitleCaseMapping:0x1D232 - }, - { code:0x1D233 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D233 - ,simpleLowerCaseMapping:0x1D233 - ,simpleTitleCaseMapping:0x1D233 - }, - { code:0x1D234 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D234 - ,simpleLowerCaseMapping:0x1D234 - ,simpleTitleCaseMapping:0x1D234 - }, - { code:0x1D235 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D235 - ,simpleLowerCaseMapping:0x1D235 - ,simpleTitleCaseMapping:0x1D235 - }, - { code:0x1D236 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D236 - ,simpleLowerCaseMapping:0x1D236 - ,simpleTitleCaseMapping:0x1D236 - }, - { code:0x1D237 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D237 - ,simpleLowerCaseMapping:0x1D237 - ,simpleTitleCaseMapping:0x1D237 - }, - { code:0x1D238 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D238 - ,simpleLowerCaseMapping:0x1D238 - ,simpleTitleCaseMapping:0x1D238 - }, - { code:0x1D239 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D239 - ,simpleLowerCaseMapping:0x1D239 - ,simpleTitleCaseMapping:0x1D239 - }, - { code:0x1D23A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23A - ,simpleLowerCaseMapping:0x1D23A - ,simpleTitleCaseMapping:0x1D23A - }, - { code:0x1D23B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23B - ,simpleLowerCaseMapping:0x1D23B - ,simpleTitleCaseMapping:0x1D23B - }, - { code:0x1D23C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23C - ,simpleLowerCaseMapping:0x1D23C - ,simpleTitleCaseMapping:0x1D23C - }, - { code:0x1D23D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23D - ,simpleLowerCaseMapping:0x1D23D - ,simpleTitleCaseMapping:0x1D23D - }, - { code:0x1D23E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23E - ,simpleLowerCaseMapping:0x1D23E - ,simpleTitleCaseMapping:0x1D23E - }, - { code:0x1D23F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D23F - ,simpleLowerCaseMapping:0x1D23F - ,simpleTitleCaseMapping:0x1D23F - }, - { code:0x1D240 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D240 - ,simpleLowerCaseMapping:0x1D240 - ,simpleTitleCaseMapping:0x1D240 - }, - { code:0x1D241 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D241 - ,simpleLowerCaseMapping:0x1D241 - ,simpleTitleCaseMapping:0x1D241 - }, - { code:0x1D242 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D242 - ,simpleLowerCaseMapping:0x1D242 - ,simpleTitleCaseMapping:0x1D242 - }, - { code:0x1D243 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D243 - ,simpleLowerCaseMapping:0x1D243 - ,simpleTitleCaseMapping:0x1D243 - }, - { code:0x1D244 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0x1D244 - ,simpleLowerCaseMapping:0x1D244 - ,simpleTitleCaseMapping:0x1D244 - }, - { code:0x1D245 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D245 - ,simpleLowerCaseMapping:0x1D245 - ,simpleTitleCaseMapping:0x1D245 - }, - { code:0x1D300 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D300 - ,simpleLowerCaseMapping:0x1D300 - ,simpleTitleCaseMapping:0x1D300 - }, - { code:0x1D301 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D301 - ,simpleLowerCaseMapping:0x1D301 - ,simpleTitleCaseMapping:0x1D301 - }, - { code:0x1D302 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D302 - ,simpleLowerCaseMapping:0x1D302 - ,simpleTitleCaseMapping:0x1D302 - }, - { code:0x1D303 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D303 - ,simpleLowerCaseMapping:0x1D303 - ,simpleTitleCaseMapping:0x1D303 - }, - { code:0x1D304 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D304 - ,simpleLowerCaseMapping:0x1D304 - ,simpleTitleCaseMapping:0x1D304 - }, - { code:0x1D305 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D305 - ,simpleLowerCaseMapping:0x1D305 - ,simpleTitleCaseMapping:0x1D305 - }, - { code:0x1D306 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D306 - ,simpleLowerCaseMapping:0x1D306 - ,simpleTitleCaseMapping:0x1D306 - }, - { code:0x1D307 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D307 - ,simpleLowerCaseMapping:0x1D307 - ,simpleTitleCaseMapping:0x1D307 - }, - { code:0x1D308 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D308 - ,simpleLowerCaseMapping:0x1D308 - ,simpleTitleCaseMapping:0x1D308 - }, - { code:0x1D309 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D309 - ,simpleLowerCaseMapping:0x1D309 - ,simpleTitleCaseMapping:0x1D309 - }, - { code:0x1D30A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30A - ,simpleLowerCaseMapping:0x1D30A - ,simpleTitleCaseMapping:0x1D30A - }, - { code:0x1D30B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30B - ,simpleLowerCaseMapping:0x1D30B - ,simpleTitleCaseMapping:0x1D30B - }, - { code:0x1D30C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30C - ,simpleLowerCaseMapping:0x1D30C - ,simpleTitleCaseMapping:0x1D30C - }, - { code:0x1D30D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30D - ,simpleLowerCaseMapping:0x1D30D - ,simpleTitleCaseMapping:0x1D30D - }, - { code:0x1D30E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30E - ,simpleLowerCaseMapping:0x1D30E - ,simpleTitleCaseMapping:0x1D30E - }, - { code:0x1D30F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D30F - ,simpleLowerCaseMapping:0x1D30F - ,simpleTitleCaseMapping:0x1D30F - }, - { code:0x1D310 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D310 - ,simpleLowerCaseMapping:0x1D310 - ,simpleTitleCaseMapping:0x1D310 - }, - { code:0x1D311 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D311 - ,simpleLowerCaseMapping:0x1D311 - ,simpleTitleCaseMapping:0x1D311 - }, - { code:0x1D312 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D312 - ,simpleLowerCaseMapping:0x1D312 - ,simpleTitleCaseMapping:0x1D312 - }, - { code:0x1D313 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D313 - ,simpleLowerCaseMapping:0x1D313 - ,simpleTitleCaseMapping:0x1D313 - }, - { code:0x1D314 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D314 - ,simpleLowerCaseMapping:0x1D314 - ,simpleTitleCaseMapping:0x1D314 - }, - { code:0x1D315 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D315 - ,simpleLowerCaseMapping:0x1D315 - ,simpleTitleCaseMapping:0x1D315 - }, - { code:0x1D316 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D316 - ,simpleLowerCaseMapping:0x1D316 - ,simpleTitleCaseMapping:0x1D316 - }, - { code:0x1D317 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D317 - ,simpleLowerCaseMapping:0x1D317 - ,simpleTitleCaseMapping:0x1D317 - }, - { code:0x1D318 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D318 - ,simpleLowerCaseMapping:0x1D318 - ,simpleTitleCaseMapping:0x1D318 - }, - { code:0x1D319 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D319 - ,simpleLowerCaseMapping:0x1D319 - ,simpleTitleCaseMapping:0x1D319 - }, - { code:0x1D31A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31A - ,simpleLowerCaseMapping:0x1D31A - ,simpleTitleCaseMapping:0x1D31A - }, - { code:0x1D31B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31B - ,simpleLowerCaseMapping:0x1D31B - ,simpleTitleCaseMapping:0x1D31B - }, - { code:0x1D31C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31C - ,simpleLowerCaseMapping:0x1D31C - ,simpleTitleCaseMapping:0x1D31C - }, - { code:0x1D31D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31D - ,simpleLowerCaseMapping:0x1D31D - ,simpleTitleCaseMapping:0x1D31D - }, - { code:0x1D31E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31E - ,simpleLowerCaseMapping:0x1D31E - ,simpleTitleCaseMapping:0x1D31E - }, - { code:0x1D31F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D31F - ,simpleLowerCaseMapping:0x1D31F - ,simpleTitleCaseMapping:0x1D31F - }, - { code:0x1D320 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D320 - ,simpleLowerCaseMapping:0x1D320 - ,simpleTitleCaseMapping:0x1D320 - }, - { code:0x1D321 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D321 - ,simpleLowerCaseMapping:0x1D321 - ,simpleTitleCaseMapping:0x1D321 - }, - { code:0x1D322 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D322 - ,simpleLowerCaseMapping:0x1D322 - ,simpleTitleCaseMapping:0x1D322 - }, - { code:0x1D323 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D323 - ,simpleLowerCaseMapping:0x1D323 - ,simpleTitleCaseMapping:0x1D323 - }, - { code:0x1D324 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D324 - ,simpleLowerCaseMapping:0x1D324 - ,simpleTitleCaseMapping:0x1D324 - }, - { code:0x1D325 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D325 - ,simpleLowerCaseMapping:0x1D325 - ,simpleTitleCaseMapping:0x1D325 - }, - { code:0x1D326 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D326 - ,simpleLowerCaseMapping:0x1D326 - ,simpleTitleCaseMapping:0x1D326 - }, - { code:0x1D327 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D327 - ,simpleLowerCaseMapping:0x1D327 - ,simpleTitleCaseMapping:0x1D327 - }, - { code:0x1D328 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D328 - ,simpleLowerCaseMapping:0x1D328 - ,simpleTitleCaseMapping:0x1D328 - }, - { code:0x1D329 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D329 - ,simpleLowerCaseMapping:0x1D329 - ,simpleTitleCaseMapping:0x1D329 - }, - { code:0x1D32A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32A - ,simpleLowerCaseMapping:0x1D32A - ,simpleTitleCaseMapping:0x1D32A - }, - { code:0x1D32B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32B - ,simpleLowerCaseMapping:0x1D32B - ,simpleTitleCaseMapping:0x1D32B - }, - { code:0x1D32C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32C - ,simpleLowerCaseMapping:0x1D32C - ,simpleTitleCaseMapping:0x1D32C - }, - { code:0x1D32D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32D - ,simpleLowerCaseMapping:0x1D32D - ,simpleTitleCaseMapping:0x1D32D - }, - { code:0x1D32E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32E - ,simpleLowerCaseMapping:0x1D32E - ,simpleTitleCaseMapping:0x1D32E - }, - { code:0x1D32F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D32F - ,simpleLowerCaseMapping:0x1D32F - ,simpleTitleCaseMapping:0x1D32F - }, - { code:0x1D330 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D330 - ,simpleLowerCaseMapping:0x1D330 - ,simpleTitleCaseMapping:0x1D330 - }, - { code:0x1D331 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D331 - ,simpleLowerCaseMapping:0x1D331 - ,simpleTitleCaseMapping:0x1D331 - }, - { code:0x1D332 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D332 - ,simpleLowerCaseMapping:0x1D332 - ,simpleTitleCaseMapping:0x1D332 - }, - { code:0x1D333 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D333 - ,simpleLowerCaseMapping:0x1D333 - ,simpleTitleCaseMapping:0x1D333 - }, - { code:0x1D334 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D334 - ,simpleLowerCaseMapping:0x1D334 - ,simpleTitleCaseMapping:0x1D334 - }, - { code:0x1D335 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D335 - ,simpleLowerCaseMapping:0x1D335 - ,simpleTitleCaseMapping:0x1D335 - }, - { code:0x1D336 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D336 - ,simpleLowerCaseMapping:0x1D336 - ,simpleTitleCaseMapping:0x1D336 - }, - { code:0x1D337 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D337 - ,simpleLowerCaseMapping:0x1D337 - ,simpleTitleCaseMapping:0x1D337 - }, - { code:0x1D338 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D338 - ,simpleLowerCaseMapping:0x1D338 - ,simpleTitleCaseMapping:0x1D338 - }, - { code:0x1D339 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D339 - ,simpleLowerCaseMapping:0x1D339 - ,simpleTitleCaseMapping:0x1D339 - }, - { code:0x1D33A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33A - ,simpleLowerCaseMapping:0x1D33A - ,simpleTitleCaseMapping:0x1D33A - }, - { code:0x1D33B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33B - ,simpleLowerCaseMapping:0x1D33B - ,simpleTitleCaseMapping:0x1D33B - }, - { code:0x1D33C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33C - ,simpleLowerCaseMapping:0x1D33C - ,simpleTitleCaseMapping:0x1D33C - }, - { code:0x1D33D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33D - ,simpleLowerCaseMapping:0x1D33D - ,simpleTitleCaseMapping:0x1D33D - }, - { code:0x1D33E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33E - ,simpleLowerCaseMapping:0x1D33E - ,simpleTitleCaseMapping:0x1D33E - }, - { code:0x1D33F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D33F - ,simpleLowerCaseMapping:0x1D33F - ,simpleTitleCaseMapping:0x1D33F - }, - { code:0x1D340 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D340 - ,simpleLowerCaseMapping:0x1D340 - ,simpleTitleCaseMapping:0x1D340 - }, - { code:0x1D341 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D341 - ,simpleLowerCaseMapping:0x1D341 - ,simpleTitleCaseMapping:0x1D341 - }, - { code:0x1D342 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D342 - ,simpleLowerCaseMapping:0x1D342 - ,simpleTitleCaseMapping:0x1D342 - }, - { code:0x1D343 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D343 - ,simpleLowerCaseMapping:0x1D343 - ,simpleTitleCaseMapping:0x1D343 - }, - { code:0x1D344 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D344 - ,simpleLowerCaseMapping:0x1D344 - ,simpleTitleCaseMapping:0x1D344 - }, - { code:0x1D345 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D345 - ,simpleLowerCaseMapping:0x1D345 - ,simpleTitleCaseMapping:0x1D345 - }, - { code:0x1D346 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D346 - ,simpleLowerCaseMapping:0x1D346 - ,simpleTitleCaseMapping:0x1D346 - }, - { code:0x1D347 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D347 - ,simpleLowerCaseMapping:0x1D347 - ,simpleTitleCaseMapping:0x1D347 - }, - { code:0x1D348 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D348 - ,simpleLowerCaseMapping:0x1D348 - ,simpleTitleCaseMapping:0x1D348 - }, - { code:0x1D349 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D349 - ,simpleLowerCaseMapping:0x1D349 - ,simpleTitleCaseMapping:0x1D349 - }, - { code:0x1D34A - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34A - ,simpleLowerCaseMapping:0x1D34A - ,simpleTitleCaseMapping:0x1D34A - }, - { code:0x1D34B - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34B - ,simpleLowerCaseMapping:0x1D34B - ,simpleTitleCaseMapping:0x1D34B - }, - { code:0x1D34C - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34C - ,simpleLowerCaseMapping:0x1D34C - ,simpleTitleCaseMapping:0x1D34C - }, - { code:0x1D34D - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34D - ,simpleLowerCaseMapping:0x1D34D - ,simpleTitleCaseMapping:0x1D34D - }, - { code:0x1D34E - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34E - ,simpleLowerCaseMapping:0x1D34E - ,simpleTitleCaseMapping:0x1D34E - }, - { code:0x1D34F - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D34F - ,simpleLowerCaseMapping:0x1D34F - ,simpleTitleCaseMapping:0x1D34F - }, - { code:0x1D350 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D350 - ,simpleLowerCaseMapping:0x1D350 - ,simpleTitleCaseMapping:0x1D350 - }, - { code:0x1D351 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D351 - ,simpleLowerCaseMapping:0x1D351 - ,simpleTitleCaseMapping:0x1D351 - }, - { code:0x1D352 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D352 - ,simpleLowerCaseMapping:0x1D352 - ,simpleTitleCaseMapping:0x1D352 - }, - { code:0x1D353 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D353 - ,simpleLowerCaseMapping:0x1D353 - ,simpleTitleCaseMapping:0x1D353 - }, - { code:0x1D354 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D354 - ,simpleLowerCaseMapping:0x1D354 - ,simpleTitleCaseMapping:0x1D354 - }, - { code:0x1D355 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D355 - ,simpleLowerCaseMapping:0x1D355 - ,simpleTitleCaseMapping:0x1D355 - }, - { code:0x1D356 - ,generalCategory:UnicodeData.GeneralCategory.So - ,simpleUpperCaseMapping:0x1D356 - ,simpleLowerCaseMapping:0x1D356 - ,simpleTitleCaseMapping:0x1D356 - }, - { code:0x1D360 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D360 - ,simpleLowerCaseMapping:0x1D360 - ,simpleTitleCaseMapping:0x1D360 - }, - { code:0x1D361 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D361 - ,simpleLowerCaseMapping:0x1D361 - ,simpleTitleCaseMapping:0x1D361 - }, - { code:0x1D362 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D362 - ,simpleLowerCaseMapping:0x1D362 - ,simpleTitleCaseMapping:0x1D362 - }, - { code:0x1D363 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D363 - ,simpleLowerCaseMapping:0x1D363 - ,simpleTitleCaseMapping:0x1D363 - }, - { code:0x1D364 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D364 - ,simpleLowerCaseMapping:0x1D364 - ,simpleTitleCaseMapping:0x1D364 - }, - { code:0x1D365 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D365 - ,simpleLowerCaseMapping:0x1D365 - ,simpleTitleCaseMapping:0x1D365 - }, - { code:0x1D366 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D366 - ,simpleLowerCaseMapping:0x1D366 - ,simpleTitleCaseMapping:0x1D366 - }, - { code:0x1D367 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D367 - ,simpleLowerCaseMapping:0x1D367 - ,simpleTitleCaseMapping:0x1D367 - }, - { code:0x1D368 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D368 - ,simpleLowerCaseMapping:0x1D368 - ,simpleTitleCaseMapping:0x1D368 - }, - { code:0x1D369 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D369 - ,simpleLowerCaseMapping:0x1D369 - ,simpleTitleCaseMapping:0x1D369 - }, - { code:0x1D36A - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36A - ,simpleLowerCaseMapping:0x1D36A - ,simpleTitleCaseMapping:0x1D36A - }, - { code:0x1D36B - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36B - ,simpleLowerCaseMapping:0x1D36B - ,simpleTitleCaseMapping:0x1D36B - }, - { code:0x1D36C - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36C - ,simpleLowerCaseMapping:0x1D36C - ,simpleTitleCaseMapping:0x1D36C - }, - { code:0x1D36D - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36D - ,simpleLowerCaseMapping:0x1D36D - ,simpleTitleCaseMapping:0x1D36D - }, - { code:0x1D36E - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36E - ,simpleLowerCaseMapping:0x1D36E - ,simpleTitleCaseMapping:0x1D36E - }, - { code:0x1D36F - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D36F - ,simpleLowerCaseMapping:0x1D36F - ,simpleTitleCaseMapping:0x1D36F - }, - { code:0x1D370 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D370 - ,simpleLowerCaseMapping:0x1D370 - ,simpleTitleCaseMapping:0x1D370 - }, - { code:0x1D371 - ,generalCategory:UnicodeData.GeneralCategory.No - ,simpleUpperCaseMapping:0x1D371 - ,simpleLowerCaseMapping:0x1D371 - ,simpleTitleCaseMapping:0x1D371 - }, - { code:0x1D400 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D400 - ,simpleLowerCaseMapping:0x1D400 - ,simpleTitleCaseMapping:0x1D400 - }, - { code:0x1D401 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D401 - ,simpleLowerCaseMapping:0x1D401 - ,simpleTitleCaseMapping:0x1D401 - }, - { code:0x1D402 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D402 - ,simpleLowerCaseMapping:0x1D402 - ,simpleTitleCaseMapping:0x1D402 - }, - { code:0x1D403 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D403 - ,simpleLowerCaseMapping:0x1D403 - ,simpleTitleCaseMapping:0x1D403 - }, - { code:0x1D404 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D404 - ,simpleLowerCaseMapping:0x1D404 - ,simpleTitleCaseMapping:0x1D404 - }, - { code:0x1D405 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D405 - ,simpleLowerCaseMapping:0x1D405 - ,simpleTitleCaseMapping:0x1D405 - }, - { code:0x1D406 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D406 - ,simpleLowerCaseMapping:0x1D406 - ,simpleTitleCaseMapping:0x1D406 - }, - { code:0x1D407 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D407 - ,simpleLowerCaseMapping:0x1D407 - ,simpleTitleCaseMapping:0x1D407 - }, - { code:0x1D408 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D408 - ,simpleLowerCaseMapping:0x1D408 - ,simpleTitleCaseMapping:0x1D408 - }, - { code:0x1D409 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D409 - ,simpleLowerCaseMapping:0x1D409 - ,simpleTitleCaseMapping:0x1D409 - }, - { code:0x1D40A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40A - ,simpleLowerCaseMapping:0x1D40A - ,simpleTitleCaseMapping:0x1D40A - }, - { code:0x1D40B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40B - ,simpleLowerCaseMapping:0x1D40B - ,simpleTitleCaseMapping:0x1D40B - }, - { code:0x1D40C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40C - ,simpleLowerCaseMapping:0x1D40C - ,simpleTitleCaseMapping:0x1D40C - }, - { code:0x1D40D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40D - ,simpleLowerCaseMapping:0x1D40D - ,simpleTitleCaseMapping:0x1D40D - }, - { code:0x1D40E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40E - ,simpleLowerCaseMapping:0x1D40E - ,simpleTitleCaseMapping:0x1D40E - }, - { code:0x1D40F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D40F - ,simpleLowerCaseMapping:0x1D40F - ,simpleTitleCaseMapping:0x1D40F - }, - { code:0x1D410 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D410 - ,simpleLowerCaseMapping:0x1D410 - ,simpleTitleCaseMapping:0x1D410 - }, - { code:0x1D411 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D411 - ,simpleLowerCaseMapping:0x1D411 - ,simpleTitleCaseMapping:0x1D411 - }, - { code:0x1D412 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D412 - ,simpleLowerCaseMapping:0x1D412 - ,simpleTitleCaseMapping:0x1D412 - }, - { code:0x1D413 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D413 - ,simpleLowerCaseMapping:0x1D413 - ,simpleTitleCaseMapping:0x1D413 - }, - { code:0x1D414 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D414 - ,simpleLowerCaseMapping:0x1D414 - ,simpleTitleCaseMapping:0x1D414 - }, - { code:0x1D415 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D415 - ,simpleLowerCaseMapping:0x1D415 - ,simpleTitleCaseMapping:0x1D415 - }, - { code:0x1D416 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D416 - ,simpleLowerCaseMapping:0x1D416 - ,simpleTitleCaseMapping:0x1D416 - }, - { code:0x1D417 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D417 - ,simpleLowerCaseMapping:0x1D417 - ,simpleTitleCaseMapping:0x1D417 - }, - { code:0x1D418 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D418 - ,simpleLowerCaseMapping:0x1D418 - ,simpleTitleCaseMapping:0x1D418 - }, - { code:0x1D419 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D419 - ,simpleLowerCaseMapping:0x1D419 - ,simpleTitleCaseMapping:0x1D419 - }, - { code:0x1D41A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41A - ,simpleLowerCaseMapping:0x1D41A - ,simpleTitleCaseMapping:0x1D41A - }, - { code:0x1D41B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41B - ,simpleLowerCaseMapping:0x1D41B - ,simpleTitleCaseMapping:0x1D41B - }, - { code:0x1D41C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41C - ,simpleLowerCaseMapping:0x1D41C - ,simpleTitleCaseMapping:0x1D41C - }, - { code:0x1D41D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41D - ,simpleLowerCaseMapping:0x1D41D - ,simpleTitleCaseMapping:0x1D41D - }, - { code:0x1D41E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41E - ,simpleLowerCaseMapping:0x1D41E - ,simpleTitleCaseMapping:0x1D41E - }, - { code:0x1D41F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D41F - ,simpleLowerCaseMapping:0x1D41F - ,simpleTitleCaseMapping:0x1D41F - }, - { code:0x1D420 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D420 - ,simpleLowerCaseMapping:0x1D420 - ,simpleTitleCaseMapping:0x1D420 - }, - { code:0x1D421 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D421 - ,simpleLowerCaseMapping:0x1D421 - ,simpleTitleCaseMapping:0x1D421 - }, - { code:0x1D422 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D422 - ,simpleLowerCaseMapping:0x1D422 - ,simpleTitleCaseMapping:0x1D422 - }, - { code:0x1D423 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D423 - ,simpleLowerCaseMapping:0x1D423 - ,simpleTitleCaseMapping:0x1D423 - }, - { code:0x1D424 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D424 - ,simpleLowerCaseMapping:0x1D424 - ,simpleTitleCaseMapping:0x1D424 - }, - { code:0x1D425 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D425 - ,simpleLowerCaseMapping:0x1D425 - ,simpleTitleCaseMapping:0x1D425 - }, - { code:0x1D426 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D426 - ,simpleLowerCaseMapping:0x1D426 - ,simpleTitleCaseMapping:0x1D426 - }, - { code:0x1D427 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D427 - ,simpleLowerCaseMapping:0x1D427 - ,simpleTitleCaseMapping:0x1D427 - }, - { code:0x1D428 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D428 - ,simpleLowerCaseMapping:0x1D428 - ,simpleTitleCaseMapping:0x1D428 - }, - { code:0x1D429 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D429 - ,simpleLowerCaseMapping:0x1D429 - ,simpleTitleCaseMapping:0x1D429 - }, - { code:0x1D42A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42A - ,simpleLowerCaseMapping:0x1D42A - ,simpleTitleCaseMapping:0x1D42A - }, - { code:0x1D42B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42B - ,simpleLowerCaseMapping:0x1D42B - ,simpleTitleCaseMapping:0x1D42B - }, - { code:0x1D42C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42C - ,simpleLowerCaseMapping:0x1D42C - ,simpleTitleCaseMapping:0x1D42C - }, - { code:0x1D42D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42D - ,simpleLowerCaseMapping:0x1D42D - ,simpleTitleCaseMapping:0x1D42D - }, - { code:0x1D42E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42E - ,simpleLowerCaseMapping:0x1D42E - ,simpleTitleCaseMapping:0x1D42E - }, - { code:0x1D42F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D42F - ,simpleLowerCaseMapping:0x1D42F - ,simpleTitleCaseMapping:0x1D42F - }, - { code:0x1D430 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D430 - ,simpleLowerCaseMapping:0x1D430 - ,simpleTitleCaseMapping:0x1D430 - }, - { code:0x1D431 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D431 - ,simpleLowerCaseMapping:0x1D431 - ,simpleTitleCaseMapping:0x1D431 - }, - { code:0x1D432 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D432 - ,simpleLowerCaseMapping:0x1D432 - ,simpleTitleCaseMapping:0x1D432 - }, - { code:0x1D433 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D433 - ,simpleLowerCaseMapping:0x1D433 - ,simpleTitleCaseMapping:0x1D433 - }, - { code:0x1D434 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D434 - ,simpleLowerCaseMapping:0x1D434 - ,simpleTitleCaseMapping:0x1D434 - }, - { code:0x1D435 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D435 - ,simpleLowerCaseMapping:0x1D435 - ,simpleTitleCaseMapping:0x1D435 - }, - { code:0x1D436 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D436 - ,simpleLowerCaseMapping:0x1D436 - ,simpleTitleCaseMapping:0x1D436 - }, - { code:0x1D437 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D437 - ,simpleLowerCaseMapping:0x1D437 - ,simpleTitleCaseMapping:0x1D437 - }, - { code:0x1D438 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D438 - ,simpleLowerCaseMapping:0x1D438 - ,simpleTitleCaseMapping:0x1D438 - }, - { code:0x1D439 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D439 - ,simpleLowerCaseMapping:0x1D439 - ,simpleTitleCaseMapping:0x1D439 - }, - { code:0x1D43A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43A - ,simpleLowerCaseMapping:0x1D43A - ,simpleTitleCaseMapping:0x1D43A - }, - { code:0x1D43B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43B - ,simpleLowerCaseMapping:0x1D43B - ,simpleTitleCaseMapping:0x1D43B - }, - { code:0x1D43C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43C - ,simpleLowerCaseMapping:0x1D43C - ,simpleTitleCaseMapping:0x1D43C - }, - { code:0x1D43D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43D - ,simpleLowerCaseMapping:0x1D43D - ,simpleTitleCaseMapping:0x1D43D - }, - { code:0x1D43E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43E - ,simpleLowerCaseMapping:0x1D43E - ,simpleTitleCaseMapping:0x1D43E - }, - { code:0x1D43F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D43F - ,simpleLowerCaseMapping:0x1D43F - ,simpleTitleCaseMapping:0x1D43F - }, - { code:0x1D440 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D440 - ,simpleLowerCaseMapping:0x1D440 - ,simpleTitleCaseMapping:0x1D440 - }, - { code:0x1D441 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D441 - ,simpleLowerCaseMapping:0x1D441 - ,simpleTitleCaseMapping:0x1D441 - }, - { code:0x1D442 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D442 - ,simpleLowerCaseMapping:0x1D442 - ,simpleTitleCaseMapping:0x1D442 - }, - { code:0x1D443 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D443 - ,simpleLowerCaseMapping:0x1D443 - ,simpleTitleCaseMapping:0x1D443 - }, - { code:0x1D444 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D444 - ,simpleLowerCaseMapping:0x1D444 - ,simpleTitleCaseMapping:0x1D444 - }, - { code:0x1D445 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D445 - ,simpleLowerCaseMapping:0x1D445 - ,simpleTitleCaseMapping:0x1D445 - }, - { code:0x1D446 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D446 - ,simpleLowerCaseMapping:0x1D446 - ,simpleTitleCaseMapping:0x1D446 - }, - { code:0x1D447 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D447 - ,simpleLowerCaseMapping:0x1D447 - ,simpleTitleCaseMapping:0x1D447 - }, - { code:0x1D448 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D448 - ,simpleLowerCaseMapping:0x1D448 - ,simpleTitleCaseMapping:0x1D448 - }, - { code:0x1D449 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D449 - ,simpleLowerCaseMapping:0x1D449 - ,simpleTitleCaseMapping:0x1D449 - }, - { code:0x1D44A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D44A - ,simpleLowerCaseMapping:0x1D44A - ,simpleTitleCaseMapping:0x1D44A - }, - { code:0x1D44B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D44B - ,simpleLowerCaseMapping:0x1D44B - ,simpleTitleCaseMapping:0x1D44B - }, - { code:0x1D44C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D44C - ,simpleLowerCaseMapping:0x1D44C - ,simpleTitleCaseMapping:0x1D44C - }, - { code:0x1D44D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D44D - ,simpleLowerCaseMapping:0x1D44D - ,simpleTitleCaseMapping:0x1D44D - }, - { code:0x1D44E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D44E - ,simpleLowerCaseMapping:0x1D44E - ,simpleTitleCaseMapping:0x1D44E - }, - { code:0x1D44F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D44F - ,simpleLowerCaseMapping:0x1D44F - ,simpleTitleCaseMapping:0x1D44F - }, - { code:0x1D450 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D450 - ,simpleLowerCaseMapping:0x1D450 - ,simpleTitleCaseMapping:0x1D450 - }, - { code:0x1D451 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D451 - ,simpleLowerCaseMapping:0x1D451 - ,simpleTitleCaseMapping:0x1D451 - }, - { code:0x1D452 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D452 - ,simpleLowerCaseMapping:0x1D452 - ,simpleTitleCaseMapping:0x1D452 - }, - { code:0x1D453 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D453 - ,simpleLowerCaseMapping:0x1D453 - ,simpleTitleCaseMapping:0x1D453 - }, - { code:0x1D454 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D454 - ,simpleLowerCaseMapping:0x1D454 - ,simpleTitleCaseMapping:0x1D454 - }, - { code:0x1D456 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D456 - ,simpleLowerCaseMapping:0x1D456 - ,simpleTitleCaseMapping:0x1D456 - }, - { code:0x1D457 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D457 - ,simpleLowerCaseMapping:0x1D457 - ,simpleTitleCaseMapping:0x1D457 - }, - { code:0x1D458 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D458 - ,simpleLowerCaseMapping:0x1D458 - ,simpleTitleCaseMapping:0x1D458 - }, - { code:0x1D459 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D459 - ,simpleLowerCaseMapping:0x1D459 - ,simpleTitleCaseMapping:0x1D459 - }, - { code:0x1D45A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45A - ,simpleLowerCaseMapping:0x1D45A - ,simpleTitleCaseMapping:0x1D45A - }, - { code:0x1D45B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45B - ,simpleLowerCaseMapping:0x1D45B - ,simpleTitleCaseMapping:0x1D45B - }, - { code:0x1D45C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45C - ,simpleLowerCaseMapping:0x1D45C - ,simpleTitleCaseMapping:0x1D45C - }, - { code:0x1D45D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45D - ,simpleLowerCaseMapping:0x1D45D - ,simpleTitleCaseMapping:0x1D45D - }, - { code:0x1D45E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45E - ,simpleLowerCaseMapping:0x1D45E - ,simpleTitleCaseMapping:0x1D45E - }, - { code:0x1D45F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D45F - ,simpleLowerCaseMapping:0x1D45F - ,simpleTitleCaseMapping:0x1D45F - }, - { code:0x1D460 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D460 - ,simpleLowerCaseMapping:0x1D460 - ,simpleTitleCaseMapping:0x1D460 - }, - { code:0x1D461 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D461 - ,simpleLowerCaseMapping:0x1D461 - ,simpleTitleCaseMapping:0x1D461 - }, - { code:0x1D462 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D462 - ,simpleLowerCaseMapping:0x1D462 - ,simpleTitleCaseMapping:0x1D462 - }, - { code:0x1D463 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D463 - ,simpleLowerCaseMapping:0x1D463 - ,simpleTitleCaseMapping:0x1D463 - }, - { code:0x1D464 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D464 - ,simpleLowerCaseMapping:0x1D464 - ,simpleTitleCaseMapping:0x1D464 - }, - { code:0x1D465 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D465 - ,simpleLowerCaseMapping:0x1D465 - ,simpleTitleCaseMapping:0x1D465 - }, - { code:0x1D466 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D466 - ,simpleLowerCaseMapping:0x1D466 - ,simpleTitleCaseMapping:0x1D466 - }, - { code:0x1D467 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D467 - ,simpleLowerCaseMapping:0x1D467 - ,simpleTitleCaseMapping:0x1D467 - }, - { code:0x1D468 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D468 - ,simpleLowerCaseMapping:0x1D468 - ,simpleTitleCaseMapping:0x1D468 - }, - { code:0x1D469 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D469 - ,simpleLowerCaseMapping:0x1D469 - ,simpleTitleCaseMapping:0x1D469 - }, - { code:0x1D46A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46A - ,simpleLowerCaseMapping:0x1D46A - ,simpleTitleCaseMapping:0x1D46A - }, - { code:0x1D46B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46B - ,simpleLowerCaseMapping:0x1D46B - ,simpleTitleCaseMapping:0x1D46B - }, - { code:0x1D46C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46C - ,simpleLowerCaseMapping:0x1D46C - ,simpleTitleCaseMapping:0x1D46C - }, - { code:0x1D46D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46D - ,simpleLowerCaseMapping:0x1D46D - ,simpleTitleCaseMapping:0x1D46D - }, - { code:0x1D46E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46E - ,simpleLowerCaseMapping:0x1D46E - ,simpleTitleCaseMapping:0x1D46E - }, - { code:0x1D46F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D46F - ,simpleLowerCaseMapping:0x1D46F - ,simpleTitleCaseMapping:0x1D46F - }, - { code:0x1D470 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D470 - ,simpleLowerCaseMapping:0x1D470 - ,simpleTitleCaseMapping:0x1D470 - }, - { code:0x1D471 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D471 - ,simpleLowerCaseMapping:0x1D471 - ,simpleTitleCaseMapping:0x1D471 - }, - { code:0x1D472 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D472 - ,simpleLowerCaseMapping:0x1D472 - ,simpleTitleCaseMapping:0x1D472 - }, - { code:0x1D473 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D473 - ,simpleLowerCaseMapping:0x1D473 - ,simpleTitleCaseMapping:0x1D473 - }, - { code:0x1D474 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D474 - ,simpleLowerCaseMapping:0x1D474 - ,simpleTitleCaseMapping:0x1D474 - }, - { code:0x1D475 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D475 - ,simpleLowerCaseMapping:0x1D475 - ,simpleTitleCaseMapping:0x1D475 - }, - { code:0x1D476 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D476 - ,simpleLowerCaseMapping:0x1D476 - ,simpleTitleCaseMapping:0x1D476 - }, - { code:0x1D477 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D477 - ,simpleLowerCaseMapping:0x1D477 - ,simpleTitleCaseMapping:0x1D477 - }, - { code:0x1D478 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D478 - ,simpleLowerCaseMapping:0x1D478 - ,simpleTitleCaseMapping:0x1D478 - }, - { code:0x1D479 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D479 - ,simpleLowerCaseMapping:0x1D479 - ,simpleTitleCaseMapping:0x1D479 - }, - { code:0x1D47A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47A - ,simpleLowerCaseMapping:0x1D47A - ,simpleTitleCaseMapping:0x1D47A - }, - { code:0x1D47B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47B - ,simpleLowerCaseMapping:0x1D47B - ,simpleTitleCaseMapping:0x1D47B - }, - { code:0x1D47C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47C - ,simpleLowerCaseMapping:0x1D47C - ,simpleTitleCaseMapping:0x1D47C - }, - { code:0x1D47D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47D - ,simpleLowerCaseMapping:0x1D47D - ,simpleTitleCaseMapping:0x1D47D - }, - { code:0x1D47E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47E - ,simpleLowerCaseMapping:0x1D47E - ,simpleTitleCaseMapping:0x1D47E - }, - { code:0x1D47F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D47F - ,simpleLowerCaseMapping:0x1D47F - ,simpleTitleCaseMapping:0x1D47F - }, - { code:0x1D480 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D480 - ,simpleLowerCaseMapping:0x1D480 - ,simpleTitleCaseMapping:0x1D480 - }, - { code:0x1D481 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D481 - ,simpleLowerCaseMapping:0x1D481 - ,simpleTitleCaseMapping:0x1D481 - }, - { code:0x1D482 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D482 - ,simpleLowerCaseMapping:0x1D482 - ,simpleTitleCaseMapping:0x1D482 - }, - { code:0x1D483 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D483 - ,simpleLowerCaseMapping:0x1D483 - ,simpleTitleCaseMapping:0x1D483 - }, - { code:0x1D484 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D484 - ,simpleLowerCaseMapping:0x1D484 - ,simpleTitleCaseMapping:0x1D484 - }, - { code:0x1D485 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D485 - ,simpleLowerCaseMapping:0x1D485 - ,simpleTitleCaseMapping:0x1D485 - }, - { code:0x1D486 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D486 - ,simpleLowerCaseMapping:0x1D486 - ,simpleTitleCaseMapping:0x1D486 - }, - { code:0x1D487 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D487 - ,simpleLowerCaseMapping:0x1D487 - ,simpleTitleCaseMapping:0x1D487 - }, - { code:0x1D488 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D488 - ,simpleLowerCaseMapping:0x1D488 - ,simpleTitleCaseMapping:0x1D488 - }, - { code:0x1D489 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D489 - ,simpleLowerCaseMapping:0x1D489 - ,simpleTitleCaseMapping:0x1D489 - }, - { code:0x1D48A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48A - ,simpleLowerCaseMapping:0x1D48A - ,simpleTitleCaseMapping:0x1D48A - }, - { code:0x1D48B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48B - ,simpleLowerCaseMapping:0x1D48B - ,simpleTitleCaseMapping:0x1D48B - }, - { code:0x1D48C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48C - ,simpleLowerCaseMapping:0x1D48C - ,simpleTitleCaseMapping:0x1D48C - }, - { code:0x1D48D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48D - ,simpleLowerCaseMapping:0x1D48D - ,simpleTitleCaseMapping:0x1D48D - }, - { code:0x1D48E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48E - ,simpleLowerCaseMapping:0x1D48E - ,simpleTitleCaseMapping:0x1D48E - }, - { code:0x1D48F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D48F - ,simpleLowerCaseMapping:0x1D48F - ,simpleTitleCaseMapping:0x1D48F - }, - { code:0x1D490 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D490 - ,simpleLowerCaseMapping:0x1D490 - ,simpleTitleCaseMapping:0x1D490 - }, - { code:0x1D491 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D491 - ,simpleLowerCaseMapping:0x1D491 - ,simpleTitleCaseMapping:0x1D491 - }, - { code:0x1D492 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D492 - ,simpleLowerCaseMapping:0x1D492 - ,simpleTitleCaseMapping:0x1D492 - }, - { code:0x1D493 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D493 - ,simpleLowerCaseMapping:0x1D493 - ,simpleTitleCaseMapping:0x1D493 - }, - { code:0x1D494 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D494 - ,simpleLowerCaseMapping:0x1D494 - ,simpleTitleCaseMapping:0x1D494 - }, - { code:0x1D495 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D495 - ,simpleLowerCaseMapping:0x1D495 - ,simpleTitleCaseMapping:0x1D495 - }, - { code:0x1D496 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D496 - ,simpleLowerCaseMapping:0x1D496 - ,simpleTitleCaseMapping:0x1D496 - }, - { code:0x1D497 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D497 - ,simpleLowerCaseMapping:0x1D497 - ,simpleTitleCaseMapping:0x1D497 - }, - { code:0x1D498 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D498 - ,simpleLowerCaseMapping:0x1D498 - ,simpleTitleCaseMapping:0x1D498 - }, - { code:0x1D499 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D499 - ,simpleLowerCaseMapping:0x1D499 - ,simpleTitleCaseMapping:0x1D499 - }, - { code:0x1D49A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D49A - ,simpleLowerCaseMapping:0x1D49A - ,simpleTitleCaseMapping:0x1D49A - }, - { code:0x1D49B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D49B - ,simpleLowerCaseMapping:0x1D49B - ,simpleTitleCaseMapping:0x1D49B - }, - { code:0x1D49C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D49C - ,simpleLowerCaseMapping:0x1D49C - ,simpleTitleCaseMapping:0x1D49C - }, - { code:0x1D49E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D49E - ,simpleLowerCaseMapping:0x1D49E - ,simpleTitleCaseMapping:0x1D49E - }, - { code:0x1D49F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D49F - ,simpleLowerCaseMapping:0x1D49F - ,simpleTitleCaseMapping:0x1D49F - }, - { code:0x1D4A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4A2 - ,simpleLowerCaseMapping:0x1D4A2 - ,simpleTitleCaseMapping:0x1D4A2 - }, - { code:0x1D4A5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4A5 - ,simpleLowerCaseMapping:0x1D4A5 - ,simpleTitleCaseMapping:0x1D4A5 - }, - { code:0x1D4A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4A6 - ,simpleLowerCaseMapping:0x1D4A6 - ,simpleTitleCaseMapping:0x1D4A6 - }, - { code:0x1D4A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4A9 - ,simpleLowerCaseMapping:0x1D4A9 - ,simpleTitleCaseMapping:0x1D4A9 - }, - { code:0x1D4AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4AA - ,simpleLowerCaseMapping:0x1D4AA - ,simpleTitleCaseMapping:0x1D4AA - }, - { code:0x1D4AB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4AB - ,simpleLowerCaseMapping:0x1D4AB - ,simpleTitleCaseMapping:0x1D4AB - }, - { code:0x1D4AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4AC - ,simpleLowerCaseMapping:0x1D4AC - ,simpleTitleCaseMapping:0x1D4AC - }, - { code:0x1D4AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4AE - ,simpleLowerCaseMapping:0x1D4AE - ,simpleTitleCaseMapping:0x1D4AE - }, - { code:0x1D4AF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4AF - ,simpleLowerCaseMapping:0x1D4AF - ,simpleTitleCaseMapping:0x1D4AF - }, - { code:0x1D4B0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B0 - ,simpleLowerCaseMapping:0x1D4B0 - ,simpleTitleCaseMapping:0x1D4B0 - }, - { code:0x1D4B1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B1 - ,simpleLowerCaseMapping:0x1D4B1 - ,simpleTitleCaseMapping:0x1D4B1 - }, - { code:0x1D4B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B2 - ,simpleLowerCaseMapping:0x1D4B2 - ,simpleTitleCaseMapping:0x1D4B2 - }, - { code:0x1D4B3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B3 - ,simpleLowerCaseMapping:0x1D4B3 - ,simpleTitleCaseMapping:0x1D4B3 - }, - { code:0x1D4B4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B4 - ,simpleLowerCaseMapping:0x1D4B4 - ,simpleTitleCaseMapping:0x1D4B4 - }, - { code:0x1D4B5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4B5 - ,simpleLowerCaseMapping:0x1D4B5 - ,simpleTitleCaseMapping:0x1D4B5 - }, - { code:0x1D4B6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4B6 - ,simpleLowerCaseMapping:0x1D4B6 - ,simpleTitleCaseMapping:0x1D4B6 - }, - { code:0x1D4B7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4B7 - ,simpleLowerCaseMapping:0x1D4B7 - ,simpleTitleCaseMapping:0x1D4B7 - }, - { code:0x1D4B8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4B8 - ,simpleLowerCaseMapping:0x1D4B8 - ,simpleTitleCaseMapping:0x1D4B8 - }, - { code:0x1D4B9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4B9 - ,simpleLowerCaseMapping:0x1D4B9 - ,simpleTitleCaseMapping:0x1D4B9 - }, - { code:0x1D4BB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4BB - ,simpleLowerCaseMapping:0x1D4BB - ,simpleTitleCaseMapping:0x1D4BB - }, - { code:0x1D4BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4BD - ,simpleLowerCaseMapping:0x1D4BD - ,simpleTitleCaseMapping:0x1D4BD - }, - { code:0x1D4BE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4BE - ,simpleLowerCaseMapping:0x1D4BE - ,simpleTitleCaseMapping:0x1D4BE - }, - { code:0x1D4BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4BF - ,simpleLowerCaseMapping:0x1D4BF - ,simpleTitleCaseMapping:0x1D4BF - }, - { code:0x1D4C0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C0 - ,simpleLowerCaseMapping:0x1D4C0 - ,simpleTitleCaseMapping:0x1D4C0 - }, - { code:0x1D4C1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C1 - ,simpleLowerCaseMapping:0x1D4C1 - ,simpleTitleCaseMapping:0x1D4C1 - }, - { code:0x1D4C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C2 - ,simpleLowerCaseMapping:0x1D4C2 - ,simpleTitleCaseMapping:0x1D4C2 - }, - { code:0x1D4C3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C3 - ,simpleLowerCaseMapping:0x1D4C3 - ,simpleTitleCaseMapping:0x1D4C3 - }, - { code:0x1D4C5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C5 - ,simpleLowerCaseMapping:0x1D4C5 - ,simpleTitleCaseMapping:0x1D4C5 - }, - { code:0x1D4C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C6 - ,simpleLowerCaseMapping:0x1D4C6 - ,simpleTitleCaseMapping:0x1D4C6 - }, - { code:0x1D4C7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C7 - ,simpleLowerCaseMapping:0x1D4C7 - ,simpleTitleCaseMapping:0x1D4C7 - }, - { code:0x1D4C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C8 - ,simpleLowerCaseMapping:0x1D4C8 - ,simpleTitleCaseMapping:0x1D4C8 - }, - { code:0x1D4C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4C9 - ,simpleLowerCaseMapping:0x1D4C9 - ,simpleTitleCaseMapping:0x1D4C9 - }, - { code:0x1D4CA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CA - ,simpleLowerCaseMapping:0x1D4CA - ,simpleTitleCaseMapping:0x1D4CA - }, - { code:0x1D4CB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CB - ,simpleLowerCaseMapping:0x1D4CB - ,simpleTitleCaseMapping:0x1D4CB - }, - { code:0x1D4CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CC - ,simpleLowerCaseMapping:0x1D4CC - ,simpleTitleCaseMapping:0x1D4CC - }, - { code:0x1D4CD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CD - ,simpleLowerCaseMapping:0x1D4CD - ,simpleTitleCaseMapping:0x1D4CD - }, - { code:0x1D4CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CE - ,simpleLowerCaseMapping:0x1D4CE - ,simpleTitleCaseMapping:0x1D4CE - }, - { code:0x1D4CF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4CF - ,simpleLowerCaseMapping:0x1D4CF - ,simpleTitleCaseMapping:0x1D4CF - }, - { code:0x1D4D0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D0 - ,simpleLowerCaseMapping:0x1D4D0 - ,simpleTitleCaseMapping:0x1D4D0 - }, - { code:0x1D4D1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D1 - ,simpleLowerCaseMapping:0x1D4D1 - ,simpleTitleCaseMapping:0x1D4D1 - }, - { code:0x1D4D2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D2 - ,simpleLowerCaseMapping:0x1D4D2 - ,simpleTitleCaseMapping:0x1D4D2 - }, - { code:0x1D4D3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D3 - ,simpleLowerCaseMapping:0x1D4D3 - ,simpleTitleCaseMapping:0x1D4D3 - }, - { code:0x1D4D4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D4 - ,simpleLowerCaseMapping:0x1D4D4 - ,simpleTitleCaseMapping:0x1D4D4 - }, - { code:0x1D4D5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D5 - ,simpleLowerCaseMapping:0x1D4D5 - ,simpleTitleCaseMapping:0x1D4D5 - }, - { code:0x1D4D6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D6 - ,simpleLowerCaseMapping:0x1D4D6 - ,simpleTitleCaseMapping:0x1D4D6 - }, - { code:0x1D4D7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D7 - ,simpleLowerCaseMapping:0x1D4D7 - ,simpleTitleCaseMapping:0x1D4D7 - }, - { code:0x1D4D8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D8 - ,simpleLowerCaseMapping:0x1D4D8 - ,simpleTitleCaseMapping:0x1D4D8 - }, - { code:0x1D4D9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4D9 - ,simpleLowerCaseMapping:0x1D4D9 - ,simpleTitleCaseMapping:0x1D4D9 - }, - { code:0x1D4DA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DA - ,simpleLowerCaseMapping:0x1D4DA - ,simpleTitleCaseMapping:0x1D4DA - }, - { code:0x1D4DB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DB - ,simpleLowerCaseMapping:0x1D4DB - ,simpleTitleCaseMapping:0x1D4DB - }, - { code:0x1D4DC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DC - ,simpleLowerCaseMapping:0x1D4DC - ,simpleTitleCaseMapping:0x1D4DC - }, - { code:0x1D4DD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DD - ,simpleLowerCaseMapping:0x1D4DD - ,simpleTitleCaseMapping:0x1D4DD - }, - { code:0x1D4DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DE - ,simpleLowerCaseMapping:0x1D4DE - ,simpleTitleCaseMapping:0x1D4DE - }, - { code:0x1D4DF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4DF - ,simpleLowerCaseMapping:0x1D4DF - ,simpleTitleCaseMapping:0x1D4DF - }, - { code:0x1D4E0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E0 - ,simpleLowerCaseMapping:0x1D4E0 - ,simpleTitleCaseMapping:0x1D4E0 - }, - { code:0x1D4E1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E1 - ,simpleLowerCaseMapping:0x1D4E1 - ,simpleTitleCaseMapping:0x1D4E1 - }, - { code:0x1D4E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E2 - ,simpleLowerCaseMapping:0x1D4E2 - ,simpleTitleCaseMapping:0x1D4E2 - }, - { code:0x1D4E3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E3 - ,simpleLowerCaseMapping:0x1D4E3 - ,simpleTitleCaseMapping:0x1D4E3 - }, - { code:0x1D4E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E4 - ,simpleLowerCaseMapping:0x1D4E4 - ,simpleTitleCaseMapping:0x1D4E4 - }, - { code:0x1D4E5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E5 - ,simpleLowerCaseMapping:0x1D4E5 - ,simpleTitleCaseMapping:0x1D4E5 - }, - { code:0x1D4E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E6 - ,simpleLowerCaseMapping:0x1D4E6 - ,simpleTitleCaseMapping:0x1D4E6 - }, - { code:0x1D4E7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E7 - ,simpleLowerCaseMapping:0x1D4E7 - ,simpleTitleCaseMapping:0x1D4E7 - }, - { code:0x1D4E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E8 - ,simpleLowerCaseMapping:0x1D4E8 - ,simpleTitleCaseMapping:0x1D4E8 - }, - { code:0x1D4E9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D4E9 - ,simpleLowerCaseMapping:0x1D4E9 - ,simpleTitleCaseMapping:0x1D4E9 - }, - { code:0x1D4EA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4EA - ,simpleLowerCaseMapping:0x1D4EA - ,simpleTitleCaseMapping:0x1D4EA - }, - { code:0x1D4EB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4EB - ,simpleLowerCaseMapping:0x1D4EB - ,simpleTitleCaseMapping:0x1D4EB - }, - { code:0x1D4EC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4EC - ,simpleLowerCaseMapping:0x1D4EC - ,simpleTitleCaseMapping:0x1D4EC - }, - { code:0x1D4ED - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4ED - ,simpleLowerCaseMapping:0x1D4ED - ,simpleTitleCaseMapping:0x1D4ED - }, - { code:0x1D4EE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4EE - ,simpleLowerCaseMapping:0x1D4EE - ,simpleTitleCaseMapping:0x1D4EE - }, - { code:0x1D4EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4EF - ,simpleLowerCaseMapping:0x1D4EF - ,simpleTitleCaseMapping:0x1D4EF - }, - { code:0x1D4F0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F0 - ,simpleLowerCaseMapping:0x1D4F0 - ,simpleTitleCaseMapping:0x1D4F0 - }, - { code:0x1D4F1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F1 - ,simpleLowerCaseMapping:0x1D4F1 - ,simpleTitleCaseMapping:0x1D4F1 - }, - { code:0x1D4F2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F2 - ,simpleLowerCaseMapping:0x1D4F2 - ,simpleTitleCaseMapping:0x1D4F2 - }, - { code:0x1D4F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F3 - ,simpleLowerCaseMapping:0x1D4F3 - ,simpleTitleCaseMapping:0x1D4F3 - }, - { code:0x1D4F4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F4 - ,simpleLowerCaseMapping:0x1D4F4 - ,simpleTitleCaseMapping:0x1D4F4 - }, - { code:0x1D4F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F5 - ,simpleLowerCaseMapping:0x1D4F5 - ,simpleTitleCaseMapping:0x1D4F5 - }, - { code:0x1D4F6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F6 - ,simpleLowerCaseMapping:0x1D4F6 - ,simpleTitleCaseMapping:0x1D4F6 - }, - { code:0x1D4F7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F7 - ,simpleLowerCaseMapping:0x1D4F7 - ,simpleTitleCaseMapping:0x1D4F7 - }, - { code:0x1D4F8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F8 - ,simpleLowerCaseMapping:0x1D4F8 - ,simpleTitleCaseMapping:0x1D4F8 - }, - { code:0x1D4F9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4F9 - ,simpleLowerCaseMapping:0x1D4F9 - ,simpleTitleCaseMapping:0x1D4F9 - }, - { code:0x1D4FA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FA - ,simpleLowerCaseMapping:0x1D4FA - ,simpleTitleCaseMapping:0x1D4FA - }, - { code:0x1D4FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FB - ,simpleLowerCaseMapping:0x1D4FB - ,simpleTitleCaseMapping:0x1D4FB - }, - { code:0x1D4FC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FC - ,simpleLowerCaseMapping:0x1D4FC - ,simpleTitleCaseMapping:0x1D4FC - }, - { code:0x1D4FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FD - ,simpleLowerCaseMapping:0x1D4FD - ,simpleTitleCaseMapping:0x1D4FD - }, - { code:0x1D4FE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FE - ,simpleLowerCaseMapping:0x1D4FE - ,simpleTitleCaseMapping:0x1D4FE - }, - { code:0x1D4FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D4FF - ,simpleLowerCaseMapping:0x1D4FF - ,simpleTitleCaseMapping:0x1D4FF - }, - { code:0x1D500 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D500 - ,simpleLowerCaseMapping:0x1D500 - ,simpleTitleCaseMapping:0x1D500 - }, - { code:0x1D501 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D501 - ,simpleLowerCaseMapping:0x1D501 - ,simpleTitleCaseMapping:0x1D501 - }, - { code:0x1D502 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D502 - ,simpleLowerCaseMapping:0x1D502 - ,simpleTitleCaseMapping:0x1D502 - }, - { code:0x1D503 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D503 - ,simpleLowerCaseMapping:0x1D503 - ,simpleTitleCaseMapping:0x1D503 - }, - { code:0x1D504 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D504 - ,simpleLowerCaseMapping:0x1D504 - ,simpleTitleCaseMapping:0x1D504 - }, - { code:0x1D505 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D505 - ,simpleLowerCaseMapping:0x1D505 - ,simpleTitleCaseMapping:0x1D505 - }, - { code:0x1D507 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D507 - ,simpleLowerCaseMapping:0x1D507 - ,simpleTitleCaseMapping:0x1D507 - }, - { code:0x1D508 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D508 - ,simpleLowerCaseMapping:0x1D508 - ,simpleTitleCaseMapping:0x1D508 - }, - { code:0x1D509 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D509 - ,simpleLowerCaseMapping:0x1D509 - ,simpleTitleCaseMapping:0x1D509 - }, - { code:0x1D50A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D50A - ,simpleLowerCaseMapping:0x1D50A - ,simpleTitleCaseMapping:0x1D50A - }, - { code:0x1D50D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D50D - ,simpleLowerCaseMapping:0x1D50D - ,simpleTitleCaseMapping:0x1D50D - }, - { code:0x1D50E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D50E - ,simpleLowerCaseMapping:0x1D50E - ,simpleTitleCaseMapping:0x1D50E - }, - { code:0x1D50F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D50F - ,simpleLowerCaseMapping:0x1D50F - ,simpleTitleCaseMapping:0x1D50F - }, - { code:0x1D510 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D510 - ,simpleLowerCaseMapping:0x1D510 - ,simpleTitleCaseMapping:0x1D510 - }, - { code:0x1D511 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D511 - ,simpleLowerCaseMapping:0x1D511 - ,simpleTitleCaseMapping:0x1D511 - }, - { code:0x1D512 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D512 - ,simpleLowerCaseMapping:0x1D512 - ,simpleTitleCaseMapping:0x1D512 - }, - { code:0x1D513 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D513 - ,simpleLowerCaseMapping:0x1D513 - ,simpleTitleCaseMapping:0x1D513 - }, - { code:0x1D514 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D514 - ,simpleLowerCaseMapping:0x1D514 - ,simpleTitleCaseMapping:0x1D514 - }, - { code:0x1D516 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D516 - ,simpleLowerCaseMapping:0x1D516 - ,simpleTitleCaseMapping:0x1D516 - }, - { code:0x1D517 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D517 - ,simpleLowerCaseMapping:0x1D517 - ,simpleTitleCaseMapping:0x1D517 - }, - { code:0x1D518 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D518 - ,simpleLowerCaseMapping:0x1D518 - ,simpleTitleCaseMapping:0x1D518 - }, - { code:0x1D519 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D519 - ,simpleLowerCaseMapping:0x1D519 - ,simpleTitleCaseMapping:0x1D519 - }, - { code:0x1D51A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D51A - ,simpleLowerCaseMapping:0x1D51A - ,simpleTitleCaseMapping:0x1D51A - }, - { code:0x1D51B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D51B - ,simpleLowerCaseMapping:0x1D51B - ,simpleTitleCaseMapping:0x1D51B - }, - { code:0x1D51C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D51C - ,simpleLowerCaseMapping:0x1D51C - ,simpleTitleCaseMapping:0x1D51C - }, - { code:0x1D51E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D51E - ,simpleLowerCaseMapping:0x1D51E - ,simpleTitleCaseMapping:0x1D51E - }, - { code:0x1D51F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D51F - ,simpleLowerCaseMapping:0x1D51F - ,simpleTitleCaseMapping:0x1D51F - }, - { code:0x1D520 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D520 - ,simpleLowerCaseMapping:0x1D520 - ,simpleTitleCaseMapping:0x1D520 - }, - { code:0x1D521 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D521 - ,simpleLowerCaseMapping:0x1D521 - ,simpleTitleCaseMapping:0x1D521 - }, - { code:0x1D522 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D522 - ,simpleLowerCaseMapping:0x1D522 - ,simpleTitleCaseMapping:0x1D522 - }, - { code:0x1D523 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D523 - ,simpleLowerCaseMapping:0x1D523 - ,simpleTitleCaseMapping:0x1D523 - }, - { code:0x1D524 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D524 - ,simpleLowerCaseMapping:0x1D524 - ,simpleTitleCaseMapping:0x1D524 - }, - { code:0x1D525 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D525 - ,simpleLowerCaseMapping:0x1D525 - ,simpleTitleCaseMapping:0x1D525 - }, - { code:0x1D526 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D526 - ,simpleLowerCaseMapping:0x1D526 - ,simpleTitleCaseMapping:0x1D526 - }, - { code:0x1D527 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D527 - ,simpleLowerCaseMapping:0x1D527 - ,simpleTitleCaseMapping:0x1D527 - }, - { code:0x1D528 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D528 - ,simpleLowerCaseMapping:0x1D528 - ,simpleTitleCaseMapping:0x1D528 - }, - { code:0x1D529 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D529 - ,simpleLowerCaseMapping:0x1D529 - ,simpleTitleCaseMapping:0x1D529 - }, - { code:0x1D52A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52A - ,simpleLowerCaseMapping:0x1D52A - ,simpleTitleCaseMapping:0x1D52A - }, - { code:0x1D52B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52B - ,simpleLowerCaseMapping:0x1D52B - ,simpleTitleCaseMapping:0x1D52B - }, - { code:0x1D52C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52C - ,simpleLowerCaseMapping:0x1D52C - ,simpleTitleCaseMapping:0x1D52C - }, - { code:0x1D52D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52D - ,simpleLowerCaseMapping:0x1D52D - ,simpleTitleCaseMapping:0x1D52D - }, - { code:0x1D52E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52E - ,simpleLowerCaseMapping:0x1D52E - ,simpleTitleCaseMapping:0x1D52E - }, - { code:0x1D52F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D52F - ,simpleLowerCaseMapping:0x1D52F - ,simpleTitleCaseMapping:0x1D52F - }, - { code:0x1D530 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D530 - ,simpleLowerCaseMapping:0x1D530 - ,simpleTitleCaseMapping:0x1D530 - }, - { code:0x1D531 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D531 - ,simpleLowerCaseMapping:0x1D531 - ,simpleTitleCaseMapping:0x1D531 - }, - { code:0x1D532 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D532 - ,simpleLowerCaseMapping:0x1D532 - ,simpleTitleCaseMapping:0x1D532 - }, - { code:0x1D533 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D533 - ,simpleLowerCaseMapping:0x1D533 - ,simpleTitleCaseMapping:0x1D533 - }, - { code:0x1D534 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D534 - ,simpleLowerCaseMapping:0x1D534 - ,simpleTitleCaseMapping:0x1D534 - }, - { code:0x1D535 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D535 - ,simpleLowerCaseMapping:0x1D535 - ,simpleTitleCaseMapping:0x1D535 - }, - { code:0x1D536 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D536 - ,simpleLowerCaseMapping:0x1D536 - ,simpleTitleCaseMapping:0x1D536 - }, - { code:0x1D537 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D537 - ,simpleLowerCaseMapping:0x1D537 - ,simpleTitleCaseMapping:0x1D537 - }, - { code:0x1D538 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D538 - ,simpleLowerCaseMapping:0x1D538 - ,simpleTitleCaseMapping:0x1D538 - }, - { code:0x1D539 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D539 - ,simpleLowerCaseMapping:0x1D539 - ,simpleTitleCaseMapping:0x1D539 - }, - { code:0x1D53B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D53B - ,simpleLowerCaseMapping:0x1D53B - ,simpleTitleCaseMapping:0x1D53B - }, - { code:0x1D53C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D53C - ,simpleLowerCaseMapping:0x1D53C - ,simpleTitleCaseMapping:0x1D53C - }, - { code:0x1D53D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D53D - ,simpleLowerCaseMapping:0x1D53D - ,simpleTitleCaseMapping:0x1D53D - }, - { code:0x1D53E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D53E - ,simpleLowerCaseMapping:0x1D53E - ,simpleTitleCaseMapping:0x1D53E - }, - { code:0x1D540 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D540 - ,simpleLowerCaseMapping:0x1D540 - ,simpleTitleCaseMapping:0x1D540 - }, - { code:0x1D541 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D541 - ,simpleLowerCaseMapping:0x1D541 - ,simpleTitleCaseMapping:0x1D541 - }, - { code:0x1D542 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D542 - ,simpleLowerCaseMapping:0x1D542 - ,simpleTitleCaseMapping:0x1D542 - }, - { code:0x1D543 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D543 - ,simpleLowerCaseMapping:0x1D543 - ,simpleTitleCaseMapping:0x1D543 - }, - { code:0x1D544 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D544 - ,simpleLowerCaseMapping:0x1D544 - ,simpleTitleCaseMapping:0x1D544 - }, - { code:0x1D546 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D546 - ,simpleLowerCaseMapping:0x1D546 - ,simpleTitleCaseMapping:0x1D546 - }, - { code:0x1D54A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54A - ,simpleLowerCaseMapping:0x1D54A - ,simpleTitleCaseMapping:0x1D54A - }, - { code:0x1D54B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54B - ,simpleLowerCaseMapping:0x1D54B - ,simpleTitleCaseMapping:0x1D54B - }, - { code:0x1D54C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54C - ,simpleLowerCaseMapping:0x1D54C - ,simpleTitleCaseMapping:0x1D54C - }, - { code:0x1D54D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54D - ,simpleLowerCaseMapping:0x1D54D - ,simpleTitleCaseMapping:0x1D54D - }, - { code:0x1D54E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54E - ,simpleLowerCaseMapping:0x1D54E - ,simpleTitleCaseMapping:0x1D54E - }, - { code:0x1D54F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D54F - ,simpleLowerCaseMapping:0x1D54F - ,simpleTitleCaseMapping:0x1D54F - }, - { code:0x1D550 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D550 - ,simpleLowerCaseMapping:0x1D550 - ,simpleTitleCaseMapping:0x1D550 - }, - { code:0x1D552 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D552 - ,simpleLowerCaseMapping:0x1D552 - ,simpleTitleCaseMapping:0x1D552 - }, - { code:0x1D553 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D553 - ,simpleLowerCaseMapping:0x1D553 - ,simpleTitleCaseMapping:0x1D553 - }, - { code:0x1D554 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D554 - ,simpleLowerCaseMapping:0x1D554 - ,simpleTitleCaseMapping:0x1D554 - }, - { code:0x1D555 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D555 - ,simpleLowerCaseMapping:0x1D555 - ,simpleTitleCaseMapping:0x1D555 - }, - { code:0x1D556 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D556 - ,simpleLowerCaseMapping:0x1D556 - ,simpleTitleCaseMapping:0x1D556 - }, - { code:0x1D557 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D557 - ,simpleLowerCaseMapping:0x1D557 - ,simpleTitleCaseMapping:0x1D557 - }, - { code:0x1D558 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D558 - ,simpleLowerCaseMapping:0x1D558 - ,simpleTitleCaseMapping:0x1D558 - }, - { code:0x1D559 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D559 - ,simpleLowerCaseMapping:0x1D559 - ,simpleTitleCaseMapping:0x1D559 - }, - { code:0x1D55A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55A - ,simpleLowerCaseMapping:0x1D55A - ,simpleTitleCaseMapping:0x1D55A - }, - { code:0x1D55B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55B - ,simpleLowerCaseMapping:0x1D55B - ,simpleTitleCaseMapping:0x1D55B - }, - { code:0x1D55C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55C - ,simpleLowerCaseMapping:0x1D55C - ,simpleTitleCaseMapping:0x1D55C - }, - { code:0x1D55D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55D - ,simpleLowerCaseMapping:0x1D55D - ,simpleTitleCaseMapping:0x1D55D - }, - { code:0x1D55E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55E - ,simpleLowerCaseMapping:0x1D55E - ,simpleTitleCaseMapping:0x1D55E - }, - { code:0x1D55F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D55F - ,simpleLowerCaseMapping:0x1D55F - ,simpleTitleCaseMapping:0x1D55F - }, - { code:0x1D560 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D560 - ,simpleLowerCaseMapping:0x1D560 - ,simpleTitleCaseMapping:0x1D560 - }, - { code:0x1D561 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D561 - ,simpleLowerCaseMapping:0x1D561 - ,simpleTitleCaseMapping:0x1D561 - }, - { code:0x1D562 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D562 - ,simpleLowerCaseMapping:0x1D562 - ,simpleTitleCaseMapping:0x1D562 - }, - { code:0x1D563 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D563 - ,simpleLowerCaseMapping:0x1D563 - ,simpleTitleCaseMapping:0x1D563 - }, - { code:0x1D564 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D564 - ,simpleLowerCaseMapping:0x1D564 - ,simpleTitleCaseMapping:0x1D564 - }, - { code:0x1D565 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D565 - ,simpleLowerCaseMapping:0x1D565 - ,simpleTitleCaseMapping:0x1D565 - }, - { code:0x1D566 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D566 - ,simpleLowerCaseMapping:0x1D566 - ,simpleTitleCaseMapping:0x1D566 - }, - { code:0x1D567 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D567 - ,simpleLowerCaseMapping:0x1D567 - ,simpleTitleCaseMapping:0x1D567 - }, - { code:0x1D568 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D568 - ,simpleLowerCaseMapping:0x1D568 - ,simpleTitleCaseMapping:0x1D568 - }, - { code:0x1D569 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D569 - ,simpleLowerCaseMapping:0x1D569 - ,simpleTitleCaseMapping:0x1D569 - }, - { code:0x1D56A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D56A - ,simpleLowerCaseMapping:0x1D56A - ,simpleTitleCaseMapping:0x1D56A - }, - { code:0x1D56B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D56B - ,simpleLowerCaseMapping:0x1D56B - ,simpleTitleCaseMapping:0x1D56B - }, - { code:0x1D56C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D56C - ,simpleLowerCaseMapping:0x1D56C - ,simpleTitleCaseMapping:0x1D56C - }, - { code:0x1D56D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D56D - ,simpleLowerCaseMapping:0x1D56D - ,simpleTitleCaseMapping:0x1D56D - }, - { code:0x1D56E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D56E - ,simpleLowerCaseMapping:0x1D56E - ,simpleTitleCaseMapping:0x1D56E - }, - { code:0x1D56F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D56F - ,simpleLowerCaseMapping:0x1D56F - ,simpleTitleCaseMapping:0x1D56F - }, - { code:0x1D570 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D570 - ,simpleLowerCaseMapping:0x1D570 - ,simpleTitleCaseMapping:0x1D570 - }, - { code:0x1D571 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D571 - ,simpleLowerCaseMapping:0x1D571 - ,simpleTitleCaseMapping:0x1D571 - }, - { code:0x1D572 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D572 - ,simpleLowerCaseMapping:0x1D572 - ,simpleTitleCaseMapping:0x1D572 - }, - { code:0x1D573 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D573 - ,simpleLowerCaseMapping:0x1D573 - ,simpleTitleCaseMapping:0x1D573 - }, - { code:0x1D574 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D574 - ,simpleLowerCaseMapping:0x1D574 - ,simpleTitleCaseMapping:0x1D574 - }, - { code:0x1D575 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D575 - ,simpleLowerCaseMapping:0x1D575 - ,simpleTitleCaseMapping:0x1D575 - }, - { code:0x1D576 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D576 - ,simpleLowerCaseMapping:0x1D576 - ,simpleTitleCaseMapping:0x1D576 - }, - { code:0x1D577 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D577 - ,simpleLowerCaseMapping:0x1D577 - ,simpleTitleCaseMapping:0x1D577 - }, - { code:0x1D578 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D578 - ,simpleLowerCaseMapping:0x1D578 - ,simpleTitleCaseMapping:0x1D578 - }, - { code:0x1D579 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D579 - ,simpleLowerCaseMapping:0x1D579 - ,simpleTitleCaseMapping:0x1D579 - }, - { code:0x1D57A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57A - ,simpleLowerCaseMapping:0x1D57A - ,simpleTitleCaseMapping:0x1D57A - }, - { code:0x1D57B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57B - ,simpleLowerCaseMapping:0x1D57B - ,simpleTitleCaseMapping:0x1D57B - }, - { code:0x1D57C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57C - ,simpleLowerCaseMapping:0x1D57C - ,simpleTitleCaseMapping:0x1D57C - }, - { code:0x1D57D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57D - ,simpleLowerCaseMapping:0x1D57D - ,simpleTitleCaseMapping:0x1D57D - }, - { code:0x1D57E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57E - ,simpleLowerCaseMapping:0x1D57E - ,simpleTitleCaseMapping:0x1D57E - }, - { code:0x1D57F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D57F - ,simpleLowerCaseMapping:0x1D57F - ,simpleTitleCaseMapping:0x1D57F - }, - { code:0x1D580 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D580 - ,simpleLowerCaseMapping:0x1D580 - ,simpleTitleCaseMapping:0x1D580 - }, - { code:0x1D581 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D581 - ,simpleLowerCaseMapping:0x1D581 - ,simpleTitleCaseMapping:0x1D581 - }, - { code:0x1D582 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D582 - ,simpleLowerCaseMapping:0x1D582 - ,simpleTitleCaseMapping:0x1D582 - }, - { code:0x1D583 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D583 - ,simpleLowerCaseMapping:0x1D583 - ,simpleTitleCaseMapping:0x1D583 - }, - { code:0x1D584 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D584 - ,simpleLowerCaseMapping:0x1D584 - ,simpleTitleCaseMapping:0x1D584 - }, - { code:0x1D585 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D585 - ,simpleLowerCaseMapping:0x1D585 - ,simpleTitleCaseMapping:0x1D585 - }, - { code:0x1D586 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D586 - ,simpleLowerCaseMapping:0x1D586 - ,simpleTitleCaseMapping:0x1D586 - }, - { code:0x1D587 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D587 - ,simpleLowerCaseMapping:0x1D587 - ,simpleTitleCaseMapping:0x1D587 - }, - { code:0x1D588 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D588 - ,simpleLowerCaseMapping:0x1D588 - ,simpleTitleCaseMapping:0x1D588 - }, - { code:0x1D589 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D589 - ,simpleLowerCaseMapping:0x1D589 - ,simpleTitleCaseMapping:0x1D589 - }, - { code:0x1D58A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58A - ,simpleLowerCaseMapping:0x1D58A - ,simpleTitleCaseMapping:0x1D58A - }, - { code:0x1D58B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58B - ,simpleLowerCaseMapping:0x1D58B - ,simpleTitleCaseMapping:0x1D58B - }, - { code:0x1D58C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58C - ,simpleLowerCaseMapping:0x1D58C - ,simpleTitleCaseMapping:0x1D58C - }, - { code:0x1D58D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58D - ,simpleLowerCaseMapping:0x1D58D - ,simpleTitleCaseMapping:0x1D58D - }, - { code:0x1D58E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58E - ,simpleLowerCaseMapping:0x1D58E - ,simpleTitleCaseMapping:0x1D58E - }, - { code:0x1D58F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D58F - ,simpleLowerCaseMapping:0x1D58F - ,simpleTitleCaseMapping:0x1D58F - }, - { code:0x1D590 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D590 - ,simpleLowerCaseMapping:0x1D590 - ,simpleTitleCaseMapping:0x1D590 - }, - { code:0x1D591 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D591 - ,simpleLowerCaseMapping:0x1D591 - ,simpleTitleCaseMapping:0x1D591 - }, - { code:0x1D592 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D592 - ,simpleLowerCaseMapping:0x1D592 - ,simpleTitleCaseMapping:0x1D592 - }, - { code:0x1D593 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D593 - ,simpleLowerCaseMapping:0x1D593 - ,simpleTitleCaseMapping:0x1D593 - }, - { code:0x1D594 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D594 - ,simpleLowerCaseMapping:0x1D594 - ,simpleTitleCaseMapping:0x1D594 - }, - { code:0x1D595 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D595 - ,simpleLowerCaseMapping:0x1D595 - ,simpleTitleCaseMapping:0x1D595 - }, - { code:0x1D596 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D596 - ,simpleLowerCaseMapping:0x1D596 - ,simpleTitleCaseMapping:0x1D596 - }, - { code:0x1D597 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D597 - ,simpleLowerCaseMapping:0x1D597 - ,simpleTitleCaseMapping:0x1D597 - }, - { code:0x1D598 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D598 - ,simpleLowerCaseMapping:0x1D598 - ,simpleTitleCaseMapping:0x1D598 - }, - { code:0x1D599 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D599 - ,simpleLowerCaseMapping:0x1D599 - ,simpleTitleCaseMapping:0x1D599 - }, - { code:0x1D59A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59A - ,simpleLowerCaseMapping:0x1D59A - ,simpleTitleCaseMapping:0x1D59A - }, - { code:0x1D59B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59B - ,simpleLowerCaseMapping:0x1D59B - ,simpleTitleCaseMapping:0x1D59B - }, - { code:0x1D59C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59C - ,simpleLowerCaseMapping:0x1D59C - ,simpleTitleCaseMapping:0x1D59C - }, - { code:0x1D59D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59D - ,simpleLowerCaseMapping:0x1D59D - ,simpleTitleCaseMapping:0x1D59D - }, - { code:0x1D59E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59E - ,simpleLowerCaseMapping:0x1D59E - ,simpleTitleCaseMapping:0x1D59E - }, - { code:0x1D59F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D59F - ,simpleLowerCaseMapping:0x1D59F - ,simpleTitleCaseMapping:0x1D59F - }, - { code:0x1D5A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A0 - ,simpleLowerCaseMapping:0x1D5A0 - ,simpleTitleCaseMapping:0x1D5A0 - }, - { code:0x1D5A1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A1 - ,simpleLowerCaseMapping:0x1D5A1 - ,simpleTitleCaseMapping:0x1D5A1 - }, - { code:0x1D5A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A2 - ,simpleLowerCaseMapping:0x1D5A2 - ,simpleTitleCaseMapping:0x1D5A2 - }, - { code:0x1D5A3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A3 - ,simpleLowerCaseMapping:0x1D5A3 - ,simpleTitleCaseMapping:0x1D5A3 - }, - { code:0x1D5A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A4 - ,simpleLowerCaseMapping:0x1D5A4 - ,simpleTitleCaseMapping:0x1D5A4 - }, - { code:0x1D5A5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A5 - ,simpleLowerCaseMapping:0x1D5A5 - ,simpleTitleCaseMapping:0x1D5A5 - }, - { code:0x1D5A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A6 - ,simpleLowerCaseMapping:0x1D5A6 - ,simpleTitleCaseMapping:0x1D5A6 - }, - { code:0x1D5A7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A7 - ,simpleLowerCaseMapping:0x1D5A7 - ,simpleTitleCaseMapping:0x1D5A7 - }, - { code:0x1D5A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A8 - ,simpleLowerCaseMapping:0x1D5A8 - ,simpleTitleCaseMapping:0x1D5A8 - }, - { code:0x1D5A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5A9 - ,simpleLowerCaseMapping:0x1D5A9 - ,simpleTitleCaseMapping:0x1D5A9 - }, - { code:0x1D5AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AA - ,simpleLowerCaseMapping:0x1D5AA - ,simpleTitleCaseMapping:0x1D5AA - }, - { code:0x1D5AB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AB - ,simpleLowerCaseMapping:0x1D5AB - ,simpleTitleCaseMapping:0x1D5AB - }, - { code:0x1D5AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AC - ,simpleLowerCaseMapping:0x1D5AC - ,simpleTitleCaseMapping:0x1D5AC - }, - { code:0x1D5AD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AD - ,simpleLowerCaseMapping:0x1D5AD - ,simpleTitleCaseMapping:0x1D5AD - }, - { code:0x1D5AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AE - ,simpleLowerCaseMapping:0x1D5AE - ,simpleTitleCaseMapping:0x1D5AE - }, - { code:0x1D5AF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5AF - ,simpleLowerCaseMapping:0x1D5AF - ,simpleTitleCaseMapping:0x1D5AF - }, - { code:0x1D5B0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B0 - ,simpleLowerCaseMapping:0x1D5B0 - ,simpleTitleCaseMapping:0x1D5B0 - }, - { code:0x1D5B1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B1 - ,simpleLowerCaseMapping:0x1D5B1 - ,simpleTitleCaseMapping:0x1D5B1 - }, - { code:0x1D5B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B2 - ,simpleLowerCaseMapping:0x1D5B2 - ,simpleTitleCaseMapping:0x1D5B2 - }, - { code:0x1D5B3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B3 - ,simpleLowerCaseMapping:0x1D5B3 - ,simpleTitleCaseMapping:0x1D5B3 - }, - { code:0x1D5B4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B4 - ,simpleLowerCaseMapping:0x1D5B4 - ,simpleTitleCaseMapping:0x1D5B4 - }, - { code:0x1D5B5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B5 - ,simpleLowerCaseMapping:0x1D5B5 - ,simpleTitleCaseMapping:0x1D5B5 - }, - { code:0x1D5B6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B6 - ,simpleLowerCaseMapping:0x1D5B6 - ,simpleTitleCaseMapping:0x1D5B6 - }, - { code:0x1D5B7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B7 - ,simpleLowerCaseMapping:0x1D5B7 - ,simpleTitleCaseMapping:0x1D5B7 - }, - { code:0x1D5B8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B8 - ,simpleLowerCaseMapping:0x1D5B8 - ,simpleTitleCaseMapping:0x1D5B8 - }, - { code:0x1D5B9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5B9 - ,simpleLowerCaseMapping:0x1D5B9 - ,simpleTitleCaseMapping:0x1D5B9 - }, - { code:0x1D5BA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BA - ,simpleLowerCaseMapping:0x1D5BA - ,simpleTitleCaseMapping:0x1D5BA - }, - { code:0x1D5BB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BB - ,simpleLowerCaseMapping:0x1D5BB - ,simpleTitleCaseMapping:0x1D5BB - }, - { code:0x1D5BC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BC - ,simpleLowerCaseMapping:0x1D5BC - ,simpleTitleCaseMapping:0x1D5BC - }, - { code:0x1D5BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BD - ,simpleLowerCaseMapping:0x1D5BD - ,simpleTitleCaseMapping:0x1D5BD - }, - { code:0x1D5BE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BE - ,simpleLowerCaseMapping:0x1D5BE - ,simpleTitleCaseMapping:0x1D5BE - }, - { code:0x1D5BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5BF - ,simpleLowerCaseMapping:0x1D5BF - ,simpleTitleCaseMapping:0x1D5BF - }, - { code:0x1D5C0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C0 - ,simpleLowerCaseMapping:0x1D5C0 - ,simpleTitleCaseMapping:0x1D5C0 - }, - { code:0x1D5C1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C1 - ,simpleLowerCaseMapping:0x1D5C1 - ,simpleTitleCaseMapping:0x1D5C1 - }, - { code:0x1D5C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C2 - ,simpleLowerCaseMapping:0x1D5C2 - ,simpleTitleCaseMapping:0x1D5C2 - }, - { code:0x1D5C3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C3 - ,simpleLowerCaseMapping:0x1D5C3 - ,simpleTitleCaseMapping:0x1D5C3 - }, - { code:0x1D5C4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C4 - ,simpleLowerCaseMapping:0x1D5C4 - ,simpleTitleCaseMapping:0x1D5C4 - }, - { code:0x1D5C5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C5 - ,simpleLowerCaseMapping:0x1D5C5 - ,simpleTitleCaseMapping:0x1D5C5 - }, - { code:0x1D5C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C6 - ,simpleLowerCaseMapping:0x1D5C6 - ,simpleTitleCaseMapping:0x1D5C6 - }, - { code:0x1D5C7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C7 - ,simpleLowerCaseMapping:0x1D5C7 - ,simpleTitleCaseMapping:0x1D5C7 - }, - { code:0x1D5C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C8 - ,simpleLowerCaseMapping:0x1D5C8 - ,simpleTitleCaseMapping:0x1D5C8 - }, - { code:0x1D5C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5C9 - ,simpleLowerCaseMapping:0x1D5C9 - ,simpleTitleCaseMapping:0x1D5C9 - }, - { code:0x1D5CA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CA - ,simpleLowerCaseMapping:0x1D5CA - ,simpleTitleCaseMapping:0x1D5CA - }, - { code:0x1D5CB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CB - ,simpleLowerCaseMapping:0x1D5CB - ,simpleTitleCaseMapping:0x1D5CB - }, - { code:0x1D5CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CC - ,simpleLowerCaseMapping:0x1D5CC - ,simpleTitleCaseMapping:0x1D5CC - }, - { code:0x1D5CD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CD - ,simpleLowerCaseMapping:0x1D5CD - ,simpleTitleCaseMapping:0x1D5CD - }, - { code:0x1D5CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CE - ,simpleLowerCaseMapping:0x1D5CE - ,simpleTitleCaseMapping:0x1D5CE - }, - { code:0x1D5CF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5CF - ,simpleLowerCaseMapping:0x1D5CF - ,simpleTitleCaseMapping:0x1D5CF - }, - { code:0x1D5D0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5D0 - ,simpleLowerCaseMapping:0x1D5D0 - ,simpleTitleCaseMapping:0x1D5D0 - }, - { code:0x1D5D1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5D1 - ,simpleLowerCaseMapping:0x1D5D1 - ,simpleTitleCaseMapping:0x1D5D1 - }, - { code:0x1D5D2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5D2 - ,simpleLowerCaseMapping:0x1D5D2 - ,simpleTitleCaseMapping:0x1D5D2 - }, - { code:0x1D5D3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5D3 - ,simpleLowerCaseMapping:0x1D5D3 - ,simpleTitleCaseMapping:0x1D5D3 - }, - { code:0x1D5D4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D4 - ,simpleLowerCaseMapping:0x1D5D4 - ,simpleTitleCaseMapping:0x1D5D4 - }, - { code:0x1D5D5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D5 - ,simpleLowerCaseMapping:0x1D5D5 - ,simpleTitleCaseMapping:0x1D5D5 - }, - { code:0x1D5D6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D6 - ,simpleLowerCaseMapping:0x1D5D6 - ,simpleTitleCaseMapping:0x1D5D6 - }, - { code:0x1D5D7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D7 - ,simpleLowerCaseMapping:0x1D5D7 - ,simpleTitleCaseMapping:0x1D5D7 - }, - { code:0x1D5D8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D8 - ,simpleLowerCaseMapping:0x1D5D8 - ,simpleTitleCaseMapping:0x1D5D8 - }, - { code:0x1D5D9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5D9 - ,simpleLowerCaseMapping:0x1D5D9 - ,simpleTitleCaseMapping:0x1D5D9 - }, - { code:0x1D5DA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DA - ,simpleLowerCaseMapping:0x1D5DA - ,simpleTitleCaseMapping:0x1D5DA - }, - { code:0x1D5DB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DB - ,simpleLowerCaseMapping:0x1D5DB - ,simpleTitleCaseMapping:0x1D5DB - }, - { code:0x1D5DC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DC - ,simpleLowerCaseMapping:0x1D5DC - ,simpleTitleCaseMapping:0x1D5DC - }, - { code:0x1D5DD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DD - ,simpleLowerCaseMapping:0x1D5DD - ,simpleTitleCaseMapping:0x1D5DD - }, - { code:0x1D5DE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DE - ,simpleLowerCaseMapping:0x1D5DE - ,simpleTitleCaseMapping:0x1D5DE - }, - { code:0x1D5DF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5DF - ,simpleLowerCaseMapping:0x1D5DF - ,simpleTitleCaseMapping:0x1D5DF - }, - { code:0x1D5E0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E0 - ,simpleLowerCaseMapping:0x1D5E0 - ,simpleTitleCaseMapping:0x1D5E0 - }, - { code:0x1D5E1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E1 - ,simpleLowerCaseMapping:0x1D5E1 - ,simpleTitleCaseMapping:0x1D5E1 - }, - { code:0x1D5E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E2 - ,simpleLowerCaseMapping:0x1D5E2 - ,simpleTitleCaseMapping:0x1D5E2 - }, - { code:0x1D5E3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E3 - ,simpleLowerCaseMapping:0x1D5E3 - ,simpleTitleCaseMapping:0x1D5E3 - }, - { code:0x1D5E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E4 - ,simpleLowerCaseMapping:0x1D5E4 - ,simpleTitleCaseMapping:0x1D5E4 - }, - { code:0x1D5E5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E5 - ,simpleLowerCaseMapping:0x1D5E5 - ,simpleTitleCaseMapping:0x1D5E5 - }, - { code:0x1D5E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E6 - ,simpleLowerCaseMapping:0x1D5E6 - ,simpleTitleCaseMapping:0x1D5E6 - }, - { code:0x1D5E7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E7 - ,simpleLowerCaseMapping:0x1D5E7 - ,simpleTitleCaseMapping:0x1D5E7 - }, - { code:0x1D5E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E8 - ,simpleLowerCaseMapping:0x1D5E8 - ,simpleTitleCaseMapping:0x1D5E8 - }, - { code:0x1D5E9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5E9 - ,simpleLowerCaseMapping:0x1D5E9 - ,simpleTitleCaseMapping:0x1D5E9 - }, - { code:0x1D5EA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5EA - ,simpleLowerCaseMapping:0x1D5EA - ,simpleTitleCaseMapping:0x1D5EA - }, - { code:0x1D5EB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5EB - ,simpleLowerCaseMapping:0x1D5EB - ,simpleTitleCaseMapping:0x1D5EB - }, - { code:0x1D5EC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5EC - ,simpleLowerCaseMapping:0x1D5EC - ,simpleTitleCaseMapping:0x1D5EC - }, - { code:0x1D5ED - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D5ED - ,simpleLowerCaseMapping:0x1D5ED - ,simpleTitleCaseMapping:0x1D5ED - }, - { code:0x1D5EE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5EE - ,simpleLowerCaseMapping:0x1D5EE - ,simpleTitleCaseMapping:0x1D5EE - }, - { code:0x1D5EF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5EF - ,simpleLowerCaseMapping:0x1D5EF - ,simpleTitleCaseMapping:0x1D5EF - }, - { code:0x1D5F0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F0 - ,simpleLowerCaseMapping:0x1D5F0 - ,simpleTitleCaseMapping:0x1D5F0 - }, - { code:0x1D5F1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F1 - ,simpleLowerCaseMapping:0x1D5F1 - ,simpleTitleCaseMapping:0x1D5F1 - }, - { code:0x1D5F2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F2 - ,simpleLowerCaseMapping:0x1D5F2 - ,simpleTitleCaseMapping:0x1D5F2 - }, - { code:0x1D5F3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F3 - ,simpleLowerCaseMapping:0x1D5F3 - ,simpleTitleCaseMapping:0x1D5F3 - }, - { code:0x1D5F4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F4 - ,simpleLowerCaseMapping:0x1D5F4 - ,simpleTitleCaseMapping:0x1D5F4 - }, - { code:0x1D5F5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F5 - ,simpleLowerCaseMapping:0x1D5F5 - ,simpleTitleCaseMapping:0x1D5F5 - }, - { code:0x1D5F6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F6 - ,simpleLowerCaseMapping:0x1D5F6 - ,simpleTitleCaseMapping:0x1D5F6 - }, - { code:0x1D5F7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F7 - ,simpleLowerCaseMapping:0x1D5F7 - ,simpleTitleCaseMapping:0x1D5F7 - }, - { code:0x1D5F8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F8 - ,simpleLowerCaseMapping:0x1D5F8 - ,simpleTitleCaseMapping:0x1D5F8 - }, - { code:0x1D5F9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5F9 - ,simpleLowerCaseMapping:0x1D5F9 - ,simpleTitleCaseMapping:0x1D5F9 - }, - { code:0x1D5FA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FA - ,simpleLowerCaseMapping:0x1D5FA - ,simpleTitleCaseMapping:0x1D5FA - }, - { code:0x1D5FB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FB - ,simpleLowerCaseMapping:0x1D5FB - ,simpleTitleCaseMapping:0x1D5FB - }, - { code:0x1D5FC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FC - ,simpleLowerCaseMapping:0x1D5FC - ,simpleTitleCaseMapping:0x1D5FC - }, - { code:0x1D5FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FD - ,simpleLowerCaseMapping:0x1D5FD - ,simpleTitleCaseMapping:0x1D5FD - }, - { code:0x1D5FE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FE - ,simpleLowerCaseMapping:0x1D5FE - ,simpleTitleCaseMapping:0x1D5FE - }, - { code:0x1D5FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D5FF - ,simpleLowerCaseMapping:0x1D5FF - ,simpleTitleCaseMapping:0x1D5FF - }, - { code:0x1D600 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D600 - ,simpleLowerCaseMapping:0x1D600 - ,simpleTitleCaseMapping:0x1D600 - }, - { code:0x1D601 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D601 - ,simpleLowerCaseMapping:0x1D601 - ,simpleTitleCaseMapping:0x1D601 - }, - { code:0x1D602 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D602 - ,simpleLowerCaseMapping:0x1D602 - ,simpleTitleCaseMapping:0x1D602 - }, - { code:0x1D603 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D603 - ,simpleLowerCaseMapping:0x1D603 - ,simpleTitleCaseMapping:0x1D603 - }, - { code:0x1D604 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D604 - ,simpleLowerCaseMapping:0x1D604 - ,simpleTitleCaseMapping:0x1D604 - }, - { code:0x1D605 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D605 - ,simpleLowerCaseMapping:0x1D605 - ,simpleTitleCaseMapping:0x1D605 - }, - { code:0x1D606 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D606 - ,simpleLowerCaseMapping:0x1D606 - ,simpleTitleCaseMapping:0x1D606 - }, - { code:0x1D607 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D607 - ,simpleLowerCaseMapping:0x1D607 - ,simpleTitleCaseMapping:0x1D607 - }, - { code:0x1D608 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D608 - ,simpleLowerCaseMapping:0x1D608 - ,simpleTitleCaseMapping:0x1D608 - }, - { code:0x1D609 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D609 - ,simpleLowerCaseMapping:0x1D609 - ,simpleTitleCaseMapping:0x1D609 - }, - { code:0x1D60A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60A - ,simpleLowerCaseMapping:0x1D60A - ,simpleTitleCaseMapping:0x1D60A - }, - { code:0x1D60B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60B - ,simpleLowerCaseMapping:0x1D60B - ,simpleTitleCaseMapping:0x1D60B - }, - { code:0x1D60C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60C - ,simpleLowerCaseMapping:0x1D60C - ,simpleTitleCaseMapping:0x1D60C - }, - { code:0x1D60D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60D - ,simpleLowerCaseMapping:0x1D60D - ,simpleTitleCaseMapping:0x1D60D - }, - { code:0x1D60E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60E - ,simpleLowerCaseMapping:0x1D60E - ,simpleTitleCaseMapping:0x1D60E - }, - { code:0x1D60F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D60F - ,simpleLowerCaseMapping:0x1D60F - ,simpleTitleCaseMapping:0x1D60F - }, - { code:0x1D610 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D610 - ,simpleLowerCaseMapping:0x1D610 - ,simpleTitleCaseMapping:0x1D610 - }, - { code:0x1D611 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D611 - ,simpleLowerCaseMapping:0x1D611 - ,simpleTitleCaseMapping:0x1D611 - }, - { code:0x1D612 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D612 - ,simpleLowerCaseMapping:0x1D612 - ,simpleTitleCaseMapping:0x1D612 - }, - { code:0x1D613 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D613 - ,simpleLowerCaseMapping:0x1D613 - ,simpleTitleCaseMapping:0x1D613 - }, - { code:0x1D614 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D614 - ,simpleLowerCaseMapping:0x1D614 - ,simpleTitleCaseMapping:0x1D614 - }, - { code:0x1D615 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D615 - ,simpleLowerCaseMapping:0x1D615 - ,simpleTitleCaseMapping:0x1D615 - }, - { code:0x1D616 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D616 - ,simpleLowerCaseMapping:0x1D616 - ,simpleTitleCaseMapping:0x1D616 - }, - { code:0x1D617 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D617 - ,simpleLowerCaseMapping:0x1D617 - ,simpleTitleCaseMapping:0x1D617 - }, - { code:0x1D618 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D618 - ,simpleLowerCaseMapping:0x1D618 - ,simpleTitleCaseMapping:0x1D618 - }, - { code:0x1D619 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D619 - ,simpleLowerCaseMapping:0x1D619 - ,simpleTitleCaseMapping:0x1D619 - }, - { code:0x1D61A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61A - ,simpleLowerCaseMapping:0x1D61A - ,simpleTitleCaseMapping:0x1D61A - }, - { code:0x1D61B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61B - ,simpleLowerCaseMapping:0x1D61B - ,simpleTitleCaseMapping:0x1D61B - }, - { code:0x1D61C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61C - ,simpleLowerCaseMapping:0x1D61C - ,simpleTitleCaseMapping:0x1D61C - }, - { code:0x1D61D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61D - ,simpleLowerCaseMapping:0x1D61D - ,simpleTitleCaseMapping:0x1D61D - }, - { code:0x1D61E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61E - ,simpleLowerCaseMapping:0x1D61E - ,simpleTitleCaseMapping:0x1D61E - }, - { code:0x1D61F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D61F - ,simpleLowerCaseMapping:0x1D61F - ,simpleTitleCaseMapping:0x1D61F - }, - { code:0x1D620 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D620 - ,simpleLowerCaseMapping:0x1D620 - ,simpleTitleCaseMapping:0x1D620 - }, - { code:0x1D621 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D621 - ,simpleLowerCaseMapping:0x1D621 - ,simpleTitleCaseMapping:0x1D621 - }, - { code:0x1D622 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D622 - ,simpleLowerCaseMapping:0x1D622 - ,simpleTitleCaseMapping:0x1D622 - }, - { code:0x1D623 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D623 - ,simpleLowerCaseMapping:0x1D623 - ,simpleTitleCaseMapping:0x1D623 - }, - { code:0x1D624 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D624 - ,simpleLowerCaseMapping:0x1D624 - ,simpleTitleCaseMapping:0x1D624 - }, - { code:0x1D625 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D625 - ,simpleLowerCaseMapping:0x1D625 - ,simpleTitleCaseMapping:0x1D625 - }, - { code:0x1D626 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D626 - ,simpleLowerCaseMapping:0x1D626 - ,simpleTitleCaseMapping:0x1D626 - }, - { code:0x1D627 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D627 - ,simpleLowerCaseMapping:0x1D627 - ,simpleTitleCaseMapping:0x1D627 - }, - { code:0x1D628 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D628 - ,simpleLowerCaseMapping:0x1D628 - ,simpleTitleCaseMapping:0x1D628 - }, - { code:0x1D629 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D629 - ,simpleLowerCaseMapping:0x1D629 - ,simpleTitleCaseMapping:0x1D629 - }, - { code:0x1D62A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62A - ,simpleLowerCaseMapping:0x1D62A - ,simpleTitleCaseMapping:0x1D62A - }, - { code:0x1D62B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62B - ,simpleLowerCaseMapping:0x1D62B - ,simpleTitleCaseMapping:0x1D62B - }, - { code:0x1D62C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62C - ,simpleLowerCaseMapping:0x1D62C - ,simpleTitleCaseMapping:0x1D62C - }, - { code:0x1D62D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62D - ,simpleLowerCaseMapping:0x1D62D - ,simpleTitleCaseMapping:0x1D62D - }, - { code:0x1D62E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62E - ,simpleLowerCaseMapping:0x1D62E - ,simpleTitleCaseMapping:0x1D62E - }, - { code:0x1D62F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D62F - ,simpleLowerCaseMapping:0x1D62F - ,simpleTitleCaseMapping:0x1D62F - }, - { code:0x1D630 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D630 - ,simpleLowerCaseMapping:0x1D630 - ,simpleTitleCaseMapping:0x1D630 - }, - { code:0x1D631 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D631 - ,simpleLowerCaseMapping:0x1D631 - ,simpleTitleCaseMapping:0x1D631 - }, - { code:0x1D632 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D632 - ,simpleLowerCaseMapping:0x1D632 - ,simpleTitleCaseMapping:0x1D632 - }, - { code:0x1D633 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D633 - ,simpleLowerCaseMapping:0x1D633 - ,simpleTitleCaseMapping:0x1D633 - }, - { code:0x1D634 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D634 - ,simpleLowerCaseMapping:0x1D634 - ,simpleTitleCaseMapping:0x1D634 - }, - { code:0x1D635 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D635 - ,simpleLowerCaseMapping:0x1D635 - ,simpleTitleCaseMapping:0x1D635 - }, - { code:0x1D636 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D636 - ,simpleLowerCaseMapping:0x1D636 - ,simpleTitleCaseMapping:0x1D636 - }, - { code:0x1D637 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D637 - ,simpleLowerCaseMapping:0x1D637 - ,simpleTitleCaseMapping:0x1D637 - }, - { code:0x1D638 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D638 - ,simpleLowerCaseMapping:0x1D638 - ,simpleTitleCaseMapping:0x1D638 - }, - { code:0x1D639 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D639 - ,simpleLowerCaseMapping:0x1D639 - ,simpleTitleCaseMapping:0x1D639 - }, - { code:0x1D63A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D63A - ,simpleLowerCaseMapping:0x1D63A - ,simpleTitleCaseMapping:0x1D63A - }, - { code:0x1D63B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D63B - ,simpleLowerCaseMapping:0x1D63B - ,simpleTitleCaseMapping:0x1D63B - }, - { code:0x1D63C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D63C - ,simpleLowerCaseMapping:0x1D63C - ,simpleTitleCaseMapping:0x1D63C - }, - { code:0x1D63D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D63D - ,simpleLowerCaseMapping:0x1D63D - ,simpleTitleCaseMapping:0x1D63D - }, - { code:0x1D63E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D63E - ,simpleLowerCaseMapping:0x1D63E - ,simpleTitleCaseMapping:0x1D63E - }, - { code:0x1D63F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D63F - ,simpleLowerCaseMapping:0x1D63F - ,simpleTitleCaseMapping:0x1D63F - }, - { code:0x1D640 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D640 - ,simpleLowerCaseMapping:0x1D640 - ,simpleTitleCaseMapping:0x1D640 - }, - { code:0x1D641 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D641 - ,simpleLowerCaseMapping:0x1D641 - ,simpleTitleCaseMapping:0x1D641 - }, - { code:0x1D642 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D642 - ,simpleLowerCaseMapping:0x1D642 - ,simpleTitleCaseMapping:0x1D642 - }, - { code:0x1D643 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D643 - ,simpleLowerCaseMapping:0x1D643 - ,simpleTitleCaseMapping:0x1D643 - }, - { code:0x1D644 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D644 - ,simpleLowerCaseMapping:0x1D644 - ,simpleTitleCaseMapping:0x1D644 - }, - { code:0x1D645 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D645 - ,simpleLowerCaseMapping:0x1D645 - ,simpleTitleCaseMapping:0x1D645 - }, - { code:0x1D646 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D646 - ,simpleLowerCaseMapping:0x1D646 - ,simpleTitleCaseMapping:0x1D646 - }, - { code:0x1D647 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D647 - ,simpleLowerCaseMapping:0x1D647 - ,simpleTitleCaseMapping:0x1D647 - }, - { code:0x1D648 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D648 - ,simpleLowerCaseMapping:0x1D648 - ,simpleTitleCaseMapping:0x1D648 - }, - { code:0x1D649 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D649 - ,simpleLowerCaseMapping:0x1D649 - ,simpleTitleCaseMapping:0x1D649 - }, - { code:0x1D64A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64A - ,simpleLowerCaseMapping:0x1D64A - ,simpleTitleCaseMapping:0x1D64A - }, - { code:0x1D64B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64B - ,simpleLowerCaseMapping:0x1D64B - ,simpleTitleCaseMapping:0x1D64B - }, - { code:0x1D64C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64C - ,simpleLowerCaseMapping:0x1D64C - ,simpleTitleCaseMapping:0x1D64C - }, - { code:0x1D64D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64D - ,simpleLowerCaseMapping:0x1D64D - ,simpleTitleCaseMapping:0x1D64D - }, - { code:0x1D64E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64E - ,simpleLowerCaseMapping:0x1D64E - ,simpleTitleCaseMapping:0x1D64E - }, - { code:0x1D64F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D64F - ,simpleLowerCaseMapping:0x1D64F - ,simpleTitleCaseMapping:0x1D64F - }, - { code:0x1D650 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D650 - ,simpleLowerCaseMapping:0x1D650 - ,simpleTitleCaseMapping:0x1D650 - }, - { code:0x1D651 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D651 - ,simpleLowerCaseMapping:0x1D651 - ,simpleTitleCaseMapping:0x1D651 - }, - { code:0x1D652 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D652 - ,simpleLowerCaseMapping:0x1D652 - ,simpleTitleCaseMapping:0x1D652 - }, - { code:0x1D653 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D653 - ,simpleLowerCaseMapping:0x1D653 - ,simpleTitleCaseMapping:0x1D653 - }, - { code:0x1D654 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D654 - ,simpleLowerCaseMapping:0x1D654 - ,simpleTitleCaseMapping:0x1D654 - }, - { code:0x1D655 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D655 - ,simpleLowerCaseMapping:0x1D655 - ,simpleTitleCaseMapping:0x1D655 - }, - { code:0x1D656 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D656 - ,simpleLowerCaseMapping:0x1D656 - ,simpleTitleCaseMapping:0x1D656 - }, - { code:0x1D657 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D657 - ,simpleLowerCaseMapping:0x1D657 - ,simpleTitleCaseMapping:0x1D657 - }, - { code:0x1D658 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D658 - ,simpleLowerCaseMapping:0x1D658 - ,simpleTitleCaseMapping:0x1D658 - }, - { code:0x1D659 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D659 - ,simpleLowerCaseMapping:0x1D659 - ,simpleTitleCaseMapping:0x1D659 - }, - { code:0x1D65A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65A - ,simpleLowerCaseMapping:0x1D65A - ,simpleTitleCaseMapping:0x1D65A - }, - { code:0x1D65B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65B - ,simpleLowerCaseMapping:0x1D65B - ,simpleTitleCaseMapping:0x1D65B - }, - { code:0x1D65C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65C - ,simpleLowerCaseMapping:0x1D65C - ,simpleTitleCaseMapping:0x1D65C - }, - { code:0x1D65D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65D - ,simpleLowerCaseMapping:0x1D65D - ,simpleTitleCaseMapping:0x1D65D - }, - { code:0x1D65E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65E - ,simpleLowerCaseMapping:0x1D65E - ,simpleTitleCaseMapping:0x1D65E - }, - { code:0x1D65F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D65F - ,simpleLowerCaseMapping:0x1D65F - ,simpleTitleCaseMapping:0x1D65F - }, - { code:0x1D660 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D660 - ,simpleLowerCaseMapping:0x1D660 - ,simpleTitleCaseMapping:0x1D660 - }, - { code:0x1D661 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D661 - ,simpleLowerCaseMapping:0x1D661 - ,simpleTitleCaseMapping:0x1D661 - }, - { code:0x1D662 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D662 - ,simpleLowerCaseMapping:0x1D662 - ,simpleTitleCaseMapping:0x1D662 - }, - { code:0x1D663 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D663 - ,simpleLowerCaseMapping:0x1D663 - ,simpleTitleCaseMapping:0x1D663 - }, - { code:0x1D664 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D664 - ,simpleLowerCaseMapping:0x1D664 - ,simpleTitleCaseMapping:0x1D664 - }, - { code:0x1D665 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D665 - ,simpleLowerCaseMapping:0x1D665 - ,simpleTitleCaseMapping:0x1D665 - }, - { code:0x1D666 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D666 - ,simpleLowerCaseMapping:0x1D666 - ,simpleTitleCaseMapping:0x1D666 - }, - { code:0x1D667 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D667 - ,simpleLowerCaseMapping:0x1D667 - ,simpleTitleCaseMapping:0x1D667 - }, - { code:0x1D668 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D668 - ,simpleLowerCaseMapping:0x1D668 - ,simpleTitleCaseMapping:0x1D668 - }, - { code:0x1D669 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D669 - ,simpleLowerCaseMapping:0x1D669 - ,simpleTitleCaseMapping:0x1D669 - }, - { code:0x1D66A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66A - ,simpleLowerCaseMapping:0x1D66A - ,simpleTitleCaseMapping:0x1D66A - }, - { code:0x1D66B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66B - ,simpleLowerCaseMapping:0x1D66B - ,simpleTitleCaseMapping:0x1D66B - }, - { code:0x1D66C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66C - ,simpleLowerCaseMapping:0x1D66C - ,simpleTitleCaseMapping:0x1D66C - }, - { code:0x1D66D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66D - ,simpleLowerCaseMapping:0x1D66D - ,simpleTitleCaseMapping:0x1D66D - }, - { code:0x1D66E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66E - ,simpleLowerCaseMapping:0x1D66E - ,simpleTitleCaseMapping:0x1D66E - }, - { code:0x1D66F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D66F - ,simpleLowerCaseMapping:0x1D66F - ,simpleTitleCaseMapping:0x1D66F - }, - { code:0x1D670 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D670 - ,simpleLowerCaseMapping:0x1D670 - ,simpleTitleCaseMapping:0x1D670 - }, - { code:0x1D671 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D671 - ,simpleLowerCaseMapping:0x1D671 - ,simpleTitleCaseMapping:0x1D671 - }, - { code:0x1D672 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D672 - ,simpleLowerCaseMapping:0x1D672 - ,simpleTitleCaseMapping:0x1D672 - }, - { code:0x1D673 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D673 - ,simpleLowerCaseMapping:0x1D673 - ,simpleTitleCaseMapping:0x1D673 - }, - { code:0x1D674 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D674 - ,simpleLowerCaseMapping:0x1D674 - ,simpleTitleCaseMapping:0x1D674 - }, - { code:0x1D675 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D675 - ,simpleLowerCaseMapping:0x1D675 - ,simpleTitleCaseMapping:0x1D675 - }, - { code:0x1D676 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D676 - ,simpleLowerCaseMapping:0x1D676 - ,simpleTitleCaseMapping:0x1D676 - }, - { code:0x1D677 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D677 - ,simpleLowerCaseMapping:0x1D677 - ,simpleTitleCaseMapping:0x1D677 - }, - { code:0x1D678 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D678 - ,simpleLowerCaseMapping:0x1D678 - ,simpleTitleCaseMapping:0x1D678 - }, - { code:0x1D679 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D679 - ,simpleLowerCaseMapping:0x1D679 - ,simpleTitleCaseMapping:0x1D679 - }, - { code:0x1D67A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67A - ,simpleLowerCaseMapping:0x1D67A - ,simpleTitleCaseMapping:0x1D67A - }, - { code:0x1D67B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67B - ,simpleLowerCaseMapping:0x1D67B - ,simpleTitleCaseMapping:0x1D67B - }, - { code:0x1D67C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67C - ,simpleLowerCaseMapping:0x1D67C - ,simpleTitleCaseMapping:0x1D67C - }, - { code:0x1D67D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67D - ,simpleLowerCaseMapping:0x1D67D - ,simpleTitleCaseMapping:0x1D67D - }, - { code:0x1D67E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67E - ,simpleLowerCaseMapping:0x1D67E - ,simpleTitleCaseMapping:0x1D67E - }, - { code:0x1D67F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D67F - ,simpleLowerCaseMapping:0x1D67F - ,simpleTitleCaseMapping:0x1D67F - }, - { code:0x1D680 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D680 - ,simpleLowerCaseMapping:0x1D680 - ,simpleTitleCaseMapping:0x1D680 - }, - { code:0x1D681 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D681 - ,simpleLowerCaseMapping:0x1D681 - ,simpleTitleCaseMapping:0x1D681 - }, - { code:0x1D682 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D682 - ,simpleLowerCaseMapping:0x1D682 - ,simpleTitleCaseMapping:0x1D682 - }, - { code:0x1D683 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D683 - ,simpleLowerCaseMapping:0x1D683 - ,simpleTitleCaseMapping:0x1D683 - }, - { code:0x1D684 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D684 - ,simpleLowerCaseMapping:0x1D684 - ,simpleTitleCaseMapping:0x1D684 - }, - { code:0x1D685 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D685 - ,simpleLowerCaseMapping:0x1D685 - ,simpleTitleCaseMapping:0x1D685 - }, - { code:0x1D686 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D686 - ,simpleLowerCaseMapping:0x1D686 - ,simpleTitleCaseMapping:0x1D686 - }, - { code:0x1D687 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D687 - ,simpleLowerCaseMapping:0x1D687 - ,simpleTitleCaseMapping:0x1D687 - }, - { code:0x1D688 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D688 - ,simpleLowerCaseMapping:0x1D688 - ,simpleTitleCaseMapping:0x1D688 - }, - { code:0x1D689 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D689 - ,simpleLowerCaseMapping:0x1D689 - ,simpleTitleCaseMapping:0x1D689 - }, - { code:0x1D68A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68A - ,simpleLowerCaseMapping:0x1D68A - ,simpleTitleCaseMapping:0x1D68A - }, - { code:0x1D68B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68B - ,simpleLowerCaseMapping:0x1D68B - ,simpleTitleCaseMapping:0x1D68B - }, - { code:0x1D68C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68C - ,simpleLowerCaseMapping:0x1D68C - ,simpleTitleCaseMapping:0x1D68C - }, - { code:0x1D68D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68D - ,simpleLowerCaseMapping:0x1D68D - ,simpleTitleCaseMapping:0x1D68D - }, - { code:0x1D68E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68E - ,simpleLowerCaseMapping:0x1D68E - ,simpleTitleCaseMapping:0x1D68E - }, - { code:0x1D68F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D68F - ,simpleLowerCaseMapping:0x1D68F - ,simpleTitleCaseMapping:0x1D68F - }, - { code:0x1D690 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D690 - ,simpleLowerCaseMapping:0x1D690 - ,simpleTitleCaseMapping:0x1D690 - }, - { code:0x1D691 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D691 - ,simpleLowerCaseMapping:0x1D691 - ,simpleTitleCaseMapping:0x1D691 - }, - { code:0x1D692 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D692 - ,simpleLowerCaseMapping:0x1D692 - ,simpleTitleCaseMapping:0x1D692 - }, - { code:0x1D693 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D693 - ,simpleLowerCaseMapping:0x1D693 - ,simpleTitleCaseMapping:0x1D693 - }, - { code:0x1D694 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D694 - ,simpleLowerCaseMapping:0x1D694 - ,simpleTitleCaseMapping:0x1D694 - }, - { code:0x1D695 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D695 - ,simpleLowerCaseMapping:0x1D695 - ,simpleTitleCaseMapping:0x1D695 - }, - { code:0x1D696 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D696 - ,simpleLowerCaseMapping:0x1D696 - ,simpleTitleCaseMapping:0x1D696 - }, - { code:0x1D697 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D697 - ,simpleLowerCaseMapping:0x1D697 - ,simpleTitleCaseMapping:0x1D697 - }, - { code:0x1D698 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D698 - ,simpleLowerCaseMapping:0x1D698 - ,simpleTitleCaseMapping:0x1D698 - }, - { code:0x1D699 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D699 - ,simpleLowerCaseMapping:0x1D699 - ,simpleTitleCaseMapping:0x1D699 - }, - { code:0x1D69A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69A - ,simpleLowerCaseMapping:0x1D69A - ,simpleTitleCaseMapping:0x1D69A - }, - { code:0x1D69B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69B - ,simpleLowerCaseMapping:0x1D69B - ,simpleTitleCaseMapping:0x1D69B - }, - { code:0x1D69C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69C - ,simpleLowerCaseMapping:0x1D69C - ,simpleTitleCaseMapping:0x1D69C - }, - { code:0x1D69D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69D - ,simpleLowerCaseMapping:0x1D69D - ,simpleTitleCaseMapping:0x1D69D - }, - { code:0x1D69E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69E - ,simpleLowerCaseMapping:0x1D69E - ,simpleTitleCaseMapping:0x1D69E - }, - { code:0x1D69F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D69F - ,simpleLowerCaseMapping:0x1D69F - ,simpleTitleCaseMapping:0x1D69F - }, - { code:0x1D6A0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A0 - ,simpleLowerCaseMapping:0x1D6A0 - ,simpleTitleCaseMapping:0x1D6A0 - }, - { code:0x1D6A1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A1 - ,simpleLowerCaseMapping:0x1D6A1 - ,simpleTitleCaseMapping:0x1D6A1 - }, - { code:0x1D6A2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A2 - ,simpleLowerCaseMapping:0x1D6A2 - ,simpleTitleCaseMapping:0x1D6A2 - }, - { code:0x1D6A3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A3 - ,simpleLowerCaseMapping:0x1D6A3 - ,simpleTitleCaseMapping:0x1D6A3 - }, - { code:0x1D6A4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A4 - ,simpleLowerCaseMapping:0x1D6A4 - ,simpleTitleCaseMapping:0x1D6A4 - }, - { code:0x1D6A5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6A5 - ,simpleLowerCaseMapping:0x1D6A5 - ,simpleTitleCaseMapping:0x1D6A5 - }, - { code:0x1D6A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6A8 - ,simpleLowerCaseMapping:0x1D6A8 - ,simpleTitleCaseMapping:0x1D6A8 - }, - { code:0x1D6A9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6A9 - ,simpleLowerCaseMapping:0x1D6A9 - ,simpleTitleCaseMapping:0x1D6A9 - }, - { code:0x1D6AA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AA - ,simpleLowerCaseMapping:0x1D6AA - ,simpleTitleCaseMapping:0x1D6AA - }, - { code:0x1D6AB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AB - ,simpleLowerCaseMapping:0x1D6AB - ,simpleTitleCaseMapping:0x1D6AB - }, - { code:0x1D6AC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AC - ,simpleLowerCaseMapping:0x1D6AC - ,simpleTitleCaseMapping:0x1D6AC - }, - { code:0x1D6AD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AD - ,simpleLowerCaseMapping:0x1D6AD - ,simpleTitleCaseMapping:0x1D6AD - }, - { code:0x1D6AE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AE - ,simpleLowerCaseMapping:0x1D6AE - ,simpleTitleCaseMapping:0x1D6AE - }, - { code:0x1D6AF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6AF - ,simpleLowerCaseMapping:0x1D6AF - ,simpleTitleCaseMapping:0x1D6AF - }, - { code:0x1D6B0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B0 - ,simpleLowerCaseMapping:0x1D6B0 - ,simpleTitleCaseMapping:0x1D6B0 - }, - { code:0x1D6B1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B1 - ,simpleLowerCaseMapping:0x1D6B1 - ,simpleTitleCaseMapping:0x1D6B1 - }, - { code:0x1D6B2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B2 - ,simpleLowerCaseMapping:0x1D6B2 - ,simpleTitleCaseMapping:0x1D6B2 - }, - { code:0x1D6B3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B3 - ,simpleLowerCaseMapping:0x1D6B3 - ,simpleTitleCaseMapping:0x1D6B3 - }, - { code:0x1D6B4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B4 - ,simpleLowerCaseMapping:0x1D6B4 - ,simpleTitleCaseMapping:0x1D6B4 - }, - { code:0x1D6B5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B5 - ,simpleLowerCaseMapping:0x1D6B5 - ,simpleTitleCaseMapping:0x1D6B5 - }, - { code:0x1D6B6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B6 - ,simpleLowerCaseMapping:0x1D6B6 - ,simpleTitleCaseMapping:0x1D6B6 - }, - { code:0x1D6B7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B7 - ,simpleLowerCaseMapping:0x1D6B7 - ,simpleTitleCaseMapping:0x1D6B7 - }, - { code:0x1D6B8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B8 - ,simpleLowerCaseMapping:0x1D6B8 - ,simpleTitleCaseMapping:0x1D6B8 - }, - { code:0x1D6B9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6B9 - ,simpleLowerCaseMapping:0x1D6B9 - ,simpleTitleCaseMapping:0x1D6B9 - }, - { code:0x1D6BA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BA - ,simpleLowerCaseMapping:0x1D6BA - ,simpleTitleCaseMapping:0x1D6BA - }, - { code:0x1D6BB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BB - ,simpleLowerCaseMapping:0x1D6BB - ,simpleTitleCaseMapping:0x1D6BB - }, - { code:0x1D6BC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BC - ,simpleLowerCaseMapping:0x1D6BC - ,simpleTitleCaseMapping:0x1D6BC - }, - { code:0x1D6BD - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BD - ,simpleLowerCaseMapping:0x1D6BD - ,simpleTitleCaseMapping:0x1D6BD - }, - { code:0x1D6BE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BE - ,simpleLowerCaseMapping:0x1D6BE - ,simpleTitleCaseMapping:0x1D6BE - }, - { code:0x1D6BF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6BF - ,simpleLowerCaseMapping:0x1D6BF - ,simpleTitleCaseMapping:0x1D6BF - }, - { code:0x1D6C0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6C0 - ,simpleLowerCaseMapping:0x1D6C0 - ,simpleTitleCaseMapping:0x1D6C0 - }, - { code:0x1D6C1 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D6C1 - ,simpleLowerCaseMapping:0x1D6C1 - ,simpleTitleCaseMapping:0x1D6C1 - }, - { code:0x1D6C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C2 - ,simpleLowerCaseMapping:0x1D6C2 - ,simpleTitleCaseMapping:0x1D6C2 - }, - { code:0x1D6C3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C3 - ,simpleLowerCaseMapping:0x1D6C3 - ,simpleTitleCaseMapping:0x1D6C3 - }, - { code:0x1D6C4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C4 - ,simpleLowerCaseMapping:0x1D6C4 - ,simpleTitleCaseMapping:0x1D6C4 - }, - { code:0x1D6C5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C5 - ,simpleLowerCaseMapping:0x1D6C5 - ,simpleTitleCaseMapping:0x1D6C5 - }, - { code:0x1D6C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C6 - ,simpleLowerCaseMapping:0x1D6C6 - ,simpleTitleCaseMapping:0x1D6C6 - }, - { code:0x1D6C7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C7 - ,simpleLowerCaseMapping:0x1D6C7 - ,simpleTitleCaseMapping:0x1D6C7 - }, - { code:0x1D6C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C8 - ,simpleLowerCaseMapping:0x1D6C8 - ,simpleTitleCaseMapping:0x1D6C8 - }, - { code:0x1D6C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6C9 - ,simpleLowerCaseMapping:0x1D6C9 - ,simpleTitleCaseMapping:0x1D6C9 - }, - { code:0x1D6CA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CA - ,simpleLowerCaseMapping:0x1D6CA - ,simpleTitleCaseMapping:0x1D6CA - }, - { code:0x1D6CB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CB - ,simpleLowerCaseMapping:0x1D6CB - ,simpleTitleCaseMapping:0x1D6CB - }, - { code:0x1D6CC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CC - ,simpleLowerCaseMapping:0x1D6CC - ,simpleTitleCaseMapping:0x1D6CC - }, - { code:0x1D6CD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CD - ,simpleLowerCaseMapping:0x1D6CD - ,simpleTitleCaseMapping:0x1D6CD - }, - { code:0x1D6CE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CE - ,simpleLowerCaseMapping:0x1D6CE - ,simpleTitleCaseMapping:0x1D6CE - }, - { code:0x1D6CF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6CF - ,simpleLowerCaseMapping:0x1D6CF - ,simpleTitleCaseMapping:0x1D6CF - }, - { code:0x1D6D0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D0 - ,simpleLowerCaseMapping:0x1D6D0 - ,simpleTitleCaseMapping:0x1D6D0 - }, - { code:0x1D6D1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D1 - ,simpleLowerCaseMapping:0x1D6D1 - ,simpleTitleCaseMapping:0x1D6D1 - }, - { code:0x1D6D2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D2 - ,simpleLowerCaseMapping:0x1D6D2 - ,simpleTitleCaseMapping:0x1D6D2 - }, - { code:0x1D6D3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D3 - ,simpleLowerCaseMapping:0x1D6D3 - ,simpleTitleCaseMapping:0x1D6D3 - }, - { code:0x1D6D4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D4 - ,simpleLowerCaseMapping:0x1D6D4 - ,simpleTitleCaseMapping:0x1D6D4 - }, - { code:0x1D6D5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D5 - ,simpleLowerCaseMapping:0x1D6D5 - ,simpleTitleCaseMapping:0x1D6D5 - }, - { code:0x1D6D6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D6 - ,simpleLowerCaseMapping:0x1D6D6 - ,simpleTitleCaseMapping:0x1D6D6 - }, - { code:0x1D6D7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D7 - ,simpleLowerCaseMapping:0x1D6D7 - ,simpleTitleCaseMapping:0x1D6D7 - }, - { code:0x1D6D8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D8 - ,simpleLowerCaseMapping:0x1D6D8 - ,simpleTitleCaseMapping:0x1D6D8 - }, - { code:0x1D6D9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6D9 - ,simpleLowerCaseMapping:0x1D6D9 - ,simpleTitleCaseMapping:0x1D6D9 - }, - { code:0x1D6DA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6DA - ,simpleLowerCaseMapping:0x1D6DA - ,simpleTitleCaseMapping:0x1D6DA - }, - { code:0x1D6DB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D6DB - ,simpleLowerCaseMapping:0x1D6DB - ,simpleTitleCaseMapping:0x1D6DB - }, - { code:0x1D6DC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6DC - ,simpleLowerCaseMapping:0x1D6DC - ,simpleTitleCaseMapping:0x1D6DC - }, - { code:0x1D6DD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6DD - ,simpleLowerCaseMapping:0x1D6DD - ,simpleTitleCaseMapping:0x1D6DD - }, - { code:0x1D6DE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6DE - ,simpleLowerCaseMapping:0x1D6DE - ,simpleTitleCaseMapping:0x1D6DE - }, - { code:0x1D6DF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6DF - ,simpleLowerCaseMapping:0x1D6DF - ,simpleTitleCaseMapping:0x1D6DF - }, - { code:0x1D6E0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6E0 - ,simpleLowerCaseMapping:0x1D6E0 - ,simpleTitleCaseMapping:0x1D6E0 - }, - { code:0x1D6E1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6E1 - ,simpleLowerCaseMapping:0x1D6E1 - ,simpleTitleCaseMapping:0x1D6E1 - }, - { code:0x1D6E2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E2 - ,simpleLowerCaseMapping:0x1D6E2 - ,simpleTitleCaseMapping:0x1D6E2 - }, - { code:0x1D6E3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E3 - ,simpleLowerCaseMapping:0x1D6E3 - ,simpleTitleCaseMapping:0x1D6E3 - }, - { code:0x1D6E4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E4 - ,simpleLowerCaseMapping:0x1D6E4 - ,simpleTitleCaseMapping:0x1D6E4 - }, - { code:0x1D6E5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E5 - ,simpleLowerCaseMapping:0x1D6E5 - ,simpleTitleCaseMapping:0x1D6E5 - }, - { code:0x1D6E6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E6 - ,simpleLowerCaseMapping:0x1D6E6 - ,simpleTitleCaseMapping:0x1D6E6 - }, - { code:0x1D6E7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E7 - ,simpleLowerCaseMapping:0x1D6E7 - ,simpleTitleCaseMapping:0x1D6E7 - }, - { code:0x1D6E8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E8 - ,simpleLowerCaseMapping:0x1D6E8 - ,simpleTitleCaseMapping:0x1D6E8 - }, - { code:0x1D6E9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6E9 - ,simpleLowerCaseMapping:0x1D6E9 - ,simpleTitleCaseMapping:0x1D6E9 - }, - { code:0x1D6EA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6EA - ,simpleLowerCaseMapping:0x1D6EA - ,simpleTitleCaseMapping:0x1D6EA - }, - { code:0x1D6EB - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6EB - ,simpleLowerCaseMapping:0x1D6EB - ,simpleTitleCaseMapping:0x1D6EB - }, - { code:0x1D6EC - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6EC - ,simpleLowerCaseMapping:0x1D6EC - ,simpleTitleCaseMapping:0x1D6EC - }, - { code:0x1D6ED - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6ED - ,simpleLowerCaseMapping:0x1D6ED - ,simpleTitleCaseMapping:0x1D6ED - }, - { code:0x1D6EE - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6EE - ,simpleLowerCaseMapping:0x1D6EE - ,simpleTitleCaseMapping:0x1D6EE - }, - { code:0x1D6EF - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6EF - ,simpleLowerCaseMapping:0x1D6EF - ,simpleTitleCaseMapping:0x1D6EF - }, - { code:0x1D6F0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F0 - ,simpleLowerCaseMapping:0x1D6F0 - ,simpleTitleCaseMapping:0x1D6F0 - }, - { code:0x1D6F1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F1 - ,simpleLowerCaseMapping:0x1D6F1 - ,simpleTitleCaseMapping:0x1D6F1 - }, - { code:0x1D6F2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F2 - ,simpleLowerCaseMapping:0x1D6F2 - ,simpleTitleCaseMapping:0x1D6F2 - }, - { code:0x1D6F3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F3 - ,simpleLowerCaseMapping:0x1D6F3 - ,simpleTitleCaseMapping:0x1D6F3 - }, - { code:0x1D6F4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F4 - ,simpleLowerCaseMapping:0x1D6F4 - ,simpleTitleCaseMapping:0x1D6F4 - }, - { code:0x1D6F5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F5 - ,simpleLowerCaseMapping:0x1D6F5 - ,simpleTitleCaseMapping:0x1D6F5 - }, - { code:0x1D6F6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F6 - ,simpleLowerCaseMapping:0x1D6F6 - ,simpleTitleCaseMapping:0x1D6F6 - }, - { code:0x1D6F7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F7 - ,simpleLowerCaseMapping:0x1D6F7 - ,simpleTitleCaseMapping:0x1D6F7 - }, - { code:0x1D6F8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F8 - ,simpleLowerCaseMapping:0x1D6F8 - ,simpleTitleCaseMapping:0x1D6F8 - }, - { code:0x1D6F9 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6F9 - ,simpleLowerCaseMapping:0x1D6F9 - ,simpleTitleCaseMapping:0x1D6F9 - }, - { code:0x1D6FA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D6FA - ,simpleLowerCaseMapping:0x1D6FA - ,simpleTitleCaseMapping:0x1D6FA - }, - { code:0x1D6FB - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D6FB - ,simpleLowerCaseMapping:0x1D6FB - ,simpleTitleCaseMapping:0x1D6FB - }, - { code:0x1D6FC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6FC - ,simpleLowerCaseMapping:0x1D6FC - ,simpleTitleCaseMapping:0x1D6FC - }, - { code:0x1D6FD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6FD - ,simpleLowerCaseMapping:0x1D6FD - ,simpleTitleCaseMapping:0x1D6FD - }, - { code:0x1D6FE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6FE - ,simpleLowerCaseMapping:0x1D6FE - ,simpleTitleCaseMapping:0x1D6FE - }, - { code:0x1D6FF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D6FF - ,simpleLowerCaseMapping:0x1D6FF - ,simpleTitleCaseMapping:0x1D6FF - }, - { code:0x1D700 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D700 - ,simpleLowerCaseMapping:0x1D700 - ,simpleTitleCaseMapping:0x1D700 - }, - { code:0x1D701 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D701 - ,simpleLowerCaseMapping:0x1D701 - ,simpleTitleCaseMapping:0x1D701 - }, - { code:0x1D702 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D702 - ,simpleLowerCaseMapping:0x1D702 - ,simpleTitleCaseMapping:0x1D702 - }, - { code:0x1D703 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D703 - ,simpleLowerCaseMapping:0x1D703 - ,simpleTitleCaseMapping:0x1D703 - }, - { code:0x1D704 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D704 - ,simpleLowerCaseMapping:0x1D704 - ,simpleTitleCaseMapping:0x1D704 - }, - { code:0x1D705 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D705 - ,simpleLowerCaseMapping:0x1D705 - ,simpleTitleCaseMapping:0x1D705 - }, - { code:0x1D706 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D706 - ,simpleLowerCaseMapping:0x1D706 - ,simpleTitleCaseMapping:0x1D706 - }, - { code:0x1D707 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D707 - ,simpleLowerCaseMapping:0x1D707 - ,simpleTitleCaseMapping:0x1D707 - }, - { code:0x1D708 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D708 - ,simpleLowerCaseMapping:0x1D708 - ,simpleTitleCaseMapping:0x1D708 - }, - { code:0x1D709 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D709 - ,simpleLowerCaseMapping:0x1D709 - ,simpleTitleCaseMapping:0x1D709 - }, - { code:0x1D70A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70A - ,simpleLowerCaseMapping:0x1D70A - ,simpleTitleCaseMapping:0x1D70A - }, - { code:0x1D70B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70B - ,simpleLowerCaseMapping:0x1D70B - ,simpleTitleCaseMapping:0x1D70B - }, - { code:0x1D70C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70C - ,simpleLowerCaseMapping:0x1D70C - ,simpleTitleCaseMapping:0x1D70C - }, - { code:0x1D70D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70D - ,simpleLowerCaseMapping:0x1D70D - ,simpleTitleCaseMapping:0x1D70D - }, - { code:0x1D70E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70E - ,simpleLowerCaseMapping:0x1D70E - ,simpleTitleCaseMapping:0x1D70E - }, - { code:0x1D70F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D70F - ,simpleLowerCaseMapping:0x1D70F - ,simpleTitleCaseMapping:0x1D70F - }, - { code:0x1D710 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D710 - ,simpleLowerCaseMapping:0x1D710 - ,simpleTitleCaseMapping:0x1D710 - }, - { code:0x1D711 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D711 - ,simpleLowerCaseMapping:0x1D711 - ,simpleTitleCaseMapping:0x1D711 - }, - { code:0x1D712 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D712 - ,simpleLowerCaseMapping:0x1D712 - ,simpleTitleCaseMapping:0x1D712 - }, - { code:0x1D713 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D713 - ,simpleLowerCaseMapping:0x1D713 - ,simpleTitleCaseMapping:0x1D713 - }, - { code:0x1D714 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D714 - ,simpleLowerCaseMapping:0x1D714 - ,simpleTitleCaseMapping:0x1D714 - }, - { code:0x1D715 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D715 - ,simpleLowerCaseMapping:0x1D715 - ,simpleTitleCaseMapping:0x1D715 - }, - { code:0x1D716 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D716 - ,simpleLowerCaseMapping:0x1D716 - ,simpleTitleCaseMapping:0x1D716 - }, - { code:0x1D717 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D717 - ,simpleLowerCaseMapping:0x1D717 - ,simpleTitleCaseMapping:0x1D717 - }, - { code:0x1D718 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D718 - ,simpleLowerCaseMapping:0x1D718 - ,simpleTitleCaseMapping:0x1D718 - }, - { code:0x1D719 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D719 - ,simpleLowerCaseMapping:0x1D719 - ,simpleTitleCaseMapping:0x1D719 - }, - { code:0x1D71A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D71A - ,simpleLowerCaseMapping:0x1D71A - ,simpleTitleCaseMapping:0x1D71A - }, - { code:0x1D71B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D71B - ,simpleLowerCaseMapping:0x1D71B - ,simpleTitleCaseMapping:0x1D71B - }, - { code:0x1D71C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D71C - ,simpleLowerCaseMapping:0x1D71C - ,simpleTitleCaseMapping:0x1D71C - }, - { code:0x1D71D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D71D - ,simpleLowerCaseMapping:0x1D71D - ,simpleTitleCaseMapping:0x1D71D - }, - { code:0x1D71E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D71E - ,simpleLowerCaseMapping:0x1D71E - ,simpleTitleCaseMapping:0x1D71E - }, - { code:0x1D71F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D71F - ,simpleLowerCaseMapping:0x1D71F - ,simpleTitleCaseMapping:0x1D71F - }, - { code:0x1D720 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D720 - ,simpleLowerCaseMapping:0x1D720 - ,simpleTitleCaseMapping:0x1D720 - }, - { code:0x1D721 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D721 - ,simpleLowerCaseMapping:0x1D721 - ,simpleTitleCaseMapping:0x1D721 - }, - { code:0x1D722 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D722 - ,simpleLowerCaseMapping:0x1D722 - ,simpleTitleCaseMapping:0x1D722 - }, - { code:0x1D723 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D723 - ,simpleLowerCaseMapping:0x1D723 - ,simpleTitleCaseMapping:0x1D723 - }, - { code:0x1D724 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D724 - ,simpleLowerCaseMapping:0x1D724 - ,simpleTitleCaseMapping:0x1D724 - }, - { code:0x1D725 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D725 - ,simpleLowerCaseMapping:0x1D725 - ,simpleTitleCaseMapping:0x1D725 - }, - { code:0x1D726 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D726 - ,simpleLowerCaseMapping:0x1D726 - ,simpleTitleCaseMapping:0x1D726 - }, - { code:0x1D727 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D727 - ,simpleLowerCaseMapping:0x1D727 - ,simpleTitleCaseMapping:0x1D727 - }, - { code:0x1D728 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D728 - ,simpleLowerCaseMapping:0x1D728 - ,simpleTitleCaseMapping:0x1D728 - }, - { code:0x1D729 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D729 - ,simpleLowerCaseMapping:0x1D729 - ,simpleTitleCaseMapping:0x1D729 - }, - { code:0x1D72A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72A - ,simpleLowerCaseMapping:0x1D72A - ,simpleTitleCaseMapping:0x1D72A - }, - { code:0x1D72B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72B - ,simpleLowerCaseMapping:0x1D72B - ,simpleTitleCaseMapping:0x1D72B - }, - { code:0x1D72C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72C - ,simpleLowerCaseMapping:0x1D72C - ,simpleTitleCaseMapping:0x1D72C - }, - { code:0x1D72D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72D - ,simpleLowerCaseMapping:0x1D72D - ,simpleTitleCaseMapping:0x1D72D - }, - { code:0x1D72E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72E - ,simpleLowerCaseMapping:0x1D72E - ,simpleTitleCaseMapping:0x1D72E - }, - { code:0x1D72F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D72F - ,simpleLowerCaseMapping:0x1D72F - ,simpleTitleCaseMapping:0x1D72F - }, - { code:0x1D730 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D730 - ,simpleLowerCaseMapping:0x1D730 - ,simpleTitleCaseMapping:0x1D730 - }, - { code:0x1D731 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D731 - ,simpleLowerCaseMapping:0x1D731 - ,simpleTitleCaseMapping:0x1D731 - }, - { code:0x1D732 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D732 - ,simpleLowerCaseMapping:0x1D732 - ,simpleTitleCaseMapping:0x1D732 - }, - { code:0x1D733 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D733 - ,simpleLowerCaseMapping:0x1D733 - ,simpleTitleCaseMapping:0x1D733 - }, - { code:0x1D734 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D734 - ,simpleLowerCaseMapping:0x1D734 - ,simpleTitleCaseMapping:0x1D734 - }, - { code:0x1D735 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D735 - ,simpleLowerCaseMapping:0x1D735 - ,simpleTitleCaseMapping:0x1D735 - }, - { code:0x1D736 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D736 - ,simpleLowerCaseMapping:0x1D736 - ,simpleTitleCaseMapping:0x1D736 - }, - { code:0x1D737 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D737 - ,simpleLowerCaseMapping:0x1D737 - ,simpleTitleCaseMapping:0x1D737 - }, - { code:0x1D738 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D738 - ,simpleLowerCaseMapping:0x1D738 - ,simpleTitleCaseMapping:0x1D738 - }, - { code:0x1D739 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D739 - ,simpleLowerCaseMapping:0x1D739 - ,simpleTitleCaseMapping:0x1D739 - }, - { code:0x1D73A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73A - ,simpleLowerCaseMapping:0x1D73A - ,simpleTitleCaseMapping:0x1D73A - }, - { code:0x1D73B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73B - ,simpleLowerCaseMapping:0x1D73B - ,simpleTitleCaseMapping:0x1D73B - }, - { code:0x1D73C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73C - ,simpleLowerCaseMapping:0x1D73C - ,simpleTitleCaseMapping:0x1D73C - }, - { code:0x1D73D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73D - ,simpleLowerCaseMapping:0x1D73D - ,simpleTitleCaseMapping:0x1D73D - }, - { code:0x1D73E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73E - ,simpleLowerCaseMapping:0x1D73E - ,simpleTitleCaseMapping:0x1D73E - }, - { code:0x1D73F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D73F - ,simpleLowerCaseMapping:0x1D73F - ,simpleTitleCaseMapping:0x1D73F - }, - { code:0x1D740 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D740 - ,simpleLowerCaseMapping:0x1D740 - ,simpleTitleCaseMapping:0x1D740 - }, - { code:0x1D741 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D741 - ,simpleLowerCaseMapping:0x1D741 - ,simpleTitleCaseMapping:0x1D741 - }, - { code:0x1D742 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D742 - ,simpleLowerCaseMapping:0x1D742 - ,simpleTitleCaseMapping:0x1D742 - }, - { code:0x1D743 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D743 - ,simpleLowerCaseMapping:0x1D743 - ,simpleTitleCaseMapping:0x1D743 - }, - { code:0x1D744 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D744 - ,simpleLowerCaseMapping:0x1D744 - ,simpleTitleCaseMapping:0x1D744 - }, - { code:0x1D745 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D745 - ,simpleLowerCaseMapping:0x1D745 - ,simpleTitleCaseMapping:0x1D745 - }, - { code:0x1D746 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D746 - ,simpleLowerCaseMapping:0x1D746 - ,simpleTitleCaseMapping:0x1D746 - }, - { code:0x1D747 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D747 - ,simpleLowerCaseMapping:0x1D747 - ,simpleTitleCaseMapping:0x1D747 - }, - { code:0x1D748 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D748 - ,simpleLowerCaseMapping:0x1D748 - ,simpleTitleCaseMapping:0x1D748 - }, - { code:0x1D749 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D749 - ,simpleLowerCaseMapping:0x1D749 - ,simpleTitleCaseMapping:0x1D749 - }, - { code:0x1D74A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74A - ,simpleLowerCaseMapping:0x1D74A - ,simpleTitleCaseMapping:0x1D74A - }, - { code:0x1D74B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74B - ,simpleLowerCaseMapping:0x1D74B - ,simpleTitleCaseMapping:0x1D74B - }, - { code:0x1D74C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74C - ,simpleLowerCaseMapping:0x1D74C - ,simpleTitleCaseMapping:0x1D74C - }, - { code:0x1D74D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74D - ,simpleLowerCaseMapping:0x1D74D - ,simpleTitleCaseMapping:0x1D74D - }, - { code:0x1D74E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D74E - ,simpleLowerCaseMapping:0x1D74E - ,simpleTitleCaseMapping:0x1D74E - }, - { code:0x1D74F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D74F - ,simpleLowerCaseMapping:0x1D74F - ,simpleTitleCaseMapping:0x1D74F - }, - { code:0x1D750 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D750 - ,simpleLowerCaseMapping:0x1D750 - ,simpleTitleCaseMapping:0x1D750 - }, - { code:0x1D751 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D751 - ,simpleLowerCaseMapping:0x1D751 - ,simpleTitleCaseMapping:0x1D751 - }, - { code:0x1D752 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D752 - ,simpleLowerCaseMapping:0x1D752 - ,simpleTitleCaseMapping:0x1D752 - }, - { code:0x1D753 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D753 - ,simpleLowerCaseMapping:0x1D753 - ,simpleTitleCaseMapping:0x1D753 - }, - { code:0x1D754 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D754 - ,simpleLowerCaseMapping:0x1D754 - ,simpleTitleCaseMapping:0x1D754 - }, - { code:0x1D755 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D755 - ,simpleLowerCaseMapping:0x1D755 - ,simpleTitleCaseMapping:0x1D755 - }, - { code:0x1D756 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D756 - ,simpleLowerCaseMapping:0x1D756 - ,simpleTitleCaseMapping:0x1D756 - }, - { code:0x1D757 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D757 - ,simpleLowerCaseMapping:0x1D757 - ,simpleTitleCaseMapping:0x1D757 - }, - { code:0x1D758 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D758 - ,simpleLowerCaseMapping:0x1D758 - ,simpleTitleCaseMapping:0x1D758 - }, - { code:0x1D759 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D759 - ,simpleLowerCaseMapping:0x1D759 - ,simpleTitleCaseMapping:0x1D759 - }, - { code:0x1D75A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75A - ,simpleLowerCaseMapping:0x1D75A - ,simpleTitleCaseMapping:0x1D75A - }, - { code:0x1D75B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75B - ,simpleLowerCaseMapping:0x1D75B - ,simpleTitleCaseMapping:0x1D75B - }, - { code:0x1D75C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75C - ,simpleLowerCaseMapping:0x1D75C - ,simpleTitleCaseMapping:0x1D75C - }, - { code:0x1D75D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75D - ,simpleLowerCaseMapping:0x1D75D - ,simpleTitleCaseMapping:0x1D75D - }, - { code:0x1D75E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75E - ,simpleLowerCaseMapping:0x1D75E - ,simpleTitleCaseMapping:0x1D75E - }, - { code:0x1D75F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D75F - ,simpleLowerCaseMapping:0x1D75F - ,simpleTitleCaseMapping:0x1D75F - }, - { code:0x1D760 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D760 - ,simpleLowerCaseMapping:0x1D760 - ,simpleTitleCaseMapping:0x1D760 - }, - { code:0x1D761 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D761 - ,simpleLowerCaseMapping:0x1D761 - ,simpleTitleCaseMapping:0x1D761 - }, - { code:0x1D762 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D762 - ,simpleLowerCaseMapping:0x1D762 - ,simpleTitleCaseMapping:0x1D762 - }, - { code:0x1D763 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D763 - ,simpleLowerCaseMapping:0x1D763 - ,simpleTitleCaseMapping:0x1D763 - }, - { code:0x1D764 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D764 - ,simpleLowerCaseMapping:0x1D764 - ,simpleTitleCaseMapping:0x1D764 - }, - { code:0x1D765 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D765 - ,simpleLowerCaseMapping:0x1D765 - ,simpleTitleCaseMapping:0x1D765 - }, - { code:0x1D766 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D766 - ,simpleLowerCaseMapping:0x1D766 - ,simpleTitleCaseMapping:0x1D766 - }, - { code:0x1D767 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D767 - ,simpleLowerCaseMapping:0x1D767 - ,simpleTitleCaseMapping:0x1D767 - }, - { code:0x1D768 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D768 - ,simpleLowerCaseMapping:0x1D768 - ,simpleTitleCaseMapping:0x1D768 - }, - { code:0x1D769 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D769 - ,simpleLowerCaseMapping:0x1D769 - ,simpleTitleCaseMapping:0x1D769 - }, - { code:0x1D76A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D76A - ,simpleLowerCaseMapping:0x1D76A - ,simpleTitleCaseMapping:0x1D76A - }, - { code:0x1D76B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D76B - ,simpleLowerCaseMapping:0x1D76B - ,simpleTitleCaseMapping:0x1D76B - }, - { code:0x1D76C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D76C - ,simpleLowerCaseMapping:0x1D76C - ,simpleTitleCaseMapping:0x1D76C - }, - { code:0x1D76D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D76D - ,simpleLowerCaseMapping:0x1D76D - ,simpleTitleCaseMapping:0x1D76D - }, - { code:0x1D76E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D76E - ,simpleLowerCaseMapping:0x1D76E - ,simpleTitleCaseMapping:0x1D76E - }, - { code:0x1D76F - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D76F - ,simpleLowerCaseMapping:0x1D76F - ,simpleTitleCaseMapping:0x1D76F - }, - { code:0x1D770 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D770 - ,simpleLowerCaseMapping:0x1D770 - ,simpleTitleCaseMapping:0x1D770 - }, - { code:0x1D771 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D771 - ,simpleLowerCaseMapping:0x1D771 - ,simpleTitleCaseMapping:0x1D771 - }, - { code:0x1D772 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D772 - ,simpleLowerCaseMapping:0x1D772 - ,simpleTitleCaseMapping:0x1D772 - }, - { code:0x1D773 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D773 - ,simpleLowerCaseMapping:0x1D773 - ,simpleTitleCaseMapping:0x1D773 - }, - { code:0x1D774 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D774 - ,simpleLowerCaseMapping:0x1D774 - ,simpleTitleCaseMapping:0x1D774 - }, - { code:0x1D775 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D775 - ,simpleLowerCaseMapping:0x1D775 - ,simpleTitleCaseMapping:0x1D775 - }, - { code:0x1D776 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D776 - ,simpleLowerCaseMapping:0x1D776 - ,simpleTitleCaseMapping:0x1D776 - }, - { code:0x1D777 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D777 - ,simpleLowerCaseMapping:0x1D777 - ,simpleTitleCaseMapping:0x1D777 - }, - { code:0x1D778 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D778 - ,simpleLowerCaseMapping:0x1D778 - ,simpleTitleCaseMapping:0x1D778 - }, - { code:0x1D779 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D779 - ,simpleLowerCaseMapping:0x1D779 - ,simpleTitleCaseMapping:0x1D779 - }, - { code:0x1D77A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77A - ,simpleLowerCaseMapping:0x1D77A - ,simpleTitleCaseMapping:0x1D77A - }, - { code:0x1D77B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77B - ,simpleLowerCaseMapping:0x1D77B - ,simpleTitleCaseMapping:0x1D77B - }, - { code:0x1D77C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77C - ,simpleLowerCaseMapping:0x1D77C - ,simpleTitleCaseMapping:0x1D77C - }, - { code:0x1D77D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77D - ,simpleLowerCaseMapping:0x1D77D - ,simpleTitleCaseMapping:0x1D77D - }, - { code:0x1D77E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77E - ,simpleLowerCaseMapping:0x1D77E - ,simpleTitleCaseMapping:0x1D77E - }, - { code:0x1D77F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D77F - ,simpleLowerCaseMapping:0x1D77F - ,simpleTitleCaseMapping:0x1D77F - }, - { code:0x1D780 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D780 - ,simpleLowerCaseMapping:0x1D780 - ,simpleTitleCaseMapping:0x1D780 - }, - { code:0x1D781 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D781 - ,simpleLowerCaseMapping:0x1D781 - ,simpleTitleCaseMapping:0x1D781 - }, - { code:0x1D782 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D782 - ,simpleLowerCaseMapping:0x1D782 - ,simpleTitleCaseMapping:0x1D782 - }, - { code:0x1D783 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D783 - ,simpleLowerCaseMapping:0x1D783 - ,simpleTitleCaseMapping:0x1D783 - }, - { code:0x1D784 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D784 - ,simpleLowerCaseMapping:0x1D784 - ,simpleTitleCaseMapping:0x1D784 - }, - { code:0x1D785 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D785 - ,simpleLowerCaseMapping:0x1D785 - ,simpleTitleCaseMapping:0x1D785 - }, - { code:0x1D786 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D786 - ,simpleLowerCaseMapping:0x1D786 - ,simpleTitleCaseMapping:0x1D786 - }, - { code:0x1D787 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D787 - ,simpleLowerCaseMapping:0x1D787 - ,simpleTitleCaseMapping:0x1D787 - }, - { code:0x1D788 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D788 - ,simpleLowerCaseMapping:0x1D788 - ,simpleTitleCaseMapping:0x1D788 - }, - { code:0x1D789 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D789 - ,simpleLowerCaseMapping:0x1D789 - ,simpleTitleCaseMapping:0x1D789 - }, - { code:0x1D78A - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78A - ,simpleLowerCaseMapping:0x1D78A - ,simpleTitleCaseMapping:0x1D78A - }, - { code:0x1D78B - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78B - ,simpleLowerCaseMapping:0x1D78B - ,simpleTitleCaseMapping:0x1D78B - }, - { code:0x1D78C - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78C - ,simpleLowerCaseMapping:0x1D78C - ,simpleTitleCaseMapping:0x1D78C - }, - { code:0x1D78D - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78D - ,simpleLowerCaseMapping:0x1D78D - ,simpleTitleCaseMapping:0x1D78D - }, - { code:0x1D78E - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78E - ,simpleLowerCaseMapping:0x1D78E - ,simpleTitleCaseMapping:0x1D78E - }, - { code:0x1D78F - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D78F - ,simpleLowerCaseMapping:0x1D78F - ,simpleTitleCaseMapping:0x1D78F - }, - { code:0x1D790 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D790 - ,simpleLowerCaseMapping:0x1D790 - ,simpleTitleCaseMapping:0x1D790 - }, - { code:0x1D791 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D791 - ,simpleLowerCaseMapping:0x1D791 - ,simpleTitleCaseMapping:0x1D791 - }, - { code:0x1D792 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D792 - ,simpleLowerCaseMapping:0x1D792 - ,simpleTitleCaseMapping:0x1D792 - }, - { code:0x1D793 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D793 - ,simpleLowerCaseMapping:0x1D793 - ,simpleTitleCaseMapping:0x1D793 - }, - { code:0x1D794 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D794 - ,simpleLowerCaseMapping:0x1D794 - ,simpleTitleCaseMapping:0x1D794 - }, - { code:0x1D795 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D795 - ,simpleLowerCaseMapping:0x1D795 - ,simpleTitleCaseMapping:0x1D795 - }, - { code:0x1D796 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D796 - ,simpleLowerCaseMapping:0x1D796 - ,simpleTitleCaseMapping:0x1D796 - }, - { code:0x1D797 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D797 - ,simpleLowerCaseMapping:0x1D797 - ,simpleTitleCaseMapping:0x1D797 - }, - { code:0x1D798 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D798 - ,simpleLowerCaseMapping:0x1D798 - ,simpleTitleCaseMapping:0x1D798 - }, - { code:0x1D799 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D799 - ,simpleLowerCaseMapping:0x1D799 - ,simpleTitleCaseMapping:0x1D799 - }, - { code:0x1D79A - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79A - ,simpleLowerCaseMapping:0x1D79A - ,simpleTitleCaseMapping:0x1D79A - }, - { code:0x1D79B - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79B - ,simpleLowerCaseMapping:0x1D79B - ,simpleTitleCaseMapping:0x1D79B - }, - { code:0x1D79C - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79C - ,simpleLowerCaseMapping:0x1D79C - ,simpleTitleCaseMapping:0x1D79C - }, - { code:0x1D79D - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79D - ,simpleLowerCaseMapping:0x1D79D - ,simpleTitleCaseMapping:0x1D79D - }, - { code:0x1D79E - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79E - ,simpleLowerCaseMapping:0x1D79E - ,simpleTitleCaseMapping:0x1D79E - }, - { code:0x1D79F - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D79F - ,simpleLowerCaseMapping:0x1D79F - ,simpleTitleCaseMapping:0x1D79F - }, - { code:0x1D7A0 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A0 - ,simpleLowerCaseMapping:0x1D7A0 - ,simpleTitleCaseMapping:0x1D7A0 - }, - { code:0x1D7A1 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A1 - ,simpleLowerCaseMapping:0x1D7A1 - ,simpleTitleCaseMapping:0x1D7A1 - }, - { code:0x1D7A2 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A2 - ,simpleLowerCaseMapping:0x1D7A2 - ,simpleTitleCaseMapping:0x1D7A2 - }, - { code:0x1D7A3 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A3 - ,simpleLowerCaseMapping:0x1D7A3 - ,simpleTitleCaseMapping:0x1D7A3 - }, - { code:0x1D7A4 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A4 - ,simpleLowerCaseMapping:0x1D7A4 - ,simpleTitleCaseMapping:0x1D7A4 - }, - { code:0x1D7A5 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A5 - ,simpleLowerCaseMapping:0x1D7A5 - ,simpleTitleCaseMapping:0x1D7A5 - }, - { code:0x1D7A6 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A6 - ,simpleLowerCaseMapping:0x1D7A6 - ,simpleTitleCaseMapping:0x1D7A6 - }, - { code:0x1D7A7 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A7 - ,simpleLowerCaseMapping:0x1D7A7 - ,simpleTitleCaseMapping:0x1D7A7 - }, - { code:0x1D7A8 - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7A8 - ,simpleLowerCaseMapping:0x1D7A8 - ,simpleTitleCaseMapping:0x1D7A8 - }, - { code:0x1D7A9 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D7A9 - ,simpleLowerCaseMapping:0x1D7A9 - ,simpleTitleCaseMapping:0x1D7A9 - }, - { code:0x1D7AA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AA - ,simpleLowerCaseMapping:0x1D7AA - ,simpleTitleCaseMapping:0x1D7AA - }, - { code:0x1D7AB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AB - ,simpleLowerCaseMapping:0x1D7AB - ,simpleTitleCaseMapping:0x1D7AB - }, - { code:0x1D7AC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AC - ,simpleLowerCaseMapping:0x1D7AC - ,simpleTitleCaseMapping:0x1D7AC - }, - { code:0x1D7AD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AD - ,simpleLowerCaseMapping:0x1D7AD - ,simpleTitleCaseMapping:0x1D7AD - }, - { code:0x1D7AE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AE - ,simpleLowerCaseMapping:0x1D7AE - ,simpleTitleCaseMapping:0x1D7AE - }, - { code:0x1D7AF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7AF - ,simpleLowerCaseMapping:0x1D7AF - ,simpleTitleCaseMapping:0x1D7AF - }, - { code:0x1D7B0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B0 - ,simpleLowerCaseMapping:0x1D7B0 - ,simpleTitleCaseMapping:0x1D7B0 - }, - { code:0x1D7B1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B1 - ,simpleLowerCaseMapping:0x1D7B1 - ,simpleTitleCaseMapping:0x1D7B1 - }, - { code:0x1D7B2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B2 - ,simpleLowerCaseMapping:0x1D7B2 - ,simpleTitleCaseMapping:0x1D7B2 - }, - { code:0x1D7B3 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B3 - ,simpleLowerCaseMapping:0x1D7B3 - ,simpleTitleCaseMapping:0x1D7B3 - }, - { code:0x1D7B4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B4 - ,simpleLowerCaseMapping:0x1D7B4 - ,simpleTitleCaseMapping:0x1D7B4 - }, - { code:0x1D7B5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B5 - ,simpleLowerCaseMapping:0x1D7B5 - ,simpleTitleCaseMapping:0x1D7B5 - }, - { code:0x1D7B6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B6 - ,simpleLowerCaseMapping:0x1D7B6 - ,simpleTitleCaseMapping:0x1D7B6 - }, - { code:0x1D7B7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B7 - ,simpleLowerCaseMapping:0x1D7B7 - ,simpleTitleCaseMapping:0x1D7B7 - }, - { code:0x1D7B8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B8 - ,simpleLowerCaseMapping:0x1D7B8 - ,simpleTitleCaseMapping:0x1D7B8 - }, - { code:0x1D7B9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7B9 - ,simpleLowerCaseMapping:0x1D7B9 - ,simpleTitleCaseMapping:0x1D7B9 - }, - { code:0x1D7BA - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BA - ,simpleLowerCaseMapping:0x1D7BA - ,simpleTitleCaseMapping:0x1D7BA - }, - { code:0x1D7BB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BB - ,simpleLowerCaseMapping:0x1D7BB - ,simpleTitleCaseMapping:0x1D7BB - }, - { code:0x1D7BC - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BC - ,simpleLowerCaseMapping:0x1D7BC - ,simpleTitleCaseMapping:0x1D7BC - }, - { code:0x1D7BD - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BD - ,simpleLowerCaseMapping:0x1D7BD - ,simpleTitleCaseMapping:0x1D7BD - }, - { code:0x1D7BE - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BE - ,simpleLowerCaseMapping:0x1D7BE - ,simpleTitleCaseMapping:0x1D7BE - }, - { code:0x1D7BF - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7BF - ,simpleLowerCaseMapping:0x1D7BF - ,simpleTitleCaseMapping:0x1D7BF - }, - { code:0x1D7C0 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C0 - ,simpleLowerCaseMapping:0x1D7C0 - ,simpleTitleCaseMapping:0x1D7C0 - }, - { code:0x1D7C1 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C1 - ,simpleLowerCaseMapping:0x1D7C1 - ,simpleTitleCaseMapping:0x1D7C1 - }, - { code:0x1D7C2 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C2 - ,simpleLowerCaseMapping:0x1D7C2 - ,simpleTitleCaseMapping:0x1D7C2 - }, - { code:0x1D7C3 - ,generalCategory:UnicodeData.GeneralCategory.Sm - ,simpleUpperCaseMapping:0x1D7C3 - ,simpleLowerCaseMapping:0x1D7C3 - ,simpleTitleCaseMapping:0x1D7C3 - }, - { code:0x1D7C4 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C4 - ,simpleLowerCaseMapping:0x1D7C4 - ,simpleTitleCaseMapping:0x1D7C4 - }, - { code:0x1D7C5 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C5 - ,simpleLowerCaseMapping:0x1D7C5 - ,simpleTitleCaseMapping:0x1D7C5 - }, - { code:0x1D7C6 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C6 - ,simpleLowerCaseMapping:0x1D7C6 - ,simpleTitleCaseMapping:0x1D7C6 - }, - { code:0x1D7C7 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C7 - ,simpleLowerCaseMapping:0x1D7C7 - ,simpleTitleCaseMapping:0x1D7C7 - }, - { code:0x1D7C8 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C8 - ,simpleLowerCaseMapping:0x1D7C8 - ,simpleTitleCaseMapping:0x1D7C8 - }, - { code:0x1D7C9 - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7C9 - ,simpleLowerCaseMapping:0x1D7C9 - ,simpleTitleCaseMapping:0x1D7C9 - }, - { code:0x1D7CA - ,generalCategory:UnicodeData.GeneralCategory.Lu - ,simpleUpperCaseMapping:0x1D7CA - ,simpleLowerCaseMapping:0x1D7CA - ,simpleTitleCaseMapping:0x1D7CA - }, - { code:0x1D7CB - ,generalCategory:UnicodeData.GeneralCategory.Ll - ,simpleUpperCaseMapping:0x1D7CB - ,simpleLowerCaseMapping:0x1D7CB - ,simpleTitleCaseMapping:0x1D7CB - }, - { code:0x1D7CE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7CE - ,simpleLowerCaseMapping:0x1D7CE - ,simpleTitleCaseMapping:0x1D7CE - }, - { code:0x1D7CF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7CF - ,simpleLowerCaseMapping:0x1D7CF - ,simpleTitleCaseMapping:0x1D7CF - }, - { code:0x1D7D0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D0 - ,simpleLowerCaseMapping:0x1D7D0 - ,simpleTitleCaseMapping:0x1D7D0 - }, - { code:0x1D7D1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D1 - ,simpleLowerCaseMapping:0x1D7D1 - ,simpleTitleCaseMapping:0x1D7D1 - }, - { code:0x1D7D2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D2 - ,simpleLowerCaseMapping:0x1D7D2 - ,simpleTitleCaseMapping:0x1D7D2 - }, - { code:0x1D7D3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D3 - ,simpleLowerCaseMapping:0x1D7D3 - ,simpleTitleCaseMapping:0x1D7D3 - }, - { code:0x1D7D4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D4 - ,simpleLowerCaseMapping:0x1D7D4 - ,simpleTitleCaseMapping:0x1D7D4 - }, - { code:0x1D7D5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D5 - ,simpleLowerCaseMapping:0x1D7D5 - ,simpleTitleCaseMapping:0x1D7D5 - }, - { code:0x1D7D6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D6 - ,simpleLowerCaseMapping:0x1D7D6 - ,simpleTitleCaseMapping:0x1D7D6 - }, - { code:0x1D7D7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D7 - ,simpleLowerCaseMapping:0x1D7D7 - ,simpleTitleCaseMapping:0x1D7D7 - }, - { code:0x1D7D8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D8 - ,simpleLowerCaseMapping:0x1D7D8 - ,simpleTitleCaseMapping:0x1D7D8 - }, - { code:0x1D7D9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7D9 - ,simpleLowerCaseMapping:0x1D7D9 - ,simpleTitleCaseMapping:0x1D7D9 - }, - { code:0x1D7DA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DA - ,simpleLowerCaseMapping:0x1D7DA - ,simpleTitleCaseMapping:0x1D7DA - }, - { code:0x1D7DB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DB - ,simpleLowerCaseMapping:0x1D7DB - ,simpleTitleCaseMapping:0x1D7DB - }, - { code:0x1D7DC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DC - ,simpleLowerCaseMapping:0x1D7DC - ,simpleTitleCaseMapping:0x1D7DC - }, - { code:0x1D7DD - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DD - ,simpleLowerCaseMapping:0x1D7DD - ,simpleTitleCaseMapping:0x1D7DD - }, - { code:0x1D7DE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DE - ,simpleLowerCaseMapping:0x1D7DE - ,simpleTitleCaseMapping:0x1D7DE - }, - { code:0x1D7DF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7DF - ,simpleLowerCaseMapping:0x1D7DF - ,simpleTitleCaseMapping:0x1D7DF - }, - { code:0x1D7E0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E0 - ,simpleLowerCaseMapping:0x1D7E0 - ,simpleTitleCaseMapping:0x1D7E0 - }, - { code:0x1D7E1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E1 - ,simpleLowerCaseMapping:0x1D7E1 - ,simpleTitleCaseMapping:0x1D7E1 - }, - { code:0x1D7E2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E2 - ,simpleLowerCaseMapping:0x1D7E2 - ,simpleTitleCaseMapping:0x1D7E2 - }, - { code:0x1D7E3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E3 - ,simpleLowerCaseMapping:0x1D7E3 - ,simpleTitleCaseMapping:0x1D7E3 - }, - { code:0x1D7E4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E4 - ,simpleLowerCaseMapping:0x1D7E4 - ,simpleTitleCaseMapping:0x1D7E4 - }, - { code:0x1D7E5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E5 - ,simpleLowerCaseMapping:0x1D7E5 - ,simpleTitleCaseMapping:0x1D7E5 - }, - { code:0x1D7E6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E6 - ,simpleLowerCaseMapping:0x1D7E6 - ,simpleTitleCaseMapping:0x1D7E6 - }, - { code:0x1D7E7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E7 - ,simpleLowerCaseMapping:0x1D7E7 - ,simpleTitleCaseMapping:0x1D7E7 - }, - { code:0x1D7E8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E8 - ,simpleLowerCaseMapping:0x1D7E8 - ,simpleTitleCaseMapping:0x1D7E8 - }, - { code:0x1D7E9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7E9 - ,simpleLowerCaseMapping:0x1D7E9 - ,simpleTitleCaseMapping:0x1D7E9 - }, - { code:0x1D7EA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7EA - ,simpleLowerCaseMapping:0x1D7EA - ,simpleTitleCaseMapping:0x1D7EA - }, - { code:0x1D7EB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7EB - ,simpleLowerCaseMapping:0x1D7EB - ,simpleTitleCaseMapping:0x1D7EB - }, - { code:0x1D7EC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7EC - ,simpleLowerCaseMapping:0x1D7EC - ,simpleTitleCaseMapping:0x1D7EC - }, - { code:0x1D7ED - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7ED - ,simpleLowerCaseMapping:0x1D7ED - ,simpleTitleCaseMapping:0x1D7ED - }, - { code:0x1D7EE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7EE - ,simpleLowerCaseMapping:0x1D7EE - ,simpleTitleCaseMapping:0x1D7EE - }, - { code:0x1D7EF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7EF - ,simpleLowerCaseMapping:0x1D7EF - ,simpleTitleCaseMapping:0x1D7EF - }, - { code:0x1D7F0 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F0 - ,simpleLowerCaseMapping:0x1D7F0 - ,simpleTitleCaseMapping:0x1D7F0 - }, - { code:0x1D7F1 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F1 - ,simpleLowerCaseMapping:0x1D7F1 - ,simpleTitleCaseMapping:0x1D7F1 - }, - { code:0x1D7F2 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F2 - ,simpleLowerCaseMapping:0x1D7F2 - ,simpleTitleCaseMapping:0x1D7F2 - }, - { code:0x1D7F3 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F3 - ,simpleLowerCaseMapping:0x1D7F3 - ,simpleTitleCaseMapping:0x1D7F3 - }, - { code:0x1D7F4 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F4 - ,simpleLowerCaseMapping:0x1D7F4 - ,simpleTitleCaseMapping:0x1D7F4 - }, - { code:0x1D7F5 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F5 - ,simpleLowerCaseMapping:0x1D7F5 - ,simpleTitleCaseMapping:0x1D7F5 - }, - { code:0x1D7F6 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F6 - ,simpleLowerCaseMapping:0x1D7F6 - ,simpleTitleCaseMapping:0x1D7F6 - }, - { code:0x1D7F7 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F7 - ,simpleLowerCaseMapping:0x1D7F7 - ,simpleTitleCaseMapping:0x1D7F7 - }, - { code:0x1D7F8 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F8 - ,simpleLowerCaseMapping:0x1D7F8 - ,simpleTitleCaseMapping:0x1D7F8 - }, - { code:0x1D7F9 - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7F9 - ,simpleLowerCaseMapping:0x1D7F9 - ,simpleTitleCaseMapping:0x1D7F9 - }, - { code:0x1D7FA - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FA - ,simpleLowerCaseMapping:0x1D7FA - ,simpleTitleCaseMapping:0x1D7FA - }, - { code:0x1D7FB - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FB - ,simpleLowerCaseMapping:0x1D7FB - ,simpleTitleCaseMapping:0x1D7FB - }, - { code:0x1D7FC - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FC - ,simpleLowerCaseMapping:0x1D7FC - ,simpleTitleCaseMapping:0x1D7FC - }, - { code:0x1D7FD - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FD - ,simpleLowerCaseMapping:0x1D7FD - ,simpleTitleCaseMapping:0x1D7FD - }, - { code:0x1D7FE - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FE - ,simpleLowerCaseMapping:0x1D7FE - ,simpleTitleCaseMapping:0x1D7FE - }, - { code:0x1D7FF - ,generalCategory:UnicodeData.GeneralCategory.Nd - ,simpleUpperCaseMapping:0x1D7FF - ,simpleLowerCaseMapping:0x1D7FF - ,simpleTitleCaseMapping:0x1D7FF - }, - { code:0x20000 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x20000 - ,simpleLowerCaseMapping:0x20000 - ,simpleTitleCaseMapping:0x20000 - }, - { code:0x2A6D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2A6D6 - ,simpleLowerCaseMapping:0x2A6D6 - ,simpleTitleCaseMapping:0x2A6D6 - }, - { code:0x2F800 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F800 - ,simpleLowerCaseMapping:0x2F800 - ,simpleTitleCaseMapping:0x2F800 - }, - { code:0x2F801 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F801 - ,simpleLowerCaseMapping:0x2F801 - ,simpleTitleCaseMapping:0x2F801 - }, - { code:0x2F802 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F802 - ,simpleLowerCaseMapping:0x2F802 - ,simpleTitleCaseMapping:0x2F802 - }, - { code:0x2F803 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F803 - ,simpleLowerCaseMapping:0x2F803 - ,simpleTitleCaseMapping:0x2F803 - }, - { code:0x2F804 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F804 - ,simpleLowerCaseMapping:0x2F804 - ,simpleTitleCaseMapping:0x2F804 - }, - { code:0x2F805 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F805 - ,simpleLowerCaseMapping:0x2F805 - ,simpleTitleCaseMapping:0x2F805 - }, - { code:0x2F806 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F806 - ,simpleLowerCaseMapping:0x2F806 - ,simpleTitleCaseMapping:0x2F806 - }, - { code:0x2F807 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F807 - ,simpleLowerCaseMapping:0x2F807 - ,simpleTitleCaseMapping:0x2F807 - }, - { code:0x2F808 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F808 - ,simpleLowerCaseMapping:0x2F808 - ,simpleTitleCaseMapping:0x2F808 - }, - { code:0x2F809 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F809 - ,simpleLowerCaseMapping:0x2F809 - ,simpleTitleCaseMapping:0x2F809 - }, - { code:0x2F80A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80A - ,simpleLowerCaseMapping:0x2F80A - ,simpleTitleCaseMapping:0x2F80A - }, - { code:0x2F80B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80B - ,simpleLowerCaseMapping:0x2F80B - ,simpleTitleCaseMapping:0x2F80B - }, - { code:0x2F80C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80C - ,simpleLowerCaseMapping:0x2F80C - ,simpleTitleCaseMapping:0x2F80C - }, - { code:0x2F80D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80D - ,simpleLowerCaseMapping:0x2F80D - ,simpleTitleCaseMapping:0x2F80D - }, - { code:0x2F80E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80E - ,simpleLowerCaseMapping:0x2F80E - ,simpleTitleCaseMapping:0x2F80E - }, - { code:0x2F80F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F80F - ,simpleLowerCaseMapping:0x2F80F - ,simpleTitleCaseMapping:0x2F80F - }, - { code:0x2F810 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F810 - ,simpleLowerCaseMapping:0x2F810 - ,simpleTitleCaseMapping:0x2F810 - }, - { code:0x2F811 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F811 - ,simpleLowerCaseMapping:0x2F811 - ,simpleTitleCaseMapping:0x2F811 - }, - { code:0x2F812 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F812 - ,simpleLowerCaseMapping:0x2F812 - ,simpleTitleCaseMapping:0x2F812 - }, - { code:0x2F813 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F813 - ,simpleLowerCaseMapping:0x2F813 - ,simpleTitleCaseMapping:0x2F813 - }, - { code:0x2F814 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F814 - ,simpleLowerCaseMapping:0x2F814 - ,simpleTitleCaseMapping:0x2F814 - }, - { code:0x2F815 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F815 - ,simpleLowerCaseMapping:0x2F815 - ,simpleTitleCaseMapping:0x2F815 - }, - { code:0x2F816 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F816 - ,simpleLowerCaseMapping:0x2F816 - ,simpleTitleCaseMapping:0x2F816 - }, - { code:0x2F817 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F817 - ,simpleLowerCaseMapping:0x2F817 - ,simpleTitleCaseMapping:0x2F817 - }, - { code:0x2F818 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F818 - ,simpleLowerCaseMapping:0x2F818 - ,simpleTitleCaseMapping:0x2F818 - }, - { code:0x2F819 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F819 - ,simpleLowerCaseMapping:0x2F819 - ,simpleTitleCaseMapping:0x2F819 - }, - { code:0x2F81A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81A - ,simpleLowerCaseMapping:0x2F81A - ,simpleTitleCaseMapping:0x2F81A - }, - { code:0x2F81B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81B - ,simpleLowerCaseMapping:0x2F81B - ,simpleTitleCaseMapping:0x2F81B - }, - { code:0x2F81C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81C - ,simpleLowerCaseMapping:0x2F81C - ,simpleTitleCaseMapping:0x2F81C - }, - { code:0x2F81D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81D - ,simpleLowerCaseMapping:0x2F81D - ,simpleTitleCaseMapping:0x2F81D - }, - { code:0x2F81E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81E - ,simpleLowerCaseMapping:0x2F81E - ,simpleTitleCaseMapping:0x2F81E - }, - { code:0x2F81F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F81F - ,simpleLowerCaseMapping:0x2F81F - ,simpleTitleCaseMapping:0x2F81F - }, - { code:0x2F820 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F820 - ,simpleLowerCaseMapping:0x2F820 - ,simpleTitleCaseMapping:0x2F820 - }, - { code:0x2F821 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F821 - ,simpleLowerCaseMapping:0x2F821 - ,simpleTitleCaseMapping:0x2F821 - }, - { code:0x2F822 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F822 - ,simpleLowerCaseMapping:0x2F822 - ,simpleTitleCaseMapping:0x2F822 - }, - { code:0x2F823 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F823 - ,simpleLowerCaseMapping:0x2F823 - ,simpleTitleCaseMapping:0x2F823 - }, - { code:0x2F824 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F824 - ,simpleLowerCaseMapping:0x2F824 - ,simpleTitleCaseMapping:0x2F824 - }, - { code:0x2F825 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F825 - ,simpleLowerCaseMapping:0x2F825 - ,simpleTitleCaseMapping:0x2F825 - }, - { code:0x2F826 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F826 - ,simpleLowerCaseMapping:0x2F826 - ,simpleTitleCaseMapping:0x2F826 - }, - { code:0x2F827 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F827 - ,simpleLowerCaseMapping:0x2F827 - ,simpleTitleCaseMapping:0x2F827 - }, - { code:0x2F828 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F828 - ,simpleLowerCaseMapping:0x2F828 - ,simpleTitleCaseMapping:0x2F828 - }, - { code:0x2F829 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F829 - ,simpleLowerCaseMapping:0x2F829 - ,simpleTitleCaseMapping:0x2F829 - }, - { code:0x2F82A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82A - ,simpleLowerCaseMapping:0x2F82A - ,simpleTitleCaseMapping:0x2F82A - }, - { code:0x2F82B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82B - ,simpleLowerCaseMapping:0x2F82B - ,simpleTitleCaseMapping:0x2F82B - }, - { code:0x2F82C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82C - ,simpleLowerCaseMapping:0x2F82C - ,simpleTitleCaseMapping:0x2F82C - }, - { code:0x2F82D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82D - ,simpleLowerCaseMapping:0x2F82D - ,simpleTitleCaseMapping:0x2F82D - }, - { code:0x2F82E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82E - ,simpleLowerCaseMapping:0x2F82E - ,simpleTitleCaseMapping:0x2F82E - }, - { code:0x2F82F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F82F - ,simpleLowerCaseMapping:0x2F82F - ,simpleTitleCaseMapping:0x2F82F - }, - { code:0x2F830 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F830 - ,simpleLowerCaseMapping:0x2F830 - ,simpleTitleCaseMapping:0x2F830 - }, - { code:0x2F831 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F831 - ,simpleLowerCaseMapping:0x2F831 - ,simpleTitleCaseMapping:0x2F831 - }, - { code:0x2F832 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F832 - ,simpleLowerCaseMapping:0x2F832 - ,simpleTitleCaseMapping:0x2F832 - }, - { code:0x2F833 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F833 - ,simpleLowerCaseMapping:0x2F833 - ,simpleTitleCaseMapping:0x2F833 - }, - { code:0x2F834 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F834 - ,simpleLowerCaseMapping:0x2F834 - ,simpleTitleCaseMapping:0x2F834 - }, - { code:0x2F835 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F835 - ,simpleLowerCaseMapping:0x2F835 - ,simpleTitleCaseMapping:0x2F835 - }, - { code:0x2F836 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F836 - ,simpleLowerCaseMapping:0x2F836 - ,simpleTitleCaseMapping:0x2F836 - }, - { code:0x2F837 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F837 - ,simpleLowerCaseMapping:0x2F837 - ,simpleTitleCaseMapping:0x2F837 - }, - { code:0x2F838 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F838 - ,simpleLowerCaseMapping:0x2F838 - ,simpleTitleCaseMapping:0x2F838 - }, - { code:0x2F839 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F839 - ,simpleLowerCaseMapping:0x2F839 - ,simpleTitleCaseMapping:0x2F839 - }, - { code:0x2F83A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83A - ,simpleLowerCaseMapping:0x2F83A - ,simpleTitleCaseMapping:0x2F83A - }, - { code:0x2F83B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83B - ,simpleLowerCaseMapping:0x2F83B - ,simpleTitleCaseMapping:0x2F83B - }, - { code:0x2F83C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83C - ,simpleLowerCaseMapping:0x2F83C - ,simpleTitleCaseMapping:0x2F83C - }, - { code:0x2F83D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83D - ,simpleLowerCaseMapping:0x2F83D - ,simpleTitleCaseMapping:0x2F83D - }, - { code:0x2F83E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83E - ,simpleLowerCaseMapping:0x2F83E - ,simpleTitleCaseMapping:0x2F83E - }, - { code:0x2F83F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F83F - ,simpleLowerCaseMapping:0x2F83F - ,simpleTitleCaseMapping:0x2F83F - }, - { code:0x2F840 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F840 - ,simpleLowerCaseMapping:0x2F840 - ,simpleTitleCaseMapping:0x2F840 - }, - { code:0x2F841 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F841 - ,simpleLowerCaseMapping:0x2F841 - ,simpleTitleCaseMapping:0x2F841 - }, - { code:0x2F842 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F842 - ,simpleLowerCaseMapping:0x2F842 - ,simpleTitleCaseMapping:0x2F842 - }, - { code:0x2F843 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F843 - ,simpleLowerCaseMapping:0x2F843 - ,simpleTitleCaseMapping:0x2F843 - }, - { code:0x2F844 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F844 - ,simpleLowerCaseMapping:0x2F844 - ,simpleTitleCaseMapping:0x2F844 - }, - { code:0x2F845 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F845 - ,simpleLowerCaseMapping:0x2F845 - ,simpleTitleCaseMapping:0x2F845 - }, - { code:0x2F846 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F846 - ,simpleLowerCaseMapping:0x2F846 - ,simpleTitleCaseMapping:0x2F846 - }, - { code:0x2F847 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F847 - ,simpleLowerCaseMapping:0x2F847 - ,simpleTitleCaseMapping:0x2F847 - }, - { code:0x2F848 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F848 - ,simpleLowerCaseMapping:0x2F848 - ,simpleTitleCaseMapping:0x2F848 - }, - { code:0x2F849 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F849 - ,simpleLowerCaseMapping:0x2F849 - ,simpleTitleCaseMapping:0x2F849 - }, - { code:0x2F84A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84A - ,simpleLowerCaseMapping:0x2F84A - ,simpleTitleCaseMapping:0x2F84A - }, - { code:0x2F84B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84B - ,simpleLowerCaseMapping:0x2F84B - ,simpleTitleCaseMapping:0x2F84B - }, - { code:0x2F84C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84C - ,simpleLowerCaseMapping:0x2F84C - ,simpleTitleCaseMapping:0x2F84C - }, - { code:0x2F84D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84D - ,simpleLowerCaseMapping:0x2F84D - ,simpleTitleCaseMapping:0x2F84D - }, - { code:0x2F84E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84E - ,simpleLowerCaseMapping:0x2F84E - ,simpleTitleCaseMapping:0x2F84E - }, - { code:0x2F84F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F84F - ,simpleLowerCaseMapping:0x2F84F - ,simpleTitleCaseMapping:0x2F84F - }, - { code:0x2F850 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F850 - ,simpleLowerCaseMapping:0x2F850 - ,simpleTitleCaseMapping:0x2F850 - }, - { code:0x2F851 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F851 - ,simpleLowerCaseMapping:0x2F851 - ,simpleTitleCaseMapping:0x2F851 - }, - { code:0x2F852 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F852 - ,simpleLowerCaseMapping:0x2F852 - ,simpleTitleCaseMapping:0x2F852 - }, - { code:0x2F853 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F853 - ,simpleLowerCaseMapping:0x2F853 - ,simpleTitleCaseMapping:0x2F853 - }, - { code:0x2F854 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F854 - ,simpleLowerCaseMapping:0x2F854 - ,simpleTitleCaseMapping:0x2F854 - }, - { code:0x2F855 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F855 - ,simpleLowerCaseMapping:0x2F855 - ,simpleTitleCaseMapping:0x2F855 - }, - { code:0x2F856 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F856 - ,simpleLowerCaseMapping:0x2F856 - ,simpleTitleCaseMapping:0x2F856 - }, - { code:0x2F857 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F857 - ,simpleLowerCaseMapping:0x2F857 - ,simpleTitleCaseMapping:0x2F857 - }, - { code:0x2F858 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F858 - ,simpleLowerCaseMapping:0x2F858 - ,simpleTitleCaseMapping:0x2F858 - }, - { code:0x2F859 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F859 - ,simpleLowerCaseMapping:0x2F859 - ,simpleTitleCaseMapping:0x2F859 - }, - { code:0x2F85A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85A - ,simpleLowerCaseMapping:0x2F85A - ,simpleTitleCaseMapping:0x2F85A - }, - { code:0x2F85B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85B - ,simpleLowerCaseMapping:0x2F85B - ,simpleTitleCaseMapping:0x2F85B - }, - { code:0x2F85C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85C - ,simpleLowerCaseMapping:0x2F85C - ,simpleTitleCaseMapping:0x2F85C - }, - { code:0x2F85D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85D - ,simpleLowerCaseMapping:0x2F85D - ,simpleTitleCaseMapping:0x2F85D - }, - { code:0x2F85E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85E - ,simpleLowerCaseMapping:0x2F85E - ,simpleTitleCaseMapping:0x2F85E - }, - { code:0x2F85F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F85F - ,simpleLowerCaseMapping:0x2F85F - ,simpleTitleCaseMapping:0x2F85F - }, - { code:0x2F860 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F860 - ,simpleLowerCaseMapping:0x2F860 - ,simpleTitleCaseMapping:0x2F860 - }, - { code:0x2F861 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F861 - ,simpleLowerCaseMapping:0x2F861 - ,simpleTitleCaseMapping:0x2F861 - }, - { code:0x2F862 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F862 - ,simpleLowerCaseMapping:0x2F862 - ,simpleTitleCaseMapping:0x2F862 - }, - { code:0x2F863 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F863 - ,simpleLowerCaseMapping:0x2F863 - ,simpleTitleCaseMapping:0x2F863 - }, - { code:0x2F864 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F864 - ,simpleLowerCaseMapping:0x2F864 - ,simpleTitleCaseMapping:0x2F864 - }, - { code:0x2F865 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F865 - ,simpleLowerCaseMapping:0x2F865 - ,simpleTitleCaseMapping:0x2F865 - }, - { code:0x2F866 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F866 - ,simpleLowerCaseMapping:0x2F866 - ,simpleTitleCaseMapping:0x2F866 - }, - { code:0x2F867 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F867 - ,simpleLowerCaseMapping:0x2F867 - ,simpleTitleCaseMapping:0x2F867 - }, - { code:0x2F868 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F868 - ,simpleLowerCaseMapping:0x2F868 - ,simpleTitleCaseMapping:0x2F868 - }, - { code:0x2F869 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F869 - ,simpleLowerCaseMapping:0x2F869 - ,simpleTitleCaseMapping:0x2F869 - }, - { code:0x2F86A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86A - ,simpleLowerCaseMapping:0x2F86A - ,simpleTitleCaseMapping:0x2F86A - }, - { code:0x2F86B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86B - ,simpleLowerCaseMapping:0x2F86B - ,simpleTitleCaseMapping:0x2F86B - }, - { code:0x2F86C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86C - ,simpleLowerCaseMapping:0x2F86C - ,simpleTitleCaseMapping:0x2F86C - }, - { code:0x2F86D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86D - ,simpleLowerCaseMapping:0x2F86D - ,simpleTitleCaseMapping:0x2F86D - }, - { code:0x2F86E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86E - ,simpleLowerCaseMapping:0x2F86E - ,simpleTitleCaseMapping:0x2F86E - }, - { code:0x2F86F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F86F - ,simpleLowerCaseMapping:0x2F86F - ,simpleTitleCaseMapping:0x2F86F - }, - { code:0x2F870 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F870 - ,simpleLowerCaseMapping:0x2F870 - ,simpleTitleCaseMapping:0x2F870 - }, - { code:0x2F871 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F871 - ,simpleLowerCaseMapping:0x2F871 - ,simpleTitleCaseMapping:0x2F871 - }, - { code:0x2F872 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F872 - ,simpleLowerCaseMapping:0x2F872 - ,simpleTitleCaseMapping:0x2F872 - }, - { code:0x2F873 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F873 - ,simpleLowerCaseMapping:0x2F873 - ,simpleTitleCaseMapping:0x2F873 - }, - { code:0x2F874 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F874 - ,simpleLowerCaseMapping:0x2F874 - ,simpleTitleCaseMapping:0x2F874 - }, - { code:0x2F875 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F875 - ,simpleLowerCaseMapping:0x2F875 - ,simpleTitleCaseMapping:0x2F875 - }, - { code:0x2F876 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F876 - ,simpleLowerCaseMapping:0x2F876 - ,simpleTitleCaseMapping:0x2F876 - }, - { code:0x2F877 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F877 - ,simpleLowerCaseMapping:0x2F877 - ,simpleTitleCaseMapping:0x2F877 - }, - { code:0x2F878 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F878 - ,simpleLowerCaseMapping:0x2F878 - ,simpleTitleCaseMapping:0x2F878 - }, - { code:0x2F879 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F879 - ,simpleLowerCaseMapping:0x2F879 - ,simpleTitleCaseMapping:0x2F879 - }, - { code:0x2F87A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87A - ,simpleLowerCaseMapping:0x2F87A - ,simpleTitleCaseMapping:0x2F87A - }, - { code:0x2F87B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87B - ,simpleLowerCaseMapping:0x2F87B - ,simpleTitleCaseMapping:0x2F87B - }, - { code:0x2F87C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87C - ,simpleLowerCaseMapping:0x2F87C - ,simpleTitleCaseMapping:0x2F87C - }, - { code:0x2F87D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87D - ,simpleLowerCaseMapping:0x2F87D - ,simpleTitleCaseMapping:0x2F87D - }, - { code:0x2F87E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87E - ,simpleLowerCaseMapping:0x2F87E - ,simpleTitleCaseMapping:0x2F87E - }, - { code:0x2F87F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F87F - ,simpleLowerCaseMapping:0x2F87F - ,simpleTitleCaseMapping:0x2F87F - }, - { code:0x2F880 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F880 - ,simpleLowerCaseMapping:0x2F880 - ,simpleTitleCaseMapping:0x2F880 - }, - { code:0x2F881 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F881 - ,simpleLowerCaseMapping:0x2F881 - ,simpleTitleCaseMapping:0x2F881 - }, - { code:0x2F882 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F882 - ,simpleLowerCaseMapping:0x2F882 - ,simpleTitleCaseMapping:0x2F882 - }, - { code:0x2F883 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F883 - ,simpleLowerCaseMapping:0x2F883 - ,simpleTitleCaseMapping:0x2F883 - }, - { code:0x2F884 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F884 - ,simpleLowerCaseMapping:0x2F884 - ,simpleTitleCaseMapping:0x2F884 - }, - { code:0x2F885 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F885 - ,simpleLowerCaseMapping:0x2F885 - ,simpleTitleCaseMapping:0x2F885 - }, - { code:0x2F886 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F886 - ,simpleLowerCaseMapping:0x2F886 - ,simpleTitleCaseMapping:0x2F886 - }, - { code:0x2F887 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F887 - ,simpleLowerCaseMapping:0x2F887 - ,simpleTitleCaseMapping:0x2F887 - }, - { code:0x2F888 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F888 - ,simpleLowerCaseMapping:0x2F888 - ,simpleTitleCaseMapping:0x2F888 - }, - { code:0x2F889 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F889 - ,simpleLowerCaseMapping:0x2F889 - ,simpleTitleCaseMapping:0x2F889 - }, - { code:0x2F88A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88A - ,simpleLowerCaseMapping:0x2F88A - ,simpleTitleCaseMapping:0x2F88A - }, - { code:0x2F88B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88B - ,simpleLowerCaseMapping:0x2F88B - ,simpleTitleCaseMapping:0x2F88B - }, - { code:0x2F88C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88C - ,simpleLowerCaseMapping:0x2F88C - ,simpleTitleCaseMapping:0x2F88C - }, - { code:0x2F88D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88D - ,simpleLowerCaseMapping:0x2F88D - ,simpleTitleCaseMapping:0x2F88D - }, - { code:0x2F88E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88E - ,simpleLowerCaseMapping:0x2F88E - ,simpleTitleCaseMapping:0x2F88E - }, - { code:0x2F88F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F88F - ,simpleLowerCaseMapping:0x2F88F - ,simpleTitleCaseMapping:0x2F88F - }, - { code:0x2F890 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F890 - ,simpleLowerCaseMapping:0x2F890 - ,simpleTitleCaseMapping:0x2F890 - }, - { code:0x2F891 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F891 - ,simpleLowerCaseMapping:0x2F891 - ,simpleTitleCaseMapping:0x2F891 - }, - { code:0x2F892 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F892 - ,simpleLowerCaseMapping:0x2F892 - ,simpleTitleCaseMapping:0x2F892 - }, - { code:0x2F893 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F893 - ,simpleLowerCaseMapping:0x2F893 - ,simpleTitleCaseMapping:0x2F893 - }, - { code:0x2F894 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F894 - ,simpleLowerCaseMapping:0x2F894 - ,simpleTitleCaseMapping:0x2F894 - }, - { code:0x2F895 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F895 - ,simpleLowerCaseMapping:0x2F895 - ,simpleTitleCaseMapping:0x2F895 - }, - { code:0x2F896 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F896 - ,simpleLowerCaseMapping:0x2F896 - ,simpleTitleCaseMapping:0x2F896 - }, - { code:0x2F897 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F897 - ,simpleLowerCaseMapping:0x2F897 - ,simpleTitleCaseMapping:0x2F897 - }, - { code:0x2F898 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F898 - ,simpleLowerCaseMapping:0x2F898 - ,simpleTitleCaseMapping:0x2F898 - }, - { code:0x2F899 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F899 - ,simpleLowerCaseMapping:0x2F899 - ,simpleTitleCaseMapping:0x2F899 - }, - { code:0x2F89A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89A - ,simpleLowerCaseMapping:0x2F89A - ,simpleTitleCaseMapping:0x2F89A - }, - { code:0x2F89B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89B - ,simpleLowerCaseMapping:0x2F89B - ,simpleTitleCaseMapping:0x2F89B - }, - { code:0x2F89C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89C - ,simpleLowerCaseMapping:0x2F89C - ,simpleTitleCaseMapping:0x2F89C - }, - { code:0x2F89D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89D - ,simpleLowerCaseMapping:0x2F89D - ,simpleTitleCaseMapping:0x2F89D - }, - { code:0x2F89E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89E - ,simpleLowerCaseMapping:0x2F89E - ,simpleTitleCaseMapping:0x2F89E - }, - { code:0x2F89F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F89F - ,simpleLowerCaseMapping:0x2F89F - ,simpleTitleCaseMapping:0x2F89F - }, - { code:0x2F8A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A0 - ,simpleLowerCaseMapping:0x2F8A0 - ,simpleTitleCaseMapping:0x2F8A0 - }, - { code:0x2F8A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A1 - ,simpleLowerCaseMapping:0x2F8A1 - ,simpleTitleCaseMapping:0x2F8A1 - }, - { code:0x2F8A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A2 - ,simpleLowerCaseMapping:0x2F8A2 - ,simpleTitleCaseMapping:0x2F8A2 - }, - { code:0x2F8A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A3 - ,simpleLowerCaseMapping:0x2F8A3 - ,simpleTitleCaseMapping:0x2F8A3 - }, - { code:0x2F8A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A4 - ,simpleLowerCaseMapping:0x2F8A4 - ,simpleTitleCaseMapping:0x2F8A4 - }, - { code:0x2F8A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A5 - ,simpleLowerCaseMapping:0x2F8A5 - ,simpleTitleCaseMapping:0x2F8A5 - }, - { code:0x2F8A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A6 - ,simpleLowerCaseMapping:0x2F8A6 - ,simpleTitleCaseMapping:0x2F8A6 - }, - { code:0x2F8A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A7 - ,simpleLowerCaseMapping:0x2F8A7 - ,simpleTitleCaseMapping:0x2F8A7 - }, - { code:0x2F8A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A8 - ,simpleLowerCaseMapping:0x2F8A8 - ,simpleTitleCaseMapping:0x2F8A8 - }, - { code:0x2F8A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8A9 - ,simpleLowerCaseMapping:0x2F8A9 - ,simpleTitleCaseMapping:0x2F8A9 - }, - { code:0x2F8AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AA - ,simpleLowerCaseMapping:0x2F8AA - ,simpleTitleCaseMapping:0x2F8AA - }, - { code:0x2F8AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AB - ,simpleLowerCaseMapping:0x2F8AB - ,simpleTitleCaseMapping:0x2F8AB - }, - { code:0x2F8AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AC - ,simpleLowerCaseMapping:0x2F8AC - ,simpleTitleCaseMapping:0x2F8AC - }, - { code:0x2F8AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AD - ,simpleLowerCaseMapping:0x2F8AD - ,simpleTitleCaseMapping:0x2F8AD - }, - { code:0x2F8AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AE - ,simpleLowerCaseMapping:0x2F8AE - ,simpleTitleCaseMapping:0x2F8AE - }, - { code:0x2F8AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8AF - ,simpleLowerCaseMapping:0x2F8AF - ,simpleTitleCaseMapping:0x2F8AF - }, - { code:0x2F8B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B0 - ,simpleLowerCaseMapping:0x2F8B0 - ,simpleTitleCaseMapping:0x2F8B0 - }, - { code:0x2F8B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B1 - ,simpleLowerCaseMapping:0x2F8B1 - ,simpleTitleCaseMapping:0x2F8B1 - }, - { code:0x2F8B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B2 - ,simpleLowerCaseMapping:0x2F8B2 - ,simpleTitleCaseMapping:0x2F8B2 - }, - { code:0x2F8B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B3 - ,simpleLowerCaseMapping:0x2F8B3 - ,simpleTitleCaseMapping:0x2F8B3 - }, - { code:0x2F8B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B4 - ,simpleLowerCaseMapping:0x2F8B4 - ,simpleTitleCaseMapping:0x2F8B4 - }, - { code:0x2F8B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B5 - ,simpleLowerCaseMapping:0x2F8B5 - ,simpleTitleCaseMapping:0x2F8B5 - }, - { code:0x2F8B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B6 - ,simpleLowerCaseMapping:0x2F8B6 - ,simpleTitleCaseMapping:0x2F8B6 - }, - { code:0x2F8B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B7 - ,simpleLowerCaseMapping:0x2F8B7 - ,simpleTitleCaseMapping:0x2F8B7 - }, - { code:0x2F8B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B8 - ,simpleLowerCaseMapping:0x2F8B8 - ,simpleTitleCaseMapping:0x2F8B8 - }, - { code:0x2F8B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8B9 - ,simpleLowerCaseMapping:0x2F8B9 - ,simpleTitleCaseMapping:0x2F8B9 - }, - { code:0x2F8BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BA - ,simpleLowerCaseMapping:0x2F8BA - ,simpleTitleCaseMapping:0x2F8BA - }, - { code:0x2F8BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BB - ,simpleLowerCaseMapping:0x2F8BB - ,simpleTitleCaseMapping:0x2F8BB - }, - { code:0x2F8BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BC - ,simpleLowerCaseMapping:0x2F8BC - ,simpleTitleCaseMapping:0x2F8BC - }, - { code:0x2F8BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BD - ,simpleLowerCaseMapping:0x2F8BD - ,simpleTitleCaseMapping:0x2F8BD - }, - { code:0x2F8BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BE - ,simpleLowerCaseMapping:0x2F8BE - ,simpleTitleCaseMapping:0x2F8BE - }, - { code:0x2F8BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8BF - ,simpleLowerCaseMapping:0x2F8BF - ,simpleTitleCaseMapping:0x2F8BF - }, - { code:0x2F8C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C0 - ,simpleLowerCaseMapping:0x2F8C0 - ,simpleTitleCaseMapping:0x2F8C0 - }, - { code:0x2F8C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C1 - ,simpleLowerCaseMapping:0x2F8C1 - ,simpleTitleCaseMapping:0x2F8C1 - }, - { code:0x2F8C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C2 - ,simpleLowerCaseMapping:0x2F8C2 - ,simpleTitleCaseMapping:0x2F8C2 - }, - { code:0x2F8C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C3 - ,simpleLowerCaseMapping:0x2F8C3 - ,simpleTitleCaseMapping:0x2F8C3 - }, - { code:0x2F8C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C4 - ,simpleLowerCaseMapping:0x2F8C4 - ,simpleTitleCaseMapping:0x2F8C4 - }, - { code:0x2F8C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C5 - ,simpleLowerCaseMapping:0x2F8C5 - ,simpleTitleCaseMapping:0x2F8C5 - }, - { code:0x2F8C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C6 - ,simpleLowerCaseMapping:0x2F8C6 - ,simpleTitleCaseMapping:0x2F8C6 - }, - { code:0x2F8C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C7 - ,simpleLowerCaseMapping:0x2F8C7 - ,simpleTitleCaseMapping:0x2F8C7 - }, - { code:0x2F8C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C8 - ,simpleLowerCaseMapping:0x2F8C8 - ,simpleTitleCaseMapping:0x2F8C8 - }, - { code:0x2F8C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8C9 - ,simpleLowerCaseMapping:0x2F8C9 - ,simpleTitleCaseMapping:0x2F8C9 - }, - { code:0x2F8CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CA - ,simpleLowerCaseMapping:0x2F8CA - ,simpleTitleCaseMapping:0x2F8CA - }, - { code:0x2F8CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CB - ,simpleLowerCaseMapping:0x2F8CB - ,simpleTitleCaseMapping:0x2F8CB - }, - { code:0x2F8CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CC - ,simpleLowerCaseMapping:0x2F8CC - ,simpleTitleCaseMapping:0x2F8CC - }, - { code:0x2F8CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CD - ,simpleLowerCaseMapping:0x2F8CD - ,simpleTitleCaseMapping:0x2F8CD - }, - { code:0x2F8CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CE - ,simpleLowerCaseMapping:0x2F8CE - ,simpleTitleCaseMapping:0x2F8CE - }, - { code:0x2F8CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8CF - ,simpleLowerCaseMapping:0x2F8CF - ,simpleTitleCaseMapping:0x2F8CF - }, - { code:0x2F8D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D0 - ,simpleLowerCaseMapping:0x2F8D0 - ,simpleTitleCaseMapping:0x2F8D0 - }, - { code:0x2F8D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D1 - ,simpleLowerCaseMapping:0x2F8D1 - ,simpleTitleCaseMapping:0x2F8D1 - }, - { code:0x2F8D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D2 - ,simpleLowerCaseMapping:0x2F8D2 - ,simpleTitleCaseMapping:0x2F8D2 - }, - { code:0x2F8D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D3 - ,simpleLowerCaseMapping:0x2F8D3 - ,simpleTitleCaseMapping:0x2F8D3 - }, - { code:0x2F8D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D4 - ,simpleLowerCaseMapping:0x2F8D4 - ,simpleTitleCaseMapping:0x2F8D4 - }, - { code:0x2F8D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D5 - ,simpleLowerCaseMapping:0x2F8D5 - ,simpleTitleCaseMapping:0x2F8D5 - }, - { code:0x2F8D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D6 - ,simpleLowerCaseMapping:0x2F8D6 - ,simpleTitleCaseMapping:0x2F8D6 - }, - { code:0x2F8D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D7 - ,simpleLowerCaseMapping:0x2F8D7 - ,simpleTitleCaseMapping:0x2F8D7 - }, - { code:0x2F8D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D8 - ,simpleLowerCaseMapping:0x2F8D8 - ,simpleTitleCaseMapping:0x2F8D8 - }, - { code:0x2F8D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8D9 - ,simpleLowerCaseMapping:0x2F8D9 - ,simpleTitleCaseMapping:0x2F8D9 - }, - { code:0x2F8DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DA - ,simpleLowerCaseMapping:0x2F8DA - ,simpleTitleCaseMapping:0x2F8DA - }, - { code:0x2F8DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DB - ,simpleLowerCaseMapping:0x2F8DB - ,simpleTitleCaseMapping:0x2F8DB - }, - { code:0x2F8DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DC - ,simpleLowerCaseMapping:0x2F8DC - ,simpleTitleCaseMapping:0x2F8DC - }, - { code:0x2F8DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DD - ,simpleLowerCaseMapping:0x2F8DD - ,simpleTitleCaseMapping:0x2F8DD - }, - { code:0x2F8DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DE - ,simpleLowerCaseMapping:0x2F8DE - ,simpleTitleCaseMapping:0x2F8DE - }, - { code:0x2F8DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8DF - ,simpleLowerCaseMapping:0x2F8DF - ,simpleTitleCaseMapping:0x2F8DF - }, - { code:0x2F8E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E0 - ,simpleLowerCaseMapping:0x2F8E0 - ,simpleTitleCaseMapping:0x2F8E0 - }, - { code:0x2F8E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E1 - ,simpleLowerCaseMapping:0x2F8E1 - ,simpleTitleCaseMapping:0x2F8E1 - }, - { code:0x2F8E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E2 - ,simpleLowerCaseMapping:0x2F8E2 - ,simpleTitleCaseMapping:0x2F8E2 - }, - { code:0x2F8E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E3 - ,simpleLowerCaseMapping:0x2F8E3 - ,simpleTitleCaseMapping:0x2F8E3 - }, - { code:0x2F8E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E4 - ,simpleLowerCaseMapping:0x2F8E4 - ,simpleTitleCaseMapping:0x2F8E4 - }, - { code:0x2F8E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E5 - ,simpleLowerCaseMapping:0x2F8E5 - ,simpleTitleCaseMapping:0x2F8E5 - }, - { code:0x2F8E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E6 - ,simpleLowerCaseMapping:0x2F8E6 - ,simpleTitleCaseMapping:0x2F8E6 - }, - { code:0x2F8E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E7 - ,simpleLowerCaseMapping:0x2F8E7 - ,simpleTitleCaseMapping:0x2F8E7 - }, - { code:0x2F8E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E8 - ,simpleLowerCaseMapping:0x2F8E8 - ,simpleTitleCaseMapping:0x2F8E8 - }, - { code:0x2F8E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8E9 - ,simpleLowerCaseMapping:0x2F8E9 - ,simpleTitleCaseMapping:0x2F8E9 - }, - { code:0x2F8EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8EA - ,simpleLowerCaseMapping:0x2F8EA - ,simpleTitleCaseMapping:0x2F8EA - }, - { code:0x2F8EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8EB - ,simpleLowerCaseMapping:0x2F8EB - ,simpleTitleCaseMapping:0x2F8EB - }, - { code:0x2F8EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8EC - ,simpleLowerCaseMapping:0x2F8EC - ,simpleTitleCaseMapping:0x2F8EC - }, - { code:0x2F8ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8ED - ,simpleLowerCaseMapping:0x2F8ED - ,simpleTitleCaseMapping:0x2F8ED - }, - { code:0x2F8EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8EE - ,simpleLowerCaseMapping:0x2F8EE - ,simpleTitleCaseMapping:0x2F8EE - }, - { code:0x2F8EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8EF - ,simpleLowerCaseMapping:0x2F8EF - ,simpleTitleCaseMapping:0x2F8EF - }, - { code:0x2F8F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F0 - ,simpleLowerCaseMapping:0x2F8F0 - ,simpleTitleCaseMapping:0x2F8F0 - }, - { code:0x2F8F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F1 - ,simpleLowerCaseMapping:0x2F8F1 - ,simpleTitleCaseMapping:0x2F8F1 - }, - { code:0x2F8F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F2 - ,simpleLowerCaseMapping:0x2F8F2 - ,simpleTitleCaseMapping:0x2F8F2 - }, - { code:0x2F8F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F3 - ,simpleLowerCaseMapping:0x2F8F3 - ,simpleTitleCaseMapping:0x2F8F3 - }, - { code:0x2F8F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F4 - ,simpleLowerCaseMapping:0x2F8F4 - ,simpleTitleCaseMapping:0x2F8F4 - }, - { code:0x2F8F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F5 - ,simpleLowerCaseMapping:0x2F8F5 - ,simpleTitleCaseMapping:0x2F8F5 - }, - { code:0x2F8F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F6 - ,simpleLowerCaseMapping:0x2F8F6 - ,simpleTitleCaseMapping:0x2F8F6 - }, - { code:0x2F8F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F7 - ,simpleLowerCaseMapping:0x2F8F7 - ,simpleTitleCaseMapping:0x2F8F7 - }, - { code:0x2F8F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F8 - ,simpleLowerCaseMapping:0x2F8F8 - ,simpleTitleCaseMapping:0x2F8F8 - }, - { code:0x2F8F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8F9 - ,simpleLowerCaseMapping:0x2F8F9 - ,simpleTitleCaseMapping:0x2F8F9 - }, - { code:0x2F8FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FA - ,simpleLowerCaseMapping:0x2F8FA - ,simpleTitleCaseMapping:0x2F8FA - }, - { code:0x2F8FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FB - ,simpleLowerCaseMapping:0x2F8FB - ,simpleTitleCaseMapping:0x2F8FB - }, - { code:0x2F8FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FC - ,simpleLowerCaseMapping:0x2F8FC - ,simpleTitleCaseMapping:0x2F8FC - }, - { code:0x2F8FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FD - ,simpleLowerCaseMapping:0x2F8FD - ,simpleTitleCaseMapping:0x2F8FD - }, - { code:0x2F8FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FE - ,simpleLowerCaseMapping:0x2F8FE - ,simpleTitleCaseMapping:0x2F8FE - }, - { code:0x2F8FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F8FF - ,simpleLowerCaseMapping:0x2F8FF - ,simpleTitleCaseMapping:0x2F8FF - }, - { code:0x2F900 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F900 - ,simpleLowerCaseMapping:0x2F900 - ,simpleTitleCaseMapping:0x2F900 - }, - { code:0x2F901 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F901 - ,simpleLowerCaseMapping:0x2F901 - ,simpleTitleCaseMapping:0x2F901 - }, - { code:0x2F902 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F902 - ,simpleLowerCaseMapping:0x2F902 - ,simpleTitleCaseMapping:0x2F902 - }, - { code:0x2F903 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F903 - ,simpleLowerCaseMapping:0x2F903 - ,simpleTitleCaseMapping:0x2F903 - }, - { code:0x2F904 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F904 - ,simpleLowerCaseMapping:0x2F904 - ,simpleTitleCaseMapping:0x2F904 - }, - { code:0x2F905 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F905 - ,simpleLowerCaseMapping:0x2F905 - ,simpleTitleCaseMapping:0x2F905 - }, - { code:0x2F906 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F906 - ,simpleLowerCaseMapping:0x2F906 - ,simpleTitleCaseMapping:0x2F906 - }, - { code:0x2F907 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F907 - ,simpleLowerCaseMapping:0x2F907 - ,simpleTitleCaseMapping:0x2F907 - }, - { code:0x2F908 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F908 - ,simpleLowerCaseMapping:0x2F908 - ,simpleTitleCaseMapping:0x2F908 - }, - { code:0x2F909 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F909 - ,simpleLowerCaseMapping:0x2F909 - ,simpleTitleCaseMapping:0x2F909 - }, - { code:0x2F90A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90A - ,simpleLowerCaseMapping:0x2F90A - ,simpleTitleCaseMapping:0x2F90A - }, - { code:0x2F90B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90B - ,simpleLowerCaseMapping:0x2F90B - ,simpleTitleCaseMapping:0x2F90B - }, - { code:0x2F90C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90C - ,simpleLowerCaseMapping:0x2F90C - ,simpleTitleCaseMapping:0x2F90C - }, - { code:0x2F90D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90D - ,simpleLowerCaseMapping:0x2F90D - ,simpleTitleCaseMapping:0x2F90D - }, - { code:0x2F90E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90E - ,simpleLowerCaseMapping:0x2F90E - ,simpleTitleCaseMapping:0x2F90E - }, - { code:0x2F90F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F90F - ,simpleLowerCaseMapping:0x2F90F - ,simpleTitleCaseMapping:0x2F90F - }, - { code:0x2F910 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F910 - ,simpleLowerCaseMapping:0x2F910 - ,simpleTitleCaseMapping:0x2F910 - }, - { code:0x2F911 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F911 - ,simpleLowerCaseMapping:0x2F911 - ,simpleTitleCaseMapping:0x2F911 - }, - { code:0x2F912 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F912 - ,simpleLowerCaseMapping:0x2F912 - ,simpleTitleCaseMapping:0x2F912 - }, - { code:0x2F913 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F913 - ,simpleLowerCaseMapping:0x2F913 - ,simpleTitleCaseMapping:0x2F913 - }, - { code:0x2F914 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F914 - ,simpleLowerCaseMapping:0x2F914 - ,simpleTitleCaseMapping:0x2F914 - }, - { code:0x2F915 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F915 - ,simpleLowerCaseMapping:0x2F915 - ,simpleTitleCaseMapping:0x2F915 - }, - { code:0x2F916 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F916 - ,simpleLowerCaseMapping:0x2F916 - ,simpleTitleCaseMapping:0x2F916 - }, - { code:0x2F917 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F917 - ,simpleLowerCaseMapping:0x2F917 - ,simpleTitleCaseMapping:0x2F917 - }, - { code:0x2F918 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F918 - ,simpleLowerCaseMapping:0x2F918 - ,simpleTitleCaseMapping:0x2F918 - }, - { code:0x2F919 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F919 - ,simpleLowerCaseMapping:0x2F919 - ,simpleTitleCaseMapping:0x2F919 - }, - { code:0x2F91A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91A - ,simpleLowerCaseMapping:0x2F91A - ,simpleTitleCaseMapping:0x2F91A - }, - { code:0x2F91B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91B - ,simpleLowerCaseMapping:0x2F91B - ,simpleTitleCaseMapping:0x2F91B - }, - { code:0x2F91C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91C - ,simpleLowerCaseMapping:0x2F91C - ,simpleTitleCaseMapping:0x2F91C - }, - { code:0x2F91D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91D - ,simpleLowerCaseMapping:0x2F91D - ,simpleTitleCaseMapping:0x2F91D - }, - { code:0x2F91E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91E - ,simpleLowerCaseMapping:0x2F91E - ,simpleTitleCaseMapping:0x2F91E - }, - { code:0x2F91F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F91F - ,simpleLowerCaseMapping:0x2F91F - ,simpleTitleCaseMapping:0x2F91F - }, - { code:0x2F920 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F920 - ,simpleLowerCaseMapping:0x2F920 - ,simpleTitleCaseMapping:0x2F920 - }, - { code:0x2F921 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F921 - ,simpleLowerCaseMapping:0x2F921 - ,simpleTitleCaseMapping:0x2F921 - }, - { code:0x2F922 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F922 - ,simpleLowerCaseMapping:0x2F922 - ,simpleTitleCaseMapping:0x2F922 - }, - { code:0x2F923 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F923 - ,simpleLowerCaseMapping:0x2F923 - ,simpleTitleCaseMapping:0x2F923 - }, - { code:0x2F924 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F924 - ,simpleLowerCaseMapping:0x2F924 - ,simpleTitleCaseMapping:0x2F924 - }, - { code:0x2F925 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F925 - ,simpleLowerCaseMapping:0x2F925 - ,simpleTitleCaseMapping:0x2F925 - }, - { code:0x2F926 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F926 - ,simpleLowerCaseMapping:0x2F926 - ,simpleTitleCaseMapping:0x2F926 - }, - { code:0x2F927 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F927 - ,simpleLowerCaseMapping:0x2F927 - ,simpleTitleCaseMapping:0x2F927 - }, - { code:0x2F928 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F928 - ,simpleLowerCaseMapping:0x2F928 - ,simpleTitleCaseMapping:0x2F928 - }, - { code:0x2F929 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F929 - ,simpleLowerCaseMapping:0x2F929 - ,simpleTitleCaseMapping:0x2F929 - }, - { code:0x2F92A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92A - ,simpleLowerCaseMapping:0x2F92A - ,simpleTitleCaseMapping:0x2F92A - }, - { code:0x2F92B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92B - ,simpleLowerCaseMapping:0x2F92B - ,simpleTitleCaseMapping:0x2F92B - }, - { code:0x2F92C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92C - ,simpleLowerCaseMapping:0x2F92C - ,simpleTitleCaseMapping:0x2F92C - }, - { code:0x2F92D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92D - ,simpleLowerCaseMapping:0x2F92D - ,simpleTitleCaseMapping:0x2F92D - }, - { code:0x2F92E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92E - ,simpleLowerCaseMapping:0x2F92E - ,simpleTitleCaseMapping:0x2F92E - }, - { code:0x2F92F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F92F - ,simpleLowerCaseMapping:0x2F92F - ,simpleTitleCaseMapping:0x2F92F - }, - { code:0x2F930 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F930 - ,simpleLowerCaseMapping:0x2F930 - ,simpleTitleCaseMapping:0x2F930 - }, - { code:0x2F931 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F931 - ,simpleLowerCaseMapping:0x2F931 - ,simpleTitleCaseMapping:0x2F931 - }, - { code:0x2F932 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F932 - ,simpleLowerCaseMapping:0x2F932 - ,simpleTitleCaseMapping:0x2F932 - }, - { code:0x2F933 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F933 - ,simpleLowerCaseMapping:0x2F933 - ,simpleTitleCaseMapping:0x2F933 - }, - { code:0x2F934 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F934 - ,simpleLowerCaseMapping:0x2F934 - ,simpleTitleCaseMapping:0x2F934 - }, - { code:0x2F935 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F935 - ,simpleLowerCaseMapping:0x2F935 - ,simpleTitleCaseMapping:0x2F935 - }, - { code:0x2F936 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F936 - ,simpleLowerCaseMapping:0x2F936 - ,simpleTitleCaseMapping:0x2F936 - }, - { code:0x2F937 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F937 - ,simpleLowerCaseMapping:0x2F937 - ,simpleTitleCaseMapping:0x2F937 - }, - { code:0x2F938 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F938 - ,simpleLowerCaseMapping:0x2F938 - ,simpleTitleCaseMapping:0x2F938 - }, - { code:0x2F939 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F939 - ,simpleLowerCaseMapping:0x2F939 - ,simpleTitleCaseMapping:0x2F939 - }, - { code:0x2F93A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93A - ,simpleLowerCaseMapping:0x2F93A - ,simpleTitleCaseMapping:0x2F93A - }, - { code:0x2F93B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93B - ,simpleLowerCaseMapping:0x2F93B - ,simpleTitleCaseMapping:0x2F93B - }, - { code:0x2F93C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93C - ,simpleLowerCaseMapping:0x2F93C - ,simpleTitleCaseMapping:0x2F93C - }, - { code:0x2F93D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93D - ,simpleLowerCaseMapping:0x2F93D - ,simpleTitleCaseMapping:0x2F93D - }, - { code:0x2F93E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93E - ,simpleLowerCaseMapping:0x2F93E - ,simpleTitleCaseMapping:0x2F93E - }, - { code:0x2F93F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F93F - ,simpleLowerCaseMapping:0x2F93F - ,simpleTitleCaseMapping:0x2F93F - }, - { code:0x2F940 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F940 - ,simpleLowerCaseMapping:0x2F940 - ,simpleTitleCaseMapping:0x2F940 - }, - { code:0x2F941 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F941 - ,simpleLowerCaseMapping:0x2F941 - ,simpleTitleCaseMapping:0x2F941 - }, - { code:0x2F942 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F942 - ,simpleLowerCaseMapping:0x2F942 - ,simpleTitleCaseMapping:0x2F942 - }, - { code:0x2F943 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F943 - ,simpleLowerCaseMapping:0x2F943 - ,simpleTitleCaseMapping:0x2F943 - }, - { code:0x2F944 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F944 - ,simpleLowerCaseMapping:0x2F944 - ,simpleTitleCaseMapping:0x2F944 - }, - { code:0x2F945 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F945 - ,simpleLowerCaseMapping:0x2F945 - ,simpleTitleCaseMapping:0x2F945 - }, - { code:0x2F946 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F946 - ,simpleLowerCaseMapping:0x2F946 - ,simpleTitleCaseMapping:0x2F946 - }, - { code:0x2F947 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F947 - ,simpleLowerCaseMapping:0x2F947 - ,simpleTitleCaseMapping:0x2F947 - }, - { code:0x2F948 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F948 - ,simpleLowerCaseMapping:0x2F948 - ,simpleTitleCaseMapping:0x2F948 - }, - { code:0x2F949 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F949 - ,simpleLowerCaseMapping:0x2F949 - ,simpleTitleCaseMapping:0x2F949 - }, - { code:0x2F94A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94A - ,simpleLowerCaseMapping:0x2F94A - ,simpleTitleCaseMapping:0x2F94A - }, - { code:0x2F94B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94B - ,simpleLowerCaseMapping:0x2F94B - ,simpleTitleCaseMapping:0x2F94B - }, - { code:0x2F94C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94C - ,simpleLowerCaseMapping:0x2F94C - ,simpleTitleCaseMapping:0x2F94C - }, - { code:0x2F94D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94D - ,simpleLowerCaseMapping:0x2F94D - ,simpleTitleCaseMapping:0x2F94D - }, - { code:0x2F94E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94E - ,simpleLowerCaseMapping:0x2F94E - ,simpleTitleCaseMapping:0x2F94E - }, - { code:0x2F94F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F94F - ,simpleLowerCaseMapping:0x2F94F - ,simpleTitleCaseMapping:0x2F94F - }, - { code:0x2F950 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F950 - ,simpleLowerCaseMapping:0x2F950 - ,simpleTitleCaseMapping:0x2F950 - }, - { code:0x2F951 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F951 - ,simpleLowerCaseMapping:0x2F951 - ,simpleTitleCaseMapping:0x2F951 - }, - { code:0x2F952 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F952 - ,simpleLowerCaseMapping:0x2F952 - ,simpleTitleCaseMapping:0x2F952 - }, - { code:0x2F953 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F953 - ,simpleLowerCaseMapping:0x2F953 - ,simpleTitleCaseMapping:0x2F953 - }, - { code:0x2F954 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F954 - ,simpleLowerCaseMapping:0x2F954 - ,simpleTitleCaseMapping:0x2F954 - }, - { code:0x2F955 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F955 - ,simpleLowerCaseMapping:0x2F955 - ,simpleTitleCaseMapping:0x2F955 - }, - { code:0x2F956 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F956 - ,simpleLowerCaseMapping:0x2F956 - ,simpleTitleCaseMapping:0x2F956 - }, - { code:0x2F957 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F957 - ,simpleLowerCaseMapping:0x2F957 - ,simpleTitleCaseMapping:0x2F957 - }, - { code:0x2F958 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F958 - ,simpleLowerCaseMapping:0x2F958 - ,simpleTitleCaseMapping:0x2F958 - }, - { code:0x2F959 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F959 - ,simpleLowerCaseMapping:0x2F959 - ,simpleTitleCaseMapping:0x2F959 - }, - { code:0x2F95A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95A - ,simpleLowerCaseMapping:0x2F95A - ,simpleTitleCaseMapping:0x2F95A - }, - { code:0x2F95B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95B - ,simpleLowerCaseMapping:0x2F95B - ,simpleTitleCaseMapping:0x2F95B - }, - { code:0x2F95C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95C - ,simpleLowerCaseMapping:0x2F95C - ,simpleTitleCaseMapping:0x2F95C - }, - { code:0x2F95D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95D - ,simpleLowerCaseMapping:0x2F95D - ,simpleTitleCaseMapping:0x2F95D - }, - { code:0x2F95E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95E - ,simpleLowerCaseMapping:0x2F95E - ,simpleTitleCaseMapping:0x2F95E - }, - { code:0x2F95F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F95F - ,simpleLowerCaseMapping:0x2F95F - ,simpleTitleCaseMapping:0x2F95F - }, - { code:0x2F960 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F960 - ,simpleLowerCaseMapping:0x2F960 - ,simpleTitleCaseMapping:0x2F960 - }, - { code:0x2F961 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F961 - ,simpleLowerCaseMapping:0x2F961 - ,simpleTitleCaseMapping:0x2F961 - }, - { code:0x2F962 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F962 - ,simpleLowerCaseMapping:0x2F962 - ,simpleTitleCaseMapping:0x2F962 - }, - { code:0x2F963 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F963 - ,simpleLowerCaseMapping:0x2F963 - ,simpleTitleCaseMapping:0x2F963 - }, - { code:0x2F964 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F964 - ,simpleLowerCaseMapping:0x2F964 - ,simpleTitleCaseMapping:0x2F964 - }, - { code:0x2F965 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F965 - ,simpleLowerCaseMapping:0x2F965 - ,simpleTitleCaseMapping:0x2F965 - }, - { code:0x2F966 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F966 - ,simpleLowerCaseMapping:0x2F966 - ,simpleTitleCaseMapping:0x2F966 - }, - { code:0x2F967 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F967 - ,simpleLowerCaseMapping:0x2F967 - ,simpleTitleCaseMapping:0x2F967 - }, - { code:0x2F968 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F968 - ,simpleLowerCaseMapping:0x2F968 - ,simpleTitleCaseMapping:0x2F968 - }, - { code:0x2F969 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F969 - ,simpleLowerCaseMapping:0x2F969 - ,simpleTitleCaseMapping:0x2F969 - }, - { code:0x2F96A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96A - ,simpleLowerCaseMapping:0x2F96A - ,simpleTitleCaseMapping:0x2F96A - }, - { code:0x2F96B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96B - ,simpleLowerCaseMapping:0x2F96B - ,simpleTitleCaseMapping:0x2F96B - }, - { code:0x2F96C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96C - ,simpleLowerCaseMapping:0x2F96C - ,simpleTitleCaseMapping:0x2F96C - }, - { code:0x2F96D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96D - ,simpleLowerCaseMapping:0x2F96D - ,simpleTitleCaseMapping:0x2F96D - }, - { code:0x2F96E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96E - ,simpleLowerCaseMapping:0x2F96E - ,simpleTitleCaseMapping:0x2F96E - }, - { code:0x2F96F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F96F - ,simpleLowerCaseMapping:0x2F96F - ,simpleTitleCaseMapping:0x2F96F - }, - { code:0x2F970 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F970 - ,simpleLowerCaseMapping:0x2F970 - ,simpleTitleCaseMapping:0x2F970 - }, - { code:0x2F971 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F971 - ,simpleLowerCaseMapping:0x2F971 - ,simpleTitleCaseMapping:0x2F971 - }, - { code:0x2F972 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F972 - ,simpleLowerCaseMapping:0x2F972 - ,simpleTitleCaseMapping:0x2F972 - }, - { code:0x2F973 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F973 - ,simpleLowerCaseMapping:0x2F973 - ,simpleTitleCaseMapping:0x2F973 - }, - { code:0x2F974 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F974 - ,simpleLowerCaseMapping:0x2F974 - ,simpleTitleCaseMapping:0x2F974 - }, - { code:0x2F975 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F975 - ,simpleLowerCaseMapping:0x2F975 - ,simpleTitleCaseMapping:0x2F975 - }, - { code:0x2F976 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F976 - ,simpleLowerCaseMapping:0x2F976 - ,simpleTitleCaseMapping:0x2F976 - }, - { code:0x2F977 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F977 - ,simpleLowerCaseMapping:0x2F977 - ,simpleTitleCaseMapping:0x2F977 - }, - { code:0x2F978 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F978 - ,simpleLowerCaseMapping:0x2F978 - ,simpleTitleCaseMapping:0x2F978 - }, - { code:0x2F979 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F979 - ,simpleLowerCaseMapping:0x2F979 - ,simpleTitleCaseMapping:0x2F979 - }, - { code:0x2F97A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97A - ,simpleLowerCaseMapping:0x2F97A - ,simpleTitleCaseMapping:0x2F97A - }, - { code:0x2F97B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97B - ,simpleLowerCaseMapping:0x2F97B - ,simpleTitleCaseMapping:0x2F97B - }, - { code:0x2F97C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97C - ,simpleLowerCaseMapping:0x2F97C - ,simpleTitleCaseMapping:0x2F97C - }, - { code:0x2F97D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97D - ,simpleLowerCaseMapping:0x2F97D - ,simpleTitleCaseMapping:0x2F97D - }, - { code:0x2F97E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97E - ,simpleLowerCaseMapping:0x2F97E - ,simpleTitleCaseMapping:0x2F97E - }, - { code:0x2F97F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F97F - ,simpleLowerCaseMapping:0x2F97F - ,simpleTitleCaseMapping:0x2F97F - }, - { code:0x2F980 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F980 - ,simpleLowerCaseMapping:0x2F980 - ,simpleTitleCaseMapping:0x2F980 - }, - { code:0x2F981 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F981 - ,simpleLowerCaseMapping:0x2F981 - ,simpleTitleCaseMapping:0x2F981 - }, - { code:0x2F982 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F982 - ,simpleLowerCaseMapping:0x2F982 - ,simpleTitleCaseMapping:0x2F982 - }, - { code:0x2F983 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F983 - ,simpleLowerCaseMapping:0x2F983 - ,simpleTitleCaseMapping:0x2F983 - }, - { code:0x2F984 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F984 - ,simpleLowerCaseMapping:0x2F984 - ,simpleTitleCaseMapping:0x2F984 - }, - { code:0x2F985 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F985 - ,simpleLowerCaseMapping:0x2F985 - ,simpleTitleCaseMapping:0x2F985 - }, - { code:0x2F986 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F986 - ,simpleLowerCaseMapping:0x2F986 - ,simpleTitleCaseMapping:0x2F986 - }, - { code:0x2F987 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F987 - ,simpleLowerCaseMapping:0x2F987 - ,simpleTitleCaseMapping:0x2F987 - }, - { code:0x2F988 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F988 - ,simpleLowerCaseMapping:0x2F988 - ,simpleTitleCaseMapping:0x2F988 - }, - { code:0x2F989 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F989 - ,simpleLowerCaseMapping:0x2F989 - ,simpleTitleCaseMapping:0x2F989 - }, - { code:0x2F98A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98A - ,simpleLowerCaseMapping:0x2F98A - ,simpleTitleCaseMapping:0x2F98A - }, - { code:0x2F98B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98B - ,simpleLowerCaseMapping:0x2F98B - ,simpleTitleCaseMapping:0x2F98B - }, - { code:0x2F98C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98C - ,simpleLowerCaseMapping:0x2F98C - ,simpleTitleCaseMapping:0x2F98C - }, - { code:0x2F98D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98D - ,simpleLowerCaseMapping:0x2F98D - ,simpleTitleCaseMapping:0x2F98D - }, - { code:0x2F98E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98E - ,simpleLowerCaseMapping:0x2F98E - ,simpleTitleCaseMapping:0x2F98E - }, - { code:0x2F98F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F98F - ,simpleLowerCaseMapping:0x2F98F - ,simpleTitleCaseMapping:0x2F98F - }, - { code:0x2F990 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F990 - ,simpleLowerCaseMapping:0x2F990 - ,simpleTitleCaseMapping:0x2F990 - }, - { code:0x2F991 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F991 - ,simpleLowerCaseMapping:0x2F991 - ,simpleTitleCaseMapping:0x2F991 - }, - { code:0x2F992 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F992 - ,simpleLowerCaseMapping:0x2F992 - ,simpleTitleCaseMapping:0x2F992 - }, - { code:0x2F993 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F993 - ,simpleLowerCaseMapping:0x2F993 - ,simpleTitleCaseMapping:0x2F993 - }, - { code:0x2F994 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F994 - ,simpleLowerCaseMapping:0x2F994 - ,simpleTitleCaseMapping:0x2F994 - }, - { code:0x2F995 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F995 - ,simpleLowerCaseMapping:0x2F995 - ,simpleTitleCaseMapping:0x2F995 - }, - { code:0x2F996 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F996 - ,simpleLowerCaseMapping:0x2F996 - ,simpleTitleCaseMapping:0x2F996 - }, - { code:0x2F997 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F997 - ,simpleLowerCaseMapping:0x2F997 - ,simpleTitleCaseMapping:0x2F997 - }, - { code:0x2F998 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F998 - ,simpleLowerCaseMapping:0x2F998 - ,simpleTitleCaseMapping:0x2F998 - }, - { code:0x2F999 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F999 - ,simpleLowerCaseMapping:0x2F999 - ,simpleTitleCaseMapping:0x2F999 - }, - { code:0x2F99A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99A - ,simpleLowerCaseMapping:0x2F99A - ,simpleTitleCaseMapping:0x2F99A - }, - { code:0x2F99B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99B - ,simpleLowerCaseMapping:0x2F99B - ,simpleTitleCaseMapping:0x2F99B - }, - { code:0x2F99C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99C - ,simpleLowerCaseMapping:0x2F99C - ,simpleTitleCaseMapping:0x2F99C - }, - { code:0x2F99D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99D - ,simpleLowerCaseMapping:0x2F99D - ,simpleTitleCaseMapping:0x2F99D - }, - { code:0x2F99E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99E - ,simpleLowerCaseMapping:0x2F99E - ,simpleTitleCaseMapping:0x2F99E - }, - { code:0x2F99F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F99F - ,simpleLowerCaseMapping:0x2F99F - ,simpleTitleCaseMapping:0x2F99F - }, - { code:0x2F9A0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A0 - ,simpleLowerCaseMapping:0x2F9A0 - ,simpleTitleCaseMapping:0x2F9A0 - }, - { code:0x2F9A1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A1 - ,simpleLowerCaseMapping:0x2F9A1 - ,simpleTitleCaseMapping:0x2F9A1 - }, - { code:0x2F9A2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A2 - ,simpleLowerCaseMapping:0x2F9A2 - ,simpleTitleCaseMapping:0x2F9A2 - }, - { code:0x2F9A3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A3 - ,simpleLowerCaseMapping:0x2F9A3 - ,simpleTitleCaseMapping:0x2F9A3 - }, - { code:0x2F9A4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A4 - ,simpleLowerCaseMapping:0x2F9A4 - ,simpleTitleCaseMapping:0x2F9A4 - }, - { code:0x2F9A5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A5 - ,simpleLowerCaseMapping:0x2F9A5 - ,simpleTitleCaseMapping:0x2F9A5 - }, - { code:0x2F9A6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A6 - ,simpleLowerCaseMapping:0x2F9A6 - ,simpleTitleCaseMapping:0x2F9A6 - }, - { code:0x2F9A7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A7 - ,simpleLowerCaseMapping:0x2F9A7 - ,simpleTitleCaseMapping:0x2F9A7 - }, - { code:0x2F9A8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A8 - ,simpleLowerCaseMapping:0x2F9A8 - ,simpleTitleCaseMapping:0x2F9A8 - }, - { code:0x2F9A9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9A9 - ,simpleLowerCaseMapping:0x2F9A9 - ,simpleTitleCaseMapping:0x2F9A9 - }, - { code:0x2F9AA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AA - ,simpleLowerCaseMapping:0x2F9AA - ,simpleTitleCaseMapping:0x2F9AA - }, - { code:0x2F9AB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AB - ,simpleLowerCaseMapping:0x2F9AB - ,simpleTitleCaseMapping:0x2F9AB - }, - { code:0x2F9AC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AC - ,simpleLowerCaseMapping:0x2F9AC - ,simpleTitleCaseMapping:0x2F9AC - }, - { code:0x2F9AD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AD - ,simpleLowerCaseMapping:0x2F9AD - ,simpleTitleCaseMapping:0x2F9AD - }, - { code:0x2F9AE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AE - ,simpleLowerCaseMapping:0x2F9AE - ,simpleTitleCaseMapping:0x2F9AE - }, - { code:0x2F9AF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9AF - ,simpleLowerCaseMapping:0x2F9AF - ,simpleTitleCaseMapping:0x2F9AF - }, - { code:0x2F9B0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B0 - ,simpleLowerCaseMapping:0x2F9B0 - ,simpleTitleCaseMapping:0x2F9B0 - }, - { code:0x2F9B1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B1 - ,simpleLowerCaseMapping:0x2F9B1 - ,simpleTitleCaseMapping:0x2F9B1 - }, - { code:0x2F9B2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B2 - ,simpleLowerCaseMapping:0x2F9B2 - ,simpleTitleCaseMapping:0x2F9B2 - }, - { code:0x2F9B3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B3 - ,simpleLowerCaseMapping:0x2F9B3 - ,simpleTitleCaseMapping:0x2F9B3 - }, - { code:0x2F9B4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B4 - ,simpleLowerCaseMapping:0x2F9B4 - ,simpleTitleCaseMapping:0x2F9B4 - }, - { code:0x2F9B5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B5 - ,simpleLowerCaseMapping:0x2F9B5 - ,simpleTitleCaseMapping:0x2F9B5 - }, - { code:0x2F9B6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B6 - ,simpleLowerCaseMapping:0x2F9B6 - ,simpleTitleCaseMapping:0x2F9B6 - }, - { code:0x2F9B7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B7 - ,simpleLowerCaseMapping:0x2F9B7 - ,simpleTitleCaseMapping:0x2F9B7 - }, - { code:0x2F9B8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B8 - ,simpleLowerCaseMapping:0x2F9B8 - ,simpleTitleCaseMapping:0x2F9B8 - }, - { code:0x2F9B9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9B9 - ,simpleLowerCaseMapping:0x2F9B9 - ,simpleTitleCaseMapping:0x2F9B9 - }, - { code:0x2F9BA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BA - ,simpleLowerCaseMapping:0x2F9BA - ,simpleTitleCaseMapping:0x2F9BA - }, - { code:0x2F9BB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BB - ,simpleLowerCaseMapping:0x2F9BB - ,simpleTitleCaseMapping:0x2F9BB - }, - { code:0x2F9BC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BC - ,simpleLowerCaseMapping:0x2F9BC - ,simpleTitleCaseMapping:0x2F9BC - }, - { code:0x2F9BD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BD - ,simpleLowerCaseMapping:0x2F9BD - ,simpleTitleCaseMapping:0x2F9BD - }, - { code:0x2F9BE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BE - ,simpleLowerCaseMapping:0x2F9BE - ,simpleTitleCaseMapping:0x2F9BE - }, - { code:0x2F9BF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9BF - ,simpleLowerCaseMapping:0x2F9BF - ,simpleTitleCaseMapping:0x2F9BF - }, - { code:0x2F9C0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C0 - ,simpleLowerCaseMapping:0x2F9C0 - ,simpleTitleCaseMapping:0x2F9C0 - }, - { code:0x2F9C1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C1 - ,simpleLowerCaseMapping:0x2F9C1 - ,simpleTitleCaseMapping:0x2F9C1 - }, - { code:0x2F9C2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C2 - ,simpleLowerCaseMapping:0x2F9C2 - ,simpleTitleCaseMapping:0x2F9C2 - }, - { code:0x2F9C3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C3 - ,simpleLowerCaseMapping:0x2F9C3 - ,simpleTitleCaseMapping:0x2F9C3 - }, - { code:0x2F9C4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C4 - ,simpleLowerCaseMapping:0x2F9C4 - ,simpleTitleCaseMapping:0x2F9C4 - }, - { code:0x2F9C5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C5 - ,simpleLowerCaseMapping:0x2F9C5 - ,simpleTitleCaseMapping:0x2F9C5 - }, - { code:0x2F9C6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C6 - ,simpleLowerCaseMapping:0x2F9C6 - ,simpleTitleCaseMapping:0x2F9C6 - }, - { code:0x2F9C7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C7 - ,simpleLowerCaseMapping:0x2F9C7 - ,simpleTitleCaseMapping:0x2F9C7 - }, - { code:0x2F9C8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C8 - ,simpleLowerCaseMapping:0x2F9C8 - ,simpleTitleCaseMapping:0x2F9C8 - }, - { code:0x2F9C9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9C9 - ,simpleLowerCaseMapping:0x2F9C9 - ,simpleTitleCaseMapping:0x2F9C9 - }, - { code:0x2F9CA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CA - ,simpleLowerCaseMapping:0x2F9CA - ,simpleTitleCaseMapping:0x2F9CA - }, - { code:0x2F9CB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CB - ,simpleLowerCaseMapping:0x2F9CB - ,simpleTitleCaseMapping:0x2F9CB - }, - { code:0x2F9CC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CC - ,simpleLowerCaseMapping:0x2F9CC - ,simpleTitleCaseMapping:0x2F9CC - }, - { code:0x2F9CD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CD - ,simpleLowerCaseMapping:0x2F9CD - ,simpleTitleCaseMapping:0x2F9CD - }, - { code:0x2F9CE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CE - ,simpleLowerCaseMapping:0x2F9CE - ,simpleTitleCaseMapping:0x2F9CE - }, - { code:0x2F9CF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9CF - ,simpleLowerCaseMapping:0x2F9CF - ,simpleTitleCaseMapping:0x2F9CF - }, - { code:0x2F9D0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D0 - ,simpleLowerCaseMapping:0x2F9D0 - ,simpleTitleCaseMapping:0x2F9D0 - }, - { code:0x2F9D1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D1 - ,simpleLowerCaseMapping:0x2F9D1 - ,simpleTitleCaseMapping:0x2F9D1 - }, - { code:0x2F9D2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D2 - ,simpleLowerCaseMapping:0x2F9D2 - ,simpleTitleCaseMapping:0x2F9D2 - }, - { code:0x2F9D3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D3 - ,simpleLowerCaseMapping:0x2F9D3 - ,simpleTitleCaseMapping:0x2F9D3 - }, - { code:0x2F9D4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D4 - ,simpleLowerCaseMapping:0x2F9D4 - ,simpleTitleCaseMapping:0x2F9D4 - }, - { code:0x2F9D5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D5 - ,simpleLowerCaseMapping:0x2F9D5 - ,simpleTitleCaseMapping:0x2F9D5 - }, - { code:0x2F9D6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D6 - ,simpleLowerCaseMapping:0x2F9D6 - ,simpleTitleCaseMapping:0x2F9D6 - }, - { code:0x2F9D7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D7 - ,simpleLowerCaseMapping:0x2F9D7 - ,simpleTitleCaseMapping:0x2F9D7 - }, - { code:0x2F9D8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D8 - ,simpleLowerCaseMapping:0x2F9D8 - ,simpleTitleCaseMapping:0x2F9D8 - }, - { code:0x2F9D9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9D9 - ,simpleLowerCaseMapping:0x2F9D9 - ,simpleTitleCaseMapping:0x2F9D9 - }, - { code:0x2F9DA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DA - ,simpleLowerCaseMapping:0x2F9DA - ,simpleTitleCaseMapping:0x2F9DA - }, - { code:0x2F9DB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DB - ,simpleLowerCaseMapping:0x2F9DB - ,simpleTitleCaseMapping:0x2F9DB - }, - { code:0x2F9DC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DC - ,simpleLowerCaseMapping:0x2F9DC - ,simpleTitleCaseMapping:0x2F9DC - }, - { code:0x2F9DD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DD - ,simpleLowerCaseMapping:0x2F9DD - ,simpleTitleCaseMapping:0x2F9DD - }, - { code:0x2F9DE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DE - ,simpleLowerCaseMapping:0x2F9DE - ,simpleTitleCaseMapping:0x2F9DE - }, - { code:0x2F9DF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9DF - ,simpleLowerCaseMapping:0x2F9DF - ,simpleTitleCaseMapping:0x2F9DF - }, - { code:0x2F9E0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E0 - ,simpleLowerCaseMapping:0x2F9E0 - ,simpleTitleCaseMapping:0x2F9E0 - }, - { code:0x2F9E1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E1 - ,simpleLowerCaseMapping:0x2F9E1 - ,simpleTitleCaseMapping:0x2F9E1 - }, - { code:0x2F9E2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E2 - ,simpleLowerCaseMapping:0x2F9E2 - ,simpleTitleCaseMapping:0x2F9E2 - }, - { code:0x2F9E3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E3 - ,simpleLowerCaseMapping:0x2F9E3 - ,simpleTitleCaseMapping:0x2F9E3 - }, - { code:0x2F9E4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E4 - ,simpleLowerCaseMapping:0x2F9E4 - ,simpleTitleCaseMapping:0x2F9E4 - }, - { code:0x2F9E5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E5 - ,simpleLowerCaseMapping:0x2F9E5 - ,simpleTitleCaseMapping:0x2F9E5 - }, - { code:0x2F9E6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E6 - ,simpleLowerCaseMapping:0x2F9E6 - ,simpleTitleCaseMapping:0x2F9E6 - }, - { code:0x2F9E7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E7 - ,simpleLowerCaseMapping:0x2F9E7 - ,simpleTitleCaseMapping:0x2F9E7 - }, - { code:0x2F9E8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E8 - ,simpleLowerCaseMapping:0x2F9E8 - ,simpleTitleCaseMapping:0x2F9E8 - }, - { code:0x2F9E9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9E9 - ,simpleLowerCaseMapping:0x2F9E9 - ,simpleTitleCaseMapping:0x2F9E9 - }, - { code:0x2F9EA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9EA - ,simpleLowerCaseMapping:0x2F9EA - ,simpleTitleCaseMapping:0x2F9EA - }, - { code:0x2F9EB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9EB - ,simpleLowerCaseMapping:0x2F9EB - ,simpleTitleCaseMapping:0x2F9EB - }, - { code:0x2F9EC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9EC - ,simpleLowerCaseMapping:0x2F9EC - ,simpleTitleCaseMapping:0x2F9EC - }, - { code:0x2F9ED - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9ED - ,simpleLowerCaseMapping:0x2F9ED - ,simpleTitleCaseMapping:0x2F9ED - }, - { code:0x2F9EE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9EE - ,simpleLowerCaseMapping:0x2F9EE - ,simpleTitleCaseMapping:0x2F9EE - }, - { code:0x2F9EF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9EF - ,simpleLowerCaseMapping:0x2F9EF - ,simpleTitleCaseMapping:0x2F9EF - }, - { code:0x2F9F0 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F0 - ,simpleLowerCaseMapping:0x2F9F0 - ,simpleTitleCaseMapping:0x2F9F0 - }, - { code:0x2F9F1 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F1 - ,simpleLowerCaseMapping:0x2F9F1 - ,simpleTitleCaseMapping:0x2F9F1 - }, - { code:0x2F9F2 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F2 - ,simpleLowerCaseMapping:0x2F9F2 - ,simpleTitleCaseMapping:0x2F9F2 - }, - { code:0x2F9F3 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F3 - ,simpleLowerCaseMapping:0x2F9F3 - ,simpleTitleCaseMapping:0x2F9F3 - }, - { code:0x2F9F4 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F4 - ,simpleLowerCaseMapping:0x2F9F4 - ,simpleTitleCaseMapping:0x2F9F4 - }, - { code:0x2F9F5 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F5 - ,simpleLowerCaseMapping:0x2F9F5 - ,simpleTitleCaseMapping:0x2F9F5 - }, - { code:0x2F9F6 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F6 - ,simpleLowerCaseMapping:0x2F9F6 - ,simpleTitleCaseMapping:0x2F9F6 - }, - { code:0x2F9F7 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F7 - ,simpleLowerCaseMapping:0x2F9F7 - ,simpleTitleCaseMapping:0x2F9F7 - }, - { code:0x2F9F8 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F8 - ,simpleLowerCaseMapping:0x2F9F8 - ,simpleTitleCaseMapping:0x2F9F8 - }, - { code:0x2F9F9 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9F9 - ,simpleLowerCaseMapping:0x2F9F9 - ,simpleTitleCaseMapping:0x2F9F9 - }, - { code:0x2F9FA - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FA - ,simpleLowerCaseMapping:0x2F9FA - ,simpleTitleCaseMapping:0x2F9FA - }, - { code:0x2F9FB - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FB - ,simpleLowerCaseMapping:0x2F9FB - ,simpleTitleCaseMapping:0x2F9FB - }, - { code:0x2F9FC - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FC - ,simpleLowerCaseMapping:0x2F9FC - ,simpleTitleCaseMapping:0x2F9FC - }, - { code:0x2F9FD - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FD - ,simpleLowerCaseMapping:0x2F9FD - ,simpleTitleCaseMapping:0x2F9FD - }, - { code:0x2F9FE - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FE - ,simpleLowerCaseMapping:0x2F9FE - ,simpleTitleCaseMapping:0x2F9FE - }, - { code:0x2F9FF - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2F9FF - ,simpleLowerCaseMapping:0x2F9FF - ,simpleTitleCaseMapping:0x2F9FF - }, - { code:0x2FA00 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA00 - ,simpleLowerCaseMapping:0x2FA00 - ,simpleTitleCaseMapping:0x2FA00 - }, - { code:0x2FA01 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA01 - ,simpleLowerCaseMapping:0x2FA01 - ,simpleTitleCaseMapping:0x2FA01 - }, - { code:0x2FA02 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA02 - ,simpleLowerCaseMapping:0x2FA02 - ,simpleTitleCaseMapping:0x2FA02 - }, - { code:0x2FA03 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA03 - ,simpleLowerCaseMapping:0x2FA03 - ,simpleTitleCaseMapping:0x2FA03 - }, - { code:0x2FA04 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA04 - ,simpleLowerCaseMapping:0x2FA04 - ,simpleTitleCaseMapping:0x2FA04 - }, - { code:0x2FA05 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA05 - ,simpleLowerCaseMapping:0x2FA05 - ,simpleTitleCaseMapping:0x2FA05 - }, - { code:0x2FA06 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA06 - ,simpleLowerCaseMapping:0x2FA06 - ,simpleTitleCaseMapping:0x2FA06 - }, - { code:0x2FA07 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA07 - ,simpleLowerCaseMapping:0x2FA07 - ,simpleTitleCaseMapping:0x2FA07 - }, - { code:0x2FA08 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA08 - ,simpleLowerCaseMapping:0x2FA08 - ,simpleTitleCaseMapping:0x2FA08 - }, - { code:0x2FA09 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA09 - ,simpleLowerCaseMapping:0x2FA09 - ,simpleTitleCaseMapping:0x2FA09 - }, - { code:0x2FA0A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0A - ,simpleLowerCaseMapping:0x2FA0A - ,simpleTitleCaseMapping:0x2FA0A - }, - { code:0x2FA0B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0B - ,simpleLowerCaseMapping:0x2FA0B - ,simpleTitleCaseMapping:0x2FA0B - }, - { code:0x2FA0C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0C - ,simpleLowerCaseMapping:0x2FA0C - ,simpleTitleCaseMapping:0x2FA0C - }, - { code:0x2FA0D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0D - ,simpleLowerCaseMapping:0x2FA0D - ,simpleTitleCaseMapping:0x2FA0D - }, - { code:0x2FA0E - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0E - ,simpleLowerCaseMapping:0x2FA0E - ,simpleTitleCaseMapping:0x2FA0E - }, - { code:0x2FA0F - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA0F - ,simpleLowerCaseMapping:0x2FA0F - ,simpleTitleCaseMapping:0x2FA0F - }, - { code:0x2FA10 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA10 - ,simpleLowerCaseMapping:0x2FA10 - ,simpleTitleCaseMapping:0x2FA10 - }, - { code:0x2FA11 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA11 - ,simpleLowerCaseMapping:0x2FA11 - ,simpleTitleCaseMapping:0x2FA11 - }, - { code:0x2FA12 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA12 - ,simpleLowerCaseMapping:0x2FA12 - ,simpleTitleCaseMapping:0x2FA12 - }, - { code:0x2FA13 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA13 - ,simpleLowerCaseMapping:0x2FA13 - ,simpleTitleCaseMapping:0x2FA13 - }, - { code:0x2FA14 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA14 - ,simpleLowerCaseMapping:0x2FA14 - ,simpleTitleCaseMapping:0x2FA14 - }, - { code:0x2FA15 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA15 - ,simpleLowerCaseMapping:0x2FA15 - ,simpleTitleCaseMapping:0x2FA15 - }, - { code:0x2FA16 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA16 - ,simpleLowerCaseMapping:0x2FA16 - ,simpleTitleCaseMapping:0x2FA16 - }, - { code:0x2FA17 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA17 - ,simpleLowerCaseMapping:0x2FA17 - ,simpleTitleCaseMapping:0x2FA17 - }, - { code:0x2FA18 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA18 - ,simpleLowerCaseMapping:0x2FA18 - ,simpleTitleCaseMapping:0x2FA18 - }, - { code:0x2FA19 - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA19 - ,simpleLowerCaseMapping:0x2FA19 - ,simpleTitleCaseMapping:0x2FA19 - }, - { code:0x2FA1A - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA1A - ,simpleLowerCaseMapping:0x2FA1A - ,simpleTitleCaseMapping:0x2FA1A - }, - { code:0x2FA1B - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA1B - ,simpleLowerCaseMapping:0x2FA1B - ,simpleTitleCaseMapping:0x2FA1B - }, - { code:0x2FA1C - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA1C - ,simpleLowerCaseMapping:0x2FA1C - ,simpleTitleCaseMapping:0x2FA1C - }, - { code:0x2FA1D - ,generalCategory:UnicodeData.GeneralCategory.Lo - ,simpleUpperCaseMapping:0x2FA1D - ,simpleLowerCaseMapping:0x2FA1D - ,simpleTitleCaseMapping:0x2FA1D - }, - { code:0xE0001 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0001 - ,simpleLowerCaseMapping:0xE0001 - ,simpleTitleCaseMapping:0xE0001 - }, - { code:0xE0020 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0020 - ,simpleLowerCaseMapping:0xE0020 - ,simpleTitleCaseMapping:0xE0020 - }, - { code:0xE0021 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0021 - ,simpleLowerCaseMapping:0xE0021 - ,simpleTitleCaseMapping:0xE0021 - }, - { code:0xE0022 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0022 - ,simpleLowerCaseMapping:0xE0022 - ,simpleTitleCaseMapping:0xE0022 - }, - { code:0xE0023 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0023 - ,simpleLowerCaseMapping:0xE0023 - ,simpleTitleCaseMapping:0xE0023 - }, - { code:0xE0024 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0024 - ,simpleLowerCaseMapping:0xE0024 - ,simpleTitleCaseMapping:0xE0024 - }, - { code:0xE0025 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0025 - ,simpleLowerCaseMapping:0xE0025 - ,simpleTitleCaseMapping:0xE0025 - }, - { code:0xE0026 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0026 - ,simpleLowerCaseMapping:0xE0026 - ,simpleTitleCaseMapping:0xE0026 - }, - { code:0xE0027 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0027 - ,simpleLowerCaseMapping:0xE0027 - ,simpleTitleCaseMapping:0xE0027 - }, - { code:0xE0028 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0028 - ,simpleLowerCaseMapping:0xE0028 - ,simpleTitleCaseMapping:0xE0028 - }, - { code:0xE0029 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0029 - ,simpleLowerCaseMapping:0xE0029 - ,simpleTitleCaseMapping:0xE0029 - }, - { code:0xE002A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002A - ,simpleLowerCaseMapping:0xE002A - ,simpleTitleCaseMapping:0xE002A - }, - { code:0xE002B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002B - ,simpleLowerCaseMapping:0xE002B - ,simpleTitleCaseMapping:0xE002B - }, - { code:0xE002C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002C - ,simpleLowerCaseMapping:0xE002C - ,simpleTitleCaseMapping:0xE002C - }, - { code:0xE002D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002D - ,simpleLowerCaseMapping:0xE002D - ,simpleTitleCaseMapping:0xE002D - }, - { code:0xE002E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002E - ,simpleLowerCaseMapping:0xE002E - ,simpleTitleCaseMapping:0xE002E - }, - { code:0xE002F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE002F - ,simpleLowerCaseMapping:0xE002F - ,simpleTitleCaseMapping:0xE002F - }, - { code:0xE0030 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0030 - ,simpleLowerCaseMapping:0xE0030 - ,simpleTitleCaseMapping:0xE0030 - }, - { code:0xE0031 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0031 - ,simpleLowerCaseMapping:0xE0031 - ,simpleTitleCaseMapping:0xE0031 - }, - { code:0xE0032 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0032 - ,simpleLowerCaseMapping:0xE0032 - ,simpleTitleCaseMapping:0xE0032 - }, - { code:0xE0033 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0033 - ,simpleLowerCaseMapping:0xE0033 - ,simpleTitleCaseMapping:0xE0033 - }, - { code:0xE0034 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0034 - ,simpleLowerCaseMapping:0xE0034 - ,simpleTitleCaseMapping:0xE0034 - }, - { code:0xE0035 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0035 - ,simpleLowerCaseMapping:0xE0035 - ,simpleTitleCaseMapping:0xE0035 - }, - { code:0xE0036 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0036 - ,simpleLowerCaseMapping:0xE0036 - ,simpleTitleCaseMapping:0xE0036 - }, - { code:0xE0037 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0037 - ,simpleLowerCaseMapping:0xE0037 - ,simpleTitleCaseMapping:0xE0037 - }, - { code:0xE0038 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0038 - ,simpleLowerCaseMapping:0xE0038 - ,simpleTitleCaseMapping:0xE0038 - }, - { code:0xE0039 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0039 - ,simpleLowerCaseMapping:0xE0039 - ,simpleTitleCaseMapping:0xE0039 - }, - { code:0xE003A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003A - ,simpleLowerCaseMapping:0xE003A - ,simpleTitleCaseMapping:0xE003A - }, - { code:0xE003B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003B - ,simpleLowerCaseMapping:0xE003B - ,simpleTitleCaseMapping:0xE003B - }, - { code:0xE003C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003C - ,simpleLowerCaseMapping:0xE003C - ,simpleTitleCaseMapping:0xE003C - }, - { code:0xE003D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003D - ,simpleLowerCaseMapping:0xE003D - ,simpleTitleCaseMapping:0xE003D - }, - { code:0xE003E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003E - ,simpleLowerCaseMapping:0xE003E - ,simpleTitleCaseMapping:0xE003E - }, - { code:0xE003F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE003F - ,simpleLowerCaseMapping:0xE003F - ,simpleTitleCaseMapping:0xE003F - }, - { code:0xE0040 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0040 - ,simpleLowerCaseMapping:0xE0040 - ,simpleTitleCaseMapping:0xE0040 - }, - { code:0xE0041 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0041 - ,simpleLowerCaseMapping:0xE0041 - ,simpleTitleCaseMapping:0xE0041 - }, - { code:0xE0042 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0042 - ,simpleLowerCaseMapping:0xE0042 - ,simpleTitleCaseMapping:0xE0042 - }, - { code:0xE0043 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0043 - ,simpleLowerCaseMapping:0xE0043 - ,simpleTitleCaseMapping:0xE0043 - }, - { code:0xE0044 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0044 - ,simpleLowerCaseMapping:0xE0044 - ,simpleTitleCaseMapping:0xE0044 - }, - { code:0xE0045 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0045 - ,simpleLowerCaseMapping:0xE0045 - ,simpleTitleCaseMapping:0xE0045 - }, - { code:0xE0046 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0046 - ,simpleLowerCaseMapping:0xE0046 - ,simpleTitleCaseMapping:0xE0046 - }, - { code:0xE0047 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0047 - ,simpleLowerCaseMapping:0xE0047 - ,simpleTitleCaseMapping:0xE0047 - }, - { code:0xE0048 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0048 - ,simpleLowerCaseMapping:0xE0048 - ,simpleTitleCaseMapping:0xE0048 - }, - { code:0xE0049 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0049 - ,simpleLowerCaseMapping:0xE0049 - ,simpleTitleCaseMapping:0xE0049 - }, - { code:0xE004A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004A - ,simpleLowerCaseMapping:0xE004A - ,simpleTitleCaseMapping:0xE004A - }, - { code:0xE004B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004B - ,simpleLowerCaseMapping:0xE004B - ,simpleTitleCaseMapping:0xE004B - }, - { code:0xE004C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004C - ,simpleLowerCaseMapping:0xE004C - ,simpleTitleCaseMapping:0xE004C - }, - { code:0xE004D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004D - ,simpleLowerCaseMapping:0xE004D - ,simpleTitleCaseMapping:0xE004D - }, - { code:0xE004E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004E - ,simpleLowerCaseMapping:0xE004E - ,simpleTitleCaseMapping:0xE004E - }, - { code:0xE004F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE004F - ,simpleLowerCaseMapping:0xE004F - ,simpleTitleCaseMapping:0xE004F - }, - { code:0xE0050 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0050 - ,simpleLowerCaseMapping:0xE0050 - ,simpleTitleCaseMapping:0xE0050 - }, - { code:0xE0051 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0051 - ,simpleLowerCaseMapping:0xE0051 - ,simpleTitleCaseMapping:0xE0051 - }, - { code:0xE0052 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0052 - ,simpleLowerCaseMapping:0xE0052 - ,simpleTitleCaseMapping:0xE0052 - }, - { code:0xE0053 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0053 - ,simpleLowerCaseMapping:0xE0053 - ,simpleTitleCaseMapping:0xE0053 - }, - { code:0xE0054 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0054 - ,simpleLowerCaseMapping:0xE0054 - ,simpleTitleCaseMapping:0xE0054 - }, - { code:0xE0055 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0055 - ,simpleLowerCaseMapping:0xE0055 - ,simpleTitleCaseMapping:0xE0055 - }, - { code:0xE0056 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0056 - ,simpleLowerCaseMapping:0xE0056 - ,simpleTitleCaseMapping:0xE0056 - }, - { code:0xE0057 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0057 - ,simpleLowerCaseMapping:0xE0057 - ,simpleTitleCaseMapping:0xE0057 - }, - { code:0xE0058 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0058 - ,simpleLowerCaseMapping:0xE0058 - ,simpleTitleCaseMapping:0xE0058 - }, - { code:0xE0059 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0059 - ,simpleLowerCaseMapping:0xE0059 - ,simpleTitleCaseMapping:0xE0059 - }, - { code:0xE005A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005A - ,simpleLowerCaseMapping:0xE005A - ,simpleTitleCaseMapping:0xE005A - }, - { code:0xE005B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005B - ,simpleLowerCaseMapping:0xE005B - ,simpleTitleCaseMapping:0xE005B - }, - { code:0xE005C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005C - ,simpleLowerCaseMapping:0xE005C - ,simpleTitleCaseMapping:0xE005C - }, - { code:0xE005D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005D - ,simpleLowerCaseMapping:0xE005D - ,simpleTitleCaseMapping:0xE005D - }, - { code:0xE005E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005E - ,simpleLowerCaseMapping:0xE005E - ,simpleTitleCaseMapping:0xE005E - }, - { code:0xE005F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE005F - ,simpleLowerCaseMapping:0xE005F - ,simpleTitleCaseMapping:0xE005F - }, - { code:0xE0060 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0060 - ,simpleLowerCaseMapping:0xE0060 - ,simpleTitleCaseMapping:0xE0060 - }, - { code:0xE0061 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0061 - ,simpleLowerCaseMapping:0xE0061 - ,simpleTitleCaseMapping:0xE0061 - }, - { code:0xE0062 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0062 - ,simpleLowerCaseMapping:0xE0062 - ,simpleTitleCaseMapping:0xE0062 - }, - { code:0xE0063 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0063 - ,simpleLowerCaseMapping:0xE0063 - ,simpleTitleCaseMapping:0xE0063 - }, - { code:0xE0064 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0064 - ,simpleLowerCaseMapping:0xE0064 - ,simpleTitleCaseMapping:0xE0064 - }, - { code:0xE0065 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0065 - ,simpleLowerCaseMapping:0xE0065 - ,simpleTitleCaseMapping:0xE0065 - }, - { code:0xE0066 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0066 - ,simpleLowerCaseMapping:0xE0066 - ,simpleTitleCaseMapping:0xE0066 - }, - { code:0xE0067 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0067 - ,simpleLowerCaseMapping:0xE0067 - ,simpleTitleCaseMapping:0xE0067 - }, - { code:0xE0068 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0068 - ,simpleLowerCaseMapping:0xE0068 - ,simpleTitleCaseMapping:0xE0068 - }, - { code:0xE0069 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0069 - ,simpleLowerCaseMapping:0xE0069 - ,simpleTitleCaseMapping:0xE0069 - }, - { code:0xE006A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006A - ,simpleLowerCaseMapping:0xE006A - ,simpleTitleCaseMapping:0xE006A - }, - { code:0xE006B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006B - ,simpleLowerCaseMapping:0xE006B - ,simpleTitleCaseMapping:0xE006B - }, - { code:0xE006C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006C - ,simpleLowerCaseMapping:0xE006C - ,simpleTitleCaseMapping:0xE006C - }, - { code:0xE006D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006D - ,simpleLowerCaseMapping:0xE006D - ,simpleTitleCaseMapping:0xE006D - }, - { code:0xE006E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006E - ,simpleLowerCaseMapping:0xE006E - ,simpleTitleCaseMapping:0xE006E - }, - { code:0xE006F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE006F - ,simpleLowerCaseMapping:0xE006F - ,simpleTitleCaseMapping:0xE006F - }, - { code:0xE0070 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0070 - ,simpleLowerCaseMapping:0xE0070 - ,simpleTitleCaseMapping:0xE0070 - }, - { code:0xE0071 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0071 - ,simpleLowerCaseMapping:0xE0071 - ,simpleTitleCaseMapping:0xE0071 - }, - { code:0xE0072 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0072 - ,simpleLowerCaseMapping:0xE0072 - ,simpleTitleCaseMapping:0xE0072 - }, - { code:0xE0073 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0073 - ,simpleLowerCaseMapping:0xE0073 - ,simpleTitleCaseMapping:0xE0073 - }, - { code:0xE0074 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0074 - ,simpleLowerCaseMapping:0xE0074 - ,simpleTitleCaseMapping:0xE0074 - }, - { code:0xE0075 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0075 - ,simpleLowerCaseMapping:0xE0075 - ,simpleTitleCaseMapping:0xE0075 - }, - { code:0xE0076 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0076 - ,simpleLowerCaseMapping:0xE0076 - ,simpleTitleCaseMapping:0xE0076 - }, - { code:0xE0077 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0077 - ,simpleLowerCaseMapping:0xE0077 - ,simpleTitleCaseMapping:0xE0077 - }, - { code:0xE0078 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0078 - ,simpleLowerCaseMapping:0xE0078 - ,simpleTitleCaseMapping:0xE0078 - }, - { code:0xE0079 - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE0079 - ,simpleLowerCaseMapping:0xE0079 - ,simpleTitleCaseMapping:0xE0079 - }, - { code:0xE007A - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007A - ,simpleLowerCaseMapping:0xE007A - ,simpleTitleCaseMapping:0xE007A - }, - { code:0xE007B - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007B - ,simpleLowerCaseMapping:0xE007B - ,simpleTitleCaseMapping:0xE007B - }, - { code:0xE007C - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007C - ,simpleLowerCaseMapping:0xE007C - ,simpleTitleCaseMapping:0xE007C - }, - { code:0xE007D - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007D - ,simpleLowerCaseMapping:0xE007D - ,simpleTitleCaseMapping:0xE007D - }, - { code:0xE007E - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007E - ,simpleLowerCaseMapping:0xE007E - ,simpleTitleCaseMapping:0xE007E - }, - { code:0xE007F - ,generalCategory:UnicodeData.GeneralCategory.Cf - ,simpleUpperCaseMapping:0xE007F - ,simpleLowerCaseMapping:0xE007F - ,simpleTitleCaseMapping:0xE007F - }, - { code:0xE0100 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0100 - ,simpleLowerCaseMapping:0xE0100 - ,simpleTitleCaseMapping:0xE0100 - }, - { code:0xE0101 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0101 - ,simpleLowerCaseMapping:0xE0101 - ,simpleTitleCaseMapping:0xE0101 - }, - { code:0xE0102 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0102 - ,simpleLowerCaseMapping:0xE0102 - ,simpleTitleCaseMapping:0xE0102 - }, - { code:0xE0103 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0103 - ,simpleLowerCaseMapping:0xE0103 - ,simpleTitleCaseMapping:0xE0103 - }, - { code:0xE0104 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0104 - ,simpleLowerCaseMapping:0xE0104 - ,simpleTitleCaseMapping:0xE0104 - }, - { code:0xE0105 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0105 - ,simpleLowerCaseMapping:0xE0105 - ,simpleTitleCaseMapping:0xE0105 - }, - { code:0xE0106 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0106 - ,simpleLowerCaseMapping:0xE0106 - ,simpleTitleCaseMapping:0xE0106 - }, - { code:0xE0107 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0107 - ,simpleLowerCaseMapping:0xE0107 - ,simpleTitleCaseMapping:0xE0107 - }, - { code:0xE0108 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0108 - ,simpleLowerCaseMapping:0xE0108 - ,simpleTitleCaseMapping:0xE0108 - }, - { code:0xE0109 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0109 - ,simpleLowerCaseMapping:0xE0109 - ,simpleTitleCaseMapping:0xE0109 - }, - { code:0xE010A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010A - ,simpleLowerCaseMapping:0xE010A - ,simpleTitleCaseMapping:0xE010A - }, - { code:0xE010B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010B - ,simpleLowerCaseMapping:0xE010B - ,simpleTitleCaseMapping:0xE010B - }, - { code:0xE010C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010C - ,simpleLowerCaseMapping:0xE010C - ,simpleTitleCaseMapping:0xE010C - }, - { code:0xE010D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010D - ,simpleLowerCaseMapping:0xE010D - ,simpleTitleCaseMapping:0xE010D - }, - { code:0xE010E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010E - ,simpleLowerCaseMapping:0xE010E - ,simpleTitleCaseMapping:0xE010E - }, - { code:0xE010F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE010F - ,simpleLowerCaseMapping:0xE010F - ,simpleTitleCaseMapping:0xE010F - }, - { code:0xE0110 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0110 - ,simpleLowerCaseMapping:0xE0110 - ,simpleTitleCaseMapping:0xE0110 - }, - { code:0xE0111 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0111 - ,simpleLowerCaseMapping:0xE0111 - ,simpleTitleCaseMapping:0xE0111 - }, - { code:0xE0112 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0112 - ,simpleLowerCaseMapping:0xE0112 - ,simpleTitleCaseMapping:0xE0112 - }, - { code:0xE0113 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0113 - ,simpleLowerCaseMapping:0xE0113 - ,simpleTitleCaseMapping:0xE0113 - }, - { code:0xE0114 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0114 - ,simpleLowerCaseMapping:0xE0114 - ,simpleTitleCaseMapping:0xE0114 - }, - { code:0xE0115 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0115 - ,simpleLowerCaseMapping:0xE0115 - ,simpleTitleCaseMapping:0xE0115 - }, - { code:0xE0116 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0116 - ,simpleLowerCaseMapping:0xE0116 - ,simpleTitleCaseMapping:0xE0116 - }, - { code:0xE0117 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0117 - ,simpleLowerCaseMapping:0xE0117 - ,simpleTitleCaseMapping:0xE0117 - }, - { code:0xE0118 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0118 - ,simpleLowerCaseMapping:0xE0118 - ,simpleTitleCaseMapping:0xE0118 - }, - { code:0xE0119 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0119 - ,simpleLowerCaseMapping:0xE0119 - ,simpleTitleCaseMapping:0xE0119 - }, - { code:0xE011A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011A - ,simpleLowerCaseMapping:0xE011A - ,simpleTitleCaseMapping:0xE011A - }, - { code:0xE011B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011B - ,simpleLowerCaseMapping:0xE011B - ,simpleTitleCaseMapping:0xE011B - }, - { code:0xE011C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011C - ,simpleLowerCaseMapping:0xE011C - ,simpleTitleCaseMapping:0xE011C - }, - { code:0xE011D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011D - ,simpleLowerCaseMapping:0xE011D - ,simpleTitleCaseMapping:0xE011D - }, - { code:0xE011E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011E - ,simpleLowerCaseMapping:0xE011E - ,simpleTitleCaseMapping:0xE011E - }, - { code:0xE011F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE011F - ,simpleLowerCaseMapping:0xE011F - ,simpleTitleCaseMapping:0xE011F - }, - { code:0xE0120 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0120 - ,simpleLowerCaseMapping:0xE0120 - ,simpleTitleCaseMapping:0xE0120 - }, - { code:0xE0121 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0121 - ,simpleLowerCaseMapping:0xE0121 - ,simpleTitleCaseMapping:0xE0121 - }, - { code:0xE0122 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0122 - ,simpleLowerCaseMapping:0xE0122 - ,simpleTitleCaseMapping:0xE0122 - }, - { code:0xE0123 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0123 - ,simpleLowerCaseMapping:0xE0123 - ,simpleTitleCaseMapping:0xE0123 - }, - { code:0xE0124 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0124 - ,simpleLowerCaseMapping:0xE0124 - ,simpleTitleCaseMapping:0xE0124 - }, - { code:0xE0125 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0125 - ,simpleLowerCaseMapping:0xE0125 - ,simpleTitleCaseMapping:0xE0125 - }, - { code:0xE0126 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0126 - ,simpleLowerCaseMapping:0xE0126 - ,simpleTitleCaseMapping:0xE0126 - }, - { code:0xE0127 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0127 - ,simpleLowerCaseMapping:0xE0127 - ,simpleTitleCaseMapping:0xE0127 - }, - { code:0xE0128 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0128 - ,simpleLowerCaseMapping:0xE0128 - ,simpleTitleCaseMapping:0xE0128 - }, - { code:0xE0129 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0129 - ,simpleLowerCaseMapping:0xE0129 - ,simpleTitleCaseMapping:0xE0129 - }, - { code:0xE012A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012A - ,simpleLowerCaseMapping:0xE012A - ,simpleTitleCaseMapping:0xE012A - }, - { code:0xE012B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012B - ,simpleLowerCaseMapping:0xE012B - ,simpleTitleCaseMapping:0xE012B - }, - { code:0xE012C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012C - ,simpleLowerCaseMapping:0xE012C - ,simpleTitleCaseMapping:0xE012C - }, - { code:0xE012D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012D - ,simpleLowerCaseMapping:0xE012D - ,simpleTitleCaseMapping:0xE012D - }, - { code:0xE012E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012E - ,simpleLowerCaseMapping:0xE012E - ,simpleTitleCaseMapping:0xE012E - }, - { code:0xE012F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE012F - ,simpleLowerCaseMapping:0xE012F - ,simpleTitleCaseMapping:0xE012F - }, - { code:0xE0130 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0130 - ,simpleLowerCaseMapping:0xE0130 - ,simpleTitleCaseMapping:0xE0130 - }, - { code:0xE0131 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0131 - ,simpleLowerCaseMapping:0xE0131 - ,simpleTitleCaseMapping:0xE0131 - }, - { code:0xE0132 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0132 - ,simpleLowerCaseMapping:0xE0132 - ,simpleTitleCaseMapping:0xE0132 - }, - { code:0xE0133 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0133 - ,simpleLowerCaseMapping:0xE0133 - ,simpleTitleCaseMapping:0xE0133 - }, - { code:0xE0134 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0134 - ,simpleLowerCaseMapping:0xE0134 - ,simpleTitleCaseMapping:0xE0134 - }, - { code:0xE0135 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0135 - ,simpleLowerCaseMapping:0xE0135 - ,simpleTitleCaseMapping:0xE0135 - }, - { code:0xE0136 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0136 - ,simpleLowerCaseMapping:0xE0136 - ,simpleTitleCaseMapping:0xE0136 - }, - { code:0xE0137 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0137 - ,simpleLowerCaseMapping:0xE0137 - ,simpleTitleCaseMapping:0xE0137 - }, - { code:0xE0138 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0138 - ,simpleLowerCaseMapping:0xE0138 - ,simpleTitleCaseMapping:0xE0138 - }, - { code:0xE0139 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0139 - ,simpleLowerCaseMapping:0xE0139 - ,simpleTitleCaseMapping:0xE0139 - }, - { code:0xE013A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013A - ,simpleLowerCaseMapping:0xE013A - ,simpleTitleCaseMapping:0xE013A - }, - { code:0xE013B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013B - ,simpleLowerCaseMapping:0xE013B - ,simpleTitleCaseMapping:0xE013B - }, - { code:0xE013C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013C - ,simpleLowerCaseMapping:0xE013C - ,simpleTitleCaseMapping:0xE013C - }, - { code:0xE013D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013D - ,simpleLowerCaseMapping:0xE013D - ,simpleTitleCaseMapping:0xE013D - }, - { code:0xE013E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013E - ,simpleLowerCaseMapping:0xE013E - ,simpleTitleCaseMapping:0xE013E - }, - { code:0xE013F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE013F - ,simpleLowerCaseMapping:0xE013F - ,simpleTitleCaseMapping:0xE013F - }, - { code:0xE0140 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0140 - ,simpleLowerCaseMapping:0xE0140 - ,simpleTitleCaseMapping:0xE0140 - }, - { code:0xE0141 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0141 - ,simpleLowerCaseMapping:0xE0141 - ,simpleTitleCaseMapping:0xE0141 - }, - { code:0xE0142 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0142 - ,simpleLowerCaseMapping:0xE0142 - ,simpleTitleCaseMapping:0xE0142 - }, - { code:0xE0143 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0143 - ,simpleLowerCaseMapping:0xE0143 - ,simpleTitleCaseMapping:0xE0143 - }, - { code:0xE0144 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0144 - ,simpleLowerCaseMapping:0xE0144 - ,simpleTitleCaseMapping:0xE0144 - }, - { code:0xE0145 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0145 - ,simpleLowerCaseMapping:0xE0145 - ,simpleTitleCaseMapping:0xE0145 - }, - { code:0xE0146 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0146 - ,simpleLowerCaseMapping:0xE0146 - ,simpleTitleCaseMapping:0xE0146 - }, - { code:0xE0147 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0147 - ,simpleLowerCaseMapping:0xE0147 - ,simpleTitleCaseMapping:0xE0147 - }, - { code:0xE0148 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0148 - ,simpleLowerCaseMapping:0xE0148 - ,simpleTitleCaseMapping:0xE0148 - }, - { code:0xE0149 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0149 - ,simpleLowerCaseMapping:0xE0149 - ,simpleTitleCaseMapping:0xE0149 - }, - { code:0xE014A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014A - ,simpleLowerCaseMapping:0xE014A - ,simpleTitleCaseMapping:0xE014A - }, - { code:0xE014B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014B - ,simpleLowerCaseMapping:0xE014B - ,simpleTitleCaseMapping:0xE014B - }, - { code:0xE014C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014C - ,simpleLowerCaseMapping:0xE014C - ,simpleTitleCaseMapping:0xE014C - }, - { code:0xE014D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014D - ,simpleLowerCaseMapping:0xE014D - ,simpleTitleCaseMapping:0xE014D - }, - { code:0xE014E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014E - ,simpleLowerCaseMapping:0xE014E - ,simpleTitleCaseMapping:0xE014E - }, - { code:0xE014F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE014F - ,simpleLowerCaseMapping:0xE014F - ,simpleTitleCaseMapping:0xE014F - }, - { code:0xE0150 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0150 - ,simpleLowerCaseMapping:0xE0150 - ,simpleTitleCaseMapping:0xE0150 - }, - { code:0xE0151 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0151 - ,simpleLowerCaseMapping:0xE0151 - ,simpleTitleCaseMapping:0xE0151 - }, - { code:0xE0152 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0152 - ,simpleLowerCaseMapping:0xE0152 - ,simpleTitleCaseMapping:0xE0152 - }, - { code:0xE0153 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0153 - ,simpleLowerCaseMapping:0xE0153 - ,simpleTitleCaseMapping:0xE0153 - }, - { code:0xE0154 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0154 - ,simpleLowerCaseMapping:0xE0154 - ,simpleTitleCaseMapping:0xE0154 - }, - { code:0xE0155 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0155 - ,simpleLowerCaseMapping:0xE0155 - ,simpleTitleCaseMapping:0xE0155 - }, - { code:0xE0156 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0156 - ,simpleLowerCaseMapping:0xE0156 - ,simpleTitleCaseMapping:0xE0156 - }, - { code:0xE0157 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0157 - ,simpleLowerCaseMapping:0xE0157 - ,simpleTitleCaseMapping:0xE0157 - }, - { code:0xE0158 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0158 - ,simpleLowerCaseMapping:0xE0158 - ,simpleTitleCaseMapping:0xE0158 - }, - { code:0xE0159 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0159 - ,simpleLowerCaseMapping:0xE0159 - ,simpleTitleCaseMapping:0xE0159 - }, - { code:0xE015A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015A - ,simpleLowerCaseMapping:0xE015A - ,simpleTitleCaseMapping:0xE015A - }, - { code:0xE015B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015B - ,simpleLowerCaseMapping:0xE015B - ,simpleTitleCaseMapping:0xE015B - }, - { code:0xE015C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015C - ,simpleLowerCaseMapping:0xE015C - ,simpleTitleCaseMapping:0xE015C - }, - { code:0xE015D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015D - ,simpleLowerCaseMapping:0xE015D - ,simpleTitleCaseMapping:0xE015D - }, - { code:0xE015E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015E - ,simpleLowerCaseMapping:0xE015E - ,simpleTitleCaseMapping:0xE015E - }, - { code:0xE015F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE015F - ,simpleLowerCaseMapping:0xE015F - ,simpleTitleCaseMapping:0xE015F - }, - { code:0xE0160 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0160 - ,simpleLowerCaseMapping:0xE0160 - ,simpleTitleCaseMapping:0xE0160 - }, - { code:0xE0161 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0161 - ,simpleLowerCaseMapping:0xE0161 - ,simpleTitleCaseMapping:0xE0161 - }, - { code:0xE0162 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0162 - ,simpleLowerCaseMapping:0xE0162 - ,simpleTitleCaseMapping:0xE0162 - }, - { code:0xE0163 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0163 - ,simpleLowerCaseMapping:0xE0163 - ,simpleTitleCaseMapping:0xE0163 - }, - { code:0xE0164 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0164 - ,simpleLowerCaseMapping:0xE0164 - ,simpleTitleCaseMapping:0xE0164 - }, - { code:0xE0165 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0165 - ,simpleLowerCaseMapping:0xE0165 - ,simpleTitleCaseMapping:0xE0165 - }, - { code:0xE0166 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0166 - ,simpleLowerCaseMapping:0xE0166 - ,simpleTitleCaseMapping:0xE0166 - }, - { code:0xE0167 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0167 - ,simpleLowerCaseMapping:0xE0167 - ,simpleTitleCaseMapping:0xE0167 - }, - { code:0xE0168 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0168 - ,simpleLowerCaseMapping:0xE0168 - ,simpleTitleCaseMapping:0xE0168 - }, - { code:0xE0169 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0169 - ,simpleLowerCaseMapping:0xE0169 - ,simpleTitleCaseMapping:0xE0169 - }, - { code:0xE016A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016A - ,simpleLowerCaseMapping:0xE016A - ,simpleTitleCaseMapping:0xE016A - }, - { code:0xE016B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016B - ,simpleLowerCaseMapping:0xE016B - ,simpleTitleCaseMapping:0xE016B - }, - { code:0xE016C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016C - ,simpleLowerCaseMapping:0xE016C - ,simpleTitleCaseMapping:0xE016C - }, - { code:0xE016D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016D - ,simpleLowerCaseMapping:0xE016D - ,simpleTitleCaseMapping:0xE016D - }, - { code:0xE016E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016E - ,simpleLowerCaseMapping:0xE016E - ,simpleTitleCaseMapping:0xE016E - }, - { code:0xE016F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE016F - ,simpleLowerCaseMapping:0xE016F - ,simpleTitleCaseMapping:0xE016F - }, - { code:0xE0170 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0170 - ,simpleLowerCaseMapping:0xE0170 - ,simpleTitleCaseMapping:0xE0170 - }, - { code:0xE0171 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0171 - ,simpleLowerCaseMapping:0xE0171 - ,simpleTitleCaseMapping:0xE0171 - }, - { code:0xE0172 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0172 - ,simpleLowerCaseMapping:0xE0172 - ,simpleTitleCaseMapping:0xE0172 - }, - { code:0xE0173 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0173 - ,simpleLowerCaseMapping:0xE0173 - ,simpleTitleCaseMapping:0xE0173 - }, - { code:0xE0174 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0174 - ,simpleLowerCaseMapping:0xE0174 - ,simpleTitleCaseMapping:0xE0174 - }, - { code:0xE0175 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0175 - ,simpleLowerCaseMapping:0xE0175 - ,simpleTitleCaseMapping:0xE0175 - }, - { code:0xE0176 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0176 - ,simpleLowerCaseMapping:0xE0176 - ,simpleTitleCaseMapping:0xE0176 - }, - { code:0xE0177 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0177 - ,simpleLowerCaseMapping:0xE0177 - ,simpleTitleCaseMapping:0xE0177 - }, - { code:0xE0178 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0178 - ,simpleLowerCaseMapping:0xE0178 - ,simpleTitleCaseMapping:0xE0178 - }, - { code:0xE0179 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0179 - ,simpleLowerCaseMapping:0xE0179 - ,simpleTitleCaseMapping:0xE0179 - }, - { code:0xE017A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017A - ,simpleLowerCaseMapping:0xE017A - ,simpleTitleCaseMapping:0xE017A - }, - { code:0xE017B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017B - ,simpleLowerCaseMapping:0xE017B - ,simpleTitleCaseMapping:0xE017B - }, - { code:0xE017C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017C - ,simpleLowerCaseMapping:0xE017C - ,simpleTitleCaseMapping:0xE017C - }, - { code:0xE017D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017D - ,simpleLowerCaseMapping:0xE017D - ,simpleTitleCaseMapping:0xE017D - }, - { code:0xE017E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017E - ,simpleLowerCaseMapping:0xE017E - ,simpleTitleCaseMapping:0xE017E - }, - { code:0xE017F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE017F - ,simpleLowerCaseMapping:0xE017F - ,simpleTitleCaseMapping:0xE017F - }, - { code:0xE0180 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0180 - ,simpleLowerCaseMapping:0xE0180 - ,simpleTitleCaseMapping:0xE0180 - }, - { code:0xE0181 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0181 - ,simpleLowerCaseMapping:0xE0181 - ,simpleTitleCaseMapping:0xE0181 - }, - { code:0xE0182 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0182 - ,simpleLowerCaseMapping:0xE0182 - ,simpleTitleCaseMapping:0xE0182 - }, - { code:0xE0183 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0183 - ,simpleLowerCaseMapping:0xE0183 - ,simpleTitleCaseMapping:0xE0183 - }, - { code:0xE0184 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0184 - ,simpleLowerCaseMapping:0xE0184 - ,simpleTitleCaseMapping:0xE0184 - }, - { code:0xE0185 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0185 - ,simpleLowerCaseMapping:0xE0185 - ,simpleTitleCaseMapping:0xE0185 - }, - { code:0xE0186 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0186 - ,simpleLowerCaseMapping:0xE0186 - ,simpleTitleCaseMapping:0xE0186 - }, - { code:0xE0187 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0187 - ,simpleLowerCaseMapping:0xE0187 - ,simpleTitleCaseMapping:0xE0187 - }, - { code:0xE0188 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0188 - ,simpleLowerCaseMapping:0xE0188 - ,simpleTitleCaseMapping:0xE0188 - }, - { code:0xE0189 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0189 - ,simpleLowerCaseMapping:0xE0189 - ,simpleTitleCaseMapping:0xE0189 - }, - { code:0xE018A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018A - ,simpleLowerCaseMapping:0xE018A - ,simpleTitleCaseMapping:0xE018A - }, - { code:0xE018B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018B - ,simpleLowerCaseMapping:0xE018B - ,simpleTitleCaseMapping:0xE018B - }, - { code:0xE018C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018C - ,simpleLowerCaseMapping:0xE018C - ,simpleTitleCaseMapping:0xE018C - }, - { code:0xE018D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018D - ,simpleLowerCaseMapping:0xE018D - ,simpleTitleCaseMapping:0xE018D - }, - { code:0xE018E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018E - ,simpleLowerCaseMapping:0xE018E - ,simpleTitleCaseMapping:0xE018E - }, - { code:0xE018F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE018F - ,simpleLowerCaseMapping:0xE018F - ,simpleTitleCaseMapping:0xE018F - }, - { code:0xE0190 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0190 - ,simpleLowerCaseMapping:0xE0190 - ,simpleTitleCaseMapping:0xE0190 - }, - { code:0xE0191 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0191 - ,simpleLowerCaseMapping:0xE0191 - ,simpleTitleCaseMapping:0xE0191 - }, - { code:0xE0192 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0192 - ,simpleLowerCaseMapping:0xE0192 - ,simpleTitleCaseMapping:0xE0192 - }, - { code:0xE0193 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0193 - ,simpleLowerCaseMapping:0xE0193 - ,simpleTitleCaseMapping:0xE0193 - }, - { code:0xE0194 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0194 - ,simpleLowerCaseMapping:0xE0194 - ,simpleTitleCaseMapping:0xE0194 - }, - { code:0xE0195 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0195 - ,simpleLowerCaseMapping:0xE0195 - ,simpleTitleCaseMapping:0xE0195 - }, - { code:0xE0196 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0196 - ,simpleLowerCaseMapping:0xE0196 - ,simpleTitleCaseMapping:0xE0196 - }, - { code:0xE0197 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0197 - ,simpleLowerCaseMapping:0xE0197 - ,simpleTitleCaseMapping:0xE0197 - }, - { code:0xE0198 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0198 - ,simpleLowerCaseMapping:0xE0198 - ,simpleTitleCaseMapping:0xE0198 - }, - { code:0xE0199 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE0199 - ,simpleLowerCaseMapping:0xE0199 - ,simpleTitleCaseMapping:0xE0199 - }, - { code:0xE019A - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019A - ,simpleLowerCaseMapping:0xE019A - ,simpleTitleCaseMapping:0xE019A - }, - { code:0xE019B - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019B - ,simpleLowerCaseMapping:0xE019B - ,simpleTitleCaseMapping:0xE019B - }, - { code:0xE019C - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019C - ,simpleLowerCaseMapping:0xE019C - ,simpleTitleCaseMapping:0xE019C - }, - { code:0xE019D - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019D - ,simpleLowerCaseMapping:0xE019D - ,simpleTitleCaseMapping:0xE019D - }, - { code:0xE019E - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019E - ,simpleLowerCaseMapping:0xE019E - ,simpleTitleCaseMapping:0xE019E - }, - { code:0xE019F - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE019F - ,simpleLowerCaseMapping:0xE019F - ,simpleTitleCaseMapping:0xE019F - }, - { code:0xE01A0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A0 - ,simpleLowerCaseMapping:0xE01A0 - ,simpleTitleCaseMapping:0xE01A0 - }, - { code:0xE01A1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A1 - ,simpleLowerCaseMapping:0xE01A1 - ,simpleTitleCaseMapping:0xE01A1 - }, - { code:0xE01A2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A2 - ,simpleLowerCaseMapping:0xE01A2 - ,simpleTitleCaseMapping:0xE01A2 - }, - { code:0xE01A3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A3 - ,simpleLowerCaseMapping:0xE01A3 - ,simpleTitleCaseMapping:0xE01A3 - }, - { code:0xE01A4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A4 - ,simpleLowerCaseMapping:0xE01A4 - ,simpleTitleCaseMapping:0xE01A4 - }, - { code:0xE01A5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A5 - ,simpleLowerCaseMapping:0xE01A5 - ,simpleTitleCaseMapping:0xE01A5 - }, - { code:0xE01A6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A6 - ,simpleLowerCaseMapping:0xE01A6 - ,simpleTitleCaseMapping:0xE01A6 - }, - { code:0xE01A7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A7 - ,simpleLowerCaseMapping:0xE01A7 - ,simpleTitleCaseMapping:0xE01A7 - }, - { code:0xE01A8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A8 - ,simpleLowerCaseMapping:0xE01A8 - ,simpleTitleCaseMapping:0xE01A8 - }, - { code:0xE01A9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01A9 - ,simpleLowerCaseMapping:0xE01A9 - ,simpleTitleCaseMapping:0xE01A9 - }, - { code:0xE01AA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AA - ,simpleLowerCaseMapping:0xE01AA - ,simpleTitleCaseMapping:0xE01AA - }, - { code:0xE01AB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AB - ,simpleLowerCaseMapping:0xE01AB - ,simpleTitleCaseMapping:0xE01AB - }, - { code:0xE01AC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AC - ,simpleLowerCaseMapping:0xE01AC - ,simpleTitleCaseMapping:0xE01AC - }, - { code:0xE01AD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AD - ,simpleLowerCaseMapping:0xE01AD - ,simpleTitleCaseMapping:0xE01AD - }, - { code:0xE01AE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AE - ,simpleLowerCaseMapping:0xE01AE - ,simpleTitleCaseMapping:0xE01AE - }, - { code:0xE01AF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01AF - ,simpleLowerCaseMapping:0xE01AF - ,simpleTitleCaseMapping:0xE01AF - }, - { code:0xE01B0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B0 - ,simpleLowerCaseMapping:0xE01B0 - ,simpleTitleCaseMapping:0xE01B0 - }, - { code:0xE01B1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B1 - ,simpleLowerCaseMapping:0xE01B1 - ,simpleTitleCaseMapping:0xE01B1 - }, - { code:0xE01B2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B2 - ,simpleLowerCaseMapping:0xE01B2 - ,simpleTitleCaseMapping:0xE01B2 - }, - { code:0xE01B3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B3 - ,simpleLowerCaseMapping:0xE01B3 - ,simpleTitleCaseMapping:0xE01B3 - }, - { code:0xE01B4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B4 - ,simpleLowerCaseMapping:0xE01B4 - ,simpleTitleCaseMapping:0xE01B4 - }, - { code:0xE01B5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B5 - ,simpleLowerCaseMapping:0xE01B5 - ,simpleTitleCaseMapping:0xE01B5 - }, - { code:0xE01B6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B6 - ,simpleLowerCaseMapping:0xE01B6 - ,simpleTitleCaseMapping:0xE01B6 - }, - { code:0xE01B7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B7 - ,simpleLowerCaseMapping:0xE01B7 - ,simpleTitleCaseMapping:0xE01B7 - }, - { code:0xE01B8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B8 - ,simpleLowerCaseMapping:0xE01B8 - ,simpleTitleCaseMapping:0xE01B8 - }, - { code:0xE01B9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01B9 - ,simpleLowerCaseMapping:0xE01B9 - ,simpleTitleCaseMapping:0xE01B9 - }, - { code:0xE01BA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BA - ,simpleLowerCaseMapping:0xE01BA - ,simpleTitleCaseMapping:0xE01BA - }, - { code:0xE01BB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BB - ,simpleLowerCaseMapping:0xE01BB - ,simpleTitleCaseMapping:0xE01BB - }, - { code:0xE01BC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BC - ,simpleLowerCaseMapping:0xE01BC - ,simpleTitleCaseMapping:0xE01BC - }, - { code:0xE01BD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BD - ,simpleLowerCaseMapping:0xE01BD - ,simpleTitleCaseMapping:0xE01BD - }, - { code:0xE01BE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BE - ,simpleLowerCaseMapping:0xE01BE - ,simpleTitleCaseMapping:0xE01BE - }, - { code:0xE01BF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01BF - ,simpleLowerCaseMapping:0xE01BF - ,simpleTitleCaseMapping:0xE01BF - }, - { code:0xE01C0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C0 - ,simpleLowerCaseMapping:0xE01C0 - ,simpleTitleCaseMapping:0xE01C0 - }, - { code:0xE01C1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C1 - ,simpleLowerCaseMapping:0xE01C1 - ,simpleTitleCaseMapping:0xE01C1 - }, - { code:0xE01C2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C2 - ,simpleLowerCaseMapping:0xE01C2 - ,simpleTitleCaseMapping:0xE01C2 - }, - { code:0xE01C3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C3 - ,simpleLowerCaseMapping:0xE01C3 - ,simpleTitleCaseMapping:0xE01C3 - }, - { code:0xE01C4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C4 - ,simpleLowerCaseMapping:0xE01C4 - ,simpleTitleCaseMapping:0xE01C4 - }, - { code:0xE01C5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C5 - ,simpleLowerCaseMapping:0xE01C5 - ,simpleTitleCaseMapping:0xE01C5 - }, - { code:0xE01C6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C6 - ,simpleLowerCaseMapping:0xE01C6 - ,simpleTitleCaseMapping:0xE01C6 - }, - { code:0xE01C7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C7 - ,simpleLowerCaseMapping:0xE01C7 - ,simpleTitleCaseMapping:0xE01C7 - }, - { code:0xE01C8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C8 - ,simpleLowerCaseMapping:0xE01C8 - ,simpleTitleCaseMapping:0xE01C8 - }, - { code:0xE01C9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01C9 - ,simpleLowerCaseMapping:0xE01C9 - ,simpleTitleCaseMapping:0xE01C9 - }, - { code:0xE01CA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CA - ,simpleLowerCaseMapping:0xE01CA - ,simpleTitleCaseMapping:0xE01CA - }, - { code:0xE01CB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CB - ,simpleLowerCaseMapping:0xE01CB - ,simpleTitleCaseMapping:0xE01CB - }, - { code:0xE01CC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CC - ,simpleLowerCaseMapping:0xE01CC - ,simpleTitleCaseMapping:0xE01CC - }, - { code:0xE01CD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CD - ,simpleLowerCaseMapping:0xE01CD - ,simpleTitleCaseMapping:0xE01CD - }, - { code:0xE01CE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CE - ,simpleLowerCaseMapping:0xE01CE - ,simpleTitleCaseMapping:0xE01CE - }, - { code:0xE01CF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01CF - ,simpleLowerCaseMapping:0xE01CF - ,simpleTitleCaseMapping:0xE01CF - }, - { code:0xE01D0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D0 - ,simpleLowerCaseMapping:0xE01D0 - ,simpleTitleCaseMapping:0xE01D0 - }, - { code:0xE01D1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D1 - ,simpleLowerCaseMapping:0xE01D1 - ,simpleTitleCaseMapping:0xE01D1 - }, - { code:0xE01D2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D2 - ,simpleLowerCaseMapping:0xE01D2 - ,simpleTitleCaseMapping:0xE01D2 - }, - { code:0xE01D3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D3 - ,simpleLowerCaseMapping:0xE01D3 - ,simpleTitleCaseMapping:0xE01D3 - }, - { code:0xE01D4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D4 - ,simpleLowerCaseMapping:0xE01D4 - ,simpleTitleCaseMapping:0xE01D4 - }, - { code:0xE01D5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D5 - ,simpleLowerCaseMapping:0xE01D5 - ,simpleTitleCaseMapping:0xE01D5 - }, - { code:0xE01D6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D6 - ,simpleLowerCaseMapping:0xE01D6 - ,simpleTitleCaseMapping:0xE01D6 - }, - { code:0xE01D7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D7 - ,simpleLowerCaseMapping:0xE01D7 - ,simpleTitleCaseMapping:0xE01D7 - }, - { code:0xE01D8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D8 - ,simpleLowerCaseMapping:0xE01D8 - ,simpleTitleCaseMapping:0xE01D8 - }, - { code:0xE01D9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01D9 - ,simpleLowerCaseMapping:0xE01D9 - ,simpleTitleCaseMapping:0xE01D9 - }, - { code:0xE01DA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DA - ,simpleLowerCaseMapping:0xE01DA - ,simpleTitleCaseMapping:0xE01DA - }, - { code:0xE01DB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DB - ,simpleLowerCaseMapping:0xE01DB - ,simpleTitleCaseMapping:0xE01DB - }, - { code:0xE01DC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DC - ,simpleLowerCaseMapping:0xE01DC - ,simpleTitleCaseMapping:0xE01DC - }, - { code:0xE01DD - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DD - ,simpleLowerCaseMapping:0xE01DD - ,simpleTitleCaseMapping:0xE01DD - }, - { code:0xE01DE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DE - ,simpleLowerCaseMapping:0xE01DE - ,simpleTitleCaseMapping:0xE01DE - }, - { code:0xE01DF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01DF - ,simpleLowerCaseMapping:0xE01DF - ,simpleTitleCaseMapping:0xE01DF - }, - { code:0xE01E0 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E0 - ,simpleLowerCaseMapping:0xE01E0 - ,simpleTitleCaseMapping:0xE01E0 - }, - { code:0xE01E1 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E1 - ,simpleLowerCaseMapping:0xE01E1 - ,simpleTitleCaseMapping:0xE01E1 - }, - { code:0xE01E2 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E2 - ,simpleLowerCaseMapping:0xE01E2 - ,simpleTitleCaseMapping:0xE01E2 - }, - { code:0xE01E3 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E3 - ,simpleLowerCaseMapping:0xE01E3 - ,simpleTitleCaseMapping:0xE01E3 - }, - { code:0xE01E4 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E4 - ,simpleLowerCaseMapping:0xE01E4 - ,simpleTitleCaseMapping:0xE01E4 - }, - { code:0xE01E5 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E5 - ,simpleLowerCaseMapping:0xE01E5 - ,simpleTitleCaseMapping:0xE01E5 - }, - { code:0xE01E6 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E6 - ,simpleLowerCaseMapping:0xE01E6 - ,simpleTitleCaseMapping:0xE01E6 - }, - { code:0xE01E7 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E7 - ,simpleLowerCaseMapping:0xE01E7 - ,simpleTitleCaseMapping:0xE01E7 - }, - { code:0xE01E8 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E8 - ,simpleLowerCaseMapping:0xE01E8 - ,simpleTitleCaseMapping:0xE01E8 - }, - { code:0xE01E9 - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01E9 - ,simpleLowerCaseMapping:0xE01E9 - ,simpleTitleCaseMapping:0xE01E9 - }, - { code:0xE01EA - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01EA - ,simpleLowerCaseMapping:0xE01EA - ,simpleTitleCaseMapping:0xE01EA - }, - { code:0xE01EB - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01EB - ,simpleLowerCaseMapping:0xE01EB - ,simpleTitleCaseMapping:0xE01EB - }, - { code:0xE01EC - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01EC - ,simpleLowerCaseMapping:0xE01EC - ,simpleTitleCaseMapping:0xE01EC - }, - { code:0xE01ED - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01ED - ,simpleLowerCaseMapping:0xE01ED - ,simpleTitleCaseMapping:0xE01ED - }, - { code:0xE01EE - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01EE - ,simpleLowerCaseMapping:0xE01EE - ,simpleTitleCaseMapping:0xE01EE - }, - { code:0xE01EF - ,generalCategory:UnicodeData.GeneralCategory.Mn - ,simpleUpperCaseMapping:0xE01EF - ,simpleLowerCaseMapping:0xE01EF - ,simpleTitleCaseMapping:0xE01EF - }, - { code:0xF0000 - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0xF0000 - ,simpleLowerCaseMapping:0xF0000 - ,simpleTitleCaseMapping:0xF0000 - }, - { code:0xFFFFD - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0xFFFFD - ,simpleLowerCaseMapping:0xFFFFD - ,simpleTitleCaseMapping:0xFFFFD - }, - { code:0x100000 - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0x100000 - ,simpleLowerCaseMapping:0x100000 - ,simpleTitleCaseMapping:0x100000 - }, - { code:0x10FFFD - ,generalCategory:UnicodeData.GeneralCategory.Co - ,simpleUpperCaseMapping:0x10FFFD - ,simpleLowerCaseMapping:0x10FFFD - ,simpleTitleCaseMapping:0x10FFFD - }, - -]; - SpecialCaseData internalSpecialCaseData[] = [ - { code:0x00DF - ,upperCaseMapping:[ 0x0053, 0x0053 ] - ,lowerCaseMapping:[ 0x00DF ] - ,titleCaseMapping:[ 0x0053, 0x0073 ] - - }, - { code:0x0130 - ,upperCaseMapping:[ 0x0130 ] - ,lowerCaseMapping:[ 0x0069, 0x0307 ] - ,titleCaseMapping:[ 0x0130 ] - - }, - { code:0x0149 - ,upperCaseMapping:[ 0x02BC, 0x004E ] - ,lowerCaseMapping:[ 0x0149 ] - ,titleCaseMapping:[ 0x02BC, 0x004E ] - - }, - { code:0x01F0 - ,upperCaseMapping:[ 0x004A, 0x030C ] - ,lowerCaseMapping:[ 0x01F0 ] - ,titleCaseMapping:[ 0x004A, 0x030C ] - - }, - { code:0x0390 - ,upperCaseMapping:[ 0x0399, 0x0308, 0x0301 ] - ,lowerCaseMapping:[ 0x0390 ] - ,titleCaseMapping:[ 0x0399, 0x0308, 0x0301 ] - - }, - { code:0x03B0 - ,upperCaseMapping:[ 0x03A5, 0x0308, 0x0301 ] - ,lowerCaseMapping:[ 0x03B0 ] - ,titleCaseMapping:[ 0x03A5, 0x0308, 0x0301 ] - - }, - { code:0x0587 - ,upperCaseMapping:[ 0x0535, 0x0552 ] - ,lowerCaseMapping:[ 0x0587 ] - ,titleCaseMapping:[ 0x0535, 0x0582 ] - - }, - { code:0x1E96 - ,upperCaseMapping:[ 0x0048, 0x0331 ] - ,lowerCaseMapping:[ 0x1E96 ] - ,titleCaseMapping:[ 0x0048, 0x0331 ] - - }, - { code:0x1E97 - ,upperCaseMapping:[ 0x0054, 0x0308 ] - ,lowerCaseMapping:[ 0x1E97 ] - ,titleCaseMapping:[ 0x0054, 0x0308 ] - - }, - { code:0x1E98 - ,upperCaseMapping:[ 0x0057, 0x030A ] - ,lowerCaseMapping:[ 0x1E98 ] - ,titleCaseMapping:[ 0x0057, 0x030A ] - - }, - { code:0x1E99 - ,upperCaseMapping:[ 0x0059, 0x030A ] - ,lowerCaseMapping:[ 0x1E99 ] - ,titleCaseMapping:[ 0x0059, 0x030A ] - - }, - { code:0x1E9A - ,upperCaseMapping:[ 0x0041, 0x02BE ] - ,lowerCaseMapping:[ 0x1E9A ] - ,titleCaseMapping:[ 0x0041, 0x02BE ] - - }, - { code:0x1F50 - ,upperCaseMapping:[ 0x03A5, 0x0313 ] - ,lowerCaseMapping:[ 0x1F50 ] - ,titleCaseMapping:[ 0x03A5, 0x0313 ] - - }, - { code:0x1F52 - ,upperCaseMapping:[ 0x03A5, 0x0313, 0x0300 ] - ,lowerCaseMapping:[ 0x1F52 ] - ,titleCaseMapping:[ 0x03A5, 0x0313, 0x0300 ] - - }, - { code:0x1F54 - ,upperCaseMapping:[ 0x03A5, 0x0313, 0x0301 ] - ,lowerCaseMapping:[ 0x1F54 ] - ,titleCaseMapping:[ 0x03A5, 0x0313, 0x0301 ] - - }, - { code:0x1F56 - ,upperCaseMapping:[ 0x03A5, 0x0313, 0x0342 ] - ,lowerCaseMapping:[ 0x1F56 ] - ,titleCaseMapping:[ 0x03A5, 0x0313, 0x0342 ] - - }, - { code:0x1F80 - ,upperCaseMapping:[ 0x1F08, 0x0399 ] - ,lowerCaseMapping:[ 0x1F80 ] - ,titleCaseMapping:[ 0x1F88 ] - - }, - { code:0x1F81 - ,upperCaseMapping:[ 0x1F09, 0x0399 ] - ,lowerCaseMapping:[ 0x1F81 ] - ,titleCaseMapping:[ 0x1F89 ] - - }, - { code:0x1F82 - ,upperCaseMapping:[ 0x1F0A, 0x0399 ] - ,lowerCaseMapping:[ 0x1F82 ] - ,titleCaseMapping:[ 0x1F8A ] - - }, - { code:0x1F83 - ,upperCaseMapping:[ 0x1F0B, 0x0399 ] - ,lowerCaseMapping:[ 0x1F83 ] - ,titleCaseMapping:[ 0x1F8B ] - - }, - { code:0x1F84 - ,upperCaseMapping:[ 0x1F0C, 0x0399 ] - ,lowerCaseMapping:[ 0x1F84 ] - ,titleCaseMapping:[ 0x1F8C ] - - }, - { code:0x1F85 - ,upperCaseMapping:[ 0x1F0D, 0x0399 ] - ,lowerCaseMapping:[ 0x1F85 ] - ,titleCaseMapping:[ 0x1F8D ] - - }, - { code:0x1F86 - ,upperCaseMapping:[ 0x1F0E, 0x0399 ] - ,lowerCaseMapping:[ 0x1F86 ] - ,titleCaseMapping:[ 0x1F8E ] - - }, - { code:0x1F87 - ,upperCaseMapping:[ 0x1F0F, 0x0399 ] - ,lowerCaseMapping:[ 0x1F87 ] - ,titleCaseMapping:[ 0x1F8F ] - - }, - { code:0x1F88 - ,upperCaseMapping:[ 0x1F08, 0x0399 ] - ,lowerCaseMapping:[ 0x1F80 ] - ,titleCaseMapping:[ 0x1F88 ] - - }, - { code:0x1F89 - ,upperCaseMapping:[ 0x1F09, 0x0399 ] - ,lowerCaseMapping:[ 0x1F81 ] - ,titleCaseMapping:[ 0x1F89 ] - - }, - { code:0x1F8A - ,upperCaseMapping:[ 0x1F0A, 0x0399 ] - ,lowerCaseMapping:[ 0x1F82 ] - ,titleCaseMapping:[ 0x1F8A ] - - }, - { code:0x1F8B - ,upperCaseMapping:[ 0x1F0B, 0x0399 ] - ,lowerCaseMapping:[ 0x1F83 ] - ,titleCaseMapping:[ 0x1F8B ] - - }, - { code:0x1F8C - ,upperCaseMapping:[ 0x1F0C, 0x0399 ] - ,lowerCaseMapping:[ 0x1F84 ] - ,titleCaseMapping:[ 0x1F8C ] - - }, - { code:0x1F8D - ,upperCaseMapping:[ 0x1F0D, 0x0399 ] - ,lowerCaseMapping:[ 0x1F85 ] - ,titleCaseMapping:[ 0x1F8D ] - - }, - { code:0x1F8E - ,upperCaseMapping:[ 0x1F0E, 0x0399 ] - ,lowerCaseMapping:[ 0x1F86 ] - ,titleCaseMapping:[ 0x1F8E ] - - }, - { code:0x1F8F - ,upperCaseMapping:[ 0x1F0F, 0x0399 ] - ,lowerCaseMapping:[ 0x1F87 ] - ,titleCaseMapping:[ 0x1F8F ] - - }, - { code:0x1F90 - ,upperCaseMapping:[ 0x1F28, 0x0399 ] - ,lowerCaseMapping:[ 0x1F90 ] - ,titleCaseMapping:[ 0x1F98 ] - - }, - { code:0x1F91 - ,upperCaseMapping:[ 0x1F29, 0x0399 ] - ,lowerCaseMapping:[ 0x1F91 ] - ,titleCaseMapping:[ 0x1F99 ] - - }, - { code:0x1F92 - ,upperCaseMapping:[ 0x1F2A, 0x0399 ] - ,lowerCaseMapping:[ 0x1F92 ] - ,titleCaseMapping:[ 0x1F9A ] - - }, - { code:0x1F93 - ,upperCaseMapping:[ 0x1F2B, 0x0399 ] - ,lowerCaseMapping:[ 0x1F93 ] - ,titleCaseMapping:[ 0x1F9B ] - - }, - { code:0x1F94 - ,upperCaseMapping:[ 0x1F2C, 0x0399 ] - ,lowerCaseMapping:[ 0x1F94 ] - ,titleCaseMapping:[ 0x1F9C ] - - }, - { code:0x1F95 - ,upperCaseMapping:[ 0x1F2D, 0x0399 ] - ,lowerCaseMapping:[ 0x1F95 ] - ,titleCaseMapping:[ 0x1F9D ] - - }, - { code:0x1F96 - ,upperCaseMapping:[ 0x1F2E, 0x0399 ] - ,lowerCaseMapping:[ 0x1F96 ] - ,titleCaseMapping:[ 0x1F9E ] - - }, - { code:0x1F97 - ,upperCaseMapping:[ 0x1F2F, 0x0399 ] - ,lowerCaseMapping:[ 0x1F97 ] - ,titleCaseMapping:[ 0x1F9F ] - - }, - { code:0x1F98 - ,upperCaseMapping:[ 0x1F28, 0x0399 ] - ,lowerCaseMapping:[ 0x1F90 ] - ,titleCaseMapping:[ 0x1F98 ] - - }, - { code:0x1F99 - ,upperCaseMapping:[ 0x1F29, 0x0399 ] - ,lowerCaseMapping:[ 0x1F91 ] - ,titleCaseMapping:[ 0x1F99 ] - - }, - { code:0x1F9A - ,upperCaseMapping:[ 0x1F2A, 0x0399 ] - ,lowerCaseMapping:[ 0x1F92 ] - ,titleCaseMapping:[ 0x1F9A ] - - }, - { code:0x1F9B - ,upperCaseMapping:[ 0x1F2B, 0x0399 ] - ,lowerCaseMapping:[ 0x1F93 ] - ,titleCaseMapping:[ 0x1F9B ] - - }, - { code:0x1F9C - ,upperCaseMapping:[ 0x1F2C, 0x0399 ] - ,lowerCaseMapping:[ 0x1F94 ] - ,titleCaseMapping:[ 0x1F9C ] - - }, - { code:0x1F9D - ,upperCaseMapping:[ 0x1F2D, 0x0399 ] - ,lowerCaseMapping:[ 0x1F95 ] - ,titleCaseMapping:[ 0x1F9D ] - - }, - { code:0x1F9E - ,upperCaseMapping:[ 0x1F2E, 0x0399 ] - ,lowerCaseMapping:[ 0x1F96 ] - ,titleCaseMapping:[ 0x1F9E ] - - }, - { code:0x1F9F - ,upperCaseMapping:[ 0x1F2F, 0x0399 ] - ,lowerCaseMapping:[ 0x1F97 ] - ,titleCaseMapping:[ 0x1F9F ] - - }, - { code:0x1FA0 - ,upperCaseMapping:[ 0x1F68, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA0 ] - ,titleCaseMapping:[ 0x1FA8 ] - - }, - { code:0x1FA1 - ,upperCaseMapping:[ 0x1F69, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA1 ] - ,titleCaseMapping:[ 0x1FA9 ] - - }, - { code:0x1FA2 - ,upperCaseMapping:[ 0x1F6A, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA2 ] - ,titleCaseMapping:[ 0x1FAA ] - - }, - { code:0x1FA3 - ,upperCaseMapping:[ 0x1F6B, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA3 ] - ,titleCaseMapping:[ 0x1FAB ] - - }, - { code:0x1FA4 - ,upperCaseMapping:[ 0x1F6C, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA4 ] - ,titleCaseMapping:[ 0x1FAC ] - - }, - { code:0x1FA5 - ,upperCaseMapping:[ 0x1F6D, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA5 ] - ,titleCaseMapping:[ 0x1FAD ] - - }, - { code:0x1FA6 - ,upperCaseMapping:[ 0x1F6E, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA6 ] - ,titleCaseMapping:[ 0x1FAE ] - - }, - { code:0x1FA7 - ,upperCaseMapping:[ 0x1F6F, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA7 ] - ,titleCaseMapping:[ 0x1FAF ] - - }, - { code:0x1FA8 - ,upperCaseMapping:[ 0x1F68, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA0 ] - ,titleCaseMapping:[ 0x1FA8 ] - - }, - { code:0x1FA9 - ,upperCaseMapping:[ 0x1F69, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA1 ] - ,titleCaseMapping:[ 0x1FA9 ] - - }, - { code:0x1FAA - ,upperCaseMapping:[ 0x1F6A, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA2 ] - ,titleCaseMapping:[ 0x1FAA ] - - }, - { code:0x1FAB - ,upperCaseMapping:[ 0x1F6B, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA3 ] - ,titleCaseMapping:[ 0x1FAB ] - - }, - { code:0x1FAC - ,upperCaseMapping:[ 0x1F6C, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA4 ] - ,titleCaseMapping:[ 0x1FAC ] - - }, - { code:0x1FAD - ,upperCaseMapping:[ 0x1F6D, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA5 ] - ,titleCaseMapping:[ 0x1FAD ] - - }, - { code:0x1FAE - ,upperCaseMapping:[ 0x1F6E, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA6 ] - ,titleCaseMapping:[ 0x1FAE ] - - }, - { code:0x1FAF - ,upperCaseMapping:[ 0x1F6F, 0x0399 ] - ,lowerCaseMapping:[ 0x1FA7 ] - ,titleCaseMapping:[ 0x1FAF ] - - }, - { code:0x1FB2 - ,upperCaseMapping:[ 0x1FBA, 0x0399 ] - ,lowerCaseMapping:[ 0x1FB2 ] - ,titleCaseMapping:[ 0x1FBA, 0x0345 ] - - }, - { code:0x1FB3 - ,upperCaseMapping:[ 0x0391, 0x0399 ] - ,lowerCaseMapping:[ 0x1FB3 ] - ,titleCaseMapping:[ 0x1FBC ] - - }, - { code:0x1FB4 - ,upperCaseMapping:[ 0x0386, 0x0399 ] - ,lowerCaseMapping:[ 0x1FB4 ] - ,titleCaseMapping:[ 0x0386, 0x0345 ] - - }, - { code:0x1FB6 - ,upperCaseMapping:[ 0x0391, 0x0342 ] - ,lowerCaseMapping:[ 0x1FB6 ] - ,titleCaseMapping:[ 0x0391, 0x0342 ] - - }, - { code:0x1FB7 - ,upperCaseMapping:[ 0x0391, 0x0342, 0x0399 ] - ,lowerCaseMapping:[ 0x1FB7 ] - ,titleCaseMapping:[ 0x0391, 0x0342, 0x0345 ] - - }, - { code:0x1FBC - ,upperCaseMapping:[ 0x0391, 0x0399 ] - ,lowerCaseMapping:[ 0x1FB3 ] - ,titleCaseMapping:[ 0x1FBC ] - - }, - { code:0x1FC2 - ,upperCaseMapping:[ 0x1FCA, 0x0399 ] - ,lowerCaseMapping:[ 0x1FC2 ] - ,titleCaseMapping:[ 0x1FCA, 0x0345 ] - - }, - { code:0x1FC3 - ,upperCaseMapping:[ 0x0397, 0x0399 ] - ,lowerCaseMapping:[ 0x1FC3 ] - ,titleCaseMapping:[ 0x1FCC ] - - }, - { code:0x1FC4 - ,upperCaseMapping:[ 0x0389, 0x0399 ] - ,lowerCaseMapping:[ 0x1FC4 ] - ,titleCaseMapping:[ 0x0389, 0x0345 ] - - }, - { code:0x1FC6 - ,upperCaseMapping:[ 0x0397, 0x0342 ] - ,lowerCaseMapping:[ 0x1FC6 ] - ,titleCaseMapping:[ 0x0397, 0x0342 ] - - }, - { code:0x1FC7 - ,upperCaseMapping:[ 0x0397, 0x0342, 0x0399 ] - ,lowerCaseMapping:[ 0x1FC7 ] - ,titleCaseMapping:[ 0x0397, 0x0342, 0x0345 ] - - }, - { code:0x1FCC - ,upperCaseMapping:[ 0x0397, 0x0399 ] - ,lowerCaseMapping:[ 0x1FC3 ] - ,titleCaseMapping:[ 0x1FCC ] - - }, - { code:0x1FD2 - ,upperCaseMapping:[ 0x0399, 0x0308, 0x0300 ] - ,lowerCaseMapping:[ 0x1FD2 ] - ,titleCaseMapping:[ 0x0399, 0x0308, 0x0300 ] - - }, - { code:0x1FD3 - ,upperCaseMapping:[ 0x0399, 0x0308, 0x0301 ] - ,lowerCaseMapping:[ 0x1FD3 ] - ,titleCaseMapping:[ 0x0399, 0x0308, 0x0301 ] - - }, - { code:0x1FD6 - ,upperCaseMapping:[ 0x0399, 0x0342 ] - ,lowerCaseMapping:[ 0x1FD6 ] - ,titleCaseMapping:[ 0x0399, 0x0342 ] - - }, - { code:0x1FD7 - ,upperCaseMapping:[ 0x0399, 0x0308, 0x0342 ] - ,lowerCaseMapping:[ 0x1FD7 ] - ,titleCaseMapping:[ 0x0399, 0x0308, 0x0342 ] - - }, - { code:0x1FE2 - ,upperCaseMapping:[ 0x03A5, 0x0308, 0x0300 ] - ,lowerCaseMapping:[ 0x1FE2 ] - ,titleCaseMapping:[ 0x03A5, 0x0308, 0x0300 ] - - }, - { code:0x1FE3 - ,upperCaseMapping:[ 0x03A5, 0x0308, 0x0301 ] - ,lowerCaseMapping:[ 0x1FE3 ] - ,titleCaseMapping:[ 0x03A5, 0x0308, 0x0301 ] - - }, - { code:0x1FE4 - ,upperCaseMapping:[ 0x03A1, 0x0313 ] - ,lowerCaseMapping:[ 0x1FE4 ] - ,titleCaseMapping:[ 0x03A1, 0x0313 ] - - }, - { code:0x1FE6 - ,upperCaseMapping:[ 0x03A5, 0x0342 ] - ,lowerCaseMapping:[ 0x1FE6 ] - ,titleCaseMapping:[ 0x03A5, 0x0342 ] - - }, - { code:0x1FE7 - ,upperCaseMapping:[ 0x03A5, 0x0308, 0x0342 ] - ,lowerCaseMapping:[ 0x1FE7 ] - ,titleCaseMapping:[ 0x03A5, 0x0308, 0x0342 ] - - }, - { code:0x1FF2 - ,upperCaseMapping:[ 0x1FFA, 0x0399 ] - ,lowerCaseMapping:[ 0x1FF2 ] - ,titleCaseMapping:[ 0x1FFA, 0x0345 ] - - }, - { code:0x1FF3 - ,upperCaseMapping:[ 0x03A9, 0x0399 ] - ,lowerCaseMapping:[ 0x1FF3 ] - ,titleCaseMapping:[ 0x1FFC ] - - }, - { code:0x1FF4 - ,upperCaseMapping:[ 0x038F, 0x0399 ] - ,lowerCaseMapping:[ 0x1FF4 ] - ,titleCaseMapping:[ 0x038F, 0x0345 ] - - }, - { code:0x1FF6 - ,upperCaseMapping:[ 0x03A9, 0x0342 ] - ,lowerCaseMapping:[ 0x1FF6 ] - ,titleCaseMapping:[ 0x03A9, 0x0342 ] - - }, - { code:0x1FF7 - ,upperCaseMapping:[ 0x03A9, 0x0342, 0x0399 ] - ,lowerCaseMapping:[ 0x1FF7 ] - ,titleCaseMapping:[ 0x03A9, 0x0342, 0x0345 ] - - }, - { code:0x1FFC - ,upperCaseMapping:[ 0x03A9, 0x0399 ] - ,lowerCaseMapping:[ 0x1FF3 ] - ,titleCaseMapping:[ 0x1FFC ] - - }, - { code:0xFB00 - ,upperCaseMapping:[ 0x0046, 0x0046 ] - ,lowerCaseMapping:[ 0xFB00 ] - ,titleCaseMapping:[ 0x0046, 0x0066 ] - - }, - { code:0xFB01 - ,upperCaseMapping:[ 0x0046, 0x0049 ] - ,lowerCaseMapping:[ 0xFB01 ] - ,titleCaseMapping:[ 0x0046, 0x0069 ] - - }, - { code:0xFB02 - ,upperCaseMapping:[ 0x0046, 0x004C ] - ,lowerCaseMapping:[ 0xFB02 ] - ,titleCaseMapping:[ 0x0046, 0x006C ] - - }, - { code:0xFB03 - ,upperCaseMapping:[ 0x0046, 0x0046, 0x0049 ] - ,lowerCaseMapping:[ 0xFB03 ] - ,titleCaseMapping:[ 0x0046, 0x0066, 0x0069 ] - - }, - { code:0xFB04 - ,upperCaseMapping:[ 0x0046, 0x0046, 0x004C ] - ,lowerCaseMapping:[ 0xFB04 ] - ,titleCaseMapping:[ 0x0046, 0x0066, 0x006C ] - - }, - { code:0xFB05 - ,upperCaseMapping:[ 0x0053, 0x0054 ] - ,lowerCaseMapping:[ 0xFB05 ] - ,titleCaseMapping:[ 0x0053, 0x0074 ] - - }, - { code:0xFB06 - ,upperCaseMapping:[ 0x0053, 0x0054 ] - ,lowerCaseMapping:[ 0xFB06 ] - ,titleCaseMapping:[ 0x0053, 0x0074 ] - - }, - { code:0xFB13 - ,upperCaseMapping:[ 0x0544, 0x0546 ] - ,lowerCaseMapping:[ 0xFB13 ] - ,titleCaseMapping:[ 0x0544, 0x0576 ] - - }, - { code:0xFB14 - ,upperCaseMapping:[ 0x0544, 0x0535 ] - ,lowerCaseMapping:[ 0xFB14 ] - ,titleCaseMapping:[ 0x0544, 0x0565 ] - - }, - { code:0xFB15 - ,upperCaseMapping:[ 0x0544, 0x053B ] - ,lowerCaseMapping:[ 0xFB15 ] - ,titleCaseMapping:[ 0x0544, 0x056B ] - - }, - { code:0xFB16 - ,upperCaseMapping:[ 0x054E, 0x0546 ] - ,lowerCaseMapping:[ 0xFB16 ] - ,titleCaseMapping:[ 0x054E, 0x0576 ] - - }, - { code:0xFB17 - ,upperCaseMapping:[ 0x0544, 0x053D ] - ,lowerCaseMapping:[ 0xFB17 ] - ,titleCaseMapping:[ 0x0544, 0x056D ] - - }, - -]; - FoldingCaseData internalFoldingCaseData[] = [ - { - code:0x0041 - ,mapping: [ 0x0061 ] - }, - { - code:0x0042 - ,mapping: [ 0x0062 ] - }, - { - code:0x0043 - ,mapping: [ 0x0063 ] - }, - { - code:0x0044 - ,mapping: [ 0x0064 ] - }, - { - code:0x0045 - ,mapping: [ 0x0065 ] - }, - { - code:0x0046 - ,mapping: [ 0x0066 ] - }, - { - code:0x0047 - ,mapping: [ 0x0067 ] - }, - { - code:0x0048 - ,mapping: [ 0x0068 ] - }, - { - code:0x0049 - ,mapping: [ 0x0069 ] - }, - { - code:0x0049 - ,mapping: [ 0x0131 ] - }, - { - code:0x004A - ,mapping: [ 0x006A ] - }, - { - code:0x004B - ,mapping: [ 0x006B ] - }, - { - code:0x004C - ,mapping: [ 0x006C ] - }, - { - code:0x004D - ,mapping: [ 0x006D ] - }, - { - code:0x004E - ,mapping: [ 0x006E ] - }, - { - code:0x004F - ,mapping: [ 0x006F ] - }, - { - code:0x0050 - ,mapping: [ 0x0070 ] - }, - { - code:0x0051 - ,mapping: [ 0x0071 ] - }, - { - code:0x0052 - ,mapping: [ 0x0072 ] - }, - { - code:0x0053 - ,mapping: [ 0x0073 ] - }, - { - code:0x0054 - ,mapping: [ 0x0074 ] - }, - { - code:0x0055 - ,mapping: [ 0x0075 ] - }, - { - code:0x0056 - ,mapping: [ 0x0076 ] - }, - { - code:0x0057 - ,mapping: [ 0x0077 ] - }, - { - code:0x0058 - ,mapping: [ 0x0078 ] - }, - { - code:0x0059 - ,mapping: [ 0x0079 ] - }, - { - code:0x005A - ,mapping: [ 0x007A ] - }, - { - code:0x00B5 - ,mapping: [ 0x03BC ] - }, - { - code:0x00C0 - ,mapping: [ 0x00E0 ] - }, - { - code:0x00C1 - ,mapping: [ 0x00E1 ] - }, - { - code:0x00C2 - ,mapping: [ 0x00E2 ] - }, - { - code:0x00C3 - ,mapping: [ 0x00E3 ] - }, - { - code:0x00C4 - ,mapping: [ 0x00E4 ] - }, - { - code:0x00C5 - ,mapping: [ 0x00E5 ] - }, - { - code:0x00C6 - ,mapping: [ 0x00E6 ] - }, - { - code:0x00C7 - ,mapping: [ 0x00E7 ] - }, - { - code:0x00C8 - ,mapping: [ 0x00E8 ] - }, - { - code:0x00C9 - ,mapping: [ 0x00E9 ] - }, - { - code:0x00CA - ,mapping: [ 0x00EA ] - }, - { - code:0x00CB - ,mapping: [ 0x00EB ] - }, - { - code:0x00CC - ,mapping: [ 0x00EC ] - }, - { - code:0x00CD - ,mapping: [ 0x00ED ] - }, - { - code:0x00CE - ,mapping: [ 0x00EE ] - }, - { - code:0x00CF - ,mapping: [ 0x00EF ] - }, - { - code:0x00D0 - ,mapping: [ 0x00F0 ] - }, - { - code:0x00D1 - ,mapping: [ 0x00F1 ] - }, - { - code:0x00D2 - ,mapping: [ 0x00F2 ] - }, - { - code:0x00D3 - ,mapping: [ 0x00F3 ] - }, - { - code:0x00D4 - ,mapping: [ 0x00F4 ] - }, - { - code:0x00D5 - ,mapping: [ 0x00F5 ] - }, - { - code:0x00D6 - ,mapping: [ 0x00F6 ] - }, - { - code:0x00D8 - ,mapping: [ 0x00F8 ] - }, - { - code:0x00D9 - ,mapping: [ 0x00F9 ] - }, - { - code:0x00DA - ,mapping: [ 0x00FA ] - }, - { - code:0x00DB - ,mapping: [ 0x00FB ] - }, - { - code:0x00DC - ,mapping: [ 0x00FC ] - }, - { - code:0x00DD - ,mapping: [ 0x00FD ] - }, - { - code:0x00DE - ,mapping: [ 0x00FE ] - }, - { - code:0x00DF - ,mapping: [ 0x0073, 0x0073 ] - }, - { - code:0x0100 - ,mapping: [ 0x0101 ] - }, - { - code:0x0102 - ,mapping: [ 0x0103 ] - }, - { - code:0x0104 - ,mapping: [ 0x0105 ] - }, - { - code:0x0106 - ,mapping: [ 0x0107 ] - }, - { - code:0x0108 - ,mapping: [ 0x0109 ] - }, - { - code:0x010A - ,mapping: [ 0x010B ] - }, - { - code:0x010C - ,mapping: [ 0x010D ] - }, - { - code:0x010E - ,mapping: [ 0x010F ] - }, - { - code:0x0110 - ,mapping: [ 0x0111 ] - }, - { - code:0x0112 - ,mapping: [ 0x0113 ] - }, - { - code:0x0114 - ,mapping: [ 0x0115 ] - }, - { - code:0x0116 - ,mapping: [ 0x0117 ] - }, - { - code:0x0118 - ,mapping: [ 0x0119 ] - }, - { - code:0x011A - ,mapping: [ 0x011B ] - }, - { - code:0x011C - ,mapping: [ 0x011D ] - }, - { - code:0x011E - ,mapping: [ 0x011F ] - }, - { - code:0x0120 - ,mapping: [ 0x0121 ] - }, - { - code:0x0122 - ,mapping: [ 0x0123 ] - }, - { - code:0x0124 - ,mapping: [ 0x0125 ] - }, - { - code:0x0126 - ,mapping: [ 0x0127 ] - }, - { - code:0x0128 - ,mapping: [ 0x0129 ] - }, - { - code:0x012A - ,mapping: [ 0x012B ] - }, - { - code:0x012C - ,mapping: [ 0x012D ] - }, - { - code:0x012E - ,mapping: [ 0x012F ] - }, - { - code:0x0130 - ,mapping: [ 0x0069, 0x0307 ] - }, - { - code:0x0130 - ,mapping: [ 0x0069 ] - }, - { - code:0x0132 - ,mapping: [ 0x0133 ] - }, - { - code:0x0134 - ,mapping: [ 0x0135 ] - }, - { - code:0x0136 - ,mapping: [ 0x0137 ] - }, - { - code:0x0139 - ,mapping: [ 0x013A ] - }, - { - code:0x013B - ,mapping: [ 0x013C ] - }, - { - code:0x013D - ,mapping: [ 0x013E ] - }, - { - code:0x013F - ,mapping: [ 0x0140 ] - }, - { - code:0x0141 - ,mapping: [ 0x0142 ] - }, - { - code:0x0143 - ,mapping: [ 0x0144 ] - }, - { - code:0x0145 - ,mapping: [ 0x0146 ] - }, - { - code:0x0147 - ,mapping: [ 0x0148 ] - }, - { - code:0x0149 - ,mapping: [ 0x02BC, 0x006E ] - }, - { - code:0x014A - ,mapping: [ 0x014B ] - }, - { - code:0x014C - ,mapping: [ 0x014D ] - }, - { - code:0x014E - ,mapping: [ 0x014F ] - }, - { - code:0x0150 - ,mapping: [ 0x0151 ] - }, - { - code:0x0152 - ,mapping: [ 0x0153 ] - }, - { - code:0x0154 - ,mapping: [ 0x0155 ] - }, - { - code:0x0156 - ,mapping: [ 0x0157 ] - }, - { - code:0x0158 - ,mapping: [ 0x0159 ] - }, - { - code:0x015A - ,mapping: [ 0x015B ] - }, - { - code:0x015C - ,mapping: [ 0x015D ] - }, - { - code:0x015E - ,mapping: [ 0x015F ] - }, - { - code:0x0160 - ,mapping: [ 0x0161 ] - }, - { - code:0x0162 - ,mapping: [ 0x0163 ] - }, - { - code:0x0164 - ,mapping: [ 0x0165 ] - }, - { - code:0x0166 - ,mapping: [ 0x0167 ] - }, - { - code:0x0168 - ,mapping: [ 0x0169 ] - }, - { - code:0x016A - ,mapping: [ 0x016B ] - }, - { - code:0x016C - ,mapping: [ 0x016D ] - }, - { - code:0x016E - ,mapping: [ 0x016F ] - }, - { - code:0x0170 - ,mapping: [ 0x0171 ] - }, - { - code:0x0172 - ,mapping: [ 0x0173 ] - }, - { - code:0x0174 - ,mapping: [ 0x0175 ] - }, - { - code:0x0176 - ,mapping: [ 0x0177 ] - }, - { - code:0x0178 - ,mapping: [ 0x00FF ] - }, - { - code:0x0179 - ,mapping: [ 0x017A ] - }, - { - code:0x017B - ,mapping: [ 0x017C ] - }, - { - code:0x017D - ,mapping: [ 0x017E ] - }, - { - code:0x017F - ,mapping: [ 0x0073 ] - }, - { - code:0x0181 - ,mapping: [ 0x0253 ] - }, - { - code:0x0182 - ,mapping: [ 0x0183 ] - }, - { - code:0x0184 - ,mapping: [ 0x0185 ] - }, - { - code:0x0186 - ,mapping: [ 0x0254 ] - }, - { - code:0x0187 - ,mapping: [ 0x0188 ] - }, - { - code:0x0189 - ,mapping: [ 0x0256 ] - }, - { - code:0x018A - ,mapping: [ 0x0257 ] - }, - { - code:0x018B - ,mapping: [ 0x018C ] - }, - { - code:0x018E - ,mapping: [ 0x01DD ] - }, - { - code:0x018F - ,mapping: [ 0x0259 ] - }, - { - code:0x0190 - ,mapping: [ 0x025B ] - }, - { - code:0x0191 - ,mapping: [ 0x0192 ] - }, - { - code:0x0193 - ,mapping: [ 0x0260 ] - }, - { - code:0x0194 - ,mapping: [ 0x0263 ] - }, - { - code:0x0196 - ,mapping: [ 0x0269 ] - }, - { - code:0x0197 - ,mapping: [ 0x0268 ] - }, - { - code:0x0198 - ,mapping: [ 0x0199 ] - }, - { - code:0x019C - ,mapping: [ 0x026F ] - }, - { - code:0x019D - ,mapping: [ 0x0272 ] - }, - { - code:0x019F - ,mapping: [ 0x0275 ] - }, - { - code:0x01A0 - ,mapping: [ 0x01A1 ] - }, - { - code:0x01A2 - ,mapping: [ 0x01A3 ] - }, - { - code:0x01A4 - ,mapping: [ 0x01A5 ] - }, - { - code:0x01A6 - ,mapping: [ 0x0280 ] - }, - { - code:0x01A7 - ,mapping: [ 0x01A8 ] - }, - { - code:0x01A9 - ,mapping: [ 0x0283 ] - }, - { - code:0x01AC - ,mapping: [ 0x01AD ] - }, - { - code:0x01AE - ,mapping: [ 0x0288 ] - }, - { - code:0x01AF - ,mapping: [ 0x01B0 ] - }, - { - code:0x01B1 - ,mapping: [ 0x028A ] - }, - { - code:0x01B2 - ,mapping: [ 0x028B ] - }, - { - code:0x01B3 - ,mapping: [ 0x01B4 ] - }, - { - code:0x01B5 - ,mapping: [ 0x01B6 ] - }, - { - code:0x01B7 - ,mapping: [ 0x0292 ] - }, - { - code:0x01B8 - ,mapping: [ 0x01B9 ] - }, - { - code:0x01BC - ,mapping: [ 0x01BD ] - }, - { - code:0x01C4 - ,mapping: [ 0x01C6 ] - }, - { - code:0x01C5 - ,mapping: [ 0x01C6 ] - }, - { - code:0x01C7 - ,mapping: [ 0x01C9 ] - }, - { - code:0x01C8 - ,mapping: [ 0x01C9 ] - }, - { - code:0x01CA - ,mapping: [ 0x01CC ] - }, - { - code:0x01CB - ,mapping: [ 0x01CC ] - }, - { - code:0x01CD - ,mapping: [ 0x01CE ] - }, - { - code:0x01CF - ,mapping: [ 0x01D0 ] - }, - { - code:0x01D1 - ,mapping: [ 0x01D2 ] - }, - { - code:0x01D3 - ,mapping: [ 0x01D4 ] - }, - { - code:0x01D5 - ,mapping: [ 0x01D6 ] - }, - { - code:0x01D7 - ,mapping: [ 0x01D8 ] - }, - { - code:0x01D9 - ,mapping: [ 0x01DA ] - }, - { - code:0x01DB - ,mapping: [ 0x01DC ] - }, - { - code:0x01DE - ,mapping: [ 0x01DF ] - }, - { - code:0x01E0 - ,mapping: [ 0x01E1 ] - }, - { - code:0x01E2 - ,mapping: [ 0x01E3 ] - }, - { - code:0x01E4 - ,mapping: [ 0x01E5 ] - }, - { - code:0x01E6 - ,mapping: [ 0x01E7 ] - }, - { - code:0x01E8 - ,mapping: [ 0x01E9 ] - }, - { - code:0x01EA - ,mapping: [ 0x01EB ] - }, - { - code:0x01EC - ,mapping: [ 0x01ED ] - }, - { - code:0x01EE - ,mapping: [ 0x01EF ] - }, - { - code:0x01F0 - ,mapping: [ 0x006A, 0x030C ] - }, - { - code:0x01F1 - ,mapping: [ 0x01F3 ] - }, - { - code:0x01F2 - ,mapping: [ 0x01F3 ] - }, - { - code:0x01F4 - ,mapping: [ 0x01F5 ] - }, - { - code:0x01F6 - ,mapping: [ 0x0195 ] - }, - { - code:0x01F7 - ,mapping: [ 0x01BF ] - }, - { - code:0x01F8 - ,mapping: [ 0x01F9 ] - }, - { - code:0x01FA - ,mapping: [ 0x01FB ] - }, - { - code:0x01FC - ,mapping: [ 0x01FD ] - }, - { - code:0x01FE - ,mapping: [ 0x01FF ] - }, - { - code:0x0200 - ,mapping: [ 0x0201 ] - }, - { - code:0x0202 - ,mapping: [ 0x0203 ] - }, - { - code:0x0204 - ,mapping: [ 0x0205 ] - }, - { - code:0x0206 - ,mapping: [ 0x0207 ] - }, - { - code:0x0208 - ,mapping: [ 0x0209 ] - }, - { - code:0x020A - ,mapping: [ 0x020B ] - }, - { - code:0x020C - ,mapping: [ 0x020D ] - }, - { - code:0x020E - ,mapping: [ 0x020F ] - }, - { - code:0x0210 - ,mapping: [ 0x0211 ] - }, - { - code:0x0212 - ,mapping: [ 0x0213 ] - }, - { - code:0x0214 - ,mapping: [ 0x0215 ] - }, - { - code:0x0216 - ,mapping: [ 0x0217 ] - }, - { - code:0x0218 - ,mapping: [ 0x0219 ] - }, - { - code:0x021A - ,mapping: [ 0x021B ] - }, - { - code:0x021C - ,mapping: [ 0x021D ] - }, - { - code:0x021E - ,mapping: [ 0x021F ] - }, - { - code:0x0220 - ,mapping: [ 0x019E ] - }, - { - code:0x0222 - ,mapping: [ 0x0223 ] - }, - { - code:0x0224 - ,mapping: [ 0x0225 ] - }, - { - code:0x0226 - ,mapping: [ 0x0227 ] - }, - { - code:0x0228 - ,mapping: [ 0x0229 ] - }, - { - code:0x022A - ,mapping: [ 0x022B ] - }, - { - code:0x022C - ,mapping: [ 0x022D ] - }, - { - code:0x022E - ,mapping: [ 0x022F ] - }, - { - code:0x0230 - ,mapping: [ 0x0231 ] - }, - { - code:0x0232 - ,mapping: [ 0x0233 ] - }, - { - code:0x023A - ,mapping: [ 0x2C65 ] - }, - { - code:0x023B - ,mapping: [ 0x023C ] - }, - { - code:0x023D - ,mapping: [ 0x019A ] - }, - { - code:0x023E - ,mapping: [ 0x2C66 ] - }, - { - code:0x0241 - ,mapping: [ 0x0242 ] - }, - { - code:0x0243 - ,mapping: [ 0x0180 ] - }, - { - code:0x0244 - ,mapping: [ 0x0289 ] - }, - { - code:0x0245 - ,mapping: [ 0x028C ] - }, - { - code:0x0246 - ,mapping: [ 0x0247 ] - }, - { - code:0x0248 - ,mapping: [ 0x0249 ] - }, - { - code:0x024A - ,mapping: [ 0x024B ] - }, - { - code:0x024C - ,mapping: [ 0x024D ] - }, - { - code:0x024E - ,mapping: [ 0x024F ] - }, - { - code:0x0345 - ,mapping: [ 0x03B9 ] - }, - { - code:0x0386 - ,mapping: [ 0x03AC ] - }, - { - code:0x0388 - ,mapping: [ 0x03AD ] - }, - { - code:0x0389 - ,mapping: [ 0x03AE ] - }, - { - code:0x038A - ,mapping: [ 0x03AF ] - }, - { - code:0x038C - ,mapping: [ 0x03CC ] - }, - { - code:0x038E - ,mapping: [ 0x03CD ] - }, - { - code:0x038F - ,mapping: [ 0x03CE ] - }, - { - code:0x0390 - ,mapping: [ 0x03B9, 0x0308, 0x0301 ] - }, - { - code:0x0391 - ,mapping: [ 0x03B1 ] - }, - { - code:0x0392 - ,mapping: [ 0x03B2 ] - }, - { - code:0x0393 - ,mapping: [ 0x03B3 ] - }, - { - code:0x0394 - ,mapping: [ 0x03B4 ] - }, - { - code:0x0395 - ,mapping: [ 0x03B5 ] - }, - { - code:0x0396 - ,mapping: [ 0x03B6 ] - }, - { - code:0x0397 - ,mapping: [ 0x03B7 ] - }, - { - code:0x0398 - ,mapping: [ 0x03B8 ] - }, - { - code:0x0399 - ,mapping: [ 0x03B9 ] - }, - { - code:0x039A - ,mapping: [ 0x03BA ] - }, - { - code:0x039B - ,mapping: [ 0x03BB ] - }, - { - code:0x039C - ,mapping: [ 0x03BC ] - }, - { - code:0x039D - ,mapping: [ 0x03BD ] - }, - { - code:0x039E - ,mapping: [ 0x03BE ] - }, - { - code:0x039F - ,mapping: [ 0x03BF ] - }, - { - code:0x03A0 - ,mapping: [ 0x03C0 ] - }, - { - code:0x03A1 - ,mapping: [ 0x03C1 ] - }, - { - code:0x03A3 - ,mapping: [ 0x03C3 ] - }, - { - code:0x03A4 - ,mapping: [ 0x03C4 ] - }, - { - code:0x03A5 - ,mapping: [ 0x03C5 ] - }, - { - code:0x03A6 - ,mapping: [ 0x03C6 ] - }, - { - code:0x03A7 - ,mapping: [ 0x03C7 ] - }, - { - code:0x03A8 - ,mapping: [ 0x03C8 ] - }, - { - code:0x03A9 - ,mapping: [ 0x03C9 ] - }, - { - code:0x03AA - ,mapping: [ 0x03CA ] - }, - { - code:0x03AB - ,mapping: [ 0x03CB ] - }, - { - code:0x03B0 - ,mapping: [ 0x03C5, 0x0308, 0x0301 ] - }, - { - code:0x03C2 - ,mapping: [ 0x03C3 ] - }, - { - code:0x03D0 - ,mapping: [ 0x03B2 ] - }, - { - code:0x03D1 - ,mapping: [ 0x03B8 ] - }, - { - code:0x03D5 - ,mapping: [ 0x03C6 ] - }, - { - code:0x03D6 - ,mapping: [ 0x03C0 ] - }, - { - code:0x03D8 - ,mapping: [ 0x03D9 ] - }, - { - code:0x03DA - ,mapping: [ 0x03DB ] - }, - { - code:0x03DC - ,mapping: [ 0x03DD ] - }, - { - code:0x03DE - ,mapping: [ 0x03DF ] - }, - { - code:0x03E0 - ,mapping: [ 0x03E1 ] - }, - { - code:0x03E2 - ,mapping: [ 0x03E3 ] - }, - { - code:0x03E4 - ,mapping: [ 0x03E5 ] - }, - { - code:0x03E6 - ,mapping: [ 0x03E7 ] - }, - { - code:0x03E8 - ,mapping: [ 0x03E9 ] - }, - { - code:0x03EA - ,mapping: [ 0x03EB ] - }, - { - code:0x03EC - ,mapping: [ 0x03ED ] - }, - { - code:0x03EE - ,mapping: [ 0x03EF ] - }, - { - code:0x03F0 - ,mapping: [ 0x03BA ] - }, - { - code:0x03F1 - ,mapping: [ 0x03C1 ] - }, - { - code:0x03F4 - ,mapping: [ 0x03B8 ] - }, - { - code:0x03F5 - ,mapping: [ 0x03B5 ] - }, - { - code:0x03F7 - ,mapping: [ 0x03F8 ] - }, - { - code:0x03F9 - ,mapping: [ 0x03F2 ] - }, - { - code:0x03FA - ,mapping: [ 0x03FB ] - }, - { - code:0x03FD - ,mapping: [ 0x037B ] - }, - { - code:0x03FE - ,mapping: [ 0x037C ] - }, - { - code:0x03FF - ,mapping: [ 0x037D ] - }, - { - code:0x0400 - ,mapping: [ 0x0450 ] - }, - { - code:0x0401 - ,mapping: [ 0x0451 ] - }, - { - code:0x0402 - ,mapping: [ 0x0452 ] - }, - { - code:0x0403 - ,mapping: [ 0x0453 ] - }, - { - code:0x0404 - ,mapping: [ 0x0454 ] - }, - { - code:0x0405 - ,mapping: [ 0x0455 ] - }, - { - code:0x0406 - ,mapping: [ 0x0456 ] - }, - { - code:0x0407 - ,mapping: [ 0x0457 ] - }, - { - code:0x0408 - ,mapping: [ 0x0458 ] - }, - { - code:0x0409 - ,mapping: [ 0x0459 ] - }, - { - code:0x040A - ,mapping: [ 0x045A ] - }, - { - code:0x040B - ,mapping: [ 0x045B ] - }, - { - code:0x040C - ,mapping: [ 0x045C ] - }, - { - code:0x040D - ,mapping: [ 0x045D ] - }, - { - code:0x040E - ,mapping: [ 0x045E ] - }, - { - code:0x040F - ,mapping: [ 0x045F ] - }, - { - code:0x0410 - ,mapping: [ 0x0430 ] - }, - { - code:0x0411 - ,mapping: [ 0x0431 ] - }, - { - code:0x0412 - ,mapping: [ 0x0432 ] - }, - { - code:0x0413 - ,mapping: [ 0x0433 ] - }, - { - code:0x0414 - ,mapping: [ 0x0434 ] - }, - { - code:0x0415 - ,mapping: [ 0x0435 ] - }, - { - code:0x0416 - ,mapping: [ 0x0436 ] - }, - { - code:0x0417 - ,mapping: [ 0x0437 ] - }, - { - code:0x0418 - ,mapping: [ 0x0438 ] - }, - { - code:0x0419 - ,mapping: [ 0x0439 ] - }, - { - code:0x041A - ,mapping: [ 0x043A ] - }, - { - code:0x041B - ,mapping: [ 0x043B ] - }, - { - code:0x041C - ,mapping: [ 0x043C ] - }, - { - code:0x041D - ,mapping: [ 0x043D ] - }, - { - code:0x041E - ,mapping: [ 0x043E ] - }, - { - code:0x041F - ,mapping: [ 0x043F ] - }, - { - code:0x0420 - ,mapping: [ 0x0440 ] - }, - { - code:0x0421 - ,mapping: [ 0x0441 ] - }, - { - code:0x0422 - ,mapping: [ 0x0442 ] - }, - { - code:0x0423 - ,mapping: [ 0x0443 ] - }, - { - code:0x0424 - ,mapping: [ 0x0444 ] - }, - { - code:0x0425 - ,mapping: [ 0x0445 ] - }, - { - code:0x0426 - ,mapping: [ 0x0446 ] - }, - { - code:0x0427 - ,mapping: [ 0x0447 ] - }, - { - code:0x0428 - ,mapping: [ 0x0448 ] - }, - { - code:0x0429 - ,mapping: [ 0x0449 ] - }, - { - code:0x042A - ,mapping: [ 0x044A ] - }, - { - code:0x042B - ,mapping: [ 0x044B ] - }, - { - code:0x042C - ,mapping: [ 0x044C ] - }, - { - code:0x042D - ,mapping: [ 0x044D ] - }, - { - code:0x042E - ,mapping: [ 0x044E ] - }, - { - code:0x042F - ,mapping: [ 0x044F ] - }, - { - code:0x0460 - ,mapping: [ 0x0461 ] - }, - { - code:0x0462 - ,mapping: [ 0x0463 ] - }, - { - code:0x0464 - ,mapping: [ 0x0465 ] - }, - { - code:0x0466 - ,mapping: [ 0x0467 ] - }, - { - code:0x0468 - ,mapping: [ 0x0469 ] - }, - { - code:0x046A - ,mapping: [ 0x046B ] - }, - { - code:0x046C - ,mapping: [ 0x046D ] - }, - { - code:0x046E - ,mapping: [ 0x046F ] - }, - { - code:0x0470 - ,mapping: [ 0x0471 ] - }, - { - code:0x0472 - ,mapping: [ 0x0473 ] - }, - { - code:0x0474 - ,mapping: [ 0x0475 ] - }, - { - code:0x0476 - ,mapping: [ 0x0477 ] - }, - { - code:0x0478 - ,mapping: [ 0x0479 ] - }, - { - code:0x047A - ,mapping: [ 0x047B ] - }, - { - code:0x047C - ,mapping: [ 0x047D ] - }, - { - code:0x047E - ,mapping: [ 0x047F ] - }, - { - code:0x0480 - ,mapping: [ 0x0481 ] - }, - { - code:0x048A - ,mapping: [ 0x048B ] - }, - { - code:0x048C - ,mapping: [ 0x048D ] - }, - { - code:0x048E - ,mapping: [ 0x048F ] - }, - { - code:0x0490 - ,mapping: [ 0x0491 ] - }, - { - code:0x0492 - ,mapping: [ 0x0493 ] - }, - { - code:0x0494 - ,mapping: [ 0x0495 ] - }, - { - code:0x0496 - ,mapping: [ 0x0497 ] - }, - { - code:0x0498 - ,mapping: [ 0x0499 ] - }, - { - code:0x049A - ,mapping: [ 0x049B ] - }, - { - code:0x049C - ,mapping: [ 0x049D ] - }, - { - code:0x049E - ,mapping: [ 0x049F ] - }, - { - code:0x04A0 - ,mapping: [ 0x04A1 ] - }, - { - code:0x04A2 - ,mapping: [ 0x04A3 ] - }, - { - code:0x04A4 - ,mapping: [ 0x04A5 ] - }, - { - code:0x04A6 - ,mapping: [ 0x04A7 ] - }, - { - code:0x04A8 - ,mapping: [ 0x04A9 ] - }, - { - code:0x04AA - ,mapping: [ 0x04AB ] - }, - { - code:0x04AC - ,mapping: [ 0x04AD ] - }, - { - code:0x04AE - ,mapping: [ 0x04AF ] - }, - { - code:0x04B0 - ,mapping: [ 0x04B1 ] - }, - { - code:0x04B2 - ,mapping: [ 0x04B3 ] - }, - { - code:0x04B4 - ,mapping: [ 0x04B5 ] - }, - { - code:0x04B6 - ,mapping: [ 0x04B7 ] - }, - { - code:0x04B8 - ,mapping: [ 0x04B9 ] - }, - { - code:0x04BA - ,mapping: [ 0x04BB ] - }, - { - code:0x04BC - ,mapping: [ 0x04BD ] - }, - { - code:0x04BE - ,mapping: [ 0x04BF ] - }, - { - code:0x04C0 - ,mapping: [ 0x04CF ] - }, - { - code:0x04C1 - ,mapping: [ 0x04C2 ] - }, - { - code:0x04C3 - ,mapping: [ 0x04C4 ] - }, - { - code:0x04C5 - ,mapping: [ 0x04C6 ] - }, - { - code:0x04C7 - ,mapping: [ 0x04C8 ] - }, - { - code:0x04C9 - ,mapping: [ 0x04CA ] - }, - { - code:0x04CB - ,mapping: [ 0x04CC ] - }, - { - code:0x04CD - ,mapping: [ 0x04CE ] - }, - { - code:0x04D0 - ,mapping: [ 0x04D1 ] - }, - { - code:0x04D2 - ,mapping: [ 0x04D3 ] - }, - { - code:0x04D4 - ,mapping: [ 0x04D5 ] - }, - { - code:0x04D6 - ,mapping: [ 0x04D7 ] - }, - { - code:0x04D8 - ,mapping: [ 0x04D9 ] - }, - { - code:0x04DA - ,mapping: [ 0x04DB ] - }, - { - code:0x04DC - ,mapping: [ 0x04DD ] - }, - { - code:0x04DE - ,mapping: [ 0x04DF ] - }, - { - code:0x04E0 - ,mapping: [ 0x04E1 ] - }, - { - code:0x04E2 - ,mapping: [ 0x04E3 ] - }, - { - code:0x04E4 - ,mapping: [ 0x04E5 ] - }, - { - code:0x04E6 - ,mapping: [ 0x04E7 ] - }, - { - code:0x04E8 - ,mapping: [ 0x04E9 ] - }, - { - code:0x04EA - ,mapping: [ 0x04EB ] - }, - { - code:0x04EC - ,mapping: [ 0x04ED ] - }, - { - code:0x04EE - ,mapping: [ 0x04EF ] - }, - { - code:0x04F0 - ,mapping: [ 0x04F1 ] - }, - { - code:0x04F2 - ,mapping: [ 0x04F3 ] - }, - { - code:0x04F4 - ,mapping: [ 0x04F5 ] - }, - { - code:0x04F6 - ,mapping: [ 0x04F7 ] - }, - { - code:0x04F8 - ,mapping: [ 0x04F9 ] - }, - { - code:0x04FA - ,mapping: [ 0x04FB ] - }, - { - code:0x04FC - ,mapping: [ 0x04FD ] - }, - { - code:0x04FE - ,mapping: [ 0x04FF ] - }, - { - code:0x0500 - ,mapping: [ 0x0501 ] - }, - { - code:0x0502 - ,mapping: [ 0x0503 ] - }, - { - code:0x0504 - ,mapping: [ 0x0505 ] - }, - { - code:0x0506 - ,mapping: [ 0x0507 ] - }, - { - code:0x0508 - ,mapping: [ 0x0509 ] - }, - { - code:0x050A - ,mapping: [ 0x050B ] - }, - { - code:0x050C - ,mapping: [ 0x050D ] - }, - { - code:0x050E - ,mapping: [ 0x050F ] - }, - { - code:0x0510 - ,mapping: [ 0x0511 ] - }, - { - code:0x0512 - ,mapping: [ 0x0513 ] - }, - { - code:0x0531 - ,mapping: [ 0x0561 ] - }, - { - code:0x0532 - ,mapping: [ 0x0562 ] - }, - { - code:0x0533 - ,mapping: [ 0x0563 ] - }, - { - code:0x0534 - ,mapping: [ 0x0564 ] - }, - { - code:0x0535 - ,mapping: [ 0x0565 ] - }, - { - code:0x0536 - ,mapping: [ 0x0566 ] - }, - { - code:0x0537 - ,mapping: [ 0x0567 ] - }, - { - code:0x0538 - ,mapping: [ 0x0568 ] - }, - { - code:0x0539 - ,mapping: [ 0x0569 ] - }, - { - code:0x053A - ,mapping: [ 0x056A ] - }, - { - code:0x053B - ,mapping: [ 0x056B ] - }, - { - code:0x053C - ,mapping: [ 0x056C ] - }, - { - code:0x053D - ,mapping: [ 0x056D ] - }, - { - code:0x053E - ,mapping: [ 0x056E ] - }, - { - code:0x053F - ,mapping: [ 0x056F ] - }, - { - code:0x0540 - ,mapping: [ 0x0570 ] - }, - { - code:0x0541 - ,mapping: [ 0x0571 ] - }, - { - code:0x0542 - ,mapping: [ 0x0572 ] - }, - { - code:0x0543 - ,mapping: [ 0x0573 ] - }, - { - code:0x0544 - ,mapping: [ 0x0574 ] - }, - { - code:0x0545 - ,mapping: [ 0x0575 ] - }, - { - code:0x0546 - ,mapping: [ 0x0576 ] - }, - { - code:0x0547 - ,mapping: [ 0x0577 ] - }, - { - code:0x0548 - ,mapping: [ 0x0578 ] - }, - { - code:0x0549 - ,mapping: [ 0x0579 ] - }, - { - code:0x054A - ,mapping: [ 0x057A ] - }, - { - code:0x054B - ,mapping: [ 0x057B ] - }, - { - code:0x054C - ,mapping: [ 0x057C ] - }, - { - code:0x054D - ,mapping: [ 0x057D ] - }, - { - code:0x054E - ,mapping: [ 0x057E ] - }, - { - code:0x054F - ,mapping: [ 0x057F ] - }, - { - code:0x0550 - ,mapping: [ 0x0580 ] - }, - { - code:0x0551 - ,mapping: [ 0x0581 ] - }, - { - code:0x0552 - ,mapping: [ 0x0582 ] - }, - { - code:0x0553 - ,mapping: [ 0x0583 ] - }, - { - code:0x0554 - ,mapping: [ 0x0584 ] - }, - { - code:0x0555 - ,mapping: [ 0x0585 ] - }, - { - code:0x0556 - ,mapping: [ 0x0586 ] - }, - { - code:0x0587 - ,mapping: [ 0x0565, 0x0582 ] - }, - { - code:0x10A0 - ,mapping: [ 0x2D00 ] - }, - { - code:0x10A1 - ,mapping: [ 0x2D01 ] - }, - { - code:0x10A2 - ,mapping: [ 0x2D02 ] - }, - { - code:0x10A3 - ,mapping: [ 0x2D03 ] - }, - { - code:0x10A4 - ,mapping: [ 0x2D04 ] - }, - { - code:0x10A5 - ,mapping: [ 0x2D05 ] - }, - { - code:0x10A6 - ,mapping: [ 0x2D06 ] - }, - { - code:0x10A7 - ,mapping: [ 0x2D07 ] - }, - { - code:0x10A8 - ,mapping: [ 0x2D08 ] - }, - { - code:0x10A9 - ,mapping: [ 0x2D09 ] - }, - { - code:0x10AA - ,mapping: [ 0x2D0A ] - }, - { - code:0x10AB - ,mapping: [ 0x2D0B ] - }, - { - code:0x10AC - ,mapping: [ 0x2D0C ] - }, - { - code:0x10AD - ,mapping: [ 0x2D0D ] - }, - { - code:0x10AE - ,mapping: [ 0x2D0E ] - }, - { - code:0x10AF - ,mapping: [ 0x2D0F ] - }, - { - code:0x10B0 - ,mapping: [ 0x2D10 ] - }, - { - code:0x10B1 - ,mapping: [ 0x2D11 ] - }, - { - code:0x10B2 - ,mapping: [ 0x2D12 ] - }, - { - code:0x10B3 - ,mapping: [ 0x2D13 ] - }, - { - code:0x10B4 - ,mapping: [ 0x2D14 ] - }, - { - code:0x10B5 - ,mapping: [ 0x2D15 ] - }, - { - code:0x10B6 - ,mapping: [ 0x2D16 ] - }, - { - code:0x10B7 - ,mapping: [ 0x2D17 ] - }, - { - code:0x10B8 - ,mapping: [ 0x2D18 ] - }, - { - code:0x10B9 - ,mapping: [ 0x2D19 ] - }, - { - code:0x10BA - ,mapping: [ 0x2D1A ] - }, - { - code:0x10BB - ,mapping: [ 0x2D1B ] - }, - { - code:0x10BC - ,mapping: [ 0x2D1C ] - }, - { - code:0x10BD - ,mapping: [ 0x2D1D ] - }, - { - code:0x10BE - ,mapping: [ 0x2D1E ] - }, - { - code:0x10BF - ,mapping: [ 0x2D1F ] - }, - { - code:0x10C0 - ,mapping: [ 0x2D20 ] - }, - { - code:0x10C1 - ,mapping: [ 0x2D21 ] - }, - { - code:0x10C2 - ,mapping: [ 0x2D22 ] - }, - { - code:0x10C3 - ,mapping: [ 0x2D23 ] - }, - { - code:0x10C4 - ,mapping: [ 0x2D24 ] - }, - { - code:0x10C5 - ,mapping: [ 0x2D25 ] - }, - { - code:0x1E00 - ,mapping: [ 0x1E01 ] - }, - { - code:0x1E02 - ,mapping: [ 0x1E03 ] - }, - { - code:0x1E04 - ,mapping: [ 0x1E05 ] - }, - { - code:0x1E06 - ,mapping: [ 0x1E07 ] - }, - { - code:0x1E08 - ,mapping: [ 0x1E09 ] - }, - { - code:0x1E0A - ,mapping: [ 0x1E0B ] - }, - { - code:0x1E0C - ,mapping: [ 0x1E0D ] - }, - { - code:0x1E0E - ,mapping: [ 0x1E0F ] - }, - { - code:0x1E10 - ,mapping: [ 0x1E11 ] - }, - { - code:0x1E12 - ,mapping: [ 0x1E13 ] - }, - { - code:0x1E14 - ,mapping: [ 0x1E15 ] - }, - { - code:0x1E16 - ,mapping: [ 0x1E17 ] - }, - { - code:0x1E18 - ,mapping: [ 0x1E19 ] - }, - { - code:0x1E1A - ,mapping: [ 0x1E1B ] - }, - { - code:0x1E1C - ,mapping: [ 0x1E1D ] - }, - { - code:0x1E1E - ,mapping: [ 0x1E1F ] - }, - { - code:0x1E20 - ,mapping: [ 0x1E21 ] - }, - { - code:0x1E22 - ,mapping: [ 0x1E23 ] - }, - { - code:0x1E24 - ,mapping: [ 0x1E25 ] - }, - { - code:0x1E26 - ,mapping: [ 0x1E27 ] - }, - { - code:0x1E28 - ,mapping: [ 0x1E29 ] - }, - { - code:0x1E2A - ,mapping: [ 0x1E2B ] - }, - { - code:0x1E2C - ,mapping: [ 0x1E2D ] - }, - { - code:0x1E2E - ,mapping: [ 0x1E2F ] - }, - { - code:0x1E30 - ,mapping: [ 0x1E31 ] - }, - { - code:0x1E32 - ,mapping: [ 0x1E33 ] - }, - { - code:0x1E34 - ,mapping: [ 0x1E35 ] - }, - { - code:0x1E36 - ,mapping: [ 0x1E37 ] - }, - { - code:0x1E38 - ,mapping: [ 0x1E39 ] - }, - { - code:0x1E3A - ,mapping: [ 0x1E3B ] - }, - { - code:0x1E3C - ,mapping: [ 0x1E3D ] - }, - { - code:0x1E3E - ,mapping: [ 0x1E3F ] - }, - { - code:0x1E40 - ,mapping: [ 0x1E41 ] - }, - { - code:0x1E42 - ,mapping: [ 0x1E43 ] - }, - { - code:0x1E44 - ,mapping: [ 0x1E45 ] - }, - { - code:0x1E46 - ,mapping: [ 0x1E47 ] - }, - { - code:0x1E48 - ,mapping: [ 0x1E49 ] - }, - { - code:0x1E4A - ,mapping: [ 0x1E4B ] - }, - { - code:0x1E4C - ,mapping: [ 0x1E4D ] - }, - { - code:0x1E4E - ,mapping: [ 0x1E4F ] - }, - { - code:0x1E50 - ,mapping: [ 0x1E51 ] - }, - { - code:0x1E52 - ,mapping: [ 0x1E53 ] - }, - { - code:0x1E54 - ,mapping: [ 0x1E55 ] - }, - { - code:0x1E56 - ,mapping: [ 0x1E57 ] - }, - { - code:0x1E58 - ,mapping: [ 0x1E59 ] - }, - { - code:0x1E5A - ,mapping: [ 0x1E5B ] - }, - { - code:0x1E5C - ,mapping: [ 0x1E5D ] - }, - { - code:0x1E5E - ,mapping: [ 0x1E5F ] - }, - { - code:0x1E60 - ,mapping: [ 0x1E61 ] - }, - { - code:0x1E62 - ,mapping: [ 0x1E63 ] - }, - { - code:0x1E64 - ,mapping: [ 0x1E65 ] - }, - { - code:0x1E66 - ,mapping: [ 0x1E67 ] - }, - { - code:0x1E68 - ,mapping: [ 0x1E69 ] - }, - { - code:0x1E6A - ,mapping: [ 0x1E6B ] - }, - { - code:0x1E6C - ,mapping: [ 0x1E6D ] - }, - { - code:0x1E6E - ,mapping: [ 0x1E6F ] - }, - { - code:0x1E70 - ,mapping: [ 0x1E71 ] - }, - { - code:0x1E72 - ,mapping: [ 0x1E73 ] - }, - { - code:0x1E74 - ,mapping: [ 0x1E75 ] - }, - { - code:0x1E76 - ,mapping: [ 0x1E77 ] - }, - { - code:0x1E78 - ,mapping: [ 0x1E79 ] - }, - { - code:0x1E7A - ,mapping: [ 0x1E7B ] - }, - { - code:0x1E7C - ,mapping: [ 0x1E7D ] - }, - { - code:0x1E7E - ,mapping: [ 0x1E7F ] - }, - { - code:0x1E80 - ,mapping: [ 0x1E81 ] - }, - { - code:0x1E82 - ,mapping: [ 0x1E83 ] - }, - { - code:0x1E84 - ,mapping: [ 0x1E85 ] - }, - { - code:0x1E86 - ,mapping: [ 0x1E87 ] - }, - { - code:0x1E88 - ,mapping: [ 0x1E89 ] - }, - { - code:0x1E8A - ,mapping: [ 0x1E8B ] - }, - { - code:0x1E8C - ,mapping: [ 0x1E8D ] - }, - { - code:0x1E8E - ,mapping: [ 0x1E8F ] - }, - { - code:0x1E90 - ,mapping: [ 0x1E91 ] - }, - { - code:0x1E92 - ,mapping: [ 0x1E93 ] - }, - { - code:0x1E94 - ,mapping: [ 0x1E95 ] - }, - { - code:0x1E96 - ,mapping: [ 0x0068, 0x0331 ] - }, - { - code:0x1E97 - ,mapping: [ 0x0074, 0x0308 ] - }, - { - code:0x1E98 - ,mapping: [ 0x0077, 0x030A ] - }, - { - code:0x1E99 - ,mapping: [ 0x0079, 0x030A ] - }, - { - code:0x1E9A - ,mapping: [ 0x0061, 0x02BE ] - }, - { - code:0x1E9B - ,mapping: [ 0x1E61 ] - }, - { - code:0x1EA0 - ,mapping: [ 0x1EA1 ] - }, - { - code:0x1EA2 - ,mapping: [ 0x1EA3 ] - }, - { - code:0x1EA4 - ,mapping: [ 0x1EA5 ] - }, - { - code:0x1EA6 - ,mapping: [ 0x1EA7 ] - }, - { - code:0x1EA8 - ,mapping: [ 0x1EA9 ] - }, - { - code:0x1EAA - ,mapping: [ 0x1EAB ] - }, - { - code:0x1EAC - ,mapping: [ 0x1EAD ] - }, - { - code:0x1EAE - ,mapping: [ 0x1EAF ] - }, - { - code:0x1EB0 - ,mapping: [ 0x1EB1 ] - }, - { - code:0x1EB2 - ,mapping: [ 0x1EB3 ] - }, - { - code:0x1EB4 - ,mapping: [ 0x1EB5 ] - }, - { - code:0x1EB6 - ,mapping: [ 0x1EB7 ] - }, - { - code:0x1EB8 - ,mapping: [ 0x1EB9 ] - }, - { - code:0x1EBA - ,mapping: [ 0x1EBB ] - }, - { - code:0x1EBC - ,mapping: [ 0x1EBD ] - }, - { - code:0x1EBE - ,mapping: [ 0x1EBF ] - }, - { - code:0x1EC0 - ,mapping: [ 0x1EC1 ] - }, - { - code:0x1EC2 - ,mapping: [ 0x1EC3 ] - }, - { - code:0x1EC4 - ,mapping: [ 0x1EC5 ] - }, - { - code:0x1EC6 - ,mapping: [ 0x1EC7 ] - }, - { - code:0x1EC8 - ,mapping: [ 0x1EC9 ] - }, - { - code:0x1ECA - ,mapping: [ 0x1ECB ] - }, - { - code:0x1ECC - ,mapping: [ 0x1ECD ] - }, - { - code:0x1ECE - ,mapping: [ 0x1ECF ] - }, - { - code:0x1ED0 - ,mapping: [ 0x1ED1 ] - }, - { - code:0x1ED2 - ,mapping: [ 0x1ED3 ] - }, - { - code:0x1ED4 - ,mapping: [ 0x1ED5 ] - }, - { - code:0x1ED6 - ,mapping: [ 0x1ED7 ] - }, - { - code:0x1ED8 - ,mapping: [ 0x1ED9 ] - }, - { - code:0x1EDA - ,mapping: [ 0x1EDB ] - }, - { - code:0x1EDC - ,mapping: [ 0x1EDD ] - }, - { - code:0x1EDE - ,mapping: [ 0x1EDF ] - }, - { - code:0x1EE0 - ,mapping: [ 0x1EE1 ] - }, - { - code:0x1EE2 - ,mapping: [ 0x1EE3 ] - }, - { - code:0x1EE4 - ,mapping: [ 0x1EE5 ] - }, - { - code:0x1EE6 - ,mapping: [ 0x1EE7 ] - }, - { - code:0x1EE8 - ,mapping: [ 0x1EE9 ] - }, - { - code:0x1EEA - ,mapping: [ 0x1EEB ] - }, - { - code:0x1EEC - ,mapping: [ 0x1EED ] - }, - { - code:0x1EEE - ,mapping: [ 0x1EEF ] - }, - { - code:0x1EF0 - ,mapping: [ 0x1EF1 ] - }, - { - code:0x1EF2 - ,mapping: [ 0x1EF3 ] - }, - { - code:0x1EF4 - ,mapping: [ 0x1EF5 ] - }, - { - code:0x1EF6 - ,mapping: [ 0x1EF7 ] - }, - { - code:0x1EF8 - ,mapping: [ 0x1EF9 ] - }, - { - code:0x1F08 - ,mapping: [ 0x1F00 ] - }, - { - code:0x1F09 - ,mapping: [ 0x1F01 ] - }, - { - code:0x1F0A - ,mapping: [ 0x1F02 ] - }, - { - code:0x1F0B - ,mapping: [ 0x1F03 ] - }, - { - code:0x1F0C - ,mapping: [ 0x1F04 ] - }, - { - code:0x1F0D - ,mapping: [ 0x1F05 ] - }, - { - code:0x1F0E - ,mapping: [ 0x1F06 ] - }, - { - code:0x1F0F - ,mapping: [ 0x1F07 ] - }, - { - code:0x1F18 - ,mapping: [ 0x1F10 ] - }, - { - code:0x1F19 - ,mapping: [ 0x1F11 ] - }, - { - code:0x1F1A - ,mapping: [ 0x1F12 ] - }, - { - code:0x1F1B - ,mapping: [ 0x1F13 ] - }, - { - code:0x1F1C - ,mapping: [ 0x1F14 ] - }, - { - code:0x1F1D - ,mapping: [ 0x1F15 ] - }, - { - code:0x1F28 - ,mapping: [ 0x1F20 ] - }, - { - code:0x1F29 - ,mapping: [ 0x1F21 ] - }, - { - code:0x1F2A - ,mapping: [ 0x1F22 ] - }, - { - code:0x1F2B - ,mapping: [ 0x1F23 ] - }, - { - code:0x1F2C - ,mapping: [ 0x1F24 ] - }, - { - code:0x1F2D - ,mapping: [ 0x1F25 ] - }, - { - code:0x1F2E - ,mapping: [ 0x1F26 ] - }, - { - code:0x1F2F - ,mapping: [ 0x1F27 ] - }, - { - code:0x1F38 - ,mapping: [ 0x1F30 ] - }, - { - code:0x1F39 - ,mapping: [ 0x1F31 ] - }, - { - code:0x1F3A - ,mapping: [ 0x1F32 ] - }, - { - code:0x1F3B - ,mapping: [ 0x1F33 ] - }, - { - code:0x1F3C - ,mapping: [ 0x1F34 ] - }, - { - code:0x1F3D - ,mapping: [ 0x1F35 ] - }, - { - code:0x1F3E - ,mapping: [ 0x1F36 ] - }, - { - code:0x1F3F - ,mapping: [ 0x1F37 ] - }, - { - code:0x1F48 - ,mapping: [ 0x1F40 ] - }, - { - code:0x1F49 - ,mapping: [ 0x1F41 ] - }, - { - code:0x1F4A - ,mapping: [ 0x1F42 ] - }, - { - code:0x1F4B - ,mapping: [ 0x1F43 ] - }, - { - code:0x1F4C - ,mapping: [ 0x1F44 ] - }, - { - code:0x1F4D - ,mapping: [ 0x1F45 ] - }, - { - code:0x1F50 - ,mapping: [ 0x03C5, 0x0313 ] - }, - { - code:0x1F52 - ,mapping: [ 0x03C5, 0x0313, 0x0300 ] - }, - { - code:0x1F54 - ,mapping: [ 0x03C5, 0x0313, 0x0301 ] - }, - { - code:0x1F56 - ,mapping: [ 0x03C5, 0x0313, 0x0342 ] - }, - { - code:0x1F59 - ,mapping: [ 0x1F51 ] - }, - { - code:0x1F5B - ,mapping: [ 0x1F53 ] - }, - { - code:0x1F5D - ,mapping: [ 0x1F55 ] - }, - { - code:0x1F5F - ,mapping: [ 0x1F57 ] - }, - { - code:0x1F68 - ,mapping: [ 0x1F60 ] - }, - { - code:0x1F69 - ,mapping: [ 0x1F61 ] - }, - { - code:0x1F6A - ,mapping: [ 0x1F62 ] - }, - { - code:0x1F6B - ,mapping: [ 0x1F63 ] - }, - { - code:0x1F6C - ,mapping: [ 0x1F64 ] - }, - { - code:0x1F6D - ,mapping: [ 0x1F65 ] - }, - { - code:0x1F6E - ,mapping: [ 0x1F66 ] - }, - { - code:0x1F6F - ,mapping: [ 0x1F67 ] - }, - { - code:0x1F80 - ,mapping: [ 0x1F00, 0x03B9 ] - }, - { - code:0x1F81 - ,mapping: [ 0x1F01, 0x03B9 ] - }, - { - code:0x1F82 - ,mapping: [ 0x1F02, 0x03B9 ] - }, - { - code:0x1F83 - ,mapping: [ 0x1F03, 0x03B9 ] - }, - { - code:0x1F84 - ,mapping: [ 0x1F04, 0x03B9 ] - }, - { - code:0x1F85 - ,mapping: [ 0x1F05, 0x03B9 ] - }, - { - code:0x1F86 - ,mapping: [ 0x1F06, 0x03B9 ] - }, - { - code:0x1F87 - ,mapping: [ 0x1F07, 0x03B9 ] - }, - { - code:0x1F88 - ,mapping: [ 0x1F00, 0x03B9 ] - }, - { - code:0x1F89 - ,mapping: [ 0x1F01, 0x03B9 ] - }, - { - code:0x1F8A - ,mapping: [ 0x1F02, 0x03B9 ] - }, - { - code:0x1F8B - ,mapping: [ 0x1F03, 0x03B9 ] - }, - { - code:0x1F8C - ,mapping: [ 0x1F04, 0x03B9 ] - }, - { - code:0x1F8D - ,mapping: [ 0x1F05, 0x03B9 ] - }, - { - code:0x1F8E - ,mapping: [ 0x1F06, 0x03B9 ] - }, - { - code:0x1F8F - ,mapping: [ 0x1F07, 0x03B9 ] - }, - { - code:0x1F90 - ,mapping: [ 0x1F20, 0x03B9 ] - }, - { - code:0x1F91 - ,mapping: [ 0x1F21, 0x03B9 ] - }, - { - code:0x1F92 - ,mapping: [ 0x1F22, 0x03B9 ] - }, - { - code:0x1F93 - ,mapping: [ 0x1F23, 0x03B9 ] - }, - { - code:0x1F94 - ,mapping: [ 0x1F24, 0x03B9 ] - }, - { - code:0x1F95 - ,mapping: [ 0x1F25, 0x03B9 ] - }, - { - code:0x1F96 - ,mapping: [ 0x1F26, 0x03B9 ] - }, - { - code:0x1F97 - ,mapping: [ 0x1F27, 0x03B9 ] - }, - { - code:0x1F98 - ,mapping: [ 0x1F20, 0x03B9 ] - }, - { - code:0x1F99 - ,mapping: [ 0x1F21, 0x03B9 ] - }, - { - code:0x1F9A - ,mapping: [ 0x1F22, 0x03B9 ] - }, - { - code:0x1F9B - ,mapping: [ 0x1F23, 0x03B9 ] - }, - { - code:0x1F9C - ,mapping: [ 0x1F24, 0x03B9 ] - }, - { - code:0x1F9D - ,mapping: [ 0x1F25, 0x03B9 ] - }, - { - code:0x1F9E - ,mapping: [ 0x1F26, 0x03B9 ] - }, - { - code:0x1F9F - ,mapping: [ 0x1F27, 0x03B9 ] - }, - { - code:0x1FA0 - ,mapping: [ 0x1F60, 0x03B9 ] - }, - { - code:0x1FA1 - ,mapping: [ 0x1F61, 0x03B9 ] - }, - { - code:0x1FA2 - ,mapping: [ 0x1F62, 0x03B9 ] - }, - { - code:0x1FA3 - ,mapping: [ 0x1F63, 0x03B9 ] - }, - { - code:0x1FA4 - ,mapping: [ 0x1F64, 0x03B9 ] - }, - { - code:0x1FA5 - ,mapping: [ 0x1F65, 0x03B9 ] - }, - { - code:0x1FA6 - ,mapping: [ 0x1F66, 0x03B9 ] - }, - { - code:0x1FA7 - ,mapping: [ 0x1F67, 0x03B9 ] - }, - { - code:0x1FA8 - ,mapping: [ 0x1F60, 0x03B9 ] - }, - { - code:0x1FA9 - ,mapping: [ 0x1F61, 0x03B9 ] - }, - { - code:0x1FAA - ,mapping: [ 0x1F62, 0x03B9 ] - }, - { - code:0x1FAB - ,mapping: [ 0x1F63, 0x03B9 ] - }, - { - code:0x1FAC - ,mapping: [ 0x1F64, 0x03B9 ] - }, - { - code:0x1FAD - ,mapping: [ 0x1F65, 0x03B9 ] - }, - { - code:0x1FAE - ,mapping: [ 0x1F66, 0x03B9 ] - }, - { - code:0x1FAF - ,mapping: [ 0x1F67, 0x03B9 ] - }, - { - code:0x1FB2 - ,mapping: [ 0x1F70, 0x03B9 ] - }, - { - code:0x1FB3 - ,mapping: [ 0x03B1, 0x03B9 ] - }, - { - code:0x1FB4 - ,mapping: [ 0x03AC, 0x03B9 ] - }, - { - code:0x1FB6 - ,mapping: [ 0x03B1, 0x0342 ] - }, - { - code:0x1FB7 - ,mapping: [ 0x03B1, 0x0342, 0x03B9 ] - }, - { - code:0x1FB8 - ,mapping: [ 0x1FB0 ] - }, - { - code:0x1FB9 - ,mapping: [ 0x1FB1 ] - }, - { - code:0x1FBA - ,mapping: [ 0x1F70 ] - }, - { - code:0x1FBB - ,mapping: [ 0x1F71 ] - }, - { - code:0x1FBC - ,mapping: [ 0x03B1, 0x03B9 ] - }, - { - code:0x1FBE - ,mapping: [ 0x03B9 ] - }, - { - code:0x1FC2 - ,mapping: [ 0x1F74, 0x03B9 ] - }, - { - code:0x1FC3 - ,mapping: [ 0x03B7, 0x03B9 ] - }, - { - code:0x1FC4 - ,mapping: [ 0x03AE, 0x03B9 ] - }, - { - code:0x1FC6 - ,mapping: [ 0x03B7, 0x0342 ] - }, - { - code:0x1FC7 - ,mapping: [ 0x03B7, 0x0342, 0x03B9 ] - }, - { - code:0x1FC8 - ,mapping: [ 0x1F72 ] - }, - { - code:0x1FC9 - ,mapping: [ 0x1F73 ] - }, - { - code:0x1FCA - ,mapping: [ 0x1F74 ] - }, - { - code:0x1FCB - ,mapping: [ 0x1F75 ] - }, - { - code:0x1FCC - ,mapping: [ 0x03B7, 0x03B9 ] - }, - { - code:0x1FD2 - ,mapping: [ 0x03B9, 0x0308, 0x0300 ] - }, - { - code:0x1FD3 - ,mapping: [ 0x03B9, 0x0308, 0x0301 ] - }, - { - code:0x1FD6 - ,mapping: [ 0x03B9, 0x0342 ] - }, - { - code:0x1FD7 - ,mapping: [ 0x03B9, 0x0308, 0x0342 ] - }, - { - code:0x1FD8 - ,mapping: [ 0x1FD0 ] - }, - { - code:0x1FD9 - ,mapping: [ 0x1FD1 ] - }, - { - code:0x1FDA - ,mapping: [ 0x1F76 ] - }, - { - code:0x1FDB - ,mapping: [ 0x1F77 ] - }, - { - code:0x1FE2 - ,mapping: [ 0x03C5, 0x0308, 0x0300 ] - }, - { - code:0x1FE3 - ,mapping: [ 0x03C5, 0x0308, 0x0301 ] - }, - { - code:0x1FE4 - ,mapping: [ 0x03C1, 0x0313 ] - }, - { - code:0x1FE6 - ,mapping: [ 0x03C5, 0x0342 ] - }, - { - code:0x1FE7 - ,mapping: [ 0x03C5, 0x0308, 0x0342 ] - }, - { - code:0x1FE8 - ,mapping: [ 0x1FE0 ] - }, - { - code:0x1FE9 - ,mapping: [ 0x1FE1 ] - }, - { - code:0x1FEA - ,mapping: [ 0x1F7A ] - }, - { - code:0x1FEB - ,mapping: [ 0x1F7B ] - }, - { - code:0x1FEC - ,mapping: [ 0x1FE5 ] - }, - { - code:0x1FF2 - ,mapping: [ 0x1F7C, 0x03B9 ] - }, - { - code:0x1FF3 - ,mapping: [ 0x03C9, 0x03B9 ] - }, - { - code:0x1FF4 - ,mapping: [ 0x03CE, 0x03B9 ] - }, - { - code:0x1FF6 - ,mapping: [ 0x03C9, 0x0342 ] - }, - { - code:0x1FF7 - ,mapping: [ 0x03C9, 0x0342, 0x03B9 ] - }, - { - code:0x1FF8 - ,mapping: [ 0x1F78 ] - }, - { - code:0x1FF9 - ,mapping: [ 0x1F79 ] - }, - { - code:0x1FFA - ,mapping: [ 0x1F7C ] - }, - { - code:0x1FFB - ,mapping: [ 0x1F7D ] - }, - { - code:0x1FFC - ,mapping: [ 0x03C9, 0x03B9 ] - }, - { - code:0x2126 - ,mapping: [ 0x03C9 ] - }, - { - code:0x212A - ,mapping: [ 0x006B ] - }, - { - code:0x212B - ,mapping: [ 0x00E5 ] - }, - { - code:0x2132 - ,mapping: [ 0x214E ] - }, - { - code:0x2160 - ,mapping: [ 0x2170 ] - }, - { - code:0x2161 - ,mapping: [ 0x2171 ] - }, - { - code:0x2162 - ,mapping: [ 0x2172 ] - }, - { - code:0x2163 - ,mapping: [ 0x2173 ] - }, - { - code:0x2164 - ,mapping: [ 0x2174 ] - }, - { - code:0x2165 - ,mapping: [ 0x2175 ] - }, - { - code:0x2166 - ,mapping: [ 0x2176 ] - }, - { - code:0x2167 - ,mapping: [ 0x2177 ] - }, - { - code:0x2168 - ,mapping: [ 0x2178 ] - }, - { - code:0x2169 - ,mapping: [ 0x2179 ] - }, - { - code:0x216A - ,mapping: [ 0x217A ] - }, - { - code:0x216B - ,mapping: [ 0x217B ] - }, - { - code:0x216C - ,mapping: [ 0x217C ] - }, - { - code:0x216D - ,mapping: [ 0x217D ] - }, - { - code:0x216E - ,mapping: [ 0x217E ] - }, - { - code:0x216F - ,mapping: [ 0x217F ] - }, - { - code:0x2183 - ,mapping: [ 0x2184 ] - }, - { - code:0x24B6 - ,mapping: [ 0x24D0 ] - }, - { - code:0x24B7 - ,mapping: [ 0x24D1 ] - }, - { - code:0x24B8 - ,mapping: [ 0x24D2 ] - }, - { - code:0x24B9 - ,mapping: [ 0x24D3 ] - }, - { - code:0x24BA - ,mapping: [ 0x24D4 ] - }, - { - code:0x24BB - ,mapping: [ 0x24D5 ] - }, - { - code:0x24BC - ,mapping: [ 0x24D6 ] - }, - { - code:0x24BD - ,mapping: [ 0x24D7 ] - }, - { - code:0x24BE - ,mapping: [ 0x24D8 ] - }, - { - code:0x24BF - ,mapping: [ 0x24D9 ] - }, - { - code:0x24C0 - ,mapping: [ 0x24DA ] - }, - { - code:0x24C1 - ,mapping: [ 0x24DB ] - }, - { - code:0x24C2 - ,mapping: [ 0x24DC ] - }, - { - code:0x24C3 - ,mapping: [ 0x24DD ] - }, - { - code:0x24C4 - ,mapping: [ 0x24DE ] - }, - { - code:0x24C5 - ,mapping: [ 0x24DF ] - }, - { - code:0x24C6 - ,mapping: [ 0x24E0 ] - }, - { - code:0x24C7 - ,mapping: [ 0x24E1 ] - }, - { - code:0x24C8 - ,mapping: [ 0x24E2 ] - }, - { - code:0x24C9 - ,mapping: [ 0x24E3 ] - }, - { - code:0x24CA - ,mapping: [ 0x24E4 ] - }, - { - code:0x24CB - ,mapping: [ 0x24E5 ] - }, - { - code:0x24CC - ,mapping: [ 0x24E6 ] - }, - { - code:0x24CD - ,mapping: [ 0x24E7 ] - }, - { - code:0x24CE - ,mapping: [ 0x24E8 ] - }, - { - code:0x24CF - ,mapping: [ 0x24E9 ] - }, - { - code:0x2C00 - ,mapping: [ 0x2C30 ] - }, - { - code:0x2C01 - ,mapping: [ 0x2C31 ] - }, - { - code:0x2C02 - ,mapping: [ 0x2C32 ] - }, - { - code:0x2C03 - ,mapping: [ 0x2C33 ] - }, - { - code:0x2C04 - ,mapping: [ 0x2C34 ] - }, - { - code:0x2C05 - ,mapping: [ 0x2C35 ] - }, - { - code:0x2C06 - ,mapping: [ 0x2C36 ] - }, - { - code:0x2C07 - ,mapping: [ 0x2C37 ] - }, - { - code:0x2C08 - ,mapping: [ 0x2C38 ] - }, - { - code:0x2C09 - ,mapping: [ 0x2C39 ] - }, - { - code:0x2C0A - ,mapping: [ 0x2C3A ] - }, - { - code:0x2C0B - ,mapping: [ 0x2C3B ] - }, - { - code:0x2C0C - ,mapping: [ 0x2C3C ] - }, - { - code:0x2C0D - ,mapping: [ 0x2C3D ] - }, - { - code:0x2C0E - ,mapping: [ 0x2C3E ] - }, - { - code:0x2C0F - ,mapping: [ 0x2C3F ] - }, - { - code:0x2C10 - ,mapping: [ 0x2C40 ] - }, - { - code:0x2C11 - ,mapping: [ 0x2C41 ] - }, - { - code:0x2C12 - ,mapping: [ 0x2C42 ] - }, - { - code:0x2C13 - ,mapping: [ 0x2C43 ] - }, - { - code:0x2C14 - ,mapping: [ 0x2C44 ] - }, - { - code:0x2C15 - ,mapping: [ 0x2C45 ] - }, - { - code:0x2C16 - ,mapping: [ 0x2C46 ] - }, - { - code:0x2C17 - ,mapping: [ 0x2C47 ] - }, - { - code:0x2C18 - ,mapping: [ 0x2C48 ] - }, - { - code:0x2C19 - ,mapping: [ 0x2C49 ] - }, - { - code:0x2C1A - ,mapping: [ 0x2C4A ] - }, - { - code:0x2C1B - ,mapping: [ 0x2C4B ] - }, - { - code:0x2C1C - ,mapping: [ 0x2C4C ] - }, - { - code:0x2C1D - ,mapping: [ 0x2C4D ] - }, - { - code:0x2C1E - ,mapping: [ 0x2C4E ] - }, - { - code:0x2C1F - ,mapping: [ 0x2C4F ] - }, - { - code:0x2C20 - ,mapping: [ 0x2C50 ] - }, - { - code:0x2C21 - ,mapping: [ 0x2C51 ] - }, - { - code:0x2C22 - ,mapping: [ 0x2C52 ] - }, - { - code:0x2C23 - ,mapping: [ 0x2C53 ] - }, - { - code:0x2C24 - ,mapping: [ 0x2C54 ] - }, - { - code:0x2C25 - ,mapping: [ 0x2C55 ] - }, - { - code:0x2C26 - ,mapping: [ 0x2C56 ] - }, - { - code:0x2C27 - ,mapping: [ 0x2C57 ] - }, - { - code:0x2C28 - ,mapping: [ 0x2C58 ] - }, - { - code:0x2C29 - ,mapping: [ 0x2C59 ] - }, - { - code:0x2C2A - ,mapping: [ 0x2C5A ] - }, - { - code:0x2C2B - ,mapping: [ 0x2C5B ] - }, - { - code:0x2C2C - ,mapping: [ 0x2C5C ] - }, - { - code:0x2C2D - ,mapping: [ 0x2C5D ] - }, - { - code:0x2C2E - ,mapping: [ 0x2C5E ] - }, - { - code:0x2C60 - ,mapping: [ 0x2C61 ] - }, - { - code:0x2C62 - ,mapping: [ 0x026B ] - }, - { - code:0x2C63 - ,mapping: [ 0x1D7D ] - }, - { - code:0x2C64 - ,mapping: [ 0x027D ] - }, - { - code:0x2C67 - ,mapping: [ 0x2C68 ] - }, - { - code:0x2C69 - ,mapping: [ 0x2C6A ] - }, - { - code:0x2C6B - ,mapping: [ 0x2C6C ] - }, - { - code:0x2C75 - ,mapping: [ 0x2C76 ] - }, - { - code:0x2C80 - ,mapping: [ 0x2C81 ] - }, - { - code:0x2C82 - ,mapping: [ 0x2C83 ] - }, - { - code:0x2C84 - ,mapping: [ 0x2C85 ] - }, - { - code:0x2C86 - ,mapping: [ 0x2C87 ] - }, - { - code:0x2C88 - ,mapping: [ 0x2C89 ] - }, - { - code:0x2C8A - ,mapping: [ 0x2C8B ] - }, - { - code:0x2C8C - ,mapping: [ 0x2C8D ] - }, - { - code:0x2C8E - ,mapping: [ 0x2C8F ] - }, - { - code:0x2C90 - ,mapping: [ 0x2C91 ] - }, - { - code:0x2C92 - ,mapping: [ 0x2C93 ] - }, - { - code:0x2C94 - ,mapping: [ 0x2C95 ] - }, - { - code:0x2C96 - ,mapping: [ 0x2C97 ] - }, - { - code:0x2C98 - ,mapping: [ 0x2C99 ] - }, - { - code:0x2C9A - ,mapping: [ 0x2C9B ] - }, - { - code:0x2C9C - ,mapping: [ 0x2C9D ] - }, - { - code:0x2C9E - ,mapping: [ 0x2C9F ] - }, - { - code:0x2CA0 - ,mapping: [ 0x2CA1 ] - }, - { - code:0x2CA2 - ,mapping: [ 0x2CA3 ] - }, - { - code:0x2CA4 - ,mapping: [ 0x2CA5 ] - }, - { - code:0x2CA6 - ,mapping: [ 0x2CA7 ] - }, - { - code:0x2CA8 - ,mapping: [ 0x2CA9 ] - }, - { - code:0x2CAA - ,mapping: [ 0x2CAB ] - }, - { - code:0x2CAC - ,mapping: [ 0x2CAD ] - }, - { - code:0x2CAE - ,mapping: [ 0x2CAF ] - }, - { - code:0x2CB0 - ,mapping: [ 0x2CB1 ] - }, - { - code:0x2CB2 - ,mapping: [ 0x2CB3 ] - }, - { - code:0x2CB4 - ,mapping: [ 0x2CB5 ] - }, - { - code:0x2CB6 - ,mapping: [ 0x2CB7 ] - }, - { - code:0x2CB8 - ,mapping: [ 0x2CB9 ] - }, - { - code:0x2CBA - ,mapping: [ 0x2CBB ] - }, - { - code:0x2CBC - ,mapping: [ 0x2CBD ] - }, - { - code:0x2CBE - ,mapping: [ 0x2CBF ] - }, - { - code:0x2CC0 - ,mapping: [ 0x2CC1 ] - }, - { - code:0x2CC2 - ,mapping: [ 0x2CC3 ] - }, - { - code:0x2CC4 - ,mapping: [ 0x2CC5 ] - }, - { - code:0x2CC6 - ,mapping: [ 0x2CC7 ] - }, - { - code:0x2CC8 - ,mapping: [ 0x2CC9 ] - }, - { - code:0x2CCA - ,mapping: [ 0x2CCB ] - }, - { - code:0x2CCC - ,mapping: [ 0x2CCD ] - }, - { - code:0x2CCE - ,mapping: [ 0x2CCF ] - }, - { - code:0x2CD0 - ,mapping: [ 0x2CD1 ] - }, - { - code:0x2CD2 - ,mapping: [ 0x2CD3 ] - }, - { - code:0x2CD4 - ,mapping: [ 0x2CD5 ] - }, - { - code:0x2CD6 - ,mapping: [ 0x2CD7 ] - }, - { - code:0x2CD8 - ,mapping: [ 0x2CD9 ] - }, - { - code:0x2CDA - ,mapping: [ 0x2CDB ] - }, - { - code:0x2CDC - ,mapping: [ 0x2CDD ] - }, - { - code:0x2CDE - ,mapping: [ 0x2CDF ] - }, - { - code:0x2CE0 - ,mapping: [ 0x2CE1 ] - }, - { - code:0x2CE2 - ,mapping: [ 0x2CE3 ] - }, - { - code:0xFB00 - ,mapping: [ 0x0066, 0x0066 ] - }, - { - code:0xFB01 - ,mapping: [ 0x0066, 0x0069 ] - }, - { - code:0xFB02 - ,mapping: [ 0x0066, 0x006C ] - }, - { - code:0xFB03 - ,mapping: [ 0x0066, 0x0066, 0x0069 ] - }, - { - code:0xFB04 - ,mapping: [ 0x0066, 0x0066, 0x006C ] - }, - { - code:0xFB05 - ,mapping: [ 0x0073, 0x0074 ] - }, - { - code:0xFB06 - ,mapping: [ 0x0073, 0x0074 ] - }, - { - code:0xFB13 - ,mapping: [ 0x0574, 0x0576 ] - }, - { - code:0xFB14 - ,mapping: [ 0x0574, 0x0565 ] - }, - { - code:0xFB15 - ,mapping: [ 0x0574, 0x056B ] - }, - { - code:0xFB16 - ,mapping: [ 0x057E, 0x0576 ] - }, - { - code:0xFB17 - ,mapping: [ 0x0574, 0x056D ] - }, - { - code:0xFF21 - ,mapping: [ 0xFF41 ] - }, - { - code:0xFF22 - ,mapping: [ 0xFF42 ] - }, - { - code:0xFF23 - ,mapping: [ 0xFF43 ] - }, - { - code:0xFF24 - ,mapping: [ 0xFF44 ] - }, - { - code:0xFF25 - ,mapping: [ 0xFF45 ] - }, - { - code:0xFF26 - ,mapping: [ 0xFF46 ] - }, - { - code:0xFF27 - ,mapping: [ 0xFF47 ] - }, - { - code:0xFF28 - ,mapping: [ 0xFF48 ] - }, - { - code:0xFF29 - ,mapping: [ 0xFF49 ] - }, - { - code:0xFF2A - ,mapping: [ 0xFF4A ] - }, - { - code:0xFF2B - ,mapping: [ 0xFF4B ] - }, - { - code:0xFF2C - ,mapping: [ 0xFF4C ] - }, - { - code:0xFF2D - ,mapping: [ 0xFF4D ] - }, - { - code:0xFF2E - ,mapping: [ 0xFF4E ] - }, - { - code:0xFF2F - ,mapping: [ 0xFF4F ] - }, - { - code:0xFF30 - ,mapping: [ 0xFF50 ] - }, - { - code:0xFF31 - ,mapping: [ 0xFF51 ] - }, - { - code:0xFF32 - ,mapping: [ 0xFF52 ] - }, - { - code:0xFF33 - ,mapping: [ 0xFF53 ] - }, - { - code:0xFF34 - ,mapping: [ 0xFF54 ] - }, - { - code:0xFF35 - ,mapping: [ 0xFF55 ] - }, - { - code:0xFF36 - ,mapping: [ 0xFF56 ] - }, - { - code:0xFF37 - ,mapping: [ 0xFF57 ] - }, - { - code:0xFF38 - ,mapping: [ 0xFF58 ] - }, - { - code:0xFF39 - ,mapping: [ 0xFF59 ] - }, - { - code:0xFF3A - ,mapping: [ 0xFF5A ] - }, - { - code:0x10400 - ,mapping: [ 0x10428 ] - }, - { - code:0x10401 - ,mapping: [ 0x10429 ] - }, - { - code:0x10402 - ,mapping: [ 0x1042A ] - }, - { - code:0x10403 - ,mapping: [ 0x1042B ] - }, - { - code:0x10404 - ,mapping: [ 0x1042C ] - }, - { - code:0x10405 - ,mapping: [ 0x1042D ] - }, - { - code:0x10406 - ,mapping: [ 0x1042E ] - }, - { - code:0x10407 - ,mapping: [ 0x1042F ] - }, - { - code:0x10408 - ,mapping: [ 0x10430 ] - }, - { - code:0x10409 - ,mapping: [ 0x10431 ] - }, - { - code:0x1040A - ,mapping: [ 0x10432 ] - }, - { - code:0x1040B - ,mapping: [ 0x10433 ] - }, - { - code:0x1040C - ,mapping: [ 0x10434 ] - }, - { - code:0x1040D - ,mapping: [ 0x10435 ] - }, - { - code:0x1040E - ,mapping: [ 0x10436 ] - }, - { - code:0x1040F - ,mapping: [ 0x10437 ] - }, - { - code:0x10410 - ,mapping: [ 0x10438 ] - }, - { - code:0x10411 - ,mapping: [ 0x10439 ] - }, - { - code:0x10412 - ,mapping: [ 0x1043A ] - }, - { - code:0x10413 - ,mapping: [ 0x1043B ] - }, - { - code:0x10414 - ,mapping: [ 0x1043C ] - }, - { - code:0x10415 - ,mapping: [ 0x1043D ] - }, - { - code:0x10416 - ,mapping: [ 0x1043E ] - }, - { - code:0x10417 - ,mapping: [ 0x1043F ] - }, - { - code:0x10418 - ,mapping: [ 0x10440 ] - }, - { - code:0x10419 - ,mapping: [ 0x10441 ] - }, - { - code:0x1041A - ,mapping: [ 0x10442 ] - }, - { - code:0x1041B - ,mapping: [ 0x10443 ] - }, - { - code:0x1041C - ,mapping: [ 0x10444 ] - }, - { - code:0x1041D - ,mapping: [ 0x10445 ] - }, - { - code:0x1041E - ,mapping: [ 0x10446 ] - }, - { - code:0x1041F - ,mapping: [ 0x10447 ] - }, - { - code:0x10420 - ,mapping: [ 0x10448 ] - }, - { - code:0x10421 - ,mapping: [ 0x10449 ] - }, - { - code:0x10422 - ,mapping: [ 0x1044A ] - }, - { - code:0x10423 - ,mapping: [ 0x1044B ] - }, - { - code:0x10424 - ,mapping: [ 0x1044C ] - }, - { - code:0x10425 - ,mapping: [ 0x1044D ] - }, - { - code:0x10426 - ,mapping: [ 0x1044E ] - }, - { - code:0x10427 - ,mapping: [ 0x1044F ] - }, - -]; - -} - -static this() { - foreach(inout entry; internalUnicodeData) - unicodeData[entry.code] = &entry; - unicodeData.rehash; - - foreach(inout entry; internalSpecialCaseData) - specialCaseData[entry.code] = &entry; - specialCaseData.rehash; - - foreach(inout entry; internalFoldingCaseData) - foldingCaseData[entry.code] = &entry; - foldingCaseData.rehash; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/Util.d --- a/tango/tango/text/Util.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1421 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Apr 2004: Initial release - Dec 2006: South Seas version - - author: Kris - - - Placeholder for a variety of wee functions. These functions are all - templated with the intent of being used for arrays of char, wchar, - and dchar. However, they operate correctly with other array types - also. - - Several of these functions return an index value, representing where - some criteria was identified. When said criteria is not matched, the - functions return a value representing the array length provided to - them. That is, for those scenarios where C functions might typically - return -1 these functions return length instead. This operate nicely - with D slices: - --- - auto text = "happy:faces"; - - assert (text[0 .. locate (text, ':')] == "happy"); - - assert (text[0 .. locate (text, '!')] == "happy:faces"); - --- - - The contains() function is more convenient for trivial lookup - cases: - --- - if (contains ("fubar", '!')) - ... - --- - - Note that where some functions expect a uint as an argument, the - D template-matching algorithm will fail where an int is provided - instead. This is the typically the cause of "template not found" - errors. Also note that name overloading is not supported cleanly - by IFTI at this time, so is not applied here. - - - Applying the D "import alias" mechanism to this module is highly - recommended, in order to limit namespace pollution: - --- - import Util = tango.text.Util; - - auto s = Util.trim (" foo "); - --- - - - Function templates: - --- - trim (source) // trim whitespace - triml (source) // trim whitespace - trimr (source) // trim whitespace - strip (source, match) // trim elements - stripl (source, match) // trim left elements - stripr (source, match) // trim right elements - delimit (src, set) // split on delims - split (source, pattern) // split on pattern - splitLines (source); // split on lines - head (source, pattern, tail) // split to head & tail - join (source, postfix, output) // join text segments - repeat (source, count, output) // repeat source - replace (source, match, replacement) // replace chars - substitute (source, match, replacement) // replace patterns - contains (source, match) // has char? - containsPattern (source, match) // has pattern? - locate (source, match, start) // find char - locatePrior (source, match, start) // find prior char - locatePattern (source, match, start); // find pattern - locatePatternPrior (source, match, start); // find prior pattern - indexOf (s*, match, length) // low-level lookup - mismatch (s1*, s2*, length) // low-level compare - matching (s1*, s2*, length) // low-level compare - isSpace (match) // is whitespace? - layout (destination, format ...) // featherweight printf - lines (str) // foreach lines - quotes (str, set) // foreach quotes - delimiters (str, set) // foreach delimiters - patterns (str, pattern) // foreach patterns - --- - -*******************************************************************************/ - -module tango.text.Util; - -/****************************************************************************** - - Trim the provided array by stripping whitespace from both - ends. Returns a slice of the original content - -******************************************************************************/ - -T[] trim(T) (T[] source) -{ - T* head = source.ptr, - tail = head + source.length; - - while (head < tail && isSpace(*head)) - ++head; - - while (tail > head && isSpace(*(tail-1))) - --tail; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Trim the provided array by stripping whitespace from the left. - Returns a slice of the original content - -******************************************************************************/ - -T[] triml(T) (T[] source) -{ - T* head = source.ptr, - tail = head + source.length; - - while (head < tail && isSpace(*head)) - ++head; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Trim the provided array by stripping whitespace from the right. - Returns a slice of the original content - -******************************************************************************/ - -T[] trimr(T) (T[] source) -{ - T* head = source.ptr, - tail = head + source.length; - - while (tail > head && isSpace(*(tail-1))) - --tail; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Trim the given array by stripping the provided match from - both ends. Returns a slice of the original content - -******************************************************************************/ - -T[] strip(T) (T[] source, T match) -{ - T* head = source.ptr, - tail = head + source.length; - - while (head < tail && *head is match) - ++head; - - while (tail > head && *(tail-1) is match) - --tail; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Trim the given array by stripping the provided match from - the left hand side. Returns a slice of the original content - -******************************************************************************/ - -T[] stripl(T) (T[] source, T match) -{ - T* head = source.ptr, - tail = head + source.length; - - while (head < tail && *head is match) - ++head; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Chop the given source by stripping the provided match from - the left hand side. Returns a slice of the original content - -******************************************************************************/ - -T[] chopl(T) (T[] source, T[] match) -{ - if (match.length <= source.length) - if (source[0 .. match.length] == match) - source = source [match.length .. $]; - - return source; -} - -/****************************************************************************** - - Chop the given source by stripping the provided match from - the right hand side. Returns a slice of the original content - -******************************************************************************/ - -T[] chopr(T) (T[] source, T[] match) -{ - if (match.length <= source.length) - if (source[$-match.length .. $] == match) - source = source [0 .. $-match.length]; - - return source; -} - -/****************************************************************************** - - Trim the given array by stripping the provided match from - the right hand side. Returns a slice of the original content - -******************************************************************************/ - -T[] stripr(T) (T[] source, T match) -{ - T* head = source.ptr, - tail = head + source.length; - - while (tail > head && *(tail-1) is match) - --tail; - - return head [0 .. tail - head]; -} - -/****************************************************************************** - - Replace all instances of one element with another (in place) - -******************************************************************************/ - -T[] replace(T) (T[] source, T match, T replacement) -{ - foreach (inout c; source) - if (c is match) - c = replacement; - return source; -} - -/****************************************************************************** - - Replace all instances of one array with another - -******************************************************************************/ - -T[] substitute(T) (T[] source, T[] match, T[] replacement) -{ - T[] output; - - foreach (s; patterns (source, match, replacement)) - output ~= s; - return output; -} - -/****************************************************************************** - - Returns whether or not the provided array contains an instance - of the given match - -******************************************************************************/ - -bool contains(T) (T[] source, T match) -{ - return indexOf (source.ptr, match, source.length) != source.length; -} - -/****************************************************************************** - - Returns whether or not the provided array contains an instance - of the given match - -******************************************************************************/ - -bool containsPattern(T) (T[] source, T[] match) -{ - return locatePattern (source, match) != source.length; -} - -/****************************************************************************** - - Return the index of the next instance of 'match' starting at - position 'start', or source.length where there is no match. - - Parameter 'start' defaults to 0 - -******************************************************************************/ - -uint locate(T, U=uint) (T[] source, T match, U start=0) -{return locate!(T) (source, match, start);} - -uint locate(T) (T[] source, T match, uint start=0) -{ - if (start > source.length) - start = source.length; - - return indexOf (source.ptr+start, match, source.length - start) + start; -} - -/****************************************************************************** - - Return the index of the prior instance of 'match' starting - just before 'start', or source.length where there is no match. - - Parameter 'start' defaults to source.length - -******************************************************************************/ - -uint locatePrior(T, U=uint) (T[] source, T match, U start=uint.max) -{return locatePrior!(T)(source, match, start);} - -uint locatePrior(T) (T[] source, T match, uint start=uint.max) -{ - if (start > source.length) - start = source.length; - - while (start > 0) - if (source[--start] is match) - return start; - return source.length; -} - -/****************************************************************************** - - Return the index of the next instance of 'match' starting at - position 'start', or source.length where there is no match. - - Parameter 'start' defaults to 0 - -******************************************************************************/ - -uint locatePattern(T, U=uint) (T[] source, T[] match, U start=0) -{return locatePattern!(T) (source, match, start);} - -uint locatePattern(T) (T[] source, T[] match, uint start=0) -{ - uint idx; - T* p = source.ptr + start; - uint extent = source.length - start - match.length + 1; - - if (match.length && extent <= source.length) - while (extent) - if ((idx = indexOf (p, match[0], extent)) is extent) - break; - else - if (matching (p+=idx, match.ptr, match.length)) - return p - source.ptr; - else - { - extent -= (idx+1); - ++p; - } - - return source.length; -} - -/****************************************************************************** - - Return the index of the prior instance of 'match' starting - just before 'start', or source.length where there is no match. - - Parameter 'start' defaults to source.length - -******************************************************************************/ - -uint locatePatternPrior(T, U=uint) (T[] source, T[] match, U start=uint.max) -{return locatePatternPrior!(T)(source, match, start);} - -uint locatePatternPrior(T) (T[] source, T[] match, uint start=uint.max) -{ - auto len = source.length; - - if (start > len) - start = len; - - if (match.length && match.length <= len) - while (start) - { - start = locatePrior (source, match[0], start); - if (start is len) - break; - else - if ((start + match.length) <= len) - if (matching (source.ptr+start, match.ptr, match.length)) - return start; - } - - return len; -} - -/****************************************************************************** - - Split the provided array on the first pattern instance, and - return the resultant head and tail. The pattern is excluded - from the two segments. - - Where a segment is not found, tail will be null and the return - value will be the original array. - -******************************************************************************/ - -T[] head(T) (T[] src, T[] pattern, out T[] tail) -{ - auto i = locatePattern (src, pattern); - if (i != src.length) - { - tail = src [i + pattern.length .. $]; - src = src [0 .. i]; - } - return src; -} - -/****************************************************************************** - - Split the provided array on the last pattern instance, and - return the resultant head and tail. The pattern is excluded - from the two segments. - - Where a segment is not found, head will be null and the return - value will be the original array. - -******************************************************************************/ - -T[] tail(T) (T[] src, T[] pattern, out T[] head) -{ - auto i = locatePatternPrior (src, pattern); - if (i != src.length) - { - head = src [0 .. i]; - src = src [i + pattern.length .. $]; - } - return src; -} - -/****************************************************************************** - - Split the provided array wherever a delimiter-set instance is - found, and return the resultant segments. The delimiters are - excluded from each of the segments. Note that delimiters are - matched as a set of alternates rather than as a pattern. - - Splitting on a single delimiter is considerably faster than - splitting upon a set of alternatives - -******************************************************************************/ - -T[][] delimit(T) (T[] src, T[] set) -{ - T[][] result; - - foreach (segment; delimiters (src, set)) - result ~= segment; - return result; -} - -/****************************************************************************** - - Split the provided array wherever a pattern instance is - found, and return the resultant segments. The pattern is - excluded from each of the segments. - -******************************************************************************/ - -T[][] split(T) (T[] src, T[] pattern) -{ - T[][] result; - - foreach (segment; patterns (src, pattern)) - result ~= segment; - return result; -} - -/****************************************************************************** - - Convert text into a set of lines, where each line is identified - by a \n or \r\n combination. The line terminator is stripped from - each resultant array - -******************************************************************************/ - -T[][] splitLines(T) (T[] src) -{ - int count; - - foreach (line; lines (src)) - ++count; - - T[][] result = new T[][count]; - - count = 0; - foreach (line; lines (src)) - result [count++] = line; - - return result; -} - -/****************************************************************************** - - Combine a series of text segments together, each appended with an - optional postfix pattern. An optional output buffer can be provided - to avoid heap activity - it should be large enough to contain the - entire output, otherwise the heap will be used instead. - - Returns a valid slice of the output, containing the concatenated - text. - -******************************************************************************/ - -T[] join(T) (T[][] src, T[] postfix=null, T[] dst=null) -{ - uint len = src.length * postfix.length; - - foreach (segment; src) - len += segment.length; - - if (dst.length < len) - dst.length = len; - - T* p = dst.ptr; - foreach (segment; src) - { - p[0 .. segment.length] = segment; - p += segment.length; - p[0 .. postfix.length] = postfix; - p += postfix.length; - } - - // remove trailing seperator - if (len) - len -= postfix.length; - return dst [0 .. len]; -} - -/****************************************************************************** - - Combine a series of text segments together, each appended with an - optional postfix pattern. An optional output buffer can be provided - to avoid heap activity - it should be large enough to contain the - entire output, otherwise the heap will be used instead. - - Returns a valid slice of the output, containing the concatenated - text. - -******************************************************************************/ - -T[] repeat(T, U=uint) (T[] src, U count, T[] dst=null) -{return repeat!(T)(src, count, dst);} - -T[] repeat(T) (T[] src, uint count, T[] dst=null) -{ - uint len = src.length * count; - if (len is 0) - return null; - - if (dst.length < len) - dst.length = len; - - for (auto p = dst.ptr; count--; p += src.length) - p[0 .. src.length] = src; - - return dst [0 .. len]; -} - -/****************************************************************************** - - Is the argument a whitespace character? - -******************************************************************************/ - -bool isSpace(T) (T c) -{ - static if (T.sizeof is 1) - return (c <= 32 && (c is ' ' | c is '\t' | c is '\r' | c is '\n' | c is '\f' | c is '\v')); - else - return (c <= 32 && (c is ' ' | c is '\t' | c is '\r' | c is '\n' | c is '\f' | c is '\v')) || (c is '\u2028' | c is '\u2029'); -} - -/****************************************************************************** - - Return whether or not the two arrays have matching content - -******************************************************************************/ - -bool matching(T, U=uint) (T* s1, T* s2, U length) -{return matching!(T) (s1, s2, length);} - -bool matching(T) (T* s1, T* s2, uint length) -{ - return mismatch(s1, s2, length) is length; -} - -/****************************************************************************** - - Returns the index of the first match in str, failing once - length is reached. Note that we return 'length' for failure - and a 0-based index on success - -******************************************************************************/ - -uint indexOf(T, U=uint) (T* str, T match, U length) -{return indexOf!(T) (str, match, length);} - -uint indexOf(T) (T* str, T match, uint length) -{ - version (D_InlineAsm_X86) - { - static if (T.sizeof == 1) - { - asm { - mov EDI, str; - mov ECX, length; - movzx EAX, match; - mov ESI, ECX; - and ESI, ESI; - jz end; - - cld; - repnz; - scasb; - jnz end; - sub ESI, ECX; - dec ESI; - end:; - mov EAX, ESI; - } - } - else static if (T.sizeof == 2) - { - asm { - mov EDI, str; - mov ECX, length; - movzx EAX, match; - mov ESI, ECX; - and ESI, ESI; - jz end; - - cld; - repnz; - scasw; - jnz end; - sub ESI, ECX; - dec ESI; - end:; - mov EAX, ESI; - } - } - else static if (T.sizeof == 4) - { - asm { - mov EDI, str; - mov ECX, length; - mov EAX, match; - mov ESI, ECX; - and ESI, ESI; - jz end; - - cld; - repnz; - scasd; - jnz end; - sub ESI, ECX; - dec ESI; - end:; - mov EAX, ESI; - } - } - else - { - auto len = length; - for (auto p=str-1; len--;) - if (*++p is match) - return p - str; - return length; - } - } - else - { - auto len = length; - for (auto p=str-1; len--;) - if (*++p is match) - return p - str; - return length; - } -} - -/****************************************************************************** - - Returns the index of a mismatch between s1 & s2, failing when - length is reached. Note that we return 'length' upon failure - (array content matches) and a 0-based index upon success. - - Use this as a faster opEquals (the assembler version). Also - provides the basis for a much faster opCmp, since the index - of the first mismatched character can be used to determine - the (greater or less than zero) return value - -******************************************************************************/ - -uint mismatch(T, U=uint) (T* s1, T* s2, U length) -{return mismatch!(T)(s1, s2, length);} - -uint mismatch(T) (T* s1, T* s2, uint length) -{ - version (D_InlineAsm_X86) - { - static if (T.sizeof == 1) - { - asm { - mov EDI, s1; - mov ESI, s2; - mov ECX, length; - mov EAX, ECX; - and EAX, EAX; - jz end; - - cld; - repz; - cmpsb; - jz end; - sub EAX, ECX; - dec EAX; - end:; - } - } - else static if (T.sizeof == 2) - { - asm { - mov EDI, s1; - mov ESI, s2; - mov ECX, length; - mov EAX, ECX; - and EAX, EAX; - jz end; - - cld; - repz; - cmpsw; - jz end; - sub EAX, ECX; - dec EAX; - sar ESI, 1; - end:; - } - } - else static if (T.sizeof == 4) - { - asm { - mov EDI, s1; - mov ESI, s2; - mov ECX, length; - mov EAX, ECX; - and EAX, EAX; - jz end; - - cld; - repz; - cmpsd; - jz end; - sub EAX, ECX; - dec EAX; - sar ESI, 2; - end:; - } - } - else - { - auto len = length; - for (auto p=s1-1; len--;) - if (*++p != *s2++) - return p - s1; - return length; - } - } - else - { - auto len = length; - for (auto p=s1-1; len--;) - if (*++p != *s2++) - return p - s1; - return length; - } -} - -/****************************************************************************** - - Freachable iterator to isolate lines. - - Converts text into a set of lines, where each line is identified - by a \n or \r\n combination. The line terminator is stripped from - each resultant array. - - --- - foreach (line; lines ("one\ntwo\nthree")) - ... - --- - -******************************************************************************/ - -LineFreach!(T) lines(T) (T[] src) -{ - LineFreach!(T) lines; - lines.src = src; - return lines; -} - -/****************************************************************************** - - Freachable iterator to isolate text elements. - - Splits the provided array wherever a delimiter-set instance is - found, and return the resultant segments. The delimiters are - excluded from each of the segments. Note that delimiters are - matched as a set of alternates rather than as a pattern. - - Splitting on a single delimiter is considerably faster than - splitting upon a set of alternatives. - - --- - foreach (segment; delimiters ("one,two;three", ",;")) - ... - --- - -******************************************************************************/ - -DelimFreach!(T) delimiters(T) (T[] src, T[] set) -{ - DelimFreach!(T) elements; - elements.set = set; - elements.src = src; - return elements; -} - -/****************************************************************************** - - Freachable iterator to isolate text elements. - - Split the provided array wherever a pattern instance is found, - and return the resultant segments. Pattern are excluded from - each of the segments, and an optional sub argument enables - replacement. - - --- - foreach (segment; patterns ("one, two, three", ", ")) - ... - --- - -******************************************************************************/ - -PatternFreach!(T) patterns(T) (T[] src, T[] pattern, T[] sub=null) -{ - PatternFreach!(T) elements; - elements.pattern = pattern; - elements.sub = sub; - elements.src = src; - return elements; -} - -/****************************************************************************** - - Freachable iterator to isolate optionally quoted text elements. - - As per elements(), but with the extension of being quote-aware; - the set of delimiters is ignored inside a pair of quotes. Note - that an unterminated quote will consume remaining content. - - --- - foreach (quote; quotes ("one two 'three four' five", " ")) - ... - --- - -******************************************************************************/ - -QuoteFreach!(T) quotes(T) (T[] src, T[] set) -{ - QuoteFreach!(T) quotes; - quotes.set = set; - quotes.src = src; - return quotes; -} - -/******************************************************************************* - - Arranges text strings in order, using indices to specify where - each particular argument should be positioned within the text. - This is handy for collating I18N components, or as a simplistic - and lightweight formatter. Indices range from zero through nine. - - --- - // write ordered text to the console - char[64] tmp; - - Cout (layout (tmp, "%1 is after %0", "zero", "one")).newline; - --- - -*******************************************************************************/ - -T[] layout(T) (T[] output, T[][] layout ...) -{ - static T[] badarg = "{index out of range}"; - static T[] toosmall = "{output buffer too small}"; - - int pos, - args; - bool state; - - args = layout.length - 1; - foreach (c; layout[0]) - { - if (state) - { - state = false; - if (c >= '0' && c <= '9') - { - uint index = c - '0'; - if (index < args) - { - T[] x = layout[index+1]; - - int limit = pos + x.length; - if (limit < output.length) - { - output [pos .. limit] = x; - pos = limit; - continue; - } - else - return toosmall; - } - else - return badarg; - } - } - else - if (c is '%') - { - state = true; - continue; - } - - if (pos < output.length) - { - output[pos] = c; - ++pos; - } - else - return toosmall; - } - - return output [0..pos]; -} - -/****************************************************************************** - - jhash() -- hash a variable-length key into a 32-bit value - - k : the key (the unaligned variable-length array of bytes) - len : the length of the key, counting by bytes - level : can be any 4-byte value - - Returns a 32-bit value. Every bit of the key affects every bit of - the return value. Every 1-bit and 2-bit delta achieves avalanche. - - About 4.3*len + 80 X86 instructions, with excellent pipelining - - The best hash table sizes are powers of 2. There is no need to do - mod a prime (mod is sooo slow!). If you need less than 32 bits, - use a bitmask. For example, if you need only 10 bits, do - - h = (h & hashmask(10)); - - In which case, the hash table should have hashsize(10) elements. - If you are hashing n strings (ub1 **)k, do it like this: - - for (i=0, h=0; i= 12) - { - a += *cast(uint *)(k+0); - b += *cast(uint *)(k+4); - c += *cast(uint *)(k+8); - - a -= b; a -= c; a ^= (c>>13); - b -= c; b -= a; b ^= (a<<8); - c -= a; c -= b; c ^= (b>>13); - a -= b; a -= c; a ^= (c>>12); - b -= c; b -= a; b ^= (a<<16); - c -= a; c -= b; c ^= (b>>5); - a -= b; a -= c; a ^= (c>>3); - b -= c; b -= a; b ^= (a<<10); - c -= a; c -= b; c ^= (b>>15); - k += 12; i -= 12; - } - - // handle the last 11 bytes - c += len; - switch (i) - { - case 11: c+=(cast(uint)k[10]<<24); - case 10: c+=(cast(uint)k[9]<<16); - case 9 : c+=(cast(uint)k[8]<<8); - case 8 : b+=(cast(uint)k[7]<<24); - case 7 : b+=(cast(uint)k[6]<<16); - case 6 : b+=(cast(uint)k[5]<<8); - case 5 : b+=(cast(uint)k[4]); - case 4 : a+=(cast(uint)k[3]<<24); - case 3 : a+=(cast(uint)k[2]<<16); - case 2 : a+=(cast(uint)k[1]<<8); - case 1 : a+=(cast(uint)k[0]); - default: - } - - a -= b; a -= c; a ^= (c>>13); - b -= c; b -= a; b ^= (a<<8); - c -= a; c -= b; c ^= (b>>13); - a -= b; a -= c; a ^= (c>>12); - b -= c; b -= a; b ^= (a<<16); - c -= a; c -= b; c ^= (b>>5); - a -= b; a -= c; a ^= (c>>3); - b -= c; b -= a; b ^= (a<<10); - c -= a; c -= b; c ^= (b>>15); - - return c; -} - -/// ditto -uint jhash (void[] x, uint c = 0) -{ - return jhash (cast(ubyte*) x.ptr, x.length, c); -} - - -/****************************************************************************** - - Helper struct for iterator lines() - -******************************************************************************/ - -private struct LineFreach(T) -{ - private T[] src; - - int opApply (int delegate (inout T[] line) dg) - { - uint ret, - pos, - mark; - T[] line; - - const T nl = '\n'; - const T cr = '\r'; - - while ((pos = locate (src, nl, mark)) < src.length) - { - auto end = pos; - if (end && src[end-1] is cr) - --end; - - line = src [mark .. end]; - if ((ret = dg (line)) != 0) - return ret; - mark = pos + 1; - } - - line = src [mark .. $]; - if (mark < src.length) - ret = dg (line); - - return ret; - } -} - -/****************************************************************************** - - Helper struct for iterator delimiters() - -******************************************************************************/ - -private struct DelimFreach(T) -{ - private T[] src; - private T[] set; - - int opApply (int delegate (inout T[] token) dg) - { - uint ret, - pos, - mark; - T[] token; - - // optimize for single delimiter case - if (set.length is 1) - while ((pos = locate (src, set[0], mark)) < src.length) - { - token = src [mark .. pos]; - if ((ret = dg (token)) != 0) - return ret; - mark = pos + 1; - } - else - if (set.length > 1) - foreach (i, elem; src) - if (contains (set, elem)) - { - token = src [mark .. i]; - if ((ret = dg (token)) != 0) - return ret; - mark = i + 1; - } - - token = src [mark .. $]; - if (mark < src.length) - ret = dg (token); - - return ret; - } -} - -/****************************************************************************** - - Helper struct for iterator patterns() - -******************************************************************************/ - -private struct PatternFreach(T) -{ - private T[] src, - sub, - pattern; - - int opApply (int delegate (inout T[] token) dg) - { - uint ret, - pos, - mark; - T[] token; - - // optimize for single-element pattern - if (pattern.length is 1) - while ((pos = locate (src, pattern[0], mark)) < src.length) - { - token = src [mark .. pos]; - if ((ret = dg(token)) != 0) - return ret; - if (sub.ptr) - if ((ret = dg(sub)) != 0) - return ret; - mark = pos + 1; - } - else - if (pattern.length > 1) - while ((pos = locatePattern (src, pattern, mark)) < src.length) - { - token = src [mark .. pos]; - if ((ret = dg(token)) != 0) - return ret; - if (sub.ptr) - if ((ret = dg(sub)) != 0) - return ret; - mark = pos + pattern.length; - } - - token = src [mark .. $]; - if (mark < src.length) - ret = dg (token); - - return ret; - } -} - -/****************************************************************************** - - Helper struct for iterator quotes() - -******************************************************************************/ - -private struct QuoteFreach(T) -{ - private T[] src; - private T[] set; - - int opApply (int delegate (inout T[] token) dg) - { - int ret, - mark; - T[] token; - - if (set.length) - for (uint i=0; i < src.length; ++i) - { - T c = src[i]; - if (c is '"' || c is '\'') - i = locate (src, c, i+1); - else - if (contains (set, c)) - { - token = src [mark .. i]; - if ((ret = dg (token)) != 0) - return ret; - mark = i + 1; - } - } - - token = src [mark .. $]; - if (mark < src.length) - ret = dg (token); - - return ret; - } -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ - //void main() {} - - unittest - { - char[64] tmp; - - assert (isSpace (' ') && !isSpace ('d')); - - assert (indexOf ("abc".ptr, 'a', 3) is 0); - assert (indexOf ("abc".ptr, 'b', 3) is 1); - assert (indexOf ("abc".ptr, 'c', 3) is 2); - assert (indexOf ("abc".ptr, 'd', 3) is 3); - - assert (indexOf ("abc"d.ptr, cast(dchar)'c', 3) is 2); - assert (indexOf ("abc"d.ptr, cast(dchar)'d', 3) is 3); - - assert (indexOf ("abc"w.ptr, cast(wchar)'c', 3) is 2); - assert (indexOf ("abc"w.ptr, cast(wchar)'d', 3) is 3); - - assert (mismatch ("abc".ptr, "abc".ptr, 3) is 3); - assert (mismatch ("abc".ptr, "abd".ptr, 3) is 2); - assert (mismatch ("abc".ptr, "acc".ptr, 3) is 1); - assert (mismatch ("abc".ptr, "ccc".ptr, 3) is 0); - - assert (mismatch ("abc"w.ptr, "abc"w.ptr, 3) is 3); - assert (mismatch ("abc"w.ptr, "acc"w.ptr, 3) is 1); - - assert (mismatch ("abc"d.ptr, "abc"d.ptr, 3) is 3); - assert (mismatch ("abc"d.ptr, "acc"d.ptr, 3) is 1); - - assert (matching ("abc".ptr, "abc".ptr, 3)); - assert (matching ("abc".ptr, "abb".ptr, 3) is false); - - assert (contains ("abc", 'a')); - assert (contains ("abc", 'b')); - assert (contains ("abc", 'c')); - assert (contains ("abc", 'd') is false); - - assert (containsPattern ("abc", "ab")); - assert (containsPattern ("abc", "bc")); - assert (containsPattern ("abc", "abc")); - assert (containsPattern ("abc", "zabc") is false); - assert (containsPattern ("abc", "abcd") is false); - assert (containsPattern ("abc", "za") is false); - assert (containsPattern ("abc", "cd") is false); - - assert (trim ("") == ""); - assert (trim (" abc ") == "abc"); - assert (trim (" ") == ""); - - assert (strip ("", '%') == ""); - assert (strip ("%abc%%%", '%') == "abc"); - assert (strip ("#####", '#') == ""); - assert (stripl ("#####", '#') == ""); - assert (stripl (" ###", ' ') == "###"); - assert (stripl ("#####", 's') == "#####"); - assert (stripr ("#####", '#') == ""); - assert (stripr ("### ", ' ') == "###"); - assert (stripr ("#####", 's') == "#####"); - - assert (replace ("abc".dup, 'b', ':') == "a:c"); - assert (substitute ("abc".dup, "bc", "x") == "ax"); - - assert (locate ("abc", 'c', 1) is 2); - - assert (locate ("abc", 'c') is 2); - assert (locate ("abc", 'a') is 0); - assert (locate ("abc", 'd') is 3); - assert (locate ("", 'c') is 0); - - assert (locatePrior ("abce", 'c') is 2); - assert (locatePrior ("abce", 'a') is 0); - assert (locatePrior ("abce", 'd') is 4); - assert (locatePrior ("abce", 'c', 3) is 2); - assert (locatePrior ("abce", 'c', 2) is 4); - assert (locatePrior ("", 'c') is 0); - - auto x = delimit ("::b", ":"); - assert (x.length is 3 && x[0] == "" && x[1] == "" && x[2] == "b"); - x = delimit ("a:bc:d", ":"); - assert (x.length is 3 && x[0] == "a" && x[1] == "bc" && x[2] == "d"); - x = delimit ("abcd", ":"); - assert (x.length is 1 && x[0] == "abcd"); - x = delimit ("abcd:", ":"); - assert (x.length is 1 && x[0] == "abcd"); - x = delimit ("a;b$c#d:e@f", ";:$#@"); - assert (x.length is 6 && x[0]=="a" && x[1]=="b" && x[2]=="c" && - x[3]=="d" && x[4]=="e" && x[5]=="f"); - - assert (locatePattern ("abcdefg", "") is 7); - assert (locatePattern ("abcdefg", "g") is 6); - assert (locatePattern ("abcdefg", "abcdefg") is 0); - assert (locatePattern ("abcdefg", "abcdefgx") is 7); - assert (locatePattern ("abcdefg", "cce") is 7); - assert (locatePattern ("abcdefg", "cde") is 2); - assert (locatePattern ("abcdefgcde", "cde", 3) is 7); - - assert (locatePatternPrior ("abcdefg", "") is 7); - assert (locatePatternPrior ("abcdefg", "cce") is 7); - assert (locatePatternPrior ("abcdefg", "cde") is 2); - assert (locatePatternPrior ("abcdefgcde", "cde", 6) is 2); - assert (locatePatternPrior ("abcdefgcde", "cde", 4) is 2); - assert (locatePatternPrior ("abcdefg", "abcdefgx") is 7); - - x = splitLines ("a\nb\n"); - assert (x.length is 2 && x[0] == "a" && x[1] == "b"); - x = splitLines ("a\r\n"); - assert (x.length is 1 && x[0] == "a"); - x = splitLines ("a"); - assert (x.length is 1 && x[0] == "a"); - x = splitLines (""); - assert (x.length is 0); - - char[][] q; - foreach (element; quotes ("1 'avcc cc ' 3", " ")) - q ~= element; - assert (q.length is 3 && q[0] == "1" && q[1] == "'avcc cc '" && q[2] == "3"); - - assert (layout (tmp, "%1,%%%c %0", "abc", "efg") == "efg,%c abc"); - - x = split ("one, two, three", ","); - assert (x.length is 3 && x[0] == "one" && x[1] == " two" && x[2] == " three"); - x = split ("one, two, three", ", "); - assert (x.length is 3 && x[0] == "one" && x[1] == "two" && x[2] == "three"); - x = split ("one, two, three", ",,"); - assert (x.length is 1 && x[0] == "one, two, three"); - - char[] h, t; - h = head ("one:two:three", ":", t); - assert (h == "one" && t == "two:three"); - h = head ("one:::two:three", ":::", t); - assert (h == "one" && t == "two:three"); - h = head ("one:two:three", "*", t); - assert (h == "one:two:three" && t is null); - - t = tail ("one:two:three", ":", h); - assert (h == "one:two" && t == "three"); - t = tail ("one:::two:three", ":::", h); - assert (h == "one" && t == "two:three"); - t = tail ("one:two:three", "*", h); - assert (t == "one:two:three" && h is null); - - assert (chopl("hello world", "hello ") == "world"); - assert (chopl("hello", "hello") == ""); - assert (chopl("hello world", " ") == "hello world"); - assert (chopl("hello world", "") == "hello world"); - - assert (chopr("hello world", " world") == "hello"); - assert (chopr("hello", "hello") == ""); - assert (chopr("hello world", " ") == "hello world"); - assert (chopr("hello world", "") == "hello world"); - - char[][] foo = ["one", "two", "three"]; - auto j = join (foo); - assert (j == "onetwothree"); - j = join (foo, ", "); - assert (j == "one, two, three"); - j = join (foo, " ", tmp); - assert (j == "one two three"); - assert (j.ptr is tmp.ptr); - - assert (repeat ("abc", 0) == ""); - assert (repeat ("abc", 1) == "abc"); - assert (repeat ("abc", 2) == "abcabc"); - assert (repeat ("abc", 4) == "abcabcabcabc"); - assert (repeat ("", 4) == ""); - char[10] rep; - assert (repeat ("abc", 0, rep) == ""); - assert (repeat ("abc", 1, rep) == "abc"); - assert (repeat ("abc", 2, rep) == "abcabc"); - assert (repeat ("", 4, rep) == ""); - } -} - - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Float.d --- a/tango/tango/text/convert/Float.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,520 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2005 - - author: Kris - - A set of functions for converting between string and floating- - point values. - - Applying the D "import alias" mechanism to this module is highly - recommended, in order to limit namespace pollution: - --- - import Float = tango.text.convert.Float; - - auto f = Float.parse ("3.14159"); - --- - -*******************************************************************************/ - -module tango.text.convert.Float; - -private import tango.core.Exception; - -private import Integer = tango.text.convert.Integer; - -private alias real NumType; - -private extern (C) NumType log10l(NumType x); - -/****************************************************************************** - - Constants - -******************************************************************************/ - -private enum -{ - Dec = 2, // default decimal places - Exp = 10, // default switch to scientific notation -} - -/****************************************************************************** - - Convert a formatted string of digits to a floating-point - number. Throws an exception where the input text is not - parsable in its entirety. - -******************************************************************************/ - -NumType toFloat(T) (T[] src) -{ - uint len; - - auto x = parse (src, &len); - if (len < src.length) - throw new IllegalArgumentException ("Float.toFloat :: invalid number"); - return x; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -char[] toString (NumType d, uint decimals=Dec, int e=Exp) -{ - char[64] tmp = void; - - return format (tmp, d, decimals, e).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -wchar[] toString16 (NumType d, uint decimals=Dec, int e=Exp) -{ - wchar[64] tmp = void; - - return format (tmp, d, decimals, e).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -dchar[] toString32 (NumType d, uint decimals=Dec, int e=Exp) -{ - dchar[64] tmp = void; - - return format (tmp, d, decimals, e).dup; -} - -/****************************************************************************** - - Convert a float to a string. This produces pretty good results - for the most part, though one should use David Gay's dtoa package - for best accuracy. - - Note that the approach first normalizes a base10 mantissa, then - pulls digits from the left side whilst emitting them (rightward) - to the output. - - The e parameter controls the number of exponent places emitted, - and can thus control where the output switches to the scientific - notation. For example, setting e=2 for 0.01 or 10.0 would result - in normal output. Whereas setting e=1 would result in both those - values being rendered in scientific notation instead. Setting e - to 0 forces that notation on for everything. - - TODO: this should be replaced, as it is not sufficiently accurate - -******************************************************************************/ - -T[] format(T, D=double, U=uint) (T[] dst, D x, U decimals=Dec, int e=Exp) -{return format!(T)(dst, x, decimals, e);} - -T[] format(T) (T[] dst, NumType x, uint decimals=Dec, int e=Exp) -{ - static T[] inf = "-inf"; - static T[] nan = "-nan"; - - // extract the sign bit - static bool signed (NumType x) - { - static if (NumType.sizeof is 4) - return ((*cast(uint *)&x) & 0x8000_0000) != 0; - - static if (NumType.sizeof is 8) - return ((*cast(ulong *)&x) & 0x8000_0000_0000_0000) != 0; - else - { - auto pe = cast(ubyte *)&x; - return (pe[9] & 0x80) != 0; - } - } - - // strip digits from the left of a normalized base-10 number - static int toDigit (inout NumType v, inout int count) - { - int digit; - - // Don't exceed max digits storable in a real - // (-1 because the last digit is not always storable) - if (--count <= 0) - digit = 0; - else - { - // remove leading digit, and bump - digit = cast(int) v; - v = (v - digit) * 10.0; - } - return digit + '0'; - } - - // extract the sign - bool sign = signed (x); - if (sign) - x = -x; - - if (x !<>= x) - return sign ? nan : nan[1..$]; - - if (x is x.infinity) - return sign ? inf : inf[1..$]; - - // assume no exponent - int exp = 0; - - // don't scale if zero - if (x > 0.0) - { - // extract base10 exponent - exp = cast(int) log10l (x); - - // round up a bit - auto d = decimals; - if (exp < 0) - d -= exp; - x += 0.5 / pow10 (d); - - // extract base10 exponent - exp = cast(int) log10l (x); - - // normalize base10 mantissa (0 < m < 10) - int len = exp; - if (exp < 0) - x *= pow10 (len = -exp); - else - x /= pow10 (exp); - - // switch to short display if not enough space - if (len >= e) - e = 0; - } - - T* p = dst.ptr; - int count = NumType.dig; - - // emit sign - if (sign) - *p++ = '-'; - - // are we doing +/-exp format? - if (e is 0) - { - assert (dst.length > decimals + 7); - - // emit first digit, and decimal point - *p++ = toDigit (x, count); - if (decimals) - { - *p++ = '.'; - if (exp < 0) - count += exp; - } - - // emit rest of mantissa - while (decimals-- > 0) - *p++ = toDigit (x, count); - - // emit exponent, if non zero - if (exp) - { - *p++ = 'e'; - *p++ = (exp < 0) ? '-' : '+'; - if (exp < 0) - exp = -exp; - - if (exp >= 100) - { - *p++ = (exp/100) + '0'; - exp %= 100; - } - - *p++ = (exp/10) + '0'; - *p++ = (exp%10) + '0'; - } - } - else - { - assert (dst.length >= (((exp < 0) ? 0 : exp) + decimals + 1)); - - // if fraction only, emit a leading zero - if (exp < 0) - *p++ = '0'; - else - // emit all digits to the left of point - for (; exp >= 0; --exp) - *p++ = toDigit (x, count); - - // emit point - if (decimals) - *p++ = '.'; - - // emit leading fractional zeros? - for (++exp; exp < 0 && decimals > 0; --decimals, ++exp) - *p++ = '0'; - - // output remaining digits, if any. Trailing - // zeros are also returned from toDigit() - while (decimals-- > 0) - *p++ = toDigit (x, count); - } - - return dst [0..(p - dst.ptr)]; -} - - -/****************************************************************************** - - Convert a formatted string of digits to a floating-point number. - Good for general use, but use David Gay's dtoa package if serious - rounding adjustments should be applied. - -******************************************************************************/ - -NumType parse(T) (T[] src, uint* ate=null) -{ - T c; - T* p; - int exp; - bool sign; - uint radix; - NumType value = 0.0; - - // remove leading space, and sign - c = *(p = src.ptr + Integer.trim (src, sign, radix)); - - // handle non-decimal representations - if (radix != 10) - { - long v = Integer.parse (src, radix, ate); - return *cast(NumType*) &v; - } - - // set begin and end checks - auto begin = p; - auto end = src.ptr + src.length; - - // read leading digits; note that leading - // zeros are simply multiplied away - while (c >= '0' && c <= '9' && p < end) - { - value = value * 10 + (c - '0'); - c = *++p; - } - - // gobble up the point - if (c is '.' && p < end) - c = *++p; - - // read fractional digits; note that we accumulate - // all digits ... very long numbers impact accuracy - // to a degree, but perhaps not as much as one might - // expect. A prior version limited the digit count, - // but did not show marked improvement. For maximum - // accuracy when reading and writing, use David Gay's - // dtoa package instead - while (c >= '0' && c <= '9' && p < end) - { - value = value * 10 + (c - '0'); - c = *++p; - --exp; - } - - // did we get something? - if (value) - { - // parse base10 exponent? - if ((c is 'e' || c is 'E') && p < end ) - { - uint eaten; - exp += Integer.parse (src[(++p-src.ptr) .. $], 0, &eaten); - p += eaten; - } - - // adjust mantissa; note that the exponent has - // already been adjusted for fractional digits - if (exp < 0) - value /= pow10 (-exp); - else - value *= pow10 (exp); - } - else - // was it was nan instead? - if (p is begin) - if (p[0..3] == "inf") - p += 3, value = value.infinity; - else - if (p[0..3] == "nan") - p += 3, value = value.nan; - - // set parse length, and return value - if (ate) - *ate = p - src.ptr; - - if (sign) - value = -value; - return value; -} - -/****************************************************************************** - - Truncate trailing '0' and '.' from a string, such that 200.000 - becomes 200, and 20.10 becomes 20.1 - - Returns a potentially shorter slice of what you give it. - -******************************************************************************/ - -T[] truncate(T) (T[] s) -{ - auto tmp = s; - auto i = tmp.length; - foreach (idx, c; tmp) - if (c is '.') - while (--i >= idx) - if (tmp[i] != '0') - { - if (tmp[i] is '.') - --i; - s = tmp [0 .. i+1]; - while (--i >= idx) - if (tmp[i] is 'e') - return tmp; - break; - } - return s; -} - -/****************************************************************************** - - Internal function to convert an exponent specifier to a floating - point value. - -******************************************************************************/ - -private NumType pow10 (uint exp) -{ - static NumType[] Powers = - [ - 1.0e1L, - 1.0e2L, - 1.0e4L, - 1.0e8L, - 1.0e16L, - 1.0e32L, - 1.0e64L, - 1.0e128L, - 1.0e256L, - ]; - - if (exp >= 512) - throw new IllegalArgumentException ("Float.pow10 :: exponent too large"); - - NumType mult = 1.0; - foreach (NumType power; Powers) - { - if (exp & 1) - mult *= power; - if ((exp >>= 1) is 0) - break; - } - return mult; -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ - unittest - { - char[64] tmp; - - auto f = parse ("nan"); - assert (format(tmp, f) == "nan"); - f = parse ("inf"); - assert (format(tmp, f) == "inf"); - f = parse ("-nan"); - assert (format(tmp, f) == "-nan"); - f = parse (" -inf"); - assert (format(tmp, f) == "-inf"); - - assert (format (tmp, 3.14159, 6) == "3.141590"); - assert (format (tmp, 3.14159, 4) == "3.1416"); - assert (parse ("3.5") == 3.5); - assert (format(tmp, parse ("3.14159"), 6) == "3.141590"); - } -} - - -debug (Float) -{ - import tango.io.Console; - - void main() - { - char[20] tmp; - - Cout (format(tmp, 1)).newline; - Cout (format(tmp, 0)).newline; - Cout (format(tmp, 0.000001)).newline; - - Cout (format(tmp, 3.14159, 6, 0)).newline; - Cout (format(tmp, 3e100, 6, 3)).newline; - Cout (format(tmp, 314159, 6)).newline; - Cout (format(tmp, 314159123213, 6, 15)).newline; - Cout (format(tmp, 3.14159, 6, 2)).newline; - Cout (format(tmp, 3.14159, 6, 2)).newline; - Cout (format(tmp, 0.00003333, 6, 2)).newline; - Cout (format(tmp, 0.00333333, 6, 3)).newline; - Cout (format(tmp, 0.03333333, 6, 2)).newline; - Cout.newline; - - Cout (format(tmp, -3.14159, 6, 0)).newline; - Cout (format(tmp, -3e100, 6, 3)).newline; - Cout (format(tmp, -314159, 6)).newline; - Cout (format(tmp, -314159123213, 6, 15)).newline; - Cout (format(tmp, -3.14159, 6, 2)).newline; - Cout (format(tmp, -3.14159, 6, 2)).newline; - Cout (format(tmp, -0.00003333, 6, 2)).newline; - Cout (format(tmp, -0.00333333, 6, 3)).newline; - Cout (format(tmp, -0.03333333, 6, 2)).newline; - Cout.newline; - - Cout (truncate(format(tmp, 30, 6))).newline; - Cout (truncate(format(tmp, 3.14159, 6, 0))).newline; - Cout (truncate(format(tmp, 3e100, 6, 3))).newline; - Cout (truncate(format(tmp, 314159, 6))).newline; - Cout (truncate(format(tmp, 314159123213, 6, 15))).newline; - Cout (truncate(format(tmp, 3.14159, 6, 2))).newline; - Cout (truncate(format(tmp, 3.14159, 6, 2))).newline; - Cout (truncate(format(tmp, 0.00003333, 6, 2))).newline; - Cout (truncate(format(tmp, 0.00333333, 6, 3))).newline; - Cout (truncate(format(tmp, 0.03333333, 6, 2))).newline; - - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Format.d --- a/tango/tango/text/convert/Format.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,74 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Sep 2007: Initial release - version: Nov 2007: Added stream wrappers - - author: Kris - -*******************************************************************************/ - -module tango.text.convert.Format; - -private import tango.io.model.IConduit; - -private import tango.text.convert.Layout; - -/****************************************************************************** - - Constructs a global utf8 instance of Layout - -******************************************************************************/ - -public Layout!(char) Format; - -static this() -{ - Format = new Layout!(char); -} - -/****************************************************************************** - - Global function to format into a stream - -******************************************************************************/ - -deprecated void format (OutputStream output, char[] fmt, ...) -{ - Format.convert ((char[] s){return output.write(s);}, _arguments, _argptr, fmt); -} - -/****************************************************************************** - - Global function to format into a stream, and add a newline - -******************************************************************************/ - -deprecated void formatln (OutputStream output, char[] fmt, ...) -{ - version (Win32) - const char[] Eol = "\r\n"; - else - const char[] Eol = "\n"; - - Format.convert ((char[] s){return output.write(s);}, _arguments, _argptr, fmt); - output.write (Eol); -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (Format) -{ - import tango.io.Console; - - void main() - { - formatln (Cout.stream, "hello {}", "world"); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Integer.d --- a/tango/tango/text/convert/Integer.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,598 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Nov 2005 - - author: Kris - - A set of functions for converting between string and integer - values. - - Applying the D "import alias" mechanism to this module is highly - recommended, in order to limit namespace pollution: - --- - import Integer = tango.text.convert.Integer; - - auto i = Integer.parse ("32767"); - --- - -*******************************************************************************/ - -module tango.text.convert.Integer; - -private import tango.core.Exception; - -/****************************************************************************** - - Style identifiers - -******************************************************************************/ - -enum Style -{ - Signed = 'd', /// signed decimal - Binary = 'b', /// binary output - Octal = 'o', /// octal output - Hex = 'x', /// lowercase hexadecimal - HexUpper = 'X', /// uppercase hexadecimal - Unsigned = 'u', /// unsigned integer -} - -/****************************************************************************** - - Style flags - -******************************************************************************/ - -enum Flags -{ - None = 0x00, /// no flags - Prefix = 0x01, /// prefix value with type - Zero = 0x02, /// prefix value with zeroes - Plus = 0x04, /// prefix decimal with '+' - Space = 0x08, /// prefix decimal with space - Throw = 0x10, /// throw on output truncation -} - -/****************************************************************************** - - Parse an integer value from the provided 'digits' string. - - The string is inspected for a sign and an optional radix - prefix. A radix may be provided as an argument instead, - whereupon it must match the prefix (where present). When - radix is set to zero, conversion will default to decimal. - - Throws an exception where the input text is not parsable - in its entirety. - -******************************************************************************/ - -int toInt(T, U=uint) (T[] digits, U radix=0) -{return toInt!(T)(digits, radix);} - -int toInt(T) (T[] digits, uint radix=0) -{ - auto x = toLong (digits, radix); - if (x > int.max) - throw new IllegalArgumentException ("Integer.toInt :: integer overflow"); - return cast(int) x; -} - -/****************************************************************************** - - Parse an integer value from the provided 'digits' string. - - The string is inspected for a sign and an optional radix - prefix. A radix may be provided as an argument instead, - whereupon it must match the prefix (where present). When - radix is set to zero, conversion will default to decimal. - - Throws an exception where the input text is not parsable - in its entirety. - -******************************************************************************/ - -long toLong(T, U=uint) (T[] digits, U radix=0) -{return toLong!(T)(digits, radix);} - -long toLong(T) (T[] digits, uint radix=0) -{ - uint len; - - auto x = parse (digits, radix, &len); - if (len < digits.length) - throw new IllegalArgumentException ("Integer.toLong :: invalid literal"); - return x; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -char[] toString (long i, Style t=Style.Signed, Flags f=Flags.None) -{ - char[66] tmp = void; - - return format (tmp, i, t, f).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -wchar[] toString16 (long i, Style t=Style.Signed, Flags f=Flags.None) -{ - wchar[66] tmp = void; - - return format (tmp, i, t, f).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -dchar[] toString32 (long i, Style t=Style.Signed, Flags f=Flags.None) -{ - dchar[66] tmp = void; - - return format (tmp, i, t, f).dup; -} - -/******************************************************************************* - - Style numeric values into the provided output buffer. The - following types are supported: - - Unsigned - unsigned decimal - Signed - signed decimal - Octal - octal - Hex - lowercase hexadecimal - HexUpper - uppercase hexadecimal - Binary - binary - - Modifiers supported include: - - Prefix - prefix the conversion with a type identifier - Plus - prefix positive decimals with a '+' - Space - prefix positive decimals with one space - Zero - left-pad the number with zeros - Throw - throw an exception when output would be truncated - - The provided 'dst' buffer should be sufficiently large - enough to house the output. A 64-element array is often - the maximum required (for a padded binary 64-bit string) - -*******************************************************************************/ - -T[] format(T, U=long) (T[] dst, U i, Style fmt=Style.Signed, Flags flags=Flags.None) -{return format!(T)(dst, i, fmt, flags);} - -T[] format(T) (T[] dst, long i, Style fmt=Style.Signed, Flags flags=Flags.None) -{ - T[] prefix; - auto len = dst.length; - - static T[] error (T[] msg) - { - if (1 & Flags.Throw) - throw new IllegalArgumentException ("Integer.format :: invalid arguments"); - return msg; - } - - // must have some buffer space to operate within! - if (len) - { - uint radix; - T[] numbers = "0123456789abcdef"; - - // pre-conversion setup - switch (cast(byte) fmt) - { - case 'd': - case 'D': - if (i < 0) - { - prefix = "-"; - i = -i; - } - else - if (flags & Flags.Space) - prefix = " "; - else - if (flags & Flags.Plus) - prefix = "+"; - // fall through! - case 'u': - case 'U': - radix = 10; - break; - - case 'b': - case 'B': - radix = 2; - if (flags & Flags.Prefix) - prefix = "0b"; - break; - - case 'o': - case 'O': - radix = 8; - if (flags & Flags.Prefix) - prefix = "0o"; - break; - - case 'x': - radix = 16; - if (flags & Flags.Prefix) - prefix = "0x"; - break; - - case 'X': - radix = 16; - numbers = "0123456789ABCDEF"; - if (flags & Flags.Prefix) - prefix = "0X"; - break; - - default: - return error (cast(T[])"{unknown format '"~cast(T)fmt~"'}"); - } - - // convert number to text - T* p = dst.ptr + len; - if (uint.max >= cast(ulong) i) - { - uint v = cast (uint) i; - do { - *--p = numbers[v % radix]; - } while ((v /= radix) && --len); - } - else - { - ulong v = cast (ulong) i; - do { - *--p = numbers[cast(uint) (v % radix)]; - } while ((v /= radix) && --len); - } - } - - // are we about to overflow? - if (len > prefix.length) - { - len -= prefix.length + 1; - - // prefix number with zeros? - if (flags & Flags.Zero) - { - dst [prefix.length .. len + prefix.length] = '0'; - len = 0; - } - - // write optional prefix string ... - dst [len .. len + prefix.length] = prefix[]; - } - else - return error ("{output width too small}"); - - // return slice of provided output buffer - return dst [len .. $]; -} - - -/****************************************************************************** - - Parse an integer value from the provided 'digits' string. - - The string is inspected for a sign and an optional radix - prefix. A radix may be provided as an argument instead, - whereupon it must match the prefix (where present). When - radix is set to zero, conversion will default to decimal. - - A non-null 'ate' will return the number of characters used - to construct the returned value. - -******************************************************************************/ - -long parse(T, U=uint) (T[] digits, U radix=0, uint* ate=null) -{return parse!(T)(digits, radix, ate);} - -long parse(T) (T[] digits, uint radix=0, uint* ate=null) -{ - bool sign; - - auto eaten = trim (digits, sign, radix); - auto value = convert (digits[eaten..$], radix, ate); - - if (ate) - *ate += eaten; - - return cast(long) (sign ? -value : value); -} - -/****************************************************************************** - - Convert the provided 'digits' into an integer value, - without checking for a sign or radix. The radix defaults - to decimal (10). - - Returns the value and updates 'ate' with the number of - characters consumed. - -******************************************************************************/ - -ulong convert(T, U=uint) (T[] digits, U radix=10, uint* ate=null) -{return convert!(T)(digits, radix, ate);} - -ulong convert(T) (T[] digits, uint radix=10, uint* ate=null) -{ - uint eaten; - ulong value; - - foreach (c; digits) - { - if (c >= '0' && c <= '9') - {} - else - if (c >= 'a' && c <= 'f') - c -= 39; - else - if (c >= 'A' && c <= 'F') - c -= 7; - else - break; - - if ((c -= '0') < radix) - { - value = value * radix + c; - ++eaten; - } - else - break; - } - - if (ate) - *ate = eaten; - - return value; -} - - -/****************************************************************************** - - Strip leading whitespace, extract an optional +/- sign, - and an optional radix prefix. If the radix value matches - an optional prefix, or the radix is zero, the prefix will - be consumed and assigned. Where the radix is non zero and - does not match an explicit prefix, the latter will remain - unconsumed. Otherwise, radix will default to 10. - - Returns the number of characters consumed. - -******************************************************************************/ - -uint trim(T, U=uint) (T[] digits, inout bool sign, inout U radix) -{return trim!(T)(digits, sign, radix);} - -uint trim(T) (T[] digits, inout bool sign, inout uint radix) -{ - T c; - T* p = digits.ptr; - int len = digits.length; - - if (len) - { - // strip off whitespace and sign characters - for (c = *p; len; c = *++p, --len) - if (c is ' ' || c is '\t') - {} - else - if (c is '-') - sign = true; - else - if (c is '+') - sign = false; - else - break; - - // strip off a radix specifier also? - auto r = radix; - if (c is '0' && len > 1) - switch (*++p) - { - case 'x': - case 'X': - r = 16, ++p; - break; - - case 'b': - case 'B': - r = 2, ++p; - break; - - case 'o': - case 'O': - r = 8, ++p; - break; - - default: - break; - } - - // default the radix to 10 - if (r is 0) - radix = 10; - else - // explicit radix must match (optional) prefix - if (radix != r) - if (radix) - --p; - else - radix = r; - } - - // return number of characters eaten - return (p - digits.ptr); -} - - -/****************************************************************************** - - quick & dirty text-to-unsigned int converter. Use only when you - know what the content is, or use parse() or convert() instead. - - Return the parsed uint - -******************************************************************************/ - -uint atoi(T) (T[] s) -{ - uint value; - - foreach (c; s) - if (c >= '0' && c <= '9') - value = value * 10 + (c - '0'); - else - break; - return value; -} - - -/****************************************************************************** - - quick & dirty unsigned to text converter, where the provided output - must be large enough to house the result (10 digits in the largest - case). For mainstream use, consider utilizing format() instead. - - Returns a populated slice of the provided output - -******************************************************************************/ - -T[] itoa(T, U=uint) (T[] output, U value) -{return itoa!(T)(output, value);} - -T[] itoa(T) (T[] output, uint value) -{ - T* p = output.ptr + output.length; - - do { - *--p = value % 10 + '0'; - } while (value /= 10); - return output[p-output.ptr .. $]; -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ - unittest - { - char[64] tmp; - - assert (toInt("1") is 1); - assert (toLong("1") is 1); - assert (toInt("1", 10) is 1); - assert (toLong("1", 10) is 1); - - assert (atoi ("12345") is 12345); - assert (itoa (tmp, 12345) == "12345"); - - assert(parse( "0"w ) == 0 ); - assert(parse( "1"w ) == 1 ); - assert(parse( "-1"w ) == -1 ); - assert(parse( "+1"w ) == 1 ); - - // numerical limits - assert(parse( "-2147483648" ) == int.min ); - assert(parse( "2147483647" ) == int.max ); - assert(parse( "4294967295" ) == uint.max ); - - assert(parse( "-9223372036854775808" ) == long.min ); - assert(parse( "9223372036854775807" ) == long.max ); - assert(parse( "18446744073709551615" ) == ulong.max ); - - // hex - assert(parse( "a", 16) == 0x0A ); - assert(parse( "b", 16) == 0x0B ); - assert(parse( "c", 16) == 0x0C ); - assert(parse( "d", 16) == 0x0D ); - assert(parse( "e", 16) == 0x0E ); - assert(parse( "f", 16) == 0x0F ); - assert(parse( "A", 16) == 0x0A ); - assert(parse( "B", 16) == 0x0B ); - assert(parse( "C", 16) == 0x0C ); - assert(parse( "D", 16) == 0x0D ); - assert(parse( "E", 16) == 0x0E ); - assert(parse( "F", 16) == 0x0F ); - assert(parse( "FFFF", 16) == ushort.max ); - assert(parse( "ffffFFFF", 16) == uint.max ); - assert(parse( "ffffFFFFffffFFFF", 16u ) == ulong.max ); - // oct - assert(parse( "55", 8) == 055 ); - assert(parse( "100", 8) == 0100 ); - // bin - assert(parse( "10000", 2) == 0x10 ); - // trim - assert(parse( " \t20") == 20 ); - assert(parse( " \t-20") == -20 ); - assert(parse( "- \t 20") == -20 ); - // recognise radix prefix - assert(parse( "0xFFFF" ) == ushort.max ); - assert(parse( "0XffffFFFF" ) == uint.max ); - assert(parse( "0o55") == 055 ); - assert(parse( "0O55" ) == 055 ); - assert(parse( "0b10000") == 0x10 ); - assert(parse( "0B10000") == 0x10 ); - - // prefix tests - char[] str = "0x"; - assert(parse( str[0..1] ) == 0 ); - assert(parse("0x10", 10) == 0); - assert(parse("0b10", 10) == 0); - assert(parse("0o10", 10) == 0); - assert(parse("0b10") == 0b10); - assert(parse("0o10") == 010); - assert(parse("0b10", 2) == 0b10); - assert(parse("0o10", 8) == 010); - - // format tests - assert (format (tmp, 12345L) == "12345"); - assert (format (tmp, 0) == "0"); - assert (format (tmp, 0x10101L, Style.Hex) == "10101"); - assert (format (tmp, 0xfafaL, Style.Hex) == "fafa"); - assert (format (tmp, 0xfafaL, Style.HexUpper, Flags.Prefix) == "0XFAFA"); - assert (format (tmp, -1L, Style.HexUpper, Flags.Prefix) == "0XFFFFFFFFFFFFFFFF"); - assert (format (tmp, -101L) == "-101"); - assert (format (tmp, 101L, Style.Signed, Flags.Plus) == "+101"); - assert (format (tmp, 101L, Style.Signed, Flags.Space) == " 101"); - assert (format (tmp[0..8], 0x5L, Style.Binary, Flags.Prefix | Flags.Zero) == "0b000101"); - - assert (format (tmp[0..8], -1, Style.Binary, Flags.Prefix | Flags.Zero) == "{output width too small}"); - assert (format (tmp[0..2], 0x3, Style.Binary, Flags.Throw) == "11"); - assert (format (tmp[0..4], 0x3, Style.Binary, Flags.Prefix | Flags.Zero | Flags.Throw) == "0b11"); - assert (format (tmp[0..5], 0x3, Style.Binary, Flags.Prefix | Flags.Zero | Flags.Throw) == "0b011"); - assert (format (tmp[0..5], 0x3, Style.Binary, Flags.Zero | Flags.Throw) == "00011"); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Layout.d --- a/tango/tango/text/convert/Layout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,954 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 Kris. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: Kris - - This module provides a general-purpose formatting system to - convert values to text suitable for display. There is support - for alignment, justification, and common format specifiers for - numbers. - - Layout can be customized via configuring various handlers and - associated meta-date. This is utilized to plug in text.locale - for handling custom formats, date/time and culture-specific - conversions. - - The format notation is influenced by that used by the .NET - and ICU frameworks, rather than C-style printf or D-style - writef notation. - -******************************************************************************/ - -module tango.text.convert.Layout; - -private import tango.core.Exception; - -private import Unicode = tango.text.convert.Utf; - -private import Float = tango.text.convert.Float, - Integer = tango.text.convert.Integer; - -/******************************************************************************* - - Platform issues ... - -*******************************************************************************/ - -version (DigitalMars) - { - alias void* Arg; - alias void* ArgList; - } -else version(LLVMDC) - { - private import tango.core.Vararg; - alias void* Arg; - alias va_list ArgList; - } - else - version (X86_64) - { - private import std.stdarg; - alias void* Arg; - alias va_list ArgList; - } - else - { - alias char* Arg; - alias char* ArgList; - } - -/******************************************************************************* - - Contains methods for replacing format items in a string with string - equivalents of each argument. - -*******************************************************************************/ - -class Layout(T) -{ - public alias convert opCall; - public alias uint delegate (T[]) Sink; - - /********************************************************************** - - **********************************************************************/ - - public final T[] sprint (T[] result, T[] formatStr, ...) - { - return vprint (result, formatStr, _arguments, _argptr); - } - - /********************************************************************** - - **********************************************************************/ - - public final T[] vprint (T[] result, T[] formatStr, TypeInfo[] arguments, ArgList args) - { - T* p = result.ptr; - - uint sink (T[] s) - { - int len = s.length; - if (len < (result.ptr + result.length) - p) - { - p [0..len] = s; - p += len; - } - else - error ("Layout.vprint :: output buffer is full"); - return len; - } - - convert (&sink, arguments, args, formatStr); - return result [0 .. p-result.ptr]; - } - - /********************************************************************** - - Replaces the _format item in a string with the string - equivalent of each argument. - - Params: - formatStr = A string containing _format items. - args = A list of arguments. - - Returns: A copy of formatStr in which the items have been - replaced by the string equivalent of the arguments. - - Remarks: The formatStr parameter is embedded with _format - items of the form: $(BR)$(BR) - {index[,alignment][:_format-string]}$(BR)$(BR) - $(UL $(LI index $(BR) - An integer indicating the element in a list to _format.) - $(LI alignment $(BR) - An optional integer indicating the minimum width. The - result is padded with spaces if the length of the value - is less than alignment.) - $(LI _format-string $(BR) - An optional string of formatting codes.) - )$(BR) - - The leading and trailing braces are required. To include a - literal brace character, use two leading or trailing brace - characters.$(BR)$(BR) - If formatStr is "{0} bottles of beer on the wall" and the - argument is an int with the value of 99, the return value - will be:$(BR) "99 bottles of beer on the wall". - - **********************************************************************/ - - public final T[] convert (T[] formatStr, ...) - { - return convert (_arguments, _argptr, formatStr); - } - - /********************************************************************** - - **********************************************************************/ - - public final uint convert (Sink sink, T[] formatStr, ...) - { - return convert (sink, _arguments, _argptr, formatStr); - } - - /********************************************************************** - - **********************************************************************/ - - public final T[] convert (TypeInfo[] arguments, ArgList args, T[] formatStr) - { - T[] output; - - uint sink (T[] s) - { - output ~= s; - return s.length; - } - - convert (&sink, arguments, args, formatStr); - return output; - } - - /********************************************************************** - - **********************************************************************/ - - public final T[] convertOne (T[] result, TypeInfo ti, Arg arg) - { - return munge (result, null, ti, arg); - } - - /********************************************************************** - - **********************************************************************/ - - public final uint convert (Sink sink, TypeInfo[] arguments, ArgList args, T[] formatStr) - { - assert (formatStr, "null format specifier"); - assert (arguments.length < 64, "too many args in Layout.convert"); - - version (LLVMDC) - { - // code for LLVMDC, all targets! - Arg[64] arglist = void; - foreach (i, arg; arguments) - { - arglist[i] = args; - args += (arg.tsize + size_t.sizeof - 1) & ~ (size_t.sizeof - 1); - } - /* - static va_list get_va_arg(TypeInfo ti, ref va_list vp) - { - auto tisize = ti.tsize; - size_t size = tisize > size_t.sizeof ? size_t.sizeof : tisize; - va_list vptmp = cast(va_list)((cast(size_t)vp + size - 1) & ~(size - 1)); - vp = vptmp + tisize; - return vptmp; - } - - Arg[64] arglist = void; - foreach (i, arg; arguments) - { - arglist[i] = get_va_arg(arg, args); - } - */ - } - else version (X86_64) - { - // code for x86-64 GDC - Arg[64] arglist = void; - int[64] intargs = void; - byte[64] byteargs = void; - long[64] longargs = void; - short[64] shortargs = void; - void[][64] voidargs = void; - real[64] realargs = void; - float[64] floatargs = void; - double[64] doubleargs = void; - - foreach (i, arg; arguments) - { - arglist[i] = args.ptr; - /* Since floating point types don't live on - * the stack, they must be accessed by the - * correct type. */ - bool converted = false; - switch (arg.classinfo.name[9]) - { - case TypeCode.FLOAT: - floatargs[i] = va_arg!(float)(args); - arglist[i] = &floatargs[i]; - converted = true; - break; - - case TypeCode.DOUBLE: - doubleargs[i] = va_arg!(double)(args); - arglist[i] = &doubleargs[i]; - converted = true; - break; - - case TypeCode.REAL: - realargs[i] = va_arg!(real)(args); - arglist[i] = &realargs[i]; - converted = true; - break; - - default: - break; - } - if (! converted) - { - switch (arg.tsize) - { - case 1: - byteargs[i] = va_arg!(byte)(args); - arglist[i] = &byteargs[i]; - break; - case 2: - shortargs[i] = va_arg!(short)(args); - arglist[i] = &shortargs[i]; - break; - case 4: - intargs[i] = va_arg!(int)(args); - arglist[i] = &intargs[i]; - break; - case 8: - longargs[i] = va_arg!(long)(args); - arglist[i] = &longargs[i]; - break; - case 16: - voidargs[i] = va_arg!(void[])(args); - arglist[i] = &voidargs[i]; - break; - default: - assert (false, "Unknown size: " ~ Integer.toString (arg.tsize)); - } - } - } - } - else - { - // code for DMD & x86 GDC (may also work on other 32-bit targets) - Arg[64] arglist = void; - foreach (i, arg; arguments) - { - arglist[i] = args; - args += (arg.tsize + int.sizeof - 1) & ~ (int.sizeof - 1); - } - } - return parse (formatStr, arguments, arglist, sink); - } - - /********************************************************************** - - Parse the format-string, emitting formatted args and text - fragments as we go. - - **********************************************************************/ - - private uint parse (T[] layout, TypeInfo[] ti, Arg[] args, Sink sink) - { - T[384] result = void; - int length, nextIndex; - - - T* s = layout.ptr; - T* fragment = s; - T* end = s + layout.length; - - while (true) - { - while (s < end && *s != '{') - ++s; - - // emit fragment - length += sink (fragment [0 .. s - fragment]); - - // all done? - if (s is end) - break; - - // check for "{{" and skip if so - if (*++s is '{') - { - fragment = s++; - continue; - } - - int index = 0; - bool indexed = false; - - // extract index - while (*s >= '0' && *s <= '9') - { - index = index * 10 + *s++ -'0'; - indexed = true; - } - - // skip spaces - while (s < end && *s is ' ') - ++s; - - int width; - bool leftAlign; - - // has width? - if (*s is ',') - { - while (++s < end && *s is ' ') {} - - if (*s is '-') - { - leftAlign = true; - ++s; - } - - // get width - while (*s >= '0' && *s <= '9') - width = width * 10 + *s++ -'0'; - - // skip spaces - while (s < end && *s is ' ') - ++s; - } - - T[] format; - - // has a format string? - if (*s is ':' && s < end) - { - T* fs = ++s; - - // eat everything up to closing brace - while (s < end && *s != '}') - ++s; - format = fs [0 .. s - fs]; - } - - // insist on a closing brace - if (*s != '}') - { - length += sink ("{missing or misplaced '}'}"); - continue; - } - - // check for default index & set next default counter - if (! indexed) - index = nextIndex; - nextIndex = index + 1; - - // next char is start of following fragment - fragment = ++s; - - // handle alignment - void process (T[] str) - { - int padding = width - str.length; - - // if not left aligned, pad out with spaces - if (! leftAlign && padding > 0) - length += spaces (sink, padding); - - // emit formatted argument - length += sink (str); - - // finally, pad out on right - if (leftAlign && padding > 0) - length += spaces (sink, padding); - } - - // an astonishing number of typehacks needed to handle arrays :( - void processElement (TypeInfo _ti, Arg _arg) - { - if (_ti.classinfo.name.length is 20 && _ti.classinfo.name[9..$] == "StaticArray" ) - { - auto tiStat = cast(TypeInfo_StaticArray)_ti; - auto p = _arg; - length += sink ("[ "); - for (int i = 0; i < tiStat.len; i++) - { - if (p !is _arg ) - length += sink (", "); - processElement (tiStat.value, p); - p += tiStat.tsize; - } - length += sink (" ]"); - } - else - if (_ti.classinfo.name.length is 25 && _ti.classinfo.name[9..$] == "AssociativeArray") - { - auto tiAsso = cast(TypeInfo_AssociativeArray)_ti; - auto tiKey = tiAsso.key; - auto tiVal = tiAsso.next(); - // the knowledge of the internal k/v storage is used - // so this might break if, that internal storage changes - alias ubyte AV; // any type for key, value might be ok, the sizes are corrected later - alias ubyte AK; - auto aa = *cast(AV[AK]*) _arg; - - length += sink ("{ "); - bool first = true; - - int roundUp (int sz) - { - return (sz + (void*).sizeof -1) & ~((void*).sizeof - 1); - } - - foreach (inout v; aa) - { - // the key is befor the value, so substrace with fixed key size from above - auto pk = cast(Arg)( &v - roundUp(AK.sizeof)); - // now the real value pos is plus the real key size - auto pv = cast(Arg)(pk + roundUp(tiKey.tsize())); - - if (!first) - length += sink (", "); - processElement (tiKey, pk); - length += sink ("=>"); - processElement (tiVal, pv); - first = false; - } - length += sink (" }"); - } - else - if (_ti.classinfo.name[9] is TypeCode.ARRAY && - (_ti !is typeid(char[])) && - (_ti !is typeid(wchar[])) && - (_ti !is typeid(dchar[]))) - { - // for all non string array types (including char[][]) - auto arr = *cast(void[]*)_arg; - auto len = arr.length; - auto ptr = cast(Arg) arr.ptr; - auto elTi = _ti.next(); - auto size = elTi.tsize(); - length += sink ("[ "); - while (len > 0) - { - if (ptr !is arr.ptr) - length += sink (", "); - processElement (elTi, ptr); - len -= 1; - ptr += size; - } - length += sink (" ]"); - } - else - // the standard processing - process (munge(result, format, _ti, _arg)); - } - - - // process this argument - if (index >= ti.length) - process ("{invalid index}"); - else - processElement (ti[index], args[index]); - } - return length; - } - - /********************************************************************** - - **********************************************************************/ - - private void error (char[] msg) - { - throw new IllegalArgumentException (msg); - } - - /********************************************************************** - - **********************************************************************/ - - private uint spaces (Sink sink, int count) - { - uint ret; - - static const T[32] Spaces = ' '; - while (count > Spaces.length) - { - ret += sink (Spaces); - count -= Spaces.length; - } - return ret + sink (Spaces[0..count]); - } - - /*********************************************************************** - - ***********************************************************************/ - - private T[] munge (T[] result, T[] format, TypeInfo type, Arg p) - { - switch (type.classinfo.name[9]) - { - case TypeCode.ARRAY: - if (type is typeid(char[])) - return fromUtf8 (*cast(char[]*) p, result); - - if (type is typeid(wchar[])) - return fromUtf16 (*cast(wchar[]*) p, result); - - if (type is typeid(dchar[])) - return fromUtf32 (*cast(dchar[]*) p, result); - - return fromUtf8 (type.toString, result); - - case TypeCode.BOOL: - static T[] t = "true"; - static T[] f = "false"; - return (*cast(bool*) p) ? t : f; - - case TypeCode.BYTE: - return integer (result, *cast(byte*) p, format); - - case TypeCode.UBYTE: - return integer (result, *cast(ubyte*) p, format, 'u'); - - case TypeCode.SHORT: - return integer (result, *cast(short*) p, format); - - case TypeCode.USHORT: - return integer (result, *cast(ushort*) p, format, 'u'); - - case TypeCode.INT: - return integer (result, *cast(int*) p, format); - - case TypeCode.UINT: - return integer (result, *cast(uint*) p, format, 'u'); - - case TypeCode.ULONG: - return integer (result, *cast(long*) p, format, 'u'); - - case TypeCode.LONG: - return integer (result, *cast(long*) p, format); - - case TypeCode.FLOAT: - return floater (result, *cast(float*) p, format); - - case TypeCode.DOUBLE: - return floater (result, *cast(double*) p, format); - - case TypeCode.REAL: - return floater (result, *cast(real*) p, format); - - case TypeCode.CHAR: - return fromUtf8 ((cast(char*) p)[0..1], result); - - case TypeCode.WCHAR: - return fromUtf16 ((cast(wchar*) p)[0..1], result); - - case TypeCode.DCHAR: - return fromUtf32 ((cast(dchar*) p)[0..1], result); - - case TypeCode.POINTER: - return integer (result, *cast(size_t*) p, format, 'x'); - - case TypeCode.CLASS: - auto c = *cast(Object*) p; - if (c) - return fromUtf8 (c.toString, result); - break; - - case TypeCode.STRUCT: - auto s = cast(TypeInfo_Struct) type; - if (s.xtoString) - return fromUtf8 (s.xtoString(p), result); - goto default; - - case TypeCode.INTERFACE: - auto x = *cast(void**) p; - if (x) - { - auto pi = **cast(Interface ***) x; - auto o = cast(Object)(*cast(void**)p - pi.offset); - return fromUtf8 (o.toString, result); - } - break; - - case TypeCode.ENUM: - return munge (result, format, (cast(TypeInfo_Enum) type).base, p); - - case TypeCode.TYPEDEF: - return munge (result, format, (cast(TypeInfo_Typedef) type).base, p); - - default: - return unknown (result, format, type, p); - } - - return cast(T[]) "{null}"; - } - - /********************************************************************** - - **********************************************************************/ - - protected T[] unknown (T[] result, T[] format, TypeInfo type, Arg p) - { - return cast(T[])("{unhandled argument type: " ~ fromUtf8 (type.toString, result) ~ "}"); - } - - /********************************************************************** - - **********************************************************************/ - - protected T[] integer (T[] output, long v, T[] format, T style = 'd') - { - Integer.Flags flags; - uint width = output.length; - - if (parseGeneric (format, width, style)) - if (width <= output.length) - { - output = output [0 .. width]; - flags |= flags.Zero; - } - return Integer.format (output, v, cast(Integer.Style) style, flags); - } - - /********************************************************************** - - **********************************************************************/ - - protected T[] floater (T[] output, real v, T[] format) - { - T style = 'f'; - uint places = 2; - - parseGeneric (format, places, style); - return Float.format (output, v, places, (style is 'e' || style is 'E') ? 0 : 10); - } - - /********************************************************************** - - **********************************************************************/ - - private bool parseGeneric (T[] format, ref uint width, ref T style) - { - if (format.length) - { - uint number; - auto p = format.ptr; - auto e = p + format.length; - style = *p; - while (++p < e) - if (*p >= '0' && *p <= '9') - number = number * 10 + *p - '0'; - else - break; - - if (p - format.ptr > 1) - { - width = number; - return true; - } - } - return false; - } - - /*********************************************************************** - - ***********************************************************************/ - - private static T[] fromUtf8 (char[] s, T[] scratch) - { - static if (is (T == char)) - return s; - - static if (is (T == wchar)) - return Unicode.toString16 (s, scratch); - - static if (is (T == dchar)) - return Unicode.toString32 (s, scratch); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static T[] fromUtf16 (wchar[] s, T[] scratch) - { - static if (is (T == wchar)) - return s; - - static if (is (T == char)) - return Unicode.toString (s, scratch); - - static if (is (T == dchar)) - return Unicode.toString32 (s, scratch); - } - - /*********************************************************************** - - ***********************************************************************/ - - private static T[] fromUtf32 (dchar[] s, T[] scratch) - { - static if (is (T == dchar)) - return s; - - static if (is (T == char)) - return Unicode.toString (s, scratch); - - static if (is (T == wchar)) - return Unicode.toString16 (s, scratch); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -private enum TypeCode -{ - EMPTY = 0, - BOOL = 'b', - UBYTE = 'h', - BYTE = 'g', - USHORT = 't', - SHORT = 's', - UINT = 'k', - INT = 'i', - ULONG = 'm', - LONG = 'l', - REAL = 'e', - FLOAT = 'f', - DOUBLE = 'd', - CHAR = 'a', - WCHAR = 'u', - DCHAR = 'w', - ARRAY = 'A', - CLASS = 'C', - STRUCT = 'S', - ENUM = 'E', - POINTER = 'P', - TYPEDEF = 'T', - INTERFACE = 'I', -} - - - -/******************************************************************************* - -*******************************************************************************/ - -debug (UnitTest) -{ - //void main() {} - - unittest - { - auto Formatter = new Layout!(char); - - assert( Formatter( "abc" ) == "abc" ); - assert( Formatter( "{0}", 1 ) == "1" ); - assert( Formatter( "{0}", -1 ) == "-1" ); - - assert( Formatter( "{}", 1 ) == "1" ); - assert( Formatter( "{} {}", 1, 2) == "1 2" ); - assert( Formatter( "{} {0} {}", 1, 3) == "1 1 3" ); - assert( Formatter( "{} {0} {} {}", 1, 3) == "1 1 3 {invalid index}" ); - assert( Formatter( "{} {0} {} {:x}", 1, 3) == "1 1 3 {invalid index}" ); - - assert( Formatter( "{0}", true ) == "true" , Formatter( "{0}", true )); - assert( Formatter( "{0}", false ) == "false" ); - - assert( Formatter( "{0}", cast(byte)-128 ) == "-128" ); - assert( Formatter( "{0}", cast(byte)127 ) == "127" ); - assert( Formatter( "{0}", cast(ubyte)255 ) == "255" ); - - assert( Formatter( "{0}", cast(short)-32768 ) == "-32768" ); - assert( Formatter( "{0}", cast(short)32767 ) == "32767" ); - assert( Formatter( "{0}", cast(ushort)65535 ) == "65535" ); - // assert( Formatter( "{0:x4}", cast(ushort)0xafe ) == "0afe" ); - // assert( Formatter( "{0:X4}", cast(ushort)0xafe ) == "0AFE" ); - - assert( Formatter( "{0}", -2147483648 ) == "-2147483648" ); - assert( Formatter( "{0}", 2147483647 ) == "2147483647" ); - assert( Formatter( "{0}", 4294967295 ) == "4294967295" ); - // compiler error - assert( Formatter( "{0}", -9223372036854775807L) == "-9223372036854775807" ); - assert( Formatter( "{0}", 0x8000_0000_0000_0000L) == "9223372036854775808" ); - assert( Formatter( "{0}", 9223372036854775807L ) == "9223372036854775807" ); - // Error: prints -1 - // assert( Formatter( "{0}", 18446744073709551615UL ) == "18446744073709551615" ); - - assert( Formatter( "{0}", "s" ) == "s" ); - // fragments before and after - assert( Formatter( "d{0}d", "s" ) == "dsd" ); - assert( Formatter( "d{0}d", "1234567890" ) == "d1234567890d" ); - - // brace escaping - assert( Formatter( "d{0}d", "" ) == "dd"); - assert( Formatter( "d{{0}d", "" ) == "d{0}d"); - assert( Formatter( "d{{{0}d", "" ) == "d{d"); - assert( Formatter( "d{0}}d", "" ) == "d}d"); - - assert( Formatter( "{0:x}", 0xafe0000 ) == "afe0000" ); - // todo: is it correct to print 7 instead of 6 chars??? - assert( Formatter( "{0:x7}", 0xafe0000 ) == "afe0000" ); - assert( Formatter( "{0:x8}", 0xafe0000 ) == "0afe0000" ); - assert( Formatter( "{0:X8}", 0xafe0000 ) == "0AFE0000" ); - assert( Formatter( "{0:X9}", 0xafe0000 ) == "00AFE0000" ); - assert( Formatter( "{0:X13}", 0xafe0000 ) == "000000AFE0000" ); - assert( Formatter( "{0:x13}", 0xafe0000 ) == "000000afe0000" ); - // decimal width - assert( Formatter( "{0:d6}", 123 ) == "000123" ); - assert( Formatter( "{0,7:d6}", 123 ) == " 000123" ); - assert( Formatter( "{0,-7:d6}", 123 ) == "000123 " ); - - assert( Formatter( "{0:d7}", -123 ) == "-000123" ); - assert( Formatter( "{0,7:d6}", 123 ) == " 000123" ); - assert( Formatter( "{0,7:d7}", -123 ) == "-000123" ); - assert( Formatter( "{0,8:d7}", -123 ) == " -000123" ); - assert( Formatter( "{0,5:d7}", -123 ) == "-000123" ); - - assert( Formatter( "{0:X}", 0xFFFF_FFFF_FFFF_FFFF) == "FFFFFFFFFFFFFFFF" ); - assert( Formatter( "{0:x}", 0xFFFF_FFFF_FFFF_FFFF) == "ffffffffffffffff" ); - assert( Formatter( "{0:x}", 0xFFFF_1234_FFFF_FFFF) == "ffff1234ffffffff" ); - assert( Formatter( "{0:x19}", 0x1234_FFFF_FFFF) == "00000001234ffffffff" ); - // Error: prints -1 - // assert( Formatter( "{0}", 18446744073709551615UL ) == "18446744073709551615" ); - assert( Formatter( "{0}", "s" ) == "s" ); - // fragments before and after - assert( Formatter( "d{0}d", "s" ) == "dsd" ); - - // argument index - assert( Formatter( "a{0}b{1}c{2}", "x", "y", "z" ) == "axbycz" ); - assert( Formatter( "a{2}b{1}c{0}", "x", "y", "z" ) == "azbycx" ); - assert( Formatter( "a{1}b{1}c{1}", "x", "y", "z" ) == "aybycy" ); - - // alignment - // align does not restrict the length - assert( Formatter( "{0,5}", "hellohello" ) == "hellohello" ); - // align fills with spaces - assert( Formatter( "->{0,-10}<-", "hello" ) == "->hello <-" ); - assert( Formatter( "->{0,10}<-", "hello" ) == "-> hello<-" ); - assert( Formatter( "->{0,-10}<-", 12345 ) == "->12345 <-" ); - assert( Formatter( "->{0,10}<-", 12345 ) == "-> 12345<-" ); - - assert( Formatter( "{0:f}", 1.23f ) == "1.23" ); - assert( Formatter( "{0:f4}", 1.23456789L ) == "1.2346" ); - assert( Formatter( "{0:e4}", 0.0001) == "0.1000e-03"); - - int[] a = [ 51, 52, 53, 54, 55 ]; - assert( Formatter( "{}", a ) == "[ 51, 52, 53, 54, 55 ]" ); - assert( Formatter( "{:x}", a ) == "[ 33, 34, 35, 36, 37 ]" ); - assert( Formatter( "{,-4}", a ) == "[ 51 , 52 , 53 , 54 , 55 ]" ); - assert( Formatter( "{,4}", a ) == "[ 51, 52, 53, 54, 55 ]" ); - int[][] b = [ [ 51, 52 ], [ 53, 54, 55 ] ]; - assert( Formatter( "{}", b ) == "[ [ 51, 52 ], [ 53, 54, 55 ] ]" ); - - ushort[3] c = [ cast(ushort)51, 52, 53 ]; - assert( Formatter( "{}", c ) == "[ 51, 52, 53 ]" ); - - ushort[long] d; - d[234] = 2; - d[345] = 3; - assert( Formatter( "{}", d ) == "{ 234=>2, 345=>3 }" ); - - bool[char[]] e; - e[ "key".dup ] = true; - e[ "value".dup ] = false; - assert( Formatter( "{}", e ) == "{ key=>true, value=>false }" ); - - char[][ double ] f; - f[ 1.0 ] = "one".dup; - f[ 3.14 ] = "PI".dup; - assert( Formatter( "{}", f ) == "{ 1.00=>one, 3.14=>PI }" ); - } -} - - - -debug (Layout) -{ - import tango.io.Console; - - void main () - { - auto layout = new Layout!(char); - - Cout (layout ("{:d2}", 56)).newline; - Cout (layout ("{:f4}", 0.001)).newline; - Cout (layout ("{:f8}", 3.14159)).newline; - Cout (layout ("{:e20}", 0.001)).newline; - Cout (layout ("{:e4}", 0.0000001)).newline; - Cout (layout ("ptr:{}", &layout)).newline; - - struct S - { - char[] toString () {return "foo";} - } - - S s; - Cout (layout ("struct: {}", s)).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Sprint.d --- a/tango/tango/text/convert/Sprint.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,111 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Nov 2005: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.text.convert.Sprint; - -private import tango.text.convert.Layout; - -/****************************************************************************** - - Constructs sprintf-style output. This is a replacement for the - vsprintf() family of functions, and writes its output into a - lookaside buffer: - --- - // create a Sprint instance - auto sprint = new Sprint!(char); - - // write formatted text to a logger - log.info (sprint ("{} green bottles, sitting on a wall\n", 10)); - --- - - Sprint can be handy when you wish to format text for a Logger - or similar, since it avoids heap activity during conversion by - hosting a fixed size conversion buffer. This is important when - debugging since heap activity can be responsible for behavioral - changes. One would create a Sprint instance ahead of time, and - utilize it in conjunction with the logging package. - - Please note that the class itself is stateful, and therefore a - single instance is not shareable across multiple threads. The - returned content is not .dup'd either, so do that yourself if - you require a persistent copy. - - Note also that Sprint is templated, and can be instantiated for - wide chars through a Sprint!(dchar) or Sprint!(wchar). The wide - versions differ in that both the output and the format-string - are of the target type. Variadic text arguments are transcoded - appropriately. - - See also: tango.text.convert.Layout - -******************************************************************************/ - -class Sprint(T) -{ - protected T[] buffer; - static Layout!(T) global; - Layout!(T) layout; - - alias format opCall; - - /********************************************************************** - - Create new Sprint instances with a buffer of the specified - size - - **********************************************************************/ - - this (int size = 256) - { - // Workaround for bug with static ctors in GDC - if (global is null) - global = new Layout!(T); - this (size, global); - } - - /********************************************************************** - - Create new Sprint instances with a buffer of the specified - size, and the provided formatter. The second argument can be - used to apply cultural specifics (I18N) to Sprint - - **********************************************************************/ - - this (int size, Layout!(T) formatter) - { - buffer = new T[size]; - this.layout = formatter; - } - - /********************************************************************** - - Layout a set of arguments - - **********************************************************************/ - - T[] format (T[] fmt, ...) - { - return layout.vprint (buffer, fmt, _arguments, _argptr); - } - - /********************************************************************** - - Layout a set of arguments - - **********************************************************************/ - - T[] format (T[] fmt, TypeInfo[] arguments, ArgList argptr) - { - return layout.vprint (buffer, fmt, arguments, argptr); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/TimeStamp.d --- a/tango/tango/text/convert/TimeStamp.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,589 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2005 - - author: Kris - - Converts between native and text representations of HTTP time - values. Internally, time is represented as UTC with an epoch - fixed at Jan 1st 1970. The text representation is formatted in - accordance with RFC 1123, and the parser will accept one of - RFC 1123, RFC 850, or asctime formats. - - See http://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html for - further detail. - - Applying the D "import alias" mechanism to this module is highly - recommended, in order to limit namespace pollution: - --- - import TimeStamp = tango.text.convert.TimeStamp; - - auto t = TimeStamp.parse ("Sun, 06 Nov 1994 08:49:37 GMT"); - --- - -*******************************************************************************/ - -module tango.text.convert.TimeStamp; - -private import tango.time.Time; - -private import tango.core.Exception; - -private import Util = tango.text.Util; - -private import tango.time.chrono.Gregorian; - -private import Int = tango.text.convert.Integer; - -/****************************************************************************** - - Parse provided input and return a UTC epoch time. An exception - is raised where the provided string is not fully parsed. - -******************************************************************************/ - -ulong toTime(T) (T[] src) -{ - uint len; - - auto x = parse (src, &len); - if (len < src.length) - throw new IllegalArgumentException ("unknown time format: "~src); - return x; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -char[] toString (Time time) -{ - char[32] tmp = void; - - return format (tmp, time).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -wchar[] toString16 (Time time) -{ - wchar[32] tmp = void; - - return format (tmp, time).dup; -} - -/****************************************************************************** - - Template wrapper to make life simpler. Returns a text version - of the provided value. - - See format() for details - -******************************************************************************/ - -dchar[] toString32 (Time time) -{ - dchar[32] tmp = void; - - return format (tmp, time).dup; -} - -/****************************************************************************** - - RFC1123 formatted time - - Converts to the format "Sun, 06 Nov 1994 08:49:37 GMT", and - returns a populated slice of the provided buffer. Note that - RFC1123 format is always in absolute GMT time, and a thirty- - element buffer is sufficient for the produced output - - Throws an exception where the supplied time is invalid - -******************************************************************************/ - -T[] format(T, U=Time) (T[] output, U t) -{return format!(T)(output, cast(Time) t);} - -T[] format(T) (T[] output, Time t) -{ - static T[][] Months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", - "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; - static T[][] Days = ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"]; - - T[] convert (T[] tmp, int i) - { - return Int.format!(T) (tmp, i, Int.Style.Unsigned, Int.Flags.Zero); - } - - - assert (output.length >= 29); - if (t is t.max) - throw new IllegalArgumentException ("TimeStamp.format :: invalid Time argument"); - - // convert time to field values - auto time = t.time; - auto date = Gregorian.generic.toDate (t); - - // use the featherweight formatter ... - T[14] tmp = void; - return Util.layout (output, "%0, %1 %2 %3 %4:%5:%6 GMT", - Days[date.dow], - convert (tmp[0..2], date.day), - Months[date.month-1], - convert (tmp[2..6], date.year), - convert (tmp[6..8], time.hours), - convert (tmp[8..10], time.minutes), - convert (tmp[10..12], time.seconds) - ); -} - - -/****************************************************************************** - - Parse provided input and return a UTC epoch time. A return value - of Time.max indicated a parse-failure. - - An option is provided to return the count of characters parsed - - an unchanged value here also indicates invalid input. - -******************************************************************************/ - -Time parse(T) (T[] src, uint* ate = null) -{ - int len; - Time value; - - if ((len = rfc1123 (src, value)) > 0 || - (len = rfc850 (src, value)) > 0 || - (len = asctime (src, value)) > 0) - { - if (ate) - *ate = len; - return value; - } - - return Time.max; -} - - -/****************************************************************************** - - RFC 822, updated by RFC 1123 :: "Sun, 06 Nov 1994 08:49:37 GMT" - - Returns the number of elements consumed by the parse; zero if - the parse failed - -******************************************************************************/ - -int rfc1123(T) (T[] src, inout Time value) -{ - TimeOfDay tod; - Date date; - T* p = src.ptr; - - bool dt (inout T* p) - { - return ((date.day = parseInt(p)) > 0 && - *p++ == ' ' && - (date.month = parseMonth(p)) > 0 && - *p++ == ' ' && - (date.year = parseInt(p)) > 0); - } - - if (parseShortDay(p) >= 0 && - *p++ == ',' && - *p++ == ' ' && - dt (p) && - *p++ == ' ' && - time (tod, p) && - *p++ == ' ' && - p[0..3] == "GMT") - { - value = Gregorian.generic.toTime (date, tod); - return (p+3) - src.ptr; - } - - return 0; -} - - -/****************************************************************************** - - RFC 850, obsoleted by RFC 1036 :: "Sunday, 06-Nov-94 08:49:37 GMT" - - Returns the number of elements consumed by the parse; zero if - the parse failed - -******************************************************************************/ - -int rfc850(T) (T[] src, inout Time value) -{ - TimeOfDay tod; - Date date; - T* p = src.ptr; - - bool dt (inout T* p) - { - return ((date.day = parseInt(p)) > 0 && - *p++ == '-' && - (date.month = parseMonth(p)) > 0 && - *p++ == '-' && - (date.year = parseInt(p)) > 0); - } - - if (parseFullDay(p) >= 0 && - *p++ == ',' && - *p++ == ' ' && - dt (p) && - *p++ == ' ' && - time (tod, p) && - *p++ == ' ' && - p[0..3] == "GMT") - { - if (date.year < 70) - date.year += 2000; - else - if (date.year < 100) - date.year += 1900; - - value = Gregorian.generic.toTime (date, tod); - return (p+3) - src.ptr; - } - - return 0; -} - - -/****************************************************************************** - - ANSI C's asctime() format :: "Sun Nov 6 08:49:37 1994" - - Returns the number of elements consumed by the parse; zero if - the parse failed - -******************************************************************************/ - -int asctime(T) (T[] src, inout Time value) -{ - TimeOfDay tod; - Date date; - T* p = src.ptr; - - bool dt (inout T* p) - { - return ((date.month = parseMonth(p)) > 0 && - *p++ == ' ' && - ((date.day = parseInt(p)) > 0 || - (*p++ == ' ' && - (date.day = parseInt(p)) > 0))); - } - - if (parseShortDay(p) >= 0 && - *p++ == ' ' && - dt (p) && - *p++ == ' ' && - time (tod, p) && - *p++ == ' ' && - (date.year = parseInt (p)) > 0) - { - value = Gregorian.generic.toTime (date, tod); - return p - src.ptr; - } - - return 0; -} - -/****************************************************************************** - - DOS time format :: "12-31-06 08:49AM" - - Returns the number of elements consumed by the parse; zero if - the parse failed - -******************************************************************************/ - -int dostime(T) (T[] src, inout Time value) -{ - TimeOfDay tod; - Date date; - T* p = src.ptr; - - bool dt (inout T* p) - { - return ((date.month = parseInt(p)) > 0 && - *p++ == '-' && - ((date.day = parseInt(p)) > 0 && - (*p++ == '-' && - (date.year = parseInt(p)) > 0))); - } - - if (dt(p) >= 0 && - *p++ == ' ' && - (tod.hours = parseInt(p)) > 0 && - *p++ == ':' && - (tod.minutes = parseInt(p)) > 0 && - (*p == 'A' || *p == 'P')) - { - if (*p is 'P') - tod.hours += 12; - - if (date.year < 70) - date.year += 2000; - else - if (date.year < 100) - date.year += 1900; - - value = Gregorian.generic.toTime (date, tod); - return (p+2) - src.ptr; - } - - return 0; -} - -/****************************************************************************** - - ISO-8601 format :: "2006-01-31 14:49:30,001" - - Returns the number of elements consumed by the parse; zero if - the parse failed - -******************************************************************************/ - -int iso8601(T) (T[] src, inout Time value) -{ - TimeOfDay tod; - Date date; - T* p = src.ptr; - - bool dt (inout T* p) - { - return ((date.year = parseInt(p)) > 0 && - *p++ == '-' && - ((date.month = parseInt(p)) > 0 && - (*p++ == '-' && - (date.day = parseInt(p)) > 0))); - } - - if (dt(p) >= 0 && - *p++ == ' ' && - time (tod, p) && - *p++ == ',') - { - tod.millis = parseInt (p); - value = Gregorian.generic.toTime (date, tod); - return p - src.ptr; - } - - return 0; -} - - -/****************************************************************************** - - Parse a time field - -******************************************************************************/ - -private bool time(T) (inout TimeOfDay time, inout T* p) -{ - return ((time.hours = parseInt(p)) > 0 && - *p++ == ':' && - (time.minutes = parseInt(p)) > 0 && - *p++ == ':' && - (time.seconds = parseInt(p)) > 0); -} - - -/****************************************************************************** - - Match a month from the input - -******************************************************************************/ - -private int parseMonth(T) (inout T* p) -{ - int month; - - switch (p[0..3]) - { - case "Jan": - month = 1; - break; - case "Feb": - month = 2; - break; - case "Mar": - month = 3; - break; - case "Apr": - month = 4; - break; - case "May": - month = 5; - break; - case "Jun": - month = 6; - break; - case "Jul": - month = 7; - break; - case "Aug": - month = 8; - break; - case "Sep": - month = 9; - break; - case "Oct": - month = 10; - break; - case "Nov": - month = 11; - break; - case "Dec": - month = 12; - break; - default: - return month; - } - - p += 3; - return month; -} - - -/****************************************************************************** - - Match a day from the input - -******************************************************************************/ - -private int parseShortDay(T) (inout T* p) -{ - int day; - - switch (p[0..3]) - { - case "Sun": - day = 0; - break; - case "Mon": - day = 1; - break; - case "Tue": - day = 2; - break; - case "Wed": - day = 3; - break; - case "Thu": - day = 4; - break; - case "Fri": - day = 5; - break; - case "Sat": - day = 6; - break; - default: - return -1; - } - - p += 3; - return day; -} - - -/****************************************************************************** - - Match a day from the input. Sunday is 0 - -******************************************************************************/ - -private int parseFullDay(T) (inout T* p) -{ - static T[][] days = - [ - "Sunday", - "Monday", - "Tuesday", - "Wednesday", - "Thursday", - "Friday", - "Saturday", - ]; - - foreach (i, day; days) - if (day == p[0..day.length]) - { - p += day.length; - return i; - } - return -1; -} - - -/****************************************************************************** - - Extract an integer from the input - -******************************************************************************/ - -private static int parseInt(T) (inout T* p) -{ - int value; - - while (*p >= '0' && *p <= '9') - value = value * 10 + *p++ - '0'; - return value; -} - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ - unittest - { - wchar[30] tmp; - wchar[] test = "Sun, 06 Nov 1994 08:49:37 GMT"; - - auto time = parse (test); - auto text = format (tmp, time); - assert (text == test); - } -} - -/****************************************************************************** - -******************************************************************************/ - -debug (TimeStamp) -{ - void main() - { - wchar[30] tmp; - wchar[] test = "Sun, 06 Nov 1994 08:49:37 GMT"; - - auto time = parse (test); - auto text = format (tmp, time); - assert (text == test); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/UnicodeBom.d --- a/tango/tango/text/convert/UnicodeBom.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,394 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Kris - -*******************************************************************************/ - -module tango.text.convert.UnicodeBom; - -private import tango.core.ByteSwap; - -private import Utf = tango.text.convert.Utf; - - -private extern (C) void onUnicodeError (char[] msg, size_t idx = 0); - -/******************************************************************************* - - see http://icu.sourceforge.net/docs/papers/forms_of_unicode/#t2 - -*******************************************************************************/ - -enum Encoding { - Unknown, - UTF_8, - UTF_8N, - UTF_16, - UTF_16BE, - UTF_16LE, - UTF_32, - UTF_32BE, - UTF_32LE, - }; - -/******************************************************************************* - - Convert unicode content - - Unicode is an encoding of textual material. The purpose of this module - is to interface external-encoding with a programmer-defined internal- - encoding. This internal encoding is declared via the template argument - T, whilst the external encoding is either specified or derived. - - Three internal encodings are supported: char, wchar, and dchar. The - methods herein operate upon arrays of this type. That is, decode() - returns an array of the type, while encode() expect an array of said - type. - - Supported external encodings are as follow: - - Encoding.Unknown - Encoding.UTF_8 - Encoding.UTF_8N - Encoding.UTF_16 - Encoding.UTF_16BE - Encoding.UTF_16LE - Encoding.UTF_32 - Encoding.UTF_32BE - Encoding.UTF_32LE - - These can be divided into non-explicit and explicit encodings: - - Encoding.Unknown - Encoding.UTF_8 - Encoding.UTF_16 - Encoding.UTF_32 - - - Encoding.UTF_8N - Encoding.UTF_16BE - Encoding.UTF_16LE - Encoding.UTF_32BE - Encoding.UTF_32LE - - The former group of non-explicit encodings may be used to 'discover' - an unknown encoding, by examining the first few bytes of the content - for a signature. This signature is optional, but is often written such - that the content is self-describing. When an encoding is unknown, using - one of the non-explicit encodings will cause the decode() method to look - for a signature and adjust itself accordingly. It is possible that a - ZWNBSP character might be confused with the signature; today's unicode - content is supposed to use the WORD-JOINER character instead. - - The group of explicit encodings are for use when the content encoding - is known. These *must* be used when converting back to external encoding, - since written content must be in a known format. It should be noted that, - during a decode() operation, the existence of a signature is in conflict - with these explicit varieties. - - - See - $(LINK http://www.utf-8.com/) - $(LINK http://www.hackcraft.net/xmlUnicode/) - $(LINK http://www.unicode.org/faq/utf_bom.html/) - $(LINK http://www.azillionmonkeys.com/qed/unicode.html/) - $(LINK http://icu.sourceforge.net/docs/papers/forms_of_unicode/) - -*******************************************************************************/ - -class UnicodeBom(T) : BomSniffer -{ - static if (!is (T == char) && !is (T == wchar) && !is (T == dchar)) - pragma (msg, "Template type must be char, wchar, or dchar"); - - /*********************************************************************** - - Construct a instance using the given external encoding ~ one - of the Encoding.xx types - - ***********************************************************************/ - - this (Encoding encoding) - { - setup (encoding); - } - - /*********************************************************************** - - Convert the provided content. The content is inspected - for a BOM signature, which is stripped. An exception is - thrown if a signature is present when, according to the - encoding type, it should not be. Conversely, An exception - is thrown if there is no known signature where the current - encoding expects one to be present - - ***********************************************************************/ - - final T[] decode (void[] content, T[] dst=null, uint* ate=null) - { - // look for a BOM - auto info = test (content); - - // are we expecting a BOM? - if (lookup[encoding].test) - if (info) - { - // yep ~ and we got one - setup (info.encoding); - - // strip BOM from content - content = content [info.bom.length .. length]; - } - else - // can this encoding be defaulted? - if (settings.fallback) - setup (settings.fallback); - else - onUnicodeError ("UnicodeBom.decode :: unknown or missing BOM"); - else - if (info) - // found a BOM when using an explicit encoding - onUnicodeError ("UnicodeBom.decode :: explicit encoding does not permit BOM"); - - // convert it to internal representation - return into (swapBytes(content), settings.type, dst, ate); - } - - /*********************************************************************** - - Perform encoding of content. Note that the encoding must be - of the explicit variety by the time we get here - - ***********************************************************************/ - - final void[] encode (T[] content, void[] dst=null, uint* ate=null) - { - if (settings.test) - onUnicodeError ("UnicodeBom.encode :: cannot write to a non-specific encoding"); - - // convert it to external representation, and write - return swapBytes (from (content, settings.type, dst, ate)); - } - - /*********************************************************************** - - Swap bytes around, as required by the encoding - - ***********************************************************************/ - - private final void[] swapBytes (void[] content) - { - bool endian = settings.endian; - bool swap = settings.bigEndian; - - version (BigEndian) - swap = !swap; - - if (endian && swap) - { - if (settings.type == Utf16) - ByteSwap.swap16 (content.ptr, content.length); - else - ByteSwap.swap32 (content.ptr, content.length); - } - return content; - } - - /*********************************************************************** - - - ***********************************************************************/ - - static T[] into (void[] x, uint type, T[] dst=null, uint* ate=null) - { - T[] ret; - - static if (is (T == char)) - { - if (type == Utf8) - return cast(T[]) x; - - if (type == Utf16) - ret = Utf.toString (cast(wchar[]) x, dst, ate); - else - if (type == Utf32) - ret = Utf.toString (cast(dchar[]) x, dst, ate); - } - - static if (is (T == wchar)) - { - if (type == Utf16) - return cast(T[]) x; - - if (type == Utf8) - ret = Utf.toString16 (cast(char[]) x, dst, ate); - else - if (type == Utf32) - ret = Utf.toString16 (cast(dchar[]) x, dst, ate); - } - - static if (is (T == dchar)) - { - if (type == Utf32) - return cast(T[]) x; - - if (type == Utf8) - ret = Utf.toString32 (cast(char[]) x, dst, ate); - else - if (type == Utf16) - ret = Utf.toString32 (cast(wchar[]) x, dst, ate); - } - - return ret; - } - - - /*********************************************************************** - - ***********************************************************************/ - - static void[] from (T[] x, uint type, void[] dst=null, uint* ate=null) - { - void[] ret; - - static if (is (T == char)) - { - if (type == Utf8) - return x; - - if (type == Utf16) - ret = Utf.toString16 (x, cast(wchar[]) dst, ate); - else - if (type == Utf32) - ret = Utf.toString32 (x, cast(dchar[]) dst, ate); - } - - static if (is (T == wchar)) - { - if (type == Utf16) - return x; - - if (type == Utf8) - ret = Utf.toString (x, cast(char[]) dst, ate); - else - if (type == Utf32) - ret = Utf.toString32 (x, cast(dchar[]) dst, ate); - } - - static if (is (T == dchar)) - { - if (type == Utf32) - return x; - - if (type == Utf8) - ret = Utf.toString (x, cast(char[]) dst, ate); - else - if (type == Utf16) - ret = Utf.toString16 (x, cast(wchar[]) dst, ate); - } - - return ret; - } -} - - - -/******************************************************************************* - -*******************************************************************************/ - -class BomSniffer -{ - private Encoding encoder; // the current encoding - private Info* settings; // pointer to encoding configuration - - private struct Info - { - int type; // type of element (char/wchar/dchar) - Encoding encoding; // Encoding.xx encoding - char[] bom; // pattern to match for signature - bool test, // should we test for this encoding? - endian, // this encoding have endian concerns? - bigEndian; // is this a big-endian encoding? - Encoding fallback; // can this encoding be defaulted? - }; - - private enum {Utf8, Utf16, Utf32}; - - private const Info[] lookup = - [ - {Utf8, Encoding.Unknown, null, true, false, false, Encoding.UTF_8N}, - {Utf8, Encoding.UTF_8, null, true, false, false, Encoding.UTF_8N}, - {Utf8, Encoding.UTF_8N, x"efbbbf", false}, - {Utf16, Encoding.UTF_16, null, true, false, false, Encoding.UTF_16BE}, - {Utf16, Encoding.UTF_16BE, x"feff", false, true, true}, - {Utf16, Encoding.UTF_16LE, x"fffe", false, true}, - {Utf32, Encoding.UTF_32, null, true, false, false, Encoding.UTF_32BE}, - {Utf32, Encoding.UTF_32BE, x"0000feff", false, true, true}, - {Utf32, Encoding.UTF_32LE, x"fffe0000", false, true}, - ]; - - /*********************************************************************** - - Return the current encoding. This is either the originally - specified encoding, or a derived one obtained by inspecting - the content for a BOM. The latter is performed as part of - the decode() method - - ***********************************************************************/ - - final Encoding encoding () - { - return encoder; - } - - /*********************************************************************** - - Return the signature (BOM) of the current encoding - - ***********************************************************************/ - - final void[] signature () - { - return settings.bom; - } - - /*********************************************************************** - - Configure this instance with unicode converters - - ***********************************************************************/ - - final void setup (Encoding encoding) - { - this.settings = &lookup[encoding]; - this.encoder = encoding; - } - - /*********************************************************************** - - Scan the BOM signatures looking for a match. We scan in - reverse order to get the longest match first - - ***********************************************************************/ - - static final Info* test (void[] content) - { - for (Info* info=lookup.ptr+lookup.length; --info >= lookup.ptr;) - if (info.bom) - { - int len = info.bom.length; - if (len <= content.length) - if (content[0..len] == info.bom[0..len]) - return info; - } - return null; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/convert/Utf.d --- a/tango/tango/text/convert/Utf.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,532 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Oct 2004 - - authors: Kris - - Fast Unicode transcoders. These are particularly sensitive to - minor changes on 32bit x86 devices, because the register set of - those devices is so small. Beware of subtle changes which might - extend the execution-period by as much as 200%. Because of this, - three of the six transcoders might read past the end of input by - one, two, or three bytes before arresting themselves. Note that - support for streaming adds a 15% overhead to the dchar => char - conversion, but has little effect on the others. - - These routines were tuned on an Intel P4; other devices may work - more efficiently with a slightly different approach, though this - is likely to be reasonably optimal on AMD x86 CPUs also. These - algorithms would benefit significantly from those extra AMD64 - registers. On a 3GHz P4, the dchar/char conversions take around - 2500ns to process an array of 1000 ASCII elements. Invoking the - memory manager doubles that period, and quadruples the time for - arrays of 100 elements. Memory allocation can slow down notably - in a multi-threaded environment, so avoid that where possible. - - Surrogate-pairs are dealt with in a non-optimal fashion when - transcoding between utf16 and utf8. Such cases are considered - to be boundary-conditions for this module. - - There are three common cases where the input may be incomplete, - including each 'widening' case of utf8 => utf16, utf8 => utf32, - and utf16 => utf32. An edge-case is utf16 => utf8, if surrogate - pairs are present. Such cases will throw an exception, unless - streaming-mode is enabled ~ in the latter mode, an additional - integer is returned indicating how many elements of the input - have been consumed. In all cases, a correct slice of the output - is returned. - - For details on Unicode processing see: - $(UL $(LINK http://www.utf-8.com/)) - $(UL $(LINK http://www.hackcraft.net/xmlUnicode/)) - $(UL $(LINK http://www.azillionmonkeys.com/qed/unicode.html/)) - $(UL $(LINK http://icu.sourceforge.net/docs/papers/forms_of_unicode/)) - -*******************************************************************************/ - -module tango.text.convert.Utf; - -public extern (C) void onUnicodeError (char[] msg, size_t idx = 0); - - -/******************************************************************************* - - Encode Utf8 up to a maximum of 4 bytes long (five & six byte - variations are not supported). - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - For example: - - --- - char[] output; - - char[] result = toString (input, output); - - // reset output after a realloc - if (result.length > output.length) - output = result; - --- - -*******************************************************************************/ - -char[] toString (wchar[] input, char[] output=null, uint* ate=null) -{ - if (ate) - *ate = input.length; - else - { - // potentially reallocate output - int estimate = input.length * 2 + 3; - if (output.length < estimate) - output.length = estimate; - } - - char* pOut = output.ptr; - char* pMax = pOut + output.length - 3; - - foreach (int eaten, wchar b; input) - { - // about to overflow the output? - if (pOut > pMax) - { - // if streaming, just return the unused input - if (ate) - { - *ate = eaten; - break; - } - - // reallocate the output buffer - int len = pOut - output.ptr; - output.length = len + len / 2; - pOut = output.ptr + len; - pMax = output.ptr + output.length - 3; - } - - if (b < 0x80) - *pOut++ = b; - else - if (b < 0x0800) - { - pOut[0] = 0xc0 | ((b >> 6) & 0x3f); - pOut[1] = 0x80 | (b & 0x3f); - pOut += 2; - } - else - if (b < 0xd800 || b > 0xdfff) - { - pOut[0] = 0xe0 | ((b >> 12) & 0x3f); - pOut[1] = 0x80 | ((b >> 6) & 0x3f); - pOut[2] = 0x80 | (b & 0x3f); - pOut += 3; - } - else - // deal with surrogate-pairs - return toString (toString32(input, null, ate), output); - } - - // return the produced output - return output [0..(pOut - output.ptr)]; -} - -/******************************************************************************* - - Decode Utf8 produced by the above toString() method. - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - -*******************************************************************************/ - -wchar[] toString16 (char[] input, wchar[] output=null, uint* ate=null) -{ - int produced; - char* pIn = input.ptr; - char* pMax = pIn + input.length; - char* pValid; - - if (ate is null) - if (input.length > output.length) - output.length = input.length; - - if (input.length) - foreach (inout wchar d; output) - { - pValid = pIn; - wchar b = cast(wchar) *pIn; - - if (b & 0x80) - if (b < 0xe0) - { - b &= 0x1f; - b = (b << 6) | (*++pIn & 0x3f); - } - else - if (b < 0xf0) - { - b &= 0x0f; - b = (b << 6) | (pIn[1] & 0x3f); - b = (b << 6) | (pIn[2] & 0x3f); - pIn += 2; - } - else - // deal with surrogate-pairs - return toString16 (toString32(input, null, ate), output); - - d = b; - ++produced; - - // did we read past the end of the input? - if (++pIn >= pMax) - if (pIn > pMax) - { - // yep ~ return tail or throw error? - if (ate) - { - pIn = pValid; - --produced; - break; - } - onUnicodeError ("Unicode.toString16 : incomplete utf8 input", pIn - input.ptr); - } - else - break; - } - - // do we still have some input left? - if (ate) - *ate = pIn - input.ptr; - else - if (pIn < pMax) - // this should never happen! - onUnicodeError ("Unicode.toString16 : utf8 overflow", pIn - input.ptr); - - // return the produced output - return output [0..produced]; -} - - -/******************************************************************************* - - Encode Utf8 up to a maximum of 4 bytes long (five & six - byte variations are not supported). Throws an exception - where the input dchar is greater than 0x10ffff. - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - -*******************************************************************************/ - -char[] toString (dchar[] input, char[] output=null, uint* ate=null) -{ - if (ate) - *ate = input.length; - else - { - // potentially reallocate output - int estimate = input.length * 2 + 4; - if (output.length < estimate) - output.length = estimate; - } - - char* pOut = output.ptr; - char* pMax = pOut + output.length - 4; - - foreach (int eaten, dchar b; input) - { - // about to overflow the output? - if (pOut > pMax) - { - // if streaming, just return the unused input - if (ate) - { - *ate = eaten; - break; - } - - // reallocate the output buffer - int len = pOut - output.ptr; - output.length = len + len / 2; - pOut = output.ptr + len; - pMax = output.ptr + output.length - 4; - } - - if (b < 0x80) - *pOut++ = b; - else - if (b < 0x0800) - { - pOut[0] = 0xc0 | ((b >> 6) & 0x3f); - pOut[1] = 0x80 | (b & 0x3f); - pOut += 2; - } - else - if (b < 0x10000) - { - pOut[0] = 0xe0 | ((b >> 12) & 0x3f); - pOut[1] = 0x80 | ((b >> 6) & 0x3f); - pOut[2] = 0x80 | (b & 0x3f); - pOut += 3; - } - else - if (b < 0x110000) - { - pOut[0] = 0xf0 | ((b >> 18) & 0x3f); - pOut[1] = 0x80 | ((b >> 12) & 0x3f); - pOut[2] = 0x80 | ((b >> 6) & 0x3f); - pOut[3] = 0x80 | (b & 0x3f); - pOut += 4; - } - else - onUnicodeError ("Unicode.toString : invalid dchar", eaten); - } - - // return the produced output - return output [0..(pOut - output.ptr)]; -} - - -/******************************************************************************* - - Decode Utf8 produced by the above toString() method. - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - -*******************************************************************************/ - -dchar[] toString32 (char[] input, dchar[] output=null, uint* ate=null) -{ - int produced; - char* pIn = input.ptr; - char* pMax = pIn + input.length; - char* pValid; - - if (ate is null) - if (input.length > output.length) - output.length = input.length; - - if (input.length) - foreach (inout dchar d; output) - { - pValid = pIn; - dchar b = cast(dchar) *pIn; - - if (b & 0x80) - if (b < 0xe0) - { - b &= 0x1f; - b = (b << 6) | (*++pIn & 0x3f); - } - else - if (b < 0xf0) - { - b &= 0x0f; - b = (b << 6) | (pIn[1] & 0x3f); - b = (b << 6) | (pIn[2] & 0x3f); - pIn += 2; - } - else - { - b &= 0x07; - b = (b << 6) | (pIn[1] & 0x3f); - b = (b << 6) | (pIn[2] & 0x3f); - b = (b << 6) | (pIn[3] & 0x3f); - - if (b >= 0x110000) - onUnicodeError ("Unicode.toString32 : invalid utf8 input", pIn - input.ptr); - pIn += 3; - } - - d = b; - ++produced; - - // did we read past the end of the input? - if (++pIn >= pMax) - if (pIn > pMax) - { - // yep ~ return tail or throw error? - if (ate) - { - pIn = pValid; - --produced; - break; - } - onUnicodeError ("Unicode.toString32 : incomplete utf8 input", pIn - input.ptr); - } - else - break; - } - - // do we still have some input left? - if (ate) - *ate = pIn - input.ptr; - else - if (pIn < pMax) - // this should never happen! - onUnicodeError ("Unicode.toString32 : utf8 overflow", pIn - input.ptr); - - // return the produced output - return output [0..produced]; -} - -/******************************************************************************* - - Encode Utf16 up to a maximum of 2 bytes long. Throws an exception - where the input dchar is greater than 0x10ffff. - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - -*******************************************************************************/ - -wchar[] toString16 (dchar[] input, wchar[] output=null, uint* ate=null) -{ - if (ate) - *ate = input.length; - else - { - int estimate = input.length * 2 + 2; - if (output.length < estimate) - output.length = estimate; - } - - wchar* pOut = output.ptr; - wchar* pMax = pOut + output.length - 2; - - foreach (int eaten, dchar b; input) - { - // about to overflow the output? - if (pOut > pMax) - { - // if streaming, just return the unused input - if (ate) - { - *ate = eaten; - break; - } - - // reallocate the output buffer - int len = pOut - output.ptr; - output.length = len + len / 2; - pOut = output.ptr + len; - pMax = output.ptr + output.length - 2; - } - - if (b < 0x10000) - *pOut++ = b; - else - if (b < 0x110000) - { - pOut[0] = 0xd800 | (((b - 0x10000) >> 10) & 0x3ff); - pOut[1] = 0xdc00 | ((b - 0x10000) & 0x3ff); - pOut += 2; - } - else - onUnicodeError ("Unicode.toString16 : invalid dchar", eaten); - } - - // return the produced output - return output [0..(pOut - output.ptr)]; -} - -/******************************************************************************* - - Decode Utf16 produced by the above toString16() method. - - If the output is provided off the stack, it should be large - enough to encompass the entire transcoding; failing to do - so will cause the output to be moved onto the heap instead. - - Returns a slice of the output buffer, corresponding to the - converted characters. For optimum performance, the returned - buffer should be specified as 'output' on subsequent calls. - -*******************************************************************************/ - -dchar[] toString32 (wchar[] input, dchar[] output=null, uint* ate=null) -{ - int produced; - wchar* pIn = input.ptr; - wchar* pMax = pIn + input.length; - wchar* pValid; - - if (ate is null) - if (input.length > output.length) - output.length = input.length; - - if (input.length) - foreach (inout dchar d; output) - { - pValid = pIn; - dchar b = cast(dchar) *pIn; - - // simple conversion ~ see http://www.unicode.org/faq/utf_bom.html#35 - if (b >= 0xd800 && b <= 0xdfff) - b = ((b - 0xd7c0) << 10) + (*++pIn - 0xdc00); - - if (b >= 0x110000) - onUnicodeError ("Unicode.toString32 : invalid utf16 input", pIn - input.ptr); - - d = b; - ++produced; - - if (++pIn >= pMax) - if (pIn > pMax) - { - // yep ~ return tail or throw error? - if (ate) - { - pIn = pValid; - --produced; - break; - } - onUnicodeError ("Unicode.toString32 : incomplete utf16 input", pIn - input.ptr); - } - else - break; - } - - // do we still have some input left? - if (ate) - *ate = pIn - input.ptr; - else - if (pIn < pMax) - // this should never happen! - onUnicodeError ("Unicode.toString32 : utf16 overflow", pIn - input.ptr); - - // return the produced output - return output [0..produced]; -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Collation.d --- a/tango/tango/text/locale/Collation.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,243 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - -******************************************************************************/ - -module tango.text.locale.Collation; - -private import tango.text.locale.Core; - -version (Windows) - private import tango.text.locale.Win32; -else version (Posix) - private import tango.text.locale.Posix; - - /** - Compares strings using the specified case and cultural comparision rules. - */ -public class StringComparer { - - private static StringComparer invariant_; - private static StringComparer invariantIgnoreCase_; - private Culture culture_; - private bool ignoreCase_; - - static this() { - invariant_ = new StringComparer(Culture.invariantCulture, false); - invariantIgnoreCase_ = new StringComparer(Culture.invariantCulture, true); - } - - /** - Creates an instance that compares strings using the rules of the specified culture. - Params: - culture = A Culture instance whose rules are used to compare strings. - ignoreCase = true to perform case-insensitive comparisons; false to perform case-sensitive comparisions. - */ - public this(Culture culture, bool ignoreCase) { - culture_ = culture; - ignoreCase_ = ignoreCase; - } - - /** - Compares two strings and returns the sort order. - Returns: - -1 is strA is less than strB; 0 if strA is equal to strB; 1 if strA is greater than strB. - Params: - strA = A string to compare to strB. - strB = A string to compare to strA. - */ - public int compare(char[] strA, char[] strB) { - return nativeMethods.compareString(culture_.id, strA, 0, strA.length, strB, 0, strB.length, ignoreCase_); - } - - /** - Indicates whether the two strings are equal. - Returns: - true if strA and strB are equal; otherwise, false. - Params: - strA = A string to compare to strB. - strB = A string to compare to strA. - */ - public bool equals(char[] strA, char[] strB) { - return (compare(strA, strB) == 0); - } - - /** - $(I Property.) Retrieves an instance that performs case-sensitive comparisons using the rules of the current culture. - Returns: - A new StringComparer instance. - */ - public static StringComparer currentCulture() { - return new StringComparer(Culture.current, false); - } - - /** - $(I Property.) Retrieves an instance that performs case-insensitive comparisons using the rules of the current culture. - Returns: - A new StringComparer instance. - */ - public static StringComparer currentCultureIgnoreCase() { - return new StringComparer(Culture.current, true); - } - - /** - $(I Property.) Retrieves an instance that performs case-sensitive comparisons using the rules of the invariant culture. - Returns: - A new StringComparer instance. - */ - public static StringComparer invariantCulture() { - return invariant_; - } - - /** - $(I Property.) Retrieves an instance that performs case-insensitive comparisons using the rules of the invariant culture. - Returns: - A new StringComparer instance. - */ - public static StringComparer invariantCultureIgnoreCase() { - return invariantIgnoreCase_; - } - -} - -/** - $(I Delegate.) Represents the method that will handle the string comparison. - Remarks: - The delegate has the signature $(I int delegate(char[], char[])). - */ -alias int delegate(char[], char[]) StringComparison; - -/** - Sorts strings according to the rules of the specified culture. - */ -public class StringSorter { - - private static StringSorter invariant_; - private static StringSorter invariantIgnoreCase_; - private Culture culture_; - private StringComparison comparison_; - - static this() { - invariant_ = new StringSorter(StringComparer.invariantCulture); - invariantIgnoreCase_ = new StringSorter(StringComparer.invariantCultureIgnoreCase); - } - - /** - Creates an instance using the specified StringComparer. - Params: - comparer = The StringComparer to use when comparing strings. $(I Optional.) - */ - public this(StringComparer comparer = null) { - if (comparer is null) - comparer = StringComparer.currentCulture; - comparison_ = &comparer.compare; - } - - /** - Creates an instance using the specified delegate. - Params: - comparison = The delegate to use when comparing strings. - Remarks: - The comparison parameter must have the same signature as StringComparison. - */ - public this(StringComparison comparison) { - comparison_ = comparison; - } - - /** - Sorts all the elements in an array. - Params: - array = The array of strings to _sort. - */ - public void sort(inout char[][] array) { - sort(array, 0, array.length); - } - - /** - Sorts a range of the elements in an array. - Params: - array = The array of strings to _sort. - index = The starting index of the range. - count = The number of elements in the range. - */ - public void sort(inout char[][] array, int index, int count) { - - void qsort(int left, int right) { - do { - int i = left, j = right; - char[] pivot = array[left + ((right - left) >> 1)]; - - do { - while (comparison_(array[i], pivot) < 0) - i++; - while (comparison_(pivot, array[j]) < 0) - j--; - - if (i > j) - break; - else if (i < j) { - char[] temp = array[i]; - array[i] = array[j]; - array[j] = temp; - } - - i++; - j--; - } while (i <= j); - - if (j - left <= right - i) { - if (left < j) - qsort(left, j); - left = i; - } - else { - if (i < right) - qsort(i, right); - right = j; - } - } while (left < right); - } - - qsort(index, index + (count - 1)); - } - - /** - $(I Property.) Retrieves an instance that performs a case-sensitive sort using the rules of the current culture. - Returns: A StringSorter instance. - */ - public static StringSorter currentCulture() { - return new StringSorter(StringComparer.currentCulture); - } - - /** - $(I Property.) Retrieves an instance that performs a case-insensitive sort using the rules of the current culture. - Returns: A StringSorter instance. - */ - public static StringSorter currentCultureIgnoreCase() { - return new StringSorter(StringComparer.currentCultureIgnoreCase); - } - - /** - $(I Property.) Retrieves an instance that performs a case-sensitive sort using the rules of the invariant culture. - Returns: A StringSorter instance. - */ - public static StringSorter invariantCulture() { - return invariant_; - } - - /** - $(I Property.) Retrieves an instance that performs a case-insensitive sort using the rules of the invariant culture. - Returns: A StringSorter instance. - */ - public static StringSorter invariantCultureIgnoreCase() { - return invariantIgnoreCase_; - } - -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Convert.d --- a/tango/tango/text/locale/Convert.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1560 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - -******************************************************************************/ - -module tango.text.locale.Convert; - -private import tango.time.WallClock; - -private import tango.core.Exception; - -private import tango.text.locale.Core; - -private import tango.time.chrono.Calendar; - -private import Integer = tango.text.convert.Integer; - -/****************************************************************************** - -******************************************************************************/ - -private struct Result -{ - private uint index; - private char[] target_; - - /********************************************************************** - - **********************************************************************/ - - private static Result opCall (char[] target) - { - Result result; - - result.target_ = target; - return result; - } - - /********************************************************************** - - **********************************************************************/ - - private void opCatAssign (char[] rhs) - { - uint end = index + rhs.length; - - target_[index .. end] = rhs; - index = end; - } - - /********************************************************************** - - **********************************************************************/ - - private void opCatAssign (char rhs) - { - target_[index++] = rhs; - } - - /********************************************************************** - - **********************************************************************/ - - private char[] get () - { - return target_[0 .. index]; - } - - /********************************************************************** - - **********************************************************************/ - - private char[] scratch () - { - return target_; - } -} - - -/****************************************************************************** - - * Converts the value of this instance to its equivalent string representation using the specified _format and culture-specific formatting information. - * Params: - * format = A _format string. - * formatService = An IFormatService that provides culture-specific formatting information. - * Returns: A string representation of the value of this instance as specified by format and formatService. - * Remarks: See $(LINK2 datetimeformat.html, Time Formatting) for more information about date and time formatting. - * Examples: - * --- - * import tango.io.Print, tango.text.locale.Core, tango.time.WallClock; - * - * void main() { - * Culture culture = Culture.current; - * Time now = WallClock.now; - * - * Println("Current date and time: %s", now.toString()); - * Println(); - * - * // Format the current date and time in a number of ways. - * Println("Culture: %s", culture.englishName); - * Println(); - * - * Println("Short date: %s", now.toString("d")); - * Println("Long date: %s", now.toString("D")); - * Println("Short time: %s", now.toString("t")); - * Println("Long time: %s", now.toString("T")); - * Println("General date short time: %s", now.toString("g")); - * Println("General date long time: %s", now.toString("G")); - * Println("Month: %s", now.toString("M")); - * Println("RFC1123: %s", now.toString("R")); - * Println("Sortable: %s", now.toString("s")); - * Println("Year: %s", now.toString("Y")); - * Println(); - * - * // Display the same values using a different culture. - * culture = Culture.getCulture("fr-FR"); - * Println("Culture: %s", culture.englishName); - * Println(); - * - * Println("Short date: %s", now.toString("d", culture)); - * Println("Long date: %s", now.toString("D", culture)); - * Println("Short time: %s", now.toString("t", culture)); - * Println("Long time: %s", now.toString("T", culture)); - * Println("General date short time: %s", now.toString("g", culture)); - * Println("General date long time: %s", now.toString("G", culture)); - * Println("Month: %s", now.toString("M", culture)); - * Println("RFC1123: %s", now.toString("R", culture)); - * Println("Sortable: %s", now.toString("s", culture)); - * Println("Year: %s", now.toString("Y", culture)); - * Println(); - * } - * - * // Produces the following output: - * // Current date and time: 26/05/2006 10:04:57 AM - * // - * // Culture: English (United Kingdom) - * // - * // Short date: 26/05/2006 - * // Long date: 26 May 2006 - * // Short time: 10:04 - * // Long time: 10:04:57 AM - * // General date short time: 26/05/2006 10:04 - * // General date long time: 26/05/2006 10:04:57 AM - * // Month: 26 May - * // RFC1123: Fri, 26 May 2006 10:04:57 GMT - * // Sortable: 2006-05-26T10:04:57 - * // Year: May 2006 - * // - * // Culture: French (France) - * // - * // Short date: 26/05/2006 - * // Long date: vendredi 26 mai 2006 - * // Short time: 10:04 - * // Long time: 10:04:57 - * // General date short time: 26/05/2006 10:04 - * // General date long time: 26/05/2006 10:04:57 - * // Month: 26 mai - * // RFC1123: ven., 26 mai 2006 10:04:57 GMT - * // Sortable: 2006-05-26T10:04:57 - * // Year: mai 2006 - * --- - -******************************************************************************/ - -public char[] formatDateTime (char[] output, Time dateTime, char[] format, IFormatService formatService = null) -{ - return formatDateTime (output, dateTime, format, DateTimeFormat.getInstance(formatService)); -} - -char[] formatDateTime (char[] output, Time dateTime, char[] format, DateTimeFormat dtf) -{ - /********************************************************************** - - **********************************************************************/ - - char[] expandKnownFormat(char[] format, inout Time dateTime) - { - char[] f; - - switch (format[0]) - { - case 'd': - f = dtf.shortDatePattern; - break; - case 'D': - f = dtf.longDatePattern; - break; - case 'f': - f = dtf.longDatePattern ~ " " ~ dtf.shortTimePattern; - break; - case 'F': - f = dtf.fullDateTimePattern; - break; - case 'g': - f = dtf.generalShortTimePattern; - break; - case 'G': - f = dtf.generalLongTimePattern; - break; - case 'm': - case 'M': - f = dtf.monthDayPattern; - break; - case 'r': - case 'R': - f = dtf.rfc1123Pattern; - break; - case 's': - f = dtf.sortableDateTimePattern; - break; - case 't': - f = dtf.shortTimePattern; - break; - case 'T': - f = dtf.longTimePattern; - break; -version (Full) -{ - case 'u': - dateTime = dateTime.toUniversalTime(); - dtf = DateTimeFormat.invariantFormat; - f = dtf.universalSortableDateTimePattern; - break; - case 'U': - dtf = cast(DateTimeFormat) dtf.clone(); - dateTime = dateTime.toUniversalTime(); - if (typeid(typeof(dtf.calendar)) !is typeid(Gregorian)) - dtf.calendar = Gregorian.generic; - f = dtf.fullDateTimePattern; - break; -} - case 'y': - case 'Y': - f = dtf.yearMonthPattern; - break; - default: - throw new IllegalArgumentException("Invalid date format."); - } - - return f; - } - - /********************************************************************** - - **********************************************************************/ - - char[] formatCustom (inout Result result, Time dateTime, char[] format) - { - - int parseRepeat(char[] format, int pos, char c) - { - int n = pos + 1; - while (n < format.length && format[n] is c) - n++; - return n - pos; - } - - char[] formatDayOfWeek(Calendar.DayOfWeek dayOfWeek, int rpt) - { - if (rpt is 3) - return dtf.getAbbreviatedDayName(dayOfWeek); - return dtf.getDayName(dayOfWeek); - } - - char[] formatMonth(int month, int rpt) - { - if (rpt is 3) - return dtf.getAbbreviatedMonthName(month); - return dtf.getMonthName(month); - } - - char[] formatInt (char[] tmp, int v, int minimum) - { - auto num = Integer.format (tmp, v, Integer.Style.Unsigned); - if ((minimum -= num.length) > 0) - { - auto p = tmp.ptr + tmp.length - num.length; - while (minimum--) - *--p = '0'; - num = tmp [p-tmp.ptr .. $]; - } - return num; - } - - int parseQuote(char[] format, int pos, out char[] result) - { - int start = pos; - char chQuote = format[pos++]; - bool found; - while (pos < format.length) - { - char c = format[pos++]; - if (c is chQuote) - { - found = true; - break; - } - else - if (c is '\\') - { // escaped - if (pos < format.length) - result ~= format[pos++]; - } - else - result ~= c; - } - return pos - start; - } - - - Calendar calendar = dtf.calendar; - bool justTime = true; - int index, len; - char[10] tmp; - - if (format[0] is '%') - { - // specifiers for both standard format strings and custom ones - const char[] commonSpecs = "dmMsty"; - foreach (c; commonSpecs) - if (format[1] is c) - { - index += 1; - break; - } - } - - while (index < format.length) - { - char c = format[index]; - auto time = dateTime.time; - - switch (c) - { - case 'd': // day - len = parseRepeat(format, index, c); - if (len <= 2) - { - int day = calendar.getDayOfMonth(dateTime); - result ~= formatInt (tmp, day, len); - } - else - result ~= formatDayOfWeek(calendar.getDayOfWeek(dateTime), len); - justTime = false; - break; - - case 'M': // month - len = parseRepeat(format, index, c); - int month = calendar.getMonth(dateTime); - if (len <= 2) - result ~= formatInt (tmp, month, len); - else - result ~= formatMonth(month, len); - justTime = false; - break; - case 'y': // year - len = parseRepeat(format, index, c); - int year = calendar.getYear(dateTime); - // Two-digit years for Japanese - if (calendar.id is Calendar.JAPAN) - result ~= formatInt (tmp, year, 2); - else - { - if (len <= 2) - result ~= formatInt (tmp, year % 100, len); - else - result ~= formatInt (tmp, year, len); - } - justTime = false; - break; - case 'h': // hour (12-hour clock) - len = parseRepeat(format, index, c); - int hour = time.hours % 12; - if (hour is 0) - hour = 12; - result ~= formatInt (tmp, hour, len); - break; - case 'H': // hour (24-hour clock) - len = parseRepeat(format, index, c); - result ~= formatInt (tmp, time.hours, len); - break; - case 'm': // minute - len = parseRepeat(format, index, c); - result ~= formatInt (tmp, time.minutes, len); - break; - case 's': // second - len = parseRepeat(format, index, c); - result ~= formatInt (tmp, time.seconds, len); - break; - case 't': // AM/PM - len = parseRepeat(format, index, c); - if (len is 1) - { - if (time.hours < 12) - { - if (dtf.amDesignator.length != 0) - result ~= dtf.amDesignator[0]; - } - else - { - if (dtf.pmDesignator.length != 0) - result ~= dtf.pmDesignator[0]; - } - } - else - result ~= (time.hours < 12) ? dtf.amDesignator : dtf.pmDesignator; - break; - case 'z': // timezone offset - len = parseRepeat(format, index, c); -version (Full) -{ - TimeSpan offset = (justTime && dateTime.ticks < TICKS_PER_DAY) - ? TimeZone.current.getUtcOffset(WallClock.now) - : TimeZone.current.getUtcOffset(dateTime); - int hours = offset.hours; - int minutes = offset.minutes; - result ~= (offset.backward) ? '-' : '+'; -} -else -{ - auto minutes = cast(int) (WallClock.zone.minutes); - if (minutes < 0) - minutes = -minutes, result ~= '-'; - else - result ~= '+'; - int hours = minutes / 60; - minutes %= 60; -} - if (len is 1) - result ~= formatInt (tmp, hours, 1); - else - if (len is 2) - result ~= formatInt (tmp, hours, 2); - else - { - result ~= formatInt (tmp, hours, 2); - result ~= ':'; - result ~= formatInt (tmp, minutes, 2); - } - break; - case ':': // time separator - len = 1; - result ~= dtf.timeSeparator; - break; - case '/': // date separator - len = 1; - result ~= dtf.dateSeparator; - break; - case '\"': // string literal - case '\'': // char literal - char[] quote; - len = parseQuote(format, index, quote); - result ~= quote; - break; - default: - len = 1; - result ~= c; - break; - } - index += len; - } - return result.get; - } - - - auto result = Result (output); - - if (format is null) - format = "G"; // Default to general format. - - if (format.length is 1) // It might be one of our shortcuts. - format = expandKnownFormat (format, dateTime); - - return formatCustom (result, dateTime, format); -} - - - -/******************************************************************************* - -*******************************************************************************/ - -private extern (C) private char* ecvt(double d, int digits, out int decpt, out bool sign); - -/******************************************************************************* - -*******************************************************************************/ - -// Must match NumberFormat.decimalPositivePattern -package const char[] positiveNumberFormat = "#"; - -// Must match NumberFormat.decimalNegativePattern -package const char[][] negativeNumberFormats = - [ - "(#)", "-#", "- #", "#-", "# -" - ]; - -// Must match NumberFormat.currencyPositivePattern -package const char[][] positiveCurrencyFormats = - [ - "$#", "#$", "$ #", "# $" - ]; - -// Must match NumberFormat.currencyNegativePattern -package const char[][] negativeCurrencyFormats = - [ - "($#)", "-$#", "$-#", "$#-", "(#$)", - "-#$", "#-$", "#$-", "-# $", "-$ #", - "# $-", "$ #-", "$ -#", "#- $", "($ #)", "(# $)" - ]; - -/******************************************************************************* - -*******************************************************************************/ - -package template charTerm (T) -{ - package int charTerm(T* s) - { - int i; - while (*s++ != '\0') - i++; - return i; - } -} - -/******************************************************************************* - -*******************************************************************************/ - -char[] longToString (char[] buffer, long value, int digits, char[] negativeSign) -{ - if (digits < 1) - digits = 1; - - int n = buffer.length; - ulong uv = (value >= 0) ? value : cast(ulong) -value; - - if (uv > uint.max) - { - while (--digits >= 0 || uv != 0) - { - buffer[--n] = uv % 10 + '0'; - uv /= 10; - } - } - else - { - uint v = cast(uint) uv; - while (--digits >= 0 || v != 0) - { - buffer[--n] = v % 10 + '0'; - v /= 10; - } - } - - - if (value < 0) - { - for (int i = negativeSign.length - 1; i >= 0; i--) - buffer[--n] = negativeSign[i]; - } - - return buffer[n .. $]; -} - -/******************************************************************************* - -*******************************************************************************/ - -char[] longToHexString (char[] buffer, ulong value, int digits, char format) -{ - if (digits < 1) - digits = 1; - - int n = buffer.length; - while (--digits >= 0 || value != 0) - { - auto v = cast(uint) value & 0xF; - buffer[--n] = (v < 10) ? v + '0' : v + format - ('X' - 'A' + 10); - value >>= 4; - } - - return buffer[n .. $]; -} - -/******************************************************************************* - -*******************************************************************************/ - -char[] longToBinString (char[] buffer, ulong value, int digits) -{ - if (digits < 1) - digits = 1; - - int n = buffer.length; - while (--digits >= 0 || value != 0) - { - buffer[--n] = (value & 1) + '0'; - value >>= 1; - } - - return buffer[n .. $]; -} - -/******************************************************************************* - -*******************************************************************************/ - -char parseFormatSpecifier (char[] format, out int length) -{ - int i = -1; - char specifier; - - if (format.length) - { - auto s = format[0]; - - if (s >= 'A' && s <= 'Z' || s >= 'a' && s <= 'z') - { - specifier = s; - - foreach (c; format [1..$]) - if (c >= '0' && c <= '9') - { - c -= '0'; - if (i < 0) - i = c; - else - i = i * 10 + c; - } - else - break; - } - } - else - specifier = 'G'; - - length = i; - return specifier; -} - -/******************************************************************************* - -*******************************************************************************/ - -char[] formatInteger (char[] output, long value, char[] format, NumberFormat nf) -{ - int length; - auto specifier = parseFormatSpecifier (format, length); - - switch (specifier) - { - case 'g': - case 'G': - if (length > 0) - break; - // Fall through. - - case 'd': - case 'D': - return longToString (output, value, length, nf.negativeSign); - - case 'x': - case 'X': - return longToHexString (output, cast(ulong)value, length, specifier); - - case 'b': - case 'B': - return longToBinString (output, cast(ulong)value, length); - - default: - break; - } - - Result result = Result (output); - Number number = Number (value); - if (specifier != char.init) - return toString (number, result, specifier, length, nf); - - return number.toStringFormat (result, format, nf); -} - -/******************************************************************************* - -*******************************************************************************/ - -private enum { - EXP = 0x7ff, - NAN_FLAG = 0x80000000, - INFINITY_FLAG = 0x7fffffff, - } - -char[] formatDouble (char[] output, double value, char[] format, NumberFormat nf) -{ - int length; - int precision = 6; - Result result = Result (output); - char specifier = parseFormatSpecifier (format, length); - - switch (specifier) - { - case 'r': - case 'R': - Number number = Number (value, 15); - - if (number.scale == NAN_FLAG) - return nf.nanSymbol; - - if (number.scale == INFINITY_FLAG) - return number.sign ? nf.negativeInfinitySymbol - : nf.positiveInfinitySymbol; - - double d; - number.toDouble(d); - if (d == value) - return toString (number, result, 'G', 15, nf); - - number = Number(value, 17); - return toString (number, result, 'G', 17, nf); - - case 'g': - case 'G': - if (length > 15) - precision = 17; - // Fall through. - - default: - break; - } - - Number number = Number(value, precision); - - if (number.scale == NAN_FLAG) - return nf.nanSymbol; - - if (number.scale == INFINITY_FLAG) - return number.sign ? nf.negativeInfinitySymbol - : nf.positiveInfinitySymbol; - - if (specifier != char.init) - return toString (number, result, specifier, length, nf); - - return number.toStringFormat (result, format, nf); -} - -/******************************************************************************* - -*******************************************************************************/ - -void formatGeneral (inout Number number, inout Result target, int length, char format, NumberFormat nf) -{ - int pos = number.scale; - - auto p = number.digits.ptr; - if (pos > 0) - { - while (pos > 0) - { - target ~= (*p != '\0') ? *p++ : '0'; - pos--; - } - } - else - target ~= '0'; - - if (*p != '\0') - { - target ~= nf.numberDecimalSeparator; - while (pos < 0) - { - target ~= '0'; - pos++; - } - - while (*p != '\0') - target ~= *p++; - } -} - -/******************************************************************************* - -*******************************************************************************/ - -void formatNumber (inout Number number, inout Result target, int length, NumberFormat nf) -{ - char[] format = number.sign ? negativeNumberFormats[nf.numberNegativePattern] - : positiveNumberFormat; - - // Parse the format. - foreach (c; format) - { - switch (c) - { - case '#': - formatFixed (number, target, length, nf.numberGroupSizes, - nf.numberDecimalSeparator, nf.numberGroupSeparator); - break; - - case '-': - target ~= nf.negativeSign; - break; - - default: - target ~= c; - break; - } - } -} - -/******************************************************************************* - -*******************************************************************************/ - -void formatCurrency (inout Number number, inout Result target, int length, NumberFormat nf) -{ - char[] format = number.sign ? negativeCurrencyFormats[nf.currencyNegativePattern] - : positiveCurrencyFormats[nf.currencyPositivePattern]; - - // Parse the format. - foreach (c; format) - { - switch (c) - { - case '#': - formatFixed (number, target, length, nf.currencyGroupSizes, - nf.currencyDecimalSeparator, nf.currencyGroupSeparator); - break; - - case '-': - target ~= nf.negativeSign; - break; - - case '$': - target ~= nf.currencySymbol; - break; - - default: - target ~= c; - break; - } - } -} - -/******************************************************************************* - -*******************************************************************************/ - -void formatFixed (inout Number number, inout Result target, int length, - int[] groupSizes, char[] decimalSeparator, char[] groupSeparator) -{ - int pos = number.scale; - auto p = number.digits.ptr; - - if (pos > 0) - { - if (groupSizes.length != 0) - { - // Calculate whether we have enough digits to format. - int count = groupSizes[0]; - int index, size; - - while (pos > count) - { - size = groupSizes[index]; - if (size == 0) - break; - - if (index < groupSizes.length - 1) - index++; - - count += groupSizes[index]; - } - - size = (count == 0) ? 0 : groupSizes[0]; - - // Insert the separator according to groupSizes. - int end = charTerm(p); - int start = (pos < end) ? pos : end; - - - char[] separator = groupSeparator; - index = 0; - - // questionable: use the back end of the output buffer to - // format the separators, and then copy back to start - char[] temp = target.scratch; - uint ii = temp.length; - - for (int c, i = pos - 1; i >= 0; i--) - { - temp[--ii] = (i < start) ? number.digits[i] : '0'; - if (size > 0) - { - c++; - if (c == size && i != 0) - { - uint iii = ii - separator.length; - temp[iii .. ii] = separator; - ii = iii; - - if (index < groupSizes.length - 1) - size = groupSizes[++index]; - - c = 0; - } - } - } - target ~= temp[ii..$]; - p += start; - } - else - { - while (pos > 0) - { - target ~= (*p != '\0') ? *p++ : '0'; - pos--; - } - } - } - else - // Negative scale. - target ~= '0'; - - if (length > 0) - { - target ~= decimalSeparator; - while (pos < 0 && length > 0) - { - target ~= '0'; - pos++; - length--; - } - - while (length > 0) - { - target ~= (*p != '\0') ? *p++ : '0'; - length--; - } - } -} - -/****************************************************************************** - -******************************************************************************/ - -char[] toString (inout Number number, inout Result result, char format, int length, NumberFormat nf) -{ - switch (format) - { - case 'c': - case 'C': - // Currency - if (length < 0) - length = nf.currencyDecimalDigits; - - number.round(number.scale + length); - formatCurrency (number, result, length, nf); - break; - - case 'f': - case 'F': - // Fixed - if (length < 0) - length = nf.numberDecimalDigits; - - number.round(number.scale + length); - if (number.sign) - result ~= nf.negativeSign; - - formatFixed (number, result, length, null, nf.numberDecimalSeparator, null); - break; - - case 'n': - case 'N': - // Number - if (length < 0) - length = nf.numberDecimalDigits; - - number.round (number.scale + length); - formatNumber (number, result, length, nf); - break; - - case 'g': - case 'G': - // General - if (length < 1) - length = number.precision; - - number.round(length); - if (number.sign) - result ~= nf.negativeSign; - - formatGeneral (number, result, length, (format == 'g') ? 'e' : 'E', nf); - break; - - default: - return "{invalid FP format specifier '" ~ format ~ "'}"; - } - return result.get; -} - - -/******************************************************************************* - -*******************************************************************************/ - -private struct Number -{ - int scale; - bool sign; - int precision; - char[32] digits = void; - - /********************************************************************** - - **********************************************************************/ - - private static Number opCall (long value) - { - Number number; - number.precision = 20; - - if (value < 0) - { - number.sign = true; - value = -value; - } - - char[20] buffer = void; - int n = buffer.length; - - while (value != 0) - { - buffer[--n] = value % 10 + '0'; - value /= 10; - } - - int end = number.scale = -(n - buffer.length); - number.digits[0 .. end] = buffer[n .. n + end]; - number.digits[end] = '\0'; - - return number; - } - - /********************************************************************** - - **********************************************************************/ - - private static Number opCall (double value, int precision) - { - Number number; - number.precision = precision; - - auto p = number.digits.ptr; - long bits = *cast(long*) & value; - long mant = bits & 0x000FFFFFFFFFFFFFL; - int exp = cast(int)((bits >> 52) & EXP); - - if (exp == EXP) - { - number.scale = (mant != 0) ? NAN_FLAG : INFINITY_FLAG; - if (((bits >> 63) & 1) != 0) - number.sign = true; - } - else - { - // Get the digits, decimal point and sign. - char* chars = ecvt(value, number.precision, number.scale, number.sign); - if (*chars != '\0') - { - while (*chars != '\0') - *p++ = *chars++; - } - } - - *p = '\0'; - return number; - } - - /********************************************************************** - - **********************************************************************/ - - private bool toDouble(out double value) - { - const ulong[] pow10 = - [ - 0xa000000000000000UL, - 0xc800000000000000UL, - 0xfa00000000000000UL, - 0x9c40000000000000UL, - 0xc350000000000000UL, - 0xf424000000000000UL, - 0x9896800000000000UL, - 0xbebc200000000000UL, - 0xee6b280000000000UL, - 0x9502f90000000000UL, - 0xba43b74000000000UL, - 0xe8d4a51000000000UL, - 0x9184e72a00000000UL, - 0xb5e620f480000000UL, - 0xe35fa931a0000000UL, - 0xcccccccccccccccdUL, - 0xa3d70a3d70a3d70bUL, - 0x83126e978d4fdf3cUL, - 0xd1b71758e219652eUL, - 0xa7c5ac471b478425UL, - 0x8637bd05af6c69b7UL, - 0xd6bf94d5e57a42beUL, - 0xabcc77118461ceffUL, - 0x89705f4136b4a599UL, - 0xdbe6fecebdedd5c2UL, - 0xafebff0bcb24ab02UL, - 0x8cbccc096f5088cfUL, - 0xe12e13424bb40e18UL, - 0xb424dc35095cd813UL, - 0x901d7cf73ab0acdcUL, - 0x8e1bc9bf04000000UL, - 0x9dc5ada82b70b59eUL, - 0xaf298d050e4395d6UL, - 0xc2781f49ffcfa6d4UL, - 0xd7e77a8f87daf7faUL, - 0xefb3ab16c59b14a0UL, - 0x850fadc09923329cUL, - 0x93ba47c980e98cdeUL, - 0xa402b9c5a8d3a6e6UL, - 0xb616a12b7fe617a8UL, - 0xca28a291859bbf90UL, - 0xe070f78d39275566UL, - 0xf92e0c3537826140UL, - 0x8a5296ffe33cc92cUL, - 0x9991a6f3d6bf1762UL, - 0xaa7eebfb9df9de8aUL, - 0xbd49d14aa79dbc7eUL, - 0xd226fc195c6a2f88UL, - 0xe950df20247c83f8UL, - 0x81842f29f2cce373UL, - 0x8fcac257558ee4e2UL, - ]; - - const uint[] pow10Exp = - [ - 4, 7, 10, 14, 17, 20, 24, 27, 30, 34, - 37, 40, 44, 47, 50, 54, 107, 160, 213, 266, - 319, 373, 426, 479, 532, 585, 638, 691, 745, 798, - 851, 904, 957, 1010, 1064, 1117 - ]; - - uint getDigits(char* p, int len) - { - char* end = p + len; - uint r = *p - '0'; - p++; - while (p < end) - { - r = 10 * r + *p - '0'; - p++; - } - return r; - } - - ulong mult64(uint val1, uint val2) - { - return cast(ulong)val1 * cast(ulong)val2; - } - - ulong mult64L(ulong val1, ulong val2) - { - ulong v = mult64(cast(uint)(val1 >> 32), cast(uint)(val2 >> 32)); - v += mult64(cast(uint)(val1 >> 32), cast(uint)val2) >> 32; - v += mult64(cast(uint)val1, cast(uint)(val2 >> 32)) >> 32; - return v; - } - - auto p = digits.ptr; - int count = charTerm(p); - int left = count; - - while (*p == '0') - { - left--; - p++; - } - - // If the digits consist of nothing but zeros... - if (left == 0) - { - value = 0.0; - return true; - } - - // Get digits, 9 at a time. - int n = (left > 9) ? 9 : left; - left -= n; - ulong bits = getDigits(p, n); - if (left > 0) - { - n = (left > 9) ? 9 : left; - left -= n; - bits = mult64(cast(uint)bits, cast(uint)(pow10[n - 1] >>> (64 - pow10Exp[n - 1]))); - bits += getDigits(p + 9, n); - } - - int scale = this.scale - (count - left); - int s = (scale < 0) ? -scale : scale; - - if (s >= 352) - { - *cast(long*)&value = (scale > 0) ? 0x7FF0000000000000 : 0; - return false; - } - - // Normalise mantissa and bits. - int bexp = 64; - int nzero; - if ((bits >> 32) != 0) - nzero = 32; - - if ((bits >> (16 + nzero)) != 0) - nzero += 16; - - if ((bits >> (8 + nzero)) != 0) - nzero += 8; - - if ((bits >> (4 + nzero)) != 0) - nzero += 4; - - if ((bits >> (2 + nzero)) != 0) - nzero += 2; - - if ((bits >> (1 + nzero)) != 0) - nzero++; - - if ((bits >> nzero) != 0) - nzero++; - - bits <<= 64 - nzero; - bexp -= 64 - nzero; - - // Get decimal exponent. - if ((s & 15) != 0) - { - int expMult = pow10Exp[(s & 15) - 1]; - bexp += (scale < 0) ? ( -expMult + 1) : expMult; - bits = mult64L(bits, pow10[(s & 15) + ((scale < 0) ? 15 : 0) - 1]); - if ((bits & 0x8000000000000000L) == 0) - { - bits <<= 1; - bexp--; - } - } - - if ((s >> 4) != 0) - { - int expMult = pow10Exp[15 + ((s >> 4) - 1)]; - bexp += (scale < 0) ? ( -expMult + 1) : expMult; - bits = mult64L(bits, pow10[30 + ((s >> 4) + ((scale < 0) ? 21 : 0) - 1)]); - if ((bits & 0x8000000000000000L) == 0) - { - bits <<= 1; - bexp--; - } - } - - // Round and scale. - if (cast(uint)bits & (1 << 10) != 0) - { - bits += (1 << 10) - 1 + (bits >>> 11) & 1; - bits >>= 11; - if (bits == 0) - bexp++; - } - else - bits >>= 11; - - bexp += 1022; - if (bexp <= 0) - { - if (bexp < -53) - bits = 0; - else - bits >>= ( -bexp + 1); - } - bits = (cast(ulong)bexp << 52) + (bits & 0x000FFFFFFFFFFFFFL); - - if (sign) - bits |= 0x8000000000000000L; - - value = *cast(double*) & bits; - return true; - } - - - - /********************************************************************** - - **********************************************************************/ - - private char[] toStringFormat (inout Result result, char[] format, NumberFormat nf) - { - bool hasGroups; - int groupCount; - int groupPos = -1, pointPos = -1; - int first = int.max, last, count; - bool scientific; - int n; - char c; - - while (n < format.length) - { - c = format[n++]; - switch (c) - { - case '#': - count++; - break; - - case '0': - if (first == int.max) - first = count; - count++; - last = count; - break; - - case '.': - if (pointPos < 0) - pointPos = count; - break; - - case ',': - if (count > 0 && pointPos < 0) - { - if (groupPos >= 0) - { - if (groupPos == count) - { - groupCount++; - break; - } - hasGroups = true; - } - groupPos = count; - groupCount = 1; - } - break; - - case '\'': - case '\"': - while (n < format.length && format[n++] != c) - {} - break; - - case '\\': - if (n < format.length) - n++; - break; - - default: - break; - } - } - - if (pointPos < 0) - pointPos = count; - - int adjust; - if (groupPos >= 0) - { - if (groupPos == pointPos) - adjust -= groupCount * 3; - else - hasGroups = true; - } - - if (digits[0] != '\0') - { - scale += adjust; - round(scientific ? count : scale + count - pointPos); - } - - first = (first < pointPos) ? pointPos - first : 0; - last = (last > pointPos) ? pointPos - last : 0; - - int pos = pointPos; - int extra; - if (!scientific) - { - pos = (scale > pointPos) ? scale : pointPos; - extra = scale - pointPos; - } - - char[] groupSeparator = nf.numberGroupSeparator; - char[] decimalSeparator = nf.numberDecimalSeparator; - - // Work out the positions of the group separator. - int[] groupPositions; - int groupIndex = -1; - if (hasGroups) - { - if (nf.numberGroupSizes.length == 0) - hasGroups = false; - else - { - int groupSizesTotal = nf.numberGroupSizes[0]; - int groupSize = groupSizesTotal; - int digitsTotal = pos + ((extra < 0) ? extra : 0); - int digitCount = (first > digitsTotal) ? first : digitsTotal; - - int sizeIndex; - while (digitCount > groupSizesTotal) - { - if (groupSize == 0) - break; - - groupPositions ~= groupSizesTotal; - groupIndex++; - - if (sizeIndex < nf.numberGroupSizes.length - 1) - groupSize = nf.numberGroupSizes[++sizeIndex]; - - groupSizesTotal += groupSize; - } - } - } - - //char[] result; - if (sign) - result ~= nf.negativeSign; - - auto p = digits.ptr; - n = 0; - bool pointWritten; - - while (n < format.length) - { - c = format[n++]; - if (extra > 0 && (c == '#' || c == '0' || c == '.')) - { - while (extra > 0) - { - result ~= (*p != '\0') ? *p++ : '0'; - - if (hasGroups && pos > 1 && groupIndex >= 0) - { - if (pos == groupPositions[groupIndex] + 1) - { - result ~= groupSeparator; - groupIndex--; - } - } - pos--; - extra--; - } - } - - switch (c) - { - case '#': - case '0': - if (extra < 0) - { - extra++; - c = (pos <= first) ? '0' : char.init; - } - else - c = (*p != '\0') ? *p++ : pos > last ? '0' : char.init; - - if (c != char.init) - { - result ~= c; - - if (hasGroups && pos > 1 && groupIndex >= 0) - { - if (pos == groupPositions[groupIndex] + 1) - { - result ~= groupSeparator; - groupIndex--; - } - } - } - pos--; - break; - - case '.': - if (pos != 0 || pointWritten) - break; - if (last < 0 || (pointPos < count && *p != '\0')) - { - result ~= decimalSeparator; - pointWritten = true; - } - break; - - case ',': - break; - - case '\'': - case '\"': - if (n < format.length) - n++; - break; - - case '\\': - if (n < format.length) - result ~= format[n++]; - break; - - default: - result ~= c; - break; - } - } - return result.get; - } - - /********************************************************************** - - **********************************************************************/ - - private void round (int pos) - { - int index; - while (index < pos && digits[index] != '\0') - index++; - - if (index == pos && digits[index] >= '5') - { - while (index > 0 && digits[index - 1] == '9') - index--; - - if (index > 0) - digits[index - 1]++; - else - { - scale++; - digits[0] = '1'; - index = 1; - } - } - else - while (index > 0 && digits[index - 1] == '0') - index--; - - if (index == 0) - { - scale = 0; - sign = false; - } - - digits[index] = '\0'; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Core.d --- a/tango/tango/text/locale/Core.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2171 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - - Contains classes that provide information about locales, such as - the language and calendars, as well as cultural conventions used - for formatting dates, currency and numbers. Use these classes when - writing applications for an international audience. - -******************************************************************************/ - -/** - * $(MEMBERTABLE - * $(TR - * $(TH Interface) - * $(TH Description) - * ) - * $(TR - * $(TD $(LINK2 #IFormatService, IFormatService)) - * $(TD Retrieves an object to control formatting.) - * ) - * ) - * - * $(MEMBERTABLE - * $(TR - * $(TH Class) - * $(TH Description) - * ) - * $(TR - * $(TD $(LINK2 #Calendar, Calendar)) - * $(TD Represents time in week, month and year divisions.) - * ) - * $(TR - * $(TD $(LINK2 #Culture, Culture)) - * $(TD Provides information about a culture, such as its name, calendar and date and number format patterns.) - * ) - * $(TR - * $(TD $(LINK2 #DateTimeFormat, DateTimeFormat)) - * $(TD Determines how $(LINK2 #Time, Time) values are formatted, depending on the culture.) - * ) - * $(TR - * $(TD $(LINK2 #DaylightSavingTime, DaylightSavingTime)) - * $(TD Represents a period of daylight-saving time.) - * ) - * $(TR - * $(TD $(LINK2 #Gregorian, Gregorian)) - * $(TD Represents the Gregorian calendar.) - * ) - * $(TR - * $(TD $(LINK2 #Hebrew, Hebrew)) - * $(TD Represents the Hebrew calendar.) - * ) - * $(TR - * $(TD $(LINK2 #Hijri, Hijri)) - * $(TD Represents the Hijri calendar.) - * ) - * $(TR - * $(TD $(LINK2 #Japanese, Japanese)) - * $(TD Represents the Japanese calendar.) - * ) - * $(TR - * $(TD $(LINK2 #Korean, Korean)) - * $(TD Represents the Korean calendar.) - * ) - * $(TR - * $(TD $(LINK2 #NumberFormat, NumberFormat)) - * $(TD Determines how numbers are formatted, according to the current culture.) - * ) - * $(TR - * $(TD $(LINK2 #Region, Region)) - * $(TD Provides information about a region.) - * ) - * $(TR - * $(TD $(LINK2 #Taiwan, Taiwan)) - * $(TD Represents the Taiwan calendar.) - * ) - * $(TR - * $(TD $(LINK2 #ThaiBuddhist, ThaiBuddhist)) - * $(TD Represents the Thai Buddhist calendar.) - * ) - * ) - * - * $(MEMBERTABLE - * $(TR - * $(TH Struct) - * $(TH Description) - * ) - * $(TR - * $(TD $(LINK2 #Time, Time)) - * $(TD Represents time expressed as a date and time of day.) - * ) - * $(TR - * $(TD $(LINK2 #TimeSpan, TimeSpan)) - * $(TD Represents a time interval.) - * ) - * ) - */ - -module tango.text.locale.Core; - -private import tango.core.Exception; - -private import tango.text.locale.Data; - -private import tango.time.Time; - -private import tango.time.chrono.Hijri, - tango.time.chrono.Korean, - tango.time.chrono.Taiwan, - tango.time.chrono.Hebrew, - tango.time.chrono.Calendar, - tango.time.chrono.Japanese, - tango.time.chrono.Gregorian, - tango.time.chrono.ThaiBuddhist; - -version (Windows) - private import tango.text.locale.Win32; - -version (Posix) - private import tango.text.locale.Posix; - - -// Initializes an array. -private template arrayOf(T) { - private T[] arrayOf(T[] params ...) { - return params.dup; - } -} - - -/** - * Defines the types of cultures that can be retrieved from Culture.getCultures. - */ -public enum CultureTypes { - Neutral = 1, /// Refers to cultures that are associated with a language but not specific to a country or region. - Specific = 2, /// Refers to cultures that are specific to a country or region. - All = Neutral | Specific /// Refers to all cultures. -} - - -/** - * $(ANCHOR _IFormatService) - * Retrieves an object to control formatting. - * - * A class implements $(LINK2 #IFormatService_getFormat, getFormat) to retrieve an object that provides format information for the implementing type. - * Remarks: IFormatService is implemented by $(LINK2 #Culture, Culture), $(LINK2 #NumberFormat, NumberFormat) and $(LINK2 #DateTimeFormat, DateTimeFormat) to provide locale-specific formatting of - * numbers and date and time values. - */ -public interface IFormatService { - - /** - * $(ANCHOR IFormatService_getFormat) - * Retrieves an object that supports formatting for the specified _type. - * Returns: The current instance if type is the same _type as the current instance; otherwise, null. - * Params: type = An object that specifies the _type of formatting to retrieve. - */ - Object getFormat(TypeInfo type); - -} - -/** - * $(ANCHOR _Culture) - * Provides information about a culture, such as its name, calendar and date and number format patterns. - * Remarks: tango.text.locale adopts the RFC 1766 standard for culture names in the format <language>"-"<region>. - * <language> is a lower-case two-letter code defined by ISO 639-1. <region> is an upper-case - * two-letter code defined by ISO 3166. For example, "en-GB" is UK English. - * $(BR)$(BR)There are three types of culture: invariant, neutral and specific. The invariant culture is not tied to - * any specific region, although it is associated with the English language. A neutral culture is associated with - * a language, but not with a region. A specific culture is associated with a language and a region. "es" is a neutral - * culture. "es-MX" is a specific culture. - * $(BR)$(BR)Instances of $(LINK2 #DateTimeFormat, DateTimeFormat) and $(LINK2 #NumberFormat, NumberFormat) cannot be created for neutral cultures. - * Examples: - * --- - * import tango.io.Stdout, tango.text.locale.Core; - * - * void main() { - * Culture culture = new Culture("it-IT"); - * - * Stdout.formatln("englishName: {}", culture.englishName); - * Stdout.formatln("nativeName: {}", culture.nativeName); - * Stdout.formatln("name: {}", culture.name); - * Stdout.formatln("parent: {}", culture.parent.name); - * Stdout.formatln("isNeutral: {}", culture.isNeutral); - * } - * - * // Produces the following output: - * // englishName: Italian (Italy) - * // nativeName: italiano (Italia) - * // name: it-IT - * // parent: it - * // isNeutral: false - * --- - */ -public class Culture : IFormatService { - - private const int LCID_INVARIANT = 0x007F; - - private static Culture[char[]] namedCultures; - private static Culture[int] idCultures; - private static Culture[char[]] ietfCultures; - - private static Culture currentCulture_; - private static Culture userDefaultCulture_; // The user's default culture (GetUserDefaultLCID). - private static Culture invariantCulture_; // The invariant culture is associated with the English language. - private Calendar calendar_; - private Culture parent_; - private CultureData* cultureData_; - private bool isReadOnly_; - private NumberFormat numberFormat_; - private DateTimeFormat dateTimeFormat_; - - static this() { - invariantCulture_ = new Culture(LCID_INVARIANT); - invariantCulture_.isReadOnly_ = true; - - userDefaultCulture_ = new Culture(nativeMethods.getUserCulture()); - if (userDefaultCulture_ is null) - // Fallback - userDefaultCulture_ = invariantCulture; - else - userDefaultCulture_.isReadOnly_ = true; - } - - static ~this() { - namedCultures = null; - idCultures = null; - ietfCultures = null; - } - - /** - * Initializes a new Culture instance from the supplied name. - * Params: cultureName = The name of the Culture. - */ - public this(char[] cultureName) { - cultureData_ = CultureData.getDataFromCultureName(cultureName); - } - - /** - * Initializes a new Culture instance from the supplied culture identifier. - * Params: cultureID = The identifer (LCID) of the Culture. - * Remarks: Culture identifiers correspond to a Windows LCID. - */ - public this(int cultureID) { - cultureData_ = CultureData.getDataFromCultureID(cultureID); - } - - /** - * Retrieves an object defining how to format the specified type. - * Params: type = The TypeInfo of the resulting formatting object. - * Returns: If type is typeid($(LINK2 #NumberFormat, NumberFormat)), the value of the $(LINK2 #Culture_numberFormat, numberFormat) property. If type is typeid($(LINK2 #DateTimeFormat, DateTimeFormat)), the - * value of the $(LINK2 #Culture_dateTimeFormat, dateTimeFormat) property. Otherwise, null. - * Remarks: Implements $(LINK2 #IFormatService_getFormat, IFormatService.getFormat). - */ - public Object getFormat(TypeInfo type) { - if (type is typeid(NumberFormat)) - return numberFormat; - else if (type is typeid(DateTimeFormat)) - return dateTimeFormat; - return null; - } - -version (Clone) -{ - /** - * Copies the current Culture instance. - * Returns: A copy of the current Culture instance. - * Remarks: The values of the $(LINK2 #Culture_numberFormat, numberFormat), $(LINK2 #Culture_dateTimeFormat, dateTimeFormat) and $(LINK2 #Culture_calendar, calendar) properties are copied also. - */ - public Object clone() { - Culture culture = cast(Culture)cloneObject(this); - if (!culture.isNeutral) { - if (dateTimeFormat_ !is null) - culture.dateTimeFormat_ = cast(DateTimeFormat)dateTimeFormat_.clone(); - if (numberFormat_ !is null) - culture.numberFormat_ = cast(NumberFormat)numberFormat_.clone(); - } - if (calendar_ !is null) - culture.calendar_ = cast(Calendar)calendar_.clone(); - return culture; - } -} - - /** - * Returns a read-only instance of a culture using the specified culture identifier. - * Params: cultureID = The identifier of the culture. - * Returns: A read-only culture instance. - * Remarks: Instances returned by this method are cached. - */ - public static Culture getCulture(int cultureID) { - Culture culture = getCultureInternal(cultureID, null); - if (culture is null) - error("Culture is not supported."); - return culture; - } - - /** - * Returns a read-only instance of a culture using the specified culture name. - * Params: cultureName = The name of the culture. - * Returns: A read-only culture instance. - * Remarks: Instances returned by this method are cached. - */ - public static Culture getCulture(char[] cultureName) { - if (cultureName == null) - error("Value cannot be null."); - Culture culture = getCultureInternal(0, cultureName); - if (culture is null) - error("Culture name " ~ cultureName ~ " is not supported."); - return culture; - } - - /** - * Returns a read-only instance using the specified name, as defined by the RFC 3066 standard and maintained by the IETF. - * Params: name = The name of the language. - * Returns: A read-only culture instance. - */ - public static Culture getCultureFromIetfLanguageTag(char[] name) { - if (name == null) - error("Value cannot be null."); - Culture culture = getCultureInternal(-1, name); - if (culture is null) - error("Culture IETF name " ~ name ~ " is not a known IETF name."); - return culture; - } - - private static Culture getCultureInternal(int cultureID, char[] name) { - // If cultureID is - 1, name is an IETF name; if it's 0, name is a culture name; otherwise, it's a valid LCID. - - // Look up tables first. - if (cultureID == 0) { - if (Culture* culture = name in namedCultures) - return *culture; - } - else if (cultureID > 0) { - if (Culture* culture = cultureID in idCultures) - return *culture; - } - else if (cultureID == -1) { - if (Culture* culture = name in ietfCultures) - return *culture; - } - - // Nothing found, create a new instance. - Culture culture; - - try { - if (cultureID == -1) { - name = CultureData.getCultureNameFromIetfName(name); - if (name == null) - return null; - } - else if (cultureID == 0) - culture = new Culture(name); - else if (userDefaultCulture_ !is null && userDefaultCulture_.id == cultureID) { - culture = userDefaultCulture_; - } - else - culture = new Culture(cultureID); - } - catch (LocaleException) { - return null; - } - - culture.isReadOnly_ = true; - - // Now cache the new instance in all tables. - ietfCultures[culture.ietfLanguageTag] = culture; - namedCultures[culture.name] = culture; - idCultures[culture.id] = culture; - - return culture; - } - - /** - * Returns a list of cultures filtered by the specified $(LINK2 constants.html#CultureTypes, CultureTypes). - * Params: types = A combination of CultureTypes. - * Returns: An array of Culture instances containing cultures specified by types. - */ - public static Culture[] getCultures(CultureTypes types) { - bool includeSpecific = (types & CultureTypes.Specific) != 0; - bool includeNeutral = (types & CultureTypes.Neutral) != 0; - - int[] cultures; - for (int i = 0; i < CultureData.cultureDataTable.length; i++) { - if ((CultureData.cultureDataTable[i].isNeutral && includeNeutral) || (!CultureData.cultureDataTable[i].isNeutral && includeSpecific)) - cultures ~= CultureData.cultureDataTable[i].lcid; - } - - Culture[] result = new Culture[cultures.length]; - foreach (int i, int cultureID; cultures) - result[i] = new Culture(cultureID); - return result; - } - - /** - * Returns the name of the Culture. - * Returns: A string containing the name of the Culture in the format <language>"-"<region>. - */ - public override char[] toString() { - return cultureData_.name; - } - - public override int opEquals(Object obj) { - if (obj is this) - return true; - Culture other = cast(Culture)obj; - if (other is null) - return false; - return other.name == name; // This needs to be changed so it's culturally aware. - } - - /** - * $(ANCHOR Culture_current) - * $(I Property.) Retrieves the culture of the current user. - * Returns: The Culture instance representing the user's current culture. - */ - public static Culture current() { - if (currentCulture_ !is null) - return currentCulture_; - - if (userDefaultCulture_ !is null) { - // If the user has changed their locale settings since last we checked, invalidate our data. - if (userDefaultCulture_.id != nativeMethods.getUserCulture()) - userDefaultCulture_ = null; - } - if (userDefaultCulture_ is null) { - userDefaultCulture_ = new Culture(nativeMethods.getUserCulture()); - if (userDefaultCulture_ is null) - userDefaultCulture_ = invariantCulture; - else - userDefaultCulture_.isReadOnly_ = true; - } - - return userDefaultCulture_; - } - /** - * $(I Property.) Assigns the culture of the _current user. - * Params: value = The Culture instance representing the user's _current culture. - * Examples: - * The following examples shows how to change the _current culture. - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main() { - * // Displays the name of the current culture. - * Println("The current culture is %s.", Culture.current.englishName); - * - * // Changes the current culture to el-GR. - * Culture.current = new Culture("el-GR"); - * Println("The current culture is now %s.", Culture.current.englishName); - * } - * - * // Produces the following output: - * // The current culture is English (United Kingdom). - * // The current culture is now Greek (Greece). - * --- - */ - public static void current(Culture value) { - checkNeutral(value); - nativeMethods.setUserCulture(value.id); - currentCulture_ = value; - } - - /** - * $(I Property.) Retrieves the invariant Culture. - * Returns: The Culture instance that is invariant. - * Remarks: The invariant culture is culture-independent. It is not tied to any specific region, but is associated - * with the English language. - */ - public static Culture invariantCulture() { - return invariantCulture_; - } - - /** - * $(I Property.) Retrieves the identifier of the Culture. - * Returns: The culture identifier of the current instance. - * Remarks: The culture identifier corresponds to the Windows locale identifier (LCID). It can therefore be used when - * interfacing with the Windows NLS functions. - */ - public int id() { - return cultureData_.lcid; - } - - /** - * $(ANCHOR Culture_name) - * $(I Property.) Retrieves the name of the Culture in the format <language>"-"<region>. - * Returns: The name of the current instance. For example, the name of the UK English culture is "en-GB". - */ - public char[] name() { - return cultureData_.name; - } - - /** - * $(I Property.) Retrieves the name of the Culture in the format <languagename> (<regionname>) in English. - * Returns: The name of the current instance in English. For example, the englishName of the UK English culture - * is "English (United Kingdom)". - */ - public char[] englishName() { - return cultureData_.englishName; - } - - /** - * $(I Property.) Retrieves the name of the Culture in the format <languagename> (<regionname>) in its native language. - * Returns: The name of the current instance in its native language. For example, if Culture.name is "de-DE", nativeName is - * "Deutsch (Deutschland)". - */ - public char[] nativeName() { - return cultureData_.nativeName; - } - - /** - * $(I Property.) Retrieves the two-letter language code of the culture. - * Returns: The two-letter language code of the Culture instance. For example, the twoLetterLanguageName for English is "en". - */ - public char[] twoLetterLanguageName() { - return cultureData_.isoLangName; - } - - /** - * $(I Property.) Retrieves the three-letter language code of the culture. - * Returns: The three-letter language code of the Culture instance. For example, the threeLetterLanguageName for English is "eng". - */ - public char[] threeLetterLanguageName() { - return cultureData_.isoLangName2; - } - - /** - * $(I Property.) Retrieves the RFC 3066 identification for a language. - * Returns: A string representing the RFC 3066 language identification. - */ - public final char[] ietfLanguageTag() { - return cultureData_.ietfTag; - } - - /** - * $(I Property.) Retrieves the Culture representing the parent of the current instance. - * Returns: The Culture representing the parent of the current instance. - */ - public Culture parent() { - if (parent_ is null) { - try { - int parentCulture = cultureData_.parent; - if (parentCulture == LCID_INVARIANT) - parent_ = invariantCulture; - else - parent_ = new Culture(parentCulture); - } - catch { - parent_ = invariantCulture; - } - } - return parent_; - } - - /** - * $(I Property.) Retrieves a value indicating whether the current instance is a neutral culture. - * Returns: true is the current Culture represents a neutral culture; otherwise, false. - * Examples: - * The following example displays which cultures using Chinese are neutral. - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main() { - * foreach (c; Culture.getCultures(CultureTypes.All)) { - * if (c.twoLetterLanguageName == "zh") { - * Print(c.englishName); - * if (c.isNeutral) - * Println("neutral"); - * else - * Println("specific"); - * } - * } - * } - * - * // Produces the following output: - * // Chinese (Simplified) - neutral - * // Chinese (Taiwan) - specific - * // Chinese (People's Republic of China) - specific - * // Chinese (Hong Kong S.A.R.) - specific - * // Chinese (Singapore) - specific - * // Chinese (Macao S.A.R.) - specific - * // Chinese (Traditional) - neutral - * --- - */ - public bool isNeutral() { - return cultureData_.isNeutral; - } - - /** - * $(I Property.) Retrieves a value indicating whether the instance is read-only. - * Returns: true if the instance is read-only; otherwise, false. - * Remarks: If the culture is read-only, the $(LINK2 #Culture_dateTimeFormat, dateTimeFormat) and $(LINK2 #Culture_numberFormat, numberFormat) properties return - * read-only instances. - */ - public final bool isReadOnly() { - return isReadOnly_; - } - - /** - * $(ANCHOR Culture_calendar) - * $(I Property.) Retrieves the calendar used by the culture. - * Returns: A Calendar instance respresenting the calendar used by the culture. - */ - public Calendar calendar() { - if (calendar_ is null) { - calendar_ = getCalendarInstance(cultureData_.calendarType, isReadOnly_); - } - return calendar_; - } - - /** - * $(I Property.) Retrieves the list of calendars that can be used by the culture. - * Returns: An array of type Calendar representing the calendars that can be used by the culture. - */ - public Calendar[] optionalCalendars() { - Calendar[] cals = new Calendar[cultureData_.optionalCalendars.length]; - foreach (int i, int calID; cultureData_.optionalCalendars) - cals[i] = getCalendarInstance(calID); - return cals; - } - - /** - * $(ANCHOR Culture_numberFormat) - * $(I Property.) Retrieves a NumberFormat defining the culturally appropriate format for displaying numbers and currency. - * Returns: A NumberFormat defining the culturally appropriate format for displaying numbers and currency. - */ - public NumberFormat numberFormat() { - checkNeutral(this); - if (numberFormat_ is null) { - numberFormat_ = new NumberFormat(cultureData_); - numberFormat_.isReadOnly_ = isReadOnly_; - } - return numberFormat_; - } - /** - * $(I Property.) Assigns a NumberFormat defining the culturally appropriate format for displaying numbers and currency. - * Params: values = A NumberFormat defining the culturally appropriate format for displaying numbers and currency. - */ - public void numberFormat(NumberFormat value) { - checkReadOnly(); - numberFormat_ = value; - } - - /** - * $(ANCHOR Culture_dateTimeFormat) - * $(I Property.) Retrieves a DateTimeFormat defining the culturally appropriate format for displaying dates and times. - * Returns: A DateTimeFormat defining the culturally appropriate format for displaying dates and times. - */ - public DateTimeFormat dateTimeFormat() { - checkNeutral(this); - if (dateTimeFormat_ is null) { - dateTimeFormat_ = new DateTimeFormat(cultureData_, calendar); - dateTimeFormat_.isReadOnly_ = isReadOnly_; - } - return dateTimeFormat_; - } - /** - * $(I Property.) Assigns a DateTimeFormat defining the culturally appropriate format for displaying dates and times. - * Params: values = A DateTimeFormat defining the culturally appropriate format for displaying dates and times. - */ - public void dateTimeFormat(DateTimeFormat value) { - checkReadOnly(); - dateTimeFormat_ = value; - } - - private static void checkNeutral(Culture culture) { - if (culture.isNeutral) - error("Culture '" ~ culture.name ~ "' is a neutral culture. It cannot be used in formatting and therefore cannot be set as the current culture."); - } - - private void checkReadOnly() { - if (isReadOnly_) - error("Instance is read-only."); - } - - private static Calendar getCalendarInstance(int calendarType, bool readOnly=false) { - switch (calendarType) { - case Calendar.JAPAN: - return new Japanese(); - case Calendar.TAIWAN: - return new Taiwan(); - case Calendar.KOREA: - return new Korean(); - case Calendar.HIJRI: - return new Hijri(); - case Calendar.THAI: - return new ThaiBuddhist(); - case Calendar.HEBREW: - return new Hebrew; - case Calendar.GREGORIAN_US: - case Calendar.GREGORIAN_ME_FRENCH: - case Calendar.GREGORIAN_ARABIC: - case Calendar.GREGORIAN_XLIT_ENGLISH: - case Calendar.GREGORIAN_XLIT_FRENCH: - return new Gregorian(cast(Gregorian.Type) calendarType); - default: - break; - } - return new Gregorian(); - } - -} - -/** - * $(ANCHOR _Region) - * Provides information about a region. - * Remarks: Region does not represent user preferences. It does not depend on the user's language or culture. - * Examples: - * The following example displays some of the properties of the Region class: - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main() { - * Region region = new Region("en-GB"); - * Println("name: %s", region.name); - * Println("englishName: %s", region.englishName); - * Println("isMetric: %s", region.isMetric); - * Println("currencySymbol: %s", region.currencySymbol); - * Println("isoCurrencySymbol: %s", region.isoCurrencySymbol); - * } - * - * // Produces the following output. - * // name: en-GB - * // englishName: United Kingdom - * // isMetric: true - * // currencySymbol: £ - * // isoCurrencySymbol: GBP - * --- - */ -public class Region { - - private CultureData* cultureData_; - private static Region currentRegion_; - private char[] name_; - - /** - * Initializes a new Region instance based on the region associated with the specified culture identifier. - * Params: cultureID = A culture indentifier. - * Remarks: The name of the Region instance is set to the ISO 3166 two-letter code for that region. - */ - public this(int cultureID) { - cultureData_ = CultureData.getDataFromCultureID(cultureID); - if (cultureData_.isNeutral) - error ("Cannot use a neutral culture to create a region."); - name_ = cultureData_.regionName; - } - - /** - * $(ANCHOR Region_ctor_name) - * Initializes a new Region instance based on the region specified by name. - * Params: name = A two-letter ISO 3166 code for the region. Or, a culture $(LINK2 #Culture_name, _name) consisting of the language and region. - */ - public this(char[] name) { - cultureData_ = CultureData.getDataFromRegionName(name); - name_ = name; - if (cultureData_.isNeutral) - error ("The region name " ~ name ~ " corresponds to a neutral culture and cannot be used to create a region."); - } - - package this(CultureData* cultureData) { - cultureData_ = cultureData; - name_ = cultureData.regionName; - } - - /** - * $(I Property.) Retrieves the Region used by the current $(LINK2 #Culture, Culture). - * Returns: The Region instance associated with the current Culture. - */ - public static Region current() { - if (currentRegion_ is null) - currentRegion_ = new Region(Culture.current.cultureData_); - return currentRegion_; - } - - /** - * $(I Property.) Retrieves a unique identifier for the geographical location of the region. - * Returns: An $(B int) uniquely identifying the geographical location. - */ - public int geoID() { - return cultureData_.geoId; - } - - /** - * $(ANCHOR Region_name) - * $(I Property.) Retrieves the ISO 3166 code, or the name, of the current Region. - * Returns: The value specified by the name parameter of the $(LINK2 #Region_ctor_name, Region(char[])) constructor. - */ - public char[] name() { - return name_; - } - - /** - * $(I Property.) Retrieves the full name of the region in English. - * Returns: The full name of the region in English. - */ - public char[] englishName() { - return cultureData_.englishCountry; - } - - /** - * $(I Property.) Retrieves the full name of the region in its native language. - * Returns: The full name of the region in the language associated with the region code. - */ - public char[] nativeName() { - return cultureData_.nativeCountry; - } - - /** - * $(I Property.) Retrieves the two-letter ISO 3166 code of the region. - * Returns: The two-letter ISO 3166 code of the region. - */ - public char[] twoLetterRegionName() { - return cultureData_.regionName; - } - - /** - * $(I Property.) Retrieves the three-letter ISO 3166 code of the region. - * Returns: The three-letter ISO 3166 code of the region. - */ - public char[] threeLetterRegionName() { - return cultureData_.isoRegionName; - } - - /** - * $(I Property.) Retrieves the currency symbol of the region. - * Returns: The currency symbol of the region. - */ - public char[] currencySymbol() { - return cultureData_.currency; - } - - /** - * $(I Property.) Retrieves the three-character currency symbol of the region. - * Returns: The three-character currency symbol of the region. - */ - public char[] isoCurrencySymbol() { - return cultureData_.intlSymbol; - } - - /** - * $(I Property.) Retrieves the name in English of the currency used in the region. - * Returns: The name in English of the currency used in the region. - */ - public char[] currencyEnglishName() { - return cultureData_.englishCurrency; - } - - /** - * $(I Property.) Retrieves the name in the native language of the region of the currency used in the region. - * Returns: The name in the native language of the region of the currency used in the region. - */ - public char[] currencyNativeName() { - return cultureData_.nativeCurrency; - } - - /** - * $(I Property.) Retrieves a value indicating whether the region uses the metric system for measurements. - * Returns: true is the region uses the metric system; otherwise, false. - */ - public bool isMetric() { - return cultureData_.isMetric; - } - - /** - * Returns a string containing the ISO 3166 code, or the $(LINK2 #Region_name, name), of the current Region. - * Returns: A string containing the ISO 3166 code, or the name, of the current Region. - */ - public override char[] toString() { - return name_; - } - -} - -/** - * $(ANCHOR _NumberFormat) - * Determines how numbers are formatted, according to the current culture. - * Remarks: Numbers are formatted using format patterns retrieved from a NumberFormat instance. - * This class implements $(LINK2 #IFormatService_getFormat, IFormatService.getFormat). - * Examples: - * The following example shows how to retrieve an instance of NumberFormat for a Culture - * and use it to display number formatting information. - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main(char[][] args) { - * foreach (c; Culture.getCultures(CultureTypes.Specific)) { - * if (c.twoLetterLanguageName == "en") { - * NumberFormat fmt = c.numberFormat; - * Println("The currency symbol for %s is '%s'", - * c.englishName, - * fmt.currencySymbol); - * } - * } - * } - * - * // Produces the following output: - * // The currency symbol for English (United States) is '$' - * // The currency symbol for English (United Kingdom) is '£' - * // The currency symbol for English (Australia) is '$' - * // The currency symbol for English (Canada) is '$' - * // The currency symbol for English (New Zealand) is '$' - * // The currency symbol for English (Ireland) is '€' - * // The currency symbol for English (South Africa) is 'R' - * // The currency symbol for English (Jamaica) is 'J$' - * // The currency symbol for English (Caribbean) is '$' - * // The currency symbol for English (Belize) is 'BZ$' - * // The currency symbol for English (Trinidad and Tobago) is 'TT$' - * // The currency symbol for English (Zimbabwe) is 'Z$' - * // The currency symbol for English (Republic of the Philippines) is 'Php' - *--- - */ -public class NumberFormat : IFormatService { - - package bool isReadOnly_; - private static NumberFormat invariantFormat_; - - private int numberDecimalDigits_; - private int numberNegativePattern_; - private int currencyDecimalDigits_; - private int currencyNegativePattern_; - private int currencyPositivePattern_; - private int[] numberGroupSizes_; - private int[] currencyGroupSizes_; - private char[] numberGroupSeparator_; - private char[] numberDecimalSeparator_; - private char[] currencyGroupSeparator_; - private char[] currencyDecimalSeparator_; - private char[] currencySymbol_; - private char[] negativeSign_; - private char[] positiveSign_; - private char[] nanSymbol_; - private char[] negativeInfinitySymbol_; - private char[] positiveInfinitySymbol_; - private char[][] nativeDigits_; - - /** - * Initializes a new, culturally independent instance. - * - * Remarks: Modify the properties of the new instance to define custom formatting. - */ - public this() { - this(null); - } - - package this(CultureData* cultureData) { - // Initialize invariant data. - numberDecimalDigits_ = 2; - numberNegativePattern_ = 1; - currencyDecimalDigits_ = 2; - numberGroupSizes_ = arrayOf!(int)(3); - currencyGroupSizes_ = arrayOf!(int)(3); - numberGroupSeparator_ = ","; - numberDecimalSeparator_ = "."; - currencyGroupSeparator_ = ","; - currencyDecimalSeparator_ = "."; - currencySymbol_ = "\u00A4"; - negativeSign_ = "-"; - positiveSign_ = "+"; - nanSymbol_ = "NaN"; - negativeInfinitySymbol_ = "-Infinity"; - positiveInfinitySymbol_ = "Infinity"; - nativeDigits_ = arrayOf!(char[])("0", "1", "2", "3", "4", "5", "6", "7", "8", "9"); - - if (cultureData !is null && cultureData.lcid != Culture.LCID_INVARIANT) { - // Initialize culture-specific data. - numberDecimalDigits_ = cultureData.digits; - numberNegativePattern_ = cultureData.negativeNumber; - currencyDecimalDigits_ = cultureData.currencyDigits; - currencyNegativePattern_ = cultureData.negativeCurrency; - currencyPositivePattern_ = cultureData.positiveCurrency; - numberGroupSizes_ = cultureData.grouping; - currencyGroupSizes_ = cultureData.monetaryGrouping; - numberGroupSeparator_ = cultureData.thousand; - numberDecimalSeparator_ = cultureData.decimal; - currencyGroupSeparator_ = cultureData.monetaryThousand; - currencyDecimalSeparator_ = cultureData.monetaryDecimal; - currencySymbol_ = cultureData.currency; - negativeSign_ = cultureData.negativeSign; - positiveSign_ = cultureData.positiveSign; - nanSymbol_ = cultureData.nan; - negativeInfinitySymbol_ = cultureData.negInfinity; - positiveInfinitySymbol_ = cultureData.posInfinity; - nativeDigits_ = cultureData.nativeDigits; - } - } - - /** - * Retrieves an object defining how to format the specified type. - * Params: type = The TypeInfo of the resulting formatting object. - * Returns: If type is typeid($(LINK2 #NumberFormat, NumberFormat)), the current NumberFormat instance. Otherwise, null. - * Remarks: Implements $(LINK2 #IFormatService_getFormat, IFormatService.getFormat). - */ - public Object getFormat(TypeInfo type) { - return (type is typeid(NumberFormat)) ? this : null; - } - -version (Clone) -{ - /** - * Creates a copy of the instance. - */ - public Object clone() { - NumberFormat copy = cast(NumberFormat)cloneObject(this); - copy.isReadOnly_ = false; - return copy; - } -} - - /** - * Retrieves the NumberFormat for the specified $(LINK2 #IFormatService, IFormatService). - * Params: formatService = The IFormatService used to retrieve NumberFormat. - * Returns: The NumberFormat for the specified IFormatService. - * Remarks: The method calls $(LINK2 #IFormatService_getFormat, IFormatService.getFormat) with typeof(NumberFormat). If formatService is null, - * then the value of the current property is returned. - */ - public static NumberFormat getInstance(IFormatService formatService) { - Culture culture = cast(Culture)formatService; - if (culture !is null) { - if (culture.numberFormat_ !is null) - return culture.numberFormat_; - return culture.numberFormat; - } - if (NumberFormat numberFormat = cast(NumberFormat)formatService) - return numberFormat; - if (formatService !is null) { - if (NumberFormat numberFormat = cast(NumberFormat)(formatService.getFormat(typeid(NumberFormat)))) - return numberFormat; - } - return current; - } - - /** - * $(I Property.) Retrieves a read-only NumberFormat instance from the current culture. - * Returns: A read-only NumberFormat instance from the current culture. - */ - public static NumberFormat current() { - return Culture.current.numberFormat; - } - - /** - * $(ANCHOR NumberFormat_invariantFormat) - * $(I Property.) Retrieves the read-only, culturally independent NumberFormat instance. - * Returns: The read-only, culturally independent NumberFormat instance. - */ - public static NumberFormat invariantFormat() { - if (invariantFormat_ is null) { - invariantFormat_ = new NumberFormat; - invariantFormat_.isReadOnly_ = true; - } - return invariantFormat_; - } - - /** - * $(I Property.) Retrieves a value indicating whether the instance is read-only. - * Returns: true if the instance is read-only; otherwise, false. - */ - public final bool isReadOnly() { - return isReadOnly_; - } - - /** - * $(I Property.) Retrieves the number of decimal places used for numbers. - * Returns: The number of decimal places used for numbers. For $(LINK2 #NumberFormat_invariantFormat, invariantFormat), the default is 2. - */ - public final int numberDecimalDigits() { - return numberDecimalDigits_; - } - /** - * Assigns the number of decimal digits used for numbers. - * Params: value = The number of decimal places used for numbers. - * Throws: Exception if the property is being set and the instance is read-only. - * Examples: - * The following example shows the effect of changing numberDecimalDigits. - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main() { - * // Get the NumberFormat from the en-GB culture. - * NumberFormat fmt = (new Culture("en-GB")).numberFormat; - * - * // Display a value with the default number of decimal digits. - * int n = 5678; - * Println(Formatter.format(fmt, "{0:N}", n)); - * - * // Display the value with six decimal digits. - * fmt.numberDecimalDigits = 6; - * Println(Formatter.format(fmt, "{0:N}", n)); - * } - * - * // Produces the following output: - * // 5,678.00 - * // 5,678.000000 - * --- - */ - public final void numberDecimalDigits(int value) { - checkReadOnly(); - numberDecimalDigits_ = value; - } - - /** - * $(I Property.) Retrieves the format pattern for negative numbers. - * Returns: The format pattern for negative numbers. For invariantFormat, the default is 1 (representing "-n"). - * Remarks: The following table shows valid values for this property. - * - * - * - * - * - * - * - * - *
ValuePattern
0(n)
1-n
2- n
3n-
4n -
- */ - public final int numberNegativePattern() { - return numberNegativePattern_; - } - /** - * $(I Property.) Assigns the format pattern for negative numbers. - * Params: value = The format pattern for negative numbers. - * Examples: - * The following example shows the effect of the different patterns. - * --- - * import tango.io.Print, tango.text.locale.Common; - * - * void main() { - * NumberFormat fmt = new NumberFormat; - * int n = -5678; - * - * // Display the default pattern. - * Println(Formatter.format(fmt, "{0:N}", n)); - * - * // Display all patterns. - * for (int i = 0; i <= 4; i++) { - * fmt.numberNegativePattern = i; - * Println(Formatter.format(fmt, "{0:N}", n)); - * } - * } - * - * // Produces the following output: - * // (5,678.00) - * // (5,678.00) - * // -5,678.00 - * // - 5,678.00 - * // 5,678.00- - * // 5,678.00 - - * --- - */ - public final void numberNegativePattern(int value) { - checkReadOnly(); - numberNegativePattern_ = value; - } - - /** - * $(I Property.) Retrieves the number of decimal places to use in currency values. - * Returns: The number of decimal digits to use in currency values. - */ - public final int currencyDecimalDigits() { - return currencyDecimalDigits_; - } - /** - * $(I Property.) Assigns the number of decimal places to use in currency values. - * Params: value = The number of decimal digits to use in currency values. - */ - public final void currencyDecimalDigits(int value) { - checkReadOnly(); - currencyDecimalDigits_ = value; - } - - /** - * $(I Property.) Retrieves the formal pattern to use for negative currency values. - * Returns: The format pattern to use for negative currency values. - */ - public final int currencyNegativePattern() { - return currencyNegativePattern_; - } - /** - * $(I Property.) Assigns the formal pattern to use for negative currency values. - * Params: value = The format pattern to use for negative currency values. - */ - public final void currencyNegativePattern(int value) { - checkReadOnly(); - currencyNegativePattern_ = value; - } - - /** - * $(I Property.) Retrieves the formal pattern to use for positive currency values. - * Returns: The format pattern to use for positive currency values. - */ - public final int currencyPositivePattern() { - return currencyPositivePattern_; - } - /** - * $(I Property.) Assigns the formal pattern to use for positive currency values. - * Returns: The format pattern to use for positive currency values. - */ - public final void currencyPositivePattern(int value) { - checkReadOnly(); - currencyPositivePattern_ = value; - } - - /** - * $(I Property.) Retrieves the number of digits int each group to the left of the decimal place in numbers. - * Returns: The number of digits int each group to the left of the decimal place in numbers. - */ - public final int[] numberGroupSizes() { - return numberGroupSizes_; - } - /** - * $(I Property.) Assigns the number of digits int each group to the left of the decimal place in numbers. - * Params: value = The number of digits int each group to the left of the decimal place in numbers. - */ - public final void numberGroupSizes(int[] value) { - checkReadOnly(); - numberGroupSizes_ = value; - } - - /** - * $(I Property.) Retrieves the number of digits int each group to the left of the decimal place in currency values. - * Returns: The number of digits int each group to the left of the decimal place in currency values. - */ - public final int[] currencyGroupSizes() { - return currencyGroupSizes_; - } - /** - * $(I Property.) Assigns the number of digits int each group to the left of the decimal place in currency values. - * Params: value = The number of digits int each group to the left of the decimal place in currency values. - */ - public final void currencyGroupSizes(int[] value) { - checkReadOnly(); - currencyGroupSizes_ = value; - } - - /** - * $(I Property.) Retrieves the string separating groups of digits to the left of the decimal place in numbers. - * Returns: The string separating groups of digits to the left of the decimal place in numbers. For example, ",". - */ - public final char[] numberGroupSeparator() { - return numberGroupSeparator_; - } - /** - * $(I Property.) Assigns the string separating groups of digits to the left of the decimal place in numbers. - * Params: value = The string separating groups of digits to the left of the decimal place in numbers. - */ - public final void numberGroupSeparator(char[] value) { - checkReadOnly(); - numberGroupSeparator_ = value; - } - - /** - * $(I Property.) Retrieves the string used as the decimal separator in numbers. - * Returns: The string used as the decimal separator in numbers. For example, ".". - */ - public final char[] numberDecimalSeparator() { - return numberDecimalSeparator_; - } - /** - * $(I Property.) Assigns the string used as the decimal separator in numbers. - * Params: value = The string used as the decimal separator in numbers. - */ - public final void numberDecimalSeparator(char[] value) { - checkReadOnly(); - numberDecimalSeparator_ = value; - } - - /** - * $(I Property.) Retrieves the string separating groups of digits to the left of the decimal place in currency values. - * Returns: The string separating groups of digits to the left of the decimal place in currency values. For example, ",". - */ - public final char[] currencyGroupSeparator() { - return currencyGroupSeparator_; - } - /** - * $(I Property.) Assigns the string separating groups of digits to the left of the decimal place in currency values. - * Params: value = The string separating groups of digits to the left of the decimal place in currency values. - */ - public final void currencyGroupSeparator(char[] value) { - checkReadOnly(); - currencyGroupSeparator_ = value; - } - - /** - * $(I Property.) Retrieves the string used as the decimal separator in currency values. - * Returns: The string used as the decimal separator in currency values. For example, ".". - */ - public final char[] currencyDecimalSeparator() { - return currencyDecimalSeparator_; - } - /** - * $(I Property.) Assigns the string used as the decimal separator in currency values. - * Params: value = The string used as the decimal separator in currency values. - */ - public final void currencyDecimalSeparator(char[] value) { - checkReadOnly(); - currencyDecimalSeparator_ = value; - } - - /** - * $(I Property.) Retrieves the string used as the currency symbol. - * Returns: The string used as the currency symbol. For example, "£". - */ - public final char[] currencySymbol() { - return currencySymbol_; - } - /** - * $(I Property.) Assigns the string used as the currency symbol. - * Params: value = The string used as the currency symbol. - */ - public final void currencySymbol(char[] value) { - checkReadOnly(); - currencySymbol_ = value; - } - - /** - * $(I Property.) Retrieves the string denoting that a number is negative. - * Returns: The string denoting that a number is negative. For example, "-". - */ - public final char[] negativeSign() { - return negativeSign_; - } - /** - * $(I Property.) Assigns the string denoting that a number is negative. - * Params: value = The string denoting that a number is negative. - */ - public final void negativeSign(char[] value) { - checkReadOnly(); - negativeSign_ = value; - } - - /** - * $(I Property.) Retrieves the string denoting that a number is positive. - * Returns: The string denoting that a number is positive. For example, "+". - */ - public final char[] positiveSign() { - return positiveSign_; - } - /** - * $(I Property.) Assigns the string denoting that a number is positive. - * Params: value = The string denoting that a number is positive. - */ - public final void positiveSign(char[] value) { - checkReadOnly(); - positiveSign_ = value; - } - - /** - * $(I Property.) Retrieves the string representing the NaN (not a number) value. - * Returns: The string representing the NaN value. For example, "NaN". - */ - public final char[] nanSymbol() { - return nanSymbol_; - } - /** - * $(I Property.) Assigns the string representing the NaN (not a number) value. - * Params: value = The string representing the NaN value. - */ - public final void nanSymbol(char[] value) { - checkReadOnly(); - nanSymbol_ = value; - } - - /** - * $(I Property.) Retrieves the string representing negative infinity. - * Returns: The string representing negative infinity. For example, "-Infinity". - */ - public final char[] negativeInfinitySymbol() { - return negativeInfinitySymbol_; - } - /** - * $(I Property.) Assigns the string representing negative infinity. - * Params: value = The string representing negative infinity. - */ - public final void negativeInfinitySymbol(char[] value) { - checkReadOnly(); - negativeInfinitySymbol_ = value; - } - - /** - * $(I Property.) Retrieves the string representing positive infinity. - * Returns: The string representing positive infinity. For example, "Infinity". - */ - public final char[] positiveInfinitySymbol() { - return positiveInfinitySymbol_; - } - /** - * $(I Property.) Assigns the string representing positive infinity. - * Params: value = The string representing positive infinity. - */ - public final void positiveInfinitySymbol(char[] value) { - checkReadOnly(); - positiveInfinitySymbol_ = value; - } - - /** - * $(I Property.) Retrieves a string array of native equivalents of the digits 0 to 9. - * Returns: A string array of native equivalents of the digits 0 to 9. - */ - public final char[][] nativeDigits() { - return nativeDigits_; - } - /** - * $(I Property.) Assigns a string array of native equivalents of the digits 0 to 9. - * Params: value = A string array of native equivalents of the digits 0 to 9. - */ - public final void nativeDigits(char[][] value) { - checkReadOnly(); - nativeDigits_ = value; - } - - private void checkReadOnly() { - if (isReadOnly_) - error("NumberFormat instance is read-only."); - } - -} - -/** - * $(ANCHOR _DateTimeFormat) - * Determines how $(LINK2 #Time, Time) values are formatted, depending on the culture. - * Remarks: To create a DateTimeFormat for a specific culture, create a $(LINK2 #Culture, Culture) for that culture and - * retrieve its $(LINK2 #Culture_dateTimeFormat, dateTimeFormat) property. To create a DateTimeFormat for the user's current - * culture, use the $(LINK2 #Culture_current, current) property. - */ -public class DateTimeFormat : IFormatService { - - private const char[] rfc1123Pattern_ = "ddd, dd MMM yyyy HH':'mm':'ss 'GMT'"; - private const char[] sortableDateTimePattern_ = "yyyy'-'MM'-'dd'T'HH':'mm':'ss"; - private const char[] universalSortableDateTimePattern_ = "yyyy'-'MM'-'dd' 'HH':'mm':'ss'Z'"; - private const char[] allStandardFormats = [ 'd', 'D', 'f', 'F', 'g', 'G', 'm', 'M', 'r', 'R', 's', 't', 'T', 'u', 'U', 'y', 'Y' ]; - - - package bool isReadOnly_; - private static DateTimeFormat invariantFormat_; - private CultureData* cultureData_; - - private Calendar calendar_; - private int[] optionalCalendars_; - private int firstDayOfWeek_ = -1; - private int calendarWeekRule_ = -1; - private char[] dateSeparator_; - private char[] timeSeparator_; - private char[] amDesignator_; - private char[] pmDesignator_; - private char[] shortDatePattern_; - private char[] shortTimePattern_; - private char[] longDatePattern_; - private char[] longTimePattern_; - private char[] monthDayPattern_; - private char[] yearMonthPattern_; - private char[][] abbreviatedDayNames_; - private char[][] dayNames_; - private char[][] abbreviatedMonthNames_; - private char[][] monthNames_; - - private char[] fullDateTimePattern_; - private char[] generalShortTimePattern_; - private char[] generalLongTimePattern_; - - private char[][] shortTimePatterns_; - private char[][] shortDatePatterns_; - private char[][] longTimePatterns_; - private char[][] longDatePatterns_; - private char[][] yearMonthPatterns_; - - /** - * $(ANCHOR DateTimeFormat_ctor) - * Initializes an instance that is writable and culture-independent. - */ - public this() { - // This ctor is used by invariantFormat so we can't set the calendar property. - cultureData_ = Culture.invariantCulture.cultureData_; - calendar_ = Gregorian.generic; - initialize(); - } - - package this(CultureData* cultureData, Calendar calendar) { - cultureData_ = cultureData; - this.calendar = calendar; - } - - /** - * $(ANCHOR DateTimeFormat_getFormat) - * Retrieves an object defining how to format the specified type. - * Params: type = The TypeInfo of the resulting formatting object. - * Returns: If type is typeid(DateTimeFormat), the current DateTimeFormat instance. Otherwise, null. - * Remarks: Implements $(LINK2 #IFormatService_getFormat, IFormatService.getFormat). - */ - public Object getFormat(TypeInfo type) { - return (type is typeid(DateTimeFormat)) ? this : null; - } - -version(Clone) -{ - /** - */ - public Object clone() { - DateTimeFormat other = cast(DateTimeFormat)cloneObject(this); - other.calendar_ = cast(Calendar)calendar.clone(); - other.isReadOnly_ = false; - return other; - } -} - - package char[][] shortTimePatterns() { - if (shortTimePatterns_ == null) - shortTimePatterns_ = cultureData_.shortTimes; - return shortTimePatterns_.dup; - } - - package char[][] shortDatePatterns() { - if (shortDatePatterns_ == null) - shortDatePatterns_ = cultureData_.shortDates; - return shortDatePatterns_.dup; - } - - package char[][] longTimePatterns() { - if (longTimePatterns_ == null) - longTimePatterns_ = cultureData_.longTimes; - return longTimePatterns_.dup; - } - - package char[][] longDatePatterns() { - if (longDatePatterns_ == null) - longDatePatterns_ = cultureData_.longDates; - return longDatePatterns_.dup; - } - - package char[][] yearMonthPatterns() { - if (yearMonthPatterns_ == null) - yearMonthPatterns_ = cultureData_.yearMonths; - return yearMonthPatterns_; - } - - /** - * $(ANCHOR DateTimeFormat_getAllDateTimePatterns) - * Retrieves the standard patterns in which Time values can be formatted. - * Returns: An array of strings containing the standard patterns in which Time values can be formatted. - */ - public final char[][] getAllDateTimePatterns() { - char[][] result; - foreach (char format; DateTimeFormat.allStandardFormats) - result ~= getAllDateTimePatterns(format); - return result; - } - - /** - * $(ANCHOR DateTimeFormat_getAllDateTimePatterns_char) - * Retrieves the standard patterns in which Time values can be formatted using the specified format character. - * Returns: An array of strings containing the standard patterns in which Time values can be formatted using the specified format character. - */ - public final char[][] getAllDateTimePatterns(char format) { - - char[][] combinePatterns(char[][] patterns1, char[][] patterns2) { - char[][] result = new char[][patterns1.length * patterns2.length]; - for (int i = 0; i < patterns1.length; i++) { - for (int j = 0; j < patterns2.length; j++) - result[i * patterns2.length + j] = patterns1[i] ~ " " ~ patterns2[j]; - } - return result; - } - - // format must be one of allStandardFormats. - char[][] result; - switch (format) { - case 'd': - result ~= shortDatePatterns; - break; - case 'D': - result ~= longDatePatterns; - break; - case 'f': - result ~= combinePatterns(longDatePatterns, shortTimePatterns); - break; - case 'F': - result ~= combinePatterns(longDatePatterns, longTimePatterns); - break; - case 'g': - result ~= combinePatterns(shortDatePatterns, shortTimePatterns); - break; - case 'G': - result ~= combinePatterns(shortDatePatterns, longTimePatterns); - break; - case 'm': - case 'M': - result ~= monthDayPattern; - break; - case 'r': - case 'R': - result ~= rfc1123Pattern_; - break; - case 's': - result ~= sortableDateTimePattern_; - break; - case 't': - result ~= shortTimePatterns; - break; - case 'T': - result ~= longTimePatterns; - case 'u': - result ~= universalSortableDateTimePattern_; - break; - case 'U': - result ~= combinePatterns(longDatePatterns, longTimePatterns); - break; - case 'y': - case 'Y': - result ~= yearMonthPatterns; - break; - default: - error("The specified format was not valid."); - } - return result; - } - - /** - * $(ANCHOR DateTimeFormat_getAbbreviatedDayName) - * Retrieves the abbreviated name of the specified day of the week based on the culture of the instance. - * Params: dayOfWeek = A DayOfWeek value. - * Returns: The abbreviated name of the day of the week represented by dayOfWeek. - */ - public final char[] getAbbreviatedDayName(Calendar.DayOfWeek dayOfWeek) { - return abbreviatedDayNames[cast(int)dayOfWeek]; - } - - /** - * $(ANCHOR DateTimeFormat_getDayName) - * Retrieves the full name of the specified day of the week based on the culture of the instance. - * Params: dayOfWeek = A DayOfWeek value. - * Returns: The full name of the day of the week represented by dayOfWeek. - */ - public final char[] getDayName(Calendar.DayOfWeek dayOfWeek) { - return dayNames[cast(int)dayOfWeek]; - } - - /** - * $(ANCHOR DateTimeFormat_getAbbreviatedMonthName) - * Retrieves the abbreviated name of the specified month based on the culture of the instance. - * Params: month = An integer between 1 and 13 indicating the name of the _month to return. - * Returns: The abbreviated name of the _month represented by month. - */ - public final char[] getAbbreviatedMonthName(int month) { - return abbreviatedMonthNames[month - 1]; - } - - /** - * $(ANCHOR DateTimeFormat_getMonthName) - * Retrieves the full name of the specified month based on the culture of the instance. - * Params: month = An integer between 1 and 13 indicating the name of the _month to return. - * Returns: The full name of the _month represented by month. - */ - public final char[] getMonthName(int month) { - return monthNames[month - 1]; - } - - /** - * $(ANCHOR DateTimeFormat_getInstance) - * Retrieves the DateTimeFormat for the specified IFormatService. - * Params: formatService = The IFormatService used to retrieve DateTimeFormat. - * Returns: The DateTimeFormat for the specified IFormatService. - * Remarks: The method calls $(LINK2 #IFormatService_getFormat, IFormatService.getFormat) with typeof(DateTimeFormat). If formatService is null, - * then the value of the current property is returned. - */ - public static DateTimeFormat getInstance(IFormatService formatService) { - Culture culture = cast(Culture)formatService; - if (culture !is null) { - if (culture.dateTimeFormat_ !is null) - return culture.dateTimeFormat_; - return culture.dateTimeFormat; - } - if (DateTimeFormat dateTimeFormat = cast(DateTimeFormat)formatService) - return dateTimeFormat; - if (formatService !is null) { - if (DateTimeFormat dateTimeFormat = cast(DateTimeFormat)(formatService.getFormat(typeid(DateTimeFormat)))) - return dateTimeFormat; - } - return current; - } - - /** - * $(ANCHOR DateTimeFormat_current) - * $(I Property.) Retrieves a read-only DateTimeFormat instance from the current culture. - * Returns: A read-only DateTimeFormat instance from the current culture. - */ - public static DateTimeFormat current() { - return Culture.current.dateTimeFormat; - } - - /** - * $(ANCHOR DateTimeFormat_invariantFormat) - * $(I Property.) Retrieves a read-only DateTimeFormat instance that is culturally independent. - * Returns: A read-only DateTimeFormat instance that is culturally independent. - */ - public static DateTimeFormat invariantFormat() { - if (invariantFormat_ is null) { - invariantFormat_ = new DateTimeFormat; - invariantFormat_.calendar = new Gregorian(); - invariantFormat_.isReadOnly_ = true; - } - return invariantFormat_; - } - - /** - * $(ANCHOR DateTimeFormat_isReadOnly) - * $(I Property.) Retrieves a value indicating whether the instance is read-only. - * Returns: true is the instance is read-only; otherwise, false. - */ - public final bool isReadOnly() { - return isReadOnly_; - } - - /** - * $(I Property.) Retrieves the calendar used by the current culture. - * Returns: The Calendar determining the calendar used by the current culture. For example, the Gregorian. - */ - public final Calendar calendar() { - assert(calendar_ !is null); - return calendar_; - } - /** - * $(ANCHOR DateTimeFormat_calendar) - * $(I Property.) Assigns the calendar to be used by the current culture. - * Params: value = The Calendar determining the calendar to be used by the current culture. - * Exceptions: If value is not valid for the current culture, an Exception is thrown. - */ - public final void calendar(Calendar value) { - checkReadOnly(); - if (value !is calendar_) { - for (int i = 0; i < optionalCalendars.length; i++) { - if (optionalCalendars[i] == value.id) { - if (calendar_ !is null) { - // Clear current properties. - shortDatePattern_ = null; - longDatePattern_ = null; - shortTimePattern_ = null; - yearMonthPattern_ = null; - monthDayPattern_ = null; - generalShortTimePattern_ = null; - generalLongTimePattern_ = null; - fullDateTimePattern_ = null; - shortDatePatterns_ = null; - longDatePatterns_ = null; - yearMonthPatterns_ = null; - abbreviatedDayNames_ = null; - abbreviatedMonthNames_ = null; - dayNames_ = null; - monthNames_ = null; - } - calendar_ = value; - initialize(); - return; - } - } - error("Not a valid calendar for the culture."); - } - } - - /** - * $(ANCHOR DateTimeFormat_firstDayOfWeek) - * $(I Property.) Retrieves the first day of the week. - * Returns: A DayOfWeek value indicating the first day of the week. - */ - public final Calendar.DayOfWeek firstDayOfWeek() { - return cast(Calendar.DayOfWeek)firstDayOfWeek_; - } - /** - * $(I Property.) Assigns the first day of the week. - * Params: valie = A DayOfWeek value indicating the first day of the week. - */ - public final void firstDayOfWeek(Calendar.DayOfWeek value) { - checkReadOnly(); - firstDayOfWeek_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_calendarWeekRule) - * $(I Property.) Retrieves the _value indicating the rule used to determine the first week of the year. - * Returns: A CalendarWeekRule _value determining the first week of the year. - */ - public final Calendar.WeekRule calendarWeekRule() { - return cast(Calendar.WeekRule) calendarWeekRule_; - } - /** - * $(I Property.) Assigns the _value indicating the rule used to determine the first week of the year. - * Params: value = A CalendarWeekRule _value determining the first week of the year. - */ - public final void calendarWeekRule(Calendar.WeekRule value) { - checkReadOnly(); - calendarWeekRule_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_nativeCalendarName) - * $(I Property.) Retrieves the native name of the calendar associated with the current instance. - * Returns: The native name of the calendar associated with the current instance. - */ - public final char[] nativeCalendarName() { - return cultureData_.nativeCalName; - } - - /** - * $(ANCHOR DateTimeFormat_dateSeparator) - * $(I Property.) Retrieves the string separating date components. - * Returns: The string separating date components. - */ - public final char[] dateSeparator() { - if (dateSeparator_ == null) - dateSeparator_ = cultureData_.date; - return dateSeparator_; - } - /** - * $(I Property.) Assigns the string separating date components. - * Params: value = The string separating date components. - */ - public final void dateSeparator(char[] value) { - checkReadOnly(); - dateSeparator_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_timeSeparator) - * $(I Property.) Retrieves the string separating time components. - * Returns: The string separating time components. - */ - public final char[] timeSeparator() { - if (timeSeparator_ == null) - timeSeparator_ = cultureData_.time; - return timeSeparator_; - } - /** - * $(I Property.) Assigns the string separating time components. - * Params: value = The string separating time components. - */ - public final void timeSeparator(char[] value) { - checkReadOnly(); - timeSeparator_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_amDesignator) - * $(I Property.) Retrieves the string designator for hours before noon. - * Returns: The string designator for hours before noon. For example, "AM". - */ - public final char[] amDesignator() { - assert(amDesignator_ != null); - return amDesignator_; - } - /** - * $(I Property.) Assigns the string designator for hours before noon. - * Params: value = The string designator for hours before noon. - */ - public final void amDesignator(char[] value) { - checkReadOnly(); - amDesignator_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_pmDesignator) - * $(I Property.) Retrieves the string designator for hours after noon. - * Returns: The string designator for hours after noon. For example, "PM". - */ - public final char[] pmDesignator() { - assert(pmDesignator_ != null); - return pmDesignator_; - } - /** - * $(I Property.) Assigns the string designator for hours after noon. - * Params: value = The string designator for hours after noon. - */ - public final void pmDesignator(char[] value) { - checkReadOnly(); - pmDesignator_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_shortDatePattern) - * $(I Property.) Retrieves the format pattern for a short date value. - * Returns: The format pattern for a short date value. - */ - public final char[] shortDatePattern() { - assert(shortDatePattern_ != null); - return shortDatePattern_; - } - /** - * $(I Property.) Assigns the format pattern for a short date _value. - * Params: value = The format pattern for a short date _value. - */ - public final void shortDatePattern(char[] value) { - checkReadOnly(); - if (shortDatePatterns_ != null) - shortDatePatterns_[0] = value; - shortDatePattern_ = value; - generalLongTimePattern_ = null; - generalShortTimePattern_ = null; - } - - /** - * $(ANCHOR DateTimeFormat_shortTimePattern) - * $(I Property.) Retrieves the format pattern for a short time value. - * Returns: The format pattern for a short time value. - */ - public final char[] shortTimePattern() { - if (shortTimePattern_ == null) - shortTimePattern_ = cultureData_.shortTime; - return shortTimePattern_; - } - /** - * $(I Property.) Assigns the format pattern for a short time _value. - * Params: value = The format pattern for a short time _value. - */ - public final void shortTimePattern(char[] value) { - checkReadOnly(); - shortTimePattern_ = value; - generalShortTimePattern_ = null; - } - - /** - * $(ANCHOR DateTimeFormat_longDatePattern) - * $(I Property.) Retrieves the format pattern for a long date value. - * Returns: The format pattern for a long date value. - */ - public final char[] longDatePattern() { - assert(longDatePattern_ != null); - return longDatePattern_; - } - /** - * $(I Property.) Assigns the format pattern for a long date _value. - * Params: value = The format pattern for a long date _value. - */ - public final void longDatePattern(char[] value) { - checkReadOnly(); - if (longDatePatterns_ != null) - longDatePatterns_[0] = value; - longDatePattern_ = value; - fullDateTimePattern_ = null; - } - - /** - * $(ANCHOR DateTimeFormat_longTimePattern) - * $(I Property.) Retrieves the format pattern for a long time value. - * Returns: The format pattern for a long time value. - */ - public final char[] longTimePattern() { - assert(longTimePattern_ != null); - return longTimePattern_; - } - /** - * $(I Property.) Assigns the format pattern for a long time _value. - * Params: value = The format pattern for a long time _value. - */ - public final void longTimePattern(char[] value) { - checkReadOnly(); - longTimePattern_ = value; - fullDateTimePattern_ = null; - } - - /** - * $(ANCHOR DateTimeFormat_monthDayPattern) - * $(I Property.) Retrieves the format pattern for a month and day value. - * Returns: The format pattern for a month and day value. - */ - public final char[] monthDayPattern() { - if (monthDayPattern_ == null) - monthDayPattern_ = cultureData_.monthDay; - return monthDayPattern_; - } - /** - * $(I Property.) Assigns the format pattern for a month and day _value. - * Params: value = The format pattern for a month and day _value. - */ - public final void monthDayPattern(char[] value) { - checkReadOnly(); - monthDayPattern_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_yearMonthPattern) - * $(I Property.) Retrieves the format pattern for a year and month value. - * Returns: The format pattern for a year and month value. - */ - public final char[] yearMonthPattern() { - assert(yearMonthPattern_ != null); - return yearMonthPattern_; - } - /** - * $(I Property.) Assigns the format pattern for a year and month _value. - * Params: value = The format pattern for a year and month _value. - */ - public final void yearMonthPattern(char[] value) { - checkReadOnly(); - yearMonthPattern_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_abbreviatedDayNames) - * $(I Property.) Retrieves a string array containing the abbreviated names of the days of the week. - * Returns: A string array containing the abbreviated names of the days of the week. For $(LINK2 #DateTimeFormat_invariantFormat, invariantFormat), - * this contains "Sun", "Mon", "Tue", "Wed", "Thu", "Fri" and "Sat". - */ - public final char[][] abbreviatedDayNames() { - if (abbreviatedDayNames_ == null) - abbreviatedDayNames_ = cultureData_.abbrevDayNames; - return abbreviatedDayNames_.dup; - } - /** - * $(I Property.) Assigns a string array containing the abbreviated names of the days of the week. - * Params: value = A string array containing the abbreviated names of the days of the week. - */ - public final void abbreviatedDayNames(char[][] value) { - checkReadOnly(); - abbreviatedDayNames_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_dayNames) - * $(I Property.) Retrieves a string array containing the full names of the days of the week. - * Returns: A string array containing the full names of the days of the week. For $(LINK2 #DateTimeFormat_invariantFormat, invariantFormat), - * this contains "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" and "Saturday". - */ - public final char[][] dayNames() { - if (dayNames_ == null) - dayNames_ = cultureData_.dayNames; - return dayNames_.dup; - } - /** - * $(I Property.) Assigns a string array containing the full names of the days of the week. - * Params: value = A string array containing the full names of the days of the week. - */ - public final void dayNames(char[][] value) { - checkReadOnly(); - dayNames_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_abbreviatedMonthNames) - * $(I Property.) Retrieves a string array containing the abbreviated names of the months. - * Returns: A string array containing the abbreviated names of the months. For $(LINK2 #DateTimeFormat_invariantFormat, invariantFormat), - * this contains "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" and "". - */ - public final char[][] abbreviatedMonthNames() { - if (abbreviatedMonthNames_ == null) - abbreviatedMonthNames_ = cultureData_.abbrevMonthNames; - return abbreviatedMonthNames_.dup; - } - /** - * $(I Property.) Assigns a string array containing the abbreviated names of the months. - * Params: value = A string array containing the abbreviated names of the months. - */ - public final void abbreviatedMonthNames(char[][] value) { - checkReadOnly(); - abbreviatedMonthNames_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_monthNames) - * $(I Property.) Retrieves a string array containing the full names of the months. - * Returns: A string array containing the full names of the months. For $(LINK2 #DateTimeFormat_invariantFormat, invariantFormat), - * this contains "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" and "". - */ - public final char[][] monthNames() { - if (monthNames_ == null) - monthNames_ = cultureData_.monthNames; - return monthNames_.dup; - } - /** - * $(I Property.) Assigns a string array containing the full names of the months. - * Params: value = A string array containing the full names of the months. - */ - public final void monthNames(char[][] value) { - checkReadOnly(); - monthNames_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_fullDateTimePattern) - * $(I Property.) Retrieves the format pattern for a long date and a long time value. - * Returns: The format pattern for a long date and a long time value. - */ - public final char[] fullDateTimePattern() { - if (fullDateTimePattern_ == null) - fullDateTimePattern_ = longDatePattern ~ " " ~ longTimePattern; - return fullDateTimePattern_; - } - /** - * $(I Property.) Assigns the format pattern for a long date and a long time _value. - * Params: value = The format pattern for a long date and a long time _value. - */ - public final void fullDateTimePattern(char[] value) { - checkReadOnly(); - fullDateTimePattern_ = value; - } - - /** - * $(ANCHOR DateTimeFormat_rfc1123Pattern) - * $(I Property.) Retrieves the format pattern based on the IETF RFC 1123 specification, for a time value. - * Returns: The format pattern based on the IETF RFC 1123 specification, for a time value. - */ - public final char[] rfc1123Pattern() { - return rfc1123Pattern_; - } - - /** - * $(ANCHOR DateTimeFormat_sortableDateTimePattern) - * $(I Property.) Retrieves the format pattern for a sortable date and time value. - * Returns: The format pattern for a sortable date and time value. - */ - public final char[] sortableDateTimePattern() { - return sortableDateTimePattern_; - } - - /** - * $(ANCHOR DateTimeFormat_universalSortableDateTimePattern) - * $(I Property.) Retrieves the format pattern for a universal date and time value. - * Returns: The format pattern for a universal date and time value. - */ - public final char[] universalSortableDateTimePattern() { - return universalSortableDateTimePattern_; - } - - package char[] generalShortTimePattern() { - if (generalShortTimePattern_ == null) - generalShortTimePattern_ = shortDatePattern ~ " " ~ shortTimePattern; - return generalShortTimePattern_; - } - - package char[] generalLongTimePattern() { - if (generalLongTimePattern_ == null) - generalLongTimePattern_ = shortDatePattern ~ " " ~ longTimePattern; - return generalLongTimePattern_; - } - - private void checkReadOnly() { - if (isReadOnly_) - error("DateTimeFormat instance is read-only."); - } - - private void initialize() { - if (longTimePattern_ == null) - longTimePattern_ = cultureData_.longTime; - if (shortDatePattern_ == null) - shortDatePattern_ = cultureData_.shortDate; - if (longDatePattern_ == null) - longDatePattern_ = cultureData_.longDate; - if (yearMonthPattern_ == null) - yearMonthPattern_ = cultureData_.yearMonth; - if (amDesignator_ == null) - amDesignator_ = cultureData_.am; - if (pmDesignator_ == null) - pmDesignator_ = cultureData_.pm; - if (firstDayOfWeek_ == -1) - firstDayOfWeek_ = cultureData_.firstDayOfWeek; - if (calendarWeekRule_ == -1) - calendarWeekRule_ = cultureData_.firstDayOfYear; - } - - private int[] optionalCalendars() { - if (optionalCalendars_ is null) - optionalCalendars_ = cultureData_.optionalCalendars; - return optionalCalendars_; - } - - private void error(char[] msg) { - throw new LocaleException (msg); - } - -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Data.d --- a/tango/tango/text/locale/Data.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,408 +0,0 @@ -module tango.text.locale.Data; - -private import tango.core.Exception; - -package void error(char[] msg) { - throw new LocaleException (msg); -} - -package int compareString(char[] strA, char[] strB) { - // Comparison ignores case - int strALength = strA.length; - int strBLength = strB.length; - int l = strALength; - if (strBLength < l) - l = strBLength; - - int result; - - for (int i = 0; i < l; i++) { - if (strA[i] != strB[i]) { - char chA = strA[i]; - char chB = strB[i]; - if (chA >= 'A' && chA <= 'Z') - chA += cast(int)'a' - cast(int)'A'; - if (chB >= 'A' && chB <= 'Z') - chB += cast(int)'a' - cast(int)'A'; - result = cast(int)chA - cast(int)chB; - if (result != 0) - break; - } - } - if (result == 0) - result = strALength - strBLength; - return result; -} - -package struct CultureData { - - package int lcid; - package int parent; - package char[] name; - package char[] isoLangName; - package char[] isoLangName2; - package char[] ietfTag; - package char[] englishName; - package char[] nativeName; - package bool isNeutral; - - package int geoId; - package char[] regionName; - package char[] isoRegionName; - package char[] englishCountry; - package char[] nativeCountry; - package char[] intlSymbol; - package char[] englishCurrency; - package char[] nativeCurrency; - package bool isMetric; - - package int digits; - package int negativeNumber; - package int currencyDigits; - package int negativeCurrency; - package int positiveCurrency; - package int[] grouping; - package int[] monetaryGrouping; - package char[] decimal; - package char[] thousand; - package char[] monetaryDecimal; - package char[] monetaryThousand; - package char[] currency; - package char[] negativeSign; - package char[] positiveSign; - package char[] nan; - package char[] negInfinity; - package char[] posInfinity; - package char[][] nativeDigits; - - package int calendarType; - package int[] optionalCalendars; - package char[] nativeCalName; - package int firstDayOfWeek; - package int firstDayOfYear; - package char[] date; - package char[] time; - package char[] am; - package char[] pm; - package char[] shortDate; - package char[] shortTime; - package char[] longDate; - package char[] longTime; - package char[] monthDay; - package char[] yearMonth; - package char[][] shortTimes; - package char[][] shortDates; - package char[][] longTimes; - package char[][] longDates; - package char[][] yearMonths; - package char[][] abbrevDayNames; - package char[][] dayNames; - package char[][] abbrevMonthNames; - package char[][] monthNames; - - package static const CultureData[] cultureDataTable = [ -{ 0x0001, 0x007F, "ar", "ar", "ara", "ar", "\u0041\u0072\u0061\u0062\u0069\u0063", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629", true }, -{ 0x0002, 0x007F, "bg", "bg", "bul", "bg", "\u0042\u0075\u006C\u0067\u0061\u0072\u0069\u0061\u006E", "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438", true }, -{ 0x0003, 0x007F, "ca", "ca", "cat", "ca", "\u0043\u0061\u0074\u0061\u006C\u0061\u006E", "\u0063\u0061\u0074\u0061\u006C\u00E0", true }, -{ 0x0004, 0x007F, "zh-CHS", "zh", "zho", "zh-Hans", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0053\u0069\u006D\u0070\u006C\u0069\u0066\u0069\u0065\u0064\u0029", "\u4E2D\u6587\u0028\u7B80\u4F53\u0029", true }, -{ 0x0005, 0x007F, "cs", "cs", "ces", "cs", "\u0043\u007A\u0065\u0063\u0068", "\u010D\u0065\u0161\u0074\u0069\u006E\u0061", true }, -{ 0x0006, 0x007F, "da", "da", "dan", "da", "\u0044\u0061\u006E\u0069\u0073\u0068", "\u0064\u0061\u006E\u0073\u006B", true }, -{ 0x0007, 0x007F, "de", "de", "deu", "de", "\u0047\u0065\u0072\u006D\u0061\u006E", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068", true }, -{ 0x0008, 0x007F, "el", "el", "ell", "el", "\u0047\u0072\u0065\u0065\u006B", "\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC", true }, -{ 0x0009, 0x007F, "en", "en", "eng", "en", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068", true }, -{ 0x000A, 0x007F, "es", "es", "spa", "es", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068", "\u0065\u0073\u0070\u0061\u00F1\u006F\u006C", true }, -{ 0x000B, 0x007F, "fi", "fi", "fin", "fi", "\u0046\u0069\u006E\u006E\u0069\u0073\u0068", "\u0073\u0075\u006F\u006D\u0069", true }, -{ 0x000C, 0x007F, "fr", "fr", "fra", "fr", "\u0046\u0072\u0065\u006E\u0063\u0068", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073", true }, -{ 0x000D, 0x007F, "he", "he", "heb", "he", "\u0048\u0065\u0062\u0072\u0065\u0077", "\u05E2\u05D1\u05E8\u05D9\u05EA", true }, -{ 0x000E, 0x007F, "hu", "hu", "hun", "hu", "\u0048\u0075\u006E\u0067\u0061\u0072\u0069\u0061\u006E", "\u006D\u0061\u0067\u0079\u0061\u0072", true }, -{ 0x000F, 0x007F, "is", "is", "isl", "is", "\u0049\u0063\u0065\u006C\u0061\u006E\u0064\u0069\u0063", "\u00ED\u0073\u006C\u0065\u006E\u0073\u006B\u0061", true }, -{ 0x0010, 0x007F, "it", "it", "ita", "it", "\u0049\u0074\u0061\u006C\u0069\u0061\u006E", "\u0069\u0074\u0061\u006C\u0069\u0061\u006E\u006F", true }, -{ 0x0011, 0x007F, "ja", "ja", "jpn", "ja", "\u004A\u0061\u0070\u0061\u006E\u0065\u0073\u0065", "\u65E5\u672C\u8A9E", true }, -{ 0x0012, 0x007F, "ko", "ko", "kor", "ko", "\u004B\u006F\u0072\u0065\u0061\u006E", "\uD55C\uAD6D\uC5B4", true }, -{ 0x0013, 0x007F, "nl", "nl", "nld", "nl", "\u0044\u0075\u0074\u0063\u0068", "\u004E\u0065\u0064\u0065\u0072\u006C\u0061\u006E\u0064\u0073", true }, -{ 0x0014, 0x007F, "no", "no", "nor", "no", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E", "\u006E\u006F\u0072\u0073\u006B", true }, -{ 0x0015, 0x007F, "pl", "pl", "pol", "pl", "\u0050\u006F\u006C\u0069\u0073\u0068", "\u0070\u006F\u006C\u0073\u006B\u0069", true }, -{ 0x0016, 0x007F, "pt", "pt", "por", "pt", "\u0050\u006F\u0072\u0074\u0075\u0067\u0075\u0065\u0073\u0065", "\u0050\u006F\u0072\u0074\u0075\u0067\u0075\u00EA\u0073", true }, -{ 0x0018, 0x007F, "ro", "ro", "ron", "ro", "\u0052\u006F\u006D\u0061\u006E\u0069\u0061\u006E", "\u0072\u006F\u006D\u00E2\u006E\u0103", true }, -{ 0x0019, 0x007F, "ru", "ru", "rus", "ru", "\u0052\u0075\u0073\u0073\u0069\u0061\u006E", "\u0440\u0443\u0441\u0441\u043A\u0438\u0439", true }, -{ 0x001A, 0x007F, "hr", "hr", "hrv", "hr", "\u0043\u0072\u006F\u0061\u0074\u0069\u0061\u006E", "\u0068\u0072\u0076\u0061\u0074\u0073\u006B\u0069", true }, -{ 0x001B, 0x007F, "sk", "sk", "slk", "sk", "\u0053\u006C\u006F\u0076\u0061\u006B", "\u0073\u006C\u006F\u0076\u0065\u006E\u010D\u0069\u006E\u0061", true }, -{ 0x001C, 0x007F, "sq", "sq", "sqi", "sq", "\u0041\u006C\u0062\u0061\u006E\u0069\u0061\u006E", "\u0073\u0068\u0071\u0069\u0070\u0065", true }, -{ 0x001D, 0x007F, "sv", "sv", "swe", "sv", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068", "\u0073\u0076\u0065\u006E\u0073\u006B\u0061", true }, -{ 0x001E, 0x007F, "th", "th", "tha", "th", "\u0054\u0068\u0061\u0069", "\u0E44\u0E17\u0E22", true }, -{ 0x001F, 0x007F, "tr", "tr", "tur", "tr", "\u0054\u0075\u0072\u006B\u0069\u0073\u0068", "\u0054\u00FC\u0072\u006B\u00E7\u0065", true }, -{ 0x0020, 0x007F, "ur", "ur", "urd", "ur", "\u0055\u0072\u0064\u0075", "\u0627\u064F\u0631\u062F\u0648", true }, -{ 0x0021, 0x007F, "id", "id", "ind", "id", "\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u006E", "\u0042\u0061\u0068\u0061\u0073\u0061\u0020\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061", true }, -{ 0x0022, 0x007F, "uk", "uk", "ukr", "uk", "\u0055\u006B\u0072\u0061\u0069\u006E\u0069\u0061\u006E", "\u0443\u043A\u0440\u0430\u0457\u043D\u044C\u0441\u043A\u0430", true }, -{ 0x0023, 0x007F, "be", "be", "bel", "be", "\u0042\u0065\u006C\u0061\u0072\u0075\u0073\u0069\u0061\u006E", "\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u043A\u0456", true }, -{ 0x0024, 0x007F, "sl", "sl", "slv", "sl", "\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u0061\u006E", "\u0073\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u0069", true }, -{ 0x0025, 0x007F, "et", "et", "est", "et", "\u0045\u0073\u0074\u006F\u006E\u0069\u0061\u006E", "\u0065\u0065\u0073\u0074\u0069", true }, -{ 0x0026, 0x007F, "lv", "lv", "lav", "lv", "\u004C\u0061\u0074\u0076\u0069\u0061\u006E", "\u006C\u0061\u0074\u0076\u0069\u0065\u0161\u0075", true }, -{ 0x0027, 0x007F, "lt", "lt", "lit", "lt", "\u004C\u0069\u0074\u0068\u0075\u0061\u006E\u0069\u0061\u006E", "\u006C\u0069\u0065\u0074\u0075\u0076\u0069\u0173", true }, -{ 0x0029, 0x007F, "fa", "fa", "fas", "fa", "\u0050\u0065\u0072\u0073\u0069\u0061\u006E", "\u0641\u0627\u0631\u0633\u0649", true }, -{ 0x002A, 0x007F, "vi", "vi", "vie", "vi", "\u0056\u0069\u0065\u0074\u006E\u0061\u006D\u0065\u0073\u0065", "\u0054\u0069\u00EA\u0301\u006E\u0067\u0020\u0056\u0069\u00EA\u0323\u0074", true }, -{ 0x002B, 0x007F, "hy", "hy", "hye", "hy", "\u0041\u0072\u006D\u0065\u006E\u0069\u0061\u006E", "\u0540\u0561\u0575\u0565\u0580\u0565\u0576", true }, -{ 0x002C, 0x007F, "az", "az", "aze", "az", "\u0041\u007A\u0065\u0072\u0069", "\u0041\u007A\u0259\u0072\u0062\u0061\u0079\u0063\u0061\u006E\u00AD\u0131\u006C\u0131", true }, -{ 0x002D, 0x007F, "eu", "eu", "eus", "eu", "\u0042\u0061\u0073\u0071\u0075\u0065", "\u0065\u0075\u0073\u006B\u0061\u0072\u0061", true }, -{ 0x002F, 0x007F, "mk", "mk", "mkd", "mk", "\u004D\u0061\u0063\u0065\u0064\u006F\u006E\u0069\u0061\u006E", "\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438\u0020\u0458\u0430\u0437\u0438\u043A", true }, -{ 0x0036, 0x007F, "af", "af", "afr", "af", "\u0041\u0066\u0072\u0069\u006B\u0061\u0061\u006E\u0073", "\u0041\u0066\u0072\u0069\u006B\u0061\u0061\u006E\u0073", true }, -{ 0x0037, 0x007F, "ka", "ka", "kat", "ka", "\u0047\u0065\u006F\u0072\u0067\u0069\u0061\u006E", "\u10E5\u10D0\u10E0\u10D7\u10E3\u10DA\u10D8", true }, -{ 0x0038, 0x007F, "fo", "fo", "fao", "fo", "\u0046\u0061\u0072\u006F\u0065\u0073\u0065", "\u0066\u00F8\u0072\u006F\u0079\u0073\u006B\u0074", true }, -{ 0x0039, 0x007F, "hi", "hi", "hin", "hi", "\u0048\u0069\u006E\u0064\u0069", "\u0939\u093F\u0902\u0926\u0940", true }, -{ 0x003E, 0x007F, "ms", "ms", "msa", "ms", "\u004D\u0061\u006C\u0061\u0079", "\u0042\u0061\u0068\u0061\u0073\u0061\u0020\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061", true }, -{ 0x003F, 0x007F, "kk", "kk", "kaz", "kk", "\u004B\u0061\u007A\u0061\u006B\u0068", "\u049A\u0430\u0437\u0430\u0449\u0062", true }, -{ 0x0040, 0x007F, "ky", "ky", "kir", "ky", "\u004B\u0079\u0072\u0067\u0079\u007A", "\u041A\u044B\u0440\u0433\u044B\u0437", true }, -{ 0x0041, 0x007F, "sw", "sw", "swa", "sw", "\u004B\u0069\u0073\u0077\u0061\u0068\u0069\u006C\u0069", "\u004B\u0069\u0073\u0077\u0061\u0068\u0069\u006C\u0069", true }, -{ 0x0043, 0x007F, "uz", "uz", "uzb", "uz", "\u0055\u007A\u0062\u0065\u006B", "\u0055\u0027\u007A\u0062\u0065\u006B", true }, -{ 0x0044, 0x007F, "tt", "tt", "tat", "tt", "\u0054\u0061\u0074\u0061\u0072", "\u0422\u0430\u0442\u0430\u0440", true }, -{ 0x0046, 0x007F, "pa", "pa", "pan", "pa", "\u0050\u0075\u006E\u006A\u0061\u0062\u0069", "\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40", true }, -{ 0x0047, 0x007F, "gu", "gu", "guj", "gu", "\u0047\u0075\u006A\u0061\u0072\u0061\u0074\u0069", "\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0", true }, -{ 0x0049, 0x007F, "ta", "ta", "tam", "ta", "\u0054\u0061\u006D\u0069\u006C", "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD", true }, -{ 0x004A, 0x007F, "te", "te", "tel", "te", "\u0054\u0065\u006C\u0075\u0067\u0075", "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41", true }, -{ 0x004B, 0x007F, "kn", "kn", "kan", "kn", "\u004B\u0061\u006E\u006E\u0061\u0064\u0061", "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1", true }, -{ 0x004E, 0x007F, "mr", "mr", "mar", "mr", "\u004D\u0061\u0072\u0061\u0074\u0068\u0069", "\u092E\u0930\u093E\u0920\u0940", true }, -{ 0x004F, 0x007F, "sa", "sa", "san", "sa", "\u0053\u0061\u006E\u0073\u006B\u0072\u0069\u0074", "\u0938\u0902\u0938\u094D\u0915\u0943\u0924", true }, -{ 0x0050, 0x007F, "mn", "mn", "mon", "mn", "\u004D\u006F\u006E\u0067\u006F\u006C\u0069\u0061\u006E", "\u041C\u043E\u043D\u0433\u043E\u043B\u00A0\u0445\u044D\u043B", true }, -{ 0x0056, 0x007F, "gl", "gl", "glg", "gl", "\u0047\u0061\u006C\u0069\u0063\u0069\u0061\u006E", "\u0067\u0061\u006C\u0065\u0067\u006F", true }, -{ 0x0057, 0x007F, "kok", "kok", "kok", "kok", "\u004B\u006F\u006E\u006B\u0061\u006E\u0069", "\u0915\u094B\u0902\u0915\u0923\u0940", true }, -{ 0x005A, 0x007F, "syr", "syr", "syr", "syr", "\u0053\u0079\u0072\u0069\u0061\u0063", "\u0723\u0718\u072A\u071D\u071D\u0710", true }, -{ 0x0065, 0x007F, "div", "div", "div", "div", "\u0044\u0069\u0076\u0065\u0068\u0069", "\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0784\u07A6\u0790\u07B0", true }, -{ 0x007F, 0x007F, "", "iv", "IVL", "", "\u0049\u006E\u0076\u0061\u0072\u0069\u0061\u006E\u0074\u0020\u004C\u0061\u006E\u0067\u0075\u0061\u0067\u0065\u0020\u0028\u0049\u006E\u0076\u0061\u0072\u0069\u0061\u006E\u0074\u0020\u0043\u006F\u0075\u006E\u0074\u0072\u0079\u0029", "\u0049\u006E\u0076\u0061\u0072\u0069\u0061\u006E\u0074\u0020\u004C\u0061\u006E\u0067\u0075\u0061\u0067\u0065\u0020\u0028\u0049\u006E\u0076\u0061\u0072\u0069\u0061\u006E\u0074\u0020\u0043\u006F\u0075\u006E\u0074\u0072\u0079\u0029", false }, -{ 0x0401, 0x0001, "ar-SA", "ar", "ara", "ar-SA", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0053\u0061\u0075\u0064\u0069\u0020\u0041\u0072\u0061\u0062\u0069\u0061\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0645\u0645\u0644\u0643\u0629\u0020\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629\u0029", false, 0x00CD, "SA", "SAU", "\u0053\u0061\u0075\u0064\u0069\u0020\u0041\u0072\u0061\u0062\u0069\u0061", "\u0627\u0644\u0645\u0645\u0644\u0643\u0629\u0020\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0627\u0644\u0633\u0639\u0648\u062F\u064A\u0629", "\u0053\u0041\u0052", "\u0053\u0061\u0075\u0064\u0069\u0020\u0052\u0069\u0079\u0061\u006C", "\u0631\u064A\u0627\u0644\u00A0\u0633\u0639\u0648\u062F\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0631\u002E\u0633\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 6, [ 6, 23, 2, 9, 10, 1, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0647\u062C\u0631\u064A", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u002F\u004D\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u002F\u004D\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0645\u062D\u0631\u0645", "\u0635\u0641\u0631", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u0627\u0648\u0644", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u0627\u0648\u0644\u0649", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u062B\u0627\u0646\u064A\u0629", "\u0631\u062C\u0628", "\u0634\u0639\u0628\u0627\u0646", "\u0631\u0645\u0636\u0627\u0646", "\u0634\u0648\u0627\u0644", "\u0630\u0648\u00A0\u0627\u0644\u0642\u0639\u062F\u0629", "\u0630\u0648\u00A0\u0627\u0644\u062D\u062C\u0629", "" ], [ "\u0645\u062D\u0631\u0645", "\u0635\u0641\u0631", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u0623\u0648\u0644", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u0623\u0648\u0644\u0649", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u062B\u0627\u0646\u064A\u0629", "\u0631\u062C\u0628", "\u0634\u0639\u0628\u0627\u0646", "\u0631\u0645\u0636\u0627\u0646", "\u0634\u0648\u0627\u0644", "\u0630\u0648\u00A0\u0627\u0644\u0642\u0639\u062F\u0629", "\u0630\u0648\u00A0\u0627\u0644\u062D\u062C\u0629", "" ] }, -{ 0x0402, 0x0002, "bg-BG", "bg", "bul", "bg-BG", "\u0042\u0075\u006C\u0067\u0061\u0072\u0069\u0061\u006E\u0020\u0028\u0042\u0075\u006C\u0067\u0061\u0072\u0069\u0061\u0029", "\u0431\u044A\u043B\u0433\u0430\u0440\u0441\u043A\u0438\u0020\u0028\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F\u0029", false, 0x0023, "BG", "BGR", "\u0042\u0075\u006C\u0067\u0061\u0072\u0069\u0061", "\u0411\u044A\u043B\u0433\u0430\u0440\u0438\u044F", "\u0042\u0047\u004C", "\u0042\u0075\u006C\u0067\u0061\u0072\u0069\u0061\u006E\u0020\u004C\u0065\u0076", "\u043B\u0432\u002E", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u043B\u0432", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0413\u0440\u0435\u0433\u043E\u0440\u0438\u0430\u043D\u0441\u043A\u0438\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'" ], [ "\u041D\u0434", "\u041F\u043D", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041F\u0442", "\u0421\u0431" ], [ "\u043D\u0435\u0434\u0435\u043B\u044F", "\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u043D\u0438\u043A", "\u0432\u0442\u043E\u0440\u043D\u0438\u043A", "\u0441\u0440\u044F\u0434\u0430", "\u0447\u0435\u0442\u0432\u044A\u0440\u0442\u044A\u043A", "\u043F\u0435\u0442\u044A\u043A", "\u0441\u044A\u0431\u043E\u0442\u0430" ], [ "\u042F\u043D\u0443\u0430\u0440\u0438", "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0438\u043B", "\u041C\u0430\u0439", "\u042E\u043D\u0438", "\u042E\u043B\u0438", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043F\u0442\u0435\u043C\u0432\u0440\u0438", "\u041E\u043A\u0442\u043E\u043C\u0432\u0440\u0438", "\u041D\u043E\u0435\u043C\u0432\u0440\u0438", "\u0414\u0435\u043A\u0435\u043C\u0432\u0440\u0438", "" ], [ "\u042F\u043D\u0443\u0430\u0440\u0438", "\u0424\u0435\u0432\u0440\u0443\u0430\u0440\u0438", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0438\u043B", "\u041C\u0430\u0439", "\u042E\u043D\u0438", "\u042E\u043B\u0438", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043F\u0442\u0435\u043C\u0432\u0440\u0438", "\u041E\u043A\u0442\u043E\u043C\u0432\u0440\u0438", "\u041D\u043E\u0435\u043C\u0432\u0440\u0438", "\u0414\u0435\u043A\u0435\u043C\u0432\u0440\u0438", "" ] }, -{ 0x0403, 0x0003, "ca-ES", "ca", "cat", "ca-ES", "\u0043\u0061\u0074\u0061\u006C\u0061\u006E\u0020\u0028\u0043\u0061\u0074\u0061\u006C\u0061\u006E\u0029", "\u0063\u0061\u0074\u0061\u006C\u00E0\u0020\u0028\u0063\u0061\u0074\u0061\u006C\u00E0\u0029", false, 0x00D9, "ES", "ESP", "\u0053\u0070\u0061\u0069\u006E", "\u0045\u0073\u0070\u0061\u006E\u0079\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u00E0", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u002F\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u002F\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u002F\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'\u0073\u0073\'\u005C\'\u005C\'\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u002F\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u002F\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u002F\'\u004D\u004D\u004D\u004D\'\u002F\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\'\u004D\u004D\u004D\u004D\'\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u002F\u0020\'\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u0067\u002E", "\u0064\u006C\u002E", "\u0064\u0074\u002E", "\u0064\u0063\u002E", "\u0064\u006A\u002E", "\u0064\u0076\u002E", "\u0064\u0073\u002E" ], [ "\u0064\u0069\u0075\u006D\u0065\u006E\u0067\u0065", "\u0064\u0069\u006C\u006C\u0075\u006E\u0073", "\u0064\u0069\u006D\u0061\u0072\u0074\u0073", "\u0064\u0069\u006D\u0065\u0063\u0072\u0065\u0073", "\u0064\u0069\u006A\u006F\u0075\u0073", "\u0064\u0069\u0076\u0065\u006E\u0064\u0072\u0065\u0073", "\u0064\u0069\u0073\u0073\u0061\u0062\u0074\u0065" ], [ "\u0067\u0065\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072\u00E7", "\u0061\u0062\u0072", "\u006D\u0061\u0069\u0067", "\u006A\u0075\u006E\u0079", "\u006A\u0075\u006C", "\u0061\u0067", "\u0073\u0065\u0074", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0073", "" ], [ "\u0067\u0065\u006E\u0065\u0072", "\u0066\u0065\u0062\u0072\u0065\u0072", "\u006D\u0061\u0072\u00E7", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0069\u0067", "\u006A\u0075\u006E\u0079", "\u006A\u0075\u006C\u0069\u006F\u006C", "\u0061\u0067\u006F\u0073\u0074", "\u0073\u0065\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u0065\u0073\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0404, 0x7C04, "zh-TW", "zh", "zho", "zh-TW", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0054\u0061\u0069\u0077\u0061\u006E\u0029", "\u4E2D\u6587\u0028\u53F0\u7063\u0029", false, 0x00ED, "TW", "TWN", "\u0054\u0061\u0069\u0077\u0061\u006E", "\u53F0\u7063", "\u0054\u0057\u0044", "\u004E\u0065\u0077\u0020\u0054\u0061\u0069\u0077\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u65B0\u53F0\u5E63", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u004E\u0054\u0024", "\u002D", "\u002B", "\u4E0D\u662F\u4E00\u500B\u6578\u5B57", "\u8CA0\u7121\u7AAE\u5927", "\u6B63\u7121\u7AAE\u5927", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2, 4 ], "\u897F\u66C6\u0020\u0028\u4E2D\u6587\u0029", 0, 0, "\u002F", "\u003A", "\u4E0A\u5348", "\u4E0B\u5348", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'", [ "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\u004D\'\u6708\'\u0064\u0064\'\u65E5\'" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ] }, -{ 0x0405, 0x0005, "cs-CZ", "cs", "ces", "cs-CZ", "\u0043\u007A\u0065\u0063\u0068\u0020\u0028\u0043\u007A\u0065\u0063\u0068\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0029", "\u010D\u0065\u0161\u0074\u0069\u006E\u0061\u0020\u0028\u010C\u0065\u0073\u006B\u00E1\u00A0\u0072\u0065\u0070\u0075\u0062\u006C\u0069\u006B\u0061\u0029", false, 0x004B, "CZ", "CZE", "\u0043\u007A\u0065\u0063\u0068\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063", "\u010C\u0065\u0073\u006B\u00E1\u00A0\u0072\u0065\u0070\u0075\u0062\u006C\u0069\u006B\u0061", "\u0043\u005A\u004B", "\u0043\u007A\u0065\u0063\u0068\u0020\u004B\u006F\u0072\u0075\u006E\u0061", "\u004B\u006F\u0072\u0075\u006E\u0061\u0020\u010C\u0065\u0073\u006B\u00E1", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u004B\u010D", "\u002D", "\u002B", "\u004E\u0065\u006E\u00ED\u0020\u010D\u00ED\u0073\u006C\u006F", "\u002D\u006E\u0065\u006B\u006F\u006E\u0065\u010D\u006E\u006F", "\u002B\u006E\u0065\u006B\u006F\u006E\u0065\u010D\u006E\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u00E1\u006E\u0073\u006B\u00FD\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u00E1\u0159", 1, 0, "\u002E", "\u003A", "\u0064\u006F\u0070\u002E", "\u006F\u0064\u0070\u002E", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u002E\u006D\u006D\u0020\u0074\u0074", "\u0048\u002E\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u002D\u0064", "\u0079\u0079\u002D\u004D\u002D\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u002E\u006D\u006D\u002E\u0073\u0073\u0020\u0074\u0074", "\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065", "\u0070\u006F", "\u00FA\u0074", "\u0073\u0074", "\u010D\u0074", "\u0070\u00E1", "\u0073\u006F" ], [ "\u006E\u0065\u0064\u011B\u006C\u0065", "\u0070\u006F\u006E\u0064\u011B\u006C\u00ED", "\u00FA\u0074\u0065\u0072\u00FD", "\u0073\u0074\u0159\u0065\u0064\u0061", "\u010D\u0074\u0076\u0072\u0074\u0065\u006B", "\u0070\u00E1\u0074\u0065\u006B", "\u0073\u006F\u0062\u006F\u0074\u0061" ], [ "\u0049", "\u0049\u0049", "\u0049\u0049\u0049", "\u0049\u0056", "\u0056", "\u0056\u0049", "\u0056\u0049\u0049", "\u0056\u0049\u0049\u0049", "\u0049\u0058", "\u0058", "\u0058\u0049", "\u0058\u0049\u0049", "" ], [ "\u006C\u0065\u0064\u0065\u006E", "\u00FA\u006E\u006F\u0072", "\u0062\u0159\u0065\u007A\u0065\u006E", "\u0064\u0075\u0062\u0065\u006E", "\u006B\u0076\u011B\u0074\u0065\u006E", "\u010D\u0065\u0072\u0076\u0065\u006E", "\u010D\u0065\u0072\u0076\u0065\u006E\u0065\u0063", "\u0073\u0072\u0070\u0065\u006E", "\u007A\u00E1\u0159\u00ED", "\u0159\u00ED\u006A\u0065\u006E", "\u006C\u0069\u0073\u0074\u006F\u0070\u0061\u0064", "\u0070\u0072\u006F\u0073\u0069\u006E\u0065\u0063", "" ] }, -{ 0x0406, 0x0006, "da-DK", "da", "dan", "da-DK", "\u0044\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0044\u0065\u006E\u006D\u0061\u0072\u006B\u0029", "\u0064\u0061\u006E\u0073\u006B\u0020\u0028\u0044\u0061\u006E\u006D\u0061\u0072\u006B\u0029", false, 0x003D, "DK", "DNK", "\u0044\u0065\u006E\u006D\u0061\u0072\u006B", "\u0044\u0061\u006E\u006D\u0061\u0072\u006B", "\u0044\u004B\u004B", "\u0044\u0061\u006E\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0065", "\u0044\u0061\u006E\u0073\u006B\u0020\u006B\u0072\u006F\u006E\u0065", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0044\u0065\u006E\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0065\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002D", "\u003A", "", "", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00F8", "\u006D\u0061", "\u0074\u0069", "\u006F\u006E", "\u0074\u006F", "\u0066\u0072", "\u006C\u00F8" ], [ "\u0073\u00F8\u006E\u0064\u0061\u0067", "\u006D\u0061\u006E\u0064\u0061\u0067", "\u0074\u0069\u0072\u0073\u0064\u0061\u0067", "\u006F\u006E\u0073\u0064\u0061\u0067", "\u0074\u006F\u0072\u0073\u0064\u0061\u0067", "\u0066\u0072\u0065\u0064\u0061\u0067", "\u006C\u00F8\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0074\u0073", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0407, 0x0007, "de-DE", "de", "deu", "de-DE", "\u0047\u0065\u0072\u006D\u0061\u006E\u0020\u0028\u0047\u0065\u0072\u006D\u0061\u006E\u0079\u0029", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u0020\u0028\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u006C\u0061\u006E\u0064\u0029", false, 0x005E, "DE", "DEU", "\u0047\u0065\u0072\u006D\u0061\u006E\u0079", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u006C\u0061\u006E\u0064", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0045\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u006E\u002E\u0020\u0064\u0065\u0066\u002E", "\u002D\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", "\u002B\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0069\u0073\u0063\u0068\u0065\u0072\u0020\u004B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\u0020\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\u0020\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F", "\u004D\u006F", "\u0044\u0069", "\u004D\u0069", "\u0044\u006F", "\u0046\u0072", "\u0053\u0061" ], [ "\u0053\u006F\u006E\u006E\u0074\u0061\u0067", "\u004D\u006F\u006E\u0074\u0061\u0067", "\u0044\u0069\u0065\u006E\u0073\u0074\u0061\u0067", "\u004D\u0069\u0074\u0074\u0077\u006F\u0063\u0068", "\u0044\u006F\u006E\u006E\u0065\u0072\u0073\u0074\u0061\u0067", "\u0046\u0072\u0065\u0069\u0074\u0061\u0067", "\u0053\u0061\u006D\u0073\u0074\u0061\u0067" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0072\u007A", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072", "\u004D\u00E4\u0072\u007A", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u007A\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0408, 0x0008, "el-GR", "el", "ell", "el-GR", "\u0047\u0072\u0065\u0065\u006B\u0020\u0028\u0047\u0072\u0065\u0065\u0063\u0065\u0029", "\u03B5\u03BB\u03BB\u03B7\u03BD\u03B9\u03BA\u03AC\u0020\u0028\u0395\u03BB\u03BB\u03AC\u03B4\u03B1\u0029", false, 0x0062, "GR", "GRC", "\u0047\u0072\u0065\u0065\u0063\u0065", "\u0395\u03BB\u03BB\u03AC\u03B4\u03B1", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u03B5\u03C5\u03C1\u03CE", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u03BC\u03B7\u00A0\u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2", "\u002D\u0386\u03C0\u03B5\u03B9\u03C1\u03BF", "\u0386\u03C0\u03B5\u03B9\u03C1\u03BF", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0393\u03C1\u03B7\u03B3\u03BF\u03C1\u03B9\u03B1\u03BD\u03CC\u0020\u0397\u03BC\u03B5\u03C1\u03BF\u03BB\u03CC\u03B3\u03B9\u03BF", 1, 0, "\u002F", "\u003A", "\u03C0\u03BC", "\u03BC\u03BC", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u039A\u03C5\u03C1", "\u0394\u03B5\u03C5", "\u03A4\u03C1\u03B9", "\u03A4\u03B5\u03C4", "\u03A0\u03B5\u03BC", "\u03A0\u03B1\u03C1", "\u03A3\u03B1\u03B2" ], [ "\u039A\u03C5\u03C1\u03B9\u03B1\u03BA\u03AE", "\u0394\u03B5\u03C5\u03C4\u03AD\u03C1\u03B1", "\u03A4\u03C1\u03AF\u03C4\u03B7", "\u03A4\u03B5\u03C4\u03AC\u03C1\u03C4\u03B7", "\u03A0\u03AD\u03BC\u03C0\u03C4\u03B7", "\u03A0\u03B1\u03C1\u03B1\u03C3\u03BA\u03B5\u03C5\u03AE", "\u03A3\u03AC\u03B2\u03B2\u03B1\u03C4\u03BF" ], [ "\u0399\u03B1\u03BD", "\u03A6\u03B5\u03B2", "\u039C\u03B1\u03C1", "\u0391\u03C0\u03C1", "\u039C\u03B1\u03CA", "\u0399\u03BF\u03C5\u03BD", "\u0399\u03BF\u03C5\u03BB", "\u0391\u03C5\u03B3", "\u03A3\u03B5\u03C0", "\u039F\u03BA\u03C4", "\u039D\u03BF\u03B5", "\u0394\u03B5\u03BA", "" ], [ "\u0399\u03B1\u03BD\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2", "\u03A6\u03B5\u03B2\u03C1\u03BF\u03C5\u03AC\u03C1\u03B9\u03BF\u03C2", "\u039C\u03AC\u03C1\u03C4\u03B9\u03BF\u03C2", "\u0391\u03C0\u03C1\u03AF\u03BB\u03B9\u03BF\u03C2", "\u039C\u03AC\u03B9\u03BF\u03C2", "\u0399\u03BF\u03CD\u03BD\u03B9\u03BF\u03C2", "\u0399\u03BF\u03CD\u03BB\u03B9\u03BF\u03C2", "\u0391\u03CD\u03B3\u03BF\u03C5\u03C3\u03C4\u03BF\u03C2", "\u03A3\u03B5\u03C0\u03C4\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2", "\u039F\u03BA\u03C4\u03CE\u03B2\u03C1\u03B9\u03BF\u03C2", "\u039D\u03BF\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2", "\u0394\u03B5\u03BA\u03AD\u03BC\u03B2\u03C1\u03B9\u03BF\u03C2", "" ] }, -{ 0x0409, 0x0009, "en-US", "en", "eng", "en-US", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u0053\u0074\u0061\u0074\u0065\u0073\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u0053\u0074\u0061\u0074\u0065\u0073\u0029", false, 0x00F4, "US", "USA", "\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u0053\u0074\u0061\u0074\u0065\u0073", "\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u0053\u0074\u0061\u0074\u0065\u0073", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", false, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u002F\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x040B, 0x000B, "fi-FI", "fi", "fin", "fi-FI", "\u0046\u0069\u006E\u006E\u0069\u0073\u0068\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", "\u0073\u0075\u006F\u006D\u0069\u0020\u0028\u0053\u0075\u006F\u006D\u0069\u0029", false, 0x004D, "FI", "FIN", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u0053\u0075\u006F\u006D\u0069", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0069\u006E\u0065\u006E\u0020\u006B\u0061\u006C\u0065\u006E\u0074\u0065\u0072\u0069", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\'\u0074\u0061\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\'\u0074\u0061\'", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\'\u0074\u0061\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\'\u0074\u0061\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u0075", "\u006D\u0061", "\u0074\u0069", "\u006B\u0065", "\u0074\u006F", "\u0070\u0065", "\u006C\u0061" ], [ "\u0073\u0075\u006E\u006E\u0075\u006E\u0074\u0061\u0069", "\u006D\u0061\u0061\u006E\u0061\u006E\u0074\u0061\u0069", "\u0074\u0069\u0069\u0073\u0074\u0061\u0069", "\u006B\u0065\u0073\u006B\u0069\u0076\u0069\u0069\u006B\u006B\u006F", "\u0074\u006F\u0072\u0073\u0074\u0061\u0069", "\u0070\u0065\u0072\u006A\u0061\u006E\u0074\u0061\u0069", "\u006C\u0061\u0075\u0061\u006E\u0074\u0061\u0069" ], [ "\u0074\u0061\u006D\u006D\u0069", "\u0068\u0065\u006C\u006D\u0069", "\u006D\u0061\u0061\u006C\u0069\u0073", "\u0068\u0075\u0068\u0074\u0069", "\u0074\u006F\u0075\u006B\u006F", "\u006B\u0065\u0073\u00E4", "\u0068\u0065\u0069\u006E\u00E4", "\u0065\u006C\u006F", "\u0073\u0079\u0079\u0073", "\u006C\u006F\u006B\u0061", "\u006D\u0061\u0072\u0072\u0061\u0073", "\u006A\u006F\u0075\u006C\u0075", "" ], [ "\u0074\u0061\u006D\u006D\u0069\u006B\u0075\u0075", "\u0068\u0065\u006C\u006D\u0069\u006B\u0075\u0075", "\u006D\u0061\u0061\u006C\u0069\u0073\u006B\u0075\u0075", "\u0068\u0075\u0068\u0074\u0069\u006B\u0075\u0075", "\u0074\u006F\u0075\u006B\u006F\u006B\u0075\u0075", "\u006B\u0065\u0073\u00E4\u006B\u0075\u0075", "\u0068\u0065\u0069\u006E\u00E4\u006B\u0075\u0075", "\u0065\u006C\u006F\u006B\u0075\u0075", "\u0073\u0079\u0079\u0073\u006B\u0075\u0075", "\u006C\u006F\u006B\u0061\u006B\u0075\u0075", "\u006D\u0061\u0072\u0072\u0061\u0073\u006B\u0075\u0075", "\u006A\u006F\u0075\u006C\u0075\u006B\u0075\u0075", "" ] }, -{ 0x040C, 0x000C, "fr-FR", "fr", "fra", "fr-FR", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u0046\u0072\u0061\u006E\u0063\u0065\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u0046\u0072\u0061\u006E\u0063\u0065\u0029", false, 0x0054, "FR", "FRA", "\u0046\u0072\u0061\u006E\u0063\u0065", "\u0046\u0072\u0061\u006E\u0063\u0065", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x040D, 0x000D, "he-IL", "he", "heb", "he-IL", "\u0048\u0065\u0062\u0072\u0065\u0077\u0020\u0028\u0049\u0073\u0072\u0061\u0065\u006C\u0029", "\u05E2\u05D1\u05E8\u05D9\u05EA\u0020\u0028\u05D9\u05E9\u05E8\u05D0\u05DC\u0029", false, 0x0075, "IL", "ISR", "\u0049\u0073\u0072\u0061\u0065\u006C", "\u05D9\u05E9\u05E8\u05D0\u05DC", "\u0049\u004C\u0053", "\u0049\u0073\u0072\u0061\u0065\u006C\u0069\u0020\u004E\u0065\u0077\u0020\u0053\u0068\u0065\u006B\u0065\u006C", "\u05E9\u05E7\u05DC\u0020\u05D7\u05D3\u05E9", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u20AA", "\u002D", "\u002B", "\u05DC\u05D0\u0020\u05DE\u05E1\u05E4\u05E8", "\u05D0\u05D9\u05E0\u05E1\u05D5\u05E3\u00A0\u05E9\u05DC\u05D9\u05DC\u05D9", "\u05D0\u05D9\u05E0\u05E1\u05D5\u05E3\u00A0\u05D7\u05D9\u05D5\u05D1\u05D9", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 8 ], "\u05DC\u05D5\u05D7\u00A0\u05E9\u05E0\u05D4\u00A0\u05D2\u05E8\u05D2\u05D5\u05E8\u05D9\u05D0\u05E0\u05D9", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u0020\u05D1\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\u0064\u0020\u05D1\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0020\u0064\u0064\u0020\u05D1\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u05D1\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u05D9\u05D5\u05DD\u00A0\u05D0", "\u05D9\u05D5\u05DD\u00A0\u05D1", "\u05D9\u05D5\u05DD\u00A0\u05D2", "\u05D9\u05D5\u05DD\u00A0\u05D3", "\u05D9\u05D5\u05DD\u00A0\u05D4", "\u05D9\u05D5\u05DD\u00A0\u05D5", "\u05E9\u05D1\u05EA" ], [ "\u05D9\u05D5\u05DD\u00A0\u05E8\u05D0\u05E9\u05D5\u05DF", "\u05D9\u05D5\u05DD\u00A0\u05E9\u05E0\u05D9", "\u05D9\u05D5\u05DD\u00A0\u05E9\u05DC\u05D9\u05E9\u05D9", "\u05D9\u05D5\u05DD\u00A0\u05E8\u05D1\u05D9\u05E2\u05D9", "\u05D9\u05D5\u05DD\u00A0\u05D7\u05DE\u05D9\u05E9\u05D9", "\u05D9\u05D5\u05DD\u00A0\u05E9\u05D9\u05E9\u05D9", "\u05E9\u05D1\u05EA" ], [ "\u05D9\u05E0\u05D5", "\u05E4\u05D1\u05E8", "\u05DE\u05E8\u05E5", "\u05D0\u05E4\u05E8", "\u05DE\u05D0\u05D9", "\u05D9\u05D5\u05E0", "\u05D9\u05D5\u05DC", "\u05D0\u05D5\u05D2", "\u05E1\u05E4\u05D8", "\u05D0\u05D5\u05E7", "\u05E0\u05D5\u05D1", "\u05D3\u05E6\u05DE", "" ], [ "\u05D9\u05E0\u05D5\u05D0\u05E8", "\u05E4\u05D1\u05E8\u05D5\u05D0\u05E8", "\u05DE\u05E8\u05E5", "\u05D0\u05E4\u05E8\u05D9\u05DC", "\u05DE\u05D0\u05D9", "\u05D9\u05D5\u05E0\u05D9", "\u05D9\u05D5\u05DC\u05D9", "\u05D0\u05D5\u05D2\u05D5\u05E1\u05D8", "\u05E1\u05E4\u05D8\u05DE\u05D1\u05E8", "\u05D0\u05D5\u05E7\u05D8\u05D5\u05D1\u05E8", "\u05E0\u05D5\u05D1\u05DE\u05D1\u05E8", "\u05D3\u05E6\u05DE\u05D1\u05E8", "" ] }, -{ 0x040E, 0x000E, "hu-HU", "hu", "hun", "hu-HU", "\u0048\u0075\u006E\u0067\u0061\u0072\u0069\u0061\u006E\u0020\u0028\u0048\u0075\u006E\u0067\u0061\u0072\u0079\u0029", "\u006D\u0061\u0067\u0079\u0061\u0072\u0020\u0028\u004D\u0061\u0067\u0079\u0061\u0072\u006F\u0072\u0073\u007A\u00E1\u0067\u0029", false, 0x006D, "HU", "HUN", "\u0048\u0075\u006E\u0067\u0061\u0072\u0079", "\u004D\u0061\u0067\u0079\u0061\u0072\u006F\u0072\u0073\u007A\u00E1\u0067", "\u0048\u0055\u0046", "\u0048\u0075\u006E\u0067\u0061\u0072\u0069\u0061\u006E\u0020\u0046\u006F\u0072\u0069\u006E\u0074", "\u0066\u006F\u0072\u0069\u006E\u0074", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0046\u0074", "\u002D", "\u002B", "\u006E\u0065\u006D\u0020\u0073\u007A\u00E1\u006D", "\u006E\u0065\u0067\u0061\u0074\u00ED\u0076\u0020\u0076\u00E9\u0067\u0074\u0065\u006C\u0065\u006E", "\u0076\u00E9\u0067\u0074\u0065\u006C\u0065\u006E", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0065\u0072\u0067\u0065\u006C\u0079\u002D\u006E\u0061\u0070\u0074\u00E1\u0072", 1, 0, "\u002E\u0020", "\u003A", "\u0064\u0065\u002E", "\u0064\u0075\u002E", "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u002E\u0020\u0064\u0064\u002E", "\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u002E", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u002E", "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u002E\u0020\u0064\u0064\u002E", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u002E" ], [ "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D" ], [ "\u0056", "\u0048", "\u004B", "\u0053\u007A\u0065", "\u0043\u0073", "\u0050", "\u0053\u007A\u006F" ], [ "\u0076\u0061\u0073\u00E1\u0072\u006E\u0061\u0070", "\u0068\u00E9\u0074\u0066\u0151", "\u006B\u0065\u0064\u0064", "\u0073\u007A\u0065\u0072\u0064\u0061", "\u0063\u0073\u00FC\u0074\u00F6\u0072\u0074\u00F6\u006B", "\u0070\u00E9\u006E\u0074\u0065\u006B", "\u0073\u007A\u006F\u006D\u0062\u0061\u0074" ], [ "\u006A\u0061\u006E\u002E", "\u0066\u0065\u0062\u0072\u002E", "\u006D\u00E1\u0072\u0063\u002E", "\u00E1\u0070\u0072\u002E", "\u006D\u00E1\u006A\u002E", "\u006A\u00FA\u006E\u002E", "\u006A\u00FA\u006C\u002E", "\u0061\u0075\u0067\u002E", "\u0073\u007A\u0065\u0070\u0074\u002E", "\u006F\u006B\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u0065\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0075\u00E1\u0072", "\u0066\u0065\u0062\u0072\u0075\u00E1\u0072", "\u006D\u00E1\u0072\u0063\u0069\u0075\u0073", "\u00E1\u0070\u0072\u0069\u006C\u0069\u0073", "\u006D\u00E1\u006A\u0075\u0073", "\u006A\u00FA\u006E\u0069\u0075\u0073", "\u006A\u00FA\u006C\u0069\u0075\u0073", "\u0061\u0075\u0067\u0075\u0073\u007A\u0074\u0075\u0073", "\u0073\u007A\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u00F3\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x040F, 0x000F, "is-IS", "is", "isl", "is-IS", "\u0049\u0063\u0065\u006C\u0061\u006E\u0064\u0069\u0063\u0020\u0028\u0049\u0063\u0065\u006C\u0061\u006E\u0064\u0029", "\u00ED\u0073\u006C\u0065\u006E\u0073\u006B\u0061\u0020\u0028\u00CD\u0073\u006C\u0061\u006E\u0064\u0029", false, 0x006E, "IS", "ISL", "\u0049\u0063\u0065\u006C\u0061\u006E\u0064", "\u00CD\u0073\u006C\u0061\u006E\u0064", "\u0049\u0053\u004B", "\u0049\u0063\u0065\u006C\u0061\u006E\u0064\u0069\u0063\u0020\u004B\u0072\u006F\u006E\u0061", "\u004B\u0072\u00F3\u006E\u0061", true, 2, 1, 0, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u006B\u0072\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u00ED\u0073\u006B\u0074\u0020\u0074\u00ED\u006D\u0061\u0074\u0061\u006C", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079\u002E", "\u0064\u002E\u0020\u004D\u002E\u0020\'\u005C\'\'\u0079\u0079\u002E", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u0075\u006E\u002E", "\u006D\u00E1\u006E\u002E", "\u00FE\u0072\u0069\u002E", "\u006D\u0069\u00F0\u002E", "\u0066\u0069\u006D\u002E", "\u0066\u00F6\u0073\u002E", "\u006C\u0061\u0075\u002E" ], [ "\u0073\u0075\u006E\u006E\u0075\u0064\u0061\u0067\u0075\u0072", "\u006D\u00E1\u006E\u0075\u0064\u0061\u0067\u0075\u0072", "\u00FE\u0072\u0069\u00F0\u006A\u0075\u0064\u0061\u0067\u0075\u0072", "\u006D\u0069\u00F0\u0076\u0069\u006B\u0075\u0064\u0061\u0067\u0075\u0072", "\u0066\u0069\u006D\u006D\u0074\u0075\u0064\u0061\u0067\u0075\u0072", "\u0066\u00F6\u0073\u0074\u0075\u0064\u0061\u0067\u0075\u0072", "\u006C\u0061\u0075\u0067\u0061\u0072\u0064\u0061\u0067\u0075\u0072" ], [ "\u006A\u0061\u006E\u002E", "\u0066\u0065\u0062\u002E", "\u006D\u0061\u0072\u002E", "\u0061\u0070\u0072\u002E", "\u006D\u0061\u00ED", "\u006A\u00FA\u006E\u002E", "\u006A\u00FA\u006C\u002E", "\u00E1\u0067\u00FA\u002E", "\u0073\u0065\u0070\u002E", "\u006F\u006B\u0074\u002E", "\u006E\u00F3\u0076\u002E", "\u0064\u0065\u0073\u002E", "" ], [ "\u006A\u0061\u006E\u00FA\u0061\u0072", "\u0066\u0065\u0062\u0072\u00FA\u0061\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u00ED\u006C", "\u006D\u0061\u00ED", "\u006A\u00FA\u006E\u00ED", "\u006A\u00FA\u006C\u00ED", "\u00E1\u0067\u00FA\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u00F3\u0062\u0065\u0072", "\u006E\u00F3\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0410, 0x0010, "it-IT", "it", "ita", "it-IT", "\u0049\u0074\u0061\u006C\u0069\u0061\u006E\u0020\u0028\u0049\u0074\u0061\u006C\u0079\u0029", "\u0069\u0074\u0061\u006C\u0069\u0061\u006E\u006F\u0020\u0028\u0049\u0074\u0061\u006C\u0069\u0061\u0029", false, 0x0076, "IT", "ITA", "\u0049\u0074\u0061\u006C\u0079", "\u0049\u0074\u0061\u006C\u0069\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 9, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u0075\u006E\u0020\u006E\u0075\u006D\u0065\u0072\u006F\u0020\u0072\u0065\u0061\u006C\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 2, "\u002F", "\u002E", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u002E\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u002E\u006D\u006D\u002E\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u002E\u006D\u006D\u002E\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073", "\u0048\u002E\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0065\u0072", "\u0067\u0069\u006F", "\u0076\u0065\u006E", "\u0073\u0061\u0062" ], [ "\u0064\u006F\u006D\u0065\u006E\u0069\u0063\u0061", "\u006C\u0075\u006E\u0065\u0064\u00EC", "\u006D\u0061\u0072\u0074\u0065\u0064\u00EC", "\u006D\u0065\u0072\u0063\u006F\u006C\u0065\u0064\u00EC", "\u0067\u0069\u006F\u0076\u0065\u0064\u00EC", "\u0076\u0065\u006E\u0065\u0072\u0064\u00EC", "\u0073\u0061\u0062\u0061\u0074\u006F" ], [ "\u0067\u0065\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u0067", "\u0067\u0069\u0075", "\u006C\u0075\u0067", "\u0061\u0067\u006F", "\u0073\u0065\u0074", "\u006F\u0074\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0067\u0065\u006E\u006E\u0061\u0069\u006F", "\u0066\u0065\u0062\u0062\u0072\u0061\u0069\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0070\u0072\u0069\u006C\u0065", "\u006D\u0061\u0067\u0067\u0069\u006F", "\u0067\u0069\u0075\u0067\u006E\u006F", "\u006C\u0075\u0067\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0074\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0074\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0411, 0x0011, "ja-JP", "ja", "jpn", "ja-JP", "\u004A\u0061\u0070\u0061\u006E\u0065\u0073\u0065\u0020\u0028\u004A\u0061\u0070\u0061\u006E\u0029", "\u65E5\u672C\u8A9E\u0020\u0028\u65E5\u672C\u0029", false, 0x007A, "JP", "JPN", "\u004A\u0061\u0070\u0061\u006E", "\u65E5\u672C", "\u004A\u0050\u0059", "\u004A\u0061\u0070\u0061\u006E\u0065\u0073\u0065\u0020\u0059\u0065\u006E", "\u5186", true, 2, 1, 0, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u00A5", "\u002D", "\u002B", "\u004E\u0061\u004E\u0020\u0028\u975E\u6570\u5024\u0029", "\u002D\u221E", "\u002B\u221E", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 3, 2 ], "\u897F\u66A6\u0020\u0028\u65E5\u672C\u8A9E\u0029", 0, 0, "\u002F", "\u003A", "\u5348\u524D", "\u5348\u5F8C", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064\'\u0020\u0028\'\u0064\u0064\u0064\'\u0029\'", "\u0079\u0079\u002F\u004D\u002F\u0064\'\u0020\u0028\'\u0064\u0064\u0064\'\u0029\'", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064\'\u0020\u0028\'\u0064\u0064\u0064\'\u0029\'", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\u004D\'\u6708\'\u0064\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'\u0020\u0064\u0064\u0064\u0064", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\u004D\'\u6708\'\u0064\u0064\'\u65E5\'\u0020\u0064\u0064\u0064\u0064" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'" ], [ "\u65E5", "\u6708", "\u706B", "\u6C34", "\u6728", "\u91D1", "\u571F" ], [ "\u65E5\u66DC\u65E5", "\u6708\u66DC\u65E5", "\u706B\u66DC\u65E5", "\u6C34\u66DC\u65E5", "\u6728\u66DC\u65E5", "\u91D1\u66DC\u65E5", "\u571F\u66DC\u65E5" ], [ "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039", "\u0031\u0030", "\u0031\u0031", "\u0031\u0032", "" ], [ "\u0031\u6708", "\u0032\u6708", "\u0033\u6708", "\u0034\u6708", "\u0035\u6708", "\u0036\u6708", "\u0037\u6708", "\u0038\u6708", "\u0039\u6708", "\u0031\u0030\u6708", "\u0031\u0031\u6708", "\u0031\u0032\u6708", "" ] }, -{ 0x0412, 0x0012, "ko-KR", "ko", "kor", "ko-KR", "\u004B\u006F\u0072\u0065\u0061\u006E\u0020\u0028\u004B\u006F\u0072\u0065\u0061\u0029", "\uD55C\uAD6D\uC5B4\u0020\u0028\uB300\uD55C\uBBFC\uAD6D\u0029", false, 0x0086, "KR", "KOR", "\u004B\u006F\u0072\u0065\u0061", "\uB300\uD55C\uBBFC\uAD6D", "\u004B\u0052\u0057", "\u004B\u006F\u0072\u0065\u0061\u006E\u0020\u0057\u006F\u006E", "\uC6D0", true, 2, 1, 0, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u20A9", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 5, 2 ], "\uC11C\uAE30\u0020\u0028\uD55C\uAE00\u0029", 0, 0, "\u002D", "\u003A", "\uC624\uC804", "\uC624\uD6C4", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'\u0020\u0064\u0064\u0064\u0064", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'", "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'", [ "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u002D\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u002D\u0064" ], [ "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'\u0020\u0064\u0064\u0064\u0064", "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'", "\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'\u0020\u0064\u0064\u0064\u0064", "\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'\u0020\u0064\'\uC77C\'", "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\u004D\'\uC6D4\'\u0020\u0064\u0064\'\uC77C\'\u0020\u0064\u0064\u0064\u0064", "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\u004D\'\uC6D4\'\u0020\u0064\u0064\'\uC77C\'" ], [ "\u0079\u0079\u0079\u0079\'\uB144\'\u0020\u004D\'\uC6D4\'" ], [ "\uC77C", "\uC6D4", "\uD654", "\uC218", "\uBAA9", "\uAE08", "\uD1A0" ], [ "\uC77C\uC694\uC77C", "\uC6D4\uC694\uC77C", "\uD654\uC694\uC77C", "\uC218\uC694\uC77C", "\uBAA9\uC694\uC77C", "\uAE08\uC694\uC77C", "\uD1A0\uC694\uC77C" ], [ "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039", "\u0031\u0030", "\u0031\u0031", "\u0031\u0032", "" ], [ "\u0031\uC6D4", "\u0032\uC6D4", "\u0033\uC6D4", "\u0034\uC6D4", "\u0035\uC6D4", "\u0036\uC6D4", "\u0037\uC6D4", "\u0038\uC6D4", "\u0039\uC6D4", "\u0031\u0030\uC6D4", "\u0031\u0031\uC6D4", "\u0031\u0032\uC6D4", "" ] }, -{ 0x0413, 0x0013, "nl-NL", "nl", "nld", "nl-NL", "\u0044\u0075\u0074\u0063\u0068\u0020\u0028\u004E\u0065\u0074\u0068\u0065\u0072\u006C\u0061\u006E\u0064\u0073\u0029", "\u004E\u0065\u0064\u0065\u0072\u006C\u0061\u006E\u0064\u0073\u0020\u0028\u004E\u0065\u0064\u0065\u0072\u006C\u0061\u006E\u0064\u0029", false, 0x00B0, "NL", "NLD", "\u004E\u0065\u0074\u0068\u0065\u0072\u006C\u0061\u006E\u0064\u0073", "\u004E\u0065\u0064\u0065\u0072\u006C\u0061\u006E\u0064", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0073\u0065\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002D", "\u003A", "", "", "\u0064\u002D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0075\u0075\u0072\'", "\u0048\u0048\u003A\u006D\u006D\'\u0020\u0075\u0075\u0072\'" ], [ "\u0064\u002D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073\'\u0020\u0075\u0075\u0072\'", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073\'\u0020\u0075\u0075\u0072\'" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u007A\u006F", "\u006D\u0061", "\u0064\u0069", "\u0077\u006F", "\u0064\u006F", "\u0076\u0072", "\u007A\u0061" ], [ "\u007A\u006F\u006E\u0064\u0061\u0067", "\u006D\u0061\u0061\u006E\u0064\u0061\u0067", "\u0064\u0069\u006E\u0073\u0064\u0061\u0067", "\u0077\u006F\u0065\u006E\u0073\u0064\u0061\u0067", "\u0064\u006F\u006E\u0064\u0065\u0072\u0064\u0061\u0067", "\u0076\u0072\u0069\u006A\u0064\u0061\u0067", "\u007A\u0061\u0074\u0065\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0072\u0074", "\u0061\u0070\u0072", "\u006D\u0065\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u006D\u0061\u0061\u0072\u0074", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0065\u0069", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074\u0075\u0073", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0414, 0x0014, "nb-NO", "nb", "nob", "nb-NO", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u002C\u0020\u0042\u006F\u006B\u006D\u00E5\u006C\u0020\u0028\u004E\u006F\u0072\u0077\u0061\u0079\u0029", "\u006E\u006F\u0072\u0073\u006B\u002C\u0020\u0062\u006F\u006B\u006D\u00E5\u006C\u0020\u0028\u004E\u006F\u0072\u0067\u0065\u0029", false, 0x00B1, "NO", "NOR", "\u004E\u006F\u0072\u0077\u0061\u0079", "\u004E\u006F\u0072\u0067\u0065", "\u004E\u004F\u004B", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006E\u0065", "\u004E\u006F\u0072\u0073\u006B\u0020\u006B\u0072\u006F\u006E\u0065", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\'\u006B\u006C\u0020\'\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u006B\u006C\u0020\'\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00F8", "\u006D\u0061", "\u0074\u0069", "\u006F\u006E", "\u0074\u006F", "\u0066\u0072", "\u006C\u00F8" ], [ "\u0073\u00F8\u006E\u0064\u0061\u0067", "\u006D\u0061\u006E\u0064\u0061\u0067", "\u0074\u0069\u0072\u0073\u0064\u0061\u0067", "\u006F\u006E\u0073\u0064\u0061\u0067", "\u0074\u006F\u0072\u0073\u0064\u0061\u0067", "\u0066\u0072\u0065\u0064\u0061\u0067", "\u006C\u00F8\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0073", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0415, 0x0015, "pl-PL", "pl", "pol", "pl-PL", "\u0050\u006F\u006C\u0069\u0073\u0068\u0020\u0028\u0050\u006F\u006C\u0061\u006E\u0064\u0029", "\u0070\u006F\u006C\u0073\u006B\u0069\u0020\u0028\u0050\u006F\u006C\u0073\u006B\u0061\u0029", false, 0x00BF, "PL", "POL", "\u0050\u006F\u006C\u0061\u006E\u0064", "\u0050\u006F\u006C\u0073\u006B\u0061", "\u0050\u004C\u004E", "\u0050\u006F\u006C\u0069\u0073\u0068\u0020\u005A\u006C\u006F\u0074\u0079", "\u005A\u0142\u006F\u0074\u0079", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u007A\u0142", "\u002D", "\u002B", "\u006E\u0069\u0065\u0020\u006A\u0065\u0073\u0074\u0020\u006C\u0069\u0063\u007A\u0062\u0105", "\u002D\u006E\u0069\u0065\u0073\u006B\u006F\u0144\u0063\u007A\u006F\u006E\u006F\u015B\u0107", "\u002B\u006E\u0069\u0065\u0073\u006B\u006F\u0144\u0063\u007A\u006F\u006E\u006F\u015B\u0107", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u004B\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u007A\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0144\u0073\u006B\u0069", 1, 2, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004E", "\u0050\u006E", "\u0057\u0074", "\u015A\u0072", "\u0043\u007A", "\u0050\u0074", "\u0053\u006F" ], [ "\u006E\u0069\u0065\u0064\u007A\u0069\u0065\u006C\u0061", "\u0070\u006F\u006E\u0069\u0065\u0064\u007A\u0069\u0061\u0142\u0065\u006B", "\u0077\u0074\u006F\u0072\u0065\u006B", "\u015B\u0072\u006F\u0064\u0061", "\u0063\u007A\u0077\u0061\u0072\u0074\u0065\u006B", "\u0070\u0069\u0105\u0074\u0065\u006B", "\u0073\u006F\u0062\u006F\u0074\u0061" ], [ "\u0073\u0074\u0079", "\u006C\u0075\u0074", "\u006D\u0061\u0072", "\u006B\u0077\u0069", "\u006D\u0061\u006A", "\u0063\u007A\u0065", "\u006C\u0069\u0070", "\u0073\u0069\u0065", "\u0077\u0072\u007A", "\u0070\u0061\u017A", "\u006C\u0069\u0073", "\u0067\u0072\u0075", "" ], [ "\u0073\u0074\u0079\u0063\u007A\u0065\u0144", "\u006C\u0075\u0074\u0079", "\u006D\u0061\u0072\u007A\u0065\u0063", "\u006B\u0077\u0069\u0065\u0063\u0069\u0065\u0144", "\u006D\u0061\u006A", "\u0063\u007A\u0065\u0072\u0077\u0069\u0065\u0063", "\u006C\u0069\u0070\u0069\u0065\u0063", "\u0073\u0069\u0065\u0072\u0070\u0069\u0065\u0144", "\u0077\u0072\u007A\u0065\u0073\u0069\u0065\u0144", "\u0070\u0061\u017A\u0064\u007A\u0069\u0065\u0072\u006E\u0069\u006B", "\u006C\u0069\u0073\u0074\u006F\u0070\u0061\u0064", "\u0067\u0072\u0075\u0064\u007A\u0069\u0065\u0144", "" ] }, -{ 0x0416, 0x0016, "pt-BR", "pt", "por", "pt-BR", "\u0050\u006F\u0072\u0074\u0075\u0067\u0075\u0065\u0073\u0065\u0020\u0028\u0042\u0072\u0061\u007A\u0069\u006C\u0029", "\u0050\u006F\u0072\u0074\u0075\u0067\u0075\u00EA\u0073\u0020\u0028\u0042\u0072\u0061\u0073\u0069\u006C\u0029", false, 0x0020, "BR", "BRA", "\u0042\u0072\u0061\u007A\u0069\u006C", "\u0042\u0072\u0061\u0073\u0069\u006C", "\u0042\u0052\u004C", "\u0052\u0065\u0061\u006C", "\u0052\u0065\u0061\u006C", true, 2, 1, 2, 9, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0052\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E\u0020\u0028\u004E\u00E3\u006F\u0020\u00E9\u0020\u0075\u006D\u0020\u006E\u00FA\u006D\u0065\u0072\u006F\u0029", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0043\u0061\u006C\u0065\u006E\u0064\u00E1\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "", "", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u0073\u0065\u0067", "\u0074\u0065\u0072", "\u0071\u0075\u0061", "\u0071\u0075\u0069", "\u0073\u0065\u0078", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u0073\u0065\u0067\u0075\u006E\u0064\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0074\u0065\u0072\u00E7\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0071\u0075\u0061\u0072\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0071\u0075\u0069\u006E\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0073\u0065\u0078\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0076", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0074", "\u006F\u0075\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u007A", "" ], [ "\u006A\u0061\u006E\u0065\u0069\u0072\u006F", "\u0066\u0065\u0076\u0065\u0072\u0065\u0069\u0072\u006F", "\u006D\u0061\u0072\u00E7\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0069\u006F", "\u006A\u0075\u006E\u0068\u006F", "\u006A\u0075\u006C\u0068\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0074\u0065\u006D\u0062\u0072\u006F", "\u006F\u0075\u0074\u0075\u0062\u0072\u006F", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u006F", "\u0064\u0065\u007A\u0065\u006D\u0062\u0072\u006F", "" ] }, -{ 0x0418, 0x0018, "ro-RO", "ro", "ron", "ro-RO", "\u0052\u006F\u006D\u0061\u006E\u0069\u0061\u006E\u0020\u0028\u0052\u006F\u006D\u0061\u006E\u0069\u0061\u0029", "\u0072\u006F\u006D\u00E2\u006E\u0103\u0020\u0028\u0052\u006F\u006D\u00E2\u006E\u0069\u0061\u0029", false, 0x00C8, "RO", "ROU", "\u0052\u006F\u006D\u0061\u006E\u0069\u0061", "\u0052\u006F\u006D\u00E2\u006E\u0069\u0061", "\u0052\u004F\u004C", "\u0052\u006F\u006D\u0061\u006E\u0069\u0061\u006E\u0020\u004C\u0065\u0075", "\u004C\u0065\u0075", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u006C\u0065\u0069", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0020\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0044", "\u004C", "\u004D\u0061", "\u004D\u0069", "\u004A", "\u0056", "\u0053" ], [ "\u0064\u0075\u006D\u0069\u006E\u0069\u0063\u0103", "\u006C\u0075\u006E\u0069", "\u006D\u0061\u0072\u0163\u0069", "\u006D\u0069\u0065\u0072\u0063\u0075\u0072\u0069", "\u006A\u006F\u0069", "\u0076\u0069\u006E\u0065\u0072\u0069", "\u0073\u00E2\u006D\u0062\u0103\u0074\u0103" ], [ "\u0069\u0061\u006E\u002E", "\u0066\u0065\u0062\u002E", "\u006D\u0061\u0072\u002E", "\u0061\u0070\u0072\u002E", "\u006D\u0061\u0069\u002E", "\u0069\u0075\u006E\u002E", "\u0069\u0075\u006C\u002E", "\u0061\u0075\u0067\u002E", "\u0073\u0065\u0070\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u0065\u0063\u002E", "" ], [ "\u0069\u0061\u006E\u0075\u0061\u0072\u0069\u0065", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072\u0069\u0065", "\u006D\u0061\u0072\u0074\u0069\u0065", "\u0061\u0070\u0072\u0069\u006C\u0069\u0065", "\u006D\u0061\u0069", "\u0069\u0075\u006E\u0069\u0065", "\u0069\u0075\u006C\u0069\u0065", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0069\u0065", "\u006F\u0063\u0074\u006F\u006D\u0062\u0072\u0069\u0065", "\u006E\u006F\u0069\u0065\u006D\u0062\u0072\u0069\u0065", "\u0064\u0065\u0063\u0065\u006D\u0062\u0072\u0069\u0065", "" ] }, -{ 0x0419, 0x0019, "ru-RU", "ru", "rus", "ru-RU", "\u0052\u0075\u0073\u0073\u0069\u0061\u006E\u0020\u0028\u0052\u0075\u0073\u0073\u0069\u0061\u0029", "\u0440\u0443\u0441\u0441\u043A\u0438\u0439\u0020\u0028\u0420\u043E\u0441\u0441\u0438\u044F\u0029", false, 0x00CB, "RU", "RUS", "\u0052\u0075\u0073\u0073\u0069\u0061", "\u0420\u043E\u0441\u0441\u0438\u044F", "\u0052\u0055\u0052", "\u0052\u0075\u0073\u0073\u0069\u0061\u006E\u0020\u0052\u0075\u0062\u006C\u0065", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 2, 5, 1, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0440\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0431\u0435\u0441\u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0441\u0442\u044C", "\u0431\u0435\u0441\u043A\u043E\u043D\u0435\u0447\u043D\u043E\u0441\u0442\u044C", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u0441\u043A\u0438\u0439\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0433\u002E\'" ], [ "\u0412\u0441", "\u041F\u043D", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041F\u0442", "\u0421\u0431" ], [ "\u0432\u043E\u0441\u043A\u0440\u0435\u0441\u0435\u043D\u044C\u0435", "\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u044C\u043D\u0438\u043A", "\u0432\u0442\u043E\u0440\u043D\u0438\u043A", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0435\u0440\u0433", "\u043F\u044F\u0442\u043D\u0438\u0446\u0430", "\u0441\u0443\u0431\u0431\u043E\u0442\u0430" ], [ "\u044F\u043D\u0432", "\u0444\u0435\u0432", "\u043C\u0430\u0440", "\u0430\u043F\u0440", "\u043C\u0430\u0439", "\u0438\u044E\u043D", "\u0438\u044E\u043B", "\u0430\u0432\u0433", "\u0441\u0435\u043D", "\u043E\u043A\u0442", "\u043D\u043E\u044F", "\u0434\u0435\u043A", "" ], [ "\u042F\u043D\u0432\u0430\u0440\u044C", "\u0424\u0435\u0432\u0440\u0430\u043B\u044C", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B\u044C", "\u041C\u0430\u0439", "\u0418\u044E\u043D\u044C", "\u0418\u044E\u043B\u044C", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C", "\u041E\u043A\u0442\u044F\u0431\u0440\u044C", "\u041D\u043E\u044F\u0431\u0440\u044C", "\u0414\u0435\u043A\u0430\u0431\u0440\u044C", "" ] }, -{ 0x041A, 0x001A, "hr-HR", "hr", "hrv", "hr-HR", "\u0043\u0072\u006F\u0061\u0074\u0069\u0061\u006E\u0020\u0028\u0043\u0072\u006F\u0061\u0074\u0069\u0061\u0029", "\u0068\u0072\u0076\u0061\u0074\u0073\u006B\u0069\u0020\u0028\u0048\u0072\u0076\u0061\u0074\u0073\u006B\u0061\u0029", false, 0x006C, "HR", "HRV", "\u0043\u0072\u006F\u0061\u0074\u0069\u0061", "\u0048\u0072\u0076\u0061\u0074\u0073\u006B\u0061", "\u0048\u0052\u004B", "\u0043\u0072\u006F\u0061\u0074\u0069\u0061\u006E\u0020\u004B\u0075\u006E\u0061", "\u0068\u0072\u0076\u0061\u0074\u0073\u006B\u0061\u0020\u006B\u0075\u006E\u0061", true, 2, 2, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u006B\u006E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0075\u0074\u006F", "\u0073\u0072\u0069", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u0075\u0062" ], [ "\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061\u006B", "\u0075\u0074\u006F\u0072\u0061\u006B", "\u0073\u0072\u0069\u006A\u0065\u0064\u0061", "\u010D\u0065\u0074\u0076\u0072\u0074\u0061\u006B", "\u0070\u0065\u0074\u0061\u006B", "\u0073\u0075\u0062\u006F\u0074\u0061" ], [ "\u0073\u0069\u006A", "\u0076\u006C\u006A", "\u006F\u017E\u0075", "\u0074\u0072\u0061", "\u0073\u0076\u0069", "\u006C\u0069\u0070", "\u0073\u0072\u0070", "\u006B\u006F\u006C", "\u0072\u0075\u006A", "\u006C\u0069\u0073", "\u0073\u0074\u0075", "\u0070\u0072\u006F", "" ], [ "\u0073\u0069\u006A\u0065\u010D\u0061\u006E\u006A", "\u0076\u0065\u006C\u006A\u0061\u010D\u0061", "\u006F\u017E\u0075\u006A\u0061\u006B", "\u0074\u0072\u0061\u0076\u0061\u006E\u006A", "\u0073\u0076\u0069\u0062\u0061\u006E\u006A", "\u006C\u0069\u0070\u0061\u006E\u006A", "\u0073\u0072\u0070\u0061\u006E\u006A", "\u006B\u006F\u006C\u006F\u0076\u006F\u007A", "\u0072\u0075\u006A\u0061\u006E", "\u006C\u0069\u0073\u0074\u006F\u0070\u0061\u0064", "\u0073\u0074\u0075\u0064\u0065\u006E\u0069", "\u0070\u0072\u006F\u0073\u0069\u006E\u0061\u0063", "" ] }, -{ 0x041B, 0x001B, "sk-SK", "sk", "slk", "sk-SK", "\u0053\u006C\u006F\u0076\u0061\u006B\u0020\u0028\u0053\u006C\u006F\u0076\u0061\u006B\u0069\u0061\u0029", "\u0073\u006C\u006F\u0076\u0065\u006E\u010D\u0069\u006E\u0061\u0020\u0028\u0053\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u00E1\u0020\u0072\u0065\u0070\u0075\u0062\u006C\u0069\u006B\u0061\u0029", false, 0x008F, "SK", "SVK", "\u0053\u006C\u006F\u0076\u0061\u006B\u0069\u0061", "\u0053\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u00E1\u0020\u0072\u0065\u0070\u0075\u0062\u006C\u0069\u006B\u0061", "\u0053\u004B\u004B", "\u0053\u006C\u006F\u0076\u0061\u006B\u0020\u004B\u006F\u0072\u0075\u006E\u0061", "\u0053\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u00E1\u0020\u006B\u006F\u0072\u0075\u006E\u0061", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0053\u006B", "\u002D", "\u002B", "\u004E\u0069\u0065\u0020\u006A\u0065\u0020\u010D\u00ED\u0073\u006C\u006F", "\u002D\u006E\u0065\u006B\u006F\u006E\u0065\u010D\u006E\u006F", "\u002B\u006E\u0065\u006B\u006F\u006E\u0065\u010D\u006E\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u00E1\u006E\u0073\u006B\u0079\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u00E1\u0072", 1, 0, "\u002E\u0020", "\u003A", "", "", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D" ], [ "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065", "\u0070\u006F", "\u0075\u0074", "\u0073\u0074", "\u0161\u0074", "\u0070\u0069", "\u0073\u006F" ], [ "\u006E\u0065\u0064\u0065\u013E\u0061", "\u0070\u006F\u006E\u0064\u0065\u006C\u006F\u006B", "\u0075\u0074\u006F\u0072\u006F\u006B", "\u0073\u0074\u0072\u0065\u0064\u0061", "\u0161\u0074\u0076\u0072\u0074\u006F\u006B", "\u0070\u0069\u0061\u0074\u006F\u006B", "\u0073\u006F\u0062\u006F\u0074\u0061" ], [ "\u0049", "\u0049\u0049", "\u0049\u0049\u0049", "\u0049\u0056", "\u0056", "\u0056\u0049", "\u0056\u0049\u0049", "\u0056\u0049\u0049\u0049", "\u0049\u0058", "\u0058", "\u0058\u0049", "\u0058\u0049\u0049", "" ], [ "\u006A\u0061\u006E\u0075\u00E1\u0072", "\u0066\u0065\u0062\u0072\u0075\u00E1\u0072", "\u006D\u0061\u0072\u0065\u0063", "\u0061\u0070\u0072\u00ED\u006C", "\u006D\u00E1\u006A", "\u006A\u00FA\u006E", "\u006A\u00FA\u006C", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u00F3\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x041C, 0x001C, "sq-AL", "sq", "sqi", "sq-AL", "\u0041\u006C\u0062\u0061\u006E\u0069\u0061\u006E\u0020\u0028\u0041\u006C\u0062\u0061\u006E\u0069\u0061\u0029", "\u0073\u0068\u0071\u0069\u0070\u0065\u0020\u0028\u0053\u0068\u0071\u0069\u0070\u00EB\u0072\u0069\u0061\u0029", false, 0x0006, "AL", "ALB", "\u0041\u006C\u0062\u0061\u006E\u0069\u0061", "\u0053\u0068\u0071\u0069\u0070\u00EB\u0072\u0069\u0061", "\u0041\u004C\u004C", "\u0041\u006C\u0062\u0061\u006E\u0069\u0061\u006E\u0020\u004C\u0065\u006B", "\u004C\u0065\u006B", true, 2, 1, 2, 5, 1, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u004C\u0065\u006B", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002D", "\u003A", "\u0050\u0044", "\u004D\u0044", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0068\u003A\u006D\u006D\u002E\u0074\u0074", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u002E\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D", [ "\u0068\u003A\u006D\u006D\u002E\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u002E\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D" ], [ "\u0044\u0069\u0065", "\u0048\u00EB\u006E", "\u004D\u0061\u0072", "\u004D\u00EB\u0072", "\u0045\u006E\u006A", "\u0050\u0072\u0065", "\u0053\u0068\u0074" ], [ "\u0065\u0020\u0064\u0069\u0065\u006C", "\u0065\u0020\u0068\u00EB\u006E\u00EB", "\u0065\u0020\u006D\u0061\u0072\u0074\u00EB", "\u0065\u0020\u006D\u00EB\u0072\u006B\u0075\u0072\u00EB", "\u0065\u0020\u0065\u006E\u006A\u0074\u0065", "\u0065\u0020\u0070\u0072\u0065\u006D\u0074\u0065", "\u0065\u0020\u0073\u0068\u0074\u0075\u006E\u00EB" ], [ "\u004A\u0061\u006E", "\u0053\u0068\u006B", "\u004D\u0061\u0072", "\u0050\u0072\u0069", "\u004D\u0061\u006A", "\u0051\u0065\u0072", "\u004B\u006F\u0072", "\u0047\u0073\u0068", "\u0053\u0068\u0074", "\u0054\u0065\u0074", "\u004E\u00EB\u006E", "\u0044\u0068\u006A", "" ], [ "\u006A\u0061\u006E\u0061\u0072", "\u0073\u0068\u006B\u0075\u0072\u0074", "\u006D\u0061\u0072\u0073", "\u0070\u0072\u0069\u006C\u006C", "\u006D\u0061\u006A", "\u0071\u0065\u0072\u0073\u0068\u006F\u0072", "\u006B\u006F\u0072\u0072\u0069\u006B", "\u0067\u0075\u0073\u0068\u0074", "\u0073\u0068\u0074\u0061\u0074\u006F\u0072", "\u0074\u0065\u0074\u006F\u0072", "\u006E\u00EB\u006E\u0074\u006F\u0072", "\u0064\u0068\u006A\u0065\u0074\u006F\u0072", "" ] }, -{ 0x041D, 0x001D, "sv-SE", "sv", "swe", "sv-SE", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u0028\u0053\u0077\u0065\u0064\u0065\u006E\u0029", "\u0073\u0076\u0065\u006E\u0073\u006B\u0061\u0020\u0028\u0053\u0076\u0065\u0072\u0069\u0067\u0065\u0029", false, 0x00DD, "SE", "SWE", "\u0053\u0077\u0065\u0064\u0065\u006E", "\u0053\u0076\u0065\u0072\u0069\u0067\u0065", "\u0053\u0045\u004B", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0061", "\u0053\u0076\u0065\u006E\u0073\u006B\u0020\u006B\u0072\u006F\u006E\u0061", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D", "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\'\u006B\u006C\u0020\'\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u006B\u006C\u0020\'\u0048\u003A\u006D\u006D" ], [ "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00F6", "\u006D\u00E5", "\u0074\u0069", "\u006F\u006E", "\u0074\u006F", "\u0066\u0072", "\u006C\u00F6" ], [ "\u0073\u00F6\u006E\u0064\u0061\u0067", "\u006D\u00E5\u006E\u0064\u0061\u0067", "\u0074\u0069\u0073\u0064\u0061\u0067", "\u006F\u006E\u0073\u0064\u0061\u0067", "\u0074\u006F\u0072\u0073\u0064\u0061\u0067", "\u0066\u0072\u0065\u0064\u0061\u0067", "\u006C\u00F6\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074\u0069", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x041E, 0x001E, "th-TH", "th", "tha", "th-TH", "\u0054\u0068\u0061\u0069\u0020\u0028\u0054\u0068\u0061\u0069\u006C\u0061\u006E\u0064\u0029", "\u0E44\u0E17\u0E22\u0020\u0028\u0E44\u0E17\u0E22\u0029", false, 0x00E3, "TH", "THA", "\u0054\u0068\u0061\u0069\u006C\u0061\u006E\u0064", "\u0E44\u0E17\u0E22", "\u0054\u0048\u0042", "\u0054\u0068\u0061\u0069\u0020\u0042\u0061\u0068\u0074", "\u0E1A\u0E32\u0E17", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0E3F", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0E50", "\u0E51", "\u0E52", "\u0E53", "\u0E54", "\u0E55", "\u0E56", "\u0E57", "\u0E58", "\u0E59" ], 7, [ 7, 1 ], "\u0E1E\u0E38\u0E17\u0E18\u0E28\u0E31\u0E01\u0E23\u0E32\u0E0A", 1, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\'\u0E27\u0E31\u0E19\'\u0064\u0064\u0064\u0064\'\u0E17\u0E35\u0E48\'\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0067\u0067\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0E2D\u0E32\u002E", "\u0E08\u002E", "\u0E2D\u002E", "\u0E1E\u002E", "\u0E1E\u0E24\u002E", "\u0E28\u002E", "\u0E2A\u002E" ], [ "\u0E2D\u0E32\u0E17\u0E34\u0E15\u0E22\u0E4C", "\u0E08\u0E31\u0E19\u0E17\u0E23\u0E4C", "\u0E2D\u0E31\u0E07\u0E04\u0E32\u0E23", "\u0E1E\u0E38\u0E18", "\u0E1E\u0E24\u0E2B\u0E31\u0E2A\u0E1A\u0E14\u0E35", "\u0E28\u0E38\u0E01\u0E23\u0E4C", "\u0E40\u0E2A\u0E32\u0E23\u0E4C" ], [ "\u0E21\u002E\u0E04\u002E", "\u0E01\u002E\u0E1E\u002E", "\u0E21\u0E35\u002E\u0E04\u002E", "\u0E40\u0E21\u002E\u0E22\u002E", "\u0E1E\u002E\u0E04\u002E", "\u0E21\u0E34\u002E\u0E22\u002E", "\u0E01\u002E\u0E04\u002E", "\u0E2A\u002E\u0E04\u002E", "\u0E01\u002E\u0E22\u002E", "\u0E15\u002E\u0E04\u002E", "\u0E1E\u002E\u0E22\u002E", "\u0E18\u002E\u0E04\u002E", "" ], [ "\u0E21\u0E01\u0E23\u0E32\u0E04\u0E21", "\u0E01\u0E38\u0E21\u0E20\u0E32\u0E1E\u0E31\u0E19\u0E18\u0E4C", "\u0E21\u0E35\u0E19\u0E32\u0E04\u0E21", "\u0E40\u0E21\u0E29\u0E32\u0E22\u0E19", "\u0E1E\u0E24\u0E29\u0E20\u0E32\u0E04\u0E21", "\u0E21\u0E34\u0E16\u0E38\u0E19\u0E32\u0E22\u0E19", "\u0E01\u0E23\u0E01\u0E0E\u0E32\u0E04\u0E21", "\u0E2A\u0E34\u0E07\u0E2B\u0E32\u0E04\u0E21", "\u0E01\u0E31\u0E19\u0E22\u0E32\u0E22\u0E19", "\u0E15\u0E38\u0E25\u0E32\u0E04\u0E21", "\u0E1E\u0E24\u0E28\u0E08\u0E34\u0E01\u0E32\u0E22\u0E19", "\u0E18\u0E31\u0E19\u0E27\u0E32\u0E04\u0E21", "" ] }, -{ 0x041F, 0x001F, "tr-TR", "tr", "tur", "tr-TR", "\u0054\u0075\u0072\u006B\u0069\u0073\u0068\u0020\u0028\u0054\u0075\u0072\u006B\u0065\u0079\u0029", "\u0054\u00FC\u0072\u006B\u00E7\u0065\u0020\u0028\u0054\u00FC\u0072\u006B\u0069\u0079\u0065\u0029", false, 0x00EB, "TR", "TUR", "\u0054\u0075\u0072\u006B\u0065\u0079", "\u0054\u00FC\u0072\u006B\u0069\u0079\u0065", "\u0054\u0052\u0059", "\u004E\u0065\u0077\u0020\u0054\u0075\u0072\u006B\u0069\u0073\u0068\u0020\u004C\u0069\u0072\u0061", "\u0059\u0065\u006E\u0069\u0020\u0054\u00FC\u0072\u006B\u0020\u004C\u0069\u0072\u0061\u0073\u0131", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0059\u0054\u004C", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0079\u0065\u006E\u0020\u0054\u0061\u006B\u0076\u0069\u006D\u0069", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0050\u0061\u007A", "\u0050\u007A\u0074", "\u0053\u0061\u006C", "\u00C7\u0061\u0072", "\u0050\u0065\u0072", "\u0043\u0075\u006D", "\u0043\u006D\u0074" ], [ "\u0050\u0061\u007A\u0061\u0072", "\u0050\u0061\u007A\u0061\u0072\u0074\u0065\u0073\u0069", "\u0053\u0061\u006C\u0131", "\u00C7\u0061\u0072\u015F\u0061\u006D\u0062\u0061", "\u0050\u0065\u0072\u015F\u0065\u006D\u0062\u0065", "\u0043\u0075\u006D\u0061", "\u0043\u0075\u006D\u0061\u0072\u0074\u0065\u0073\u0069" ], [ "\u004F\u0063\u0061", "\u015E\u0075\u0062", "\u004D\u0061\u0072", "\u004E\u0069\u0073", "\u004D\u0061\u0079", "\u0048\u0061\u007A", "\u0054\u0065\u006D", "\u0041\u011F\u0075", "\u0045\u0079\u006C", "\u0045\u006B\u0069", "\u004B\u0061\u0073", "\u0041\u0072\u0061", "" ], [ "\u004F\u0063\u0061\u006B", "\u015E\u0075\u0062\u0061\u0074", "\u004D\u0061\u0072\u0074", "\u004E\u0069\u0073\u0061\u006E", "\u004D\u0061\u0079\u0131\u0073", "\u0048\u0061\u007A\u0069\u0072\u0061\u006E", "\u0054\u0065\u006D\u006D\u0075\u007A", "\u0041\u011F\u0075\u0073\u0074\u006F\u0073", "\u0045\u0079\u006C\u00FC\u006C", "\u0045\u006B\u0069\u006D", "\u004B\u0061\u0073\u0131\u006D", "\u0041\u0072\u0061\u006C\u0131\u006B", "" ] }, -{ 0x0420, 0x0020, "ur-PK", "ur", "urd", "ur-PK", "\u0055\u0072\u0064\u0075\u0020\u0028\u0049\u0073\u006C\u0061\u006D\u0069\u0063\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0050\u0061\u006B\u0069\u0073\u0074\u0061\u006E\u0029", "\u0627\u064F\u0631\u062F\u0648\u0020\u0028\u067E\u0627\u06A9\u0633\u062A\u0627\u0646\u0029", false, 0x00BE, "PK", "PAK", "\u0049\u0073\u006C\u0061\u006D\u0069\u0063\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0050\u0061\u006B\u0069\u0073\u0074\u0061\u006E", "\u067E\u0627\u06A9\u0633\u062A\u0627\u0646", "\u0050\u004B\u0052", "\u0050\u0061\u006B\u0069\u0073\u0074\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0631\u0648\u067E\u064A\u0647", true, 2, 1, 2, 3, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052\u0073", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9" ], 1, [ 1, 2, 6 ], "\u0639\u064A\u0633\u0648\u0649\u00A0\u0633\u0627\u0644", 1, 1, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u062A\u0648\u0627\u0631", "\u067E\u064A\u0631", "\u0645\u0646\u06AF\u0644", "\u0628\u062F\u06BE", "\u062C\u0645\u0639\u0631\u0627\u062A", "\u062C\u0645\u0639\u0647", "\u0647\u0641\u062A\u0647" ], [ "\u0627\u062A\u0648\u0627\u0631", "\u067E\u064A\u0631", "\u0645\u0646\u06AF\u0644", "\u0628\u062F\u06BE", "\u062C\u0645\u0639\u0631\u0627\u062A", "\u062C\u0645\u0639\u0647", "\u0647\u0641\u062A\u0647" ], [ "\u062C\u0646\u0648\u0631\u0649", "\u0641\u0631\u0648\u0631\u0649", "\u0645\u0627\u0631\u0686", "\u0627\u067E\u0631\u064A\u0644", "\u0645\u0626", "\u062C\u0648\u0646", "\u062C\u0648\u0644\u0627\u0678", "\u0627\u06AF\u0633\u062A", "\u0633\u062A\u0645\u0628\u0631", "\u0627\u06A9\u062A\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062F\u0633\u0645\u0628\u0631", "" ], [ "\u062C\u0646\u0648\u0631\u0649", "\u0641\u0631\u0648\u0631\u0649", "\u0645\u0627\u0631\u0686", "\u0627\u067E\u0631\u064A\u0644", "\u0645\u0626", "\u062C\u0648\u0646", "\u062C\u0648\u0644\u0627\u0678", "\u0627\u06AF\u0633\u062A", "\u0633\u062A\u0645\u0628\u0631", "\u0627\u06A9\u062A\u0648\u0628\u0631", "\u0646\u0648\u0645\u0628\u0631", "\u062F\u0633\u0645\u0628\u0631", "" ] }, -{ 0x0421, 0x0021, "id-ID", "id", "ind", "id-ID", "\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u006E\u0020\u0028\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u0029", "\u0042\u0061\u0068\u0061\u0073\u0061\u0020\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u0020\u0028\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u0029", false, 0x006F, "ID", "IDN", "\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061", "\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061", "\u0049\u0044\u0052", "\u0049\u006E\u0064\u006F\u006E\u0065\u0073\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0069\u0061\u0068", "\u0052\u0075\u0070\u0069\u0061\u0068", true, 2, 1, 0, 0, 0, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0052\u0070", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0020\u004D\u0061\u0073\u0065\u0068\u0069", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u0069\u006E\u0067\u0067\u0075", "\u0053\u0065\u006E", "\u0053\u0065\u006C", "\u0052\u0061\u0062\u0075", "\u004B\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u004D\u0069\u006E\u0067\u0067\u0075", "\u0053\u0065\u006E\u0069\u006E", "\u0053\u0065\u006C\u0061\u0073\u0061", "\u0052\u0061\u0062\u0075", "\u004B\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0070", "\u0044\u0065\u0073", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u004D\u0061\u0072\u0065\u0074", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0065\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0067\u0075\u0073\u0074\u0075\u0073", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0070\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0422, 0x0022, "uk-UA", "uk", "ukr", "uk-UA", "\u0055\u006B\u0072\u0061\u0069\u006E\u0069\u0061\u006E\u0020\u0028\u0055\u006B\u0072\u0061\u0069\u006E\u0065\u0029", "\u0443\u043A\u0440\u0430\u0457\u043D\u044C\u0441\u043A\u0430\u0020\u0028\u0423\u043A\u0440\u0430\u0457\u043D\u0430\u0029", false, 0x00F1, "UA", "UKR", "\u0055\u006B\u0072\u0061\u0069\u006E\u0065", "\u0423\u043A\u0440\u0430\u0457\u043D\u0430", "\u0055\u0041\u0048", "\u0055\u006B\u0072\u0061\u0069\u006E\u0069\u0061\u006E\u0020\u0047\u0072\u0069\u0076\u006E\u0061", "\u0433\u0440\u0438\u0432\u043D\u044F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0433\u0440\u043D\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0431\u0435\u0437\u043C\u0435\u0436\u043D\u0456\u0441\u0442\u044C", "\u0431\u0435\u0437\u043C\u0435\u0436\u043D\u0456\u0441\u0442\u044C", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0413\u0440\u0438\u0433\u043E\u0440\u0456\u0430\u043D\u044C\u0441\u043A\u0438\u0439\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u0020\u0440\u002E\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u0020\u0440\u002E\'", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u0020\u0440\u002E\'" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u0020\u0440\u002E\'" ], [ "\u041D\u0434", "\u041F\u043D", "\u0412\u0442", "\u0421\u0440", "\u0427\u0442", "\u041F\u0442", "\u0421\u0431" ], [ "\u043D\u0435\u0434\u0456\u043B\u044F", "\u043F\u043E\u043D\u0435\u0434\u0456\u043B\u043E\u043A", "\u0432\u0456\u0432\u0442\u043E\u0440\u043E\u043A", "\u0441\u0435\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0435\u0440", "\u043F\u0027\u044F\u0442\u043D\u0438\u0446\u044F", "\u0441\u0443\u0431\u043E\u0442\u0430" ], [ "\u0421\u0456\u0447", "\u041B\u044E\u0442", "\u0411\u0435\u0440", "\u041A\u0432\u0456", "\u0422\u0440\u0430", "\u0427\u0435\u0440", "\u041B\u0438\u043F", "\u0421\u0435\u0440", "\u0412\u0435\u0440", "\u0416\u043E\u0432", "\u041B\u0438\u0441", "\u0413\u0440\u0443", "" ], [ "\u0421\u0456\u0447\u0435\u043D\u044C", "\u041B\u044E\u0442\u0438\u0439", "\u0411\u0435\u0440\u0435\u0437\u0435\u043D\u044C", "\u041A\u0432\u0456\u0442\u0435\u043D\u044C", "\u0422\u0440\u0430\u0432\u0435\u043D\u044C", "\u0427\u0435\u0440\u0432\u0435\u043D\u044C", "\u041B\u0438\u043F\u0435\u043D\u044C", "\u0421\u0435\u0440\u043F\u0435\u043D\u044C", "\u0412\u0435\u0440\u0435\u0441\u0435\u043D\u044C", "\u0416\u043E\u0432\u0442\u0435\u043D\u044C", "\u041B\u0438\u0441\u0442\u043E\u043F\u0430\u0434", "\u0413\u0440\u0443\u0434\u0435\u043D\u044C", "" ] }, -{ 0x0423, 0x0023, "be-BY", "be", "bel", "be-BY", "\u0042\u0065\u006C\u0061\u0072\u0075\u0073\u0069\u0061\u006E\u0020\u0028\u0042\u0065\u006C\u0061\u0072\u0075\u0073\u0029", "\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u043A\u0456\u0020\u0028\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C\u0029", false, 0x001D, "BY", "BLR", "\u0042\u0065\u006C\u0061\u0072\u0075\u0073", "\u0411\u0435\u043B\u0430\u0440\u0443\u0441\u044C", "\u0042\u0059\u0042", "\u0042\u0065\u006C\u0061\u0072\u0075\u0073\u0069\u0061\u006E\u0020\u0052\u0075\u0062\u006C\u0065", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0440\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u0441\u043A\u0438\u0439\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u043D\u0434", "\u043F\u043D", "\u0430\u045E", "\u0441\u0440", "\u0447\u0446", "\u043F\u0442", "\u0441\u0431" ], [ "\u043D\u044F\u0434\u0437\u0435\u043B\u044F", "\u043F\u0430\u043D\u044F\u0434\u0437\u0435\u043B\u0430\u043A", "\u0430\u045E\u0442\u043E\u0440\u0430\u043A", "\u0441\u0435\u0440\u0430\u0434\u0430", "\u0447\u0430\u0446\u0432\u0435\u0440", "\u043F\u044F\u0442\u043D\u0456\u0446\u0430", "\u0441\u0443\u0431\u043E\u0442\u0430" ], [ "\u0421\u0442\u0443", "\u041B\u044E\u0442", "\u0421\u0430\u043A", "\u041A\u0440\u0430", "\u041C\u0430\u0439", "\u0427\u044D\u0440", "\u041B\u0456\u043F", "\u0416\u043D\u0456", "\u0412\u0435\u0440", "\u041A\u0430\u0441", "\u041B\u0456\u0441", "\u0421\u043D\u0435", "" ], [ "\u0421\u0442\u0443\u0434\u0437\u0435\u043D\u044C", "\u041B\u044E\u0442\u044B", "\u0421\u0430\u043A\u0430\u0432\u0456\u043A", "\u041A\u0440\u0430\u0441\u0430\u0432\u0456\u043A", "\u041C\u0430\u0439", "\u0427\u044D\u0440\u0432\u0435\u043D\u044C", "\u041B\u0456\u043F\u0435\u043D\u044C", "\u0416\u043D\u0456\u0432\u0435\u043D\u044C", "\u0412\u0435\u0440\u0430\u0441\u0435\u043D\u044C", "\u041A\u0430\u0441\u0442\u0440\u044B\u0447\u043D\u0456\u043A", "\u041B\u0456\u0441\u0442\u0430\u043F\u0430\u0434", "\u0421\u043D\u0435\u0436\u0430\u043D\u044C", "" ] }, -{ 0x0424, 0x0024, "sl-SI", "sl", "slv", "sl-SI", "\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u0061\u006E\u0020\u0028\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u0061\u0029", "\u0073\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u0069\u0020\u0028\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u006A\u0061\u0029", false, 0x00D4, "SI", "SVN", "\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u0061", "\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u006A\u0061", "\u0053\u0049\u0054", "\u0053\u006C\u006F\u0076\u0065\u006E\u0069\u0061\u006E\u0020\u0054\u006F\u006C\u0061\u0072", "\u0073\u006C\u006F\u0076\u0065\u006E\u0073\u006B\u0069\u0020\u0074\u006F\u006C\u0061\u0072", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0053\u0049\u0054", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u006E\u0065\u0073\u006B\u006F\u006E\u010D\u006E\u006F\u0073\u0074", "\u006E\u0065\u0073\u006B\u006F\u006E\u010D\u006E\u006F\u0073\u0074", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u006F\u006C\u0065\u0064\u0061\u0072", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0074\u006F\u0072", "\u0073\u0072\u0065", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u006F\u0062" ], [ "\u006E\u0065\u0064\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u0065\u006C\u006A\u0065\u006B", "\u0074\u006F\u0072\u0065\u006B", "\u0073\u0072\u0065\u0064\u0061", "\u010D\u0065\u0074\u0072\u0074\u0065\u006B", "\u0070\u0065\u0074\u0065\u006B", "\u0073\u006F\u0062\u006F\u0074\u0061" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0065\u0063", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E\u0069\u006A", "\u006A\u0075\u006C\u0069\u006A", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0425, 0x0025, "et-EE", "et", "est", "et-EE", "\u0045\u0073\u0074\u006F\u006E\u0069\u0061\u006E\u0020\u0028\u0045\u0073\u0074\u006F\u006E\u0069\u0061\u0029", "\u0065\u0065\u0073\u0074\u0069\u0020\u0028\u0045\u0065\u0073\u0074\u0069\u0029", false, 0x0046, "EE", "EST", "\u0045\u0073\u0074\u006F\u006E\u0069\u0061", "\u0045\u0065\u0073\u0074\u0069", "\u0045\u0045\u004B", "\u0045\u0073\u0074\u006F\u006E\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006F\u006E", "\u004B\u0072\u006F\u006F\u006E", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002E", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u0061\u0076\u0061\u006C\u0064\u0061\u006D\u0061\u0074\u0075", "\u006D\u0069\u0069\u006E\u0075\u0073\u006C\u00F5\u0070\u006D\u0061\u0074\u0075\u0073", "\u0070\u006C\u0075\u0073\u0073\u006C\u00F5\u0070\u006D\u0061\u0074\u0075\u0073", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0075\u0073\u0065\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "\u0045\u004C", "\u0050\u004C", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0061\u002E\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0061\u002E\'", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0061\u002E\'", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0061\u002E\'", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0061\u002E\'" ], [ "\u0050", "\u0045", "\u0054", "\u004B", "\u004E", "\u0052", "\u004C" ], [ "\u0070\u00FC\u0068\u0061\u0070\u00E4\u0065\u0076", "\u0065\u0073\u006D\u0061\u0073\u0070\u00E4\u0065\u0076", "\u0074\u0065\u0069\u0073\u0069\u0070\u00E4\u0065\u0076", "\u006B\u006F\u006C\u006D\u0061\u0070\u00E4\u0065\u0076", "\u006E\u0065\u006C\u006A\u0061\u0070\u00E4\u0065\u0076", "\u0072\u0065\u0065\u0064\u0065", "\u006C\u0061\u0075\u0070\u00E4\u0065\u0076" ], [ "\u006A\u0061\u0061\u006E", "\u0076\u0065\u0065\u0062\u0072", "\u006D\u00E4\u0072\u0074\u0073", "\u0061\u0070\u0072", "\u006D\u0061\u0069", "\u006A\u0075\u0075\u006E\u0069", "\u006A\u0075\u0075\u006C\u0069", "\u0061\u0075\u0067", "\u0073\u0065\u0070\u0074", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0074\u0073", "" ], [ "\u006A\u0061\u0061\u006E\u0075\u0061\u0072", "\u0076\u0065\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u00E4\u0072\u0074\u0073", "\u0061\u0070\u0072\u0069\u006C\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0075\u006E\u0069", "\u006A\u0075\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0074\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0426, 0x0026, "lv-LV", "lv", "lav", "lv-LV", "\u004C\u0061\u0074\u0076\u0069\u0061\u006E\u0020\u0028\u004C\u0061\u0074\u0076\u0069\u0061\u0029", "\u006C\u0061\u0074\u0076\u0069\u0065\u0161\u0075\u0020\u0028\u004C\u0061\u0074\u0076\u0069\u006A\u0061\u0029", false, 0x008C, "LV", "LVA", "\u004C\u0061\u0074\u0076\u0069\u0061", "\u004C\u0061\u0074\u0076\u0069\u006A\u0061", "\u004C\u0056\u004C", "\u004C\u0061\u0074\u0076\u0069\u0061\u006E\u0020\u004C\u0061\u0074\u0073", "\u004C\u0061\u0074\u0073", true, 2, 1, 2, 9, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u004C\u0073", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0062\u0065\u007A\u0067\u0061\u006C\u012B\u0062\u0061", "\u0062\u0065\u007A\u0067\u0061\u006C\u012B\u0062\u0061", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0061\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0101\u0072\u0073", 1, 2, "\u002E", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064\u002E", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0067\u0061\u0064\u0061\u0020\'\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064\u002E", "\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064\u002E", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\'\u002E\u0020\u0067\u0061\u0064\u0061\u0020\'\u0064\u002E\u0020\u004D\u004D\u004D\u004D" ], [ "\u0079\u0079\u0079\u0079\u002E\u0020\u004D\u004D\u004D\u004D" ], [ "\u0053\u0076", "\u0050\u0072", "\u004F\u0074", "\u0054\u0072", "\u0043\u0065", "\u0050\u006B", "\u0053\u0065" ], [ "\u0073\u0076\u0113\u0074\u0064\u0069\u0065\u006E\u0061", "\u0070\u0069\u0072\u006D\u0064\u0069\u0065\u006E\u0061", "\u006F\u0074\u0072\u0064\u0069\u0065\u006E\u0061", "\u0074\u0072\u0065\u0161\u0064\u0069\u0065\u006E\u0061", "\u0063\u0065\u0074\u0075\u0072\u0074\u0064\u0069\u0065\u006E\u0061", "\u0070\u0069\u0065\u006B\u0074\u0064\u0069\u0065\u006E\u0061", "\u0073\u0065\u0073\u0074\u0064\u0069\u0065\u006E\u0061" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u016B\u006E", "\u004A\u016B\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0076\u0101\u0072\u0069\u0073", "\u0066\u0065\u0062\u0072\u0075\u0101\u0072\u0069\u0073", "\u006D\u0061\u0072\u0074\u0073", "\u0061\u0070\u0072\u012B\u006C\u0069\u0073", "\u006D\u0061\u0069\u006A\u0073", "\u006A\u016B\u006E\u0069\u006A\u0073", "\u006A\u016B\u006C\u0069\u006A\u0073", "\u0061\u0075\u0067\u0075\u0073\u0074\u0073", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0069\u0073", "\u006F\u006B\u0074\u006F\u0062\u0072\u0069\u0073", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0069\u0073", "\u0064\u0065\u0063\u0065\u006D\u0062\u0072\u0069\u0073", "" ] }, -{ 0x0427, 0x0027, "lt-LT", "lt", "lit", "lt-LT", "\u004C\u0069\u0074\u0068\u0075\u0061\u006E\u0069\u0061\u006E\u0020\u0028\u004C\u0069\u0074\u0068\u0075\u0061\u006E\u0069\u0061\u0029", "\u006C\u0069\u0065\u0074\u0075\u0076\u0069\u0173\u0020\u0028\u004C\u0069\u0065\u0074\u0075\u0076\u0061\u0029", false, 0x008D, "LT", "LTU", "\u004C\u0069\u0074\u0068\u0075\u0061\u006E\u0069\u0061", "\u004C\u0069\u0065\u0074\u0075\u0076\u0061", "\u004C\u0054\u004C", "\u004C\u0069\u0074\u0068\u0075\u0061\u006E\u0069\u0061\u006E\u0020\u004C\u0069\u0074\u0061\u0073", "\u004C\u0069\u0074\u0061\u0073", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u004C\u0074", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0062\u0065\u0067\u0061\u006C\u0079\u0062\u0117", "\u0062\u0065\u0067\u0061\u006C\u0079\u0062\u0117", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0069\u0067\u0061\u006C\u0069\u0061\u0075\u0073\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u006F\u0072\u0069\u0075\u0073", 1, 0, "\u002E", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u0020\'\u006D\u002E\'\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0020\'\u0064\u002E\'", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0020\'\u0064\u002E\'", "\u0079\u0079\u0079\u0079\u0020\'\u006D\u002E\'\u0020\u004D\u004D\u004D\u004D", [ "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u006D\u002E\'\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0020\'\u0064\u002E\'" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u006D\u002E\'\u0020\u004D\u004D\u004D\u004D" ], [ "\u0053\u006B", "\u0050\u0072", "\u0041\u006E", "\u0054\u0072", "\u004B\u0074", "\u0050\u006E", "\u0160\u0074" ], [ "\u0073\u0065\u006B\u006D\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u0070\u0069\u0072\u006D\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u0061\u006E\u0074\u0072\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u0074\u0072\u0065\u010D\u0069\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u006B\u0065\u0074\u0076\u0069\u0072\u0074\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u0070\u0065\u006E\u006B\u0074\u0061\u0064\u0069\u0065\u006E\u0069\u0073", "\u0161\u0065\u0161\u0074\u0061\u0064\u0069\u0065\u006E\u0069\u0073" ], [ "\u0053\u0061\u0075", "\u0056\u0061\u0073", "\u004B\u006F\u0076", "\u0042\u0061\u006C", "\u0047\u0065\u0067", "\u0042\u0069\u0072", "\u004C\u0069\u0065", "\u0052\u0067\u0070", "\u0052\u0067\u0073", "\u0053\u0070\u006C", "\u004C\u0061\u0070", "\u0047\u0072\u0064", "" ], [ "\u0073\u0061\u0075\u0073\u0069\u0073", "\u0076\u0061\u0073\u0061\u0072\u0069\u0073", "\u006B\u006F\u0076\u0061\u0073", "\u0062\u0061\u006C\u0061\u006E\u0064\u0069\u0073", "\u0067\u0065\u0067\u0075\u017E\u0117", "\u0062\u0069\u0072\u017E\u0065\u006C\u0069\u0073", "\u006C\u0069\u0065\u0070\u0061", "\u0072\u0075\u0067\u0070\u006A\u016B\u0074\u0069\u0073", "\u0072\u0075\u0067\u0073\u0117\u006A\u0069\u0073", "\u0073\u0070\u0061\u006C\u0069\u0073", "\u006C\u0061\u0070\u006B\u0072\u0069\u0074\u0069\u0073", "\u0067\u0072\u0075\u006F\u0064\u0069\u0073", "" ] }, -{ 0x0429, 0x0029, "fa-IR", "fa", "fas", "fa-IR", "\u0050\u0065\u0072\u0073\u0069\u0061\u006E\u0020\u0028\u0049\u0072\u0061\u006E\u0029", "\u0641\u0627\u0631\u0633\u0649\u0020\u0028\u0627\u064A\u0631\u0627\u0646\u0029", false, 0x0074, "IR", "IRN", "\u0049\u0072\u0061\u006E", "\u0627\u064A\u0631\u0627\u0646", "\u0049\u0052\u0052", "\u0049\u0072\u0061\u006E\u0069\u0061\u006E\u0020\u0052\u0069\u0061\u006C", "\u0631\u0649\u0627\u0644", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002F", "\u002C", "\u0631\u064A\u0627\u0644", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u06F0", "\u06F1", "\u06F2", "\u06F3", "\u06F4", "\u06F5", "\u06F6", "\u06F7", "\u06F8", "\u06F9" ], 2, [ 2, 1, 6, 11 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0020\u0028\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0029", 0, 0, "\u002F", "\u003A", "\u0642\u002E\u0638", "\u0628\u002E\u0638", "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u002F\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x042A, 0x002A, "vi-VN", "vi", "vie", "vi-VN", "\u0056\u0069\u0065\u0074\u006E\u0061\u006D\u0065\u0073\u0065\u0020\u0028\u0056\u0069\u0065\u0074\u006E\u0061\u006D\u0029", "\u0054\u0069\u00EA\u0301\u006E\u0067\u0020\u0056\u0069\u00EA\u0323\u0074\u0020\u0028\u0056\u0069\u00EA\u0323\u0074\u0020\u004E\u0061\u006D\u0029", false, 0x00FB, "VN", "VNM", "\u0056\u0069\u0065\u0074\u006E\u0061\u006D", "\u0056\u0069\u00EA\u0323\u0074\u0020\u004E\u0061\u006D", "\u0056\u004E\u0044", "\u0056\u0069\u0065\u0074\u006E\u0061\u006D\u0065\u0073\u0065\u0020\u0044\u006F\u006E\u0067", "\u0110\u00F4\u0300\u006E\u0067", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AB", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0044\u01B0\u01A1\u006E\u0067\u00A0\u004C\u0069\u0323\u0063\u0068", 1, 0, "\u002F", "\u003A", "\u0053\u0041", "\u0043\u0048", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0043\u004E", "\u0048\u0061\u0069", "\u0042\u0061", "\u0054\u01B0", "\u004E\u0103\u006D", "\u0053\u0061\u0301\u0075", "\u0042\u0061\u0309\u0079" ], [ "\u0043\u0068\u0075\u0309\u0020\u004E\u0068\u00E2\u0323\u0074", "\u0054\u0068\u01B0\u0301\u0020\u0048\u0061\u0069", "\u0054\u0068\u01B0\u0301\u0020\u0042\u0061", "\u0054\u0068\u01B0\u0301\u0020\u0054\u01B0", "\u0054\u0068\u01B0\u0301\u0020\u004E\u0103\u006D", "\u0054\u0068\u01B0\u0301\u0020\u0053\u0061\u0301\u0075", "\u0054\u0068\u01B0\u0301\u0020\u0042\u0061\u0309\u0079" ], [ "\u0054\u0068\u0067\u0031", "\u0054\u0068\u0067\u0032", "\u0054\u0068\u0067\u0033", "\u0054\u0068\u0067\u0034", "\u0054\u0068\u0067\u0035", "\u0054\u0068\u0067\u0036", "\u0054\u0068\u0067\u0037", "\u0054\u0068\u0067\u0038", "\u0054\u0068\u0067\u0039", "\u0054\u0068\u0067\u0031\u0030", "\u0054\u0068\u0067\u0031\u0031", "\u0054\u0068\u0067\u0031\u0032", "" ], [ "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0047\u0069\u00EA\u006E\u0067", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0048\u0061\u0069", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0042\u0061", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0054\u01B0", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u004E\u0103\u006D", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0053\u0061\u0301\u0075", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0042\u0061\u0309\u0079", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0054\u0061\u0301\u006D", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u0043\u0068\u0069\u0301\u006E", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u004D\u01B0\u01A1\u0300\u0069", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u004D\u01B0\u01A1\u0300\u0069\u0020\u004D\u00F4\u0323\u0074", "\u0054\u0068\u0061\u0301\u006E\u0067\u0020\u004D\u01B0\u01A1\u0300\u0069\u0020\u0048\u0061\u0069", "" ] }, -{ 0x042B, 0x002B, "hy-AM", "hy", "hye", "hy-AM", "\u0041\u0072\u006D\u0065\u006E\u0069\u0061\u006E\u0020\u0028\u0041\u0072\u006D\u0065\u006E\u0069\u0061\u0029", "\u0540\u0561\u0575\u0565\u0580\u0565\u0576\u0020\u0028\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576\u0029", false, 0x0007, "AM", "ARM", "\u0041\u0072\u006D\u0065\u006E\u0069\u0061", "\u0540\u0561\u0575\u0561\u057D\u057F\u0561\u0576", "\u0041\u004D\u0044", "\u0041\u0072\u006D\u0065\u006E\u0069\u0061\u006E\u0020\u0044\u0072\u0061\u006D", "\u0564\u0580\u0561\u0574", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0564\u0580\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0555\u0580\u0561\u0581\u0578\u0582\u0575\u0581", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u002C\u0020\u0064\u002D\u004D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u002D\u004D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u053F\u056B\u0580", "\u0535\u0580\u056F", "\u0535\u0580\u0584", "\u0549\u0580\u0584", "\u0540\u0576\u0563", "\u0548\u0552\u0580", "\u0547\u0562\u0569" ], [ "\u053F\u056B\u0580\u0561\u056F\u056B", "\u0535\u0580\u056F\u0578\u0582\u0577\u0561\u0562\u0569\u056B", "\u0535\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B", "\u0549\u0578\u0580\u0565\u0584\u0577\u0561\u0562\u0569\u056B", "\u0540\u056B\u0576\u0563\u0577\u0561\u0562\u0569\u056B", "\u0548\u0552\u0580\u0562\u0561\u0569", "\u0547\u0561\u0562\u0561\u0569" ], [ "\u0540\u0546\u054E", "\u0553\u054F\u054E", "\u0544\u0550\u054F", "\u0531\u054A\u0550", "\u0544\u0545\u054D", "\u0540\u0546\u054D", "\u0540\u053C\u054D", "\u0555\u0533\u054D", "\u054D\u0535\u054A", "\u0540\u0548\u053F", "\u0546\u0548\u0545", "\u0534\u0535\u053F", "" ], [ "\u0540\u0578\u0582\u0576\u057E\u0561\u0580", "\u0553\u0565\u057F\u0580\u057E\u0561\u0580", "\u0544\u0561\u0580\u057F", "\u0531\u057A\u0580\u056B\u056C", "\u0544\u0561\u0575\u056B\u057D", "\u0540\u0578\u0582\u0576\u056B\u057D", "\u0540\u0578\u0582\u056C\u056B\u057D", "\u0555\u0563\u0578\u057D\u057F\u0578\u057D", "\u054D\u0565\u057A\u057F\u0565\u0574\u0562\u0565\u0580", "\u0540\u0578\u056F\u057F\u0565\u0574\u0562\u0565\u0580", "\u0546\u0578\u0575\u0565\u0574\u0562\u0565\u0580", "\u0534\u0565\u056F\u057F\u0565\u0574\u0562\u0565\u0580", "" ] }, -{ 0x042C, 0x002C, "az-AZ-Latn", "az", "aze", "az-Latn-AZ", "\u0041\u007A\u0065\u0072\u0069\u0020\u0028\u004C\u0061\u0074\u0069\u006E\u002C\u0020\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E\u0029", "\u0041\u007A\u0259\u0072\u0062\u0061\u0079\u0063\u0061\u006E\u00AD\u0131\u006C\u0131\u0020\u0028\u0041\u007A\u0259\u0072\u0062\u0061\u0079\u0063\u0061\u006E\u0063\u0061\u0029", false, 0x0005, "AZ", "AZE", "\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E", "\u0041\u007A\u0259\u0072\u0062\u0061\u0079\u0063\u0061\u006E\u0063\u0061", "\u0041\u005A\u004D", "\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E\u0069\u0061\u006E\u0020\u004D\u0061\u006E\u0061\u0074", "\u006D\u0061\u006E\u0061\u0074", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006D\u0061\u006E\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0051\u0072\u0069\u0071\u006F\u0072\u0069\u0061\u006E", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0042", "\u0042\u0065", "\u00C7\u0061", "\u00C7", "\u0043\u0061", "\u0043", "\u015E" ], [ "\u0042\u0061\u007A\u0061\u0072", "\u0042\u0061\u007A\u0061\u0072\u00A0\u0065\u0072\u0074\u0259\u0073\u0069", "\u00C7\u0259\u0072\u015F\u0259\u006E\u0062\u0259\u00A0\u0061\u0078\u015F\u0061\u006D\u0131", "\u00C7\u0259\u0072\u015F\u0259\u006E\u0062\u0259", "\u0043\u00FC\u006D\u0259\u00A0\u0061\u0078\u015F\u0061\u006D\u0131", "\u0043\u00FC\u006D\u0259", "\u015E\u0259\u006E\u0062\u0259" ], [ "\u0059\u0061\u006E", "\u0046\u0065\u0076", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u0130\u0079\u0075\u006E", "\u0130\u0079\u0075\u006C", "\u0041\u0076\u0067", "\u0053\u0065\u006E", "\u004F\u006B\u0074", "\u004E\u006F\u0079", "\u0044\u0065\u006B", "" ], [ "\u0059\u0061\u006E\u0076\u0061\u0072", "\u0046\u0065\u0076\u0072\u0061\u006C", "\u004D\u0061\u0072\u0074", "\u0041\u0070\u0072\u0065\u006C", "\u004D\u0061\u0079", "\u0130\u0079\u0075\u006E", "\u0130\u0079\u0075\u006C", "\u0041\u0076\u0067\u0075\u0073\u0074", "\u0053\u0065\u006E\u0074\u0079\u0061\u0062\u0072", "\u004F\u006B\u0074\u0079\u0061\u0062\u0072", "\u004E\u006F\u0079\u0061\u0062\u0072", "\u0044\u0065\u006B\u0061\u0062\u0072", "" ] }, -{ 0x042D, 0x002D, "eu-ES", "eu", "eus", "eu-ES", "\u0042\u0061\u0073\u0071\u0075\u0065\u0020\u0028\u0042\u0061\u0073\u0071\u0075\u0065\u0029", "\u0065\u0075\u0073\u006B\u0061\u0072\u0061\u0020\u0028\u0065\u0075\u0073\u006B\u0061\u0072\u0061\u0029", false, 0x00D9, "ES", "ESP", "\u0053\u0070\u0061\u0069\u006E", "\u0045\u0073\u0070\u0061\u0069\u006E\u0069\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u0045\u0064\u005A", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0075", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0075", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0065\u0067\u0075\u0074\u0065\u0067\u0069\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006F\u0074\u0061\u0072\u0072\u0061", 1, 0, "\u002F", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\u002E\'\u0065\u006B\u006F\'\u0020\u004D\u004D\u004D\u004D\'\u006B\u0020\'\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u0079\u0079\u0079\u0079\u002E\'\u0065\u006B\u006F\'\u0020\u004D\u004D\u004D\u004D", [ "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\u002E\'\u0065\u006B\u006F\'\u0020\u004D\u004D\u004D\u004D\'\u006B\u0020\'\u0064" ], [ "\u0079\u0079\u0079\u0079\u002E\'\u0065\u006B\u006F\'\u0020\u004D\u004D\u004D\u004D" ], [ "\u0069\u0067\u002E", "\u0061\u006C\u002E", "\u0061\u0073\u002E", "\u0061\u007A\u002E", "\u006F\u0067\u002E", "\u006F\u0072\u002E", "\u006C\u0072\u002E" ], [ "\u0069\u0067\u0061\u006E\u0064\u0065\u0061", "\u0061\u0073\u0074\u0065\u006C\u0065\u0068\u0065\u006E\u0061", "\u0061\u0073\u0074\u0065\u0061\u0072\u0074\u0065\u0061", "\u0061\u0073\u0074\u0065\u0061\u007A\u006B\u0065\u006E\u0061", "\u006F\u0073\u0074\u0065\u0067\u0075\u006E\u0061", "\u006F\u0073\u0074\u0069\u0072\u0061\u006C\u0061", "\u006C\u0061\u0072\u0075\u006E\u0062\u0061\u0074\u0061" ], [ "\u0075\u0072\u0074\u002E", "\u006F\u0074\u0073\u002E", "\u006D\u0061\u0072\u002E", "\u0061\u0070\u0069\u002E", "\u006D\u0061\u0069\u002E", "\u0065\u006B\u0061\u002E", "\u0075\u007A\u0074\u002E", "\u0061\u0062\u0075\u002E", "\u0069\u0072\u0061\u002E", "\u0075\u0072\u0072\u002E", "\u0061\u007A\u0061\u002E", "\u0061\u0062\u0065\u002E", "" ], [ "\u0075\u0072\u0074\u0061\u0072\u0072\u0069\u006C\u0061", "\u006F\u0074\u0073\u0061\u0069\u006C\u0061", "\u006D\u0061\u0072\u0074\u0078\u006F\u0061", "\u0061\u0070\u0069\u0072\u0069\u006C\u0061", "\u006D\u0061\u0069\u0061\u0074\u007A\u0061", "\u0065\u006B\u0061\u0069\u006E\u0061", "\u0075\u007A\u0074\u0061\u0069\u006C\u0061", "\u0061\u0062\u0075\u007A\u0074\u0075\u0061", "\u0069\u0072\u0061\u0069\u006C\u0061", "\u0075\u0072\u0072\u0069\u0061", "\u0061\u007A\u0061\u0072\u006F\u0061", "\u0061\u0062\u0065\u006E\u0064\u0075\u0061", "" ] }, -{ 0x042F, 0x002F, "mk-MK", "mk", "mkd", "mk-MK", "\u004D\u0061\u0063\u0065\u0064\u006F\u006E\u0069\u0061\u006E\u0020\u0028\u0046\u006F\u0072\u006D\u0065\u0072\u0020\u0059\u0075\u0067\u006F\u0073\u006C\u0061\u0076\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u004D\u0061\u0063\u0065\u0064\u006F\u006E\u0069\u0061\u0029", "\u043C\u0430\u043A\u0435\u0434\u043E\u043D\u0441\u043A\u0438\u0020\u0458\u0430\u0437\u0438\u043A\u0020\u0028\u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430\u0029", false, 0x4CA2, "MK", "MKD", "\u004D\u0061\u0063\u0065\u0064\u006F\u006E\u0069\u0061\u0020\u0028\u0046\u0059\u0052\u004F\u004D\u0029", "\u041C\u0430\u043A\u0435\u0434\u043E\u043D\u0438\u0458\u0430", "\u004D\u004B\u0044", "\u004D\u0061\u0063\u0065\u0064\u006F\u006E\u0069\u0061\u006E\u0020\u0044\u0065\u006E\u0061\u0072", "\u0434\u0435\u043D\u0430\u0440", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0434\u0435\u043D\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0435\u0433\u043E\u0440\u0438\u0458\u0430\u043D\u0441\u043A\u0438\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u043D\u0435\u0434", "\u043F\u043E\u043D", "\u0432\u0442\u0440", "\u0441\u0440\u0434", "\u0447\u0435\u0442", "\u043F\u0435\u0442", "\u0441\u0430\u0431" ], [ "\u043D\u0435\u0434\u0435\u043B\u0430", "\u043F\u043E\u043D\u0435\u0434\u0435\u043B\u043D\u0438\u043A", "\u0432\u0442\u043E\u0440\u043D\u0438\u043A", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0440\u0442\u043E\u043A", "\u043F\u0435\u0442\u043E\u043A", "\u0441\u0430\u0431\u043E\u0442\u0430" ], [ "\u0458\u0430\u043D", "\u0444\u0435\u0432", "\u043C\u0430\u0440", "\u0430\u043F\u0440", "\u043C\u0430\u0458", "\u0458\u0443\u043D", "\u0458\u0443\u043B", "\u0430\u0432\u0433", "\u0441\u0435\u043F", "\u043E\u043A\u0442", "\u043D\u043E\u0435", "\u0434\u0435\u043A", "" ], [ "\u0458\u0430\u043D\u0443\u0430\u0440\u0438", "\u0444\u0435\u0432\u0440\u0443\u0430\u0440\u0438", "\u043C\u0430\u0440\u0442", "\u0430\u043F\u0440\u0438\u043B", "\u043C\u0430\u0458", "\u0458\u0443\u043D\u0438", "\u0458\u0443\u043B\u0438", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043F\u0442\u0435\u043C\u0432\u0440\u0438", "\u043E\u043A\u0442\u043E\u043C\u0432\u0440\u0438", "\u043D\u043E\u0435\u043C\u0432\u0440\u0438", "\u0434\u0435\u043A\u0435\u043C\u0432\u0440\u0438", "" ] }, -{ 0x0436, 0x0036, "af-ZA", "af", "afr", "af-ZA", "\u0041\u0066\u0072\u0069\u006B\u0061\u0061\u006E\u0073\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0041\u0066\u0072\u0069\u006B\u0061\u0061\u006E\u0073\u0020\u0028\u0053\u0075\u0069\u0064\u0020\u0041\u0066\u0072\u0069\u006B\u0061\u0029", false, 0x00D1, "ZA", "ZAF", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0053\u0075\u0069\u0064\u0020\u0041\u0066\u0072\u0069\u006B\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0073\u0065\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 0, "\u002F", "\u003A", "", "\u006E\u006D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F\u006E", "\u004D\u0061\u0061\u006E", "\u0044\u0069\u006E\u0073", "\u0057\u006F\u0065\u006E", "\u0044\u006F\u006E\u0064", "\u0056\u0072\u0079", "\u0053\u0061\u0074" ], [ "\u0053\u006F\u006E\u0064\u0061\u0067", "\u004D\u0061\u0061\u006E\u0064\u0061\u0067", "\u0044\u0069\u006E\u0073\u0064\u0061\u0067", "\u0057\u006F\u0065\u006E\u0073\u0064\u0061\u0067", "\u0044\u006F\u006E\u0064\u0065\u0072\u0064\u0061\u0067", "\u0056\u0072\u0079\u0064\u0061\u0067", "\u0053\u0061\u0074\u0065\u0072\u0064\u0061\u0067" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0073", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0069\u0065", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0069\u0065", "\u004D\u0061\u0061\u0072\u0074", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0065\u0069", "\u004A\u0075\u006E\u0069\u0065", "\u004A\u0075\u006C\u0069\u0065", "\u0041\u0075\u0067\u0075\u0073\u0074\u0075\u0073", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0437, 0x0037, "ka-GE", "ka", "kat", "ka-GE", "\u0047\u0065\u006F\u0072\u0067\u0069\u0061\u006E\u0020\u0028\u0047\u0065\u006F\u0072\u0067\u0069\u0061\u0029", "\u10E5\u10D0\u10E0\u10D7\u10E3\u10DA\u10D8\u0020\u0028\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD\u0029", false, 0x0058, "GE", "GEO", "\u0047\u0065\u006F\u0072\u0067\u0069\u0061", "\u10E1\u10D0\u10E5\u10D0\u10E0\u10D7\u10D5\u10D4\u10DA\u10DD", "\u0047\u0045\u004C", "\u004C\u0061\u0072\u0069", "\u10DA\u10D0\u10E0\u10D8", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u004C\u0061\u0072\u0069", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u10D2\u10E0\u10D8\u10D2\u10DD\u10E0\u10D8\u10D0\u10DC\u10E3\u10DA\u10D8\u00A0\u10D9\u10D0\u10DA\u10D4\u10DC\u10D3\u10D0\u10E0\u10D8", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u0020\'\u10EC\u10DA\u10D8\u10E1\'\u0020\u0064\u0064\u0020\u004D\u004D\u002C\u0020\u0064\u0064\u0064\u0064", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u10EC\u10DA\u10D8\u10E1\'\u0020\u0064\u0064\u0020\u004D\u004D\u002C\u0020\u0064\u0064\u0064\u0064" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u10D9\u10D5\u10D8\u10E0\u10D0", "\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8", "\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8" ], [ "\u10D9\u10D5\u10D8\u10E0\u10D0", "\u10DD\u10E0\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10E1\u10D0\u10DB\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10DD\u10D7\u10EE\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10EE\u10E3\u10D7\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8", "\u10DE\u10D0\u10E0\u10D0\u10E1\u10D9\u10D4\u10D5\u10D8", "\u10E8\u10D0\u10D1\u10D0\u10D7\u10D8" ], [ "\u10D8\u10D0\u10DC", "\u10D7\u10D4\u10D1", "\u10DB\u10D0\u10E0", "\u10D0\u10DE\u10E0", "\u10DB\u10D0\u10D8\u10E1", "\u10D8\u10D5\u10DC", "\u10D8\u10D5\u10DA", "\u10D0\u10D2\u10D5", "\u10E1\u10D4\u10E5", "\u10DD\u10E5\u10E2", "\u10DC\u10DD\u10D4\u10DB", "\u10D3\u10D4\u10D9", "" ], [ "\u10D8\u10D0\u10DC\u10D5\u10D0\u10E0\u10D8", "\u10D7\u10D4\u10D1\u10D4\u10E0\u10D5\u10D0\u10DA\u10D8", "\u10DB\u10D0\u10E0\u10E2\u10D8", "\u10D0\u10DE\u10E0\u10D8\u10DA\u10D8", "\u10DB\u10D0\u10D8\u10E1\u10D8", "\u10D8\u10D5\u10DC\u10D8\u10E1\u10D8", "\u10D8\u10D5\u10DA\u10D8\u10E1\u10D8", "\u10D0\u10D2\u10D5\u10D8\u10E1\u10E2\u10DD", "\u10E1\u10D4\u10E5\u10E2\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8", "\u10DD\u10E5\u10E2\u10DD\u10DB\u10D1\u10D4\u10E0\u10D8", "\u10DC\u10DD\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8", "\u10D3\u10D4\u10D9\u10D4\u10DB\u10D1\u10D4\u10E0\u10D8", "" ] }, -{ 0x0438, 0x0038, "fo-FO", "fo", "fao", "fo-FO", "\u0046\u0061\u0072\u006F\u0065\u0073\u0065\u0020\u0028\u0046\u0061\u0072\u006F\u0065\u0020\u0049\u0073\u006C\u0061\u006E\u0064\u0073\u0029", "\u0066\u00F8\u0072\u006F\u0079\u0073\u006B\u0074\u0020\u0028\u0046\u00F8\u0072\u006F\u0079\u0061\u0072\u0029", false, 0x0051, "FO", "FRO", "\u0046\u0061\u0072\u006F\u0065\u0020\u0049\u0073\u006C\u0061\u006E\u0064\u0073", "\u0046\u00F8\u0072\u006F\u0079\u0061\u0072", "\u0044\u004B\u004B", "\u0044\u0061\u006E\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0065", "\u0044\u0061\u006E\u0073\u006B\u0020\u006B\u0072\u006F\u006E\u0065", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0069\u0020\u00E1\u006C\u006D\u0061\u006E\u0061\u006B\u006B\u0069\u006E", 1, 2, "\u002D", "\u002E", "", "", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u002E\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u0075\u006E", "\u006D\u00E1\u006E", "\u0074\u00FD\u0073", "\u006D\u0069\u006B", "\u0068\u00F3\u0073", "\u0066\u0072\u00ED", "\u006C\u0065\u0079\u0067" ], [ "\u0073\u0075\u006E\u006E\u0075\u0064\u0061\u0067\u0075\u0072", "\u006D\u00E1\u006E\u0061\u0064\u0061\u0067\u0075\u0072", "\u0074\u00FD\u0073\u0064\u0061\u0067\u0075\u0072", "\u006D\u0069\u006B\u0075\u0064\u0061\u0067\u0075\u0072", "\u0068\u00F3\u0073\u0064\u0061\u0067\u0075\u0072", "\u0066\u0072\u00ED\u0067\u0067\u006A\u0061\u0064\u0061\u0067\u0075\u0072", "\u006C\u0065\u0079\u0067\u0061\u0072\u0064\u0061\u0067\u0075\u0072" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0073", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u00ED\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0439, 0x0039, "hi-IN", "hi", "hin", "hi-IN", "\u0048\u0069\u006E\u0064\u0069\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0939\u093F\u0902\u0926\u0940\u0020\u0028\u092D\u093E\u0930\u0924\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u092D\u093E\u0930\u0924", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0930\u0941\u092A\u092F\u093E", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0930\u0941", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0905\u0902\u0917\u094D\u0930\u0947\u091C\u093C\u0940\u00A0\u0915\u0948\u0932\u0947\u0928\u094D\u0921\u0930", 1, 0, "\u002D", "\u003A", "\u092A\u0942\u0930\u094D\u0935\u093E\u0939\u094D\u0928", "\u0905\u092A\u0930\u093E\u0939\u094D\u0928", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0930\u0935\u093F\u002E", "\u0938\u094B\u092E\u002E", "\u092E\u0902\u0917\u0932\u002E", "\u092C\u0941\u0927\u002E", "\u0917\u0941\u0930\u0941\u002E", "\u0936\u0941\u0915\u094D\u0930\u002E", "\u0936\u0928\u093F\u002E" ], [ "\u0930\u0935\u093F\u0935\u093E\u0930", "\u0938\u094B\u092E\u0935\u093E\u0930", "\u092E\u0902\u0917\u0932\u0935\u093E\u0930", "\u092C\u0941\u0927\u0935\u093E\u0930", "\u0917\u0941\u0930\u0941\u0935\u093E\u0930", "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930", "\u0936\u0928\u093F\u0935\u093E\u0930" ], [ "\u091C\u0928\u0935\u0930\u0940", "\u092B\u0930\u0935\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u0905\u092A\u094D\u0930\u0948\u0932", "\u092E\u0908", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u093E\u0908", "\u0905\u0917\u0938\u094D\u0924", "\u0938\u093F\u0924\u092E\u094D\u092C\u0930", "\u0905\u0915\u094D\u0924\u0942\u092C\u0930", "\u0928\u0935\u092E\u094D\u092C\u0930", "\u0926\u093F\u0938\u092E\u094D\u092C\u0930", "" ], [ "\u091C\u0928\u0935\u0930\u0940", "\u092B\u0930\u0935\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u0905\u092A\u094D\u0930\u0948\u0932", "\u092E\u0908", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u093E\u0908", "\u0905\u0917\u0938\u094D\u0924", "\u0938\u093F\u0924\u092E\u094D\u092C\u0930", "\u0905\u0915\u094D\u0924\u0942\u092C\u0930", "\u0928\u0935\u092E\u094D\u092C\u0930", "\u0926\u093F\u0938\u092E\u094D\u092C\u0930", "" ] }, -{ 0x043E, 0x003E, "ms-MY", "ms", "msa", "ms-MY", "\u004D\u0061\u006C\u0061\u0079\u0020\u0028\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061\u0029", "\u0042\u0061\u0068\u0061\u0073\u0061\u0020\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061\u0020\u0028\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061\u0029", false, 0x00A7, "MY", "MYS", "\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061", "\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061", "\u004D\u0059\u0052", "\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061\u006E\u0020\u0052\u0069\u006E\u0067\u0067\u0069\u0074", "\u0052\u0069\u006E\u0067\u0067\u0069\u0074\u0020\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061", true, 2, 1, 0, 0, 0, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0020\u004D\u0061\u0073\u0065\u0068\u0069", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0041\u0068\u0061\u0064", "\u0049\u0073\u006E\u0069\u006E", "\u0053\u0065\u006C", "\u0052\u0061\u0062\u0075", "\u004B\u0068\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u0041\u0068\u0061\u0064", "\u0049\u0073\u006E\u0069\u006E", "\u0053\u0065\u006C\u0061\u0073\u0061", "\u0052\u0061\u0062\u0075", "\u004B\u0068\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0063", "\u0041\u0070\u0072", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u004F\u0067\u006F\u0073", "\u0053\u0065\u0070\u0074", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0069\u0073", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u004D\u0061\u0063", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C\u0061\u0069", "\u004F\u0067\u006F\u0073", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0069\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x043F, 0x003F, "kk-KZ", "kk", "kaz", "kk-KZ", "\u004B\u0061\u007A\u0061\u006B\u0068\u0020\u0028\u004B\u0061\u007A\u0061\u006B\u0068\u0073\u0074\u0061\u006E\u0029", "\u049A\u0430\u0437\u0430\u049B\u0020\u0028\u049A\u0430\u0437\u0430\u049B\u0441\u0442\u0430\u043D\u0029", false, 0x0089, "KZ", "KAZ", "\u004B\u0061\u007A\u0061\u006B\u0068\u0073\u0074\u0061\u006E", "\u049A\u0430\u0437\u0430\u049B\u0441\u0442\u0430\u043D", "\u004B\u005A\u0054", "\u0054\u0065\u006E\u0067\u0065", "\u0422", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002D", "\u00A0", "\u0422", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u043A\u04AF\u043D\u0442\u0456\u0437\u0431\u0435\u043A", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0436\u002E\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0436\u002E\'", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\'\u0436\u002E\'" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0416\u043A", "\u0414\u0441", "\u0421\u0441", "\u0421\u0440", "\u0411\u0441", "\u0416\u043C", "\u0421\u043D" ], [ "\u0416\u0435\u043A\u0441\u0435\u043D\u0431\u0456", "\u0414\u04AF\u0439\u0441\u0435\u043D\u0431\u0456", "\u0421\u0435\u0439\u0441\u0435\u043D\u0431\u0456", "\u0421\u04D9\u0440\u0441\u0435\u043D\u0431\u0456", "\u0411\u0435\u0439\u0441\u0435\u043D\u0431\u0456", "\u0416\u04B1\u043C\u0430", "\u0421\u0435\u043D\u0431\u0456" ], [ "\u049A\u0430\u04A3", "\u0410\u049B\u043F", "\u041D\u0430\u0443", "\u0421\u04D9\u0443", "\u041C\u0430\u043C", "\u041C\u0430\u0443", "\u0428\u0456\u043B", "\u0422\u0430\u043C", "\u049A\u044B\u0440", "\u049A\u0430\u0437", "\u049A\u0430\u0440", "\u0416\u0435\u043B", "" ], [ "\u049B\u0430\u04A3\u0442\u0430\u0440", "\u0430\u049B\u043F\u0430\u043D", "\u043D\u0430\u0443\u0440\u044B\u0437", "\u0441\u04D9\u0443\u0456\u0440", "\u043C\u0430\u043C\u044B\u0440", "\u043C\u0430\u0443\u0441\u044B\u043C", "\u0448\u0456\u043B\u0434\u0435", "\u0442\u0430\u043C\u044B\u0437", "\u049B\u044B\u0440\u043A\u04AF\u0439\u0435\u043A", "\u049B\u0430\u0437\u0430\u043D", "\u049B\u0430\u0440\u0430\u0448\u0430", "\u0436\u0435\u043B\u0442\u043E\u049B\u0441\u0430\u043D", "" ] }, -{ 0x0440, 0x0040, "ky-KG", "ky", "kir", "ky-KG", "\u004B\u0079\u0072\u0067\u0079\u007A\u0020\u0028\u004B\u0079\u0072\u0067\u0079\u007A\u0073\u0074\u0061\u006E\u0029", "\u041A\u044B\u0440\u0433\u044B\u0437\u0020\u0028\u041A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D\u0029", false, 0x0082, "KG", "KGZ", "\u004B\u0079\u0072\u0067\u0079\u007A\u0073\u0074\u0061\u006E", "\u041A\u044B\u0440\u0433\u044B\u0437\u0441\u0442\u0430\u043D", "\u004B\u0047\u0053", "\u0073\u006F\u006D", "\u0441\u043E\u043C", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002D", "\u00A0", "\u0441\u043E\u043C", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u00A0\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044B", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\'\u002D\'\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002D\u0436\u002E\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002D\u0436\u002E\'", [ "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\'\u002D\'\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002D\u0436\u002E\'" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\'\u002D\u0436\u002E\'" ], [ "\u0416\u0448", "\u0414\u0448", "\u0428\u0448", "\u0428\u0440", "\u0411\u0448", "\u0416\u043C", "\u0418\u0448" ], [ "\u0416\u0435\u043A\u0448\u0435\u043C\u0431\u0438", "\u0414\u04AF\u0439\u0448\u04E9\u043C\u0431\u04AF", "\u0428\u0435\u0439\u0448\u0435\u043C\u0431\u0438", "\u0428\u0430\u0440\u0448\u0435\u043C\u0431\u0438", "\u0411\u0435\u0439\u0448\u0435\u043C\u0431\u0438", "\u0416\u0443\u043C\u0430", "\u0418\u0448\u0435\u043C\u0431\u0438" ], [ "\u042F\u043D\u0432", "\u0424\u0435\u0432", "\u041C\u0430\u0440", "\u0410\u043F\u0440", "\u041C\u0430\u0439", "\u0418\u044E\u043D", "\u0418\u044E\u043B", "\u0410\u0432\u0433", "\u0421\u0435\u043D", "\u041E\u043A\u0442", "\u041D\u043E\u044F", "\u0414\u0435\u043A", "" ], [ "\u042F\u043D\u0432\u0430\u0440\u044C", "\u0424\u0435\u0432\u0440\u0430\u043B\u044C", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B\u044C", "\u041C\u0430\u0439", "\u0418\u044E\u043D\u044C", "\u0418\u044E\u043B\u044C", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C", "\u041E\u043A\u0442\u044F\u0431\u0440\u044C", "\u041D\u043E\u044F\u0431\u0440\u044C", "\u0414\u0435\u043A\u0430\u0431\u0440\u044C", "" ] }, -{ 0x0441, 0x0041, "sw-KE", "sw", "swa", "sw-KE", "\u004B\u0069\u0073\u0077\u0061\u0068\u0069\u006C\u0069\u0020\u0028\u004B\u0065\u006E\u0079\u0061\u0029", "\u004B\u0069\u0073\u0077\u0061\u0068\u0069\u006C\u0069\u0020\u0028\u004B\u0065\u006E\u0079\u0061\u0029", false, 0x0081, "KE", "KEN", "\u004B\u0065\u006E\u0079\u0061", "\u004B\u0065\u006E\u0079\u0061", "\u004B\u0045\u0053", "\u004B\u0065\u006E\u0079\u0061\u006E\u0020\u0053\u0068\u0069\u006C\u006C\u0069\u006E\u0067", "\u0053\u0068\u0069\u006C\u0069\u006E\u0067\u0069", false, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0053", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u002F\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0443, 0x0043, "uz-UZ-Latn", "uz", "uzb", "uz-Latn-UZ", "\u0055\u007A\u0062\u0065\u006B\u0020\u0028\u004C\u0061\u0074\u0069\u006E\u002C\u0020\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E\u0029", "\u0055\u0027\u007A\u0062\u0065\u006B\u0020\u0028\u0055\u0027\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u006F\u006E\u0020\u0052\u0065\u0073\u0070\u0075\u0062\u006C\u0069\u006B\u0061\u0073\u0069\u0029", false, 0x00F7, "UZ", "UZB", "\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E", "\u0055\u0027\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u006F\u006E\u0020\u0052\u0065\u0073\u0070\u0075\u0062\u006C\u0069\u006B\u0061\u0073\u0069", "\u0055\u005A\u0053", "\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E\u0020\u0053\u0075\u006D", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 0, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0073\u0075\u0027\u006D", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0069\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0069", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u0020\'\u0079\u0069\u006C\'\u0020\u0064\u002D\u004D\u004D\u004D\u004D", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002D\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u0079\u0069\u006C\'\u0020\u0064\u002D\u004D\u004D\u004D\u004D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0079\u0061\u006B\u002E", "\u0064\u0073\u0068\u002E", "\u0073\u0065\u0073\u0068\u002E", "\u0063\u0068\u0072\u002E", "\u0070\u0073\u0068\u002E", "\u006A\u006D\u002E", "\u0073\u0068\u002E" ], [ "\u0079\u0061\u006B\u0073\u0068\u0061\u006E\u0062\u0061", "\u0064\u0075\u0073\u0068\u0061\u006E\u0062\u0061", "\u0073\u0065\u0073\u0068\u0061\u006E\u0062\u0061", "\u0063\u0068\u006F\u0072\u0073\u0068\u0061\u006E\u0062\u0061", "\u0070\u0061\u0079\u0073\u0068\u0061\u006E\u0062\u0061", "\u006A\u0075\u006D\u0061", "\u0073\u0068\u0061\u006E\u0062\u0061" ], [ "\u0079\u0061\u006E\u0076\u0061\u0072", "\u0066\u0065\u0076\u0072\u0061\u006C", "\u006D\u0061\u0072\u0074", "\u0061\u0070\u0072\u0065\u006C", "\u006D\u0061\u0079", "\u0069\u0079\u0075\u006E", "\u0069\u0079\u0075\u006C", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u006E\u0074\u0079\u0061\u0062\u0072", "\u006F\u006B\u0074\u0079\u0061\u0062\u0072", "\u006E\u006F\u0079\u0061\u0062\u0072", "\u0064\u0065\u006B\u0061\u0062\u0072", "" ], [ "\u0079\u0061\u006E\u0076\u0061\u0072", "\u0066\u0065\u0076\u0072\u0061\u006C", "\u006D\u0061\u0072\u0074", "\u0061\u0070\u0072\u0065\u006C", "\u006D\u0061\u0079", "\u0069\u0079\u0075\u006E", "\u0069\u0079\u0075\u006C", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u006E\u0074\u0079\u0061\u0062\u0072", "\u006F\u006B\u0074\u0079\u0061\u0062\u0072", "\u006E\u006F\u0079\u0061\u0062\u0072", "\u0064\u0065\u006B\u0061\u0062\u0072", "" ] }, -{ 0x0444, 0x0044, "tt-RU", "tt", "tat", "tt-RU", "\u0054\u0061\u0074\u0061\u0072\u0020\u0028\u0052\u0075\u0073\u0073\u0069\u0061\u0029", "\u0422\u0430\u0442\u0430\u0440\u0020\u0028\u0420\u043E\u0441\u0441\u0438\u044F\u0029", false, 0x00CB, "RU", "RUS", "\u0052\u0075\u0073\u0073\u0069\u0061", "\u0420\u043E\u0441\u0441\u0438\u044F", "\u0052\u0055\u0052", "\u0052\u0075\u0073\u0073\u0069\u0061\u006E\u0020\u0052\u0075\u0062\u006C\u0065", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0440\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0413\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u00A0\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u0435", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u042F\u043A\u0448", "\u0414\u04AF\u0448", "\u0421\u0438\u0448", "\u0427\u04D9\u0440\u0448", "\u041F\u04D9\u043D\u0497", "\u0496\u043E\u043C", "\u0428\u0438\u043C" ], [ "\u042F\u043A\u0448\u04D9\u043C\u0431\u0435", "\u0414\u04AF\u0448\u04D9\u043C\u0431\u0435", "\u0421\u0438\u0448\u04D9\u043C\u0431\u0435", "\u0427\u04D9\u0440\u0448\u04D9\u043C\u0431\u0435", "\u041F\u04D9\u043D\u0497\u0435\u0448\u04D9\u043C\u0431\u0435", "\u0496\u043E\u043C\u0433\u0430", "\u0428\u0438\u043C\u0431\u04D9" ], [ "\u0413\u044B\u0439\u043D\u0432", "\u0424\u0435\u0432", "\u041C\u0430\u0440", "\u0410\u043F\u0440", "\u041C\u0430\u0439", "\u0418\u044E\u043D", "\u0418\u044E\u043B", "\u0410\u0432\u0433", "\u0421\u0435\u043D", "\u041E\u043A\u0442", "\u041D\u043E\u044F", "\u0414\u0435\u043A", "" ], [ "\u0413\u044B\u0439\u043D\u0432\u0430\u0440\u044C", "\u0424\u0435\u0432\u0440\u0430\u043B\u044C", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B\u044C", "\u041C\u0430\u0439", "\u0418\u044E\u043D\u044C", "\u0418\u044E\u043B\u044C", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u044F\u0431\u0440\u044C", "\u041E\u043A\u0442\u044F\u0431\u0440\u044C", "\u041D\u043E\u044F\u0431\u0440\u044C", "\u0414\u0435\u043A\u0430\u0431\u0440\u044C", "" ] }, -{ 0x0446, 0x0046, "pa-IN", "pa", "pan", "pa-IN", "\u0050\u0075\u006E\u006A\u0061\u0062\u0069\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0A2A\u0A70\u0A1C\u0A3E\u0A2C\u0A40\u0020\u0028\u0A2D\u0A3E\u0A30\u0A24\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u0A2D\u0A3E\u0A30\u0A24", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0A30\u0A41\u0A2A\u0A3F\u0A06", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0A30\u0A41", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0A66", "\u0A67", "\u0A68", "\u0A69", "\u0A6A", "\u0A6B", "\u0A6C", "\u0A6D", "\u0A6E", "\u0A6F" ], 1, [ 1 ], "\u0A05\u0A70\u0A17\u0A4D\u0A30\u0A47\u0A5B\u0A40\u00A0\u0A15\u0A32\u0A70\u0A21\u0A30", 1, 0, "\u002D", "\u003A", "\u0A38\u0A35\u0A47\u0A30\u0A47", "\u0A36\u0A3E\u0A2E", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0A10\u0A24\u002E", "\u0A38\u0A4B\u0A2E\u002E", "\u0A2E\u0A70\u0A17\u0A32\u002E", "\u0A2C\u0A41\u0A27\u002E", "\u0A35\u0A40\u0A30\u002E", "\u0A36\u0A41\u0A15\u0A30\u002E", "\u0A36\u0A28\u0A40\u002E" ], [ "\u0A10\u0A24\u0A35\u0A3E\u0A30", "\u0A38\u0A4B\u0A2E\u0A35\u0A3E\u0A30", "\u0A2E\u0A70\u0A17\u0A32\u0A35\u0A3E\u0A30", "\u0A2C\u0A41\u0A27\u0A35\u0A3E\u0A30", "\u0A35\u0A40\u0A30\u0A35\u0A3E\u0A30", "\u0A36\u0A41\u0A71\u0A15\u0A30\u0A35\u0A3E\u0A30", "\u0A36\u0A28\u0A40\u0A1A\u0A30\u0A35\u0A3E\u0A30" ], [ "\u0A1C\u0A28\u0A35\u0A30\u0A40", "\u0A5E\u0A30\u0A35\u0A30\u0A40", "\u0A2E\u0A3E\u0A30\u0A1A", "\u0A05\u0A2A\u0A4D\u0A30\u0A48\u0A32", "\u0A2E\u0A08", "\u0A1C\u0A42\u0A28", "\u0A1C\u0A41\u0A32\u0A3E\u0A08", "\u0A05\u0A17\u0A38\u0A24", "\u0A38\u0A24\u0A70\u0A2C\u0A30", "\u0A05\u0A15\u0A24\u0A42\u0A2C\u0A30", "\u0A28\u0A35\u0A70\u0A2C\u0A30", "\u0A26\u0A38\u0A70\u0A2C\u0A30", "" ], [ "\u0A1C\u0A28\u0A35\u0A30\u0A40", "\u0A5E\u0A30\u0A35\u0A30\u0A40", "\u0A2E\u0A3E\u0A30\u0A1A", "\u0A05\u0A2A\u0A4D\u0A30\u0A48\u0A32", "\u0A2E\u0A08", "\u0A1C\u0A42\u0A28", "\u0A1C\u0A41\u0A32\u0A3E\u0A08", "\u0A05\u0A17\u0A38\u0A24", "\u0A38\u0A24\u0A70\u0A2C\u0A30", "\u0A05\u0A15\u0A24\u0A42\u0A2C\u0A30", "\u0A28\u0A35\u0A70\u0A2C\u0A30", "\u0A26\u0A38\u0A70\u0A2C\u0A30", "" ] }, -{ 0x0447, 0x0047, "gu-IN", "gu", "guj", "gu-IN", "\u0047\u0075\u006A\u0061\u0072\u0061\u0074\u0069\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0A97\u0AC1\u0A9C\u0AB0\u0ABE\u0AA4\u0AC0\u0020\u0028\u0AAD\u0ABE\u0AB0\u0AA4\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u0AAD\u0ABE\u0AB0\u0AA4", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0AB0\u0AC2\u0AAA\u0ABF\u0AAF\u0ACB", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0AB0\u0AC2", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0AE6", "\u0AE7", "\u0AE8", "\u0AE9", "\u0AEA", "\u0AEB", "\u0AEC", "\u0AED", "\u0AEE", "\u0AEF" ], 1, [ 1 ], "\u0A85\u0A82\u0A97\u0ACD\u0AB0\u0AC7\u0A9C\u0AC0\u00A0\u0A95\u0AC5\u0AB2\u0AC7\u0AA8\u0ACD\u0AA1\u0AB0", 1, 0, "\u002D", "\u003A", "\u0AAA\u0AC2\u0AB0\u0ACD\u0AB5\u00A0\u0AAE\u0AA7\u0ACD\u0AAF\u0ABE\u0AB9\u0ACD\u0AA8", "\u0A89\u0AA4\u0ACD\u0AA4\u0AB0\u00A0\u0AAE\u0AA7\u0ACD\u0AAF\u0ABE\u0AB9\u0ACD\u0AA8", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0AB0\u0AB5\u0ABF", "\u0AB8\u0ACB\u0AAE", "\u0AAE\u0A82\u0A97\u0AB3", "\u0AAC\u0AC1\u0AA7", "\u0A97\u0AC1\u0AB0\u0AC1", "\u0AB6\u0AC1\u0A95\u0ACD\u0AB0", "\u0AB6\u0AA8\u0ABF" ], [ "\u0AB0\u0AB5\u0ABF\u0AB5\u0ABE\u0AB0", "\u0AB8\u0ACB\u0AAE\u0AB5\u0ABE\u0AB0", "\u0AAE\u0A82\u0A97\u0AB3\u0AB5\u0ABE\u0AB0", "\u0AAC\u0AC1\u0AA7\u0AB5\u0ABE\u0AB0", "\u0A97\u0AC1\u0AB0\u0AC1\u0AB5\u0ABE\u0AB0", "\u0AB6\u0AC1\u0A95\u0ACD\u0AB0\u0AB5\u0ABE\u0AB0", "\u0AB6\u0AA8\u0ABF\u0AB5\u0ABE\u0AB0" ], [ "\u0A9C\u0ABE\u0AA8\u0ACD\u0AAF\u0AC1", "\u0AAB\u0AC7\u0AAC\u0ACD\u0AB0\u0AC1", "\u0AAE\u0ABE\u0AB0\u0ACD\u0A9A", "\u0A8F\u0AAA\u0ACD\u0AB0\u0ABF\u0AB2", "\u0AAE\u0AC7", "\u0A9C\u0AC2\u0AA8", "\u0A9C\u0AC1\u0AB2\u0ABE\u0A88", "\u0A91\u0A97\u0AB8\u0ACD\u0A9F", "\u0AB8\u0AAA\u0ACD\u0A9F\u0AC7", "\u0A91\u0A95\u0ACD\u0A9F\u0ACB", "\u0AA8\u0AB5\u0AC7", "\u0AA1\u0ABF\u0AB8\u0AC7", "" ], [ "\u0A9C\u0ABE\u0AA8\u0ACD\u0AAF\u0AC1\u0A86\u0AB0\u0AC0", "\u0AAB\u0AC7\u0AAC\u0ACD\u0AB0\u0AC1\u0A86\u0AB0\u0AC0", "\u0AAE\u0ABE\u0AB0\u0ACD\u0A9A", "\u0A8F\u0AAA\u0ACD\u0AB0\u0ABF\u0AB2", "\u0AAE\u0AC7", "\u0A9C\u0AC2\u0AA8", "\u0A9C\u0AC1\u0AB2\u0ABE\u0A88", "\u0A91\u0A97\u0AB8\u0ACD\u0A9F", "\u0AB8\u0AAA\u0ACD\u0A9F\u0AC7\u0AAE\u0ACD\u0AAC\u0AB0", "\u0A91\u0A95\u0ACD\u0A9F\u0ACD\u0AAC\u0AB0", "\u0AA8\u0AB5\u0AC7\u0AAE\u0ACD\u0AAC\u0AB0", "\u0AA1\u0ABF\u0AB8\u0AC7\u0AAE\u0ACD\u0AAC\u0AB0", "" ] }, -{ 0x0449, 0x0049, "ta-IN", "ta", "tam", "ta-IN", "\u0054\u0061\u006D\u0069\u006C\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0BA4\u0BAE\u0BBF\u0BB4\u0BCD\u0020\u0028\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u0B87\u0BA8\u0BCD\u0BA4\u0BBF\u0BAF\u0BBE", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0BB0\u0BC2\u0BAA\u0BBE\u0BAF\u0BCD", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0BB0\u0BC2", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0B86\u0B99\u0BCD\u0B95\u0BBF\u0BB2\u00A0\u0BB5\u0BB0\u0BC1\u0B9F\u0BAE\u0BCD", 1, 0, "\u002D", "\u003A", "\u0B95\u0BBE\u0BB2\u0BC8", "\u0BAE\u0BBE\u0BB2\u0BC8", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0B9E\u0BBE", "\u0BA4\u0BBF", "\u0B9A\u0BC6", "\u0BAA\u0BC1", "\u0BB5\u0BBF", "\u0BB5\u0BC6", "\u0B9A" ], [ "\u0B9E\u0BBE\u0BAF\u0BBF\u0BB1\u0BC1", "\u0BA4\u0BBF\u0B99\u0BCD\u0B95\u0BB3\u0BCD", "\u0B9A\u0BC6\u0BB5\u0BCD\u0BB5\u0BBE\u0BAF\u0BCD", "\u0BAA\u0BC1\u0BA4\u0BA9\u0BCD", "\u0BB5\u0BBF\u0BAF\u0BBE\u0BB4\u0BA9\u0BCD", "\u0BB5\u0BC6\u0BB3\u0BCD\u0BB3\u0BBF", "\u0B9A\u0BA9\u0BBF" ], [ "\u0B9C\u0BA9\u002E", "\u0BAA\u0BC6\u0BAA\u0BCD\u002E", "\u0BAE\u0BBE\u0BB0\u0BCD\u002E", "\u0B8F\u0BAA\u0BCD\u002E", "\u0BAE\u0BC7", "\u0B9C\u0BC2\u0BA9\u0BCD", "\u0B9C\u0BC2\u0BB2\u0BC8", "\u0B86\u0B95\u002E", "\u0B9A\u0BC6\u0BAA\u0BCD\u002E", "\u0B85\u0B95\u0BCD\u002E", "\u0BA8\u0BB5\u002E", "\u0B9F\u0BBF\u0B9A\u002E", "" ], [ "\u0B9C\u0BA9\u0BB5\u0BB0\u0BBF", "\u0BAA\u0BC6\u0BAA\u0BCD\u0BB0\u0BB5\u0BB0\u0BBF", "\u0BAE\u0BBE\u0BB0\u0BCD\u0B9A\u0BCD", "\u0B8F\u0BAA\u0BCD\u0BB0\u0BB2\u0BCD", "\u0BAE\u0BC7", "\u0B9C\u0BC2\u0BA9\u0BCD", "\u0B9C\u0BC2\u0BB2\u0BC8", "\u0B86\u0B95\u0BB8\u0BCD\u0B9F\u0BCD", "\u0B9A\u0BC6\u0BAA\u0BCD\u0B9F\u0BAE\u0BCD\u0BAA\u0BB0\u0BCD", "\u0B85\u0B95\u0BCD\u0B9F\u0BCB\u0BAA\u0BB0\u0BCD", "\u0BA8\u0BB5\u0BAE\u0BCD\u0BAA\u0BB0\u0BCD", "\u0B9F\u0BBF\u0B9A\u0BAE\u0BCD\u0BAA\u0BB0\u0BCD", "" ] }, -{ 0x044A, 0x004A, "te-IN", "te", "tel", "te-IN", "\u0054\u0065\u006C\u0075\u0067\u0075\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0C24\u0C46\u0C32\u0C41\u0C17\u0C41\u0020\u0028\u0C2D\u0C3E\u0C30\u0C24\u00A0\u0C26\u0C47\u0C36\u0C02\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u0C2D\u0C3E\u0C30\u0C24\u00A0\u0C26\u0C47\u0C36\u0C02", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0C30\u0C42\u0C2A\u0C3E\u0C2F\u0C3F", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0C30\u0C42", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0C66", "\u0C67", "\u0C68", "\u0C69", "\u0C6A", "\u0C6B", "\u0C6C", "\u0C6D", "\u0C6E", "\u0C6F" ], 1, [ 1 ], "\u0C07\u0C02\u0C17\u0C4D\u0C32\u0C40\u0C37\u0C41\u00A0\u0C15\u0C4D\u0C2F\u0C3E\u0C32\u0C02\u0C21\u0C30\u0C4D", 1, 0, "\u002D", "\u003A", "\u0C2A\u0C42\u0C30\u0C4D\u0C35\u0C3E\u0C39\u0C4D\u0C28", "\u0C05\u0C2A\u0C30\u0C3E\u0C39\u0C4D\u0C28", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0C06\u0C26\u0C3F\u002E", "\u0C38\u0C4B\u0C2E\u002E", "\u0C2E\u0C02\u0C17\u0C33\u002E", "\u0C2C\u0C41\u0C27\u002E", "\u0C17\u0C41\u0C30\u0C41\u002E", "\u0C36\u0C41\u0C15\u0C4D\u0C30\u002E", "\u0C36\u0C28\u0C3F\u002E" ], [ "\u0C06\u0C26\u0C3F\u0C35\u0C3E\u0C30\u0C02", "\u0C38\u0C4B\u0C2E\u0C35\u0C3E\u0C30\u0C02", "\u0C2E\u0C02\u0C17\u0C33\u0C35\u0C3E\u0C30\u0C02", "\u0C2C\u0C41\u0C27\u0C35\u0C3E\u0C30\u0C02", "\u0C17\u0C41\u0C30\u0C41\u0C35\u0C3E\u0C30\u0C02", "\u0C36\u0C41\u0C15\u0C4D\u0C30\u0C35\u0C3E\u0C30\u0C02", "\u0C36\u0C28\u0C3F\u0C35\u0C3E\u0C30\u0C02" ], [ "\u0C1C\u0C28\u0C35\u0C30\u0C3F", "\u0C2B\u0C3F\u0C2C\u0C4D\u0C30\u0C35\u0C30\u0C3F", "\u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C3F", "\u0C0F\u0C2A\u0C4D\u0C30\u0C3F\u0C32\u0C4D", "\u0C2E\u0C47", "\u0C1C\u0C42\u0C28\u0C4D", "\u0C1C\u0C42\u0C32\u0C48", "\u0C06\u0C17\u0C38\u0C4D\u0C1F\u0C41", "\u0C38\u0C46\u0C2A\u0C4D\u0C1F\u0C46\u0C02\u0C2C\u0C30\u0C4D", "\u0C05\u0C15\u0C4D\u0C1F\u0C4B\u0C2C\u0C30\u0C4D", "\u0C28\u0C35\u0C02\u0C2C\u0C30\u0C4D", "\u0C21\u0C3F\u0C38\u0C46\u0C02\u0C2C\u0C30\u0C4D", "" ], [ "\u0C1C\u0C28\u0C35\u0C30\u0C3F", "\u0C2B\u0C3F\u0C2C\u0C4D\u0C30\u0C35\u0C30\u0C3F", "\u0C2E\u0C3E\u0C30\u0C4D\u0C1A\u0C3F", "\u0C0F\u0C2A\u0C4D\u0C30\u0C3F\u0C32\u0C4D", "\u0C2E\u0C47", "\u0C1C\u0C42\u0C28\u0C4D", "\u0C1C\u0C42\u0C32\u0C48", "\u0C06\u0C17\u0C38\u0C4D\u0C1F\u0C41", "\u0C38\u0C46\u0C2A\u0C4D\u0C1F\u0C46\u0C02\u0C2C\u0C30\u0C4D", "\u0C05\u0C15\u0C4D\u0C1F\u0C4B\u0C2C\u0C30\u0C4D", "\u0C28\u0C35\u0C02\u0C2C\u0C30\u0C4D", "\u0C21\u0C3F\u0C38\u0C46\u0C02\u0C2C\u0C30\u0C4D", "" ] }, -{ 0x044B, 0x004B, "kn-IN", "kn", "kan", "kn-IN", "\u004B\u0061\u006E\u006E\u0061\u0064\u0061\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0C95\u0CA8\u0CCD\u0CA8\u0CA1\u0020\u0028\u0CAD\u0CBE\u0CB0\u0CA4\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u0CAD\u0CBE\u0CB0\u0CA4", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0CB0\u0CC2\u0CAA\u0CBE\u0CAF\u0CBF", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0CB0\u0CC2", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0CE6", "\u0CE7", "\u0CE8", "\u0CE9", "\u0CEA", "\u0CEB", "\u0CEC", "\u0CED", "\u0CEE", "\u0CEF" ], 1, [ 1 ], "\u0C87\u0C82\u0C97\u0CCD\u0CB2\u0CBF\u0CB7\u0CCD\u00A0\u0C95\u0CCD\u0CAF\u0CBE\u0CB2\u0CC6\u0C82\u0CA1\u0CB0\u0CCD", 1, 0, "\u002D", "\u003A", "\u0CAA\u0CC2\u0CB0\u0CCD\u0CB5\u0CBE\u0CB9\u0CCD\u0CA8", "\u0C85\u0CAA\u0CB0\u0CBE\u0CB9\u0CCD\u0CA8", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0CAD\u0CBE\u0CA8\u0CC1\u002E", "\u0CB8\u0CCB\u0CAE\u002E", "\u0CAE\u0C82\u0C97\u0CB3\u002E", "\u0CAC\u0CC1\u0CA7\u002E", "\u0C97\u0CC1\u0CB0\u0CC1\u002E", "\u0CB6\u0CC1\u0C95\u0CCD\u0CB0\u002E", "\u0CB6\u0CA8\u0CBF\u002E" ], [ "\u0CAD\u0CBE\u0CA8\u0CC1\u0CB5\u0CBE\u0CB0", "\u0CB8\u0CCB\u0CAE\u0CB5\u0CBE\u0CB0", "\u0CAE\u0C82\u0C97\u0CB3\u0CB5\u0CBE\u0CB0", "\u0CAC\u0CC1\u0CA7\u0CB5\u0CBE\u0CB0", "\u0C97\u0CC1\u0CB0\u0CC1\u0CB5\u0CBE\u0CB0", "\u0CB6\u0CC1\u0C95\u0CCD\u0CB0\u0CB5\u0CBE\u0CB0", "\u0CB6\u0CA8\u0CBF\u0CB5\u0CBE\u0CB0" ], [ "\u0C9C\u0CA8\u0CB5\u0CB0\u0CBF", "\u0CAB\u0CC6\u0CAC\u0CCD\u0CB0\u0CB5\u0CB0\u0CBF", "\u0CAE\u0CBE\u0CB0\u0CCD\u0C9A\u0CCD", "\u0C8E\u0CAA\u0CCD\u0CB0\u0CBF\u0CB2\u0CCD", "\u0CAE\u0CC7", "\u0C9C\u0CC2\u0CA8\u0CCD", "\u0C9C\u0CC1\u0CB2\u0CC8", "\u0C86\u0C97\u0CB8\u0CCD\u0C9F\u0CCD", "\u0CB8\u0CC6\u0CAA\u0CCD\u0C9F\u0C82\u0CAC\u0CB0\u0CCD", "\u0C85\u0C95\u0CCD\u0C9F\u0CCB\u0CAC\u0CB0\u0CCD", "\u0CA8\u0CB5\u0CC6\u0C82\u0CAC\u0CB0\u0CCD", "\u0CA1\u0CBF\u0CB8\u0CC6\u0C82\u0CAC\u0CB0\u0CCD", "" ], [ "\u0C9C\u0CA8\u0CB5\u0CB0\u0CBF", "\u0CAB\u0CC6\u0CAC\u0CCD\u0CB0\u0CB5\u0CB0\u0CBF", "\u0CAE\u0CBE\u0CB0\u0CCD\u0C9A\u0CCD", "\u0C8E\u0CAA\u0CCD\u0CB0\u0CBF\u0CB2\u0CCD", "\u0CAE\u0CC7", "\u0C9C\u0CC2\u0CA8\u0CCD", "\u0C9C\u0CC1\u0CB2\u0CC8", "\u0C86\u0C97\u0CB8\u0CCD\u0C9F\u0CCD", "\u0CB8\u0CC6\u0CAA\u0CCD\u0C9F\u0C82\u0CAC\u0CB0\u0CCD", "\u0C85\u0C95\u0CCD\u0C9F\u0CCB\u0CAC\u0CB0\u0CCD", "\u0CA8\u0CB5\u0CC6\u0C82\u0CAC\u0CB0\u0CCD", "\u0CA1\u0CBF\u0CB8\u0CC6\u0C82\u0CAC\u0CB0\u0CCD", "" ] }, -{ 0x044E, 0x004E, "mr-IN", "mr", "mar", "mr-IN", "\u004D\u0061\u0072\u0061\u0074\u0068\u0069\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u092E\u0930\u093E\u0920\u0940\u0020\u0028\u092D\u093E\u0930\u0924\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u092D\u093E\u0930\u0924", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0930\u0941\u092A\u092F\u093E", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0930\u0941", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0966", "\u0967", "\u0968", "\u0969", "\u096A", "\u096B", "\u096C", "\u096D", "\u096E", "\u096F" ], 1, [ 1 ], "\u0907\u0902\u0917\u094D\u0930\u091C\u0940\u00A0\u0915\u0945\u0932\u0947\u0928\u094D\u0921\u0930", 1, 0, "\u002D", "\u003A", "\u092E\u002E\u092A\u0942\u002E", "\u092E\u002E\u0928\u0902\u002E", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0930\u0935\u093F\u002E", "\u0938\u094B\u092E\u002E", "\u092E\u0902\u0917\u0933\u002E", "\u092C\u0941\u0927\u002E", "\u0917\u0941\u0930\u0941\u002E", "\u0936\u0941\u0915\u094D\u0930\u002E", "\u0936\u0928\u093F\u002E" ], [ "\u0930\u0935\u093F\u0935\u093E\u0930", "\u0938\u094B\u092E\u0935\u093E\u0930", "\u092E\u0902\u0917\u0933\u0935\u093E\u0930", "\u092C\u0941\u0927\u0935\u093E\u0930", "\u0917\u0941\u0930\u0941\u0935\u093E\u0930", "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0930", "\u0936\u0928\u093F\u0935\u093E\u0930" ], [ "\u091C\u093E\u0928\u0947\u002E", "\u092B\u0947\u092C\u094D\u0930\u0941\u002E", "\u092E\u093E\u0930\u094D\u091A", "\u090F\u092A\u094D\u0930\u093F\u0932", "\u092E\u0947", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u0948", "\u0911\u0917\u0938\u094D\u091F", "\u0938\u092A\u094D\u091F\u0947\u0902\u002E", "\u0911\u0915\u094D\u091F\u094B\u002E", "\u0928\u094B\u0935\u094D\u0939\u0947\u0902\u002E", "\u0921\u093F\u0938\u0947\u0902\u002E", "" ], [ "\u091C\u093E\u0928\u0947\u0935\u093E\u0930\u0940", "\u092B\u0947\u092C\u094D\u0930\u0941\u0935\u093E\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u090F\u092A\u094D\u0930\u093F\u0932", "\u092E\u0947", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u0948", "\u0911\u0917\u0938\u094D\u091F", "\u0938\u092A\u094D\u091F\u0947\u0902\u092C\u0930", "\u0911\u0915\u094D\u091F\u094B\u092C\u0930", "\u0928\u094B\u0935\u094D\u0939\u0947\u0902\u092C\u0930", "\u0921\u093F\u0938\u0947\u0902\u092C\u0930", "" ] }, -{ 0x044F, 0x004F, "sa-IN", "sa", "san", "sa-IN", "\u0053\u0061\u006E\u0073\u006B\u0072\u0069\u0074\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0938\u0902\u0938\u094D\u0915\u0943\u0924\u0020\u0028\u092D\u093E\u0930\u0924\u092E\u094D\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u092D\u093E\u0930\u0924\u092E\u094D", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0930\u0941\u094D\u092F\u0915\u092E\u094D", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0930\u0941", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0966", "\u0967", "\u0968", "\u0969", "\u096A", "\u096B", "\u096C", "\u096D", "\u096E", "\u096F" ], 1, [ 1 ], "\u0916\u094D\u0930\u093F\u0938\u094D\u0924\u093E\u092C\u094D\u0926\u00A0\u092A\u091E\u094D\u091C\u093F\u0915\u093E", 0, 0, "\u002D", "\u003A", "\u092A\u0942\u0930\u094D\u0935\u093E\u0939\u094D\u0928", "\u0905\u092A\u0930\u093E\u0939\u094D\u0928", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079\u0020\u0064\u0064\u0064\u0064", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0930\u0935\u093F\u0935\u093E\u0938\u0930\u0903", "\u0938\u094B\u092E\u0935\u093E\u0938\u0930\u0903", "\u092E\u0919\u094D\u0917\u0932\u0935\u093E\u0938\u0930\u0903", "\u092C\u0941\u0927\u0935\u093E\u0938\u0930\u0903", "\u0917\u0941\u0930\u0941\u0935\u093E\u0938\u0930\u0903", "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0938\u0930\u0903", "\u0936\u0928\u093F\u0935\u093E\u0938\u0930\u0903" ], [ "\u0930\u0935\u093F\u0935\u093E\u0938\u0930\u0903", "\u0938\u094B\u092E\u0935\u093E\u0938\u0930\u0903", "\u092E\u0919\u094D\u0917\u0932\u0935\u093E\u0938\u0930\u0903", "\u092C\u0941\u0927\u0935\u093E\u0938\u0930\u0903", "\u0917\u0941\u0930\u0941\u0935\u093E\u0938\u0930\u0903", "\u0936\u0941\u0915\u094D\u0930\u0935\u093E\u0938\u0930\u0903", "\u0936\u0928\u093F\u0935\u093E\u0938\u0930\u0903" ], [ "\u091C\u0928\u0935\u0930\u0940", "\u092B\u0930\u0935\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u0905\u092A\u094D\u0930\u0948\u0932", "\u092E\u0908", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u093E\u0908", "\u0905\u0917\u0938\u094D\u0924", "\u0938\u093F\u0924\u092E\u094D\u092C\u0930", "\u0905\u0915\u094D\u0924\u0942\u092C\u0930", "\u0928\u0935\u092E\u094D\u092C\u0930", "\u0926\u093F\u0938\u092E\u094D\u092C\u0930", "" ], [ "\u091C\u0928\u0935\u0930\u0940", "\u092B\u0930\u0935\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u0905\u092A\u094D\u0930\u0948\u0932", "\u092E\u0908", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u093E\u0908", "\u0905\u0917\u0938\u094D\u0924", "\u0938\u093F\u0924\u092E\u094D\u092C\u0930", "\u0905\u0915\u094D\u0924\u0942\u092C\u0930", "\u0928\u0935\u092E\u094D\u092C\u0930", "\u0926\u093F\u0938\u092E\u094D\u092C\u0930", "" ] }, -{ 0x0450, 0x0050, "mn-MN", "mn", "mon", "mn-MN", "\u004D\u006F\u006E\u0067\u006F\u006C\u0069\u0061\u006E\u0020\u0028\u0043\u0079\u0072\u0069\u006C\u006C\u0069\u0063\u002C\u0020\u004D\u006F\u006E\u0067\u006F\u006C\u0069\u0061\u0029", "\u041C\u043E\u043D\u0433\u043E\u043B\u00A0\u0445\u044D\u043B\u0020\u0028\u041C\u043E\u043D\u0433\u043E\u043B\u00A0\u0443\u043B\u0441\u0029", false, 0x009A, "MN", "MNG", "\u004D\u006F\u006E\u0067\u006F\u006C\u0069\u0061", "\u041C\u043E\u043D\u0433\u043E\u043B\u00A0\u0443\u043B\u0441", "\u004D\u004E\u0054", "\u0054\u0075\u0067\u0072\u0069\u006B", "\u0422\u04E9\u0433\u0440\u04E9\u0433", true, 2, 1, 2, 5, 1, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AE", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0413\u0440\u0435\u0433\u043E\u0440\u0438\u0439\u043D\u00A0\u043E\u043D\u00A0\u0442\u043E\u043E\u043B\u043E\u043B", 1, 0, "\u002E", "\u003A", "", "", "\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064", "\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u0020\'\u043E\u043D\u044B\'\u0020\u004D\u004D\u004D\u004D\u0020\u0064", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u0079\u0079\u0079\u0079\u0020\'\u043E\u043D\'\u0020\u004D\u004D\u004D\u004D", [ "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u043E\u043D\u044B\'\u0020\u004D\u004D\u004D\u004D\u0020\u0064" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u043E\u043D\'\u0020\u004D\u004D\u004D\u004D" ], [ "\u041D\u044F", "\u0414\u0430", "\u041C\u044F", "\u041B\u0445", "\u041F\u04AF", "\u0411\u0430", "\u0411\u044F" ], [ "\u041D\u044F\u043C", "\u0414\u0430\u0432\u0430\u0430", "\u041C\u044F\u0433\u043C\u0430\u0440", "\u041B\u0445\u0430\u0433\u0432\u0430", "\u041F\u04AF\u0440\u044D\u0432", "\u0411\u0430\u0430\u0441\u0430\u043D", "\u0411\u044F\u043C\u0431\u0430" ], [ "\u0049", "\u0049\u0049", "\u0049\u0049\u0049", "\u0049\u0056", "\u0056", "\u0056\u0049", "\u0056\u0049\u0049", "\u0056\u0428", "\u0049\u0058", "\u0058", "\u0058\u0049", "\u0058\u0049\u0049", "" ], [ "\u0031\u00A0\u0434\u04AF\u0433\u044D\u044D\u0440\u00A0\u0441\u0430\u0440", "\u0032\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0033\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0034\u00A0\u0434\u04AF\u0433\u044D\u044D\u0440\u00A0\u0441\u0430\u0440", "\u0035\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0036\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0037\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0038\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0039\u00A0\u0434\u04AF\u0433\u044D\u044D\u0440\u00A0\u0441\u0430\u0440", "\u0031\u0030\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "\u0031\u0031\u00A0\u0434\u04AF\u0433\u044D\u044D\u0440\u00A0\u0441\u0430\u0440", "\u0031\u0032\u00A0\u0434\u0443\u0433\u0430\u0430\u0440\u00A0\u0441\u0430\u0440", "" ] }, -{ 0x0456, 0x0056, "gl-ES", "gl", "glg", "gl-ES", "\u0047\u0061\u006C\u0069\u0063\u0069\u0061\u006E\u0020\u0028\u0047\u0061\u006C\u0069\u0063\u0069\u0061\u006E\u0029", "\u0067\u0061\u006C\u0065\u0067\u006F\u0020\u0028\u0067\u0061\u006C\u0065\u0067\u006F\u0029", false, 0x00D9, "ES", "ESP", "\u0053\u0070\u0061\u0069\u006E", "\u0045\u0073\u0070\u0061\u00F1\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'\u0073\u0073\'\u005C\'\u005C\'\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E\u0073", "\u006D\u0061\u0072", "\u006D\u00E9\u0072", "\u0078\u006F\u0076", "\u0076\u0065\u006E", "\u0073\u0061\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u00E9\u0072\u0063\u006F\u0072\u0065\u0073", "\u0078\u006F\u0076\u0065\u0073", "\u0076\u0065\u006E\u0072\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0078\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0069\u006F", "\u0078\u0075\u00F1", "\u0078\u0075\u006C\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0074", "\u006F\u0075\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u0078\u0061\u006E\u0065\u0069\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0069\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0069\u006F", "\u0078\u0075\u00F1\u006F", "\u0078\u0075\u006C\u006C\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0074\u0065\u006D\u0062\u0072\u006F", "\u006F\u0075\u0074\u0075\u0062\u0072\u006F", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u006F", "\u0064\u0065\u0063\u0065\u006D\u0062\u0072\u006F", "" ] }, -{ 0x0457, 0x0057, "kok-IN", "kok", "kok", "kok-IN", "\u004B\u006F\u006E\u006B\u0061\u006E\u0069\u0020\u0028\u0049\u006E\u0064\u0069\u0061\u0029", "\u0915\u094B\u0902\u0915\u0923\u0940\u0020\u0028\u092D\u093E\u0930\u0924\u0029", false, 0x0071, "IN", "IND", "\u0049\u006E\u0064\u0069\u0061", "\u092D\u093E\u0930\u0924", "\u0049\u004E\u0052", "\u0049\u006E\u0064\u0069\u0061\u006E\u0020\u0052\u0075\u0070\u0065\u0065", "\u0930\u0941\u092A\u092F", true, 2, 1, 2, 12, 2, [ 3, 2 ], [ 3, 2 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0930\u0941", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0966", "\u0967", "\u0968", "\u0969", "\u096A", "\u096B", "\u096C", "\u096D", "\u096E", "\u096F" ], 1, [ 1 ], "\u0907\u0902\u0917\u094D\u0930\u091C\u0940\u00A0\u0915\u0945\u0932\u0947\u0928\u094D\u0921\u0930", 1, 0, "\u002D", "\u003A", "\u092E\u002E\u092A\u0942\u002E", "\u092E\u002E\u0928\u0902\u002E", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0906\u092F\u002E", "\u0938\u094B\u092E\u002E", "\u092E\u0902\u0917\u0933\u002E", "\u092C\u0941\u0927\u002E", "\u092C\u093F\u0930\u0947\u002E", "\u0938\u0941\u0915\u094D\u0930\u002E", "\u0936\u0947\u0928\u002E" ], [ "\u0906\u092F\u0924\u093E\u0930", "\u0938\u094B\u092E\u093E\u0930", "\u092E\u0902\u0917\u0933\u093E\u0930", "\u092C\u0941\u0927\u0935\u093E\u0930", "\u092C\u093F\u0930\u0947\u0938\u094D\u0924\u093E\u0930", "\u0938\u0941\u0915\u094D\u0930\u093E\u0930", "\u0936\u0947\u0928\u0935\u093E\u0930" ], [ "\u091C\u093E\u0928\u0947\u0935\u093E\u0930\u0940", "\u092B\u0947\u092C\u094D\u0930\u0941\u0935\u093E\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u090F\u092A\u094D\u0930\u093F\u0932", "\u092E\u0947", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u0948", "\u0911\u0917\u0938\u094D\u091F", "\u0938\u092A\u094D\u091F\u0947\u0902\u092C\u0930", "\u0911\u0915\u094D\u091F\u094B\u092C\u0930", "\u0928\u094B\u0935\u0947\u092E\u094D\u092C\u0930", "\u0921\u093F\u0938\u0947\u0902\u092C\u0930", "" ], [ "\u091C\u093E\u0928\u0947\u0935\u093E\u0930\u0940", "\u092B\u0947\u092C\u094D\u0930\u0941\u0935\u093E\u0930\u0940", "\u092E\u093E\u0930\u094D\u091A", "\u090F\u092A\u094D\u0930\u093F\u0932", "\u092E\u0947", "\u091C\u0942\u0928", "\u091C\u0941\u0932\u0948", "\u0911\u0917\u0938\u094D\u091F", "\u0938\u092A\u094D\u091F\u0947\u0902\u092C\u0930", "\u0911\u0915\u094D\u091F\u094B\u092C\u0930", "\u0928\u094B\u0935\u0947\u092E\u094D\u092C\u0930", "\u0921\u093F\u0938\u0947\u0902\u092C\u0930", "" ] }, -{ 0x045A, 0x005A, "syr-SY", "syr", "syr", "syr-SY", "\u0053\u0079\u0072\u0069\u0061\u0063\u0020\u0028\u0053\u0079\u0072\u0069\u0061\u0029", "\u0723\u0718\u072A\u071D\u071D\u0710\u0020\u0028\u0633\u0648\u0631\u064A\u0627\u0029", false, 0x00DE, "SY", "SYR", "\u0053\u0079\u0072\u0069\u0061", "\u0633\u0648\u0631\u064A\u0627", "\u0053\u0059\u0050", "\u0053\u0079\u0072\u0069\u0061\u006E\u0020\u0050\u006F\u0075\u006E\u0064", "\u062C\u0646\u064A\u0647\u00A0\u0633\u0648\u0631\u064A", true, 2, 1, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0644\u002E\u0633\u002E\u200F", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0723\u0718\u072A\u0713\u0715\u0710\u00A0\u0713\u072A\u071D\u0713\u0718\u072A\u071D\u0710", 6, 0, "\u002F", "\u003A", "\u0729\u002E\u071B", "\u0712\u002E\u071B", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u070F\u0710\u00A0\u070F\u0712\u072B", "\u070F\u0712\u00A0\u070F\u0712\u072B", "\u070F\u0713\u00A0\u070F\u0712\u072B", "\u070F\u0715\u00A0\u070F\u0712\u072B", "\u070F\u0717\u00A0\u070F\u0712\u072B", "\u070F\u0725\u072A\u0718\u0712", "\u070F\u072B\u0712" ], [ "\u071A\u0715\u00A0\u0712\u072B\u0712\u0710", "\u072C\u072A\u071D\u0722\u00A0\u0712\u072B\u0712\u0710", "\u072C\u0720\u072C\u0710\u00A0\u0712\u072B\u0712\u0710", "\u0710\u072A\u0712\u0725\u0710\u00A0\u0712\u072B\u0712\u0710", "\u071A\u0721\u072B\u0710\u00A0\u0712\u072B\u0712\u0710", "\u0725\u072A\u0718\u0712\u072C\u0710", "\u072B\u0712\u072C\u0710" ], [ "\u070F\u071F\u0722\u00A0\u070F\u0712", "\u072B\u0712\u071B", "\u0710\u0715\u072A", "\u0722\u071D\u0723\u0722", "\u0710\u071D\u072A", "\u071A\u0719\u071D\u072A\u0722", "\u072C\u0721\u0718\u0719", "\u0710\u0712", "\u0710\u071D\u0720\u0718\u0720", "\u070F\u072C\u072B\u00A0\u070F\u0710", "\u070F\u072C\u072B\u00A0\u070F\u0712", "\u070F\u071F\u0722\u00A0\u070F\u0710", "" ], [ "\u071F\u0722\u0718\u0722\u00A0\u0710\u071A\u072A\u071D", "\u072B\u0712\u071B", "\u0710\u0715\u072A", "\u0722\u071D\u0723\u0722", "\u0710\u071D\u072A", "\u071A\u0719\u071D\u072A\u0722", "\u072C\u0721\u0718\u0719", "\u0710\u0712", "\u0710\u071D\u0720\u0718\u0720", "\u072C\u072B\u072A\u071D\u00A0\u0729\u0715\u071D\u0721", "\u072C\u072B\u072A\u071D\u00A0\u0710\u071A\u072A\u071D", "\u071F\u0722\u0718\u0722\u00A0\u0729\u0715\u071D\u0721", "" ] }, -{ 0x0465, 0x0065, "div-MV", "div", "div", "div-MV", "\u0044\u0069\u0076\u0065\u0068\u0069\u0020\u0028\u004D\u0061\u006C\u0064\u0069\u0076\u0065\u0073\u0029", "\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0784\u07A6\u0790\u07B0\u0020\u0028\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0020\u0783\u07A7\u0787\u07B0\u0796\u07AC\u0029", false, 0x00A5, "MV", "MDV", "\u004D\u0061\u006C\u0064\u0069\u0076\u0065\u0073", "\u078B\u07A8\u0788\u07AC\u0780\u07A8\u0020\u0783\u07A7\u0787\u07B0\u0796\u07AC", "\u004D\u0056\u0052", "\u0052\u0075\u0066\u0069\u0079\u0061\u0061", "\u0783\u07AA\u078A\u07A8\u0794\u07A7", true, 2, 1, 2, 10, 3, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0783\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 6, [ 6, 1 ], "\u0780\u07A8\u0796\u07B0\u0783\u07A9\u0020\u0786\u07A6\u078D\u07A6\u0782\u07B0\u0791\u07A6\u0783\u07AA", 0, 0, "\u002F", "\u003A", "\u0789\u0786", "\u0789\u078A", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u002F\u004D\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0645\u062D\u0631\u0645", "\u0635\u0641\u0631", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u0627\u0648\u0644", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u0627\u0648\u0644\u0649", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u062B\u0627\u0646\u064A\u0629", "\u0631\u062C\u0628", "\u0634\u0639\u0628\u0627\u0646", "\u0631\u0645\u0636\u0627\u0646", "\u0634\u0648\u0627\u0644", "\u0630\u0648\u00A0\u0627\u0644\u0642\u0639\u062F\u0629", "\u0630\u0648\u00A0\u0627\u0644\u062D\u062C\u0629", "" ], [ "\u0645\u062D\u0631\u0645", "\u0635\u0641\u0631", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u0623\u0648\u0644", "\u0631\u0628\u064A\u0639\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u0623\u0648\u0644\u0649", "\u062C\u0645\u0627\u062F\u0649\u00A0\u0627\u0644\u062B\u0627\u0646\u064A\u0629", "\u0631\u062C\u0628", "\u0634\u0639\u0628\u0627\u0646", "\u0631\u0645\u0636\u0627\u0646", "\u0634\u0648\u0627\u0644", "\u0630\u0648\u00A0\u0627\u0644\u0642\u0639\u062F\u0629", "\u0630\u0648\u00A0\u0627\u0644\u062D\u062C\u0629", "" ] }, -{ 0x0801, 0x0001, "ar-IQ", "ar", "ara", "ar-IQ", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0049\u0072\u0061\u0071\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0639\u0631\u0627\u0642\u0029", false, 0x0079, "IQ", "IRQ", "\u0049\u0072\u0061\u0071", "\u0627\u0644\u0639\u0631\u0627\u0642", "\u0049\u0051\u0044", "\u0049\u0072\u0061\u0071\u0069\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u0639\u0631\u0627\u0642\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0639\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 11, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u0639\u0631\u0628\u064A\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ] }, -{ 0x0804, 0x0004, "zh-CN", "zh", "zho", "zh-CN", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0050\u0065\u006F\u0070\u006C\u0065\u0027\u0073\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0043\u0068\u0069\u006E\u0061\u0029", "\u4E2D\u6587\u0028\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD\u0029", false, 0x002D, "CN", "CHN", "\u0050\u0065\u006F\u0070\u006C\u0065\u0027\u0073\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0043\u0068\u0069\u006E\u0061", "\u4E2D\u534E\u4EBA\u6C11\u5171\u548C\u56FD", "\u0043\u004E\u0059", "\u0050\u0052\u0043\u0020\u0059\u0075\u0061\u006E\u0020\u0052\u0065\u006E\u006D\u0069\u006E\u0062\u0069", "\u4EBA\u6C11\u5E01", true, 2, 1, 2, 2, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\uFFE5", "\u002D", "\u002B", "\u975E\u6570\u5B57", "\u8D1F\u65E0\u7A77\u5927", "\u6B63\u65E0\u7A77\u5927", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u516C\u5386", 0, 0, "\u002F", "\u003A", "\u4E0A\u5348", "\u4E0B\u5348", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u002D\u0064", "\u0079\u0079\u0079\u0079\u002E\u004D\u002E\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064", "\u0079\u0079\u002D\u004D\u002D\u0064", "\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u002E\u004D\u002E\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'\u0064\'\u65E5\'" ], [ "\u0079\u0079\u0079\u0079\'\u5E74\'\u004D\'\u6708\'", "\u0079\u0079\u0079\u0079\u002E\u004D" ], [ "\u65E5", "\u4E00", "\u4E8C", "\u4E09", "\u56DB", "\u4E94", "\u516D" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ] }, -{ 0x0807, 0x0007, "de-CH", "de", "deu", "de-CH", "\u0047\u0065\u0072\u006D\u0061\u006E\u0020\u0028\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064\u0029", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u0020\u0028\u0053\u0063\u0068\u0077\u0065\u0069\u007A\u0029", false, 0x00DF, "CH", "CHE", "\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064", "\u0053\u0063\u0068\u0077\u0065\u0069\u007A", "\u0043\u0048\u0046", "\u0053\u0077\u0069\u0073\u0073\u0020\u0046\u0072\u0061\u006E\u0063", "\u0053\u0063\u0068\u0077\u0065\u0069\u007A\u0065\u0072\u0020\u0046\u0072\u0061\u006E\u006B\u0065\u006E", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u0027", "\u002E", "\u0027", "\u0053\u0046\u0072\u002E", "\u002D", "\u002B", "\u006E\u002E\u0020\u0064\u0065\u0066\u002E", "\u002D\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", "\u002B\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0069\u0073\u0063\u0068\u0065\u0072\u0020\u004B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F", "\u004D\u006F", "\u0044\u0069", "\u004D\u0069", "\u0044\u006F", "\u0046\u0072", "\u0053\u0061" ], [ "\u0053\u006F\u006E\u006E\u0074\u0061\u0067", "\u004D\u006F\u006E\u0074\u0061\u0067", "\u0044\u0069\u0065\u006E\u0073\u0074\u0061\u0067", "\u004D\u0069\u0074\u0074\u0077\u006F\u0063\u0068", "\u0044\u006F\u006E\u006E\u0065\u0072\u0073\u0074\u0061\u0067", "\u0046\u0072\u0065\u0069\u0074\u0061\u0067", "\u0053\u0061\u006D\u0073\u0074\u0061\u0067" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0072\u007A", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072", "\u004D\u00E4\u0072\u007A", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u007A\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0809, 0x0009, "en-GB", "en", "eng", "en-GB", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D\u0029", false, 0x00F2, "GB", "GBR", "\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D", "\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D", "\u0047\u0042\u0050", "\u0055\u004B\u0020\u0050\u006F\u0075\u006E\u0064\u0020\u0053\u0074\u0065\u0072\u006C\u0069\u006E\u0067", "\u0050\u006F\u0075\u006E\u0064\u0020\u0053\u0074\u0065\u0072\u006C\u0069\u006E\u0067", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u00A3", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x080A, 0x000A, "es-MX", "es", "spa", "es-MX", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u004D\u0065\u0078\u0069\u0063\u006F\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u004D\u00E9\u0078\u0069\u0063\u006F\u0029", false, 0x00A6, "MX", "MEX", "\u004D\u0065\u0078\u0069\u0063\u006F", "\u004D\u00E9\u0078\u0069\u0063\u006F", "\u004D\u0058\u004E", "\u004D\u0065\u0078\u0069\u0063\u0061\u006E\u0020\u0050\u0065\u0073\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x080C, 0x000C, "fr-BE", "fr", "fra", "fr-BE", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u0042\u0065\u006C\u0067\u0069\u0075\u006D\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u0042\u0065\u006C\u0067\u0069\u0071\u0075\u0065\u0029", false, 0x0015, "BE", "BEL", "\u0042\u0065\u006C\u0067\u0069\u0075\u006D", "\u0042\u0065\u006C\u0067\u0069\u0071\u0075\u0065", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D", "\u0048\'\u0020\u0068\u0020\'\u006D\u006D", "\u0048\'\u0020\u0068\u0020\'\u006D\'\u0020\u006D\u0069\u006E\u0020\'" ], [ "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D", "\u0048\'\u0020\u0068\u0020\'\u006D\u006D", "\u0048\'\u0020\u0068\u0020\'\u006D\'\u0020\u006D\u0069\u006E\u0020\'\u0073\'\u0020\u0073\u0020\'" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0810, 0x0010, "it-CH", "it", "ita", "it-CH", "\u0049\u0074\u0061\u006C\u0069\u0061\u006E\u0020\u0028\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064\u0029", "\u0069\u0074\u0061\u006C\u0069\u0061\u006E\u006F\u0020\u0028\u0053\u0076\u0069\u007A\u007A\u0065\u0072\u0061\u0029", false, 0x00DF, "CH", "CHE", "\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064", "\u0053\u0076\u0069\u007A\u007A\u0065\u0072\u0061", "\u0043\u0048\u0046", "\u0053\u0077\u0069\u0073\u0073\u0020\u0046\u0072\u0061\u006E\u0063", "\u0046\u0072\u0061\u006E\u0063\u006F\u0020\u0073\u0076\u0069\u007A\u007A\u0065\u0072\u006F", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u0027", "\u002E", "\u0027", "\u0053\u0046\u0072\u002E", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u0075\u006E\u0020\u006E\u0075\u006D\u0065\u0072\u006F\u0020\u0072\u0065\u0061\u006C\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0065\u0072", "\u0067\u0069\u006F", "\u0076\u0065\u006E", "\u0073\u0061\u0062" ], [ "\u0064\u006F\u006D\u0065\u006E\u0069\u0063\u0061", "\u006C\u0075\u006E\u0065\u0064\u00EC", "\u006D\u0061\u0072\u0074\u0065\u0064\u00EC", "\u006D\u0065\u0072\u0063\u006F\u006C\u0065\u0064\u00EC", "\u0067\u0069\u006F\u0076\u0065\u0064\u00EC", "\u0076\u0065\u006E\u0065\u0072\u0064\u00EC", "\u0073\u0061\u0062\u0061\u0074\u006F" ], [ "\u0067\u0065\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u0067", "\u0067\u0069\u006F", "\u006C\u0075\u0067", "\u0061\u0067\u006F", "\u0073\u0065\u0074", "\u006F\u0074\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0067\u0065\u006E\u006E\u0061\u0069\u006F", "\u0066\u0065\u0062\u0062\u0072\u0061\u0069\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0070\u0072\u0069\u006C\u0065", "\u006D\u0061\u0067\u0067\u0069\u006F", "\u0067\u0069\u0075\u0067\u006E\u006F", "\u006C\u0075\u0067\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0074\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0074\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0813, 0x0013, "nl-BE", "nl", "nld", "nl-BE", "\u0044\u0075\u0074\u0063\u0068\u0020\u0028\u0042\u0065\u006C\u0067\u0069\u0075\u006D\u0029", "\u004E\u0065\u0064\u0065\u0072\u006C\u0061\u006E\u0064\u0073\u0020\u0028\u0042\u0065\u006C\u0067\u0069\u00EB\u0029", false, 0x0015, "BE", "BEL", "\u0042\u0065\u006C\u0067\u0069\u0075\u006D", "\u0042\u0065\u006C\u0067\u0069\u00EB", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E\u0020\u0028\u004E\u0069\u0065\u0074\u002D\u0065\u0065\u006E\u002D\u0067\u0065\u0074\u0061\u006C\u0029", "\u002D\u006F\u006E\u0065\u0069\u006E\u0064\u0069\u0067", "\u006F\u006E\u0065\u0069\u006E\u0064\u0069\u0067", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0073\u0065\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0075\u002E\'" ], [ "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D\'\u0020\u0075\u002E\'", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u007A\u006F", "\u006D\u0061", "\u0064\u0069", "\u0077\u006F", "\u0064\u006F", "\u0076\u0072", "\u007A\u0061" ], [ "\u007A\u006F\u006E\u0064\u0061\u0067", "\u006D\u0061\u0061\u006E\u0064\u0061\u0067", "\u0064\u0069\u006E\u0073\u0064\u0061\u0067", "\u0077\u006F\u0065\u006E\u0073\u0064\u0061\u0067", "\u0064\u006F\u006E\u0064\u0065\u0072\u0064\u0061\u0067", "\u0076\u0072\u0069\u006A\u0064\u0061\u0067", "\u007A\u0061\u0074\u0065\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0072\u0074", "\u0061\u0070\u0072", "\u006D\u0065\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u006D\u0061\u0061\u0072\u0074", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0065\u0069", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074\u0075\u0073", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0814, 0x0014, "nn-NO", "nn", "nno", "nn-NO", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u002C\u0020\u004E\u0079\u006E\u006F\u0072\u0073\u006B\u0020\u0028\u004E\u006F\u0072\u0077\u0061\u0079\u0029", "\u006E\u006F\u0072\u0073\u006B\u002C\u0020\u006E\u0079\u006E\u006F\u0072\u0073\u006B\u0020\u0028\u004E\u006F\u0072\u0065\u0067\u0029", false, 0x00B1, "NO", "NOR", "\u004E\u006F\u0072\u0077\u0061\u0079", "\u004E\u006F\u0072\u0065\u0067", "\u004E\u004F\u004B", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006E\u0065", "\u004E\u006F\u0072\u0073\u006B\u0020\u006B\u0072\u006F\u006E\u0065", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\'\u006B\u006C\u0020\'\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u006B\u006C\u0020\'\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00F8", "\u006D\u00E5", "\u0074\u0079", "\u006F\u006E", "\u0074\u006F", "\u0066\u0072", "\u006C\u0061" ], [ "\u0073\u00F8\u006E\u0064\u0061\u0067", "\u006D\u00E5\u006E\u0064\u0061\u0067", "\u0074\u0079\u0073\u0064\u0061\u0067", "\u006F\u006E\u0073\u0064\u0061\u0067", "\u0074\u006F\u0072\u0073\u0064\u0061\u0067", "\u0066\u0072\u0065\u0064\u0061\u0067", "\u006C\u0061\u0075\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u0069", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0073", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0816, 0x0016, "pt-PT", "pt", "por", "pt-PT", "\u0050\u006F\u0072\u0074\u0075\u0067\u0075\u0065\u0073\u0065\u0020\u0028\u0050\u006F\u0072\u0074\u0075\u0067\u0061\u006C\u0029", "\u0070\u006F\u0072\u0074\u0075\u0067\u0075\u00EA\u0073\u0020\u0028\u0050\u006F\u0072\u0074\u0075\u0067\u0061\u006C\u0029", false, 0x00C1, "PT", "PRT", "\u0050\u006F\u0072\u0074\u0075\u0067\u0061\u006C", "\u0050\u006F\u0072\u0074\u0075\u0067\u0061\u006C", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E\u0020\u0028\u004E\u00E3\u006F\u0020\u00E9\u0020\u0075\u006D\u0020\u006E\u00FA\u006D\u0065\u0072\u006F\u0029", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0043\u0061\u006C\u0065\u006E\u0064\u00E1\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 0, "\u002D", "\u003A", "", "", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002F\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u006D\'" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u002E\u004D\u004D\u002E\u0064\u0064", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u006D\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u004D\u004D\u002E\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u0073\u0065\u0067", "\u0074\u0065\u0072", "\u0071\u0075\u0061", "\u0071\u0075\u0069", "\u0073\u0065\u0078", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u0073\u0065\u0067\u0075\u006E\u0064\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0074\u0065\u0072\u00E7\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0071\u0075\u0061\u0072\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0071\u0075\u0069\u006E\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0073\u0065\u0078\u0074\u0061\u002D\u0066\u0065\u0069\u0072\u0061", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0076", "\u004D\u0061\u0072", "\u0041\u0062\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0067\u006F", "\u0053\u0065\u0074", "\u004F\u0075\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u0061\u006E\u0065\u0069\u0072\u006F", "\u0046\u0065\u0076\u0065\u0072\u0065\u0069\u0072\u006F", "\u004D\u0061\u0072\u00E7\u006F", "\u0041\u0062\u0072\u0069\u006C", "\u004D\u0061\u0069\u006F", "\u004A\u0075\u006E\u0068\u006F", "\u004A\u0075\u006C\u0068\u006F", "\u0041\u0067\u006F\u0073\u0074\u006F", "\u0053\u0065\u0074\u0065\u006D\u0062\u0072\u006F", "\u004F\u0075\u0074\u0075\u0062\u0072\u006F", "\u004E\u006F\u0076\u0065\u006D\u0062\u0072\u006F", "\u0044\u0065\u007A\u0065\u006D\u0062\u0072\u006F", "" ] }, -{ 0x081A, 0x7C1A, "sr-SP-Latn", "sr", "srp", "sr-Latn-SP", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0028\u004C\u0061\u0074\u0069\u006E\u002C\u0020\u0053\u0065\u0072\u0062\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u004D\u006F\u006E\u0074\u0065\u006E\u0065\u0067\u0072\u006F\u0029", "\u0073\u0072\u0070\u0073\u006B\u0069\u0020\u0028\u0053\u0072\u0062\u0069\u006A\u0061\u0020\u0069\u0020\u0043\u0072\u006E\u0061\u0020\u0047\u006F\u0072\u0061\u0029", false, 0x010D, "SP", "SPB", "\u0053\u0065\u0072\u0062\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u004D\u006F\u006E\u0074\u0065\u006E\u0065\u0067\u0072\u006F", "\u0053\u0072\u0062\u0069\u006A\u0061\u0020\u0069\u0020\u0043\u0072\u006E\u0061\u0020\u0047\u006F\u0072\u0061", "\u0043\u0053\u0044", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u0064\u0069\u006E\u0061\u0072", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0044\u0069\u006E\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0062\u0065\u0073\u006B\u006F\u006E\u0061\u010D\u006E\u006F\u0073\u0074", "\u002B\u0062\u0065\u0073\u006B\u006F\u006E\u0061\u010D\u006E\u006F\u0073\u0074", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0075\u0074\u006F", "\u0073\u0072\u0065", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u0075\u0062" ], [ "\u006E\u0065\u0064\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u0065\u006C\u006A\u0061\u006B", "\u0075\u0074\u006F\u0072\u0061\u006B", "\u0073\u0072\u0065\u0064\u0061", "\u010D\u0065\u0074\u0076\u0072\u0074\u0061\u006B", "\u0070\u0065\u0074\u0061\u006B", "\u0073\u0075\u0062\u006F\u0074\u0061" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0074", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0061\u0072", "\u006F\u006B\u0074\u006F\u0062\u0061\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0061\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0061\u0072", "" ] }, -{ 0x081D, 0x001D, "sv-FI", "sv", "swe", "sv-FI", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", "\u0073\u0076\u0065\u006E\u0073\u006B\u0061\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", false, 0x004D, "FI", "FIN", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u004E\u0046", "\u0049\u004E\u0046", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\'\u006B\u006C\u0020\'\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\'\u006B\u006C\u0020\'\u0048\u003A\u006D\u006D" ], [ "\'\u0064\u0065\u006E\u0020\'\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00F6", "\u006D\u00E5", "\u0074\u0069", "\u006F\u006E", "\u0074\u006F", "\u0066\u0072", "\u006C\u00F6" ], [ "\u0073\u00F6\u006E\u0064\u0061\u0067", "\u006D\u00E5\u006E\u0064\u0061\u0067", "\u0074\u0069\u0073\u0064\u0061\u0067", "\u006F\u006E\u0073\u0064\u0061\u0067", "\u0074\u006F\u0072\u0073\u0064\u0061\u0067", "\u0066\u0072\u0065\u0064\u0061\u0067", "\u006C\u00F6\u0072\u0064\u0061\u0067" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0075\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u006D\u0061\u0072\u0073", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E\u0069", "\u006A\u0075\u006C\u0069", "\u0061\u0075\u0067\u0075\u0073\u0074\u0069", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u006F\u006B\u0074\u006F\u0062\u0065\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x082C, 0x002C, "az-AZ-Cyrl", "az", "aze", "az-Cyrl-AZ", "\u0041\u007A\u0065\u0072\u0069\u0020\u0028\u0043\u0079\u0072\u0069\u006C\u006C\u0069\u0063\u002C\u0020\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E\u0029", "\u0410\u0437\u04D9\u0440\u0431\u0430\u0458\u04B9\u0430\u043D\u0020\u0028\u0410\u0437\u04D9\u0440\u0431\u0430\u0458\u04B9\u0430\u043D\u0029", false, 0x0005, "AZ", "AZE", "\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E", "\u0410\u0437\u04D9\u0440\u0431\u0430\u0458\u04B9\u0430\u043D", "\u0041\u005A\u004D", "\u0041\u007A\u0065\u0072\u0062\u0061\u0069\u006A\u0061\u006E\u0069\u0061\u006E\u0020\u004D\u0061\u006E\u0061\u0074", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u043C\u0430\u043D\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0413\u0440\u0438\u0443\u043E\u0440\u0438\u0430\u043D", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0411", "\u0411\u0435", "\u0427\u0430", "\u0427", "\u04B8\u0430", "\u04B8", "\u0428" ], [ "\u0411\u0430\u0437\u0430\u0440", "\u0411\u0430\u0437\u0430\u0440\u00A0\u0435\u0440\u0442\u04D9\u0441\u0438", "\u0427\u04D9\u0440\u0448\u04D9\u043D\u0431\u04D9\u00A0\u0430\u0445\u0448\u0430\u043C\u044B", "\u0427\u04D9\u0440\u0448\u04D9\u043D\u0431\u04D9", "\u04B8\u04AF\u043C\u04D9\u00A0\u0430\u0445\u0448\u0430\u043C\u044B", "\u04B8\u04AF\u043C\u04D9", "\u0428\u04D9\u043D\u0431\u04D9" ], [ "\u0408\u0430\u043D", "\u0424\u0435\u0432", "\u041C\u0430\u0440", "\u0410\u043F\u0440", "\u041C\u0430\u0458", "\u0418\u0458\u0443\u043D", "\u0418\u0458\u0443\u043B", "\u0410\u0432\u0433", "\u0421\u0435\u043D", "\u041E\u043A\u0442", "\u041D\u043E\u044F", "\u0414\u0435\u043A", "" ], [ "\u0408\u0430\u043D\u0432\u0430\u0440", "\u0424\u0435\u0432\u0440\u0430\u043B", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B", "\u041C\u0430\u0458", "\u0418\u0458\u0443\u043D", "\u0418\u0458\u0443\u043B", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u0458\u0430\u0431\u0440", "\u041E\u043A\u0442\u0458\u0430\u0431\u0440", "\u041D\u043E\u0458\u0430\u0431\u0440", "\u0414\u0435\u043A\u0430\u0431\u0440", "" ] }, -{ 0x083E, 0x003E, "ms-BN", "ms", "msa", "ms-BN", "\u004D\u0061\u006C\u0061\u0079\u0020\u0028\u0042\u0072\u0075\u006E\u0065\u0069\u0020\u0044\u0061\u0072\u0075\u0073\u0073\u0061\u006C\u0061\u006D\u0029", "\u0042\u0061\u0068\u0061\u0073\u0061\u0020\u004D\u0061\u006C\u0061\u0079\u0073\u0069\u0061\u0020\u0028\u0042\u0072\u0075\u006E\u0065\u0069\u0020\u0044\u0061\u0072\u0075\u0073\u0073\u0061\u006C\u0061\u006D\u0029", false, 0x0025, "BN", "BRN", "\u0042\u0072\u0075\u006E\u0065\u0069\u0020\u0044\u0061\u0072\u0075\u0073\u0073\u0061\u006C\u0061\u006D", "\u0042\u0072\u0075\u006E\u0065\u0069\u0020\u0044\u0061\u0072\u0075\u0073\u0073\u0061\u006C\u0061\u006D", "\u0042\u004E\u0044", "\u0042\u0072\u0075\u006E\u0065\u0069\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0052\u0069\u006E\u0067\u0067\u0069\u0074\u0020\u0042\u0072\u0075\u006E\u0065\u0069", true, 2, 1, 0, 0, 0, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0020\u004D\u0061\u0073\u0065\u0068\u0069", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0041\u0068\u0061\u0064", "\u0049\u0073\u006E\u0069\u006E", "\u0053\u0065\u006C", "\u0052\u0061\u0062\u0075", "\u004B\u0068\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u0041\u0068\u0061\u0064", "\u0049\u0073\u006E\u0069\u006E", "\u0053\u0065\u006C\u0061\u0073\u0061", "\u0052\u0061\u0062\u0075", "\u004B\u0068\u0061\u006D\u0069\u0073", "\u004A\u0075\u006D\u0061\u0061\u0074", "\u0053\u0061\u0062\u0074\u0075" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0063", "\u0041\u0070\u0072", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u004F\u0067\u006F\u0073", "\u0053\u0065\u0070\u0074", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0069\u0073", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0069", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0069", "\u004D\u0061\u0063", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0065\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C\u0061\u0069", "\u004F\u0067\u006F\u0073", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0069\u0073\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0843, 0x0043, "uz-UZ-Cyrl", "uz", "uzb", "uz-Cyrl-UZ", "\u0055\u007A\u0062\u0065\u006B\u0020\u0028\u0043\u0079\u0072\u0069\u006C\u006C\u0069\u0063\u002C\u0020\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E\u0029", "\u040E\u0437\u0431\u0435\u043A\u0020\u0028\u040E\u0437\u0431\u0435\u043A\u0438\u0441\u0442\u043E\u043D\u0029", false, 0x00F7, "UZ", "UZB", "\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E", "\u040E\u0437\u0431\u0435\u043A\u0438\u0441\u0442\u043E\u043D\u00A0\u0420\u0435\u0441\u043F\u0443\u0431\u043B\u0438\u043A\u0430\u0441\u0438", "\u0055\u005A\u0053", "\u0055\u007A\u0062\u0065\u006B\u0069\u0073\u0074\u0061\u006E\u0020\u0053\u0075\u006D", "\u0440\u0443\u0431\u043B\u044C", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0441\u045E\u043C", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0438\u0433\u043E\u0440\u0438\u0430\u043D\u0441\u043A\u0438\u0439\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440\u044C", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0079\u0079\u0079\u0079\u0020\'\u0439\u0438\u043B\'\u0020\u0064\u002D\u004D\u004D\u004D\u004D", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002D\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u0020\'\u0439\u0438\u043B\'\u0020\u0064\u002D\u004D\u004D\u004D\u004D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u044F\u043A\u0448", "\u0434\u0448", "\u0441\u0448", "\u0447\u0448", "\u043F\u0448", "\u0436", "\u0448" ], [ "\u044F\u043A\u0448\u0430\u043D\u0431\u0430", "\u0434\u0443\u0448\u0430\u043D\u0431\u0430", "\u0441\u0435\u0448\u0430\u043D\u0431\u0430", "\u0447\u043E\u0440\u0448\u0430\u043D\u0431\u0430", "\u043F\u0430\u0439\u0448\u0430\u043D\u0431\u0430", "\u0436\u0443\u043C\u0430", "\u0448\u0430\u043D\u0431\u0430" ], [ "\u042F\u043D\u0432", "\u0424\u0435\u0432", "\u041C\u0430\u0440", "\u0410\u043F\u0440", "\u041C\u0430\u0439", "\u0418\u044E\u043D", "\u0418\u044E\u043B", "\u0410\u0432\u0433", "\u0421\u0435\u043D", "\u041E\u043A\u0442", "\u041D\u043E\u044F", "\u0414\u0435\u043A", "" ], [ "\u042F\u043D\u0432\u0430\u0440", "\u0424\u0435\u0432\u0440\u0430\u043B", "\u041C\u0430\u0440\u0442", "\u0410\u043F\u0440\u0435\u043B", "\u041C\u0430\u0439", "\u0418\u044E\u043D", "\u0418\u044E\u043B", "\u0410\u0432\u0433\u0443\u0441\u0442", "\u0421\u0435\u043D\u0442\u044F\u0431\u0440", "\u041E\u043A\u0442\u044F\u0431\u0440", "\u041D\u043E\u044F\u0431\u0440", "\u0414\u0435\u043A\u0430\u0431\u0440", "" ] }, -{ 0x0C01, 0x0001, "ar-EG", "ar", "ara", "ar-EG", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0045\u0067\u0079\u0070\u0074\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0645\u0635\u0631\u0029", false, 0x0043, "EG", "EGY", "\u0045\u0067\u0079\u0070\u0074", "\u0645\u0635\u0631", "\u0045\u0047\u0050", "\u0045\u0067\u0079\u0070\u0074\u0069\u0061\u006E\u0020\u0050\u006F\u0075\u006E\u0064", "\u062C\u0646\u064A\u0647\u00A0\u0645\u0635\u0631\u064A", true, 3, 3, 3, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062C\u002E\u0645\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x0C04, 0x7C04, "zh-HK", "zh", "zho", "zh-HK", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0048\u006F\u006E\u0067\u0020\u004B\u006F\u006E\u0067\u0020\u0053\u002E\u0041\u002E\u0052\u002E\u0029", "\u4E2D\u6587\u0028\u9999\u6E2F\u7279\u522B\u884C\u653F\u5340\u0029", false, 0x0068, "HK", "HKG", "\u0048\u006F\u006E\u0067\u0020\u004B\u006F\u006E\u0067\u0020\u0053\u002E\u0041\u002E\u0052\u002E", "\u9999\u6E2F\u7279\u522B\u884C\u653F\u5340", "\u0048\u004B\u0044", "\u0048\u006F\u006E\u0067\u0020\u004B\u006F\u006E\u0067\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u6E2F\u5E63", true, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0048\u004B\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u65E5\u66C6", 0, 0, "\u002F", "\u003A", "", "", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064", "\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0C07, 0x0007, "de-AT", "de", "deu", "de-AT", "\u0047\u0065\u0072\u006D\u0061\u006E\u0020\u0028\u0041\u0075\u0073\u0074\u0072\u0069\u0061\u0029", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u0020\u0028\u00D6\u0073\u0074\u0065\u0072\u0072\u0065\u0069\u0063\u0068\u0029", false, 0x000E, "AT", "AUT", "\u0041\u0075\u0073\u0074\u0072\u0069\u0061", "\u00D6\u0073\u0074\u0065\u0072\u0072\u0065\u0069\u0063\u0068", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0045\u0075\u0072\u006F", true, 2, 1, 2, 9, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u006E\u002E\u0020\u0064\u0065\u0066\u002E", "\u002D\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", "\u002B\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0069\u0073\u0063\u0068\u0065\u0072\u0020\u004B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u004D\u004D\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F", "\u004D\u006F", "\u0044\u0069", "\u004D\u0069", "\u0044\u006F", "\u0046\u0072", "\u0053\u0061" ], [ "\u0053\u006F\u006E\u006E\u0074\u0061\u0067", "\u004D\u006F\u006E\u0074\u0061\u0067", "\u0044\u0069\u0065\u006E\u0073\u0074\u0061\u0067", "\u004D\u0069\u0074\u0074\u0077\u006F\u0063\u0068", "\u0044\u006F\u006E\u006E\u0065\u0072\u0073\u0074\u0061\u0067", "\u0046\u0072\u0065\u0069\u0074\u0061\u0067", "\u0053\u0061\u006D\u0073\u0074\u0061\u0067" ], [ "\u004A\u00E4\u006E", "\u0046\u0065\u0062", "\u004D\u00E4\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u00E4\u006E\u006E\u0065\u0072", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072", "\u004D\u00E4\u0072\u007A", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u007A\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0C09, 0x0009, "en-AU", "en", "eng", "en-AU", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061\u0029", false, 0x000C, "AU", "AUS", "\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061", "\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061", "\u0041\u0055\u0044", "\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0041\u0075\u0073\u0074\u0072\u0061\u006C\u0069\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x0C0A, 0x000A, "es-ES", "es", "spa", "es-ES", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0053\u0070\u0061\u0069\u006E\u0029", "\u0065\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0045\u0073\u0070\u0061\u00F1\u0061\u0029", false, 0x00D9, "ES", "ESP", "\u0053\u0070\u0061\u0069\u006E", "\u0045\u0073\u0070\u0061\u00F1\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u0048\'\u0048\'\u006D\u006D\'\u005C\'\'\u0073\u0073\'\u005C\'\u005C\'\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0C0C, 0x000C, "fr-CA", "fr", "fra", "fr-CA", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u0043\u0061\u006E\u0061\u0064\u0061\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u0043\u0061\u006E\u0061\u0064\u0061\u0029", false, 0x0027, "CA", "CAN", "\u0043\u0061\u006E\u0061\u0064\u0061", "\u0043\u0061\u006E\u0061\u0064\u0061", "\u0043\u0041\u0044", "\u0043\u0061\u006E\u0061\u0064\u0069\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0044\u006F\u006C\u006C\u0061\u0072\u0020\u0063\u0061\u006E\u0061\u0064\u0069\u0065\u006E", true, 2, 1, 2, 15, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u0024", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 0, 0, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\'\u0020\u0068\u0020\'\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x0C1A, 0x7C1A, "sr-SP-Cyrl", "sr", "srp", "sr-Cyrl-SP", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0028\u0043\u0079\u0072\u0069\u006C\u006C\u0069\u0063\u002C\u0020\u0053\u0065\u0072\u0062\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u004D\u006F\u006E\u0074\u0065\u006E\u0065\u0067\u0072\u006F\u0029", "\u0441\u0440\u043F\u0441\u043A\u0438\u0020\u0028\u0421\u0440\u0431\u0438\u0458\u0430\u00A0\u0438\u00A0\u0426\u0440\u043D\u0430\u00A0\u0413\u043E\u0440\u0430\u0029", false, 0x010D, "SP", "SPB", "\u0053\u0065\u0072\u0062\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u004D\u006F\u006E\u0074\u0065\u006E\u0065\u0067\u0072\u006F", "\u0421\u0440\u0431\u0438\u0458\u0430\u00A0\u0438\u00A0\u0426\u0440\u043D\u0430\u00A0\u0413\u043E\u0440\u0430", "\u0043\u0053\u0044", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u0434\u0438\u043D\u0430\u0440", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0414\u0438\u043D\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0431\u0435\u0441\u043A\u043E\u043D\u0430\u0447\u043D\u043E\u0441\u0442", "\u002B\u0431\u0435\u0441\u043A\u043E\u043D\u0430\u0447\u043D\u043E\u0441\u0442", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0435\u0433\u043E\u0440\u0438\u0458\u0430\u043D\u0441\u043A\u0438\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440", 1, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u043D\u0435\u0434", "\u043F\u043E\u043D", "\u0443\u0442\u043E", "\u0441\u0440\u0435", "\u0447\u0435\u0442", "\u043F\u0435\u0442", "\u0441\u0443\u0431" ], [ "\u043D\u0435\u0434\u0435\u0459\u0430", "\u043F\u043E\u043D\u0435\u0434\u0435\u0459\u0430\u043A", "\u0443\u0442\u043E\u0440\u0430\u043A", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043A", "\u043F\u0435\u0442\u0430\u043A", "\u0441\u0443\u0431\u043E\u0442\u0430" ], [ "\u0458\u0430\u043D", "\u0444\u0435\u0431", "\u043C\u0430\u0440", "\u0430\u043F\u0440", "\u043C\u0430\u0458", "\u0458\u0443\u043D", "\u0458\u0443\u043B", "\u0430\u0432\u0433", "\u0441\u0435\u043F", "\u043E\u043A\u0442", "\u043D\u043E\u0432", "\u0434\u0435\u0446", "" ], [ "\u0458\u0430\u043D\u0443\u0430\u0440", "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", "\u043C\u0430\u0440\u0442", "\u0430\u043F\u0440\u0438\u043B", "\u043C\u0430\u0458", "\u0458\u0443\u043D", "\u0458\u0443\u043B", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043F\u0442\u0435\u043C\u0431\u0430\u0440", "\u043E\u043A\u0442\u043E\u0431\u0430\u0440", "\u043D\u043E\u0432\u0435\u043C\u0431\u0430\u0440", "\u0434\u0435\u0446\u0435\u043C\u0431\u0430\u0440", "" ] }, -{ 0x1001, 0x0001, "ar-LY", "ar", "ara", "ar-LY", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004C\u0069\u0062\u0079\u0061\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0644\u064A\u0628\u064A\u0627\u0029", false, 0x0094, "LY", "LBY", "\u004C\u0069\u0062\u0079\u0061", "\u0644\u064A\u0628\u064A\u0627", "\u004C\u0059\u0044", "\u004C\u0069\u0062\u0079\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u0644\u064A\u0628\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0644\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 6, 23, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x1004, 0x0004, "zh-SG", "zh", "zho", "zh-SG", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0053\u0069\u006E\u0067\u0061\u0070\u006F\u0072\u0065\u0029", "\u4E2D\u6587\u0028\u65B0\u52A0\u5761\u0029", false, 0x00D7, "SG", "SGP", "\u0053\u0069\u006E\u0067\u0061\u0070\u006F\u0072\u0065", "\u65B0\u52A0\u5761", "\u0053\u0047\u0044", "\u0053\u0069\u006E\u0067\u0061\u0070\u006F\u0072\u0065\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u65B0\u5E01", false, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u897F\u5386", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0074\u0074\u0020\u0068\u003A\u006D\u006D", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0074\u0074\u0020\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0074\u0074\u0020\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064", "\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ] }, -{ 0x1007, 0x0007, "de-LU", "de", "deu", "de-LU", "\u0047\u0065\u0072\u006D\u0061\u006E\u0020\u0028\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067\u0029", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u0020\u0028\u004C\u0075\u0078\u0065\u006D\u0062\u0075\u0072\u0067\u0029", false, 0x0093, "LU", "LUX", "\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067", "\u004C\u0075\u0078\u0065\u006D\u0062\u0075\u0072\u0067", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0045\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20AC", "\u002D", "\u002B", "\u006E\u002E\u0020\u0064\u0065\u0066\u002E", "\u002D\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", "\u002B\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0069\u0073\u0063\u0068\u0065\u0072\u0020\u004B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\u0020\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\u0020\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F", "\u004D\u006F", "\u0044\u0069", "\u004D\u0069", "\u0044\u006F", "\u0046\u0072", "\u0053\u0061" ], [ "\u0053\u006F\u006E\u006E\u0074\u0061\u0067", "\u004D\u006F\u006E\u0074\u0061\u0067", "\u0044\u0069\u0065\u006E\u0073\u0074\u0061\u0067", "\u004D\u0069\u0074\u0074\u0077\u006F\u0063\u0068", "\u0044\u006F\u006E\u006E\u0065\u0072\u0073\u0074\u0061\u0067", "\u0046\u0072\u0065\u0069\u0074\u0061\u0067", "\u0053\u0061\u006D\u0073\u0074\u0061\u0067" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0072\u007A", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072", "\u004D\u00E4\u0072\u007A", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u007A\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x1009, 0x0009, "en-CA", "en", "eng", "en-CA", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0043\u0061\u006E\u0061\u0064\u0061\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0043\u0061\u006E\u0061\u0064\u0061\u0029", false, 0x0027, "CA", "CAN", "\u0043\u0061\u006E\u0061\u0064\u0061", "\u0043\u0061\u006E\u0061\u0064\u0061", "\u0043\u0041\u0044", "\u0043\u0061\u006E\u0061\u0064\u0069\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0043\u0061\u006E\u0061\u0064\u0069\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u004D\u002F\u0064\u0064\u002F\u0079\u0079" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x100A, 0x000A, "es-GT", "es", "spa", "es-GT", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0047\u0075\u0061\u0074\u0065\u006D\u0061\u006C\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0047\u0075\u0061\u0074\u0065\u006D\u0061\u006C\u0061\u0029", false, 0x0063, "GT", "GTM", "\u0047\u0075\u0061\u0074\u0065\u006D\u0061\u006C\u0061", "\u0047\u0075\u0061\u0074\u0065\u006D\u0061\u006C\u0061", "\u0047\u0054\u0051", "\u0047\u0075\u0061\u0074\u0065\u006D\u0061\u006C\u0061\u006E\u0020\u0051\u0075\u0065\u0074\u007A\u0061\u006C", "\u0051\u0075\u0065\u0074\u007A\u0061\u006C", true, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0051", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x100C, 0x000C, "fr-CH", "fr", "fra", "fr-CH", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u0053\u0075\u0069\u0073\u0073\u0065\u0029", false, 0x00DF, "CH", "CHE", "\u0053\u0077\u0069\u0074\u007A\u0065\u0072\u006C\u0061\u006E\u0064", "\u0053\u0075\u0069\u0073\u0073\u0065", "\u0043\u0048\u0046", "\u0053\u0077\u0069\u0073\u0073\u0020\u0046\u0072\u0061\u006E\u0063", "\u0046\u0072\u0061\u006E\u0063\u0020\u0073\u0075\u0069\u0073\u0073\u0065", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u0027", "\u002E", "\u0027", "\u0053\u0046\u0072\u002E", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x1401, 0x0001, "ar-DZ", "ar", "ara", "ar-DZ", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0041\u006C\u0067\u0065\u0072\u0069\u0061\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u062C\u0632\u0627\u0626\u0631\u0029", false, 0x0004, "DZ", "DZA", "\u0041\u006C\u0067\u0065\u0072\u0069\u0061", "\u0627\u0644\u062C\u0632\u0627\u0626\u0631", "\u0044\u005A\u0044", "\u0041\u006C\u0067\u0065\u0072\u0069\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u062C\u0632\u0627\u0626\u0631\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u062C\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 6, 23, 2, 9, 10, 11 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0641\u0631\u0646\u0633\u064A\u0629\u0029\u200F", 6, 0, "\u002D", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u062C\u0627\u0646\u0641\u064A\u064A\u0647", "\u0641\u064A\u0641\u0631\u064A\u064A\u0647", "\u0645\u0627\u0631\u0633", "\u0623\u0641\u0631\u064A\u0644", "\u0645\u064A", "\u062C\u0648\u0627\u0646", "\u062C\u0648\u064A\u064A\u0647", "\u0623\u0648\u062A", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u062C\u0627\u0646\u0641\u064A\u064A\u0647", "\u0641\u064A\u0641\u0631\u064A\u064A\u0647", "\u0645\u0627\u0631\u0633", "\u0623\u0641\u0631\u064A\u0644", "\u0645\u064A", "\u062C\u0648\u0627\u0646", "\u062C\u0648\u064A\u064A\u0647", "\u0623\u0648\u062A", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x1404, 0x7C04, "zh-MO", "zh", "zho", "zh-MO", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u004D\u0061\u0063\u0061\u006F\u0020\u0053\u002E\u0041\u002E\u0052\u002E\u0029", "\u4E2D\u6587\u0028\u6FB3\u9580\u7279\u522B\u884C\u653F\u5340\u0029", false, 0x0097, "MO", "MAC", "\u004D\u0061\u0063\u0061\u006F\u0020\u0053\u002E\u0041\u002E\u0052\u002E", "\u6FB3\u9580\u7279\u522B\u884C\u653F\u5340", "\u004D\u004F\u0050", "\u004D\u0061\u0063\u0061\u006F\u0020\u0050\u0061\u0074\u0061\u0063\u0061", "\u0050\u0061\u0074\u0061\u0063\u0061", true, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u004D\u004F\u0050", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u897F\u66C6", 0, 0, "\u002F", "\u003A", "", "", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u002F\u0064", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064", "\u0079\u0079\u0079\u0079\u0020\u004D\u004D\u0020\u0064\u0064" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u661F\u671F\u65E5", "\u661F\u671F\u4E00", "\u661F\u671F\u4E8C", "\u661F\u671F\u4E09", "\u661F\u671F\u56DB", "\u661F\u671F\u4E94", "\u661F\u671F\u516D" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ], [ "\u4E00\u6708", "\u4E8C\u6708", "\u4E09\u6708", "\u56DB\u6708", "\u4E94\u6708", "\u516D\u6708", "\u4E03\u6708", "\u516B\u6708", "\u4E5D\u6708", "\u5341\u6708", "\u5341\u4E00\u6708", "\u5341\u4E8C\u6708", "" ] }, -{ 0x1407, 0x0007, "de-LI", "de", "deu", "de-LI", "\u0047\u0065\u0072\u006D\u0061\u006E\u0020\u0028\u004C\u0069\u0065\u0063\u0068\u0074\u0065\u006E\u0073\u0074\u0065\u0069\u006E\u0029", "\u0044\u0065\u0075\u0074\u0073\u0063\u0068\u0020\u0028\u004C\u0069\u0065\u0063\u0068\u0074\u0065\u006E\u0073\u0074\u0065\u0069\u006E\u0029", false, 0x0091, "LI", "LIE", "\u004C\u0069\u0065\u0063\u0068\u0074\u0065\u006E\u0073\u0074\u0065\u0069\u006E", "\u004C\u0069\u0065\u0063\u0068\u0074\u0065\u006E\u0073\u0074\u0065\u0069\u006E", "\u0043\u0048\u0046", "\u0053\u0077\u0069\u0073\u0073\u0020\u0046\u0072\u0061\u006E\u0063", "\u0053\u0063\u0068\u0077\u0065\u0069\u007A\u0065\u0072\u0020\u0046\u0072\u0061\u006E\u006B\u0065\u006E", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u0027", "\u002E", "\u0027", "\u0043\u0048\u0046", "\u002D", "\u002B", "\u006E\u002E\u0020\u0064\u0065\u0066\u002E", "\u002D\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", "\u002B\u0075\u006E\u0065\u006E\u0064\u006C\u0069\u0063\u0068", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0069\u0073\u0063\u0068\u0065\u0072\u0020\u004B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 1, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u0048\u002E\u006D\u006D\'\u0020\u0068\'", "\u0048\u002E\u006D\u006D\'\u0020\u0055\u0068\u0072\'" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u004D\u004D\u0020\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u006F", "\u004D\u006F", "\u0044\u0069", "\u004D\u0069", "\u0044\u006F", "\u0046\u0072", "\u0053\u0061" ], [ "\u0053\u006F\u006E\u006E\u0074\u0061\u0067", "\u004D\u006F\u006E\u0074\u0061\u0067", "\u0044\u0069\u0065\u006E\u0073\u0074\u0061\u0067", "\u004D\u0069\u0074\u0074\u0077\u006F\u0063\u0068", "\u0044\u006F\u006E\u006E\u0065\u0072\u0073\u0074\u0061\u0067", "\u0046\u0072\u0065\u0069\u0074\u0061\u0067", "\u0053\u0061\u006D\u0073\u0074\u0061\u0067" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0072\u007A", "\u0041\u0070\u0072", "\u004D\u0061\u0069", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u006B\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u007A", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072", "\u004D\u00E4\u0072\u007A", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0069", "\u004A\u0075\u006E\u0069", "\u004A\u0075\u006C\u0069", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u006B\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u007A\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x1409, 0x0009, "en-NZ", "en", "eng", "en-NZ", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0029", false, 0x00B7, "NZ", "NZL", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064", "\u004E\u005A\u0044", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x140A, 0x000A, "es-CR", "es", "spa", "es-CR", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0043\u006F\u0073\u0074\u0061\u0020\u0052\u0069\u0063\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0043\u006F\u0073\u0074\u0061\u0020\u0052\u0069\u0063\u0061\u0029", false, 0x0036, "CR", "CRI", "\u0043\u006F\u0073\u0074\u0061\u0020\u0052\u0069\u0063\u0061", "\u0043\u006F\u0073\u0074\u0061\u0020\u0052\u0069\u0063\u0061", "\u0043\u0052\u0043", "\u0043\u006F\u0073\u0074\u0061\u0020\u0052\u0069\u0063\u0061\u006E\u0020\u0043\u006F\u006C\u006F\u006E", "\u0043\u006F\u006C\u00F3\u006E", true, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u20A1", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x140C, 0x000C, "fr-LU", "fr", "fra", "fr-LU", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067\u0029", false, 0x0093, "LU", "LUX", "\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067", "\u004C\u0075\u0078\u0065\u006D\u0062\u006F\u0075\u0072\u0067", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x1801, 0x0001, "ar-MA", "ar", "ara", "ar-MA", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004D\u006F\u0072\u006F\u0063\u0063\u006F\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0645\u0645\u0644\u0643\u0629\u0020\u0627\u0644\u0645\u063A\u0631\u0628\u064A\u0629\u0029", false, 0x009F, "MA", "MAR", "\u004D\u006F\u0072\u006F\u0063\u0063\u006F", "\u0627\u0644\u0645\u0645\u0644\u0643\u0629\u0020\u0627\u0644\u0645\u063A\u0631\u0628\u064A\u0629", "\u004D\u0041\u0044", "\u004D\u006F\u0072\u006F\u0063\u0063\u0061\u006E\u0020\u0044\u0069\u0072\u0068\u0061\u006D", "\u062F\u0631\u0647\u0645\u00A0\u0645\u063A\u0631\u0628\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0645\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 6, 23, 2, 9, 10, 11 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0641\u0631\u0646\u0633\u064A\u0629\u0029\u200F", 1, 0, "\u002D", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648\u0632", "\u063A\u0634\u062A", "\u0634\u062A\u0646\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0646\u0628\u0631", "\u062F\u062C\u0646\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648\u0632", "\u063A\u0634\u062A", "\u0634\u062A\u0646\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0646\u0628\u0631", "\u062F\u062C\u0646\u0628\u0631", "" ] }, -{ 0x1809, 0x0009, "en-IE", "en", "eng", "en-IE", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0049\u0072\u0065\u006C\u0061\u006E\u0064\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0045\u0069\u0072\u0065\u0029", false, 0x0044, "IE", "IRL", "\u0049\u0072\u0065\u006C\u0061\u006E\u0064", "\u0045\u0069\u0072\u0065", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0045\u0075\u0072\u006F", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x180A, 0x000A, "es-PA", "es", "spa", "es-PA", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0050\u0061\u006E\u0061\u006D\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0050\u0061\u006E\u0061\u006D\u00E1\u0029", false, 0x00C0, "PA", "PAN", "\u0050\u0061\u006E\u0061\u006D\u0061", "\u0050\u0061\u006E\u0061\u006D\u00E1", "\u0050\u0041\u0042", "\u0050\u0061\u006E\u0061\u006D\u0061\u006E\u0069\u0061\u006E\u0020\u0042\u0061\u006C\u0062\u006F\u0061", "\u0042\u0061\u006C\u0062\u006F\u0061", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0042\u002F\u002E", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x180C, 0x000C, "fr-MC", "fr", "fra", "fr-MC", "\u0046\u0072\u0065\u006E\u0063\u0068\u0020\u0028\u0050\u0072\u0069\u006E\u0063\u0069\u0070\u0061\u006C\u0069\u0074\u0079\u0020\u006F\u0066\u0020\u004D\u006F\u006E\u0061\u0063\u006F\u0029", "\u0066\u0072\u0061\u006E\u00E7\u0061\u0069\u0073\u0020\u0028\u0050\u0072\u0069\u006E\u0063\u0069\u0070\u0061\u0075\u0074\u00E9\u0020\u0064\u0065\u0020\u004D\u006F\u006E\u0061\u0063\u006F\u0029", false, 0x009E, "MC", "MCO", "\u0050\u0072\u0069\u006E\u0063\u0069\u0070\u0061\u006C\u0069\u0074\u0079\u0020\u006F\u0066\u0020\u004D\u006F\u006E\u0061\u0063\u006F", "\u0050\u0072\u0069\u006E\u0063\u0069\u0070\u0061\u0075\u0074\u00E9\u0020\u0064\u0065\u0020\u004D\u006F\u006E\u0061\u0063\u006F", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u006F\u006E\u0020\u004E\u0075\u006D\u00E9\u0072\u0069\u0071\u0075\u0065", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069", "\u002B\u0049\u006E\u0066\u0069\u006E\u0069", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0069\u0065\u0072\u0020\u0067\u0072\u00E9\u0067\u006F\u0072\u0069\u0065\u006E", 1, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\'\u0020\u0068\u0020\'\u006D\u006D" ], [ "\u0064\u0064\u0064\u0064\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0064\u0069\u006D\u002E", "\u006C\u0075\u006E\u002E", "\u006D\u0061\u0072\u002E", "\u006D\u0065\u0072\u002E", "\u006A\u0065\u0075\u002E", "\u0076\u0065\u006E\u002E", "\u0073\u0061\u006D\u002E" ], [ "\u0064\u0069\u006D\u0061\u006E\u0063\u0068\u0065", "\u006C\u0075\u006E\u0064\u0069", "\u006D\u0061\u0072\u0064\u0069", "\u006D\u0065\u0072\u0063\u0072\u0065\u0064\u0069", "\u006A\u0065\u0075\u0064\u0069", "\u0076\u0065\u006E\u0064\u0072\u0065\u0064\u0069", "\u0073\u0061\u006D\u0065\u0064\u0069" ], [ "\u006A\u0061\u006E\u0076\u002E", "\u0066\u00E9\u0076\u0072\u002E", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u002E", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u002E", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u002E", "\u006F\u0063\u0074\u002E", "\u006E\u006F\u0076\u002E", "\u0064\u00E9\u0063\u002E", "" ], [ "\u006A\u0061\u006E\u0076\u0069\u0065\u0072", "\u0066\u00E9\u0076\u0072\u0069\u0065\u0072", "\u006D\u0061\u0072\u0073", "\u0061\u0076\u0072\u0069\u006C", "\u006D\u0061\u0069", "\u006A\u0075\u0069\u006E", "\u006A\u0075\u0069\u006C\u006C\u0065\u0074", "\u0061\u006F\u00FB\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u006F\u0062\u0072\u0065", "\u006E\u006F\u0076\u0065\u006D\u0062\u0072\u0065", "\u0064\u00E9\u0063\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x1C01, 0x0001, "ar-TN", "ar", "ara", "ar-TN", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0054\u0075\u006E\u0069\u0073\u0069\u0061\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u062A\u0648\u0646\u0633\u0029", false, 0x00EA, "TN", "TUN", "\u0054\u0075\u006E\u0069\u0073\u0069\u0061", "\u062A\u0648\u0646\u0633", "\u0054\u004E\u0044", "\u0054\u0075\u006E\u0069\u0073\u0069\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u062A\u0648\u0646\u0633\u064A", true, 3, 3, 3, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u062A\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 6, 23, 2, 9, 10, 11 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0641\u0631\u0646\u0633\u064A\u0629\u0029\u200F", 1, 0, "\u002D", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u062C\u0627\u0646\u0641\u064A", "\u0641\u064A\u0641\u0631\u064A", "\u0645\u0627\u0631\u0633", "\u0627\u0641\u0631\u064A\u0644", "\u0645\u0627\u064A", "\u062C\u0648\u0627\u0646", "\u062C\u0648\u064A\u0644\u064A\u0629", "\u0627\u0648\u062A", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u062C\u0627\u0646\u0641\u064A", "\u0641\u064A\u0641\u0631\u064A", "\u0645\u0627\u0631\u0633", "\u0627\u0641\u0631\u064A\u0644", "\u0645\u0627\u064A", "\u062C\u0648\u0627\u0646", "\u062C\u0648\u064A\u0644\u064A\u0629", "\u0627\u0648\u062A", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x1C09, 0x0009, "en-ZA", "en", "eng", "en-ZA", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", false, 0x00D1, "ZA", "ZAF", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x1C0A, 0x000A, "es-DO", "es", "spa", "es-DO", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0044\u006F\u006D\u0069\u006E\u0069\u0063\u0061\u006E\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0052\u0065\u0070\u00FA\u0062\u006C\u0069\u0063\u0061\u0020\u0044\u006F\u006D\u0069\u006E\u0069\u0063\u0061\u006E\u0061\u0029", false, 0x0041, "DO", "DOM", "\u0044\u006F\u006D\u0069\u006E\u0069\u0063\u0061\u006E\u0020\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063", "\u0052\u0065\u0070\u00FA\u0062\u006C\u0069\u0063\u0061\u0020\u0044\u006F\u006D\u0069\u006E\u0069\u0063\u0061\u006E\u0061", "\u0044\u004F\u0050", "\u0044\u006F\u006D\u0069\u006E\u0069\u0063\u0061\u006E\u0020\u0050\u0065\u0073\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052\u0044\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x2001, 0x0001, "ar-OM", "ar", "ara", "ar-OM", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004F\u006D\u0061\u006E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0639\u0645\u0627\u0646\u0029", false, 0x00A4, "OM", "OMN", "\u004F\u006D\u0061\u006E", "\u0639\u0645\u0627\u0646", "\u004F\u004D\u0052", "\u0052\u0069\u0061\u006C\u0020\u004F\u006D\u0061\u006E\u0069", "\u0631\u064A\u0627\u0644\u00A0\u0639\u0645\u0627\u0646\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0631\u002E\u0639\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 6, 23, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x2009, 0x0009, "en-JM", "en", "eng", "en-JM", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u004A\u0061\u006D\u0061\u0069\u0063\u0061\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u004A\u0061\u006D\u0061\u0069\u0063\u0061\u0029", false, 0x007C, "JM", "JAM", "\u004A\u0061\u006D\u0061\u0069\u0063\u0061", "\u004A\u0061\u006D\u0061\u0069\u0063\u0061", "\u004A\u004D\u0044", "\u004A\u0061\u006D\u0061\u0069\u0063\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u004A\u0061\u006D\u0061\u0069\u0063\u0061\u006E\u0020\u0044\u006F\u006C\u006C\u0061\u0072", false, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u004A\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x200A, 0x000A, "es-VE", "es", "spa", "es-VE", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0056\u0065\u006E\u0065\u007A\u0075\u0065\u006C\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0061\u0020\u0042\u006F\u006C\u0069\u0076\u0061\u0072\u0069\u0061\u006E\u0061\u0020\u0064\u0065\u0020\u0056\u0065\u006E\u0065\u007A\u0075\u0065\u006C\u0061\u0029", false, 0x00F9, "VE", "VEN", "\u0056\u0065\u006E\u0065\u007A\u0075\u0065\u006C\u0061", "\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0061\u0020\u0042\u006F\u006C\u0069\u0076\u0061\u0072\u0069\u0061\u006E\u0061\u0020\u0064\u0065\u0020\u0056\u0065\u006E\u0065\u007A\u0075\u0065\u006C\u0061", "\u0056\u0045\u0042", "\u0056\u0065\u006E\u0065\u007A\u0075\u0065\u006C\u0061\u006E\u0020\u0042\u006F\u006C\u0069\u0076\u0061\u0072", "\u0042\u006F\u006C\u00ED\u0076\u0061\u0072", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0042\u0073", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x2401, 0x0001, "ar-YE", "ar", "ara", "ar-YE", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0059\u0065\u006D\u0065\u006E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u064A\u0645\u0646\u0029", false, 0x0105, "YE", "YEM", "\u0059\u0065\u006D\u0065\u006E", "\u0627\u0644\u064A\u0645\u0646", "\u0059\u0045\u0052", "\u0059\u0065\u006D\u0065\u006E\u0069\u0020\u0052\u0069\u0061\u006C", "\u0631\u064A\u0627\u0644\u00A0\u064A\u0645\u0646\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0631\u002E\u064A\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x2409, 0x0009, "en-CB", "en", "eng", "en-029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0043\u0061\u0072\u0069\u0062\u0062\u0065\u0061\u006E\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0043\u0061\u0072\u0069\u0062\u0062\u0065\u0061\u006E\u0029", false, 0x007C, "CB", "CAR", "\u0043\u0061\u0072\u0069\u0062\u0062\u0065\u0061\u006E", "\u0043\u0061\u0072\u0069\u0062\u0062\u0065\u0061\u006E", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", false, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 1, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x240A, 0x000A, "es-CO", "es", "spa", "es-CO", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0043\u006F\u006C\u006F\u006D\u0062\u0069\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0043\u006F\u006C\u006F\u006D\u0062\u0069\u0061\u0029", false, 0x0033, "CO", "COL", "\u0043\u006F\u006C\u006F\u006D\u0062\u0069\u0061", "\u0043\u006F\u006C\u006F\u006D\u0062\u0069\u0061", "\u0043\u004F\u0050", "\u0043\u006F\u006C\u006F\u006D\u0062\u0069\u0061\u006E\u0020\u0050\u0065\u0073\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x2801, 0x0001, "ar-SY", "ar", "ara", "ar-SY", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0053\u0079\u0072\u0069\u0061\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0633\u0648\u0631\u064A\u0627\u0029", false, 0x00DE, "SY", "SYR", "\u0053\u0079\u0072\u0069\u0061", "\u0633\u0648\u0631\u064A\u0627", "\u0053\u0059\u0050", "\u0053\u0079\u0072\u0069\u0061\u006E\u0020\u0050\u006F\u0075\u006E\u0064", "\u0644\u064A\u0631\u0629\u0020\u0633\u0648\u0631\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0644\u002E\u0633\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 11, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u0639\u0631\u0628\u064A\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ] }, -{ 0x2809, 0x0009, "en-BZ", "en", "eng", "en-BZ", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0042\u0065\u006C\u0069\u007A\u0065\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0042\u0065\u006C\u0069\u007A\u0065\u0029", false, 0x0018, "BZ", "BLZ", "\u0042\u0065\u006C\u0069\u007A\u0065", "\u0042\u0065\u006C\u0069\u007A\u0065", "\u0042\u005A\u0044", "\u0042\u0065\u006C\u0069\u007A\u0065\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0042\u0065\u006C\u0069\u007A\u0065\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 0, 0, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0042\u005A\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x280A, 0x000A, "es-PE", "es", "spa", "es-PE", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0050\u0065\u0072\u0075\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0050\u0065\u0072\u00FA\u0029", false, 0x00BB, "PE", "PER", "\u0050\u0065\u0072\u0075", "\u0050\u0065\u0072\u00FA", "\u0050\u0045\u004E", "\u0050\u0065\u0072\u0075\u0076\u0069\u0061\u006E\u0020\u004E\u0075\u0065\u0076\u006F\u0020\u0053\u006F\u006C", "\u004E\u0075\u0065\u0076\u006F\u0020\u0053\u006F\u006C", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0053\u002F\u002E", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x2C01, 0x0001, "ar-JO", "ar", "ara", "ar-JO", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004A\u006F\u0072\u0064\u0061\u006E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0623\u0631\u062F\u0646\u0029", false, 0x007E, "JO", "JOR", "\u004A\u006F\u0072\u0064\u0061\u006E", "\u0627\u0644\u0623\u0631\u062F\u0646", "\u004A\u004F\u0044", "\u004A\u006F\u0072\u0064\u0061\u006E\u0069\u0061\u006E\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u0627\u0631\u062F\u0646\u064A", true, 3, 3, 3, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0627\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 11, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u0639\u0631\u0628\u064A\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ] }, -{ 0x2C09, 0x0009, "en-TT", "en", "eng", "en-TT", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0061\u006E\u0064\u0020\u0054\u006F\u0062\u0061\u0067\u006F\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0079\u0020\u0054\u006F\u0062\u0061\u0067\u006F\u0029", false, 0x00E1, "TT", "TTO", "\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0061\u006E\u0064\u0020\u0054\u006F\u0062\u0061\u0067\u006F", "\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0079\u0020\u0054\u006F\u0062\u0061\u0067\u006F", "\u0054\u0054\u0044", "\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0054\u0072\u0069\u006E\u0069\u0064\u0061\u0064\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 0, 0, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0054\u0054\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x2C0A, 0x000A, "es-AR", "es", "spa", "es-AR", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0041\u0072\u0067\u0065\u006E\u0074\u0069\u006E\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0041\u0072\u0067\u0065\u006E\u0074\u0069\u006E\u0061\u0029", false, 0x000B, "AR", "ARG", "\u0041\u0072\u0067\u0065\u006E\u0074\u0069\u006E\u0061", "\u0041\u0072\u0067\u0065\u006E\u0074\u0069\u006E\u0061", "\u0041\u0052\u0053", "\u0041\u0072\u0067\u0065\u006E\u0074\u0069\u006E\u0065\u0020\u0050\u0065\u0073\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x3001, 0x0001, "ar-LB", "ar", "ara", "ar-LB", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004C\u0065\u0062\u0061\u006E\u006F\u006E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0644\u0628\u0646\u0627\u0646\u0029", false, 0x008B, "LB", "LBN", "\u004C\u0065\u0062\u0061\u006E\u006F\u006E", "\u0644\u0628\u0646\u0627\u0646", "\u004C\u0042\u0050", "\u004C\u0065\u0062\u0061\u006E\u0065\u0073\u0065\u0020\u0050\u006F\u0075\u006E\u0064", "\u0644\u064A\u0631\u0629\u0020\u0644\u0628\u0646\u0627\u0646\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0644\u002E\u0644\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 11, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u0639\u0631\u0628\u064A\u0029\u200F", 1, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ], [ "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0634\u0628\u0627\u0637", "\u0622\u0630\u0627\u0631", "\u0646\u064A\u0633\u0627\u0646", "\u0623\u064A\u0627\u0631", "\u062D\u0632\u064A\u0631\u0627\u0646", "\u062A\u0645\u0648\u0632", "\u0622\u0628", "\u0623\u064A\u0644\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "\u062A\u0634\u0631\u064A\u0646\u00A0\u0627\u0644\u062B\u0627\u0646\u064A", "\u0643\u0627\u0646\u0648\u0646\u00A0\u0627\u0644\u0623\u0648\u0644", "" ] }, -{ 0x3009, 0x0009, "en-ZW", "en", "eng", "en-ZW", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065\u0029", false, 0x0108, "ZW", "ZWE", "\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065", "\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065", "\u005A\u0057\u0044", "\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u005A\u0069\u006D\u0062\u0061\u0062\u0077\u0065\u0020\u0044\u006F\u006C\u006C\u0061\u0072", false, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u005A\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u002F\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x300A, 0x000A, "es-EC", "es", "spa", "es-EC", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0045\u0063\u0075\u0061\u0064\u006F\u0072\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0045\u0063\u0075\u0061\u0064\u006F\u0072\u0029", false, 0x0042, "EC", "ECU", "\u0045\u0063\u0075\u0061\u0064\u006F\u0072", "\u0045\u0063\u0075\u0061\u0064\u006F\u0072", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u0061\u0072", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x3401, 0x0001, "ar-KW", "ar", "ara", "ar-KW", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u004B\u0075\u0077\u0061\u0069\u0074\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0643\u0648\u064A\u062A\u0029", false, 0x0088, "KW", "KWT", "\u004B\u0075\u0077\u0061\u0069\u0074", "\u0627\u0644\u0643\u0648\u064A\u062A", "\u004B\u0057\u0044", "\u004B\u0075\u0077\u0061\u0069\u0074\u0069\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u0643\u0648\u064A\u062A\u064A", true, 3, 3, 3, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0643\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 6, 23, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x3409, 0x0009, "en-PH", "en", "eng", "en-PH", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0074\u0068\u0065\u0020\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0073\u0029", "\u0045\u006E\u0067\u006C\u0069\u0073\u0068\u0020\u0028\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0073\u0029", false, 0x00C9, "PH", "PHL", "\u0052\u0065\u0070\u0075\u0062\u006C\u0069\u0063\u0020\u006F\u0066\u0020\u0074\u0068\u0065\u0020\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0073", "\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0073", "\u0050\u0048\u0050", "\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0020\u0050\u0065\u0073\u006F", "\u0050\u0068\u0069\u006C\u0069\u0070\u0070\u0069\u006E\u0065\u0020\u0050\u0065\u0073\u006F", false, 2, 1, 2, 0, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0050\u0068\u0070", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1, 2 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u004D\u002F\u0064\u002F\u0079\u0079\u0079\u0079", "\u004D\u002F\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079", "\u004D\u004D\u002F\u0064\u0064\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0064\u0064\u002D\u004D\u004D\u004D\u002D\u0079\u0079" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0053\u0075\u006E\u0064\u0061\u0079", "\u004D\u006F\u006E\u0064\u0061\u0079", "\u0054\u0075\u0065\u0073\u0064\u0061\u0079", "\u0057\u0065\u0064\u006E\u0065\u0073\u0064\u0061\u0079", "\u0054\u0068\u0075\u0072\u0073\u0064\u0061\u0079", "\u0046\u0072\u0069\u0064\u0061\u0079", "\u0053\u0061\u0074\u0075\u0072\u0064\u0061\u0079" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u004A\u0061\u006E\u0075\u0061\u0072\u0079", "\u0046\u0065\u0062\u0072\u0075\u0061\u0072\u0079", "\u004D\u0061\u0072\u0063\u0068", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0061\u0079", "\u004A\u0075\u006E\u0065", "\u004A\u0075\u006C\u0079", "\u0041\u0075\u0067\u0075\u0073\u0074", "\u0053\u0065\u0070\u0074\u0065\u006D\u0062\u0065\u0072", "\u004F\u0063\u0074\u006F\u0062\u0065\u0072", "\u004E\u006F\u0076\u0065\u006D\u0062\u0065\u0072", "\u0044\u0065\u0063\u0065\u006D\u0062\u0065\u0072", "" ] }, -{ 0x340A, 0x000A, "es-CL", "es", "spa", "es-CL", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0043\u0068\u0069\u006C\u0065\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0043\u0068\u0069\u006C\u0065\u0029", false, 0x002E, "CL", "CHL", "\u0043\u0068\u0069\u006C\u0065", "\u0043\u0068\u0069\u006C\u0065", "\u0043\u004C\u0050", "\u0043\u0068\u0069\u006C\u0065\u0061\u006E\u0020\u0050\u0065\u0073\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 9, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002D", "\u003A", "", "", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x3801, 0x0001, "ar-AE", "ar", "ara", "ar-AE", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0055\u002E\u0041\u002E\u0045\u002E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A\u0020\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0627\u0644\u0645\u062A\u062D\u062F\u0629\u0029", false, 0x00E0, "AE", "ARE", "\u0055\u002E\u0041\u002E\u0045\u002E", "\u0627\u0644\u0625\u0645\u0627\u0631\u0627\u062A\u0020\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0627\u0644\u0645\u062A\u062D\u062F\u0629", "\u0041\u0045\u0044", "\u0055\u0041\u0045\u0020\u0044\u0069\u0072\u0068\u0061\u006D", "\u062F\u0631\u0647\u0645\u00A0\u0627\u0645\u0627\u0631\u0627\u062A\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0625\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x380A, 0x000A, "es-UY", "es", "spa", "es-UY", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0055\u0072\u0075\u0067\u0075\u0061\u0079\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0055\u0072\u0075\u0067\u0075\u0061\u0079\u0029", false, 0x00F6, "UY", "URY", "\u0055\u0072\u0075\u0067\u0075\u0061\u0079", "\u0055\u0072\u0075\u0067\u0075\u0061\u0079", "\u0055\u0059\u0055", "\u0050\u0065\u0073\u006F\u0020\u0055\u0072\u0075\u0067\u0075\u0061\u0079\u006F", "\u0050\u0065\u0073\u006F", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024\u0055", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x3C01, 0x0001, "ar-BH", "ar", "ara", "ar-BH", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0042\u0061\u0068\u0072\u0061\u0069\u006E\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0627\u0644\u0628\u062D\u0631\u064A\u0646\u0029", false, 0x0011, "BH", "BHR", "\u0042\u0061\u0068\u0072\u0061\u0069\u006E", "\u0627\u0644\u0628\u062D\u0631\u064A\u0646", "\u0042\u0048\u0044", "\u0042\u0061\u0068\u0072\u0061\u0069\u006E\u0069\u0020\u0044\u0069\u006E\u0061\u0072", "\u062F\u064A\u0646\u0627\u0631\u00A0\u0628\u062D\u0631\u064A\u0646\u064A", true, 3, 3, 3, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u062F\u002E\u0628\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x3C0A, 0x000A, "es-PY", "es", "spa", "es-PY", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0050\u0061\u0072\u0061\u0067\u0075\u0061\u0079\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0050\u0061\u0072\u0061\u0067\u0075\u0061\u0079\u0029", false, 0x00B9, "PY", "PRY", "\u0050\u0061\u0072\u0061\u0067\u0075\u0061\u0079", "\u0050\u0061\u0072\u0061\u0067\u0075\u0061\u0079", "\u0050\u0059\u0047", "\u0050\u0061\u0072\u0061\u0067\u0075\u0061\u0079\u0020\u0047\u0075\u0061\u0072\u0061\u006E\u0069", "\u0047\u0075\u0061\u0072\u0061\u006E\u00ED", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0047\u0073", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 1, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x4001, 0x0001, "ar-QA", "ar", "ara", "ar-QA", "\u0041\u0072\u0061\u0062\u0069\u0063\u0020\u0028\u0051\u0061\u0074\u0061\u0072\u0029", "\u0627\u0644\u0639\u0631\u0628\u064A\u0629\u0020\u0028\u0642\u0637\u0631\u0029", false, 0x00C5, "QA", "QAT", "\u0051\u0061\u0074\u0061\u0072", "\u0642\u0637\u0631", "\u0051\u0041\u0052", "\u0051\u0061\u0074\u0061\u0072\u0069\u0020\u0052\u0069\u0061\u006C", "\u0631\u064A\u0627\u0644\u00A0\u0642\u0637\u0631\u064A", true, 2, 3, 2, 3, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0631\u002E\u0642\u002E\u200F", "\u002D", "\u002B", "\u0644\u064A\u0633\u0020\u0628\u0631\u0642\u0645", "\u002D\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", "\u002B\u0644\u0627\u0020\u0646\u0647\u0627\u064A\u0629", [ "\u0660", "\u0661", "\u0662", "\u0663", "\u0664", "\u0665", "\u0666", "\u0667", "\u0668", "\u0669" ], 1, [ 1, 23, 6, 2, 9, 10, 12 ], "\u0627\u0644\u062A\u0642\u0648\u064A\u0645\u00A0\u0627\u0644\u0645\u064A\u0644\u0627\u062F\u064A\u00A0\u0028\u062A\u0633\u0645\u064A\u0629\u00A0\u0625\u0646\u062C\u0644\u064A\u0632\u064A\u0629\u0029\u200F", 6, 0, "\u002F", "\u003A", "\u0635", "\u0645", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u0627\u0644\u0627\u062D\u062F", "\u0627\u0644\u0627\u062B\u0646\u064A\u0646", "\u0627\u0644\u062B\u0644\u0627\u062B\u0627\u0621", "\u0627\u0644\u0627\u0631\u0628\u0639\u0627\u0621", "\u0627\u0644\u062E\u0645\u064A\u0633", "\u0627\u0644\u062C\u0645\u0639\u0629", "\u0627\u0644\u0633\u0628\u062A" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ], [ "\u064A\u0646\u0627\u064A\u0631", "\u0641\u0628\u0631\u0627\u064A\u0631", "\u0645\u0627\u0631\u0633", "\u0627\u0628\u0631\u064A\u0644", "\u0645\u0627\u064A\u0648", "\u064A\u0648\u0646\u064A\u0648", "\u064A\u0648\u0644\u064A\u0648", "\u0627\u063A\u0633\u0637\u0633", "\u0633\u0628\u062A\u0645\u0628\u0631", "\u0627\u0643\u062A\u0648\u0628\u0631", "\u0646\u0648\u0641\u0645\u0628\u0631", "\u062F\u064A\u0633\u0645\u0628\u0631", "" ] }, -{ 0x400A, 0x000A, "es-BO", "es", "spa", "es-BO", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u0029", false, 0x001A, "BO", "BOL", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061", "\u0042\u004F\u0042", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u006E\u006F", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u006E\u006F", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024\u0062", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x440A, 0x000A, "es-SV", "es", "spa", "es-SV", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0045\u006C\u0020\u0053\u0061\u006C\u0076\u0061\u0064\u006F\u0072\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0045\u006C\u0020\u0053\u0061\u006C\u0076\u0061\u0064\u006F\u0072\u0029", false, 0x0048, "SV", "SLV", "\u0045\u006C\u0020\u0053\u0061\u006C\u0076\u0061\u0064\u006F\u0072", "\u0045\u006C\u0020\u0053\u0061\u006C\u0076\u0061\u0064\u006F\u0072", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u0061\u0072", true, 2, 1, 2, 0, 0, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u004D\u004D\u002D\u0064\u0064\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x480A, 0x000A, "es-HN", "es", "spa", "es-HN", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0048\u006F\u006E\u0064\u0075\u0072\u0061\u0073\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0048\u006F\u006E\u0064\u0075\u0072\u0061\u0073\u0029", false, 0x006A, "HN", "HND", "\u0048\u006F\u006E\u0064\u0075\u0072\u0061\u0073", "\u0048\u006F\u006E\u0064\u0075\u0072\u0061\u0073", "\u0048\u004E\u004C", "\u0048\u006F\u006E\u0064\u0075\u0072\u0061\u006E\u0020\u004C\u0065\u006D\u0070\u0069\u0072\u0061", "\u004C\u0065\u006D\u0070\u0069\u0072\u0061", true, 2, 1, 2, 12, 2, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u004C\u002E", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u004D\u004D\u002D\u0064\u0064\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x4C0A, 0x000A, "es-NI", "es", "spa", "es-NI", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u004E\u0069\u0063\u0061\u0072\u0061\u0067\u0075\u0061\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u004E\u0069\u0063\u0061\u0072\u0061\u0067\u0075\u0061\u0029", false, 0x00B6, "NI", "NIC", "\u004E\u0069\u0063\u0061\u0072\u0061\u0067\u0075\u0061", "\u004E\u0069\u0063\u0061\u0072\u0061\u0067\u0075\u0061", "\u004E\u0049\u004F", "\u004E\u0069\u0063\u0061\u0072\u0061\u0067\u0075\u0061\u006E\u0020\u0043\u006F\u0072\u0064\u006F\u0062\u0061\u0020\u004F\u0072\u006F", "\u0043\u00F3\u0072\u0064\u006F\u0062\u0061", true, 2, 1, 2, 14, 2, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0043\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u004D\u004D\u002D\u0064\u0064\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x500A, 0x000A, "es-PR", "es", "spa", "es-PR", "\u0053\u0070\u0061\u006E\u0069\u0073\u0068\u0020\u0028\u0050\u0075\u0065\u0072\u0074\u006F\u0020\u0052\u0069\u0063\u006F\u0029", "\u0045\u0073\u0070\u0061\u00F1\u006F\u006C\u0020\u0028\u0050\u0075\u0065\u0072\u0074\u006F\u0020\u0052\u0069\u0063\u006F\u0029", false, 0x00CA, "PR", "PRI", "\u0050\u0075\u0065\u0072\u0074\u006F\u0020\u0052\u0069\u0063\u006F", "\u0050\u0075\u0065\u0072\u0074\u006F\u0020\u0052\u0069\u0063\u006F", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", true, 2, 1, 2, 14, 2, [ 3 ], [ 3, 0 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0065\u0075\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u006F", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u004D\u004D\u002D\u0064\u0064\u002D\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0064\u006F\u006D", "\u006C\u0075\u006E", "\u006D\u0061\u0072", "\u006D\u0069\u00E9", "\u006A\u0075\u0065", "\u0076\u0069\u0065", "\u0073\u00E1\u0062" ], [ "\u0064\u006F\u006D\u0069\u006E\u0067\u006F", "\u006C\u0075\u006E\u0065\u0073", "\u006D\u0061\u0072\u0074\u0065\u0073", "\u006D\u0069\u00E9\u0072\u0063\u006F\u006C\u0065\u0073", "\u006A\u0075\u0065\u0076\u0065\u0073", "\u0076\u0069\u0065\u0072\u006E\u0065\u0073", "\u0073\u00E1\u0062\u0061\u0064\u006F" ], [ "\u0065\u006E\u0065", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0062\u0072", "\u006D\u0061\u0079", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0067\u006F", "\u0073\u0065\u0070", "\u006F\u0063\u0074", "\u006E\u006F\u0076", "\u0064\u0069\u0063", "" ], [ "\u0065\u006E\u0065\u0072\u006F", "\u0066\u0065\u0062\u0072\u0065\u0072\u006F", "\u006D\u0061\u0072\u007A\u006F", "\u0061\u0062\u0072\u0069\u006C", "\u006D\u0061\u0079\u006F", "\u006A\u0075\u006E\u0069\u006F", "\u006A\u0075\u006C\u0069\u006F", "\u0061\u0067\u006F\u0073\u0074\u006F", "\u0073\u0065\u0070\u0074\u0069\u0065\u006D\u0062\u0072\u0065", "\u006F\u0063\u0074\u0075\u0062\u0072\u0065", "\u006E\u006F\u0076\u0069\u0065\u006D\u0062\u0072\u0065", "\u0064\u0069\u0063\u0069\u0065\u006D\u0062\u0072\u0065", "" ] }, -{ 0x7C04, 0x007F, "zh-CHT", "zh", "zho", "zh-Hant", "\u0043\u0068\u0069\u006E\u0065\u0073\u0065\u0020\u0028\u0054\u0072\u0061\u0064\u0069\u0074\u0069\u006F\u006E\u0061\u006C\u0029", "\u4E2D\u6587\u0028\u7E41\u9AD4\u0029", true }, -{ 0x7C1A, 0x007F, "sr", "sr", "srp", "sr", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E", "\u0073\u0072\u0070\u0073\u006B\u0069", true }, -{ 0x183B, 0x007F, "sma-NO", "sma", "sma", "sma-NO", "\u0053\u0061\u006D\u0069\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0065\u0072\u006E\u0029\u0020\u0028\u004E\u006F\u0072\u0077\u0061\u0079\u0029", "\u00E5\u0061\u0072\u006A\u0065\u006C\u0073\u0061\u0065\u006D\u0069\u0065\u006E\u0067\u0069\u0065\u006C\u0065\u0020\u0028\u004E\u00F6\u00F6\u0072\u006A\u0065\u0029", false, 0x00B1, "NO", "NO", "\u004E\u006F\u0072\u0077\u0061\u0079", "\u004E\u00F6\u00F6\u0072\u006A\u0065", "\u004E\u004F\u004B", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006E\u0065", "\u006B\u0072\u00E5\u0076\u006E\u006F\u0065", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0061\u0065\u006A", "\u006D\u00E5\u0061", "\u0064\u00E6\u006A", "\u0067\u0061\u0073\u006B", "\u0064\u0075\u0061\u0072", "\u0062\u0065\u0061\u0072\u006A", "\u006C\u0061\u0061\u0076" ], [ "\u0061\u0065\u006A\u006C\u0065\u0067\u0065", "\u006D\u00E5\u0061\u006E\u0074\u0061", "\u0064\u00E6\u006A\u0073\u0074\u0061", "\u0067\u0061\u0073\u006B\u0065\u0076\u00E5\u0068\u006B\u006F\u0065", "\u0064\u0075\u0061\u0072\u0073\u0074\u0061", "\u0062\u0065\u0061\u0072\u006A\u0061\u0064\u0061\u0068\u006B\u0065", "\u006C\u0061\u0061\u0076\u0076\u0061\u0072\u0064\u0061\u0068\u006B\u0065" ], [ "\u0074\u0073\u00EF\u0065\u006E", "\u0067\u006F\u0065\u0076\u0074", "\u006E\u006A\u006F\u006B", "\u0076\u006F\u0065\u0072", "\u0073\u0075\u0065\u0068", "\u0072\u0075\u0066\u0066", "\u0073\u006E\u006A\u0061", "\u006D\u00EF\u0065\u0074", "\u0073\u006B\u00EF\u0065\u0072", "\u0067\u006F\u006C\u006B", "\u0072\u0061\u0068\u006B", "\u0067\u006F\u0065\u0076", "" ], [ "\u0074\u0073\u00EF\u0065\u006E\u0067\u0065\u006C\u0065", "\u0067\u006F\u0065\u0076\u0074\u0065", "\u006E\u006A\u006F\u006B\u0074\u006A\u0065", "\u0076\u006F\u0065\u0072\u0068\u0074\u006A\u0065", "\u0073\u0075\u0065\u0068\u0070\u0065\u0064\u0065", "\u0072\u0075\u0066\u0066\u0069\u0065", "\u0073\u006E\u006A\u0061\u006C\u0074\u006A\u0065", "\u006D\u00EF\u0065\u0074\u0073\u006B\u0065", "\u0073\u006B\u00EF\u0065\u0072\u0065\u0064\u0065", "\u0067\u006F\u006C\u006B\u0065", "\u0072\u0061\u0068\u006B\u0061", "\u0067\u006F\u0065\u0076\u0065", "" ] }, -{ 0x1C1A, 0x007F, "sr-BA-Cyrl", "sr", "sr", "sr-Cyrl-BA", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0028\u0043\u0079\u0072\u0069\u006C\u006C\u0069\u0063\u0029\u0020\u0028\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", "\u0441\u0440\u043F\u0441\u043A\u0438\u0020\u0028\u0411\u043E\u0441\u043D\u0430\u0020\u0438\u0020\u0425\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430\u0029", false, 0x0019, "BA", "BA", "\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0411\u043E\u0441\u043D\u0430\u0020\u0438\u0020\u0425\u0435\u0440\u0446\u0435\u0433\u043E\u0432\u0438\u043D\u0430", "\u0042\u0041\u004D", "\u0043\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u006C\u0065\u0020\u004D\u0061\u0072\u006B\u0073", "\u043A\u043E\u043D\u0432\u0435\u0440\u0442\u0438\u0431\u0438\u043B\u043D\u0430\u0020\u043C\u0430\u0440\u043A\u0430", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u041A\u041C", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0433\u0440\u0435\u0433\u043E\u0440\u0438\u0458\u0430\u043D\u0441\u043A\u0438\u0020\u043A\u0430\u043B\u0435\u043D\u0434\u0430\u0440", 0, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u043D\u0435\u0434", "\u043F\u043E\u043D", "\u0443\u0442\u043E", "\u0441\u0440\u0435", "\u0447\u0435\u0442", "\u043F\u0435\u0442", "\u0441\u0443\u0431" ], [ "\u043D\u0435\u0434\u0435\u0459\u0430", "\u043F\u043E\u043D\u0435\u0434\u0435\u0459\u0430\u043A", "\u0443\u0442\u043E\u0440\u0430\u043A", "\u0441\u0440\u0435\u0434\u0430", "\u0447\u0435\u0442\u0432\u0440\u0442\u0430\u043A", "\u043F\u0435\u0442\u0430\u043A", "\u0441\u0443\u0431\u043E\u0442\u0430" ], [ "\u0458\u0430\u043D", "\u0444\u0435\u0431", "\u043C\u0430\u0440", "\u0430\u043F\u0440", "\u043C\u0430\u0458", "\u0458\u0443\u043D", "\u0458\u0443\u043B", "\u0430\u0432\u0433", "\u0441\u0435\u043F", "\u043E\u043A\u0442", "\u043D\u043E\u0432", "\u0434\u0435\u0446", "" ], [ "\u0458\u0430\u043D\u0443\u0430\u0440", "\u0444\u0435\u0431\u0440\u0443\u0430\u0440", "\u043C\u0430\u0440\u0442", "\u0430\u043F\u0440\u0438\u043B", "\u043C\u0430\u0458", "\u0458\u0443\u043D", "\u0458\u0443\u043B", "\u0430\u0432\u0433\u0443\u0441\u0442", "\u0441\u0435\u043F\u0442\u0435\u043C\u0431\u0430\u0440", "\u043E\u043A\u0442\u043E\u0431\u0430\u0440", "\u043D\u043E\u0432\u0435\u043C\u0431\u0430\u0440", "\u0434\u0435\u0446\u0435\u043C\u0431\u0430\u0440", "" ] }, -{ 0x0435, 0x007F, "zu-ZA", "zu", "zu", "zu-ZA", "\u005A\u0075\u006C\u0075\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0069\u0073\u0069\u005A\u0075\u006C\u0075\u0020\u0028\u0069\u004E\u0069\u006E\u0067\u0069\u007A\u0069\u006D\u0075\u0020\u0041\u0066\u0072\u0069\u006B\u0061\u0029", false, 0x00D1, "ZA", "ZA", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0069\u004E\u0069\u006E\u0067\u0069\u007A\u0069\u006D\u0075\u0020\u0041\u0066\u0072\u0069\u006B\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 6, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0069\u0053\u006F\u006E\u0074\u006F", "\u0075\u004D\u0073\u006F\u006D\u0062\u0075\u006C\u0075\u006B\u006F", "\u0075\u004C\u0077\u0065\u0073\u0069\u0062\u0069\u006C\u0069", "\u0075\u004C\u0077\u0065\u0073\u0069\u0074\u0068\u0061\u0074\u0068\u0075", "\u0075\u004C\u0077\u0065\u0073\u0069\u006E\u0065", "\u0075\u004C\u0077\u0065\u0073\u0069\u0068\u006C\u0061\u006E\u0075", "\u0075\u004D\u0067\u0071\u0069\u0062\u0065\u006C\u006F" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u0075\u004A\u0061\u006E\u0075\u0077\u0061\u0072\u0069", "\u0075\u0046\u0065\u0062\u0075\u0077\u0061\u0072\u0069", "\u0075\u004D\u0061\u0073\u0068\u0069", "\u0075\u0041\u0070\u0072\u0068\u0069\u006C\u0069", "\u0075\u004D\u0065\u0079\u0069", "\u0075\u004A\u0075\u006E\u0069", "\u0075\u004A\u0075\u006C\u0061\u0079\u0069", "\u0075\u0041\u0067\u0061\u0073\u0074\u0065", "\u0075\u0053\u0065\u0070\u0074\u0068\u0065\u006D\u0062\u0061", "\u0075\u004F\u006B\u0074\u0068\u006F\u0062\u0061", "\u0075\u004E\u006F\u0076\u0065\u006D\u0062\u0061", "\u0075\u0044\u0069\u0073\u0065\u006D\u0062\u0061", "" ] }, -{ 0x0434, 0x007F, "xh-ZA", "xh", "xh", "xh-ZA", "\u0058\u0068\u006F\u0073\u0061\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0069\u0073\u0069\u0058\u0068\u006F\u0073\u0061\u0020\u0028\u0075\u004D\u007A\u0061\u006E\u0074\u0073\u0069\u0020\u0041\u0066\u0072\u0069\u006B\u0061\u0029", false, 0x00D1, "ZA", "ZA", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0075\u004D\u007A\u0061\u006E\u0074\u0073\u0069\u0020\u0041\u0066\u0072\u0069\u006B\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 6, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u0069\u0043\u0061\u0077\u0061", "\u0075\u004D\u0076\u0075\u006C\u006F", "\u0075\u004C\u0077\u0065\u0073\u0069\u0062\u0069\u006E\u0069", "\u0075\u004C\u0077\u0065\u0073\u0069\u0074\u0068\u0061\u0074\u0068\u0075", "\u0075\u004C\u0077\u0065\u0073\u0069\u006E\u0065", "\u0075\u004C\u0077\u0065\u0073\u0069\u0068\u006C\u0061\u006E\u0075", "\u0075\u004D\u0067\u0071\u0069\u0062\u0065\u006C\u006F" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u0065\u0079\u006F\u004D\u0071\u0075\u006E\u0067\u0075", "\u0065\u0079\u006F\u004D\u0064\u0075\u006D\u0062\u0061", "\u0065\u0079\u006F\u004B\u0077\u0069\u006E\u0064\u006C\u0061", "\u0054\u0073\u0068\u0061\u007A\u0069\u006D\u0070\u0075\u007A\u0069", "\u0043\u0061\u006E\u007A\u0069\u0062\u0065", "\u0065\u0079\u0065\u0053\u0069\u006C\u0069\u006D\u0065\u006C\u0061", "\u0065\u0079\u0065\u004B\u0068\u0061\u006C\u0061", "\u0065\u0079\u0065\u0054\u0068\u0075\u0070\u0068\u0061", "\u0065\u0079\u006F\u004D\u0073\u0069\u006E\u0074\u0073\u0069", "\u0065\u0079\u0065\u0044\u0077\u0061\u0072\u0061", "\u0065\u0079\u0065\u004E\u006B\u0061\u006E\u0067\u0061", "\u0065\u0079\u006F\u004D\u006E\u0067\u0061", "" ] }, -{ 0x0432, 0x007F, "tn-ZA", "tn", "tn", "tn-ZA", "\u0054\u0073\u0077\u0061\u006E\u0061\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0053\u0065\u0074\u0073\u0077\u0061\u006E\u0061\u0020\u0028\u0041\u0066\u006F\u0072\u0069\u006B\u0061\u0020\u0042\u006F\u0072\u0077\u0061\u0029", false, 0x00D1, "ZA", "ZA", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0041\u0066\u006F\u0072\u0069\u006B\u0061\u0020\u0042\u006F\u0072\u0077\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 6, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u004C\u0061\u0074\u0073\u0068\u0069\u0070\u0069", "\u004D\u006F\u0073\u0075\u0070\u006F\u006C\u006F\u0067\u006F", "\u004C\u0061\u0062\u006F\u0062\u0065\u0064\u0069", "\u004C\u0061\u0062\u006F\u0072\u0061\u0072\u006F", "\u004C\u0061\u0062\u006F\u006E\u0065", "\u004C\u0061\u0062\u006F\u0074\u006C\u0068\u0061\u006E\u006F", "\u004C\u0061\u006D\u0061\u0074\u006C\u0068\u0061\u0074\u0073\u006F" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u0046\u0065\u0072\u0069\u006B\u0067\u006F\u006E\u0067", "\u0054\u006C\u0068\u0061\u006B\u006F\u006C\u0065", "\u004D\u006F\u0070\u0069\u0074\u006C\u006F\u0065", "\u004D\u006F\u0072\u0061\u006E\u0061\u006E\u0067", "\u004D\u006F\u0074\u0073\u0068\u0065\u0067\u0061\u006E\u006F\u006E\u0067", "\u0053\u0065\u0065\u0074\u0065\u0062\u006F\u0073\u0069\u0067\u006F", "\u0050\u0068\u0075\u006B\u0077\u0069", "\u0050\u0068\u0061\u0074\u0077\u0065", "\u004C\u0077\u0065\u0074\u0073\u0065", "\u0044\u0069\u0070\u0068\u0061\u006C\u0061\u006E\u0065", "\u004E\u0067\u0077\u0061\u006E\u0061\u0074\u0073\u0065\u006C\u0065", "\u0053\u0065\u0064\u0069\u006D\u006F\u0074\u0068\u006F\u006C\u0065", "" ] }, -{ 0x083B, 0x007F, "se-SE", "se", "se", "se-SE", "\u0053\u0061\u006D\u0069\u0020\u0028\u004E\u006F\u0072\u0074\u0068\u0065\u0072\u006E\u0029\u0020\u0028\u0053\u0077\u0065\u0064\u0065\u006E\u0029", "\u0064\u0061\u0076\u0076\u0069\u0073\u00E1\u006D\u0065\u0067\u0069\u0065\u006C\u006C\u0061\u0020\u0028\u0052\u0075\u006F\u0167\u0167\u0061\u0029", false, 0x00DD, "SE", "SE", "\u0053\u0077\u0065\u0064\u0065\u006E", "\u0052\u0075\u006F\u0167\u0167\u0061", "\u0053\u0045\u004B", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0061", "\u006B\u0072\u0075\u0076\u0064\u006E\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u006F\u0074\u006E", "\u006D\u00E1\u006E", "\u0064\u0069\u0073", "\u0067\u0061\u0073\u006B", "\u0064\u0075\u006F\u0072", "\u0062\u0065\u0061\u0072", "\u006C\u00E1\u0076" ], [ "\u0073\u006F\u0074\u006E\u0061\u0062\u0065\u0061\u0069\u0076\u0069", "\u006D\u00E1\u006E\u006E\u006F\u0064\u0061\u0074", "\u0064\u0069\u0073\u0064\u0061\u0074", "\u0067\u0061\u0073\u006B\u0061\u0076\u0061\u0068\u006B\u006B\u0075", "\u0064\u0075\u006F\u0072\u0061\u0073\u0074\u0061\u0074", "\u0062\u0065\u0061\u0072\u006A\u0061\u0064\u0061\u0074", "\u006C\u00E1\u0076\u0076\u0061\u0072\u0064\u0061\u0074" ], [ "\u006F\u0111\u0111\u006A", "\u0067\u0075\u006F\u0076", "\u006E\u006A\u0075\u006B", "\u0063\u0075\u006F", "\u006D\u0069\u0065\u0073", "\u0067\u0065\u0061\u0073", "\u0073\u0075\u006F\u0069", "\u0062\u006F\u0072\u0067", "\u010D\u0061\u006B\u010D", "\u0067\u006F\u006C\u0067", "\u0073\u006B\u00E1\u0062", "\u006A\u0075\u006F\u0076", "" ], [ "\u006F\u0111\u0111\u0061\u006A\u0061\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0075\u006F\u0076\u0076\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006E\u006A\u0075\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0063\u0075\u006F\u014B\u006F\u006D\u00E1\u006E\u006E\u0075", "\u006D\u0069\u0065\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0065\u0061\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0073\u0075\u006F\u0069\u0064\u006E\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0062\u006F\u0072\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u010D\u0061\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0067\u006F\u006C\u0067\u0067\u006F\u0074\u006D\u00E1\u006E\u006E\u0075", "\u0073\u006B\u00E1\u0062\u006D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006A\u0075\u006F\u0076\u006C\u0061\u006D\u00E1\u006E\u006E\u0075", "" ] }, -{ 0x1C3B, 0x007F, "sma-SE", "sma", "sma", "sma-SE", "\u0053\u0061\u006D\u0069\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0065\u0072\u006E\u0029\u0020\u0028\u0053\u0077\u0065\u0064\u0065\u006E\u0029", "\u00E5\u0061\u0072\u006A\u0065\u006C\u0073\u0061\u0065\u006D\u0069\u0065\u006E\u0067\u0069\u0065\u006C\u0065\u0020\u0028\u0053\u0076\u0065\u0065\u0072\u006A\u0065\u0029", false, 0x00DD, "SE", "SE", "\u0053\u0077\u0065\u0064\u0065\u006E", "\u0053\u0076\u0065\u0065\u0072\u006A\u0065", "\u0053\u0045\u004B", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0061", "\u006B\u0072\u00E5\u0076\u006E\u006F\u0065", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0061\u0065\u006A", "\u006D\u00E5\u0061", "\u0064\u00E6\u006A", "\u0067\u0061\u0073\u006B", "\u0064\u0075\u0061\u0072", "\u0062\u0065\u0061\u0072\u006A", "\u006C\u0061\u0061\u0076" ], [ "\u0061\u0065\u006A\u006C\u0065\u0067\u0065", "\u006D\u00E5\u0061\u006E\u0074\u0061", "\u0064\u00E6\u006A\u0073\u0074\u0061", "\u0067\u0061\u0073\u006B\u0065\u0076\u00E5\u0068\u006B\u006F\u0065", "\u0064\u0075\u0061\u0072\u0073\u0074\u0061", "\u0062\u0065\u0061\u0072\u006A\u0061\u0064\u0061\u0068\u006B\u0065", "\u006C\u0061\u0061\u0076\u0076\u0061\u0072\u0064\u0061\u0068\u006B\u0065" ], [ "\u0074\u0073\u00EF\u0065\u006E", "\u0067\u006F\u0065\u0076\u0074", "\u006E\u006A\u006F\u006B", "\u0076\u006F\u0065\u0072", "\u0073\u0075\u0065\u0068", "\u0072\u0075\u0066\u0066", "\u0073\u006E\u006A\u0061", "\u006D\u00EF\u0065\u0074", "\u0073\u006B\u00EF\u0065\u0072", "\u0067\u006F\u006C\u006B", "\u0072\u0061\u0068\u006B", "\u0067\u006F\u0065\u0076", "" ], [ "\u0074\u0073\u00EF\u0065\u006E\u0067\u0065\u006C\u0065", "\u0067\u006F\u0065\u0076\u0074\u0065", "\u006E\u006A\u006F\u006B\u0074\u006A\u0065", "\u0076\u006F\u0065\u0072\u0068\u0074\u006A\u0065", "\u0073\u0075\u0065\u0068\u0070\u0065\u0064\u0065", "\u0072\u0075\u0066\u0066\u0069\u0065", "\u0073\u006E\u006A\u0061\u006C\u0074\u006A\u0065", "\u006D\u00EF\u0065\u0074\u0073\u006B\u0065", "\u0073\u006B\u00EF\u0065\u0072\u0065\u0064\u0065", "\u0067\u006F\u006C\u006B\u0065", "\u0072\u0061\u0068\u006B\u0061", "\u0067\u006F\u0065\u0076\u0065", "" ] }, -{ 0x101A, 0x007F, "hr-BA", "hr", "hr", "hr-BA", "\u0043\u0072\u006F\u0061\u0074\u0069\u0061\u006E\u0020\u0028\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", "\u0068\u0072\u0076\u0061\u0074\u0073\u006B\u0069\u0020\u0028\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", false, 0x0019, "BA", "BA", "\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u0041\u004D", "\u0043\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u006C\u0065\u0020\u004D\u0061\u0072\u006B\u0073", "\u006B\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u0069\u006C\u006E\u0061\u0020\u006D\u0061\u0072\u006B\u0061", true, 2, 2, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u004B\u004D", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u002C\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0075\u0074\u006F", "\u0073\u0072\u0069", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u0075\u0062" ], [ "\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061\u006B", "\u0075\u0074\u006F\u0072\u0061\u006B", "\u0073\u0072\u0069\u006A\u0065\u0064\u0061", "\u010D\u0065\u0074\u0076\u0072\u0074\u0061\u006B", "\u0070\u0065\u0074\u0061\u006B", "\u0073\u0075\u0062\u006F\u0074\u0061" ], [ "\u0073\u0069\u006A", "\u0076\u006C\u006A", "\u006F\u017E\u0075", "\u0074\u0072\u0061", "\u0073\u0076\u0069", "\u006C\u0069\u0070", "\u0073\u0072\u0070", "\u006B\u006F\u006C", "\u0072\u0075\u006A", "\u006C\u0069\u0073", "\u0073\u0074\u0075", "\u0070\u0072\u006F", "" ], [ "\u0073\u0069\u006A\u0065\u010D\u0061\u006E\u006A", "\u0076\u0065\u006C\u006A\u0061\u010D\u0061", "\u006F\u017E\u0075\u006A\u0061\u006B", "\u0074\u0072\u0061\u0076\u0061\u006E\u006A", "\u0073\u0076\u0069\u0062\u0061\u006E\u006A", "\u006C\u0069\u0070\u0061\u006E\u006A", "\u0073\u0072\u0070\u0061\u006E\u006A", "\u006B\u006F\u006C\u006F\u0076\u006F\u007A", "\u0072\u0075\u006A\u0061\u006E", "\u006C\u0069\u0073\u0074\u006F\u0070\u0061\u0064", "\u0073\u0074\u0075\u0064\u0065\u006E\u0069", "\u0070\u0072\u006F\u0073\u0069\u006E\u0061\u0063", "" ] }, -{ 0x243B, 0x007F, "smn-FI", "smn", "smn", "smn-FI", "\u0053\u0061\u006D\u0069\u0020\u0028\u0049\u006E\u0061\u0072\u0069\u0029\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", "\u0073\u00E4\u006D\u0069\u006B\u0069\u0065\u006C\u00E2\u0020\u0028\u0053\u0075\u006F\u006D\u00E2\u0029", false, 0x004D, "FI", "FI", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u0053\u0075\u006F\u006D\u00E2", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0076\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0069\u006E\u0065\u006E\u0020\u006B\u0061\u006C\u0065\u006E\u0074\u0065\u0072\u0069", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0070\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0070\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0070\u0061", "\u0076\u0075", "\u006D\u0061", "\u006B\u006F", "\u0074\u0075", "\u0076\u00E1", "\u006C\u00E1" ], [ "\u0070\u0061\u0073\u0065\u0070\u0065\u0069\u0076\u0069", "\u0076\u0075\u006F\u0073\u0073\u0061\u0072\u0067\u00E2", "\u006D\u0061\u006A\u0065\u0062\u0061\u0072\u0067\u00E2", "\u006B\u006F\u0073\u006B\u006F\u006B\u006B\u006F", "\u0074\u0075\u006F\u0072\u00E2\u0073\u0074\u00E2\u0068", "\u0076\u00E1\u0073\u0074\u0075\u0070\u0070\u0065\u0069\u0076\u0069", "\u006C\u00E1\u0076\u00E1\u0072\u0064\u00E2\u0068" ], [ "\u0075\u0111\u0069\u0076", "\u006B\u0075\u006F\u0076", "\u006E\u006A\u0075\u0068", "\u0063\u0075\u006F\u014B", "\u0076\u0079\u0065\u0073", "\u006B\u0065\u0073\u0069", "\u0073\u0079\u0065\u0069", "\u0070\u006F\u0072\u0067", "\u010D\u006F\u0068", "\u0072\u006F\u006F\u0076", "\u0073\u006B\u0061", "\u006A\u0075\u006F\u0076", "" ], [ "\u0075\u0111\u0111\u00E2\u0069\u0076\u0065\u006D\u00E1\u00E1\u006E\u0075", "\u006B\u0075\u006F\u0076\u00E2\u006D\u00E1\u00E1\u006E\u0075", "\u006E\u006A\u0075\u0068\u010D\u00E2\u006D\u00E1\u00E1\u006E\u0075", "\u0063\u0075\u00E1\u014B\u0075\u0069\u006D\u00E1\u00E1\u006E\u0075", "\u0076\u0079\u0065\u0073\u0069\u006D\u00E1\u00E1\u006E\u0075", "\u006B\u0065\u0073\u0069\u006D\u00E1\u00E1\u006E\u0075", "\u0073\u0079\u0065\u0069\u006E\u0069\u006D\u00E1\u00E1\u006E\u0075", "\u0070\u006F\u0072\u0067\u0065\u006D\u00E1\u00E1\u006E\u0075", "\u010D\u006F\u0068\u010D\u00E2\u006D\u00E1\u00E1\u006E\u0075", "\u0072\u006F\u006F\u0076\u0076\u00E2\u0064\u006D\u00E1\u00E1\u006E\u0075", "\u0073\u006B\u0061\u006D\u006D\u00E2\u006D\u00E1\u00E1\u006E\u0075", "\u006A\u0075\u006F\u0076\u006C\u00E2\u006D\u00E1\u00E1\u006E\u0075", "" ] }, -{ 0x0C6B, 0x007F, "quz-PE", "quz", "quz", "quz-PE", "\u0051\u0075\u0065\u0063\u0068\u0075\u0061\u0020\u0028\u0050\u0065\u0072\u0075\u0029", "\u0072\u0075\u006E\u0061\u0073\u0069\u006D\u0069\u0020\u0028\u0050\u0065\u0072\u0075\u0020\u0053\u0075\u0079\u0075\u0029", false, 0x00BB, "PE", "PE", "\u0050\u0065\u0072\u0075", "\u0050\u0065\u0072\u0075\u0020\u0053\u0075\u0079\u0075", "\u0050\u0045\u004E", "\u0050\u0065\u0072\u0075\u0076\u0069\u0061\u006E\u0020\u004E\u0075\u0065\u0076\u006F\u0020\u0053\u006F\u006C", "\u004E\u0075\u0065\u0076\u006F\u0020\u0053\u006F\u006C", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002E", "\u002C", "\u0053\u002F\u002E", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 6, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0069\u006E\u0074", "\u006B\u0069\u006C", "\u0061\u0074\u0069", "\u0071\u0075\u0079", "\u0043\u0068\u0092", "\u0049\u006C\u006C", "\u006B\u0027\u0075" ], [ "\u0069\u006E\u0074\u0069\u0063\u0068\u0061\u0077", "\u006B\u0069\u006C\u006C\u0061\u0063\u0068\u0061\u0077", "\u0061\u0074\u0069\u0070\u0061\u0063\u0068\u0061\u0077", "\u0071\u0075\u0079\u006C\u006C\u0075\u0072\u0063\u0068\u0061\u0077", "\u0043\u0068\u0027\u0020\u0061\u0073\u006B\u0061\u0063\u0068\u0061\u0077", "\u0049\u006C\u006C\u0061\u0070\u0061\u0063\u0068\u0061\u0077", "\u006B\u0027\u0075\u0079\u0063\u0068\u0069\u0063\u0068\u0061\u0077" ], [ "\u0051\u0075\u006C", "\u0048\u0061\u0074", "\u0050\u0061\u0075", "\u0061\u0079\u0072", "\u0041\u0079\u006D", "\u0049\u006E\u0074", "\u0041\u006E\u0074", "\u0051\u0068\u0061", "\u0055\u006D\u0061", "\u004B\u0061\u006E", "\u0041\u0079\u0061", "\u004B\u0061\u0070", "" ], [ "\u0051\u0075\u006C\u006C\u0061\u0020\u0070\u0075\u0071\u0075\u0079", "\u0048\u0061\u0074\u0075\u006E\u0020\u0070\u0075\u0071\u0075\u0079", "\u0050\u0061\u0075\u0071\u0061\u0072\u0020\u0077\u0061\u0072\u0061\u0079", "\u0061\u0079\u0072\u0069\u0077\u0061", "\u0041\u0079\u006D\u0075\u0072\u0061\u0079", "\u0049\u006E\u0074\u0069\u0020\u0072\u0061\u0079\u006D\u0069", "\u0041\u006E\u0074\u0061\u0020\u0053\u0069\u0074\u0077\u0061", "\u0051\u0068\u0061\u0070\u0061\u0071\u0020\u0053\u0069\u0074\u0077\u0061", "\u0055\u006D\u0061\u0020\u0072\u0061\u0079\u006D\u0069", "\u004B\u0061\u006E\u0074\u0061\u0072\u0061\u0079", "\u0041\u0079\u0061\u006D\u0061\u0072\u0071\u0027\u0061", "\u004B\u0061\u0070\u0061\u0071\u0020\u0052\u0061\u0079\u006D\u0069", "" ] }, -{ 0x0C3B, 0x007F, "se-FI", "se", "se", "se-FI", "\u0053\u0061\u006D\u0069\u0020\u0028\u004E\u006F\u0072\u0074\u0068\u0065\u0072\u006E\u0029\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", "\u0064\u0061\u0076\u0076\u0069\u0073\u00E1\u006D\u0065\u0067\u0069\u0065\u006C\u006C\u0061\u0020\u0028\u0053\u0075\u006F\u0070\u006D\u0061\u0029", false, 0x004D, "FI", "FI", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u0053\u0075\u006F\u0070\u006D\u0061", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0069\u006E\u0065\u006E\u0020\u006B\u0061\u006C\u0065\u006E\u0074\u0065\u0072\u0069", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u006F\u0074\u006E", "\u0076\u0075\u006F\u0073", "\u006D\u0061\u014B", "\u0067\u0061\u0073\u006B", "\u0064\u0075\u006F\u0072", "\u0062\u0065\u0061\u0072", "\u006C\u00E1\u0076" ], [ "\u0073\u006F\u0074\u006E\u0061\u0062\u0065\u0061\u0069\u0076\u0069", "\u0076\u0075\u006F\u0073\u0073\u00E1\u0072\u0067\u0061", "\u006D\u0061\u014B\u014B\u0065\u0062\u00E1\u0072\u0067\u0061", "\u0067\u0061\u0073\u006B\u0061\u0076\u0061\u0068\u006B\u006B\u0075", "\u0064\u0075\u006F\u0072\u0061\u0073\u0074\u0061\u0074", "\u0062\u0065\u0061\u0072\u006A\u0061\u0064\u0061\u0074", "\u006C\u00E1\u0076\u0076\u0061\u0072\u0064\u0061\u0074" ], [ "\u006F\u0111\u0111\u006A", "\u0067\u0075\u006F\u0076", "\u006E\u006A\u0075\u006B", "\u0063\u0075\u006F", "\u006D\u0069\u0065\u0073", "\u0067\u0065\u0061\u0073", "\u0073\u0075\u006F\u0069", "\u0062\u006F\u0072\u0067", "\u010D\u0061\u006B\u010D", "\u0067\u006F\u006C\u0067", "\u0073\u006B\u00E1\u0062", "\u006A\u0075\u006F\u0076", "" ], [ "\u006F\u0111\u0111\u0061\u006A\u0061\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0075\u006F\u0076\u0076\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006E\u006A\u0075\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0063\u0075\u006F\u014B\u006F\u006D\u00E1\u006E\u006E\u0075", "\u006D\u0069\u0065\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0065\u0061\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0073\u0075\u006F\u0069\u0064\u006E\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0062\u006F\u0072\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u010D\u0061\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0067\u006F\u006C\u0067\u0067\u006F\u0074\u006D\u00E1\u006E\u006E\u0075", "\u0073\u006B\u00E1\u0062\u006D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006A\u0075\u006F\u0076\u006C\u0061\u006D\u00E1\u006E\u006E\u0075", "" ] }, -{ 0x203B, 0x007F, "sms-FI", "sms", "sms", "sms-FI", "\u0053\u0061\u006D\u0069\u0020\u0028\u0053\u006B\u006F\u006C\u0074\u0029\u0020\u0028\u0046\u0069\u006E\u006C\u0061\u006E\u0064\u0029", "\u0073\u00E4\u00E4\u006D\u00B4\u01E9\u0069\u00F5\u006C\u006C\u0020\u0028\u004C\u00E4\u00E4\u00B4\u0064\u0064\u006A\u00E2\u006E\u006E\u0061\u006D\u0029", false, 0x004D, "FI", "FI", "\u0046\u0069\u006E\u006C\u0061\u006E\u0064", "\u004C\u00E4\u00E4\u00B4\u0064\u0064\u006A\u00E2\u006E\u006E\u0061\u006D", "\u0045\u0055\u0052", "\u0045\u0075\u0072\u006F", "\u0065\u0075\u0072\u006F", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u20AC", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u0061\u006E\u0069\u006E\u0065\u006E\u0020\u006B\u0061\u006C\u0065\u006E\u0074\u0065\u0072\u0069", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0070\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0070\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0070\u00E2", "\u0076\u0075", "\u006D\u00E2", "\u0073\u0065", "\u006E\u0065", "\u0070\u0069", "\u0073\u0075" ], [ "\u0070\u00E2\u00B4\u0073\u0073\u0070\u0065\u0069\u00B4\u0076\u0076", "\u0076\u0075\u00F5\u0073\u0073\u0061\u0072\u0067\u0067", "\u006D\u00E2\u00E2\u0069\u0062\u0061\u0072\u0067\u0067", "\u0073\u0065\u00E4\u0072\u0061\u0064", "\u006E\u0065\u006C\u006C\u006A\u0064\u0070\u0065\u0069\u00B4\u0076\u0076", "\u0070\u0069\u00E2\u0074\u006E\u00E2\u0063", "\u0073\u0075\u0065\u00B4\u0076\u0065\u0074" ], [ "\u006F\u0111\u006A\u006D", "\u0074\u00E4\u00B4\u006C\u0076\u0076", "\u0070\u00E2\u007A\u006C", "\u006E\u006A\u0075\u0068", "\u0076\u0075\u0065", "\u01E9\u0069\u0065", "\u0073\u0075\u0065\u0069", "\u0070\u00E5\u00B4\u0072", "\u010D\u00F5\u0068", "\u006B\u00E5\u006C\u0067", "\u0073\u006B\u0061", "\u0072\u006F\u0073\u0074", "" ], [ "\u006F\u0111\u0111\u0065\u0065\u00B4\u006A\u006A\u006D\u00E4\u00E4\u006E", "\u0074\u00E4\u00B4\u006C\u0076\u0076\u006D\u00E4\u00E4\u006E", "\u0070\u00E2\u00B4\u007A\u007A\u006C\u00E2\u0161\u0074\u0074\u0061\u006D\u006D\u00E4\u00E4\u006E", "\u006E\u006A\u0075\u0068\u010D\u010D\u006D\u00E4\u00E4\u006E", "\u0076\u0075\u0065\u00B4\u0073\u0073\u006D\u00E4\u00E4\u006E", "\u01E9\u0069\u0065\u00B4\u0073\u0073\u006D\u00E4\u00E4\u006E", "\u0073\u0075\u0065\u0069\u00B4\u006E\u006E\u006D\u00E4\u00E4\u006E", "\u0070\u00E5\u00B4\u0072\u01E7\u01E7\u006D\u00E4\u00E4\u006E", "\u010D\u00F5\u0068\u010D\u010D\u006D\u00E4\u00E4\u006E", "\u006B\u00E5\u006C\u0067\u0067\u006D\u00E4\u00E4\u006E", "\u0073\u006B\u0061\u006D\u006D\u00B4\u006D\u00E4\u00E4\u006E", "\u0072\u006F\u0073\u0074\u0074\u006F\u0076\u006D\u00E4\u00E4\u006E", "" ] }, -{ 0x0452, 0x007F, "cy-GB", "cy", "cy", "cy-GB", "\u0057\u0065\u006C\u0073\u0068\u0020\u0028\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D\u0029", "\u0043\u0079\u006D\u0072\u0061\u0065\u0067\u0020\u0028\u0079\u0020\u0044\u0065\u0079\u0072\u006E\u0061\u0073\u0020\u0055\u006E\u0065\u0064\u0069\u0067\u0029", false, 0x00F2, "GB", "GB", "\u0055\u006E\u0069\u0074\u0065\u0064\u0020\u004B\u0069\u006E\u0067\u0064\u006F\u006D", "\u0079\u0020\u0044\u0065\u0079\u0072\u006E\u0061\u0073\u0020\u0055\u006E\u0065\u0064\u0069\u0067", "\u0047\u0042\u0050", "\u0055\u004B\u0020\u0050\u006F\u0075\u006E\u0064\u0020\u0053\u0074\u0065\u0072\u006C\u0069\u006E\u0067", "\u0070\u0075\u006E\u0074", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u00A3", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0072\u0020\u0047\u0072\u0065\u0067\u006F\u0072\u0069", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006C", "\u004C\u006C\u0075\u006E", "\u004D\u0061\u0077", "\u004D\u0065\u0072", "\u0049\u0061\u0075", "\u0047\u0077\u0065", "\u0053\u0061\u0064" ], [ "\u0044\u0079\u0064\u0064\u0020\u0053\u0075\u006C", "\u0044\u0079\u0064\u0064\u0020\u004C\u006C\u0075\u006E", "\u0044\u0079\u0064\u0064\u0020\u004D\u0061\u0077\u0072\u0074\u0068", "\u0044\u0079\u0064\u0064\u0020\u004D\u0065\u0072\u0063\u0068\u0065\u0072", "\u0044\u0079\u0064\u0064\u0020\u0049\u0061\u0075", "\u0044\u0079\u0064\u0064\u0020\u0047\u0077\u0065\u006E\u0065\u0072", "\u0044\u0079\u0064\u0064\u0020\u0053\u0061\u0064\u0077\u0072\u006E" ], [ "\u0049\u006F\u006E", "\u0043\u0068\u0077\u0065", "\u004D\u0061\u0077", "\u0045\u0062\u0072", "\u004D\u0061\u0069", "\u004D\u0065\u0068", "\u0047\u006F\u0072", "\u0041\u0077\u0073", "\u004D\u0065\u0064", "\u0048\u0079\u0064", "\u0054\u0061\u0063\u0068", "\u0052\u0068\u0061\u0067", "" ], [ "\u0049\u006F\u006E\u0061\u0077\u0072", "\u0043\u0068\u0077\u0065\u0066\u0072\u006F\u0072", "\u004D\u0061\u0077\u0072\u0074\u0068", "\u0045\u0062\u0072\u0069\u006C\u006C", "\u004D\u0061\u0069", "\u004D\u0065\u0068\u0065\u0066\u0069\u006E", "\u0047\u006F\u0072\u0066\u0066\u0065\u006E\u006E\u0061\u0066", "\u0041\u0077\u0073\u0074", "\u004D\u0065\u0064\u0069", "\u0048\u0079\u0064\u0072\u0065\u0066", "\u0054\u0061\u0063\u0068\u0077\u0065\u0064\u0064", "\u0052\u0068\u0061\u0067\u0066\u0079\u0072", "" ] }, -{ 0x141A, 0x007F, "bs-BA-Latn", "bs", "bs", "bs-Latn-BA", "\u0042\u006F\u0073\u006E\u0069\u0061\u006E\u0020\u0028\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", "\u0062\u006F\u0073\u0061\u006E\u0073\u006B\u0069\u0020\u0028\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", false, 0x0019, "BA", "BA", "\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u0041\u004D", "\u0043\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u006C\u0065\u0020\u004D\u0061\u0072\u006B\u0073", "\u006B\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u0069\u006C\u006E\u0061\u0020\u006D\u0061\u0072\u006B\u0061", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u004B\u004D", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0075\u0074\u006F", "\u0073\u0072\u0069", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u0075\u0062" ], [ "\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u006A\u0065\u006C\u006A\u0061\u006B", "\u0075\u0074\u006F\u0072\u0061\u006B", "\u0073\u0072\u0069\u006A\u0065\u0064\u0061", "\u010D\u0065\u0074\u0076\u0072\u0074\u0061\u006B", "\u0070\u0065\u0074\u0061\u006B", "\u0073\u0075\u0062\u006F\u0074\u0061" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0074", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0061\u0072", "\u006F\u006B\u0074\u006F\u0062\u0061\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0061\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0061\u0072", "" ] }, -{ 0x103B, 0x007F, "smj-NO", "smj", "smj", "smj-NO", "\u0053\u0061\u006D\u0069\u0020\u0028\u004C\u0075\u006C\u0065\u0029\u0020\u0028\u004E\u006F\u0072\u0077\u0061\u0079\u0029", "\u006A\u0075\u006C\u0065\u0076\u0075\u0073\u00E1\u006D\u0065\u0067\u0069\u0065\u006C\u006C\u0061\u0020\u0028\u0056\u0075\u006F\u0064\u006E\u0061\u0029", false, 0x00B1, "NO", "NO", "\u004E\u006F\u0072\u0077\u0061\u0079", "\u0056\u0075\u006F\u0064\u006E\u0061", "\u004E\u004F\u004B", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006E\u0065", "\u006B\u0072\u00E5\u0076\u006E\u006E\u00E5", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u00E5\u0064", "\u006D\u00E1\u006E", "\u0064\u0069\u0073", "\u0067\u0061\u0073", "\u0064\u0075\u006F\u0072", "\u0062\u0069\u0065\u0072", "\u006C\u00E1\u0076" ], [ "\u0073\u00E5\u0064\u006E\u00E5\u0062\u0069\u0065\u006A\u0076\u0076\u0065", "\u006D\u00E1\u006E\u006E\u006F\u0064\u0061\u0068\u006B\u0061", "\u0064\u0069\u006A\u0073\u0074\u0061\u0068\u006B\u0061", "\u0067\u0061\u0073\u0073\u006B\u0061\u0076\u0061\u0068\u006B\u006B\u006F", "\u0064\u0075\u006F\u0072\u0061\u0073\u0074\u0061\u0068\u006B\u0061", "\u0062\u0069\u0065\u0072\u006A\u006A\u0065\u0064\u0061\u0068\u006B\u0061", "\u006C\u00E1\u0076\u0076\u006F\u0064\u0061\u0068\u006B\u0061" ], [ "\u00E5\u0064\u00E5\u006A", "\u0067\u0075\u006F\u0076", "\u0073\u006E\u006A\u0075", "\u0076\u0075\u006F\u0072", "\u006D\u006F\u0061\u0072", "\u0062\u0069\u0065\u0068", "\u0073\u006E\u006A\u0069", "\u0062\u00E5\u0072\u0067", "\u0072\u0061\u0067\u00E1", "\u0067\u00E5\u006C\u0067", "\u0062\u0061\u0073\u00E1", "\u006A\u0061\u0076\u006C", "" ], [ "\u00E5\u0064\u00E5\u006A\u0061\u006B\u006D\u00E1\u006E\u006E\u006F", "\u0067\u0075\u006F\u0076\u0076\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0073\u006A\u006E\u006A\u0075\u006B\u0074\u006A\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0076\u0075\u006F\u0072\u0061\u0074\u006A\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u006D\u006F\u0061\u0072\u006D\u0065\u0073\u006D\u00E1\u006E\u006E\u006F", "\u0062\u0069\u0065\u0068\u0074\u0073\u0065\u006D\u00E1\u006E\u006E\u006F", "\u0073\u006A\u006E\u006A\u0069\u006C\u006C\u0074\u006A\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0062\u00E5\u0072\u0067\u0067\u0065\u006D\u00E1\u006E\u006E\u006F", "\u0072\u0061\u0067\u00E1\u0074\u006D\u00E1\u006E\u006E\u006F", "\u0067\u00E5\u006C\u0067\u00E5\u0064\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u0062\u0061\u0073\u00E1\u0064\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u006A\u0061\u0076\u006C\u006C\u0061\u006D\u00E1\u006E\u006E\u006F", "" ] }, -{ 0x0481, 0x007F, "mi-NZ", "mi", "mi", "mi-NZ", "\u004D\u0061\u006F\u0072\u0069\u0020\u0028\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0029", "\u0052\u0065\u006F\u0020\u004D\u0101\u006F\u0072\u0069\u0020\u0028\u0041\u006F\u0074\u0065\u0061\u0072\u006F\u0061\u0029", false, 0x00B7, "NZ", "NZ", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064", "\u0041\u006F\u0074\u0065\u0061\u0072\u006F\u0061", "\u004E\u005A\u0044", "\u004E\u0065\u0077\u0020\u005A\u0065\u0061\u006C\u0061\u006E\u0064\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0074\u0101\u0072\u0061", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0054\u0061", "\u004D\u0061", "\u0054\u016B", "\u0057\u0065", "\u0054\u0101\u0069", "\u0050\u0061", "\u0048\u0101" ], [ "\u0052\u0101\u0074\u0061\u0070\u0075", "\u004D\u0061\u006E\u0065", "\u0054\u016B\u0072\u0065\u0069", "\u0057\u0065\u006E\u0065\u0072\u0065\u0069", "\u0054\u0101\u0069\u0074\u0065", "\u0050\u0061\u0072\u0061\u0069\u0072\u0065", "\u0048\u0101\u0074\u0061\u0072\u0065\u0069" ], [ "\u004B\u006F\u0068\u0069", "\u0048\u0075\u0069", "\u0050\u006F\u0075", "\u0050\u0061\u0065", "\u0048\u0061\u0072\u0061", "\u0050\u0069\u0070\u0069", "\u0048\u014D\u006E\u0067\u006F\u0069", "\u0048\u0065\u0072\u0065", "\u004D\u0061\u0068\u0075", "\u0057\u0068\u0069\u002D\u006E\u0075", "\u0057\u0068\u0069\u002D\u0072\u0061", "\u0048\u0061\u006B\u0069", "" ], [ "\u004B\u006F\u0068\u0069\u002D\u0074\u0101\u0074\u0065\u0061", "\u0048\u0075\u0069\u002D\u0074\u0061\u006E\u0067\u0075\u0072\u0075", "\u0050\u006F\u0075\u0074\u016B\u002D\u0074\u0065\u002D\u0072\u0061\u006E\u0067\u0069", "\u0050\u0061\u0065\u006E\u0067\u0061\u002D\u0077\u0068\u0101\u0077\u0068\u0101", "\u0048\u0061\u0072\u0061\u0074\u0075\u0061", "\u0050\u0069\u0070\u0069\u0072\u0069", "\u0048\u014D\u006E\u0067\u006F\u0069\u006E\u0067\u006F\u0069", "\u0048\u0065\u0072\u0065\u002D\u0074\u0075\u0072\u0069\u002D\u006B\u014D\u006B\u0101", "\u004D\u0061\u0068\u0075\u0072\u0075", "\u0057\u0068\u0069\u0072\u0069\u006E\u0067\u0061\u002D\u0101\u002D\u006E\u0075\u006B\u0075", "\u0057\u0068\u0069\u0072\u0069\u006E\u0067\u0061\u002D\u0101\u002D\u0072\u0061\u006E\u0067\u0069", "\u0048\u0061\u006B\u0069\u0068\u0065\u0061", "" ] }, -{ 0x086B, 0x007F, "quz-EC", "quz", "quz", "quz-EC", "\u0051\u0075\u0065\u0063\u0068\u0075\u0061\u0020\u0028\u0045\u0063\u0075\u0061\u0064\u006F\u0072\u0029", "\u0072\u0075\u006E\u0061\u0073\u0069\u006D\u0069\u0020\u0028\u0045\u0063\u0075\u0061\u0064\u006F\u0072\u0020\u0053\u0075\u0079\u0075\u0029", false, 0x0042, "EC", "EC", "\u0045\u0063\u0075\u0061\u0064\u006F\u0072", "\u0045\u0063\u0075\u0061\u0064\u006F\u0072\u0020\u0053\u0075\u0079\u0075", "\u0055\u0053\u0044", "\u0055\u0053\u0020\u0044\u006F\u006C\u006C\u0061\u0072", "\u0055\u0053\u0020\u0044\u006F\u006C\u0061\u0072", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 6, 0, "\u002F", "\u003A", "", "", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0069\u006E\u0074", "\u006B\u0069\u006C", "\u0061\u0074\u0069", "\u0071\u0075\u0079", "\u0043\u0068\u0092", "\u0049\u006C\u006C", "\u006B\u0027\u0075" ], [ "\u0069\u006E\u0074\u0069\u0063\u0068\u0061\u0077", "\u006B\u0069\u006C\u006C\u0061\u0063\u0068\u0061\u0077", "\u0061\u0074\u0069\u0070\u0061\u0063\u0068\u0061\u0077", "\u0071\u0075\u0079\u006C\u006C\u0075\u0072\u0063\u0068\u0061\u0077", "\u0043\u0068\u0027\u0020\u0061\u0073\u006B\u0061\u0063\u0068\u0061\u0077", "\u0049\u006C\u006C\u0061\u0070\u0061\u0063\u0068\u0061\u0077", "\u006B\u0027\u0075\u0079\u0063\u0068\u0069\u0063\u0068\u0061\u0077" ], [ "\u0051\u0075\u006C", "\u0048\u0061\u0074", "\u0050\u0061\u0075", "\u0061\u0079\u0072", "\u0041\u0079\u006D", "\u0049\u006E\u0074", "\u0041\u006E\u0074", "\u0051\u0068\u0061", "\u0055\u006D\u0061", "\u004B\u0061\u006E", "\u0041\u0079\u0061", "\u004B\u0061\u0070", "" ], [ "\u0051\u0075\u006C\u006C\u0061\u0020\u0070\u0075\u0071\u0075\u0079", "\u0048\u0061\u0074\u0075\u006E\u0020\u0070\u0075\u0071\u0075\u0079", "\u0050\u0061\u0075\u0071\u0061\u0072\u0020\u0077\u0061\u0072\u0061\u0079", "\u0061\u0079\u0072\u0069\u0077\u0061", "\u0041\u0079\u006D\u0075\u0072\u0061\u0079", "\u0049\u006E\u0074\u0069\u0020\u0072\u0061\u0079\u006D\u0069", "\u0041\u006E\u0074\u0061\u0020\u0053\u0069\u0074\u0077\u0061", "\u0051\u0068\u0061\u0070\u0061\u0071\u0020\u0053\u0069\u0074\u0077\u0061", "\u0055\u006D\u0061\u0020\u0072\u0061\u0079\u006D\u0069", "\u004B\u0061\u006E\u0074\u0061\u0072\u0061\u0079", "\u0041\u0079\u0061\u006D\u0061\u0072\u0071\u0027\u0061", "\u004B\u0061\u0070\u0061\u0071\u0020\u0052\u0061\u0079\u006D\u0069", "" ] }, -{ 0x181A, 0x007F, "sr-BA-Latn", "sr", "sr", "sr-Latn-BA", "\u0053\u0065\u0072\u0062\u0069\u0061\u006E\u0020\u0028\u004C\u0061\u0074\u0069\u006E\u0029\u0020\u0028\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", "\u0073\u0072\u0070\u0073\u006B\u0069\u0020\u0028\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061\u0029", false, 0x0019, "BA", "BA", "\u0042\u006F\u0073\u006E\u0069\u0061\u0020\u0061\u006E\u0064\u0020\u0048\u0065\u0072\u007A\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u006F\u0073\u006E\u0061\u0020\u0069\u0020\u0048\u0065\u0072\u0063\u0065\u0067\u006F\u0076\u0069\u006E\u0061", "\u0042\u0041\u004D", "\u0043\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u006C\u0065\u0020\u004D\u0061\u0072\u006B\u0073", "\u006B\u006F\u006E\u0076\u0065\u0072\u0074\u0069\u0062\u0069\u006C\u006E\u0061\u0020\u006D\u0061\u0072\u006B\u0061", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u004B\u004D", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u006A\u0061\u006E\u0073\u006B\u0069\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 0, 0, "\u002E", "\u003A", "", "", "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u002E\u0020\u004D\u002E\u0020\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u002E\u0020\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u002E\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u006E\u0065\u0064", "\u0070\u006F\u006E", "\u0075\u0074\u006F", "\u0073\u0072\u0065", "\u010D\u0065\u0074", "\u0070\u0065\u0074", "\u0073\u0075\u0062" ], [ "\u006E\u0065\u0064\u0065\u006C\u006A\u0061", "\u0070\u006F\u006E\u0065\u0064\u0065\u006C\u006A\u0061\u006B", "\u0075\u0074\u006F\u0072\u0061\u006B", "\u0073\u0072\u0065\u0064\u0061", "\u010D\u0065\u0074\u0076\u0072\u0074\u0061\u006B", "\u0070\u0065\u0074\u0061\u006B", "\u0073\u0075\u0062\u006F\u0074\u0061" ], [ "\u006A\u0061\u006E", "\u0066\u0065\u0062", "\u006D\u0061\u0072", "\u0061\u0070\u0072", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067", "\u0073\u0065\u0070", "\u006F\u006B\u0074", "\u006E\u006F\u0076", "\u0064\u0065\u0063", "" ], [ "\u006A\u0061\u006E\u0075\u0061\u0072", "\u0066\u0065\u0062\u0072\u0075\u0061\u0072", "\u006D\u0061\u0072\u0074", "\u0061\u0070\u0072\u0069\u006C", "\u006D\u0061\u006A", "\u006A\u0075\u006E", "\u006A\u0075\u006C", "\u0061\u0076\u0067\u0075\u0073\u0074", "\u0073\u0065\u0070\u0074\u0065\u006D\u0062\u0061\u0072", "\u006F\u006B\u0074\u006F\u0062\u0061\u0072", "\u006E\u006F\u0076\u0065\u006D\u0062\u0061\u0072", "\u0064\u0065\u0063\u0065\u006D\u0062\u0061\u0072", "" ] }, -{ 0x143B, 0x007F, "smj-SE", "smj", "smj", "smj-SE", "\u0053\u0061\u006D\u0069\u0020\u0028\u004C\u0075\u006C\u0065\u0029\u0020\u0028\u0053\u0077\u0065\u0064\u0065\u006E\u0029", "\u006A\u0075\u006C\u0065\u0076\u0075\u0073\u00E1\u006D\u0065\u0067\u0069\u0065\u006C\u006C\u0061\u0020\u0028\u0053\u0076\u0069\u0065\u0072\u0069\u006B\u0029", false, 0x00DD, "SE", "SE", "\u0053\u0077\u0065\u0064\u0065\u006E", "\u0053\u0076\u0069\u0065\u0072\u0069\u006B", "\u0053\u0045\u004B", "\u0053\u0077\u0065\u0064\u0069\u0073\u0068\u0020\u004B\u0072\u006F\u006E\u0061", "\u006B\u0072\u00E5\u0076\u006E\u006E\u00E5", true, 2, 1, 2, 8, 3, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u002E", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002D", "\u003A", "", "", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u00E1\u006A\u006C", "\u006D\u00E1\u006E", "\u0064\u0069\u0073", "\u0067\u0061\u0073", "\u0064\u0075\u006F\u0072", "\u0062\u0069\u0065\u0072", "\u006C\u00E1\u0076" ], [ "\u00E1\u006A\u006C\u006C\u0065\u006B", "\u006D\u00E1\u006E\u006E\u006F\u0064\u0061\u0068\u006B\u0061", "\u0064\u0069\u006A\u0073\u0074\u0061\u0068\u006B\u0061", "\u0067\u0061\u0073\u0073\u006B\u0061\u0076\u0061\u0068\u006B\u006B\u006F", "\u0064\u0075\u006F\u0072\u0061\u0073\u0074\u0061\u0068\u006B\u0061", "\u0062\u0069\u0065\u0072\u006A\u006A\u0065\u0064\u0061\u0068\u006B\u0061", "\u006C\u00E1\u0076\u0076\u006F\u0064\u0061\u0068\u006B\u0061" ], [ "\u00E5\u0064\u00E5\u006A", "\u0067\u0075\u006F\u0076", "\u0073\u006E\u006A\u0075", "\u0076\u0075\u006F\u0072", "\u006D\u006F\u0061\u0072", "\u0062\u0069\u0065\u0068", "\u0073\u006E\u006A\u0069", "\u0062\u00E5\u0072\u0067", "\u0072\u0061\u0067\u00E1", "\u0067\u00E5\u006C\u0067", "\u0062\u0061\u0073\u00E1", "\u006A\u0061\u0076\u006C", "" ], [ "\u00E5\u0064\u00E5\u006A\u0061\u006B\u006D\u00E1\u006E\u006E\u006F", "\u0067\u0075\u006F\u0076\u0076\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0073\u006A\u006E\u006A\u0075\u006B\u0074\u006A\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0076\u0075\u006F\u0072\u0061\u0074\u006A\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u006D\u006F\u0061\u0072\u006D\u0065\u0073\u006D\u00E1\u006E\u006E\u006F", "\u0062\u0069\u0065\u0068\u0074\u0073\u0065\u006D\u00E1\u006E\u006E\u006F", "\u0073\u006A\u006E\u006A\u0069\u006C\u006C\u0074\u006A\u0061\u006D\u00E1\u006E\u006E\u006F", "\u0062\u00E5\u0072\u0067\u0067\u0065\u006D\u00E1\u006E\u006E\u006F", "\u0072\u0061\u0067\u00E1\u0074\u006D\u00E1\u006E\u006E\u006F", "\u0067\u00E5\u006C\u0067\u00E5\u0064\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u0062\u0061\u0073\u00E1\u0064\u0069\u0073\u006D\u00E1\u006E\u006E\u006F", "\u006A\u0061\u0076\u006C\u006C\u0061\u006D\u00E1\u006E\u006E\u006F", "" ] }, -{ 0x046C, 0x007F, "ns-ZA", "ns", "ns", "ns-ZA", "\u004E\u006F\u0072\u0074\u0068\u0065\u0072\u006E\u0020\u0053\u006F\u0074\u0068\u006F\u0020\u0028\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u0029", "\u0053\u0065\u0073\u006F\u0074\u0068\u006F\u0020\u0073\u0061\u0020\u004C\u0065\u0062\u006F\u0061\u0020\u0028\u0041\u0066\u0072\u0069\u006B\u0061\u0020\u0042\u006F\u0072\u0077\u0061\u0029", false, 0x00D1, "ZA", "ZA", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061", "\u0041\u0066\u0072\u0069\u006B\u0061\u0020\u0042\u006F\u0072\u0077\u0061", "\u005A\u0041\u0052", "\u0053\u006F\u0075\u0074\u0068\u0020\u0041\u0066\u0072\u0069\u0063\u0061\u006E\u0020\u0052\u0061\u006E\u0064", "\u0052\u0061\u006E\u0064", true, 2, 1, 2, 2, 2, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u0052", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0047\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0020\u0043\u0061\u006C\u0065\u006E\u0064\u0061\u0072", 6, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0079\u0079\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u002F\u004D\u004D\u002F\u0064\u0064", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0020\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0053\u0075\u006E", "\u004D\u006F\u006E", "\u0054\u0075\u0065", "\u0057\u0065\u0064", "\u0054\u0068\u0075", "\u0046\u0072\u0069", "\u0053\u0061\u0074" ], [ "\u004C\u0061\u006D\u006F\u0072\u0065\u006E\u0061", "\u004D\u006F\u0161\u0075\u0070\u006F\u006C\u006F\u0067\u006F", "\u004C\u0061\u0062\u006F\u0062\u0065\u0064\u0069", "\u004C\u0061\u0062\u006F\u0072\u0061\u0072\u006F", "\u004C\u0061\u0062\u006F\u006E\u0065", "\u004C\u0061\u0062\u006F\u0068\u006C\u0061\u006E\u006F", "\u004D\u006F\u006B\u0069\u0062\u0065\u006C\u006F" ], [ "\u004A\u0061\u006E", "\u0046\u0065\u0062", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0061\u0079", "\u004A\u0075\u006E", "\u004A\u0075\u006C", "\u0041\u0075\u0067", "\u0053\u0065\u0070", "\u004F\u0063\u0074", "\u004E\u006F\u0076", "\u0044\u0065\u0063", "" ], [ "\u0050\u0068\u0065\u0072\u0065\u006B\u0067\u006F\u006E\u0067", "\u0048\u006C\u0061\u006B\u006F\u006C\u0061", "\u004D\u006F\u0070\u0069\u0074\u006C\u006F", "\u004D\u006F\u0072\u0061\u006E\u0061\u006E\u0067", "\u004D\u006F\u0073\u0065\u0067\u0061\u006D\u0061\u006E\u0079\u0065", "\u004E\u0067\u006F\u0061\u0074\u006F\u0062\u006F\u0161\u0065\u0067\u006F", "\u0050\u0068\u0075\u0070\u0068\u0075", "\u0050\u0068\u0061\u0074\u006F", "\u004C\u0065\u0077\u0065\u0064\u0069", "\u0044\u0069\u0070\u0068\u0061\u006C\u0061\u006E\u0061", "\u0044\u0069\u0062\u0061\u0074\u0073\u0065\u006C\u0061", "\u004D\u0061\u006E\u0074\u0068\u006F\u006C\u0065", "" ] }, -{ 0x046B, 0x007F, "quz-BO", "quz", "quz", "quz-BO", "\u0051\u0075\u0065\u0063\u0068\u0075\u0061\u0020\u0028\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u0029", "\u0072\u0075\u006E\u0061\u0073\u0069\u006D\u0069\u0020\u0028\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u0020\u0053\u0075\u0079\u0075\u0029", false, 0x001A, "BO", "BO", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u0020\u0053\u0075\u0079\u0075", "\u0042\u004F\u0042", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u006E\u006F", "\u0042\u006F\u006C\u0069\u0076\u0069\u0061\u006E\u006F", true, 2, 1, 2, 14, 2, [ 3 ], [ 3 ], "\u002C", "\u002E", "\u002C", "\u002E", "\u0024\u0062", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0063\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u0069\u006F\u0020\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u006F", 6, 0, "\u002F", "\u003A", "\u0061\u002E\u006D\u002E", "\u0070\u002E\u006D\u002E", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079", "\u0064\u0064\u002D\u004D\u004D\u002D\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\u0064\u0064\u0064\u0020\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0064\u0065\u0020\'\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\'\u0020\u0064\u0065\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u0069\u006E\u0074", "\u006B\u0069\u006C", "\u0061\u0074\u0069", "\u0071\u0075\u0079", "\u0043\u0068\u0092", "\u0049\u006C\u006C", "\u006B\u0027\u0075" ], [ "\u0069\u006E\u0074\u0069\u0063\u0068\u0061\u0077", "\u006B\u0069\u006C\u006C\u0061\u0063\u0068\u0061\u0077", "\u0061\u0074\u0069\u0070\u0061\u0063\u0068\u0061\u0077", "\u0071\u0075\u0079\u006C\u006C\u0075\u0072\u0063\u0068\u0061\u0077", "\u0043\u0068\u0027\u0020\u0061\u0073\u006B\u0061\u0063\u0068\u0061\u0077", "\u0049\u006C\u006C\u0061\u0070\u0061\u0063\u0068\u0061\u0077", "\u006B\u0027\u0075\u0079\u0063\u0068\u0069\u0063\u0068\u0061\u0077" ], [ "\u0051\u0075\u006C", "\u0048\u0061\u0074", "\u0050\u0061\u0075", "\u0061\u0079\u0072", "\u0041\u0079\u006D", "\u0049\u006E\u0074", "\u0041\u006E\u0074", "\u0051\u0068\u0061", "\u0055\u006D\u0061", "\u004B\u0061\u006E", "\u0041\u0079\u0061", "\u004B\u0061\u0070", "" ], [ "\u0051\u0075\u006C\u006C\u0061\u0020\u0070\u0075\u0071\u0075\u0079", "\u0048\u0061\u0074\u0075\u006E\u0020\u0070\u0075\u0071\u0075\u0079", "\u0050\u0061\u0075\u0071\u0061\u0072\u0020\u0077\u0061\u0072\u0061\u0079", "\u0061\u0079\u0072\u0069\u0077\u0061", "\u0041\u0079\u006D\u0075\u0072\u0061\u0079", "\u0049\u006E\u0074\u0069\u0020\u0072\u0061\u0079\u006D\u0069", "\u0041\u006E\u0074\u0061\u0020\u0053\u0069\u0074\u0077\u0061", "\u0051\u0068\u0061\u0070\u0061\u0071\u0020\u0053\u0069\u0074\u0077\u0061", "\u0055\u006D\u0061\u0020\u0072\u0061\u0079\u006D\u0069", "\u004B\u0061\u006E\u0074\u0061\u0072\u0061\u0079", "\u0041\u0079\u0061\u006D\u0061\u0072\u0071\u0027\u0061", "\u004B\u0061\u0070\u0061\u0071\u0020\u0052\u0061\u0079\u006D\u0069", "" ] }, -{ 0x043B, 0x007F, "se-NO", "se", "se", "se-NO", "\u0053\u0061\u006D\u0069\u0020\u0028\u004E\u006F\u0072\u0074\u0068\u0065\u0072\u006E\u0029\u0020\u0028\u004E\u006F\u0072\u0077\u0061\u0079\u0029", "\u0064\u0061\u0076\u0076\u0069\u0073\u00E1\u006D\u0065\u0067\u0069\u0065\u006C\u006C\u0061\u0020\u0028\u004E\u006F\u0072\u0067\u0061\u0029", false, 0x00B1, "NO", "NO", "\u004E\u006F\u0072\u0077\u0061\u0079", "\u004E\u006F\u0072\u0067\u0061", "\u004E\u004F\u004B", "\u004E\u006F\u0072\u0077\u0065\u0067\u0069\u0061\u006E\u0020\u004B\u0072\u006F\u006E\u0065", "\u006B\u0072\u0075\u0076\u0064\u006E\u006F", true, 2, 1, 2, 12, 2, [ 3 ], [ 3 ], "\u002C", "\u00A0", "\u002C", "\u00A0", "\u006B\u0072", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u0067\u0072\u0065\u0067\u006F\u0072\u0069\u0061\u006E\u0073\u006B\u0020\u006B\u0061\u006C\u0065\u006E\u0064\u0065\u0072", 0, 2, "\u002E", "\u003A", "", "", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079\u0079\u0079", "\u0064\u0064\u002E\u004D\u004D\u002E\u0079\u0079", "\u0064\u002E\u004D\u002E\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0048\u0048\u002E\u006D\u006D", "\u0048\u0048\u002E\u006D\u006D\u002E\u0073\u0073" ], [ "\u004D\u004D\u004D\u004D\u0020\u0064\'\u002E\u0020\u0062\u002E\u0020\'\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0073\u006F\u0074\u006E", "\u0076\u0075\u006F\u0073", "\u006D\u0061\u014B", "\u0067\u0061\u0073\u006B", "\u0064\u0075\u006F\u0072", "\u0062\u0065\u0061\u0072", "\u006C\u00E1\u0076" ], [ "\u0073\u006F\u0074\u006E\u0061\u0062\u0065\u0061\u0069\u0076\u0069", "\u0076\u0075\u006F\u0073\u0073\u00E1\u0072\u0067\u0061", "\u006D\u0061\u014B\u014B\u0065\u0062\u00E1\u0072\u0067\u0061", "\u0067\u0061\u0073\u006B\u0061\u0076\u0061\u0068\u006B\u006B\u0075", "\u0064\u0075\u006F\u0072\u0061\u0073\u0074\u0061\u0074", "\u0062\u0065\u0061\u0072\u006A\u0061\u0064\u0061\u0074", "\u006C\u00E1\u0076\u0076\u0061\u0072\u0064\u0061\u0074" ], [ "\u006F\u0111\u0111\u006A", "\u0067\u0075\u006F\u0076", "\u006E\u006A\u0075\u006B", "\u0063\u0075\u006F", "\u006D\u0069\u0065\u0073", "\u0067\u0065\u0061\u0073", "\u0073\u0075\u006F\u0069", "\u0062\u006F\u0072\u0067", "\u010D\u0061\u006B\u010D", "\u0067\u006F\u006C\u0067", "\u0073\u006B\u00E1\u0062", "\u006A\u0075\u006F\u0076", "" ], [ "\u006F\u0111\u0111\u0061\u006A\u0061\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0075\u006F\u0076\u0076\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006E\u006A\u0075\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0063\u0075\u006F\u014B\u006F\u006D\u00E1\u006E\u006E\u0075", "\u006D\u0069\u0065\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0067\u0065\u0061\u0073\u0073\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0073\u0075\u006F\u0069\u0064\u006E\u0065\u006D\u00E1\u006E\u006E\u0075", "\u0062\u006F\u0072\u0067\u0065\u006D\u00E1\u006E\u006E\u0075", "\u010D\u0061\u006B\u010D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u0067\u006F\u006C\u0067\u0067\u006F\u0074\u006D\u00E1\u006E\u006E\u0075", "\u0073\u006B\u00E1\u0062\u006D\u0061\u006D\u00E1\u006E\u006E\u0075", "\u006A\u0075\u006F\u0076\u006C\u0061\u006D\u00E1\u006E\u006E\u0075", "" ] }, -{ 0x043A, 0x007F, "mt-MT", "mt", "mt", "mt-MT", "\u004D\u0061\u006C\u0074\u0065\u0073\u0065\u0020\u0028\u004D\u0061\u006C\u0074\u0061\u0029", "\u004D\u0061\u006C\u0074\u0069\u0020\u0028\u004D\u0061\u006C\u0074\u0061\u0029", false, 0x00A3, "MT", "MT", "\u004D\u0061\u006C\u0074\u0061", "\u004D\u0061\u006C\u0074\u0061", "\u004D\u0054\u004C", "\u004D\u0061\u006C\u0074\u0065\u0073\u0065\u0020\u004C\u0069\u0072\u0061", "\u004C\u0069\u0072\u0061\u0020\u004D\u0061\u006C\u0074\u0069\u006A\u0061", true, 2, 1, 2, 1, 0, [ 3 ], [ 3 ], "\u002E", "\u002C", "\u002E", "\u002C", "\u004C\u006D", "\u002D", "\u002B", "\u004E\u0061\u004E", "\u002D\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", "\u0049\u006E\u0066\u0069\u006E\u0069\u0074\u0079", [ "\u0030", "\u0031", "\u0032", "\u0033", "\u0034", "\u0035", "\u0036", "\u0037", "\u0038", "\u0039" ], 1, [ 1 ], "\u004B\u0061\u006C\u0065\u006E\u0064\u0061\u0072\u006A\u0075", 0, 0, "\u002F", "\u003A", "\u0041\u004D", "\u0050\u004D", "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0074\u0061\u005C\'\u0020\'\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u004D\u004D\u004D\u004D\u0020\u0064\u0064", "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u002F\u004D\u004D\u002F\u0079\u0079\u0079\u0079", "\u0079\u0079\u0079\u0079\u002D\u004D\u004D\u002D\u0064\u0064", "\u0064\u0064\u004D\u004D\u0079\u0079\u0079\u0079", "\u0064\u002D\u004D\u002D\u0079\u0079\u0079\u0079", "\u0064\u002F\u004D\u002F\u0079\u0079\u0079\u0079" ], [ "\u0048\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074", "\u0048\u003A\u006D\u006D\u003A\u0073\u0073", "\u0068\u0068\u003A\u006D\u006D\u003A\u0073\u0073\u0020\u0074\u0074" ], [ "\u0064\u0064\u0064\u0064\u002C\u0020\u0064\'\u0020\u0074\u0061\u005C\'\u0020\'\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\'\u0020\u0074\u0061\u005C\'\u0020\'\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079", "\u0064\u0064\u0020\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u004D\u004D\u004D\u004D\u0020\u0079\u0079\u0079\u0079" ], [ "\u0126\u0061\u0064", "\u0054\u006E\u0065", "\u0054\u006C\u0069", "\u0045\u0072\u0062", "\u0126\u0061\u006D", "\u0120\u0069\u006D", "\u0053\u0069\u0062" ], [ "\u0049\u006C\u002D\u0126\u0061\u0064\u0064", "\u0049\u0074\u002D\u0054\u006E\u0065\u006A\u006E", "\u0049\u0074\u002D\u0054\u006C\u0069\u0065\u0074\u0061", "\u004C\u002D\u0045\u0072\u0062\u0067\u0127\u0061", "\u0049\u006C\u002D\u0126\u0061\u006D\u0069\u0073", "\u0049\u006C\u002D\u0120\u0069\u006D\u0067\u0127\u0061", "\u0049\u0073\u002D\u0053\u0069\u0062\u0074" ], [ "\u004A\u0061\u006E", "\u0046\u0072\u0061", "\u004D\u0061\u0072", "\u0041\u0070\u0072", "\u004D\u0065\u006A", "\u0120\u0075\u006E", "\u004C\u0075\u006C", "\u0041\u0077\u0069", "\u0053\u0065\u0074", "\u004F\u0074\u0074", "\u004E\u006F\u0076", "\u0044\u0069\u010B", "" ], [ "\u004A\u0061\u006E\u006E\u0061\u0072", "\u0046\u0072\u0061\u0072", "\u004D\u0061\u0072\u007A\u0075", "\u0041\u0070\u0072\u0069\u006C", "\u004D\u0065\u006A\u006A\u0075", "\u0120\u0075\u006E\u006A\u0075", "\u004C\u0075\u006C\u006A\u0075", "\u0041\u0077\u0069\u0073\u0073\u0075", "\u0053\u0065\u0074\u0074\u0065\u006D\u0062\u0072\u0075", "\u004F\u0074\u0074\u0075\u0062\u0072\u0075", "\u004E\u006F\u0076\u0065\u006D\u0062\u0072\u0075", "\u0044\u0069\u010B\u0065\u006D\u0062\u0072\u0075", "" ] }, - ]; - - private static CultureData*[char[]] nameTable; - private static CultureData*[int] idTable; - private static CultureData*[char[]] regionNameTable; - - static ~this() { - nameTable = null; - idTable = null; - regionNameTable = null; - } - - package static CultureData* getDataFromCultureName(char[] name) { - if (CultureData** data = name in nameTable) - return *data; - - char[] actualName; - for (int i = 0; i < cultureDataTable.length; i++) { - if (compareString(name, cultureDataTable[i].name) == 0) { - nameTable[actualName = cultureDataTable[i].name] = &cultureDataTable[i]; - return nameTable[actualName]; - } - } - - error ("Culture name '" ~ name ~ "' is not supported."); - return null; - } - - package static CultureData* getDataFromCultureID(int lcid) { - if (CultureData** data = lcid in idTable) - return *data; - - for (int i = 0; i < cultureDataTable.length; i++) { - if (cultureDataTable[i].lcid == lcid) { - idTable[lcid] = &cultureDataTable[i]; - return idTable[lcid]; - } - } - - error ("Culture is not supported."); - return null; - } - - package static CultureData* getDataFromRegionName(inout char[] name) { - CultureData** data; - if ((data = name in regionNameTable) !is null) - return *data; - - for (int i = 0; i < cultureDataTable.length; i++) { - if (compareString(name, cultureDataTable[i].regionName) == 0) { - regionNameTable[name = cultureDataTable[i].regionName] = &cultureDataTable[i]; - return regionNameTable[name]; - } - } - - // We also accept a culture name. - if ((data = name in nameTable) !is null) - return *data; - - for (int i = 0; i < cultureDataTable.length; i++) { - if (compareString(name, cultureDataTable[i].name) == 0) { - nameTable[name = cultureDataTable[i].name] = &cultureDataTable[i]; - return nameTable[name]; - } - } - - error ("Region name '" ~ name ~ "' is not supported."); - return null; - } - - package static char[] getCultureNameFromIetfName(char[] name) { - for (int i = 0; i < cultureDataTable.length; i++) { - if (compareString(name, cultureDataTable[i].ietfTag) == 0) - return cultureDataTable[i].name; - } - return null; - } - -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Locale.d --- a/tango/tango/text/locale/Locale.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,127 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris. All rights reserved - - license: BSD style: $(LICENSE) - - version: Feb 2007: Initial release - - author: Kris - - This is the Tango I18N gateway, which extends the basic Layout - module with support for cuture- and region-specific formatting - of numerics, date, time, and currency. - - Use as a standalone formatter in the same manner as Layout, or - combine with other entities such as Stdout. To enable a French - Stdout, do the following: - --- - Stdout.layout = new Locale (Culture.getCulture ("fr-FR")); - --- - - Note that Stdout is a shared entity, so every usage of it will - be affected by the above example. For applications supporting - multiple regions create multiple Locale instances instead, and - cache them in an appropriate manner. - - In addition to region-specific currency, date and time, Locale - adds more sophisticated formatting option than Layout provides: - numeric digit placement using '#' formatting, for example, is - supported by Locale - along with placement of '$', '-', and '.' - regional-specifics. - - Locale is currently utf8 only. Support for both Utf16 and utf32 - may be enabled at a later time - -******************************************************************************/ - -module tango.text.locale.Locale; - -private import tango.text.locale.Core, - tango.text.locale.Convert; - -private import tango.time.Time; - -private import tango.text.convert.Layout; - -public import tango.text.locale.Core : Culture; - -/******************************************************************************* - - Locale-enabled wrapper around tango.text.convert.Layout - -*******************************************************************************/ - -public class Locale : Layout!(char) -{ - private DateTimeFormat dateFormat; - private NumberFormat numberFormat; - - /********************************************************************** - - **********************************************************************/ - - this (IFormatService formatService = null) - { - numberFormat = NumberFormat.getInstance (formatService); - dateFormat = DateTimeFormat.getInstance (formatService); - } - - /*********************************************************************** - - ***********************************************************************/ - - protected override char[] unknown (char[] output, char[] format, TypeInfo type, Arg p) - { - switch (type.classinfo.name[9]) - { - // Special case for Time. - case TypeCode.STRUCT: - if (type is typeid(Time)) - return formatDateTime (output, *cast(Time*) p, format, dateFormat); - - return type.toString; - - default: - break; - } - - return "{unhandled argument type: " ~ type.toString ~ '}'; - } - - /********************************************************************** - - **********************************************************************/ - - protected override char[] integer (char[] output, long v, char[] alt, char format='d') - { - return formatInteger (output, v, alt, numberFormat); - } - - /********************************************************************** - - **********************************************************************/ - - protected override char[] floater (char[] output, real v, char[] format) - { - return formatDouble (output, v, format, numberFormat); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (Locale) -{ - import tango.io.Console; - import tango.time.WallClock; - - void main () - { - auto layout = new Locale (Culture.getCulture ("fr-FR")); - - Cout (layout ("{:D}", WallClock.now)) (); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Parse.d --- a/tango/tango/text/locale/Parse.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,303 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - -******************************************************************************/ - -module tango.text.locale.Parse; - -private import tango.time.WallClock; - -private import tango.core.Exception; - -private import tango.text.locale.Core; - -private import tango.time.chrono.Calendar; - -private struct DateTimeParseResult { - - int year = -1; - int month = -1; - int day = -1; - int hour; - int minute; - int second; - double fraction; - int timeMark; - Calendar calendar; - TimeSpan timeZoneOffset; - Time parsedDate; - -} - -package Time parseTime(char[] s, DateTimeFormat dtf) { - DateTimeParseResult result; - if (!tryParseExactMultiple(s, dtf.getAllDateTimePatterns(), dtf, result)) - throw new IllegalArgumentException("String was not a valid Time."); - return result.parsedDate; -} - -package Time parseTimeExact(char[] s, char[] format, DateTimeFormat dtf) { - DateTimeParseResult result; - if (!tryParseExact(s, format, dtf, result)) - throw new IllegalArgumentException("String was not a valid Time."); - return result.parsedDate; -} - -package bool tryParseTime(char[] s, DateTimeFormat dtf, out Time result) { - result = Time.min; - DateTimeParseResult resultRecord; - if (!tryParseExactMultiple(s, dtf.getAllDateTimePatterns(), dtf, resultRecord)) - return false; - result = resultRecord.parsedDate; - return true; -} - -package bool tryParseTimeExact(char[] s, char[] format, DateTimeFormat dtf, out Time result) { - result = Time.min; - DateTimeParseResult resultRecord; - if (!tryParseExact(s, format, dtf, resultRecord)) - return false; - result = resultRecord.parsedDate; - return true; -} - -private bool tryParseExactMultiple(char[] s, char[][] formats, DateTimeFormat dtf, inout DateTimeParseResult result) { - foreach (char[] format; formats) { - if (tryParseExact(s, format, dtf, result)) - return true; - } - return false; -} - -private bool tryParseExact(char[] s, char[] pattern, DateTimeFormat dtf, inout DateTimeParseResult result) { - - bool doParse() { - - int parseDigits(char[] s, inout int pos, int max) { - int result = s[pos++] - '0'; - while (max > 1 && pos < s.length && s[pos] >= '0' && s[pos] <= '9') { - result = result * 10 + s[pos++] - '0'; - --max; - } - return result; - } - - bool parseOne(char[] s, inout int pos, char[] value) { - if (s[pos .. pos + value.length] != value) - return false; - pos += value.length; - return true; - } - - int parseMultiple(char[] s, inout int pos, char[][] values ...) { - int result = -1, max; - foreach (int i, char[] value; values) { - if (value.length == 0 || s.length - pos < value.length) - continue; - - if (s[pos .. pos + value.length] == value) { - if (result == 0 || value.length > max) { - result = i + 1; - max = value.length; - } - } - } - pos += max; - return result; - } - - TimeSpan parseTimeZoneOffset(char[] s, inout int pos) { - bool sign; - if (pos < s.length) { - if (s[pos] == '-') { - sign = true; - pos++; - } - else if (s[pos] == '+') - pos++; - } - int hour = parseDigits(s, pos, 2); - int minute; - if (pos < s.length && s[pos] == ':') { - pos++; - minute = parseDigits(s, pos, 2); - } - //Due to dmd bug, this doesn't compile - //TimeSpan result = TimeSpan.hours(hour) + TimeSpan.minutes(minute); - TimeSpan result = TimeSpan(TimeSpan.TicksPerHour * hour + TimeSpan.TicksPerMinute * minute); - if (sign) - result = -result; - return result; - } - - char[] stringOf(char c, int count = 1) { - char[] s = new char[count]; - s[0 .. count] = c; - return s; - } - - result.calendar = dtf.calendar; - result.year = result.month = result.day = -1; - result.hour = result.minute = result.second = 0; - result.fraction = 0.0; - - int pos, i, count; - char c; - - while (pos < pattern.length && i < s.length) { - c = pattern[pos++]; - - if (c == ' ') { - i++; - while (i < s.length && s[i] == ' ') - i++; - if (i >= s.length) - break; - continue; - } - - count = 1; - - switch (c) { - case 'd': case 'm': case 'M': case 'y': - case 'h': case 'H': case 's': - case 't': case 'z': - while (pos < pattern.length && pattern[pos] == c) { - pos++; - count++; - } - break; - case ':': - if (!parseOne(s, i, dtf.timeSeparator)) - return false; - continue; - case '/': - if (!parseOne(s, i, dtf.dateSeparator)) - return false; - continue; - case '\\': - if (pos < pattern.length) { - c = pattern[pos++]; - if (s[i++] != c) - return false; - } - else - return false; - continue; - case '\'': - while (pos < pattern.length) { - c = pattern[pos++]; - if (c == '\'') - break; - if (s[i++] != c) - return false; - } - continue; - default: - if (s[i++] != c) - return false; - continue; - } - - switch (c) { - case 'd': // day - if (count == 1 || count == 2) - result.day = parseDigits(s, i, 2); - else if (count == 3) - result.day = parseMultiple(s, i, dtf.abbreviatedDayNames); - else - result.day = parseMultiple(s, i, dtf.dayNames); - if (result.day == -1) - return false; - break; - case 'M': // month - if (count == 1 || count == 2) - result.month = parseDigits(s, i, 2); - else if (count == 3) - result.month = parseMultiple(s, i, dtf.abbreviatedMonthNames); - else - result.month = parseMultiple(s, i, dtf.monthNames); - if (result.month == -1) - return false; - break; - case 'y': // year - if (count == 1 || count == 2) - result.year = parseDigits(s, i, 2); - else - result.year = parseDigits(s, i, 4); - if (result.year == -1) - return false; - break; - case 'h': // 12-hour clock - case 'H': // 24-hour clock - result.hour = parseDigits(s, i, 2); - break; - case 'm': // minute - result.minute = parseDigits(s, i, 2); - break; - case 's': // second - result.second = parseDigits(s, i, 2); - break; - case 't': // time mark - if (count == 1) - result.timeMark = parseMultiple(s, i, stringOf(dtf.amDesignator[0]), stringOf(dtf.pmDesignator[0])); - else - result.timeMark = parseMultiple(s, i, dtf.amDesignator, dtf.pmDesignator); - break; - case 'z': - result.timeZoneOffset = parseTimeZoneOffset(s, i); - break; - default: - break; - } - } - - if (pos < pattern.length || i < s.length) - return false; - - if (result.timeMark == 1) { // am - if (result.hour == 12) - result.hour = 0; - } - else if (result.timeMark == 2) { // pm - if (result.hour < 12) - result.hour += 12; - } - - // If the input string didn't specify a date part, try to return something meaningful. - if (result.year == -1 || result.month == -1 || result.day == -1) { - Time now = WallClock.now; - if (result.month == -1 && result.day == -1) { - if (result.year == -1) { - result.year = result.calendar.getYear(now); - result.month = result.calendar.getMonth(now); - result.day = result.calendar.getDayOfMonth(now); - } - else - result.month = result.day = 1; - } - else { - if (result.year == -1) - result.year = result.calendar.getYear(now); - if (result.month == -1) - result.month = 1; - if (result.day == -1) - result.day = 1; - } - } - return true; - } - - if (doParse()) { - result.parsedDate = result.calendar.toTime(result.year, result.month, result.day, result.hour, result.minute, result.second, 0); - return true; - } - return false; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Posix.d --- a/tango/tango/text/locale/Posix.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - -******************************************************************************/ - -module tango.text.locale.Posix; - -version (Posix) -{ -alias tango.text.locale.Posix nativeMethods; - -private import tango.core.Exception; -private import tango.text.locale.Data; -private import tango.stdc.ctype; -private import tango.stdc.posix.stdlib; -private import tango.stdc.string; -private import tango.stdc.time; -private import tango.stdc.locale; -private import tango.stdc.posix.time; - -/*private extern(C) char* setlocale(int type, char* locale); -private extern(C) void putenv(char*); - -private enum {LC_CTYPE, LC_NUMERIC, LC_TIME, LC_COLLATE, LC_MONETARY, LC_MESSAGES, LC_ALL, LC_PAPER, LC_NAME, LC_ADDRESS, LC_TELEPHONE, LC_MEASUREMENT, LC_IDENTIFICATION};*/ - -int getUserCulture() { - char* env = getenv("LC_ALL"); - if (!env || *env == '\0') { - env = getenv("LANG"); - if (!env || *env == '\0') - throw new LocaleException("Neither LANG nor LC_ALL were found to be set. Please set for locale formatting to function."); - } - - // getenv returns a string of the form _. - // Therefore we need to replace underscores with hyphens. - char* p = env; - int len; - while (*p) { - if (*p == '.'){ - break; - } - if (*p == '_'){ - *p = '-'; - } - p++; - len++; - } - - char[] s = env[0 .. len]; - foreach (entry; CultureData.cultureDataTable) { - // todo: there is also a local compareString defined. Is it correct that here - // we use tango.text.locale.Data, which matches the signature? - if (tango.text.locale.Data.compareString(entry.name, s) == 0) - // todo: here was entry.id returned, which does not exist. Is lcid correct? - return entry.lcid; - } - return 0; -} - -void setUserCulture(int lcid) { - char[] name; - try { - name = CultureData.getDataFromCultureID(lcid).name ~ ".utf-8"; - } - catch(Exception e) { - return; - } - - for(int i = 0; i < name.length; i++) { - if(name[i] == '.') break; - if(name[i] == '-') name[i] = '_'; - } - - putenv(("LANG=" ~ name).ptr); - setlocale(LC_CTYPE, name.ptr); - setlocale(LC_NUMERIC, name.ptr); - setlocale(LC_TIME, name.ptr); - setlocale(LC_COLLATE, name.ptr); - setlocale(LC_MONETARY, name.ptr); - - version (GNU) {} else { -/* setlocale(LC_MESSAGES, name.ptr); */ - } - - setlocale(LC_PAPER, name.ptr); - setlocale(LC_NAME, name.ptr); - setlocale(LC_ADDRESS, name.ptr); - setlocale(LC_TELEPHONE, name.ptr); - setlocale(LC_MEASUREMENT, name.ptr); - setlocale(LC_IDENTIFICATION, name.ptr); -} - -ulong getUtcTime() { - int t; - time(&t); - gmtime(&t); - return cast(ulong)((cast(long)t * 10000000L) + 116444736000000000L); -} - -int compareString(int lcid, char[] stringA, uint offsetA, uint lengthA, char[] stringB, uint offsetB, uint lengthB, bool ignoreCase) { - - void strToLower(char[] string) { - for(int i = 0; i < string.length; i++) { - string[i] = cast(char)(tolower(cast(int)string[i])); - } - } - - char* tempCol = setlocale(LC_COLLATE, null), tempCType = setlocale(LC_CTYPE, null); - char[] locale; - try { - locale = CultureData.getDataFromCultureID(lcid).name ~ ".utf-8"; - } - catch(Exception e) { - return 0; - } - - setlocale(LC_COLLATE, locale.ptr); - setlocale(LC_CTYPE, locale.ptr); - - char[] s1 = stringA[offsetA..offsetA+lengthA].dup, - s2 = stringB[offsetB..offsetB+lengthB].dup; - if(ignoreCase) { - strToLower(s1); - strToLower(s2); - } - - int ret = strcoll(s1[offsetA..offsetA+lengthA].ptr, s2[offsetB..offsetB+lengthB].ptr); - - setlocale(LC_COLLATE, tempCol); - setlocale(LC_CTYPE, tempCType); - - return ret; -} - -debug(UnitTest) -{ - unittest - { - int c = getUserCulture(); - assert(compareString(c, "Alphabet", 0, 8, "Alphabet", 0, 8, false) == 0); - assert(compareString(c, "Alphabet", 0, 8, "alphabet", 0, 8, true) == 0); - assert(compareString(c, "Alphabet", 0, 8, "alphabet", 0, 8, false) != 0); - assert(compareString(c, "lphabet", 0, 7, "alphabet", 0, 8, true) != 0); - assert(compareString(c, "Alphabet", 0, 8, "lphabet", 0, 7, true) != 0); - } -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/locale/Win32.d --- a/tango/tango/text/locale/Win32.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: 2005 - - author: John Chapman - -******************************************************************************/ - -module tango.text.locale.Win32; - -alias tango.text.locale.Win32 nativeMethods; - -extern (Windows) -private { - void GetSystemTimeAsFileTime(out ulong lpSystemTimeAsFileTime); - uint GetUserDefaultLCID(); - uint GetThreadLocale(); - bool SetThreadLocale(uint Locale); - int MultiByteToWideChar(uint CodePage, uint dwFlags, char* lpMultiByteStr, int cbMultiByte, wchar* lpWideCharStr, int cchWideChar); - int CompareStringW(uint Locale, uint dwCmpFlags, wchar* lpString1, int cchCount1, wchar* lpString2, int cchCount2); - -} - -int getUserCulture() { - return GetUserDefaultLCID(); -} - -void setUserCulture(int lcid) { - SetThreadLocale(lcid); -} - -ulong getUtcTime() { - ulong ticks; - GetSystemTimeAsFileTime(ticks); - return ticks; -} - -int compareString(int lcid, char[] stringA, uint offsetA, uint lengthA, char[] stringB, uint offsetB, uint lengthB, bool ignoreCase) { - - wchar[] toUnicode(char[] string, uint offset, uint length, out int translated) { - char* chars = string.ptr + offset; - int required = MultiByteToWideChar(0, 0, chars, length, null, 0); - wchar[] result = new wchar[required]; - translated = MultiByteToWideChar(0, 0, chars, length, result.ptr, required); - return result; - } - - int sortId = (lcid >> 16) & 0xF; - sortId = (sortId == 0) ? lcid : (lcid | (sortId << 16)); - - int len1, len2; - wchar[] string1 = toUnicode(stringA, offsetA, lengthA, len1); - wchar[] string2 = toUnicode(stringB, offsetB, lengthB, len2); - - return CompareStringW(sortId, ignoreCase ? 0x1 : 0x0, string1.ptr, len1, string2.ptr, len2) - 2; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/stream/LineIterator.d --- a/tango/tango/text/stream/LineIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,116 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.text.stream.LineIterator; - -private import tango.text.stream.StreamIterator; - -/******************************************************************************* - - Iterate across a set of text patterns. - - Each pattern is exposed to the client as a slice of the original - content, where the slice is transient. If you need to retain the - exposed content, then you should .dup it appropriately. - - These iterators are based upon the IBuffer construct, and can - thus be used in conjunction with other Iterators and/or Reader - instances upon a common buffer ~ each will stay in lockstep via - state maintained within the IBuffer. - - The content exposed via an iterator is supposed to be entirely - read-only. All current iterators abide by this rule, but it is - possible a user could mutate the content through a get() slice. - To enforce the desired read-only aspect, the code would have to - introduce redundant copying or the compiler would have to support - read-only arrays. - - See LineIterator, SimpleIterator, RegexIterator, QuotedIterator. - - -*******************************************************************************/ - -class LineIterator(T) : StreamIterator!(T) -{ - /*********************************************************************** - - Construct an uninitialized iterator. For example: - --- - auto lines = new LineIterator!(char); - - void somefunc (IBuffer buffer) - { - foreach (line; lines.set(buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a buffer: - --- - void somefunc (IBuffer buffer) - { - foreach (line; new LineIterator!(char) (buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a conduit: - --- - foreach (line; new LineIterator!(char) (new FileConduit ("myfile"))) - Cout (line).newline; - --- - - ***********************************************************************/ - - this (InputStream stream = null) - { - super (stream); - } - - /*********************************************************************** - - Read a line of text, and return false when there's no - further content available. - - ***********************************************************************/ - - final bool readln (inout T[] content) - { - content = super.next; - return content.ptr !is null; - } - - /*********************************************************************** - - Scanner implementation for this iterator. Find a '\n', - and eat any immediately preceeding '\r' - - ***********************************************************************/ - - protected uint scan (void[] data) - { - auto content = (cast(T*) data.ptr) [0 .. data.length / T.sizeof]; - - foreach (int i, T c; content) - if (c is '\n') - { - int slice = i; - if (i && content[i-1] is '\r') - --slice; - set (content.ptr, 0, slice); - return found (i); - } - - return notFound; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/stream/QuoteIterator.d --- a/tango/tango/text/stream/QuoteIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.text.stream.QuoteIterator; - -private import tango.text.stream.StreamIterator; - -/******************************************************************************* - - Iterate across a set of text patterns. - - Each pattern is exposed to the client as a slice of the original - content, where the slice is transient. If you need to retain the - exposed content, then you should .dup it appropriately. - - These iterators are based upon the IBuffer construct, and can - thus be used in conjunction with other Iterators and/or Reader - instances upon a common buffer ~ each will stay in lockstep via - state maintained within the IBuffer. - - The content exposed via an iterator is supposed to be entirely - read-only. All current iterators abide by this rule, but it is - possible a user could mutate the content through a get() slice. - To enforce the desired read-only aspect, the code would have to - introduce redundant copying or the compiler would have to support - read-only arrays. - - See LineIterator, SimpleIterator, RegexIterator, QuotedIterator. - - -*******************************************************************************/ - -class QuoteIterator(T) : StreamIterator!(T) -{ - private T[] delim; - - /*********************************************************************** - - Construct an uninitialized iterator. For example: - --- - auto lines = new LineIterator!(char); - - void somefunc (IBuffer buffer) - { - foreach (line; lines.set(buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a buffer: - --- - void somefunc (IBuffer buffer) - { - foreach (line; new LineIterator!(char) (buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a conduit: - --- - foreach (line; new LineIterator!(char) (new FileConduit ("myfile"))) - Cout (line).newline; - --- - - ***********************************************************************/ - - this (T[] delim, InputStream stream = null) - { - super (stream); - this.delim = delim; - } - - /*********************************************************************** - - ***********************************************************************/ - - private uint pair (T[] content, T quote) - { - foreach (int i, T c; content) - if (c is quote) - return found (set (content.ptr, 0, i) + 1); - - return notFound; - } - - /*********************************************************************** - - ***********************************************************************/ - - protected uint scan (void[] data) - { - auto content = (cast(T*) data.ptr) [0 .. data.length / T.sizeof]; - - foreach (int i, T c; content) - if (has (delim, c)) - return found (set (content.ptr, 0, i)); - else - if (c is '"' || c is '\'') - if (i) - return found (set (content.ptr, 0, i)); - else - return pair (content[1 .. content.length], c); - - return notFound; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/stream/RegexIterator.d --- a/tango/tango/text/stream/RegexIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.text.stream.RegexIterator; - -private import tango.text.Regex; - -private import tango.text.stream.StreamIterator; - -/******************************************************************************* - - Iterate across a set of text patterns. - - Each pattern is exposed to the client as a slice of the original - content, where the slice is transient. If you need to retain the - exposed content, then you should .dup it appropriately. - - These iterators are based upon the IBuffer construct, and can - thus be used in conjunction with other Iterators and/or Reader - instances upon a common buffer ~ each will stay in lockstep via - state maintained within the IBuffer. - - The content exposed via an iterator is supposed to be entirely - read-only. All current iterators abide by this rule, but it is - possible a user could mutate the content through a get() slice. - To enforce the desired read-only aspect, the code would have to - introduce redundant copying or the compiler would have to support - read-only arrays. - - See LineIterator, SimpleIterator, RegexIterator, QuotedIterator. - - -*******************************************************************************/ - -class RegexIterator : StreamIterator!(char) -{ - private Regex regex; - private alias char T; - - /*********************************************************************** - - Construct an uninitialized iterator. For example: - --- - auto lines = new LineIterator!(char); - - void somefunc (IBuffer buffer) - { - foreach (line; lines.set(buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a buffer: - --- - void somefunc (IBuffer buffer) - { - foreach (line; new LineIterator!(char) (buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a conduit: - --- - foreach (line; new LineIterator!(char) (new FileConduit ("myfile"))) - Cout (line).newline; - --- - - ***********************************************************************/ - - this (T[] pattern, InputStream stream = null) - { - regex = new Regex (pattern, ""); - super (stream); - } - - /*********************************************************************** - - ***********************************************************************/ - - protected uint scan (void[] data) - { - auto content = (cast(T*) data.ptr) [0 .. data.length / T.sizeof]; - - if (regex.test (content)) - { - int start = regex.pmatch[0].rm_so; - int finish = regex.pmatch[0].rm_eo; - set (content.ptr, 0, start); - return found (finish-1); - } - - return notFound; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/stream/SimpleIterator.d --- a/tango/tango/text/stream/SimpleIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,103 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: January 2006 - - author: Kris - -*******************************************************************************/ - -module tango.text.stream.SimpleIterator; - -private import tango.text.stream.StreamIterator; - -/******************************************************************************* - - Iterate across a set of text patterns. - - Each pattern is exposed to the client as a slice of the original - content, where the slice is transient. If you need to retain the - exposed content, then you should .dup it appropriately. - - These iterators are based upon the IBuffer construct, and can - thus be used in conjunction with other Iterators and/or Reader - instances upon a common buffer ~ each will stay in lockstep via - state maintained within the IBuffer. - - The content exposed via an iterator is supposed to be entirely - read-only. All current iterators abide by this rule, but it is - possible a user could mutate the content through a get() slice. - To enforce the desired read-only aspect, the code would have to - introduce redundant copying or the compiler would have to support - read-only arrays. - - See LineIterator, SimpleIterator, RegexIterator, QuotedIterator. - -*******************************************************************************/ - -class SimpleIterator(T) : StreamIterator!(T) -{ - private T[] delim; - - /*********************************************************************** - - Construct an uninitialized iterator. For example: - --- - auto lines = new LineIterator!(char); - - void somefunc (IBuffer buffer) - { - foreach (line; lines.set(buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a buffer: - --- - void somefunc (IBuffer buffer) - { - foreach (line; new LineIterator!(char) (buffer)) - Cout (line).newline; - } - --- - - Construct a streaming iterator upon a conduit: - --- - foreach (line; new LineIterator!(char) (new FileConduit ("myfile"))) - Cout (line).newline; - --- - - ***********************************************************************/ - - this (T[] delim, InputStream stream = null) - { - this.delim = delim; - super (stream); - } - - /*********************************************************************** - - ***********************************************************************/ - - protected uint scan (void[] data) - { - auto content = (cast(T*) data.ptr) [0 .. data.length / T.sizeof]; - - if (delim.length is 1) - { - foreach (int i, T c; content) - if (c is delim[0]) - return found (set (content.ptr, 0, i)); - } - else - foreach (int i, T c; content) - if (has (delim, c)) - return found (set (content.ptr, 0, i)); - - return notFound; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/text/stream/StreamIterator.d --- a/tango/tango/text/stream/StreamIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,341 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Kris - -*******************************************************************************/ - -module tango.text.stream.StreamIterator; - -public import tango.io.Buffer; - -private import Text = tango.text.Util; - -private import tango.io.model.IConduit; - -/******************************************************************************* - - The base class for a set of stream iterators. These operate - upon a buffered input stream, and are designed to deal with - partial content. That is, stream iterators go to work the - moment any data becomes available in the buffer. Contrast - this behaviour with the tango.text.Util iterators, which - operate upon the extent of an array. - - There are two types of iterators supported; exclusive and - inclusive. The former are the more common kind, where a token - is delimited by elements that are considered foreign. Examples - include space, comma, and end-of-line delineation. Inclusive - tokens are just the opposite: they look for patterns in the - text that should be part of the token itself - everything else - is considered foreign. Currently tango.text.stream includes the - exclusive variety only. - - Each pattern is exposed to the client as a slice of the original - content, where the slice is transient. If you need to retain the - exposed content, then you should .dup it appropriately. - - The content provided to these iterators is intended to be fully - read-only. All current tokenizers abide by this rule, but it is - possible a user could mutate the content through a token slice. - To enforce the desired read-only aspect, the code would have to - introduce redundant copying or the compiler would have to support - read-only arrays. - - See LineIterator, CharIterator, RegexIterator, QuotedIterator, - and SimpleIterator - -*******************************************************************************/ - -class StreamIterator(T) : InputStream, Buffered -{ - protected T[] slice, - pushed; - private IBuffer input; - - /*********************************************************************** - - The pattern scanner, implemented via subclasses - - ***********************************************************************/ - - abstract protected uint scan (void[] data); - - /*********************************************************************** - - Instantiate with a buffer - - ***********************************************************************/ - - this (InputStream stream = null) - { - if (stream) - set (stream); - } - - /*********************************************************************** - - Set the provided stream as the scanning source - - ***********************************************************************/ - - final StreamIterator set (InputStream stream) - { - assert (stream); - input = Buffer.share (stream); - return this; - } - - /*********************************************************************** - - Return the current token as a slice of the content - - ***********************************************************************/ - - final T[] get () - { - return slice; - } - - /*********************************************************************** - - Push one token back into the stream, to be returned by a - subsequent call to next() - - Push null to cancel a prior assignment - - ***********************************************************************/ - - final StreamIterator push (T[] token) - { - pushed = token; - return this; - } - - /********************************************************************** - - Iterate over the set of tokens. This should really - provide read-only access to the tokens, but D does - not support that at this time - - **********************************************************************/ - - int opApply (int delegate(inout T[]) dg) - { - bool more; - int result; - - do { - more = consume; - result = dg (slice); - } while (more && !result); - return result; - } - - /********************************************************************** - - Iterate over a set of tokens, exposing a token count - starting at zero - - **********************************************************************/ - - int opApply (int delegate(inout int, inout T[]) dg) - { - bool more; - int result, - tokens; - - do { - more = consume; - result = dg (tokens, slice); - ++tokens; - } while (more && !result); - return result; - } - - /*********************************************************************** - - Locate the next token. Returns the token if found, null - otherwise. Null indicates an end of stream condition. To - sweep a conduit for lines using method next(): - --- - auto lines = new LineIterator!(char) (new FileConduit("myfile")); - while (lines.next) - Cout (lines.get).newline; - --- - - Alternatively, we can extract one line from a conduit: - --- - auto line = (new LineIterator!(char) (new FileConduit("myfile"))).next; - --- - - The difference between next() and foreach() is that the - latter processes all tokens in one go, whereas the former - processes in a piecemeal fashion. To wit: - --- - foreach (line; new LineIterator!(char) (new FileConduit("myfile")) - Cout(line).newline; - --- - - Note that tokens exposed via push() are returned immediately - when available, taking priority over the input stream itself - - ***********************************************************************/ - - final T[] next () - { - if (pushed.ptr) - return pushed; - else - if (consume() || slice.length) - return slice; - return null; - } - - /*********************************************************************** - - Set the content of the current slice - - ***********************************************************************/ - - protected final uint set (T* content, uint start, uint end) - { - slice = content [start .. end]; - return end; - } - - /*********************************************************************** - - Called when a scanner fails to find a matching pattern. - This may cause more content to be loaded, and a rescan - initiated - - ***********************************************************************/ - - protected final uint notFound () - { - return IConduit.Eof; - } - - /*********************************************************************** - - Invoked when a scanner matches a pattern. The provided - value should be the index of the last element of the - matching pattern, which is converted back to a void[] - index. - - ***********************************************************************/ - - protected final uint found (uint i) - { - return (i + 1) * T.sizeof; - } - - /*********************************************************************** - - See if set of characters holds a particular instance - - ***********************************************************************/ - - protected final bool has (T[] set, T match) - { - foreach (T c; set) - if (match is c) - return true; - return false; - } - - /*********************************************************************** - - Consume the next token and place it in 'slice'. Returns - true when there are potentially more tokens - - ***********************************************************************/ - - private bool consume () - { - if (input.next (&scan)) - return true; - - auto tmp = input.slice (buffer.readable); - slice = (cast(T*) tmp.ptr) [0 .. tmp.length/T.sizeof]; - return false; - } - - - /**********************************************************************/ - /************************ Buffered Interface **************************/ - /**********************************************************************/ - - - /*********************************************************************** - - Return the associated buffer - - ***********************************************************************/ - - final IBuffer buffer () - { - return input; - } - - /**********************************************************************/ - /********************** InputStream Interface *************************/ - /**********************************************************************/ - - - /*********************************************************************** - - Return the host conduit - - ***********************************************************************/ - - final IConduit conduit () - { - return input.conduit; - } - - /*********************************************************************** - - Read from conduit into a target array. The provided dst - will be populated with content from the conduit. - - Returns the number of bytes read, which may be less than - requested in dst - - ***********************************************************************/ - - uint read (void[] dst) - { - return input.read (dst); - } - - /*********************************************************************** - - Clear any buffered content - - ***********************************************************************/ - - final InputStream clear () - { - return input.clear; - } - - /*********************************************************************** - - Close the input - - ***********************************************************************/ - - final void close () - { - input.close; - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/Clock.d --- a/tango/tango/time/Clock.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,302 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Feb 2007: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.time.Clock; - -public import tango.time.Time; - -private import tango.sys.Common; - -private import tango.core.Exception; - -/****************************************************************************** - - Exposes UTC time relative to Jan 1st, 1 AD. These values are - based upon a clock-tick of 100ns, giving them a span of greater - than 10,000 years. These units of time are the foundation of most - time and date functionality in Tango. - - Interval is another type of time period, used for measuring a - much shorter duration; typically used for timeout periods and - for high-resolution timers. These intervals are measured in - units of 1 second, and support fractional units (0.001 = 1ms). - -*******************************************************************************/ - -struct Clock -{ - version (Win32) - { - /*************************************************************** - - Return the current time as UTC since the epoch - - ***************************************************************/ - - static Time now () - { - FILETIME fTime = void; - GetSystemTimeAsFileTime (&fTime); - return convert (fTime); - } - - /*************************************************************** - - Set Date fields to represent the current time. - - ***************************************************************/ - - static DateTime toDate () - { - return toDate (now); - } - - /*************************************************************** - - Set fields to represent the provided UTC time. Note - that the conversion is limited by the underlying OS, - and will fail to operate correctly with Time - values beyond the domain. On Win32 the earliest - representable date is 1601. On linux it is 1970. Both - systems have limitations upon future dates also. Date - is limited to millisecond accuracy at best. - - ***************************************************************/ - - static DateTime toDate (Time time) - { - DateTime dt = void; - SYSTEMTIME sTime = void; - - auto fTime = convert (time); - FileTimeToSystemTime (&fTime, &sTime); - - dt.date.year = sTime.wYear; - dt.date.month = sTime.wMonth; - dt.date.day = sTime.wDay; - dt.date.dow = sTime.wDayOfWeek; - dt.date.doy = 0; - dt.date.era = 0; - dt.time.hours = sTime.wHour; - dt.time.minutes = sTime.wMinute; - dt.time.seconds = sTime.wSecond; - dt.time.millis = sTime.wMilliseconds; - return dt; - } - - /*************************************************************** - - Convert Date fields to Time - - Note that the conversion is limited by the underlying - OS, and will not operate correctly with Time - values beyond the domain. On Win32 the earliest - representable date is 1601. On linux it is 1970. Both - systems have limitations upon future dates also. Date - is limited to millisecond accuracy at best. - - ***************************************************************/ - - static Time fromDate (inout DateTime dt) - { - SYSTEMTIME sTime = void; - FILETIME fTime = void; - - sTime.wYear = cast(ushort) dt.date.year; - sTime.wMonth = cast(ushort) dt.date.month; - sTime.wDayOfWeek = 0; - sTime.wDay = cast(ushort) dt.date.day; - sTime.wHour = cast(ushort) dt.time.hours; - sTime.wMinute = cast(ushort) dt.time.minutes; - sTime.wSecond = cast(ushort) dt.time.seconds; - sTime.wMilliseconds = cast(ushort) dt.time.millis; - - SystemTimeToFileTime (&sTime, &fTime); - return convert (fTime); - } - - /*************************************************************** - - Convert FILETIME to a Time - - ***************************************************************/ - - package static Time convert (FILETIME time) - { - auto t = *cast(long*) &time; - t *= 100 / TimeSpan.NanosecondsPerTick; - return Time.epoch1601 + TimeSpan(t); - } - - /*************************************************************** - - Convert Time to a FILETIME - - ***************************************************************/ - - package static FILETIME convert (Time dt) - { - FILETIME time = void; - - TimeSpan span = dt - Time.epoch1601; - assert (span >= TimeSpan.zero); - *cast(long*) &time.dwLowDateTime = span.ticks; - return time; - } - } - - version (Posix) - { - /*************************************************************** - - Return the current time as UTC since the epoch - - ***************************************************************/ - - static Time now () - { - timeval tv = void; - if (gettimeofday (&tv, null)) - throw new PlatformException ("Clock.now :: Posix timer is not available"); - - return convert (tv); - } - - /*************************************************************** - - Set Date fields to represent the current time. - - ***************************************************************/ - - static DateTime toDate () - { - return toDate (now); - } - - /*************************************************************** - - Set fields to represent the provided UTC time. Note - that the conversion is limited by the underlying OS, - and will fail to operate correctly with Time - values beyond the domain. On Win32 the earliest - representable date is 1601. On linux it is 1970. Both - systems have limitations upon future dates also. Date - is limited to millisecond accuracy at best. - - **************************************************************/ - - static DateTime toDate (Time time) - { - DateTime dt = void; - auto timeval = convert (time); - dt.time.millis = timeval.tv_usec / 1000; - - tm t = void; - gmtime_r (&timeval.tv_sec, &t); - - dt.date.year = t.tm_year + 1900; - dt.date.month = t.tm_mon + 1; - dt.date.day = t.tm_mday; - dt.date.dow = t.tm_wday; - dt.date.doy = 0; - dt.date.era = 0; - dt.time.hours = t.tm_hour; - dt.time.minutes = t.tm_min; - dt.time.seconds = t.tm_sec; - return dt; - } - - /*************************************************************** - - Convert Date fields to Time - - Note that the conversion is limited by the underlying - OS, and will not operate correctly with Time - values beyond the domain. On Win32 the earliest - representable date is 1601. On linux it is 1970. Both - systems have limitations upon future dates also. Date - is limited to millisecond accuracy at best. - - ***************************************************************/ - - static Time fromDate (inout DateTime dt) - { - tm t = void; - - t.tm_year = dt.date.year - 1900; - t.tm_mon = dt.date.month - 1; - t.tm_mday = dt.date.day; - t.tm_hour = dt.time.hours; - t.tm_min = dt.time.minutes; - t.tm_sec = dt.time.seconds; - - auto seconds = timegm (&t); - return Time.epoch1970 + - TimeSpan.seconds(seconds) + - TimeSpan.millis(dt.time.millis); - } - - /*************************************************************** - - Convert timeval to a Time - - ***************************************************************/ - - package static Time convert (inout timeval tv) - { - return Time.epoch1970 + - TimeSpan.seconds(tv.tv_sec) + - TimeSpan.micros(tv.tv_usec); - } - - /*************************************************************** - - Convert Time to a timeval - - ***************************************************************/ - - package static timeval convert (Time time) - { - timeval tv = void; - - TimeSpan span = time - time.epoch1970; - assert (span >= TimeSpan.zero); - tv.tv_sec = span.seconds; - tv.tv_usec = span.micros % 1_000_000L; - return tv; - } - } -} - - - -debug (UnitTest) -{ - unittest - { - auto time = Clock.now; - assert (Clock.convert(Clock.convert(time)) is time); - - time -= TimeSpan(time.ticks % TimeSpan.TicksPerSecond); - auto date = Clock.toDate(time); - - assert (time is Clock.fromDate(date)); - } -} - -debug (Clock) -{ - void main() - { - auto time = Clock.now; - } -} \ No newline at end of file diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/ISO8601.d --- a/tango/tango/time/ISO8601.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1282 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Deewiant. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: Aug 2007 - - author: Deewiant - - Based on the ISO 8601:2004 standard (described in a PDF Wikipedia - http://isotc.iso.org/livelink/livelink/4021199/ISO_8601_2004_E.zip? - func=doc.Fetch&nodeid=4021199), which has functions for parsing almost - every date/time format specified. - - The ones they don't parse are intervals, durations, and recurring - intervals, because I got too lazy to implement them. The functions - (iso8601Time, iso8601Date, and iso8601) update a Date passed instead - of a Time, as does the current iso8601, because that's too limited - a format. One can always convert to a Time if necessary, keeping - in mind that information loss might occur if the Date is outside the - interval Time can represent. - - In addition, because its dayOfWeek function only works for 1900-3-1 to - 2100-2-28, it would fail by a day or two on ISO week dates outside that - interval. (Currently it asserts outside 1901-2099.) If somebody knows a - good algorithm which would fix that, by all means submit it. - - Another thing it doesn't do is conversions from local time to UTC if the - time parsed starts with a 'T'. A comment in doIso8601Time() explains why. - - Because the Date struct has no support for time zones, the module just - converts times with specified time zones into UTC. This leads to - behaviour which may or may not be a bug, as explained in a comment in - getTimeZone(). - -*******************************************************************************/ - -module tango.time.ISO8601; - -public import tango.time.Time; - -public import tango.time.chrono.Calendar; - -private import tango.time.chrono.Gregorian; - -/// Returns the number of chars used to compose a valid date: 0 if no date can be composed. -/// Fields in date will either be correct (e.g. months will be >= 1 and <= 12) or zero. - -size_t iso8601Date(T)(T[] src, ref Date date, size_t expanded = 0) { - ubyte dummy = void; - T* p = src.ptr; - return doIso8601Date(p, src, date, expanded, dummy); -} - -private size_t doIso8601Date(T)(ref T* p, T[] src, ref Date date, size_t expanded, out ubyte separators) -out { - assert (!date.month || (date.month >= 1 && date.month <= 12)); - assert (!date.day || (date.month && date.day >= 1 && date.day <= daysPerMonth(date.month, date.year))); -} body { - - // always set era to AD - date.era = Gregorian.AD_ERA; - - size_t eaten() { return p - src.ptr; } - bool done(T[] s) { return .done(eaten(), src.length, *p, s); } - - if (!parseYear(p, expanded, date.year)) - return (date.year = 0); - - auto onlyYear = eaten(); - - // /([+-]Y{expanded})?(YYYY|YY)/ - if (done("-0123W")) - return onlyYear; - - if (accept(p, '-')) - separators = true; - - if (accept(p, 'W')) { - // (year)-Www-D - - T* p2 = p; - - int i = parseIntMax(p, 3u); - - if (i) if (p - p2 == 2) { - - // (year)-Www - if (done("-")) { - if (getMonthAndDayFromWeek(date, i)) - return eaten(); - - // (year)-Www-D - } else if (demand(p, '-')) - if (getMonthAndDayFromWeek(date, i, *p++ - '0')) - return eaten(); - - } else if (p - p2 == 3) - // (year)WwwD - if (getMonthAndDayFromWeek(date, i / 10, i % 10)) - return eaten(); - - return onlyYear; - } - - // next up, MM or MM[-]DD or DDD - - T* p2 = p; - - int i = parseIntMax(p); - if (!i) - return onlyYear; - - switch (p - p2) { - case 2: - date.month = i; - - if (!(date.month >= 1 && date.month <= 12)) { - date.month = 0; - return onlyYear; - } - - auto onlyMonth = eaten(); - - // (year)-MM - if (done("-")) - return onlyMonth; - - // (year)-MM-DD - if (!( - demand(p, '-') && - (date.day = parseIntMax(p, 2u)) != 0 && date.day <= daysPerMonth(date.month, date.year) - )) { - date.day = 0; - return onlyMonth; - } - - break; - - case 4: - // e.g. 20010203, i = 203 now - - date.month = i / 100; - date.day = i % 100; - - // (year)MMDD - if (!( - date.month >= 1 && date.month <= 12 && - date.day >= 0 && date.day <= daysPerMonth(date.month, date.year) - )) { - date.month = date.day = 0; - return onlyYear; - } - - break; - - case 3: - // (year)-DDD - // i is the ordinal of the day within the year - - bool leap = isLeapYear(date.year); - - if (i > 365 + leap) - return onlyYear; - - if (i <= 31) { - date.month = 1; - date.day = i; - - } else if (i <= 59 + leap) { - date.month = 2; - date.day = i - 31 - leap; - - } else if (i <= 90 + leap) { - date.month = 3; - date.day = i - 59 - leap; - - } else if (i <= 120 + leap) { - date.month = 4; - date.day = i - 90 - leap; - - } else if (i <= 151 + leap) { - date.month = 5; - date.day = i - 120 - leap; - - } else if (i <= 181 + leap) { - date.month = 6; - date.day = i - 151 - leap; - - } else if (i <= 212 + leap) { - date.month = 7; - date.day = i - 181 - leap; - - } else if (i <= 243 + leap) { - date.month = 8; - date.day = i - 212 - leap; - - } else if (i <= 273 + leap) { - date.month = 9; - date.day = i - 243 - leap; - - } else if (i <= 304 + leap) { - date.month = 10; - date.day = i - 273 - leap; - - } else if (i <= 334 + leap) { - date.month = 11; - date.day = i - 304 - leap; - - } else { - if (i > 365 + leap) - assert (false); - - date.month = 12; - date.day = i - 334 - leap; - } - - default: break; - } - - return eaten(); -} - -/// Returns the number of chars used to compose a valid date: 0 if no date can be composed. -/// Fields in date will be zero if incorrect: since 00:00:00,000 is a valid time, the return value must be checked to be sure of the result. -/// time.seconds may be 60 if the hours and minutes are 23 and 59, as leap seconds are occasionally added to UTC time. -/// time.hours may be 0 or 24: the latter marks the end of a day, the former the beginning. - -size_t iso8601Time(T)(T[] src, ref Date date, ref TimeOfDay time) { - bool dummy = void; - T* p = src.ptr; - return doIso8601Time(p, src, date, time, WHATEVER, dummy); -} - -private enum : ubyte { NO = 0, YES = 1, WHATEVER } - -// bothValid is used only to get iso8601() to catch errors correctly -private size_t doIso8601Time(T)(ref T* p, T[] src, ref Date date, ref TimeOfDay time, ubyte separators, out bool bothValid) -out { - // yes, I could just write >= 0, but this emphasizes the difference between == 0 and != 0 - assert (!time.hours || (time.hours > 0 && time.hours <= 24)); - assert (!time.minutes || (time.minutes > 0 && time.minutes <= 59)); - assert (!time.seconds || (time.seconds > 0 && time.seconds <= 60)); - assert (!time.millis || (time.millis > 0 && time.millis <= 999)); -} body { - size_t eaten() { return p - src.ptr; } - bool done(T[] s) { return .done(eaten(), src.length, *p, s); } - - bool checkColon() { - if (separators == WHATEVER) - accept(p, ':'); - - else if (accept(p, ':') != separators) - return false; - - return true; - } - - byte getTimeZone() { return .getTimeZone(p, date, time, separators, &done); } - - // TODO/BUG: need to convert from local time if got T - // however, Tango provides nothing like Phobos's std.date.getLocalTZA - // (which doesn't look like it should work on Windows, it should use tzi.bias only, and GetTimeZoneInformationForYear) - // (and which uses too complicated code for Posix, tzset should be enough) - // and I'm not interested in delving into system-specific code right now - // remember also that -1 BC is the year zero in ISO 8601... -2 BC is -1, etc - if (separators == WHATEVER) - accept(p, 'T'); - - if (parseInt(p, 2u, time.hours) != 2 || time.hours > 24) - return (time.hours = 0); - - auto onlyHour = eaten(); - - // hh - if (done("+,-.012345:")) - return onlyHour; - - switch (getDecimal(p, time, HOUR)) { - case NOTFOUND: break; - case FOUND: - auto onlyDecimal = eaten(); - if (getTimeZone() == BAD) - return onlyDecimal; - - // /hh,h+/ - return eaten(); - - case BAD: return onlyHour; - default: assert (false); - } - - switch (getTimeZone()) { - case NOTFOUND: break; - case FOUND: return eaten(); - case BAD: return onlyHour; - default: assert (false); - } - - if ( - !checkColon() || - - parseInt(p, 2u, time.minutes) != 2 || time.minutes > 59 || - - // hour 24 is only for 24:00:00 - (time.hours == 24 && time.minutes != 0) - ) { - time.minutes = 0; - return onlyHour; - } - - auto onlyMinute = eaten(); - - // hh:mm - if (done("+,-.0123456:")) { - bothValid = true; - return onlyMinute; - } - - switch (getDecimal(p, time, MINUTE)) { - case NOTFOUND: break; - case FOUND: - auto onlyDecimal = eaten(); - if (getTimeZone() == BAD) - return onlyDecimal; - - // /hh:mm,m+/ - bothValid = true; - return eaten(); - - case BAD: return onlyMinute; - default: assert (false); - } - - switch (getTimeZone()) { - case NOTFOUND: break; - case FOUND: bothValid = true; return eaten(); - case BAD: return onlyMinute; - default: assert (false); - } - - if ( - !checkColon() || - parseInt(p, 2u, time.seconds) != 2 || time.seconds > 60 || - (time.hours == 24 && time.seconds != 0) || - (time.seconds == 60 && time.hours != 23 && time.minutes != 59) - ) { - time.seconds = 0; - return onlyMinute; - } - - auto onlySecond = eaten(); - - // hh:mm:ss - if (done("+,-.Z")) { - bothValid = true; - return onlySecond; - } - - switch (getDecimal(p, time, SECOND)) { - case NOTFOUND: break; - case FOUND: - auto onlyDecimal = eaten(); - if (getTimeZone() == BAD) - return onlyDecimal; - - // /hh:mm:ss,s+/ - bothValid = true; - return eaten(); - - case BAD: return onlySecond; - default: assert (false); - } - - if (getTimeZone() == BAD) - return onlySecond; - else { - bothValid = true; - return eaten(); // hh:mm:ss with timezone - } -} - -// combination of date and time -// stricter than just date followed by time: -// can't have an expanded or reduced date -// either use separators everywhere or not at all - -/// This function is very strict: either a complete date and time can be extracted, or nothing can. -/// If this function returns zero, the fields of date are undefined. - -size_t iso8601(T)(T[] src, ref Date date, ref TimeOfDay time) { - T* p = src.ptr; - ubyte sep; - bool bothValid = false; - - if ( - doIso8601Date(p, src, date, 0u, sep) && - date.year && date.month && date.day && - - // by mutual agreement this T may be omitted - // but this is just a convenience method for date+time anyway - demand(p, 'T') && - - doIso8601Time(p, src, date, time, sep, bothValid) && - bothValid - ) - return p - src.ptr; - else - return 0; -} - -/+ +++++++++++++++++++++++++++++++++++++++ +\ - - Privates used by date - -\+ +++++++++++++++++++++++++++++++++++++++ +/ - -// /([+-]Y{expanded})?(YYYY|YY)/ -private bool parseYear(T)(ref T* p, size_t expanded, out uint year) { - - bool doParse() { - T* p2 = p; - - if (!parseInt(p, expanded + 4u, year)) - return false; - - // it's Y{expanded}YY, Y{expanded}YYYY, or unacceptable - if (p - p2 - expanded == 2u) - year *= 100; - else if (p - p2 - expanded != 4u) - return false; - - return true; - } - - if (accept(p, '-')) { - if (!doParse()) - return false; - year = -year; - } else { - accept(p, '+'); - if (!doParse()) - return false; - } - - return true; -} - -// find the month and day based on the calendar week -// uses date.year for leap year calculations -// returns false if week and date.year are incompatible -// based on the VBA function at http://www.probabilityof.com/ISO8601.shtml -private bool getMonthAndDayFromWeek(ref Date date, int week, int day = 1) { - if (week < 1 || week > 53 || day < 1 || day > 7) - return false; - - bool leap = isLeapYear(date.year); - - // only years starting with Thursday and - // leap years starting with Wednesday have 53 weeks - - if (week == 53) { - int startingDay = dayOfWeek(date.year, 1, 1, leap); - - if (!(startingDay == 4 || (leap && startingDay == 3))) - return false; - } - - // days since year-01-04 - int delta = 7*(week - 1) - dayOfWeek(date.year, 1, 4, leap) + day; - - if (delta <= -4) { - if (delta < -7) - assert (false); - - --date.year; - date.month = 12; - date.day = delta + 4 + 31; - - } else if (delta <= 27) { - date.month = 1; - date.day = delta + 4; - - } else if (delta <= 56 + leap) { - date.month = 2; - date.day = delta - 27; - - } else if (delta <= 87 + leap) { - date.month = 3; - date.day = delta - 55 - leap; - - } else if (delta <= 117 + leap) { - date.month = 4; - date.day = delta - 86 - leap; - - } else if (delta <= 148 + leap) { - date.month = 5; - date.day = delta - 116 - leap; - - } else if (delta <= 178 + leap) { - date.month = 6; - date.day = delta - 147 - leap; - - } else if (delta <= 209 + leap) { - date.month = 7; - date.day = delta - 177 - leap; - - } else if (delta <= 240 + leap) { - date.month = 8; - date.day = delta - 208 - leap; - - } else if (delta <= 270 + leap) { - date.month = 9; - date.day = delta - 239 - leap; - - } else if (delta <= 301 + leap) { - date.month = 10; - date.day = delta - 269 - leap; - - } else if (delta <= 331 + leap) { - date.month = 11; - date.day = delta - 300 - leap; - - } else if (delta <= 361 + leap) { - date.month = 12; - date.day = delta - 330 - leap; - - } else { - if (delta > 365 + leap) - assert (false); - - ++date.year; - date.month = 1; - date.day = delta - 365 - leap + 4; - } - - return true; -} - -private bool isLeapYear(int year) { - return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0); -} - -// Babwani's Congruence -private int dayOfWeek(int year, int month, int day, bool leap) -in { - assert (month >= 1 && month <= 12); - assert (day >= 1 && day <= 31); - - // BUG: only works for 1900-3-1 to 2100-2-28 - assert (year >= 1901 && year <= 2099, "iso8601 :: Can't calculate day of week outside the years 1900-2099"); - -} out(result) { - assert (result >= 1 && result <= 7); - -} body { - int f() { - if (leap && month <= 2) - return [6,2][month-1]; - - return [0,3,3,6,1,4,6,2,5,0,3,5][month-1]; - } - - int d = ((5*(year % 100) / 4) - 2*((year / 100) % 4) + f() + day) % 7; - - // defaults to Saturday=0, Friday=6: convert to Monday=1, Sunday=7 - return (d <= 1 ? d+6 : d-1); -} - -/+ +++++++++++++++++++++++++++++++++++++++ +\ - - Privates used by time - -\+ +++++++++++++++++++++++++++++++++++++++ +/ - -private enum : ubyte { HOUR, MINUTE, SECOND } -private enum : byte { BAD, FOUND, NOTFOUND } - -private byte getDecimal(T)(ref T* p, ref TimeOfDay time, ubyte which) { - if (accept(p, ',') || accept(p, '.')) { - - T* p2 = p; - - int i; - size_t iLen = parseInt(p, i); - - if ( - iLen == 0 || - - // if i is 0, must have at least 3 digits - // ... or at least that's what I think the standard means - // when it says "[i]f the magnitude of the number is less - // than unity, the decimal sign shall be preceded by two - // zeros"... - // surely that should read "followed" and not "preceded" - - (i == 0 && iLen < 3) - ) - return BAD; - - // 10 to the power of (iLen - 1) - int pow = 1; - while (--iLen) - pow *= 10; - - switch (which) { - case HOUR: - time.minutes = 6 * i / pow; - time.seconds = 6 * i % pow; - break; - case MINUTE: - time.seconds = 6 * i / pow; - time.millis = 6000 * i / pow % 1000; - break; - case SECOND: - time.millis = 100 * i / pow; - break; - - default: assert (false); - } - - return FOUND; - } - - return NOTFOUND; -} - -// the Date is always UTC, so this just adds the offset to the date fields -// another option would be to add time zone fields to Date and have this fill them - -private byte getTimeZone(T)(ref T* p, ref Date date, ref TimeOfDay time, ubyte separators, bool delegate(T[]) done) { - if (accept(p, 'Z')) - return FOUND; - - int factor = -1; - - if (accept(p, '-')) - factor = 1; - - else if (!accept(p, '+')) - return NOTFOUND; - - int hour, realhour = time.hours, realminute = time.minutes; - scope(exit) time.hours = cast(uint)realhour; - scope(exit) time.minutes = cast(uint)realminute; - if (parseInt(p, 2u, hour) != 2 || hour > 12 || (hour == 0 && factor == 1)) - return BAD; - - realhour += factor * hour; - - void hourCheck() { - if (realhour > 24 || (realhour == 24 && (realminute || time.seconds))) { - realhour -= 24; - - // BUG? what should be done? - // if we get a time like 20:00-05:00 - // which needs to be converted to UTC by adding 05:00 to 20:00 - // we just set the time to 01:00 and the day to 1 - // even though this is time, which really has nothing to do with the day, which is part of the date - // if this isn't a bug, it needs to be documented: it's not necessarily obvious - if (date.day++ && date.day > daysPerMonth(date.month, date.year)) { - date.day = 1; - if (++date.month > 12) { - date.month = 1; - ++date.year; - } - } - } else if (realhour < 0) { - realhour += 24; - - // ditto above BUG? - if (date.day-- && date.day < 1) { - if (--date.month < 1) { - date.month = 12; - --date.year; - } - - date.day = daysPerMonth(date.month, date.year); - } - } - } - - if (done("012345:")) { - hourCheck(); - return FOUND; - } - - if (separators == WHATEVER) - accept(p, ':'); - - else if (accept(p, ':') != separators) - return BAD; - - int minute; - if (parseInt(p, 2u, minute) != 2) - return BAD; - - assert (minute <= 59); - - realminute += factor * minute; - - if (realminute > 59) { - realminute -= 60; - ++realhour; - - } else if (realminute < 0) { - realminute += 60; - --realhour; - } - - hourCheck(); - return FOUND; -} - -/+ +++++++++++++++++++++++++++++++++++++++ +\ - - Privates used by both date and time - -\+ +++++++++++++++++++++++++++++++++++++++ +/ - -private bool accept(T)(ref T* p, char c) { - if (*p == c) { - ++p; - return true; - } - return false; -} - -private bool demand(T)(ref T* p, char c) { - return (*p++ == c); -} - -private bool done(T)(size_t eaten, size_t srcLen, T p, T[] s) { - if (eaten == srcLen) - return true; - - // s is the array of characters which may come next - // (i.e. which p may be) - // sorted in ascending order - foreach (c; s) { - if (p < c) - return true; - else if (p == c) - break; - } - - return false; -} - -private int daysPerMonth(int month, int year) { - if (month == 2 && isLeapYear(year)) - return 29; - else - return [31,28,31,30,31,30,31,31,30,31,30,31][month-1]; -} - -/****************************************************************************** - - Extract an integer from the input - -******************************************************************************/ - -// note: ISO 8601 code relies on these values always being positive, failing if *p == '-' - -private uint parseIntMax(T) (ref T* p) { - uint value = 0; - while (*p >= '0' && *p <= '9') - value = value * 10 + *p++ - '0'; - return value; -} - -// ... but accept no more than max digits - -private uint parseIntMax(T)(ref T* p, uint max) { - size_t i = 0; - uint value = 0; - while (p[i] >= '0' && p[i] <= '9' && i < max) - value = value * 10 + p[i++] - '0'; - p += i; - return value; -} - -// ... and return the amount of digits processed - -private size_t parseInt(T, U)(ref T* p, out U i) { - T* p2 = p; - i = cast(U)parseIntMax(p); - return p - p2; -} - -private size_t parseInt(T, U)(ref T* p, uint max, out U i) { - T* p2 = p; - i = cast(U)parseIntMax(p, max); - return p - p2; -} - -//////////////////// - -debug (UnitTest) { - import tango.io.Stdout; - - debug(ISO8601) - { - void main() { } - } - - unittest { - Date date; - TimeOfDay time; - - // date - - size_t d(char[] s, size_t e = 0) { - date = date.init; - return iso8601Date(s, date, e); - } - - assert (d("20abc") == 2); - assert (date.year == 2000); - - assert (d("2004") == 4); - assert (date.year == 2004); - - assert (d("+0019", 2) == 5); - assert (date.year == 1900); - - assert (d("+111985", 2) == 7); - assert (date.year == 111985); - - assert (d("+111985", 1) == 6); - assert (date.year == 11198); - - assert (d("+111985", 3) == 0); - assert (!date.year); - - assert (d("+111985", 4) == 7); - assert (date.year == 11198500); - - assert (d("-111985", 5) == 0); - assert (!date.year); - - assert (d("abc") == 0); - assert (!date.year); - - assert (d("abc123") == 0); - assert (!date.year); - - assert (d("2007-08") == 7); - assert (date.year == 2007); - assert (date.month == 8); - - assert (d("+001985-04", 2) == 10); - assert (date.year == 1985); - assert (date.month == 4); - - assert (d("2007-08-07") == 10); - assert (date.year == 2007); - assert (date.month == 8); - assert (date.day == 7); - - assert (d("2008-20-30") == 4); - assert (date.year == 2008); - assert (!date.month); - - assert (d("2007-02-30") == 7); - assert (date.year == 2007); - assert (date.month == 2); - - assert (d("20060708") == 8); - assert (date.year == 2006); - assert (date.month == 7); - assert (date.day == 8); - - assert (d("19953080") == 4); - assert (date.year == 1995); - assert (!date.month); - - assert (d("+001985-04-12", 2) == 13); - assert (date.year == 1985); - assert (date.month == 4); - assert (date.day == 12); - - assert (d("-0123450607", 2) == 11); - assert (date.year == -12345); - assert (date.month == 6); - assert (date.day == 7); - - assert (d("1985W15") == 7); - assert (date.year == 1985); - assert (date.month == 4); - assert (date.day == 8); - - assert (d("2008-W01") == 8); - assert (date.year == 2007); - assert (date.month == 12); - assert (date.day == 31); - - assert (d("2008-W01-2") == 10); - assert (date.year == 2008); - assert (date.month == 1); - assert (date.day == 1); - - assert (d("2009-W53-4") == 10); - assert (date.year == 2009); - assert (date.month == 12); - assert (date.day == 31); - - assert (d("2009-W01-1") == 10); - assert (date.year == 2008); - assert (date.month == 12); - assert (date.day == 29); - - assert (d("2009W537") == 8); - assert (date.year == 2010); - assert (date.month == 1); - assert (date.day == 3); - - assert (d("2010W537") == 4); - assert (date.year == 2010); - assert (!date.month); - - assert (d("2009-W01-3") == 10); - assert (date.year == 2008); - assert (date.month == 12); - assert (date.day == 31); - - assert (d("2009-W01-4") == 10); - assert (date.year == 2009); - assert (date.month == 1); - assert (date.day == 1); - - /+ BUG: these don't work due to dayOfWeek being crap - - assert (d("1000-W07-7") == 10); - assert (date.year == 1000); - assert (date.month == 2); - assert (date.day == 16); - - assert (d("1500-W11-1") == 10); - assert (date.year == 1500); - assert (date.month == 3); - assert (date.day == 12); - - assert (d("1700-W14-2") == 10); - assert (date.year == 1700); - assert (date.month == 4); - assert (date.day == 6); - - assert (d("1800-W19-3") == 10); - assert (date.year == 1800); - assert (date.month == 5); - assert (date.day == 7); - - assert (d("1900-W25-4") == 10); - assert (date.year == 1900); - assert (date.month == 6); - assert (date.day == 21); - - assert (d("0900-W27-5") == 10); - assert (date.year == 900); - assert (date.month == 7); - assert (date.day == 9); - - assert (d("0800-W33-6") == 10); - assert (date.year == 800); - assert (date.month == 8); - assert (date.day == 19); - - assert (d("0700-W37-7") == 10); - assert (date.year == 700); - assert (date.month == 9); - assert (date.day == 16); - - assert (d("0600-W41-4") == 10); - assert (date.year == 600); - assert (date.month == 10); - assert (date.day == 9); - - assert (d("0500-W45-7") == 10); - assert (date.year == 500); - assert (date.month == 11); - assert (date.day == 14);+/ - - assert (d("2000-W55") == 4); - assert (date.year == 2000); - - assert (d("1980-002") == 8); - assert (date.year == 1980); - assert (date.month == 1); - assert (date.day == 2); - - assert (d("1981-034") == 8); - assert (date.year == 1981); - assert (date.month == 2); - assert (date.day == 3); - - assert (d("1982-063") == 8); - assert (date.year == 1982); - assert (date.month == 3); - assert (date.day == 4); - - assert (d("1983-095") == 8); - assert (date.year == 1983); - assert (date.month == 4); - assert (date.day == 5); - - assert (d("1984-127") == 8); - assert (date.year == 1984); - assert (date.month == 5); - assert (date.day == 6); - - assert (d("1985-158") == 8); - assert (date.year == 1985); - assert (date.month == 6); - assert (date.day == 7); - - assert (d("1986-189") == 8); - assert (date.year == 1986); - assert (date.month == 7); - assert (date.day == 8); - - assert (d("1987-221") == 8); - assert (date.year == 1987); - assert (date.month == 8); - assert (date.day == 9); - - assert (d("1988-254") == 8); - assert (date.year == 1988); - assert (date.month == 9); - assert (date.day == 10); - - assert (d("1989-284") == 8); - assert (date.year == 1989); - assert (date.month == 10); - assert (date.day == 11); - - assert (d("1990316") == 7); - assert (date.year == 1990); - assert (date.month == 11); - assert (date.day == 12); - - assert (d("1991-347") == 8); - assert (date.year == 1991); - assert (date.month == 12); - assert (date.day == 13); - - assert (d("1992-000") == 4); - assert (date.year == 1992); - - assert (d("1993-370") == 4); - assert (date.year == 1993); - - // time - - size_t t(char[] s) { - time = time.init; - date = date.init; - - return iso8601Time(s, date, time); - } - - assert (t("20") == 2); - assert (time.hours == 20); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (t("30") == 0); - - assert (t("2004") == 4); - assert (time.hours == 20); - assert (time.minutes == 4); - assert (time.seconds == 0); - - assert (t("200406") == 6); - assert (time.hours == 20); - assert (time.minutes == 4); - assert (time.seconds == 6); - - assert (t("24:00") == 5); - assert (time.hours == 24); // should compare equal with 0... can't just set to 0, loss of information - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (t("00:00") == 5); - assert (time.hours == 0); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (t("23:59:60") == 8); - assert (time.hours == 23); - assert (time.minutes == 59); - assert (time.seconds == 60); // leap second - - assert (t("16:49:30,001") == 12); - assert (time.hours == 16); - assert (time.minutes == 49); - assert (time.seconds == 30); - assert (time.millis == 1); - - assert (t("15:48:29,1") == 10); - assert (time.hours == 15); - assert (time.minutes == 48); - assert (time.seconds == 29); - assert (time.millis == 100); - - assert (t("02:10:34,a") == 8); - assert (time.hours == 2); - assert (time.minutes == 10); - assert (time.seconds == 34); - - assert (t("14:50,5") == 7); - assert (time.hours == 14); - assert (time.minutes == 50); - assert (time.seconds == 30); - - assert (t("1540,4") == 6); - assert (time.hours == 15); - assert (time.minutes == 40); - assert (time.seconds == 24); - - assert (t("1250,") == 4); - assert (time.hours == 12); - assert (time.minutes == 50); - - assert (t("14,5") == 4); - assert (time.hours == 14); - assert (time.minutes == 30); - - assert (t("12,") == 2); - assert (time.hours == 12); - assert (time.minutes == 0); - - assert (t("24:00:01") == 5); - assert (time.hours == 24); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (t("12:34+:56") == 5); - assert (time.hours == 12); - assert (time.minutes == 34); - assert (time.seconds == 0); - - // just convert to UTC time for time zones? - - assert (t("14:45:15Z") == 9); - assert (time.hours == 14); - assert (time.minutes == 45); - assert (time.seconds == 15); - - assert (t("23Z") == 3); - assert (time.hours == 23); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (t("21:32:43-12:34") == 14); - assert (time.hours == 10); - assert (time.minutes == 6); - assert (time.seconds == 43); - - assert (t("12:34,5+0000") == 12); - assert (time.hours == 12); - assert (time.minutes == 34); - assert (time.seconds == 30); - - assert (t("03:04+07") == 8); - assert (time.hours == 20); - assert (time.minutes == 4); - assert (time.seconds == 0); - - assert (t("11,5+") == 4); - assert (time.hours == 11); - assert (time.minutes == 30); - - assert (t("07-") == 2); - assert (time.hours == 7); - - assert (t("06:12,7-") == 7); - assert (time.hours == 6); - assert (time.minutes == 12); - assert (time.seconds == 42); - - assert (t("050403,2+") == 8); - assert (time.hours == 5); - assert (time.minutes == 4); - assert (time.seconds == 3); - assert (time.millis == 200); - - assert (t("061656-") == 6); - assert (time.hours == 6); - assert (time.minutes == 16); - assert (time.seconds == 56); - - // date and time together - - size_t b(char[] s) { - date = date.init; - time = time.init; - return iso8601(s, date, time); - } - - assert (b("2007-08-09T12:34:56") == 19); - assert (date.year == 2007); - assert (date.month == 8); - assert (date.day == 9); - assert (time.hours == 12); - assert (time.minutes == 34); - assert (time.seconds == 56); - - assert (b("1985W155T235030,768") == 19); - assert (date.year == 1985); - assert (date.month == 4); - assert (date.day == 12); - assert (time.hours == 23); - assert (time.minutes == 50); - assert (time.seconds == 30); - assert (time.millis == 768); - - // just convert to UTC time for time zones? - - assert (b("2009-08-07T01:02:03Z") == 20); - assert (date.year == 2009); - assert (date.month == 8); - assert (date.day == 7); - assert (time.hours == 1); - assert (time.minutes == 2); - assert (time.seconds == 3); - - assert (b("2007-08-09T03:02,5+04:56") == 24); - assert (date.year == 2007); - assert (date.month == 8); - assert (date.day == 8); - assert (time.hours == 22); - assert (time.minutes == 6); - assert (time.seconds == 30); - - assert (b("20000228T2330-01") == 16); - assert (date.year == 2000); - assert (date.month == 2); - assert (date.day == 29); - assert (time.hours == 0); - assert (time.minutes == 30); - assert (time.seconds == 0); - - assert (b("2007-01-01T00:00+01") == 19); - assert (date.year == 2006); - assert (date.month == 12); - assert (date.day == 31); - assert (time.hours == 23); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (b("2007-12-31T23:00-01") == 19); - assert (date.year == 2007); - assert (date.month == 12); - assert (date.day == 31); - assert (time.hours == 24); - assert (time.minutes == 0); - assert (time.seconds == 0); - - assert (b("2007-12-31T23:01-01") == 19); - assert (date.year == 2008); - assert (date.month == 1); - assert (date.day == 1); - assert (time.hours == 0); - assert (time.minutes == 1); - assert (time.seconds == 0); - - assert (b("1902-03-04T1a") == 0); - assert (b("1902-03-04T10:aa") == 0); - assert (b("1902-03-04T10:1aa") == 0); - assert (b("1985-04-12T10:15:30+0400") == 0); - assert (b("1985-04-12T10:15:30-05:4") == 0); - assert (b("1985-04-12T10:15:30-06:4b") == 0); - assert (b("19020304T05:06:07") == 0); - assert (b("1902-03-04T050607") == 0); - assert (b("19020304T05:06:07abcd") == 0); - assert (b("1902-03-04T050607abcd") == 0); - - // unimplemented: intervals, durations, recurring intervals - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/StopWatch.d --- a/tango/tango/time/StopWatch.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Feb 2007: Initial release - - author: Kris - -*******************************************************************************/ - -module tango.time.StopWatch; - -private import tango.core.Exception; - -/******************************************************************************* - -*******************************************************************************/ - -version (Win32) -{ - private extern (Windows) - { - int QueryPerformanceCounter (ulong *count); - int QueryPerformanceFrequency (ulong *frequency); - } -} - -version (Posix) -{ - private import tango.stdc.posix.sys.time; -} - -/******************************************************************************* - - Timer for measuring small intervals, such as the duration of a - subroutine or other reasonably small period. - --- - StopWatch elapsed; - - elapsed.start; - - // do something - // ... - - double i = elapsed.stop; - --- - - The measured interval is in units of seconds, using floating- - point to represent fractions. This approach is more flexible - than integer arithmetic since it migrates trivially to more - capable timer hardware (there no implicit granularity to the - measurable intervals, except the limits of fp representation) - - StopWatch is accurate to the extent of what the underlying OS - supports. On linux systems, this accuracy is typically 1 us at - best. Win32 is generally more precise. - - There is some minor overhead in using StopWatch, so take that into - account - -*******************************************************************************/ - -public struct StopWatch -{ - private ulong started; - private static double multiplier = 1.0 / 1_000_000.0; - - version (Win32) - private static double microsecond; - - /*********************************************************************** - - Start the timer - - ***********************************************************************/ - - void start () - { - started = timer; - } - - /*********************************************************************** - - Stop the timer and return elapsed duration since start() - - ***********************************************************************/ - - double stop () - { - return multiplier * (timer - started); - } - - /*********************************************************************** - - Return elapsed time since the last start() as microseconds - - ***********************************************************************/ - - ulong microsec () - { - version (Posix) - return (timer - started); - - version (Win32) - return cast(ulong) ((timer - started) * microsecond); - } - - /*********************************************************************** - - Setup timing information for later use - - ***********************************************************************/ - - static this() - { - version (Win32) - { - ulong freq; - - QueryPerformanceFrequency (&freq); - microsecond = 1_000_000.0 / freq; - multiplier = 1.0 / freq; - } - } - - /*********************************************************************** - - Return the current time as an Interval - - ***********************************************************************/ - - private static ulong timer () - { - version (Posix) - { - timeval tv; - if (gettimeofday (&tv, null)) - throw new PlatformException ("Timer :: linux timer is not available"); - - return (cast(ulong) tv.tv_sec * 1_000_000) + tv.tv_usec; - } - - version (Win32) - { - ulong now; - - if (! QueryPerformanceCounter (&now)) - throw new PlatformException ("high-resolution timer is not available"); - - return now; - } - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (StopWatch) -{ - import tango.io.Stdout; - - void main() - { - StopWatch t; - t.start; - - for (int i=0; i < 100_000_000; ++i) - {} - Stdout.format ("{:f9}", t.stop).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/Time.d --- a/tango/tango/time/Time.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,861 +0,0 @@ -/****************************************************************************** - - copyright: Copyright (c) 2007 Tango. All rights reserved - - license: BSD style: $(LICENSE) - - version: mid 2005: Initial release - Apr 2007: heavily reshaped - Dec 2007: moved to tango.time - - author: John Chapman, Kris, scheivguy - -******************************************************************************/ - -module tango.time.Time; - -/****************************************************************************** - - This struct represents a length of time. The underlying representation is - in units of 100ns. This allows the length of time to span to roughly - +/- 10000 years. - - Notably missing from this is a representation of weeks, months and years. - This is because weeks, months, and years vary according to local calendars. - Use tango.time.chrono.* to deal with these concepts. - - Note: nobody should change this struct without really good reason as it is - required to be a part of some interfaces. It should be treated as a builtin - type. Also note that there is deliberately no opCall constructor here, since - it tends to produce too much overhead. - - Example: - ------------------- - Time start = Clock.now; - Thread.sleep(0.150); - Stdout.formatln("slept for {} ms", (Clock.now-start).millis); - ------------------- - - See_Also: tango.core.Thread, tango.time.Clock - -******************************************************************************/ - -struct TimeSpan -{ - // this is the only member of the struct. - package long ticks_; - - // useful constants. Shouldn't be used in normal code, use the - // static TimeSpan members below instead. i.e. instead of - // TimeSpan.TicksPerSecond, use TimeSpan.second.ticks - // - enum : long - { - /// basic tick values - NanosecondsPerTick = 100, - TicksPerMicrosecond = 1000 / NanosecondsPerTick, - TicksPerMillisecond = 1000 * TicksPerMicrosecond, - TicksPerSecond = 1000 * TicksPerMillisecond, - TicksPerMinute = 60 * TicksPerSecond, - TicksPerHour = 60 * TicksPerMinute, - TicksPerDay = 24 * TicksPerHour, - - // millisecond counts - MillisPerSecond = 1000, - MillisPerMinute = MillisPerSecond * 60, - MillisPerHour = MillisPerMinute * 60, - MillisPerDay = MillisPerHour * 24, - - /// day counts - DaysPerYear = 365, - DaysPer4Years = DaysPerYear * 4 + 1, - DaysPer100Years = DaysPer4Years * 25 - 1, - DaysPer400Years = DaysPer100Years * 4 + 1, - - // epoch counts - Epoch1601 = DaysPer400Years * 4 * TicksPerDay, - Epoch1970 = Epoch1601 + TicksPerSecond * 11644473600L, - } - - /** - * Minimum TimeSpan - */ - static const TimeSpan min = {long.min}; - - /** - * Maximum TimeSpan - */ - static const TimeSpan max = {long.max}; - - /** - * Zero TimeSpan. Useful for comparisons. - */ - static const TimeSpan zero = {0}; - - /** - * Get the number of ticks that this timespan represents. - */ - long ticks() - { - return ticks_; - } - - /** - * Determines whether two TimeSpan values are equal - */ - bool opEquals(TimeSpan t) - { - return ticks_ is t.ticks_; - } - - /** - * Compares this object against another TimeSpan value. - */ - int opCmp(TimeSpan t) - { - if (ticks_ < t.ticks_) - return -1; - - if (ticks_ > t.ticks_) - return 1; - - return 0; - } - - /** - * Add the TimeSpan given to this TimeSpan returning a new TimeSpan. - * - * Params: t = A TimeSpan value to add - * Returns: A TimeSpan value that is the sum of this instance and t. - */ - TimeSpan opAdd(TimeSpan t) - { - return TimeSpan(ticks_ + t.ticks_); - } - - /** - * Add the specified TimeSpan to this TimeSpan, assigning the result - * to this instance. - * - * Params: t = A TimeSpan value to add - * Returns: a copy of this instance after adding t. - */ - TimeSpan opAddAssign(TimeSpan t) - { - ticks_ += t.ticks_; - return *this; - } - - /** - * Subtract the specified TimeSpan from this TimeSpan. - * - * Params: t = A TimeSpan to subtract - * Returns: A new timespan which is the difference between this - * instance and t - */ - TimeSpan opSub(TimeSpan t) - { - return TimeSpan(ticks_ - t.ticks_); - } - - /** - * - * Subtract the specified TimeSpan from this TimeSpan and assign the - * value to this TimeSpan. - * - * Params: t = A TimeSpan to subtract - * Returns: A copy of this instance after subtracting t. - */ - TimeSpan opSubAssign(TimeSpan t) - { - ticks_ -= t.ticks_; - return *this; - } - - /** - * Scale the TimeSpan by the specified amount. This should not be - * used to convert to a different unit. Use the unit accessors - * instead. This should only be used as a scaling mechanism. For - * example, if you have a timeout and you want to sleep for twice the - * timeout, you would use timeout * 2. - * - * Params: v = A multiplier to use for scaling this time span. - * Returns: A new TimeSpan that is scaled by v - */ - TimeSpan opMul(long v) - { - return TimeSpan(ticks_ * v); - } - - /** - * Scales this TimeSpan and assigns the result to this instance. - * - * Params: v = A multipler to use for scaling - * Returns: A copy of this instance after scaling - */ - TimeSpan opMulAssign(long v) - { - ticks_ *= v; - return *this; - } - - /** - * Divide the TimeSpan by the specified amount. This should not be - * used to convert to a different unit. Use the unit accessors - * instead. This should only be used as a scaling mechanism. For - * example, if you have a timeout and you want to sleep for half the - * timeout, you would use timeout / 2. - * - * - * Params: v = A divisor to use for scaling this time span. - * Returns: A new TimeSpan that is divided by v - */ - TimeSpan opDiv(long v) - { - return TimeSpan(ticks_ / v); - } - - /** - * Divides this TimeSpan and assigns the result to this instance. - * - * Params: v = A multipler to use for dividing - * Returns: A copy of this instance after dividing - */ - TimeSpan opDivAssign(long v) - { - ticks_ /= v; - return *this; - } - - /** - * Perform integer division with the given time span. - * - * Params: t = A divisor used for dividing - * Returns: The result of integer division between this instance and - * t. - */ - long opDiv(TimeSpan t) - { - return ticks_ / t.ticks; - } - - /** - * Negate a time span - * - * Returns: The negative equivalent to this time span - */ - TimeSpan opNeg() - { - return TimeSpan(-ticks_); - } - - /** - * Convert to nanoseconds - * - * Note: this may incur loss of data because nanoseconds cannot - * represent the range of data a TimeSpan can represent. - * - * Returns: The number of nanoseconds that this TimeSpan represents. - */ - long nanos() - { - return ticks_ * NanosecondsPerTick; - } - - /** - * Convert to microseconds - * - * Returns: The number of microseconds that this TimeSpan represents. - */ - long micros() - { - return ticks_ / TicksPerMicrosecond; - } - - /** - * Convert to milliseconds - * - * Returns: The number of milliseconds that this TimeSpan represents. - */ - long millis() - { - return ticks_ / TicksPerMillisecond; - } - - /** - * Convert to seconds - * - * Returns: The number of seconds that this TimeSpan represents. - */ - long seconds() - { - return ticks_ / TicksPerSecond; - } - - /** - * Convert to minutes - * - * Returns: The number of minutes that this TimeSpan represents. - */ - long minutes() - { - return ticks_ / TicksPerMinute; - } - - /** - * Convert to hours - * - * Returns: The number of hours that this TimeSpan represents. - */ - long hours() - { - return ticks_ / TicksPerHour; - } - - /** - * Convert to days - * - * Returns: The number of days that this TimeSpan represents. - */ - long days() - { - return ticks_ / TicksPerDay; - } - - /** - * Convert to a floating point interval representing seconds. - * - * Note: This may cause a loss of precision as a double cannot exactly - * represent some fractional values. - * - * Returns: An interval representing the seconds and fractional - * seconds that this TimeSpan represents. - */ - double interval() - { - return (cast(double) ticks_) / TicksPerSecond; - } - - /** - * Convert to TimeOfDay - * - * Returns: the TimeOfDay this TimeSpan represents. - */ - TimeOfDay time() - { - return TimeOfDay(ticks_); - } - - /** - * Construct a TimeSpan from the given number of nanoseconds - * - * Note: This may cause a loss of data since a TimeSpan's resolution - * is in 100ns increments. - * - * Params: value = The number of nanoseconds. - * Returns: A TimeSpan representing the given number of nanoseconds. - */ - static TimeSpan nanos(long value) - { - return TimeSpan(value / NanosecondsPerTick); - } - - /** - * Construct a TimeSpan from the given number of microseconds - * - * Params: value = The number of microseconds. - * Returns: A TimeSpan representing the given number of microseconds. - */ - static TimeSpan micros(long value) - { - return TimeSpan(TicksPerMicrosecond * value); - } - - /** - * Construct a TimeSpan from the given number of milliseconds - * - * Params: value = The number of milliseconds. - * Returns: A TimeSpan representing the given number of milliseconds. - */ - static TimeSpan millis(long value) - { - return TimeSpan(TicksPerMillisecond * value); - } - - /** - * Construct a TimeSpan from the given number of seconds - * - * Params: value = The number of seconds. - * Returns: A TimeSpan representing the given number of seconds. - */ - static TimeSpan seconds(long value) - { - return TimeSpan(TicksPerSecond * value); - } - - /** - * Construct a TimeSpan from the given number of minutes - * - * Params: value = The number of minutes. - * Returns: A TimeSpan representing the given number of minutes. - */ - static TimeSpan minutes(long value) - { - return TimeSpan(TicksPerMinute * value); - } - - /** - * Construct a TimeSpan from the given number of hours - * - * Params: value = The number of hours. - * Returns: A TimeSpan representing the given number of hours. - */ - static TimeSpan hours(long value) - { - return TimeSpan(TicksPerHour * value); - } - - /** - * Construct a TimeSpan from the given number of days - * - * Params: value = The number of days. - * Returns: A TimeSpan representing the given number of days. - */ - static TimeSpan days(long value) - { - return TimeSpan(TicksPerDay * value); - } - - /** - * Construct a TimeSpan from the given interval. The interval - * represents seconds as a double. This allows both whole and - * fractional seconds to be passed in. - * - * Params: value = The interval to convert in seconds. - * Returns: A TimeSpan representing the given interval. - */ - static TimeSpan interval(double sec) - { - return TimeSpan(cast(long)(sec * TicksPerSecond + .1)); - } -} - - -/****************************************************************************** - - Represents a point in time. - - Remarks: Time represents dates and times between 12:00:00 - midnight on January 1, 10000 BC and 11:59:59 PM on December 31, - 9999 AD. - - Time values are measured in 100-nanosecond intervals, or ticks. - A date value is the number of ticks that have elapsed since - 12:00:00 midnight on January 1, 0001 AD in the Gregorian - calendar. - - Negative Time values are offsets from that same reference point, - but backwards in history. Time values are not specific to any - calendar, but for an example, the beginning of December 31, 1 BC - in the Gregorian calendar is Time.epoch - TimeSpan.days(1). - -******************************************************************************/ - -struct Time -{ - private long ticks_; - - private enum : long - { - maximum = (TimeSpan.DaysPer400Years * 25 - 366) * TimeSpan.TicksPerDay - 1, - minimum = -((TimeSpan.DaysPer400Years * 25 - 366) * TimeSpan.TicksPerDay - 1), - } - - /// Represents the smallest and largest Time value. - static const Time min = {minimum}, - max = {maximum}, - epoch = {0}, - epoch1601 = {TimeSpan.Epoch1601}, - epoch1970 = {TimeSpan.Epoch1970}; - - /********************************************************************** - - $(I Property.) Retrieves the number of ticks for this Time - - Returns: A long represented by the time of this - instance. - - **********************************************************************/ - - long ticks () - { - return ticks_; - } - - /********************************************************************** - - Determines whether two Time values are equal. - - Params: value = A Time _value. - Returns: true if both instances are equal; otherwise, false - - **********************************************************************/ - - int opEquals (Time t) - { - return ticks_ is t.ticks_; - } - - /********************************************************************** - - Compares two Time values. - - **********************************************************************/ - - int opCmp (Time t) - { - if (ticks_ < t.ticks_) - return -1; - - if (ticks_ > t.ticks_) - return 1; - - return 0; - } - - /********************************************************************** - - Adds the specified time span to the time, returning a new - time. - - Params: t = A TimeSpan value. - Returns: A Time that is the sum of this instance and t. - - **********************************************************************/ - - Time opAdd (TimeSpan t) - { - return Time (ticks_ + t.ticks_); - } - - /********************************************************************** - - Adds the specified time span to the time, assigning - the result to this instance. - - Params: t = A TimeSpan value. - Returns: The current Time instance, with t added to the - time. - - **********************************************************************/ - - Time opAddAssign (TimeSpan t) - { - ticks_ += t.ticks_; - return *this; - } - - /********************************************************************** - - Subtracts the specified time span from the time, - returning a new time. - - Params: t = A TimeSpan value. - Returns: A Time whose value is the value of this instance - minus the value of t. - - **********************************************************************/ - - Time opSub (TimeSpan t) - { - return Time (ticks_ - t.ticks_); - } - - /********************************************************************** - - Returns a time span which represents the difference in time - between this and the given Time. - - Params: t = A Time value. - Returns: A TimeSpan which represents the difference between - this and t. - - **********************************************************************/ - - TimeSpan opSub (Time t) - { - return TimeSpan(ticks_ - t.ticks_); - } - - /********************************************************************** - - Subtracts the specified time span from the time, - assigning the result to this instance. - - Params: t = A TimeSpan value. - Returns: The current Time instance, with t subtracted - from the time. - - **********************************************************************/ - - Time opSubAssign (TimeSpan t) - { - ticks_ -= t.ticks_; - return *this; - } - - /********************************************************************** - - $(I Property.) Retrieves the date component. - - Returns: A new Time instance with the same date as - this instance, but with the time trucated. - - **********************************************************************/ - - Time date () - { - return *this - TimeOfDay.modulo24(ticks_); - } - - /********************************************************************** - - $(I Property.) Retrieves the time of day. - - Returns: A TimeOfDay representing the fraction of the day - elapsed since midnight. - - **********************************************************************/ - - TimeOfDay time () - { - return TimeOfDay (ticks_); - } - - /********************************************************************** - - $(I Property.) Retrieves the equivalent TimeSpan. - - Returns: A TimeSpan representing this Time. - - **********************************************************************/ - - TimeSpan span () - { - return TimeSpan (ticks_); - } -} - - -/****************************************************************************** - - Represents a time of day. This is different from TimeSpan in that - each component is represented within the limits of everyday time, - rather than from the start of the Epoch. Effectively, the TimeOfDay - epoch is the first second of each day. - - This is handy for dealing strictly with a 24-hour clock instead of - potentially thousands of years. For example: - --- - auto time = Clock.now.time; - assert (time.millis < 1000); - assert (time.seconds < 60); - assert (time.minutes < 60); - assert (time.hours < 24); - --- - - You can create a TimeOfDay from an existing Time or TimeSpan instance - via the respective time() method. To convert back to a TimeSpan, use - the span() method - -******************************************************************************/ - -struct TimeOfDay -{ - public uint hours, - minutes, - seconds, - millis; - - /** - * constructor. - * Params: hours = number of hours since midnight - * minutes = number of minutes into the hour - * seconds = number of seconds into the minute - * millis = number of milliseconds into the second - * - * Returns: a TimeOfDay representing the given time fields. - */ - static TimeOfDay opCall (uint hours, uint minutes, uint seconds, uint millis=0) - { - TimeOfDay t = void; - t.hours = hours; - t.minutes = minutes; - t.seconds = seconds; - t.millis = millis; - return t; - } - - /** - * constructor. - * Params: ticks = ticks representing a Time value. This is normalized - * so that it represent a time of day (modulo-24 etc) - * - * Returns: a TimeOfDay value that corresponds to the time of day of - * the given number of ticks. - */ - static TimeOfDay opCall (long ticks) - { - TimeOfDay t = void; - ticks = modulo24(ticks).ticks_; - t.millis = cast(uint) (ticks / TimeSpan.TicksPerMillisecond); - t.seconds = (t.millis / 1_000) % 60; - t.minutes = (t.millis / 60_000) % 60; - t.hours = (t.millis / 3_600_000) % 24; - t.millis %= 1000; - return t; - } - - /** - * construct a TimeSpan from the current fields - * - * Returns: a TimeOfDay representing the field values. - * - * Note: that fields are not checked against a valid range, so - * setting 60 for minutes is allowed, and will just add 1 to the hour - * component, and set the minute component to 0. The result is - * normalized, so the hours wrap. If you pass in 25 hours, the - * resulting TimeOfDay will have a hour component of 1. - */ - TimeSpan span () - { - return TimeSpan.hours(hours) + - TimeSpan.minutes(minutes) + - TimeSpan.seconds(seconds) + - TimeSpan.millis(millis); - } - - /** - * internal routine to adjust ticks by one day. Also adjusts for - * offsets in the BC era - */ - package static TimeSpan modulo24 (long ticks) - { - ticks %= TimeSpan.TicksPerDay; - if (ticks < 0) - ticks += TimeSpan.TicksPerDay; - return TimeSpan (ticks); - } -} - -/****************************************************************************** - - Generic Date representation - -******************************************************************************/ - -struct Date -{ - public uint era, /// AD, BC - day, /// 1 .. 31 - year, /// 0 to 9999 - month, /// 1 .. 12 - dow, /// 0 .. 6 - doy; /// 1 .. 366 -} - - -/****************************************************************************** - - Combination of a Date and a TimeOfDay - -******************************************************************************/ - -struct DateTime -{ - public Date date; /// date representation - public TimeOfDay time; /// time representation -} - - - - -/****************************************************************************** - -******************************************************************************/ - -debug (UnitTest) -{ - unittest - { - assert(TimeSpan.zero > TimeSpan.min); - assert(TimeSpan.max > TimeSpan.zero); - assert(TimeSpan.max > TimeSpan.min); - assert(TimeSpan.zero >= TimeSpan.zero); - assert(TimeSpan.zero <= TimeSpan.zero); - assert(TimeSpan.max >= TimeSpan.max); - assert(TimeSpan.max <= TimeSpan.max); - assert(TimeSpan.min >= TimeSpan.min); - assert(TimeSpan.min <= TimeSpan.min); - - assert (TimeSpan.seconds(50).seconds is 50); - assert (TimeSpan.seconds(5000).seconds is 5000); - assert (TimeSpan.minutes(50).minutes is 50); - assert (TimeSpan.minutes(5000).minutes is 5000); - assert (TimeSpan.hours(23).hours is 23); - assert (TimeSpan.hours(5000).hours is 5000); - assert (TimeSpan.days(6).days is 6); - assert (TimeSpan.days(5000).days is 5000); - - assert (TimeSpan.seconds(50).time.seconds is 50); - assert (TimeSpan.seconds(5000).time.seconds is 5000 % 60); - assert (TimeSpan.minutes(50).time.minutes is 50); - assert (TimeSpan.minutes(5000).time.minutes is 5000 % 60); - assert (TimeSpan.hours(23).time.hours is 23); - assert (TimeSpan.hours(5000).time.hours is 5000 % 24); - - auto tod = TimeOfDay (25, 2, 3, 4); - tod = tod.span.time; - assert (tod.hours is 1); - assert (tod.minutes is 2); - assert (tod.seconds is 3); - assert (tod.millis is 4); - } -} - - -/******************************************************************************* - -*******************************************************************************/ - -debug (Time) -{ - import tango.io.Stdout; - import tango.time.Clock; - import tango.time.chrono.Gregorian; - - Time foo() - { - auto d = Time(10); - auto e = TimeSpan(20); - - return d + e; - } - - void main() - { - auto c = foo(); - Stdout (c.ticks).newline; - - - auto t = TimeSpan(1); - auto h = t.hours; - auto m = t.time.minutes; - - auto now = Clock.now; - auto time = now.time; - auto date = Gregorian.generic.toDate (now); - now = Gregorian.generic.toTime (date, time); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/WallClock.d --- a/tango/tango/time/WallClock.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Apr 2007: split away from utc - - author: Kris - -*******************************************************************************/ - -module tango.time.WallClock; - -public import tango.time.Time; - -private import tango.time.Clock; - -private import tango.sys.Common; - -/****************************************************************************** - - Exposes wall-time relative to Jan 1st, 1 AD. These values are - based upon a clock-tick of 100ns, giving them a span of greater - than 10,000 years. These Units of time are the foundation of most - time and date functionality in Tango. - - Please note that conversion between UTC and Wall time is performed - in accordance with the OS facilities. In particular, Win32 systems - behave differently to Posix when calculating daylight-savings time - (Win32 calculates with respect to the time of the call, whereas a - Posix system calculates based on a provided point in time). Posix - systems should typically have the TZ environment variable set to - a valid descriptor. - -*******************************************************************************/ - -struct WallClock -{ - version (Win32) - { - /*************************************************************** - - Return the current local time - - ***************************************************************/ - - static Time now () - { - return Clock.now - localBias; - } - - /*************************************************************** - - Return the timezone relative to GMT. The value is - negative when west of GMT - - ***************************************************************/ - - static TimeSpan zone () - { - TIME_ZONE_INFORMATION tz = void; - - auto tmp = GetTimeZoneInformation (&tz); - return TimeSpan.minutes(-tz.Bias); - } - - /*************************************************************** - - Set fields to represent a local version of the - current UTC time. All values must fall within - the domain supported by the OS - - ***************************************************************/ - - static DateTime toDate () - { - return toDate (Clock.now); - } - - /*************************************************************** - - Set fields to represent a local version of the - provided UTC time. All values must fall within - the domain supported by the OS - - ***************************************************************/ - - static DateTime toDate (Time utc) - { - return Clock.toDate (utc - localBias); - } - - /*************************************************************** - - Convert Date fields to local time - - ***************************************************************/ - - static Time fromDate (inout DateTime date) - { - return (Clock.fromDate(date) + localBias); - } - - /*************************************************************** - - Retrieve the local bias, including DST adjustment. - Note that Win32 calculates DST at the time of call - rather than based upon a point in time represented - by an argument. - - ***************************************************************/ - - private static TimeSpan localBias () - { - int bias; - TIME_ZONE_INFORMATION tz = void; - - switch (GetTimeZoneInformation (&tz)) - { - default: - bias = tz.Bias; - break; - case 1: - bias = tz.Bias + tz.StandardBias; - break; - case 2: - bias = tz.Bias + tz.DaylightBias; - break; - } - - return TimeSpan.minutes(bias); - } - } - - version (Posix) - { - /*************************************************************** - - Return the current local time - - ***************************************************************/ - - static Time now () - { - tm t = void; - timeval tv = void; - gettimeofday (&tv, null); - localtime_r (&tv.tv_sec, &t); - tv.tv_sec = timegm (&t); - return Clock.convert (tv); - } - - /*************************************************************** - - Return the timezone relative to GMT. The value is - negative when west of GMT - - ***************************************************************/ - - static TimeSpan zone () - { - version (darwin) - { - timezone_t tz = void; - gettimeofday (null, &tz); - return TimeSpan.minutes(-tz.tz_minuteswest); - } - else - return TimeSpan.seconds(-timezone); - } - - /*************************************************************** - - Set fields to represent a local version of the - current UTC time. All values must fall within - the domain supported by the OS - - ***************************************************************/ - - static DateTime toDate () - { - return toDate (Clock.now); - } - - /*************************************************************** - - Set fields to represent a local version of the - provided UTC time. All values must fall within - the domain supported by the OS - - ***************************************************************/ - - static DateTime toDate (Time utc) - { - DateTime dt = void; - auto timeval = Clock.convert (utc); - dt.time.millis = timeval.tv_usec / 1000; - - tm t = void; - localtime_r (&timeval.tv_sec, &t); - - dt.date.year = t.tm_year + 1900; - dt.date.month = t.tm_mon + 1; - dt.date.day = t.tm_mday; - dt.date.dow = t.tm_wday; - dt.date.doy = 0; - dt.date.era = 0; - dt.time.hours = t.tm_hour; - dt.time.minutes = t.tm_min; - dt.time.seconds = t.tm_sec; - return dt; - } - - /*************************************************************** - - Convert Date fields to local time - - ***************************************************************/ - - static Time fromDate (inout DateTime dt) - { - tm t = void; - - t.tm_year = dt.date.year - 1900; - t.tm_mon = dt.date.month - 1; - t.tm_mday = dt.date.day; - t.tm_hour = dt.time.hours; - t.tm_min = dt.time.minutes; - t.tm_sec = dt.time.seconds; - - auto seconds = mktime (&t); - return Time.epoch1970 + TimeSpan.seconds(seconds) - + TimeSpan.millis(dt.time.millis); - } - } - - /*********************************************************************** - - ***********************************************************************/ - - static Time toLocal (Time utc) - { - auto mod = utc.ticks % TimeSpan.TicksPerMillisecond; - return Clock.fromDate(toDate(utc)) + TimeSpan(mod); - } - - /*********************************************************************** - - ***********************************************************************/ - - static Time toUtc (Time wall) - { - auto mod = wall.ticks % TimeSpan.TicksPerMillisecond; - return fromDate(Clock.toDate(wall)) + TimeSpan(mod); - } -} - - -version (Posix) -{ - version (darwin) {} - else - { - static this() - { - tzset(); - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Calendar.d --- a/tango/tango/time/chrono/Calendar.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.Calendar; - -public import tango.time.Time; - -private import tango.core.Exception; - - - -/** - * $(ANCHOR _Calendar) - * Represents time in week, month and year divisions. - * Remarks: Calendar is the abstract base class for the following Calendar implementations: - * $(LINK2 #Gregorian, Gregorian), $(LINK2 #Hebrew, Hebrew), $(LINK2 #Hijri, Hijri), - * $(LINK2 #Japanese, Japanese), $(LINK2 #Korean, Korean), $(LINK2 #Taiwan, Taiwan) and - * $(LINK2 #ThaiBuddhist, ThaiBuddhist). - */ -public abstract class Calendar -{ - /** - * Indicates the current era of the calendar. - */ - package enum {CURRENT_ERA = 0}; - - // Corresponds to Win32 calendar IDs - package enum - { - GREGORIAN = 1, - GREGORIAN_US = 2, - JAPAN = 3, - TAIWAN = 4, - KOREA = 5, - HIJRI = 6, - THAI = 7, - HEBREW = 8, - GREGORIAN_ME_FRENCH = 9, - GREGORIAN_ARABIC = 10, - GREGORIAN_XLIT_ENGLISH = 11, - GREGORIAN_XLIT_FRENCH = 12 - } - - package enum WeekRule - { - FirstDay, /// Indicates that the first week of the year is the first week containing the first day of the year. - FirstFullWeek, /// Indicates that the first week of the year is the first full week following the first day of the year. - FirstFourDayWeek /// Indicates that the first week of the year is the first week containing at least four days. - } - - package enum DatePart - { - Year, - Month, - Day, - DayOfYear - } - - public enum DayOfWeek - { - Sunday, /// Indicates _Sunday. - Monday, /// Indicates _Monday. - Tuesday, /// Indicates _Tuesday. - Wednesday, /// Indicates _Wednesday. - Thursday, /// Indicates _Thursday. - Friday, /// Indicates _Friday. - Saturday /// Indicates _Saturday. - } - - - /** - * Get the components of a Time structure using the rules of the - * calendar. This is useful if you want more than one of the given - * components. Note that this doesn't handle the time of day, as that - * is calculated directly from the Time struct. - * - * The default implemenation is to call all the other accessors - * directly, a derived class may override if it has a more efficient - * method. - */ - Date toDate (Time time) - { - Date d; - split (time, d.year, d.month, d.day, d.doy, d.dow, d.era); - return d; - } - - /** - * Get the components of a Time structure using the rules of the - * calendar. This is useful if you want more than one of the given - * components. Note that this doesn't handle the time of day, as that - * is calculated directly from the Time struct. - * - * The default implemenation is to call all the other accessors - * directly, a derived class may override if it has a more efficient - * method. - */ - void split (Time time, ref uint year, ref uint month, ref uint day, ref uint doy, ref uint dow, ref uint era) - { - year = getYear(time); - month = getMonth(time); - day = getDayOfMonth(time); - doy = getDayOfYear(time); - dow = getDayOfWeek(time); - era = getEra(time); - } - - /** - * Returns a Time value set to the specified date and time in the current era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * day = An integer representing the _day. - * hour = An integer representing the _hour. - * minute = An integer representing the _minute. - * second = An integer representing the _second. - * millisecond = An integer representing the _millisecond. - * Returns: The Time set to the specified date and time. - */ - Time toTime (uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond=0) - { - return toTime (year, month, day, hour, minute, second, millisecond, CURRENT_ERA); - } - - Time toTime (Date d) - { - return toTime (d.year, d.month, d.day, 0, 0, 0, 0, d.era); - } - - Time toTime (DateTime dt) - { - return toTime (dt.date, dt.time); - } - - Time toTime (Date d, TimeOfDay t) - { - return toTime (d.year, d.month, d.day, t.hours, t.minutes, t.seconds, t.millis, d.era); - } - - /** - * When overridden, returns a Time value set to the specified date and time in the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * day = An integer representing the _day. - * hour = An integer representing the _hour. - * minute = An integer representing the _minute. - * second = An integer representing the _second. - * millisecond = An integer representing the _millisecond. - * era = An integer representing the _era. - * Returns: A Time set to the specified date and time. - */ - abstract Time toTime (uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond, uint era); - - /** - * When overridden, returns the day of the week in the specified Time. - * Params: time = A Time value. - * Returns: A DayOfWeek value representing the day of the week of time. - */ - abstract DayOfWeek getDayOfWeek (Time time); - - /** - * When overridden, returns the day of the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the month of time. - */ - abstract uint getDayOfMonth (Time time); - - /** - * When overridden, returns the day of the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the year of time. - */ - abstract uint getDayOfYear (Time time); - - /** - * When overridden, returns the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the month in time. - */ - abstract uint getMonth (Time time); - - /** - * When overridden, returns the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the year in time. - */ - abstract uint getYear (Time time); - - /** - * When overridden, returns the era in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the ear in time. - */ - abstract uint getEra (Time time); - - /** - * Returns the number of days in the specified _year and _month of the current era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * Returns: The number of days in the specified _year and _month of the current era. - */ - uint getDaysInMonth (uint year, uint month) - { - return getDaysInMonth (year, month, CURRENT_ERA); - } - - /** - * When overridden, returns the number of days in the specified _year and _month of the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year and _month of the specified _era. - */ - abstract uint getDaysInMonth (uint year, uint month, uint era); - - /** - * Returns the number of days in the specified _year of the current era. - * Params: year = An integer representing the _year. - * Returns: The number of days in the specified _year in the current era. - */ - uint getDaysInYear (uint year) - { - return getDaysInYear (year, CURRENT_ERA); - } - - /** - * When overridden, returns the number of days in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year in the specified _era. - */ - abstract uint getDaysInYear (uint year, uint era); - - /** - * Returns the number of months in the specified _year of the current era. - * Params: year = An integer representing the _year. - * Returns: The number of months in the specified _year in the current era. - */ - uint getMonthsInYear (uint year) - { - return getMonthsInYear (year, CURRENT_ERA); - } - - /** - * When overridden, returns the number of months in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of months in the specified _year in the specified _era. - */ - abstract uint getMonthsInYear (uint year, uint era); - - /** - * Returns the week of the year that includes the specified Time. - * Params: - * time = A Time value. - * rule = A WeekRule value defining a calendar week. - * firstDayOfWeek = A DayOfWeek value representing the first day of the week. - * Returns: An integer representing the week of the year that includes the date in time. - */ - uint getWeekOfYear (Time time, WeekRule rule, DayOfWeek firstDayOfWeek) - { - auto year = getYear (time); - auto jan1 = cast(int) getDayOfWeek (toTime (year, 1, 1, 0, 0, 0, 0)); - - switch (rule) - { - case WeekRule.FirstDay: - int n = jan1 - cast(int) firstDayOfWeek; - if (n < 0) - n += 7; - return (getDayOfYear (time) + n - 1) / 7 + 1; - - case WeekRule.FirstFullWeek: - case WeekRule.FirstFourDayWeek: - int fullDays = (rule is WeekRule.FirstFullWeek) ? 7 : 4; - int n = cast(int) firstDayOfWeek - jan1; - if (n != 0) - { - if (n < 0) - n += 7; - else - if (n >= fullDays) - n -= 7; - } - - int day = getDayOfYear (time) - n; - if (day > 0) - return (day - 1) / 7 + 1; - year = getYear(time) - 1; - int month = getMonthsInYear (year); - day = getDaysInMonth (year, month); - return getWeekOfYear(toTime(year, month, day, 0, 0, 0, 0), rule, firstDayOfWeek); - - default: - break; - } - throw new IllegalArgumentException("Value was out of range."); - } - - /** - * Indicates whether the specified _year in the current era is a leap _year. - * Params: year = An integer representing the _year. - * Returns: true is the specified _year is a leap _year; otherwise, false. - */ - bool isLeapYear(uint year) - { - return isLeapYear(year, CURRENT_ERA); - } - - /** - * When overridden, indicates whether the specified _year in the specified _era is a leap _year. - * Params: year = An integer representing the _year. - * Params: era = An integer representing the _era. - * Returns: true is the specified _year is a leap _year; otherwise, false. - */ - abstract bool isLeapYear(uint year, uint era); - - /** - * $(I Property.) When overridden, retrieves the list of eras in the current calendar. - * Returns: An integer array representing the eras in the current calendar. - */ - abstract uint[] eras(); - - /** - * $(I Property.) Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - uint id() - { - return -1; - } - - package static long getTimeTicks (uint hour, uint minute, uint second) - { - return (TimeSpan.hours(hour) + TimeSpan.minutes(minute) + TimeSpan.seconds(second)).ticks; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Gregorian.d --- a/tango/tango/time/chrono/Gregorian.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,414 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris, schveiguy - -******************************************************************************/ - -module tango.time.chrono.Gregorian; - -private import tango.time.chrono.Calendar; - -/** - * $(ANCHOR _Gregorian) - * Represents the Gregorian calendar. - * - * Note that this is the Proleptic Gregorian calendar. Most calendars assume - * that dates before 9/14/1752 were Julian Dates. Julian differs from - * Gregorian in that leap years occur every 4 years, even on 100 year - * increments. The Proleptic Gregorian calendar applies the Gregorian leap - * year rules to dates before 9/14/1752, making the calculation of dates much - * easier. - */ -class Gregorian : Calendar -{ - // import baseclass toTime() - alias Calendar.toTime toTime; - - /// static shared instance - public static Gregorian generic; - - enum Type - { - Localized = 1, /// Refers to the localized version of the Gregorian calendar. - USEnglish = 2, /// Refers to the US English version of the Gregorian calendar. - MiddleEastFrench = 9, /// Refers to the Middle East French version of the Gregorian calendar. - Arabic = 10, /// Refers to the _Arabic version of the Gregorian calendar. - TransliteratedEnglish = 11, /// Refers to the transliterated English version of the Gregorian calendar. - TransliteratedFrench = 12 /// Refers to the transliterated French version of the Gregorian calendar. - } - - private Type type_; - - /** - * Represents the current era. - */ - enum {AD_ERA = 1, BC_ERA = 2, MAX_YEAR = 9999}; - - private static final uint[] DaysToMonthCommon = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365]; - - private static final uint[] DaysToMonthLeap = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366]; - - /** - * create a generic instance of this calendar - */ - static this() - { - generic = new Gregorian; - } - - /** - * Initializes an instance of the Gregorian class using the specified GregorianTypes value. If no value is - * specified, the default is Gregorian.Types.Localized. - */ - this (Type type = Type.Localized) - { - type_ = type; - } - - /** - * Overridden. Returns a Time value set to the specified date and time in the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * day = An integer representing the _day. - * hour = An integer representing the _hour. - * minute = An integer representing the _minute. - * second = An integer representing the _second. - * millisecond = An integer representing the _millisecond. - * era = An integer representing the _era. - * Returns: A Time set to the specified date and time. - */ - override Time toTime (uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond, uint era) - { - return Time (getDateTicks(year, month, day, era) + getTimeTicks(hour, minute, second)) + TimeSpan.millis(millisecond); - } - - /** - * Overridden. Returns the day of the week in the specified Time. - * Params: time = A Time value. - * Returns: A DayOfWeek value representing the day of the week of time. - */ - override DayOfWeek getDayOfWeek(Time time) - { - int dow; - if(time.ticks < 0) - { - dow = ((time.ticks + 1) / TimeSpan.TicksPerDay) % 7; - if(dow < 0) - dow += 7; - } - else - dow = (time.ticks / TimeSpan.TicksPerDay + 1) % 7; - return cast(DayOfWeek)dow; - } - - /** - * Overridden. Returns the day of the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the month of time. - */ - override uint getDayOfMonth(Time time) - { - return extractPart(time.ticks, DatePart.Day); - } - - /** - * Overridden. Returns the day of the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the year of time. - */ - override uint getDayOfYear(Time time) - { - return extractPart(time.ticks, DatePart.DayOfYear); - } - - /** - * Overridden. Returns the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the month in time. - */ - override uint getMonth(Time time) - { - return extractPart(time.ticks, DatePart.Month); - } - - /** - * Overridden. Returns the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the year in time. - */ - override uint getYear(Time time) - { - return extractPart(time.ticks, DatePart.Year); - } - - /** - * Overridden. Returns the era in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the era in time. - */ - override uint getEra(Time time) - { - if(time < time.epoch) - return BC_ERA; - else - return AD_ERA; - } - - /** - * Overridden. Returns the number of days in the specified _year and _month of the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year and _month of the specified _era. - */ - override uint getDaysInMonth(uint year, uint month, uint era) - { - auto monthDays = isLeapYear(year, era) ? DaysToMonthLeap : DaysToMonthCommon; - return monthDays[month] - monthDays[month - 1]; - } - - /** - * Overridden. Returns the number of days in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year in the specified _era. - */ - override uint getDaysInYear(uint year, uint era) - { - return isLeapYear(year, era) ? 366 : 365; - } - - /** - * Overridden. Returns the number of months in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of months in the specified _year in the specified _era. - */ - override uint getMonthsInYear(uint year, uint era) - { - return 12; - } - - /** - * Overridden. Indicates whether the specified _year in the specified _era is a leap _year. - * Params: year = An integer representing the _year. - * Params: era = An integer representing the _era. - * Returns: true is the specified _year is a leap _year; otherwise, false. - */ - override bool isLeapYear(uint year, uint era) - { - return staticIsLeapYear(year, era); - } - - /** - * $(I Property.) Retrieves the GregorianTypes value indicating the language version of the Gregorian. - * Returns: The Gregorian.Type value indicating the language version of the Gregorian. - */ - Type calendarType() - { - return type_; - } - - /** - * $(I Property.) Overridden. Retrieves the list of eras in the current calendar. - * Returns: An integer array representing the eras in the current calendar. - */ - override uint[] eras() - { - uint[] tmp = [AD_ERA, BC_ERA]; - return tmp.dup; - } - - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - override uint id() - { - return cast(int) type_; - } - - override void split(Time time, ref uint year, ref uint month, ref uint day, ref uint doy, ref uint dow, ref uint era) - { - splitDate(time.ticks, year, month, day, doy, era); - dow = getDayOfWeek(time); - } - - package static void splitDate (long ticks, ref uint year, ref uint month, ref uint day, ref uint dayOfYear, ref uint era) - { - int numDays; - - void calculateYear() - { - auto whole400Years = numDays / cast(int) TimeSpan.DaysPer400Years; - numDays -= whole400Years * cast(int) TimeSpan.DaysPer400Years; - auto whole100Years = numDays / cast(int) TimeSpan.DaysPer100Years; - if (whole100Years == 4) - whole100Years = 3; - - numDays -= whole100Years * cast(int) TimeSpan.DaysPer100Years; - auto whole4Years = numDays / cast(int) TimeSpan.DaysPer4Years; - numDays -= whole4Years * cast(int) TimeSpan.DaysPer4Years; - auto wholeYears = numDays / cast(int) TimeSpan.DaysPerYear; - if (wholeYears == 4) - wholeYears = 3; - - year = whole400Years * 400 + whole100Years * 100 + whole4Years * 4 + wholeYears + era; - numDays -= wholeYears * TimeSpan.DaysPerYear; - } - - if(ticks < 0) - { - // in the BC era - era = BC_ERA; - // - // set up numDays to be like AD. AD days start at - // year 1. However, in BC, year 1 is like AD year 0, - // so we must subtract one year. - // - numDays = cast(int)((-ticks - 1) / TimeSpan.TicksPerDay); - if(numDays < 366) - { - // in the year 1 B.C. This is a special case - // leap year - year = 1; - } - else - { - numDays -= 366; - calculateYear; - } - // - // numDays is the number of days back from the end of - // the year, because the original ticks were negative - // - numDays = (staticIsLeapYear(year, era) ? 366 : 365) - numDays - 1; - } - else - { - era = AD_ERA; - numDays = cast(int)(ticks / TimeSpan.TicksPerDay); - calculateYear; - } - dayOfYear = numDays + 1; - - auto monthDays = staticIsLeapYear(year, era) ? DaysToMonthLeap : DaysToMonthCommon; - month = numDays >> 5 + 1; - while (numDays >= monthDays[month]) - month++; - - day = numDays - monthDays[month - 1] + 1; - } - - package static uint extractPart (long ticks, DatePart part) - { - uint year, month, day, dayOfYear, era; - - splitDate(ticks, year, month, day, dayOfYear, era); - - if (part is DatePart.Year) - return year; - - if (part is DatePart.Month) - return month; - - if (part is DatePart.DayOfYear) - return dayOfYear; - - return day; - } - - package static long getDateTicks (uint year, uint month, uint day, uint era) - { - auto monthDays = staticIsLeapYear(year, era) ? DaysToMonthLeap : DaysToMonthCommon; - if(era == BC_ERA) - { - year += 2; - return -cast(long)( (year - 3) * 365 + year / 4 - year / 100 + year / 400 + monthDays[12] - (monthDays[month - 1] + day - 1)) * TimeSpan.TicksPerDay; - } - else - { - year--; - return (year * 365 + year / 4 - year / 100 + year / 400 + monthDays[month - 1] + day - 1) * TimeSpan.TicksPerDay; - } - } - - package static bool staticIsLeapYear(uint year, uint era) - { - if(era == BC_ERA) - return staticIsLeapYear(year - 1, AD_ERA); - if(era == AD_ERA) - return (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)); - return false; - } -} - -debug(Gregorian) -{ - import tango.io.Stdout; - - void output(Time t) - { - Date d = Gregorian.generic.toDate(t); - TimeOfDay tod = t.time; - Stdout.format("{}/{}/{:d4} {} {}:{:d2}:{:d2}.{:d3} dow:{}", - d.month, d.day, d.year, d.era == Gregorian.AD_ERA ? "AD" : "BC", - tod.hours, tod.minutes, tod.seconds, tod.millis, d.dow).newline; - } - - void main() - { - Time t = Time(365 * TimeSpan.TicksPerDay); - output(t); - for(int i = 0; i < 366 + 365; i++) - { - t -= TimeSpan.days(1); - output(t); - } - } -} - -debug(UnitTest) -{ - unittest - { - // - // check Gregorian date handles positive time. - // - Time t = Time.epoch + TimeSpan.days(365); - Date d = Gregorian.generic.toDate(t); - assert(d.year == 2); - assert(d.month == 1); - assert(d.day == 1); - assert(d.era == Gregorian.AD_ERA); - assert(d.doy == 1); - // - // note that this is in disagreement with the Julian Calendar - // - assert(d.dow == Gregorian.DayOfWeek.Tuesday); - - // - // check that it handles negative time - // - t = Time.epoch - TimeSpan.days(366); - d = Gregorian.generic.toDate(t); - assert(d.year == 1); - assert(d.month == 1); - assert(d.day == 1); - assert(d.era == Gregorian.BC_ERA); - assert(d.doy == 1); - assert(d.dow == Gregorian.DayOfWeek.Saturday); - - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/GregorianBased.d --- a/tango/tango/time/chrono/GregorianBased.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.GregorianBased; - -private import tango.core.Exception; - -private import tango.time.Time; - -private import tango.time.chrono.Gregorian; - - - -private class GregorianBased : Gregorian { - - private EraRange[] eraRanges_; - private int maxYear_, minYear_; - private int currentEra_ = -1; - - this() - { - eraRanges_ = EraRange.getEraRanges(id); - maxYear_ = eraRanges_[0].maxEraYear; - minYear_ = eraRanges_[0].minEraYear; - } - - public override Time toTime(uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond, uint era) { - year = getGregorianYear(year, era); - return super.toTime(year, month, day, hour, minute, second, millisecond, era); - } - public override uint getYear(Time time) { - auto ticks = time.ticks; - auto year = extractPart(time.ticks, DatePart.Year); - foreach (EraRange eraRange; eraRanges_) { - if (ticks >= eraRange.ticks) - return year - eraRange.yearOffset; - } - throw new IllegalArgumentException("Value was out of range."); - } - - public override uint getEra(Time time) { - auto ticks = time.ticks; - foreach (EraRange eraRange; eraRanges_) { - if (ticks >= eraRange.ticks) - return eraRange.era; - } - throw new IllegalArgumentException("Value was out of range."); - } - - public override uint[] eras() { - uint[] result; - foreach (EraRange eraRange; eraRanges_) - result ~= eraRange.era; - return result; - } - - private uint getGregorianYear(uint year, uint era) { - if (era == 0) - era = currentEra; - foreach (EraRange eraRange; eraRanges_) { - if (era == eraRange.era) { - if (year >= eraRange.minEraYear && year <= eraRange.maxEraYear) - return eraRange.yearOffset + year; - throw new IllegalArgumentException("Value was out of range."); - } - } - throw new IllegalArgumentException("Era value was not valid."); - } - - protected uint currentEra() { - if (currentEra_ == -1) - currentEra_ = EraRange.getCurrentEra(id); - return currentEra_; - } -} - - - -package struct EraRange { - - private static EraRange[][uint] eraRanges; - private static uint[uint] currentEras; - private static bool initialized_; - - package uint era; - package long ticks; - package uint yearOffset; - package uint minEraYear; - package uint maxEraYear; - - private static void initialize() { - if (!initialized_) { - long getTicks(uint year, uint month, uint day) - { - return Gregorian.generic.getDateTicks(year, month, day, Gregorian.AD_ERA); - } - eraRanges[Gregorian.JAPAN] ~= EraRange(4, getTicks(1989, 1, 8), 1988, 1, Gregorian.MAX_YEAR); - eraRanges[Gregorian.JAPAN] ~= EraRange(3, getTicks(1926, 12, 25), 1925, 1, 1989); - eraRanges[Gregorian.JAPAN] ~= EraRange(2, getTicks(1912, 7, 30), 1911, 1, 1926); - eraRanges[Gregorian.JAPAN] ~= EraRange(1, getTicks(1868, 9, 8), 1867, 1, 1912); - eraRanges[Gregorian.TAIWAN] ~= EraRange(1, getTicks(1912, 1, 1), 1911, 1, Gregorian.MAX_YEAR); - eraRanges[Gregorian.KOREA] ~= EraRange(1, getTicks(1, 1, 1), -2333, 2334, Gregorian.MAX_YEAR); - eraRanges[Gregorian.THAI] ~= EraRange(1, getTicks(1, 1, 1), -543, 544, Gregorian.MAX_YEAR); - currentEras[Gregorian.JAPAN] = 4; - currentEras[Gregorian.TAIWAN] = 1; - currentEras[Gregorian.KOREA] = 1; - currentEras[Gregorian.THAI] = 1; - initialized_ = true; - } - } - - package static EraRange[] getEraRanges(uint calID) { - if (!initialized_) - initialize(); - return eraRanges[calID]; - } - - package static uint getCurrentEra(uint calID) { - if (!initialized_) - initialize(); - return currentEras[calID]; - } - - private static EraRange opCall(uint era, long ticks, uint yearOffset, uint minEraYear, uint prevEraYear) { - EraRange eraRange; - eraRange.era = era; - eraRange.ticks = ticks; - eraRange.yearOffset = yearOffset; - eraRange.minEraYear = minEraYear; - eraRange.maxEraYear = prevEraYear - yearOffset; - return eraRange; - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Hebrew.d --- a/tango/tango/time/chrono/Hebrew.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,288 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris, snoyberg - -******************************************************************************/ - -module tango.time.chrono.Hebrew; - -private import tango.core.Exception; - -private import tango.time.chrono.Calendar; - - - -/** - * $(ANCHOR _Hebrew) - * Represents the Hebrew calendar. - */ -public class Hebrew : Calendar { - - private const uint[14][7] MonthDays = [ - // month // year type - [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ], - [ 0, 30, 29, 29, 29, 30, 29, 0, 30, 29, 30, 29, 30, 29 ], // 1 - [ 0, 30, 29, 30, 29, 30, 29, 0, 30, 29, 30, 29, 30, 29 ], // 2 - [ 0, 30, 30, 30, 29, 30, 29, 0, 30, 29, 30, 29, 30, 29 ], // 3 - [ 0, 30, 29, 29, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29 ], // 4 - [ 0, 30, 29, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29 ], // 5 - [ 0, 30, 30, 30, 29, 30, 30, 29, 30, 29, 30, 29, 30, 29 ] // 6 - ]; - - private const uint YearOfOneAD = 3760; - private const uint DaysToOneAD = cast(int)(YearOfOneAD * 365.2735); - - private const uint PartsPerHour = 1080; - private const uint PartsPerDay = 24 * PartsPerHour; - private const uint DaysPerMonth = 29; - private const uint DaysPerMonthFraction = 12 * PartsPerHour + 793; - private const uint PartsPerMonth = DaysPerMonth * PartsPerDay + DaysPerMonthFraction; - private const uint FirstNewMoon = 11 * PartsPerHour + 204; - - private uint minYear_ = YearOfOneAD + 1583; - private uint maxYear_ = YearOfOneAD + 2240; - - /** - * Represents the current era. - */ - public const uint HEBREW_ERA = 1; - - /** - * Overridden. Returns a Time value set to the specified date and time in the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * day = An integer representing the _day. - * hour = An integer representing the _hour. - * minute = An integer representing the _minute. - * second = An integer representing the _second. - * millisecond = An integer representing the _millisecond. - * era = An integer representing the _era. - * Returns: A Time set to the specified date and time. - */ - public override Time toTime(uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond, uint era) { - checkYear(year, era); - return getGregorianTime(year, month, day, hour, minute, second, millisecond); - } - - /** - * Overridden. Returns the day of the week in the specified Time. - * Params: time = A Time value. - * Returns: A DayOfWeek value representing the day of the week of time. - */ - public override DayOfWeek getDayOfWeek(Time time) { - return cast(DayOfWeek) cast(uint) ((time.ticks / TimeSpan.TicksPerDay + 1) % 7); - } - - /** - * Overridden. Returns the day of the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the month of time. - */ - public override uint getDayOfMonth(Time time) { - auto year = getYear(time); - auto yearType = getYearType(year); - auto days = getStartOfYear(year) - DaysToOneAD; - auto day = cast(int)(time.ticks / TimeSpan.TicksPerDay) - days; - uint n; - while (n < 12 && day >= MonthDays[yearType][n + 1]) { - day -= MonthDays[yearType][n + 1]; - n++; - } - return day + 1; - } - - /** - * Overridden. Returns the day of the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the year of time. - */ - public override uint getDayOfYear(Time time) { - auto year = getYear(time); - auto days = getStartOfYear(year) - DaysToOneAD; - return (cast(uint)(time.ticks / TimeSpan.TicksPerDay) - days) + 1; - } - - /** - * Overridden. Returns the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the month in time. - */ - public override uint getMonth(Time time) { - auto year = getYear(time); - auto yearType = getYearType(year); - auto days = getStartOfYear(year) - DaysToOneAD; - auto day = cast(int)(time.ticks / TimeSpan.TicksPerDay) - days; - uint n; - while (n < 12 && day >= MonthDays[yearType][n + 1]) { - day -= MonthDays[yearType][n + 1]; - n++; - } - return n + 1; - } - - /** - * Overridden. Returns the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the year in time. - */ - public override uint getYear(Time time) { - auto day = cast(uint)(time.ticks / TimeSpan.TicksPerDay) + DaysToOneAD; - auto low = minYear_, high = maxYear_; - // Perform a binary search. - while (low <= high) { - auto mid = low + (high - low) / 2; - auto startDay = getStartOfYear(mid); - if (day < startDay) - high = mid - 1; - else if (day >= startDay && day < getStartOfYear(mid + 1)) - return mid; - else - low = mid + 1; - } - return low; - } - - /** - * Overridden. Returns the era in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the ear in time. - */ - public override uint getEra(Time time) { - return HEBREW_ERA; - } - - /** - * Overridden. Returns the number of days in the specified _year and _month of the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year and _month of the specified _era. - */ - public override uint getDaysInMonth(uint year, uint month, uint era) { - checkYear(year, era); - return MonthDays[getYearType(year)][month]; - } - - /** - * Overridden. Returns the number of days in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year in the specified _era. - */ - public override uint getDaysInYear(uint year, uint era) { - return getStartOfYear(year + 1) - getStartOfYear(year); - } - - /** - * Overridden. Returns the number of months in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of months in the specified _year in the specified _era. - */ - public override uint getMonthsInYear(uint year, uint era) { - return isLeapYear(year, era) ? 13 : 12; - } - - /** - * Overridden. Indicates whether the specified _year in the specified _era is a leap _year. - * Params: year = An integer representing the _year. - * Params: era = An integer representing the _era. - * Returns: true is the specified _year is a leap _year; otherwise, false. - */ - public override bool isLeapYear(uint year, uint era) { - checkYear(year, era); - // true if year % 19 == 0, 3, 6, 8, 11, 14, 17 - return ((7 * year + 1) % 19) < 7; - } - - /** - * $(I Property.) Overridden. Retrieves the list of eras in the current calendar. - * Returns: An integer array representing the eras in the current calendar. - */ - public override uint[] eras() { - auto tmp = [HEBREW_ERA]; - return tmp.dup; - } - - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return HEBREW; - } - - private void checkYear(uint year, uint era) { - if ((era != CURRENT_ERA && era != HEBREW_ERA) || (year > maxYear_ || year < minYear_)) - throw new IllegalArgumentException("Value was out of range."); - } - - private uint getYearType(uint year) { - int yearLength = getStartOfYear(year + 1) - getStartOfYear(year); - if (yearLength > 380) - yearLength -= 30; - switch (yearLength) { - case 353: - // "deficient" - return 1; - case 383: - // "deficient" leap - return 4; - case 354: - // "normal" - return 2; - case 384: - // "normal" leap - return 5; - case 355: - // "complete" - return 3; - case 385: - // "complete" leap - return 6; - default: - break; - } - // Satisfies -w - throw new IllegalArgumentException("Value was not valid."); - } - - private uint getStartOfYear(uint year) { - auto months = (235 * year - 234) / 19; - auto fraction = months * DaysPerMonthFraction + FirstNewMoon; - auto day = months * 29 + (fraction / PartsPerDay); - fraction %= PartsPerDay; - - auto dayOfWeek = day % 7; - if (dayOfWeek == 2 || dayOfWeek == 4 || dayOfWeek == 6) { - day++; - dayOfWeek = day % 7; - } - if (dayOfWeek == 1 && fraction > 15 * PartsPerHour + 204 && !isLeapYear(year, CURRENT_ERA)) - day += 2; - else if (dayOfWeek == 0 && fraction > 21 * PartsPerHour + 589 && isLeapYear(year, CURRENT_ERA)) - day++; - return day; - } - - private Time getGregorianTime(uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond) { - auto yearType = getYearType(year); - auto days = getStartOfYear(year) - DaysToOneAD + day - 1; - for (int i = 1; i <= month; i++) - days += MonthDays[yearType][i - 1]; - return Time((days * TimeSpan.TicksPerDay) + getTimeTicks(hour, minute, second)) + TimeSpan.millis(millisecond); - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Hijri.d --- a/tango/tango/time/chrono/Hijri.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.Hijri; - -private import tango.time.chrono.Calendar; - - -/** - * $(ANCHOR _Hijri) - * Represents the Hijri calendar. - */ -public class Hijri : Calendar { - - private static const uint[] DAYS_TO_MONTH = [ 0, 30, 59, 89, 118, 148, 177, 207, 236, 266, 295, 325, 355 ]; - - /** - * Represents the current era. - */ - public const uint HIJRI_ERA = 1; - - /** - * Overridden. Returns a Time value set to the specified date and time in the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * day = An integer representing the _day. - * hour = An integer representing the _hour. - * minute = An integer representing the _minute. - * second = An integer representing the _second. - * millisecond = An integer representing the _millisecond. - * era = An integer representing the _era. - * Returns: A Time set to the specified date and time. - */ - public override Time toTime(uint year, uint month, uint day, uint hour, uint minute, uint second, uint millisecond, uint era) { - return Time((daysSinceJan1(year, month, day) - 1) * TimeSpan.TicksPerDay + getTimeTicks(hour, minute, second)) + TimeSpan.millis(millisecond); - } - - /** - * Overridden. Returns the day of the week in the specified Time. - * Params: time = A Time value. - * Returns: A DayOfWeek value representing the day of the week of time. - */ - public override DayOfWeek getDayOfWeek(Time time) { - return cast(DayOfWeek) (cast(uint) (time.ticks / TimeSpan.TicksPerDay + 1) % 7); - } - - /** - * Overridden. Returns the day of the month in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the month of time. - */ - public override uint getDayOfMonth(Time time) { - return extractPart(time.ticks, DatePart.Day); - } - - /** - * Overridden. Returns the day of the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the year of time. - */ - public override uint getDayOfYear(Time time) { - return extractPart(time.ticks, DatePart.DayOfYear); - } - - /** - * Overridden. Returns the day of the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the day of the year of time. - */ - public override uint getMonth(Time time) { - return extractPart(time.ticks, DatePart.Month); - } - - /** - * Overridden. Returns the year in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the year in time. - */ - public override uint getYear(Time time) { - return extractPart(time.ticks, DatePart.Year); - } - - /** - * Overridden. Returns the era in the specified Time. - * Params: time = A Time value. - * Returns: An integer representing the ear in time. - */ - public override uint getEra(Time time) { - return HIJRI_ERA; - } - - /** - * Overridden. Returns the number of days in the specified _year and _month of the specified _era. - * Params: - * year = An integer representing the _year. - * month = An integer representing the _month. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year and _month of the specified _era. - */ - public override uint getDaysInMonth(uint year, uint month, uint era) { - if (month == 12) - return isLeapYear(year, CURRENT_ERA) ? 30 : 29; - return (month % 2 == 1) ? 30 : 29; - } - - /** - * Overridden. Returns the number of days in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of days in the specified _year in the specified _era. - */ - public override uint getDaysInYear(uint year, uint era) { - return isLeapYear(year, era) ? 355 : 354; - } - - /** - * Overridden. Returns the number of months in the specified _year of the specified _era. - * Params: - * year = An integer representing the _year. - * era = An integer representing the _era. - * Returns: The number of months in the specified _year in the specified _era. - */ - public override uint getMonthsInYear(uint year, uint era) { - return 12; - } - - /** - * Overridden. Indicates whether the specified _year in the specified _era is a leap _year. - * Params: year = An integer representing the _year. - * Params: era = An integer representing the _era. - * Returns: true is the specified _year is a leap _year; otherwise, false. - */ - public override bool isLeapYear(uint year, uint era) { - return (14 + 11 * year) % 30 < 11; - } - - /** - * $(I Property.) Overridden. Retrieves the list of eras in the current calendar. - * Returns: An integer array representing the eras in the current calendar. - */ - public override uint[] eras() { - auto tmp = [HIJRI_ERA]; - return tmp.dup; - } - - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return HIJRI; - } - - private long daysToYear(uint year) { - int cycle = ((year - 1) / 30) * 30; - int remaining = year - cycle - 1; - long days = ((cycle * 10631L) / 30L) + 227013L; - while (remaining > 0) { - days += 354 + (isLeapYear(remaining, CURRENT_ERA) ? 1 : 0); - remaining--; - } - return days; - } - - private long daysSinceJan1(uint year, uint month, uint day) { - return cast(long)(daysToYear(year) + DAYS_TO_MONTH[month - 1] + day); - } - - private int extractPart(long ticks, DatePart part) { - long days = TimeSpan(ticks).days + 1; - int year = cast(int)(((days - 227013) * 30) / 10631) + 1; - long daysUpToYear = daysToYear(year); - long daysInYear = getDaysInYear(year, CURRENT_ERA); - if (days < daysUpToYear) { - daysUpToYear -= daysInYear; - year--; - } - else if (days == daysUpToYear) { - year--; - daysUpToYear -= getDaysInYear(year, CURRENT_ERA); - } - else if (days > daysUpToYear + daysInYear) { - daysUpToYear += daysInYear; - year++; - } - - if (part == DatePart.Year) - return year; - - days -= daysUpToYear; - if (part == DatePart.DayOfYear) - return cast(int)days; - - int month = 1; - while (month <= 12 && days > DAYS_TO_MONTH[month - 1]) - month++; - month--; - if (part == DatePart.Month) - return month; - - return cast(int)(days - DAYS_TO_MONTH[month - 1]); - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Japanese.d --- a/tango/tango/time/chrono/Japanese.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.Japanese; - -private import tango.time.chrono.GregorianBased; - - -/** - * $(ANCHOR _Japanese) - * Represents the Japanese calendar. - */ -public class Japanese : GregorianBased -{ - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return JAPAN; - } - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Korean.d --- a/tango/tango/time/chrono/Korean.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,34 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.Korean; - -private import tango.time.chrono.GregorianBased; - - -/** - * $(ANCHOR _Korean) - * Represents the Korean calendar. - */ -public class Korean : GregorianBased { - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return KOREA; - } - -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/Taiwan.d --- a/tango/tango/time/chrono/Taiwan.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,33 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.Taiwan; - -private import tango.time.chrono.GregorianBased; - -/** - * $(ANCHOR _Taiwan) - * Represents the Taiwan calendar. - */ -public class Taiwan : GregorianBased -{ - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return TAIWAN; - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/time/chrono/ThaiBuddhist.d --- a/tango/tango/time/chrono/ThaiBuddhist.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,32 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005 John Chapman. All rights reserved - - license: BSD style: $(LICENSE) - - version: Mid 2005: Initial release - Apr 2007: reshaped - - author: John Chapman, Kris - -******************************************************************************/ - -module tango.time.chrono.ThaiBuddhist; - -private import tango.time.chrono.GregorianBased; - - -/** - * $(ANCHOR _ThaiBuddhist) - * Represents the Thai Buddhist calendar. - */ -public class ThaiBuddhist : GregorianBased { - /** - * $(I Property.) Overridden. Retrieves the identifier associated with the current calendar. - * Returns: An integer representing the identifier of the current calendar. - */ - public override uint id() { - return THAI; - } - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/ArgParser.d --- a/tango/tango/util/ArgParser.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,434 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2005-2006 Lars Ivar Igesund, - Eric Anderton. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: December 2005 - - author: Lars Ivar Igesund, Eric Anderton - -*******************************************************************************/ - -module tango.util.ArgParser; - -private import tango.core.Exception; - -/** - An alias to a delegate taking a char[] as a parameter. The value - parameter will hold any chars immediately - following the argument. -*/ -alias void delegate (char[] value) ArgParserCallback; - -/** - An alias to a delegate taking a char[] as a parameter. The value - parameter will hold any chars immediately - following the argument. - - The ordinal argument represents which default argument this is for - the given stream of arguments. The first default argument will - be ordinal=0 with each successive call to this callback having - ordinal values of 1, 2, 3 and so forth. This can be reset to zero - in new calls to parse. -*/ -alias void delegate (char[] value,uint ordinal) DefaultArgParserCallback; - -/** - An alias to a delegate taking no parameters -*/ -alias void delegate () ArgParserSimpleCallback; - - -/** - A struct that represents a "{Prefix}{Identifier}" string. -*/ -struct Argument { - char[] prefix; - char[] identifier; - - /** - Creates a new Argument instance with given prefix and identifier. - */ - static Argument opCall ( char[] prefix, char[] identifier ) { - Argument result; - - result.prefix = prefix; - result.identifier = identifier; - - return result; - } -} - -/** - Alias for for the lazy people. -*/ -alias Argument Arg; - - -/** - A utility class to parse and handle your command line arguments. -*/ -class ArgParser{ - - /** - A helper struct containing a callback and an id, corresponding to - the argId passed to one of the bind methods. - */ - protected struct PrefixCallback { - char[] id; - ArgParserCallback cb; - } - - protected PrefixCallback[][char[]] bindings; - protected DefaultArgParserCallback[char[]] defaultBindings; - protected uint[char[]] prefixOrdinals; - protected char[][] prefixSearchOrder; - protected DefaultArgParserCallback defaultbinding; - private uint defaultOrdinal = 0; - - protected void addBinding(PrefixCallback pcb, char[] argPrefix){ - if (!(argPrefix in bindings)) { - prefixSearchOrder ~= argPrefix; - } - bindings[argPrefix] ~= pcb; - } - - /** - Binds a delegate callback to argument with a prefix and - a argId. - - Params: - argPrefix = the prefix of the argument, e.g. a dash '-'. - argId = the name of the argument, what follows the prefix - cb = the delegate that should be called when this argument is found - */ - public void bind(char[] argPrefix, char[] argId, ArgParserCallback cb){ - PrefixCallback pcb; - pcb.id = argId; - pcb.cb = cb; - addBinding(pcb, argPrefix); - } - - /** - The constructor, creates an empty ArgParser instance. - */ - public this(){ - defaultbinding = null; - } - - /** - The constructor, creates an ArgParser instance with a defined default callback. - */ - public this(DefaultArgParserCallback callback){ - defaultbinding = callback; - } - - protected class SimpleCallbackAdapter{ - ArgParserSimpleCallback callback; - public this(ArgParserSimpleCallback callback){ - this.callback = callback; - } - - public void adapterCallback(char[] value){ - callback(); - } - } - - /** - Binds a delegate callback to argument with a prefix and - a argId. - - Params: - argPrefix = the prefix of the argument, e.g. a dash '-'. - argId = the name of the argument, what follows the prefix - cb = the delegate that should be called when this argument is found - */ - public void bind(char[] argPrefix, char[] argId, ArgParserSimpleCallback cb){ - SimpleCallbackAdapter adapter = new SimpleCallbackAdapter(cb); - PrefixCallback pcb; - pcb.id = argId; - pcb.cb = &adapter.adapterCallback; - addBinding(pcb, argPrefix); - } - - /** - Binds a delegate callback to all arguments with prefix argPrefix, but that - do not conform to an argument bound in a call to bind(). - - Params: - argPrefix = the prefix for the callback - callback = the default callback - */ - public void bindDefault(char[] argPrefix, DefaultArgParserCallback callback){ - defaultBindings[argPrefix] = callback; - prefixOrdinals[argPrefix] = 0; - if (!(argPrefix in bindings)) { - prefixSearchOrder ~= argPrefix; - } - } - - /** - Binds a delegate callback to all arguments not conforming to an - argument bound in a call to bind(). These arguments will be passed to the - delegate without having any matching prefixes removed. - - Params: - callback = the default callback - */ - public void bindDefault(DefaultArgParserCallback callback){ - defaultbinding = callback; - } - - /** - Binds a delegate callback to an argument. - - Params: - argument = argument to respond to - callback = the delegate that should be called when the argument is found - */ - public void bind (Argument argument, ArgParserCallback callback) { - bind(argument.prefix, argument.identifier, callback); - } - - /** - Binds a delegate callback to any number of arguments. - - Params: - arguments = an array of Argument struct instances - callback = the delegate that should be called when one of the arguments is found - */ - public void bind ( Argument[] arguments, void delegate(char[]) callback ) { - foreach (argument; arguments) { bind(argument, callback); } - } - - /** - Binds a delegate callback to an identifier with Posix-like prefixes. This means, - it binds for both prefixes "-" and "--", as well as identifier with, and - without a delimiting "=" between identifier and value. - - Params: - identifier = argument identifier - callback = the delegate that should be called when one of the arguments is found - */ - public void bindPosix ( char[] identifier, ArgParserCallback callback ) { - bind([ Argument("-", identifier ~ "="), Argument("-", identifier), - Argument("--", identifier ~ "="), Argument("--", identifier) ], callback); - } - - /** - Binds a delegate callback to any number of identifiers with Posix-like prefixes. - See bindPosix(identifier, callback). - - Params: - arguments = an array of argument identifiers - callback = the delegate that should be called when one of the arguments is found - */ - public void bindPosix ( char[][] identifiers, ArgParserCallback callback ) { - foreach (identifier; identifiers) { bindPosix(identifier, callback); } - } - - /** - Parses the arguments provided by the parameter. The bound callbacks are called as - arguments are recognized. If two arguments have the same prefix, and start with - the same characters (e.g.: --open, --opened), the longest matching bound callback - is called. - - Params: - arguments = the command line arguments from the application - resetOrdinals = if true, all ordinal counts will be set to zero - */ - public void parse(char[][] arguments, bool resetOrdinals = false){ - if (bindings.length == 0) return; - - if (resetOrdinals) { - defaultOrdinal = 0; - foreach (key; prefixOrdinals.keys) { - prefixOrdinals[key] = 0; - } - } - - foreach (char[] arg; arguments) { - char[] argData = arg; - char[] argOrig = argData; - bool found = false; - - foreach (char[] prefix; prefixSearchOrder) { - if(argData.length < prefix.length) continue; - - if(argData[0..prefix.length] != prefix) continue; - else argData = argData[prefix.length..$]; - - if (prefix in bindings) { - PrefixCallback[] candidates; - - foreach (PrefixCallback cb; bindings[prefix]) { - if (argData.length < cb.id.length) continue; - - uint cbil = cb.id.length; - - if (cb.id == argData[0..cbil]) { - found = true; - candidates ~= cb; - } - } - - if (found) { - // Find the longest matching callback identifier from the candidates. - uint indexLongestMatch = 0; - - if (candidates.length > 1) { - foreach (i, candidate; candidates) { - if (candidate.id.length > candidates[indexLongestMatch].id.length) { - indexLongestMatch = i; - } - } - } - - // Call the best matching callback. - with(candidates[indexLongestMatch]) { cb(argData[id.length..$]); } - } - } - if (found) { - break; - } - else if (prefix in defaultBindings){ - defaultBindings[prefix](argData,prefixOrdinals[prefix]); - prefixOrdinals[prefix]++; - found = true; - break; - } - argData = argOrig; - } - if (!found) { - if (defaultbinding !is null) { - defaultbinding(argData,defaultOrdinal); - defaultOrdinal++; - } - else { - throw new IllegalArgumentException("Illegal argument "~ argData); - } - } - } - } -} - -debug (UnitTest) { - import Integer = tango.text.convert.Integer; - - //void main() {} - -unittest { - - ArgParser parser = new ArgParser(); - bool h = false; - bool h2 = false; - bool b = false; - bool bb = false; - bool boolean = false; - int n = -1; - int dashOrdinalCount = -1; - int ordinalCount = -1; - - parser.bind("--", "h2", delegate void(){ - h2 = true; - }); - - parser.bind("-", "h", delegate void(){ - h = true; - }); - - parser.bind("-", "bb", delegate void(){ - bb = true; - }); - - parser.bind("-", "bool", delegate void(char[] value){ - assert(value.length == 5); - assert(value[0] == '='); - if (value[1..5] == "true") { - boolean = true; - } - else { - assert(false); - } - }); - - parser.bind("-", "b", delegate void(){ - b = true; - }); - - parser.bind("-", "n", delegate void(char[] value){ - assert(value[0] == '='); - n = cast(int) Integer.parse(value[1..5]); - assert(n == 4349); - }); - - parser.bindDefault(delegate void(char[] value, uint ordinal){ - ordinalCount = ordinal; - if (ordinal == 0) { - assert(value == "ordinalTest1"); - } - else if (ordinal == 1) { - assert(value == "ordinalTest2"); - } - }); - - parser.bindDefault("-", delegate void(char[] value, uint ordinal){ - dashOrdinalCount = ordinal; - if (ordinal == 0) { - assert(value == "dashTest1"); - } - else if (ordinal == 1) { - assert(value == "dashTest2"); - } - }); - - parser.bindDefault("@", delegate void(char[] value, uint ordinal){ - assert (value == "atTest"); - }); - - static char[][] test1 = ["--h2", "-h", "-bb", "-b", "-n=4349", "-bool=true", "ordinalTest1", "ordinalTest2", "-dashTest1", "-dashTest2", "@atTest"]; - - parser.parse(test1); - assert(h2); - assert(h); - assert(b); - assert(bb); - assert(n == 4349); - assert(ordinalCount == 1); - assert(dashOrdinalCount == 1); - - h = h2 = b = bb = false; - boolean = false; - n = ordinalCount = dashOrdinalCount = -1; - - static char[][] test2 = ["-n=4349", "ordinalTest1", "@atTest", "--h2", "-b", "-bb", "-h", "-dashTest1", "-dashTest2", "ordinalTest2", "-bool=true"]; - - parser.parse(test2, true); - assert(h2 && h && b && bb && boolean && (n ==4349)); - assert(ordinalCount == 1); - assert(dashOrdinalCount == 1); - - h = h2 = b = bb = false; - boolean = false; - n = ordinalCount = dashOrdinalCount = -1; - - static char[][] test3 = ["-n=4349", "ordinalTest1", "@atTest", "--h2", "-b", "-bb", "-h", "-dashTest1", "-dashTest2", "ordinalTest2", "-bool=true"]; - - parser.parse(test3, true); - assert(h2 && h && b && bb && boolean && (n ==4349)); - assert((ordinalCount == 1) && (dashOrdinalCount == 1)); - - ordinalCount = dashOrdinalCount = -1; - - static char[][] test4 = ["ordinalTest1", "ordinalTest2", "ordinalTest3", "ordinalTest4"]; - static char[][] test5 = ["-dashTest1", "-dashTest2", "-dashTest3"]; - - parser.parse(test4, true); - assert(ordinalCount == 3); - - parser.parse(test5, true); - assert(dashOrdinalCount == 2); -} -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/Arguments.d --- a/tango/tango/util/Arguments.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,834 +0,0 @@ -/******************************************************************************* - copyright: Copyright (c) 2007 Darryl Bleau. All rights reserved. - - license: BSD style: $(LICENSE) - - version: Oct2007 - author: Darryl B, Jeff D - - History: - --- - Date Who What - Sep2006 Darryl Bleau Original C module - Sep2007 Jeff Davey Ported to D, added comments. - Oct2007 Darryl Bleau Added validation delegates/functions, more comments. - --- -*******************************************************************************/ - -/******************************************************************************* - - This module is used to parse arguments, and give easy access to them. - -*******************************************************************************/ - -module tango.util.Arguments; - -private import tango.core.Exception : TracedException; - -/*********************************************************************** - - This exception is thrown during argument validation. - -***********************************************************************/ - -public class ArgumentException : TracedException -{ - /*********************************************************************** - - The reason the exception was thrown - - ***********************************************************************/ - - enum ExceptionReason - { - /*********************************************************************** - An invalid parameter was passed - ***********************************************************************/ - - INVALID_PARAMETER, - /*********************************************************************** - A parameter wasn't passed to an argument when it was expected - ***********************************************************************/ - - MISSING_PARAMETER, - /*********************************************************************** - An argument was missing - ***********************************************************************/ - - MISSING_ARGUMENT - } - - private char[] _name; - private char[] _parameter; - private ExceptionReason _reason; - - /*********************************************************************** - - The name of the specific argument - - ***********************************************************************/ - - char[] name() { return _name; } - - /*********************************************************************** - - The parameter to the argument - - ***********************************************************************/ - - char[] parameter() { return _parameter; } - - /*********************************************************************** - - The enum to the reason it failed - - ***********************************************************************/ - - ExceptionReason reason() { return _reason; } - - this(char[] msg, char[] name, char[] parameter, ExceptionReason reason) - { - _name = name; - _parameter = parameter; - _reason = reason; - super(msg); - } -} - -/*********************************************************************** - - The Arguments class is used to parse arguments and encapsulate the - parameters passed by an application user. - - The command line arguments into an array of found arguments and their - respective parameters (if any). - - Arguments can be short (-), long (--), or implicit. Arguments can - optionally be passed parameters. For example, this module - parses command lines such as: "-a -b -c --long --argument=parameter" - - Example: - --- - char[][] arguments = [ "programname", "-a:on", "-abc:on", "--this=good", "-x:on" ]; - Arguments args = new Arguments(arguments); - if (args) - { - args.addValidation("b", true, false); - args.addValidation("c", true, true); - args.addValidation("x", false, true); - args.addValidation("this", false, true); - args.addValidation("this", (char[] a) { (return a.length < 5); }); - try - { - args.validate(); - return Test.Status.Success; - } - catch (ArgumentException ex) - { - messages ~= Stdout.layout.convert("{}: {} - {}", ex.name, ex.msg, ex.reason == ArgumentException.ExceptionReason.INVALID_PARAMETER ? "invalid parameter" : ex.reason == ArgumentException.ExceptionReason.MISSING_PARAMETER ? "missing parameter" : "missing argument"); - } - } - --- - - Syntax: - --- - Short Argument - -[x][:=]?[ parameter]... - Long Argument - --[long][:=]?[ parameter]... - Implicit Arguments - [implicitName]... Multiple implicit arguments are allowed. - --- - - Usage: - - Short options can be grouped in a single dash. The following are equivalent. - --- - - "myprogram -a -b -c" - - "myprogram -abc" - --- - - Arguments can be passed with space, '=', or ':'. The following are equivalent. - --- - - "myprogram -c arg" - - "myprogram -c=arg" - - "myprogram -c:arg" - --- - - As are these. - --- - - "myprogram --long arg" - - "myprogram --long=arg" - - "myprogram --long:arg" - --- - - Arguments can contain either '=' or ':', but not both. For example. - the following results in the argument 'long' being set to 'arg=other' - and 'arg:other', respectively. - --- - - "myprogram --long:arg=other" - - "myprogram --long=arg:other" - --- - - Blank dashes are ignored. The following are all equivalent. - --- - - "myprogram -c -- -a" - - "myprogram -c - -a" - - "myprogram - - - -a -- -c" - --- - - In the absence of implicit arguments, short options can be infered when - they come first. Given no implicit arguments, the following are equivalent. - --- - - "myprogram abc" - - "myprogram -abc" - - "myprogram -a -b -c" - --- - - Short options are case sensitive, while long options are not. The following - are equivalent. - --- - - "myprogram -a -A -LONG" - - "myprogram -a -A -Long" - - "myprogram -a -A -long" - --- - - In the event of multiple definitions of an argument, any parameters given - will be concatenated. The following are equivalent. - --- - - "myprogram -a one two three" - - "myprogram -a one -a two -a three" - - "myprogram -a:one two -a=three" - --- - - Multiple parameters can be iterated through using via the opIndex operator. - For example, given: - --- - - "myprogram -collect one two three '4 5 6'" - --- - args["collect"] will return a char[][] array ["one", "two", "three", "4 5 6"]. - - Implicit arguments can be defined by passing in an implicit arguments array, - which may look something like: ["first", "second"]. - Given implicit arguments, any non-argument command line parameters will be - automatically assigned to the implicit arguments, - in the order they were given. - For example, given the implicit arguments ["first", "second"] and command line: - --- - - "myprogram hello there bob" - --- - The argument 'first' will be assigned 'hello', and the argument 'second' will - be assigned both 'there' and 'bob'. - - Any intervening arguments will end the assignment. For example, given: - --- - - "myprogram hello there bob -a how are you" - --- - 'first' is assigned 'hello', 'second' is assigned 'there' and 'bob', and 'a' - is assigned 'how', 'are', and 'you'. - - Implicit arguments also allows programs to support non-option arguments, - given implicit arguments ["actions"], and a command line such as: - --- - - "myprogram mop sweep get_coffee -time:now" - --- - args["actions"] will contain ["mop", "sweep", "get_coffee"], and - args["time"] will contain "now". - -***********************************************************************/ - -public class Arguments -{ - /// Function used to validate multiple parameters at once. - alias bool function(char[][] params, inout char[] invalidParam) validationFunctionMulti; - /// Delegate used to validate multiple parameters at once. - alias bool delegate(char[][] params, inout char[] invalidParam) validationDelegateMulti; - /// Function used to validate single parameters at a time. - alias bool function(char[] param) validationFunction; - /// Delegate used to validate single parameters at a time. - alias bool delegate(char[] param) validationDelegate; - - private char[][][char[]] _args; - private char[] _program; - private struct validation - { - validationFunction[] validF; - validationDelegate[] validD; - validationFunctionMulti[] validFM; - validationDelegateMulti[] validDM; - bool required; - bool paramRequired; - } - private validation[char[]] _validations; - - private char[] parseLongArgument(char[] arg) - { - char[] rtn; - - int locate(char[] arg, char c) { - foreach (i, a; arg) - if (a is c) - return i; - return arg.length; - } - - - if (arg) - { - int equalDelim = locate(arg, '='); - int colonDelim = locate(arg, ':'); - int paramPos = ((equalDelim != arg.length) && (colonDelim != arg.length)) ? (equalDelim < colonDelim ? equalDelim : colonDelim) : (equalDelim != arg.length) ? equalDelim : colonDelim; - if (paramPos != arg.length) - { - char[] argName = arg[0 .. paramPos]; - char[] value = arg[(paramPos + 1) .. arg.length]; - setArg(argName, value); - rtn = argName; - } - else - { - setArg(arg, null); - rtn = arg; - } - } - return rtn; - } - - private void setArg(char[] arg, char[] value) - { - if (arg) - { - if ((arg in _args) || (value !is null)) - _args[arg] ~= value; - else - _args[arg] = null; - } - } - - private char[] parseShortArgument(char[] arg) - { - char[] rtn; - - if (arg) - { - char[] argName; - uint i; - for (i = 0; i < arg.length; i++) - { - if (arg[i] != '=' && arg[i] != ':') - { - argName = arg[i .. i + 1]; - setArg(argName, null); - } - else if (((arg.length) - i) > 1) - { - setArg(argName, arg[i+1 .. arg.length]); - break; - } - } - rtn = argName; - } - return rtn; - } - - /*********************************************************************** - - Allows external argument assignment, works the same as command line - in that it appends to any values already assigned to the given key. - - Params: - value = assigned value - key = key to assign to - - ***********************************************************************/ - - void opIndexAssign(char[] value, char[] key) - { - setArg(key, value); - } - - /*********************************************************************** - - Allows removal of keys from the arguments. Useful if you want to replace - values for a given key rather than to append to them. - - Params: - key = key to remove values from. - - ***********************************************************************/ - - void remove(char[] key) - { - _args[key] = null; - } - - /*********************************************************************** - - Directly access an argument's parameters via opIndex operator as an - array. - This is to cover something like: param1 "parm with space" param2 - - ***********************************************************************/ - - char[][] opIndex(char[] key) - { - char[][] rtn = null; - if (key && (key in _args)) - rtn = _args[key]; - return rtn; - } - - /*********************************************************************** - - Operator is used to check if the argument exists - - ***********************************************************************/ - - bool opIn_r(char[] key) - { - bool rtn = false; - if (key) - rtn = (key in _args) != null; - return rtn; - } - - /*********************************************************************** - - Adds a validation to the arguments - - Params: - argument = the argument name - required = specifies if this argument is required - paramRequired = specifies if this argument requires a parameter - - ***********************************************************************/ - - void addValidation(char[] argument, bool required, bool paramRequired) - { - if (argument) - { - validation* val = getValidation(argument); - if (val !is null) - { - val.required = required; - val.paramRequired = paramRequired; - } - } - } - - /*********************************************************************** - - Adds a validation to the arguments - - Params: - argument = the argument name - validF = a validation function for single parameters - - ***********************************************************************/ - - void addValidation(char[] argument, validationFunction validF) - { - if (argument && validF) - { - validation* val = getValidation(argument); - if (val !is null) - val.validF ~= validF; - } - } - - /*********************************************************************** - - Adds a validation to the arguments - - Params: - argument = the argument name - validD = a validation delegate for single parameters - - ***********************************************************************/ - - void addValidation(char[] argument, validationDelegate validD) - { - if (argument && validD) - { - validation* val = getValidation(argument); - if (val !is null) - val.validD ~= validD; - } - } - - /*********************************************************************** - - Adds a validation to the arguments - - Params: - argument = the argument name - validF = a validation function for multiple parameters - - ***********************************************************************/ - - void addValidation(char[] argument, validationFunctionMulti validFM) - { - if (argument && validFM) - { - validation* val = getValidation(argument); - if (val !is null) - val.validFM ~= validFM; - } - } - - /*********************************************************************** - - Adds a validation to the arguments - - Params: - argument = the argument name - validD = a validation delegate for multiple parameters - - ***********************************************************************/ - - void addValidation(char[] argument, validationDelegateMulti validDM) - { - if (argument && validDM) - { - validation* val = getValidation(argument); - if (val !is null) - val.validDM ~= validDM; - } - } - - private validation* getValidation(char[] argument) - { - validation* rtn = null; - if (!(argument in _validations)) - { - validation newValidation; - _validations[argument] = newValidation; - } - if (argument in _validations) - rtn = &(_validations[argument]); - return rtn; - } - - /*********************************************************************** - - Validates the parsed arguments. - - Throws ArgumentException if it finds something wrong. - - ***********************************************************************/ - - void validate() - { - foreach(char[] argument, validation val; _validations) - { - if (val.required && !(argument in _args)) - throw new ArgumentException("Argument required.", argument, null, ArgumentException.ExceptionReason.MISSING_ARGUMENT); - if (val.paramRequired && (argument in _args) && (_args[argument].length == 0)) - throw new ArgumentException("Parameter required.", argument, null, ArgumentException.ExceptionReason.MISSING_PARAMETER); - if ((argument in _args) && (_args[argument].length > 0)) - { - char[] invalidParameter = null; - foreach(validationFunctionMulti validFM; val.validFM) - if (!validFM(_args[argument], invalidParameter)) - break; - if (invalidParameter is null) - { - foreach(validationDelegateMulti validDM; val.validDM) - if (!validDM(_args[argument], invalidParameter)) - break; - if (invalidParameter is null) - { - foreach(char[] arg; _args[argument]) - { - foreach(validationFunction validF; val.validF) - { - if (!validF(arg)) - { - invalidParameter = arg; - break; - } - } - if (invalidParameter is null) - { - foreach(validationDelegate validD; val.validD) - { - if (!validD(arg)) - { - invalidParameter = arg; - break; - } - } - } - } - } - } - if (invalidParameter !is null) - throw new ArgumentException("Invalid parameter.", argument, invalidParameter, ArgumentException.ExceptionReason.INVALID_PARAMETER); - } - } - } - - /*********************************************************************** - - Parse the arguments according to the passed implicitArg list - and aliases. - - ***********************************************************************/ - - - void parse(char[][] arguments, char[][] implicitArgs, char[][][] aliases) - { - char[] lastArgumentSet; - uint currentImplicitArg = 0; - for (uint i = 1; i < arguments.length; i++) - { - char[] currentArgument = arguments[i]; - if (currentArgument) - { - if (currentArgument[0] == '-') - { - if (currentArgument.length > 1) - { - if (currentArgument[1] == '-') - { - if (currentArgument.length > 2) - lastArgumentSet = parseLongArgument(currentArgument[2 .. currentArgument.length]); // long argument - } - else - lastArgumentSet = parseShortArgument(currentArgument[1 .. currentArgument.length]); // short argument - } - } - else - { - char[] argName; - // implicit argument / previously set argument - if (implicitArgs && (currentImplicitArg < implicitArgs.length)) - lastArgumentSet = argName = implicitArgs[currentImplicitArg++]; - else - argName = lastArgumentSet; - - if (argName) - setArg(argName, currentArgument); - else - lastArgumentSet = parseShortArgument(currentArgument); - } - } - } - - if (aliases) - { - for (uint i = 0; i < aliases.length; i++) - { - bool foundOne = false; - char[][] currentValues; - for (uint j = 0; j < aliases[i].length; j++) - { - if (aliases[i][j] in _args) - { - foundOne = true; - currentValues ~= _args[aliases[i][j]]; - } - } - - if (foundOne) - { - for (uint j = 0; j < aliases[i].length; j++) - _args[aliases[i][j]] = currentValues; - } - } - } - } - - /*********************************************************************** - - Constructor that supports all features - - Params: - arguments = the list of arguments (usually from main) - implicitArgs = assigns values using these keys in order from the arguments array. - aliases = aliases specific arguments to each other to concat parameters. looks like aliases[0] = [ "alias1", "alias2", "alias3" ]; (which groups all these arguments together) - - ***********************************************************************/ - - this(char[][] arguments, char[][] implicitArgs, char[][][] aliases) - { - _program = arguments[0]; - this.parse(arguments, implicitArgs, aliases); - } - - /*********************************************************************** - - Basic constructor which only deals with arguments - - Params: - arguments = array usually from main() - - ***********************************************************************/ - - this(char[][] arguments) - { - this(arguments, null, null); - } - - - /*********************************************************************** - - This constructor allows implicitArgs to be set as well - - Params: - arguments = array usually from main() - implicitArgs = the implicit arguments - - ***********************************************************************/ - - this(char[][] arguments, char[][] implicitArgs) - { - this(arguments, implicitArgs, null); - } - - /*********************************************************************** - - This constructor allows aliases - - Params: - arguments = array usually from main - aliases = the array of arguments to alias - - ***********************************************************************/ - - this(char[][] arguments, char[][][] aliases) - { - this(arguments, null, aliases); - } -} - -/+ - -TODO: Either rewrite this test to not use the Test class, or resolve ticket -749 to include Test in Tango. - -version(UnitTest) -{ - import tango.util.Test; - import tango.text.Util; - import tango.io.Stdout; - - unittest - { - Test.Status parseTest(inout char[][] messages) - { - char[][] arguments = [ "ignoreprogramname", "--accumulate", "one", "-x", "on", "--accumulate:two", "-y", "off", "--accumulate=three", "-abc" ]; - Arguments args = new Arguments(arguments); - if (args) - { - if (!("ignoreprogramname" in args)) - { - if (join(args["accumulate"], " ") == "one two three") - { - if (args["x"][0] == "on") - { - if (("a" in args) && ("b" in args) && ("c" in args)) - return Test.Status.Success; - } - } - } - } - return Test.Status.Failure; - } - - Test.Status implicitParseTest(inout char[][] messages) - { - char[][] arguments = ["ignoreprogramname", "-r", "zero", "one two three", "four five", "-s", "six"]; - char[][] implicitArgs = [ "first", "second" ]; - Arguments args = new Arguments(arguments, implicitArgs); - if (args) - { - if (!("ignoreprogramname" in args)) - { - if (("r" in args) && !args["r"]) - { - if (args["first"][0] == "zero") - { - if (join(args["second"], " ") == "one two three four five") - { - if (args["second"] == ["one two three", "four five"]) - { - if (args["s"][0] == "six") - return Test.Status.Success; - } - } - } - } - } - } - return Test.Status.Failure; - } - - Test.Status aliasParseTest(inout char[][] messages) - { - char[][] arguments = [ "ignoreprogramname", "abc", "-d", "-e=eee", "--eff=f" ]; - char[][][4] aliases; - aliases[0] = [ "lettera", "a" ]; - aliases[1] = [ "letterbc", "c", "b" ]; - aliases[2] = [ "letterd", "d" ]; - aliases[3] = [ "lettere", "eff", "e" ]; - Arguments args = new Arguments(arguments, aliases); - if (args) - { - if (!("ignoreprogramname" in args) && ("letterbc" in args) && ("a" in args) && ("b" in args) && - ("c" in args) && ("d" in args) && ("eff" in args)) - { - if (("lettera" in args) && ("letterbc" in args) && ("letterd" in args)) - { - if (join(args["eff"], " ") == "f eee") - { - if (args["eff"] == ["f", "eee"]) - return Test.Status.Success; - } - } - } - } - return Test.Status.Failure; - } - - bool testRan = false; - bool testValidation(char[] arg) - { - bool rtn = true; - if (arg.length > 5) - rtn = false; - testRan = true; - return rtn; - } - - Test.Status validationTest(inout char[][] messages) - { - char[][] arguments = [ "programname", "-a:on", "-abc:on", "--this=good", "-x:on" ]; - Arguments args = new Arguments(arguments); - if (args) - { - args.addValidation("b", true, false); - args.addValidation("c", true, true); - args.addValidation("x", false, true); - args.addValidation("this", false, true); - args.addValidation("this", &testValidation); - try - { - args.validate(); - if (testRan) - return Test.Status.Success; - } - catch (ArgumentException ex) - { - messages ~= Stdout.layout.convert("{}: {} - {} ({})", ex.name, ex.msg, ex.reason == ArgumentException.ExceptionReason.INVALID_PARAMETER ? "invalid parameter" : ex.reason == ArgumentException.ExceptionReason.MISSING_PARAMETER ? "missing parameter" : "missing argument", ex.parameter); - } - } - return Test.Status.Failure; - } - - Test argTest = new Test("tetra.util.Arguments"); - argTest["Normal"] = &parseTest; - argTest["Implicit"] = &implicitParseTest; - argTest["Alias"] = &aliasParseTest; - argTest["Validation"] = &validationTest; - argTest.run; - } -} -+/ diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/Convert.d --- a/tango/tango/util/Convert.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1340 +0,0 @@ -/** - * This module provides a templated function that performs value-preserving - * conversions between arbitrary types. This function's behaviour can be - * extended for user-defined types as needed. - * - * Copyright: Copyright © 2007 Daniel Keep. - * License: BSD style: $(LICENSE) - * Authors: Daniel Keep - * Credits: Inspired in part by Andrei Alexandrescu's work on std.conv. - */ - -module tango.util.Convert; - -private import tango.core.Traits; -private import tango.core.Tuple : Tuple; -private import tango.core.Exception : TracedException; - -private import tango.math.Math; -private import tango.text.convert.Utf; -private import tango.text.convert.Float; -private import tango.text.convert.Integer; - -private import Ascii = tango.text.Ascii; - -version( DDoc ) -{ - /** - * Attempts to perform a value-preserving conversion of the given value - * from type S to type D. If the conversion cannot be performed in any - * context, a compile-time error will be issued describing the types - * involved. If the conversion fails at run-time because the destination - * type could not represent the value being converted, a - * ConversionException will be thrown. - * - * For example, to convert the string "123" into an equivalent integer - * value, you would use: - * - * ----- - * auto v = to!(int)("123"); - * ----- - * - * You may also specify a default value which should be returned in the - * event that the conversion cannot take place: - * - * ----- - * auto v = to!(int)("abc", 456); - * ----- - * - * The function will attempt to preserve the input value as exactly as - * possible, given the limitations of the destination format. For - * instance, converting a floating-point value to an integer will cause it - * to round the value to the nearest integer value. - * - * Below is a complete list of conversions between built-in types and - * strings. Capitalised names indicate classes of types. Conversions - * between types in the same class are also possible. - * - * ----- - * bool <-- Integer (0/!0), Char ('t'/'f'), String ("true"/"false") - * Integer <-- bool, Real, Char ('0'-'9'), String - * Real <-- Integer, String - * Imaginary <-- Complex - * Complex <-- Integer, Real, Imaginary - * Char <-- bool, Integer (0-9) - * String <-- bool, Integer, Real - * ----- - * - * Conversions between arrays and associative arrays are also supported, - * and are done element-by-element. - * - * You can add support for value conversions to your types by defining - * appropriate static and instance member functions. Given a type - * the_type, any of the following members of a type T may be used: - * - * ----- - * the_type to_the_type(); - * static T from_the_type(the_type); - * ----- - * - * You may also use "camel case" names: - * - * ----- - * the_type toTheType(); - * static T fromTheType(the_type); - * ----- - * - * Arrays and associative arrays can also be explicitly supported: - * - * ----- - * the_type[] to_the_type_array(); - * the_type[] toTheTypeArray(); - * - * static T from_the_type_array(the_type[]); - * static T fromTheTypeArray(the_type[]); - * - * the_type[int] to_int_to_the_type_map(); - * the_type[int] toIntToTheTypeMap(); - * - * static T from_int_to_the_type_map(the_type[int]); - * static T fromIntToTheTypeMap(the_type[int]); - * ----- - * - * If you have more complex requirements, you can also use the generic to - * and from templated members: - * - * ----- - * the_type to(the_type)(); - * static T from(the_type)(the_type); - * ----- - * - * These templates will have the_type explicitly passed to them in the - * template instantiation. - * - * Finally, strings are given special support. The following members will - * be checked for: - * - * ----- - * char[] toString(); - * wchar[] toString16(); - * dchar[] toString32(); - * char[] toString(); - * ----- - * - * The "toString_" method corresponding to the destination string type will be - * tried first. If this method does not exist, then the function will - * look for another "toString_" method from which it will convert the result. - * Failing this, it will try "toString" and convert the result to the - * appropriate encoding. - * - * The rules for converting to a user-defined type are much the same, - * except it makes use of the "fromUtf8", "fromUtf16", "fromUtf32" and - * "fromString" static methods. - */ - D to(D,S)(S value); - D to(D,S)(S value, D default_); /// ditto -} -else -{ - template to(D) - { - D to(S, Def=Missing)(S value, Def def=Def.init) - { - static if( is( Def == Missing ) ) - return toImpl!(D,S)(value); - - else - { - try - { - return toImpl!(D,S)(value); - } - catch( ConversionException e ) - {} - - return def; - - //D result = def; - /+ - try - { - return toImpl!(D,S)(value); - } - catch( ConversionException e ) - { - return def; - } - // +/ - //return result; - } - } - } -} - -/** - * This exception is thrown when the to template is unable to perform a - * conversion at run-time. This typically occurs when the source value cannot - * be represented in the destination type. This exception is also thrown when - * the conversion would cause an over- or underflow. - */ -class ConversionException : TracedException -{ - this( char[] msg ) - { - super( msg ); - } -} - -private: - -typedef int Missing; - -/* - * So, how is this module structured? - * - * Firstly, we need a bunch of support code. The first block of this contains - * some CTFE functions for string manipulation (to cut down on the number of - * template symbols we generate.) - * - * The next contains a boat-load of templates. Most of these are trait - * templates (things like isPOD, isObject, etc.) There are also a number of - * mixins, and some switching templates (like toString_(n).) - * - * Another thing to mention is intCmp, which performs a safe comparison - * between two integers of arbitrary size and signage. - * - * Following all this are the templated to* implementations. - * - * The actual toImpl template is the second last thing in the module, with the - * module unit tests coming last. - */ - -char ctfe_upper(char c) -{ - if( 'a' <= c && c <= 'z' ) - return (c - 'a') + 'A'; - else - return c; -} - -char[] ctfe_camelCase(char[] s) -{ - char[] result; - - bool nextIsCapital = true; - - foreach( c ; s ) - { - if( nextIsCapital ) - { - if( c == '_' ) - result ~= c; - else - { - result ~= ctfe_upper(c); - nextIsCapital = false; - } - } - else - { - if( c == '_' ) - nextIsCapital = true; - else - result ~= c; - } - } - - return result; -} - -bool ctfe_isSpace(T)(T c) -{ - static if (T.sizeof is 1) - return (c <= 32 && (c is ' ' | c is '\t' | c is '\r' - | c is '\n' | c is '\v' | c is '\f')); - else - return (c <= 32 && (c is ' ' | c is '\t' | c is '\r' - | c is '\n' | c is '\v' | c is '\f')) - || (c is '\u2028' | c is '\u2029'); -} - -T[] ctfe_triml(T)(T[] source) -{ - if( source.length == 0 ) - return null; - - foreach( i,c ; source ) - if( !ctfe_isSpace(c) ) - return source[i..$]; - - return null; -} - -T[] ctfe_trimr(T)(T[] source) -{ - if( source.length == 0 ) - return null; - - foreach_reverse( i,c ; source ) - if( !ctfe_isSpace(c) ) - return source[0..i+1]; - - return null; -} - -T[] ctfe_trim(T)(T[] source) -{ - return ctfe_trimr(ctfe_triml(source)); -} - -template isPOD(T) -{ - static if( is( T == struct ) || is( T == union ) ) - const isPOD = true; - else - const isPOD = false; -} - -template isObject(T) -{ - static if( is( T == class ) || is( T == interface ) ) - const isObject = true; - else - const isObject = false; -} - -template isUDT(T) -{ - const isUDT = isPOD!(T) || isObject!(T); -} - -template isString(T) -{ - static if( is( typeof(T[]) == char[] ) - || is( typeof(T[]) == wchar[] ) - || is( typeof(T[]) == dchar[] ) ) - const isString = true; - else - const isString = false; -} - -template isArrayType(T) -{ - const isArrayType = isDynamicArrayType!(T) || isStaticArrayType!(T); -} - -template isPointerType(T) -{ - /* - * You might think these first two tests are redundant. You'd be wrong. - * The linux compilers, for whatever reason, seem to think that objects - * and arrays are implicitly castable to void*, whilst the Windows one - * doesn't. Don't ask me; just nod and smile... - */ - static if( is( T : Object ) ) - const isPointerType = false; - else static if( is( T : void[] ) ) - const isPointerType = false; - else static if( is( T : void* ) ) - const isPointerType = true; - else - const isPointerType = false; -} - -static assert( isPointerType!(char*) ); -static assert( isPointerType!(void*) ); -static assert( !isPointerType!(char[]) ); -static assert( !isPointerType!(void[]) ); -static assert( !isPointerType!(typeof("abc")) ); -static assert( !isPointerType!(Object) ); - -/* - * Determines which signed integer type of T and U is larger. - */ -template sintSuperType(T,U) -{ - static if( is( T == long ) || is( U == long ) ) - alias long sintSuperType; - else static if( is( T == int ) || is( U == int ) ) - alias int sintSuperType; - else static if( is( T == short ) || is( U == short ) ) - alias short sintSuperType; - else static if( is( T == byte ) || is( U == byte ) ) - alias byte sintSuperType; -} - -/* - * Determines which unsigned integer type of T and U is larger. - */ -template uintSuperType(T,U) -{ - static if( is( T == ulong ) || is( U == ulong ) ) - alias ulong sintSuperType; - else static if( is( T == uint ) || is( U == uint ) ) - alias uint sintSuperType; - else static if( is( T == ushort ) || is( U == ushort ) ) - alias ushort sintSuperType; - else static if( is( T == ubyte ) || is( U == ubyte ) ) - alias ubyte sintSuperType; -} - -template uintOfSize(uint bytes) -{ - static if( bytes == 1 ) - alias ubyte uintOfSize; - else static if( bytes == 2 ) - alias ushort uintOfSize; - else static if( bytes == 4 ) - alias uint uintOfSize; -} - -/* - * Safely performs a comparison between two integer values, taking into - * account different sizes and signages. - */ -int intCmp(T,U)(T lhs, U rhs) -{ - static if( isSignedIntegerType!(T) && isSignedIntegerType!(U) ) - { - alias sintSuperType!(T,U) S; - auto l = cast(S) lhs; - auto r = cast(S) rhs; - if( l < r ) return -1; - else if( l > r ) return 1; - else return 0; - } - else static if( isUnsignedIntegerType!(T) && isUnsignedIntegerType!(U) ) - { - alias uintSuperType!(T,U) S; - auto l = cast(S) lhs; - auto r = cast(S) rhs; - if( l < r ) return -1; - else if( l > r ) return 1; - else return 0; - } - else - { - static if( isSignedIntegerType!(T) ) - { - if( lhs < 0 ) - return -1; - else - { - static if( U.sizeof >= T.sizeof ) - { - auto l = cast(U) lhs; - if( l < rhs ) return -1; - else if( l > rhs ) return 1; - else return 0; - } - else - { - auto l = cast(ulong) lhs; - auto r = cast(ulong) rhs; - if( l < r ) return -1; - else if( l > r ) return 1; - else return 0; - } - } - } - else static if( isSignedIntegerType!(U) ) - { - if( rhs < 0 ) - return 1; - else - { - static if( T.sizeof >= U.sizeof ) - { - auto r = cast(T) rhs; - if( lhs < r ) return -1; - else if( lhs > r ) return 1; - else return 0; - } - else - { - auto l = cast(ulong) lhs; - auto r = cast(ulong) rhs; - if( l < r ) return -1; - else if( l > r ) return 1; - else return 0; - } - } - } - } -} - -template unsupported(char[] desc="") -{ - static assert(false, "Unsupported conversion: cannot convert to " - ~ctfe_trim(D.stringof)~" from " - ~(desc!="" ? desc~" " : "")~ctfe_trim(S.stringof)~"."); -} - -template unsupported_backwards(char[] desc="") -{ - static assert(false, "Unsupported conversion: cannot convert to " - ~(desc!="" ? desc~" " : "")~ctfe_trim(D.stringof) - ~" from "~ctfe_trim(S.stringof)~"."); -} - -// TN works out the c_case name of the given type. -template TN(T:T[]) -{ - static if( is( T == char ) ) - const TN = "string"; - else static if( is( T == wchar ) ) - const TN = "wstring"; - else static if( is( T == dchar ) ) - const TN = "dstring"; - else - const TN = TN!(T)~"_array"; -} - -// ditto -template TN(T:T*) -{ - const TN = TN!(T)~"_pointer"; -} - -// ditto -template TN(T) -{ - static if( isAssocArrayType!(T) ) - const TN = TN!(typeof(T.keys[0]))~"_to_" - ~TN!(typeof(T.values[0]))~"_map"; - else - const TN = ctfe_trim(T.stringof); -} - -// Picks an appropriate toUtf* method from t.text.convert.Utf. -template toString_(T) -{ - static if( is( T == char[] ) ) - alias tango.text.convert.Utf.toString toString_; - - else static if( is( T == wchar[] ) ) - alias tango.text.convert.Utf.toString16 toString_; - - else - alias tango.text.convert.Utf.toString32 toString_; -} - -template UtfNum(T) -{ - const UtfNum = is(typeof(T[0])==char) ? "8" : ( - is(typeof(T[0])==wchar) ? "16" : "32"); -} - -template StringNum(T) -{ - const StringNum = is(typeof(T[0])==char) ? "" : ( - is(typeof(T[0])==wchar) ? "16" : "32"); -} - -// This mixin defines a general function for converting to a UDT. -template toUDT() -{ - D toDfromS() - { - static if( isString!(S) ) - { - static if( is( typeof(mixin("D.fromUtf" - ~UtfNum!(S)~"(value)")) : D ) ) - return mixin("D.fromUtf"~UtfNum!(S)~"(value)"); - - else static if( is( typeof(D.fromUtf8(""c)) : D ) ) - return D.fromUtf8(toString_!(char[])(value)); - - else static if( is( typeof(D.fromUtf16(""w)) : D ) ) - return D.fromUtf16(toString_!(wchar[])(value)); - - else static if( is( typeof(D.fromUtf32(""d)) : D ) ) - return D.fromUtf32(toString_!(dchar[])(value)); - - else static if( is( typeof(D.fromString(""c)) : D ) ) - { - static if( is( S == char[] ) ) - return D.fromString(value); - - else - return D.fromString(toString_!(char[])(value)); - } - - // Default fallbacks - - else static if( is( typeof(D.from!(S)(value)) : D ) ) - return D.from!(S)(value); - - else - mixin unsupported!("user-defined type"); - } - else - { - // TODO: Check for templates. Dunno what to do about them. - - static if( is( typeof(mixin("D.from_"~TN!(S)~"()")) : D ) ) - return mixin("D.from_"~TN!(S)~"()"); - - else static if( is( typeof(mixin("D.from" - ~ctfe_camelCase(TN!(S))~"()")) : D ) ) - return mixin("D.from"~ctfe_camelCase(TN!(S))~"()"); - - else static if( is( typeof(D.from!(S)(value)) : D ) ) - return D.from!(S)(value); - - else - mixin unsupported!("user-defined type"); - } - } -} - -// This mixin defines a general function for converting from a UDT. -template fromUDT(char[] fallthrough="") -{ - D toDfromS() - { - static if( isString!(D) ) - { - static if( is( typeof(mixin("value.toString" - ~StringNum!(D)~"()")) == D ) ) - return mixin("value.toString"~StringNum!(D)~"()"); - - else static if( is( typeof(value.toString()) == char[] ) ) - return toString_!(D)(value.toString); - - else static if( is( typeof(value.toString16()) == wchar[] ) ) - return toString_!(D)(value.toString16); - - else static if( is( typeof(value.toString32()) == dchar[] ) ) - return toString_!(D)(value.toString32); - - else static if( is( typeof(value.toString()) == char[] ) ) - { - static if( is( D == char[] ) ) - return value.toString; - - else - { - return toString_!(D)(value.toString); - } - } - - // Default fallbacks - - else static if( is( typeof(value.to!(D)()) : D ) ) - return value.to!(D)(); - - else static if( fallthrough != "" ) - mixin(fallthrough); - - else - mixin unsupported!("user-defined type"); - } - else - { - // TODO: Check for templates. Dunno what to do about them. - - static if( is( typeof(mixin("value.to_"~TN!(D)~"()")) : D ) ) - return mixin("value.to_"~TN!(D)~"()"); - - else static if( is( typeof(mixin("value.to" - ~ctfe_camelCase(TN!(D))~"()")) : D ) ) - return mixin("value.to"~ctfe_camelCase(TN!(D))~"()"); - - else static if( is( typeof(value.to!(D)()) : D ) ) - return value.to!(D)(); - - else static if( fallthrough != "" ) - mixin(fallthrough); - - else - mixin unsupported!("user-defined type"); - } - } -} - -template convError() -{ - void throwConvError() - { - // Since we're going to use to!(T) to convert the value to a string, - // we need to make sure we don't end up in a loop... - static if( isString!(D) || !is( typeof(to!(char[])(value)) == char[] ) ) - { - throw new ConversionException("Could not convert a value of type " - ~S.stringof~" to type "~D.stringof~"."); - } - else - { - throw new ConversionException("Could not convert `" - ~to!(char[])(value)~"` of type " - ~S.stringof~" to type "~D.stringof~"."); - } - } -} - -D toBool(D,S)(S value) -{ - static assert(is(D==bool)); - - static if( isIntegerType!(S) /+|| isRealType!(S) || isImaginaryType!(S) - || isComplexType!(S)+/ ) - // The weird comparison is to support NaN as true - return !(value == 0); - - else static if( isCharType!(S) ) - { - switch( value ) - { - case 'F': case 'f': - return false; - - case 'T': case 't': - return true; - - default: - mixin convError; - throwConvError; - } - } - - else static if( isString!(S) ) - { - switch( Ascii.toLower(value) ) - { - case "false": - return false; - - case "true": - return true; - - default: - mixin convError; - throwConvError; - } - } - /+ - else static if( isDynamicArrayType!(S) || isStaticArrayType!(S) ) - { - mixin unsupported!("array type"); - } - else static if( isAssocArrayType!(S) ) - { - mixin unsupported!("associative array type"); - } - else static if( isPointerType!(S) ) - { - mixin unsupported!("pointer type"); - } - else static if( is( S == typedef ) ) - { - mixin unsupported!("typedef'ed type"); - } - // +/ - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - { - mixin unsupported; - } -} - -D toIntegerFromInteger(D,S)(S value) -{ - static if( (cast(ulong) D.max) >= (cast(ulong) S.max) - && (cast(long) D.min) <= (cast(long) S.min) ) - { - return cast(D) value; - } - else - { - mixin convError; // TODO: Overflow error - - if( intCmp(value,D.min)<0 || intCmp(value,D.max)>0 ) - { - throwConvError; - } - else - return cast(D) value; - } -} - -D toIntegerFromReal(D,S)(S value) -{ - auto v = tango.math.Math.round(value); - if( (cast(real) D.min) <= v && v <= (cast(real) D.max) ) - { - return cast(D) v; - } - else - { - mixin convError; // TODO: Overflow error - throwConvError; - } -} - -D toIntegerFromString(D,S)(S value) -{ - static if( is( S charT : charT[] ) ) - { - mixin convError; - - static if( is( D == ulong ) ) - { - uint len; - auto result = tango.text.convert.Integer.convert(value, 10, &len); - - if( len < value.length ) - throwConvError; - - return result; - } - else - { - uint len; - auto result = tango.text.convert.Integer.parse(value, 10, &len); - - if( len < value.length ) - throwConvError; - - return toIntegerFromInteger!(D,long)(result); - } - } -} - -D toInteger(D,S)(S value) -{ - static if( is( S == bool ) ) - return (value ? 1 : 0); - - else static if( isIntegerType!(S) ) - { - return toIntegerFromInteger!(D,S)(value); - } - else static if( isCharType!(S) ) - { - if( value >= '0' && value <= '9' ) - { - return cast(D)(value - '0'); - } - else - { - mixin convError; - throwConvError; - } - } - else static if( isRealType!(S) ) - { - return toIntegerFromReal!(D,S)(value); - } - else static if( isString!(S) ) - { - return toIntegerFromString!(D,S)(value); - } - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D toReal(D,S)(S value) -{ - /+static if( is( S == bool ) ) - return (value ? 1.0 : 0.0); - - else+/ static if( isIntegerType!(S) ) - return cast(D) value; - - /+else static if( isCharType!(S) ) - return cast(D) to!(uint)(value);+/ - - else static if( isString!(S) ) - return tango.text.convert.Float.parse(value); - - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D toImaginary(D,S)(S value) -{ - /+static if( is( S == bool ) ) - return (value ? 1.0i : 0.0i); - - else+/ static if( isComplexType!(S) ) - { - if( value.re == 0.0 ) - return value.im * cast(D)1.0i; - - else - { - mixin convError; - throwConvError; - } - } - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D toComplex(D,S)(S value) -{ - static if( isIntegerType!(S) || isRealType!(S) || isImaginaryType!(S) - || isComplexType!(S) ) - return cast(D) value; - - /+else static if( isCharType!(S) ) - return cast(D) to!(uint)(value);+/ - - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D toChar(D,S)(S value) -{ - static if( is( S == bool ) ) - return (value ? 't' : 'f'); - - else static if( isIntegerType!(S) ) - { - if( value >= 0 && value <= 9 ) - return cast(D) value+'0'; - - else - { - mixin convError; // TODO: Overflow error - throwConvError; - } - } - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D toStringFromString(D,S)(S value) -{ - static if( is( typeof(D[0]) == char ) ) - return tango.text.convert.Utf.toString(value); - - else static if( is( typeof(D[0]) == wchar ) ) - return tango.text.convert.Utf.toString16(value); - - else - { - static assert( is( typeof(D[0]) == dchar ) ); - return tango.text.convert.Utf.toString32(value); - } -} - -D toString(D,S)(S value) -{ - static if( is( S == bool ) ) - return (value ? "true" : "false"); - - else static if( isIntegerType!(S) ) - // TODO: Make sure this works with ulongs. - return mixin("tango.text.convert.Integer.toString"~StringNum!(D)~"(value)"); - - else static if( isRealType!(S) ) - return mixin("tango.text.convert.Float.toString"~StringNum!(D)~"(value)"); - - else static if( isDynamicArrayType!(S) || isStaticArrayType!(S) ) - mixin unsupported!("array type"); - - else static if( isAssocArrayType!(S) ) - mixin unsupported!("associative array type"); - - else static if( isPOD!(S) || isObject!(S) ) - { - mixin fromUDT; - return toDfromS; - } - else - mixin unsupported; -} - -D fromString(D,S)(D value) -{ - static if( isDynamicArrayType!(S) || isStaticArrayType!(S) ) - mixin unsupported_backwards!("array type"); - - else static if( isAssocArrayType!(S) ) - mixin unsupported_backwards!("associative array type"); - - else static if( isPOD!(S) || isObject!(S) ) - { - mixin toUDT; - return toDfromS; - } - else - mixin unsupported_backwards; -} - -D toArrayFromArray(D,S)(S value) -{ - alias typeof(D[0]) De; - - D result; result.length = value.length; - scope(failure) delete result; - - foreach( i,e ; value ) - result[i] = to!(De)(e); - - return result; -} - -D toMapFromMap(D,S)(S value) -{ - alias typeof(D.keys[0]) Dk; - alias typeof(D.values[0]) Dv; - - D result; - - foreach( k,v ; value ) - result[ to!(Dk)(k) ] = to!(Dv)(v); - - return result; -} - -D toFromUDT(D,S)(S value) -{ - // Try value.to* first - static if( is( typeof(mixin("value.to_"~TN!(D)~"()")) : D ) ) - return mixin("value.to_"~TN!(D)~"()"); - - else static if( is( typeof(mixin("value.to" - ~ctfe_camelCase(TN!(D))~"()")) : D ) ) - return mixin("value.to"~ctfe_camelCase(TN!(D))~"()"); - - else static if( is( typeof(value.to!(D)()) : D ) ) - return value.to!(D)(); - - // Ok, try D.from* now - else static if( is( typeof(mixin("D.from_"~TN!(S)~"(value)")) : D ) ) - return mixin("D.from_"~TN!(S)~"(value)"); - - else static if( is( typeof(mixin("D.from" - ~ctfe_camelCase(TN!(S))~"(value)")) : D ) ) - return mixin("D.from"~ctfe_camelCase(TN!(S))~"(value)"); - - else static if( is( typeof(D.from!(S)(value)) : D ) ) - return D.from!(S)(value); - - // Give up - else - mixin unsupported; -} - -D toImpl(D,S)(S value) -{ - static if( is( D == S ) ) - return value; - - else static if( isArrayType!(D) && isArrayType!(S) - && is( typeof(D[0]) == typeof(S[0]) ) ) - // Special-case which catches to!(T[])!(T[n]). - return value; - - else static if( is( D == bool ) ) - return toBool!(D,S)(value); - - else static if( isIntegerType!(D) ) - return toInteger!(D,S)(value); - - else static if( isRealType!(D) ) - return toReal!(D,S)(value); - - else static if( isImaginaryType!(D) ) - return toImaginary!(D,S)(value); - - else static if( isComplexType!(D) ) - return toComplex!(D,S)(value); - - else static if( isCharType!(D) ) - return toChar!(D,S)(value); - - else static if( isString!(D) && isString!(S) ) - return toStringFromString!(D,S)(value); - - else static if( isString!(D) ) - return toString!(D,S)(value); - - else static if( isString!(S) ) - return fromString!(D,S)(value); - - else static if( isArrayType!(D) && isArrayType!(S) ) - return toArrayFromArray!(D,S)(value); - - else static if( isAssocArrayType!(D) && isAssocArrayType!(S) ) - return toMapFromMap!(D,S)(value); - - else static if( isUDT!(D) || isUDT!(S) ) - return toFromUDT!(D,S)(value); - - else - mixin unsupported; -} - -debug ( ConvertTest ): - void main() {} - -debug( UnitTest ): - - -bool ex(T)(lazy T v) -{ - bool result = false; - try - { - v(); - } - catch( Exception _ ) - { - result = true; - } - return result; -} - -bool nx(T)(lazy T v) -{ - bool result = true; - try - { - v(); - } - catch( Exception _ ) - { - result = false; - } - return result; -} - -struct Foo -{ - int toInt() { return 42; } - - char[] toString() { return "string foo"; } - - int[] toIntArray() { return [1,2,3]; } - - Bar toBar() - { - Bar result; return result; - } - - T to(T)() - { - static if( is( T == bool ) ) - return true; - else - static assert( false ); - } -} - -struct Bar -{ - real toReal() - { - return 3.14159; - } - - ireal toIreal() - { - return 42.0i; - } -} - -struct Baz -{ - static Baz fromFoo(Foo foo) - { - Baz result; return result; - } - - Bar toBar() - { - Bar result; return result; - } -} - -unittest -{ - /* - * bool - */ - static assert( !is( typeof(to!(bool)(1.0)) ) ); - static assert( !is( typeof(to!(bool)(1.0i)) ) ); - static assert( !is( typeof(to!(bool)(1.0+1.0i)) ) ); - - assert( to!(bool)(0) == false ); - assert( to!(bool)(1) == true ); - assert( to!(bool)(-1) == true ); - - assert( to!(bool)('t') == true ); - assert( to!(bool)('T') == true ); - assert( to!(bool)('f') == false ); - assert( to!(bool)('F') == false ); - assert(ex( to!(bool)('x') )); - - assert( to!(bool)("true") == true ); - assert( to!(bool)("false") == false ); - assert( to!(bool)("TrUe") == true ); - assert( to!(bool)("fAlSe") == false ); - - /* - * Integer - */ - assert( to!(int)(42L) == 42 ); - assert( to!(byte)(42) == cast(byte)42 ); - assert( to!(short)(-1701) == cast(short)-1701 ); - assert( to!(long)(cast(ubyte)72) == 72L ); - - assert(nx( to!(byte)(127) )); - assert(ex( to!(byte)(128) )); - assert(nx( to!(byte)(-128) )); - assert(ex( to!(byte)(-129) )); - - assert(nx( to!(ubyte)(255) )); - assert(ex( to!(ubyte)(256) )); - assert(nx( to!(ubyte)(0) )); - assert(ex( to!(ubyte)(-1) )); - - assert(nx( to!(long)(9_223_372_036_854_775_807UL) )); - assert(ex( to!(long)(9_223_372_036_854_775_808UL) )); - assert(nx( to!(ulong)(0L) )); - assert(ex( to!(ulong)(-1L) )); - - assert( to!(int)(3.14159) == 3 ); - assert( to!(int)(2.71828) == 3 ); - - assert( to!(int)("1234") == 1234 ); - - assert( to!(int)(true) == 1 ); - assert( to!(int)(false) == 0 ); - - assert( to!(int)('0') == 0 ); - assert( to!(int)('9') == 9 ); - - /* - * Real - */ - assert( to!(real)(3) == 3.0 ); - assert( to!(real)("1.125") == 1.125 ); - - /* - * Imaginary - */ - static assert( !is( typeof(to!(ireal)(3.0)) ) ); - - assert( to!(ireal)(0.0+1.0i) == 1.0i ); - assert(nx( to!(ireal)(0.0+1.0i) )); - assert(ex( to!(ireal)(1.0+0.0i) )); - - /* - * Complex - */ - assert( to!(creal)(1) == (1.0+0.0i) ); - assert( to!(creal)(2.0) == (2.0+0.0i) ); - assert( to!(creal)(3.0i) == (0.0+3.0i) ); - - /* - * Char - */ - assert( to!(char)(true) == 't' ); - assert( to!(char)(false) == 'f' ); - - assert( to!(char)(0) == '0' ); - assert( to!(char)(9) == '9' ); - - assert(ex( to!(char)(-1) )); - assert(ex( to!(char)(10) )); - - /* - * String-string - */ - assert( to!(char[])("Í love to æt "w) == "Í love to æt "c ); - assert( to!(char[])("them smûrƒies™,"d) == "them smûrƒies™,"c ); - assert( to!(wchar[])("Smûrfies™ I love"c) == "Smûrfies™ I love"w ); - assert( to!(wchar[])("2 食い散らす"d) == "2 食い散らす"w ); - assert( to!(dchar[])("bite đey µgly"c) == "bite đey µgly"d ); - assert( to!(dchar[])("headž ㍳ff"w) == "headž ㍳ff"d ); - // ... nibble on they bluish feet. - - /* - * String - */ - assert( to!(char[])(true) == "true" ); - assert( to!(char[])(false) == "false" ); - - assert( to!(char[])(12345678) == "12345678" ); - assert( to!(char[])(1234.567800) == "1234.57"); - - /* - * Array-array - */ - assert( to!(ubyte[])([1,2,3]) == [cast(ubyte)1, 2, 3] ); - assert( to!(bool[])(["true"[], "false"]) == [true, false] ); - - /* - * Map-map - */ - { - char[][int] src = [1:"true"[], 2:"false"]; - bool[ubyte] dst = to!(bool[ubyte])(src); - assert( dst.keys.length == 2 ); - assert( dst[1] == true ); - assert( dst[2] == false ); - } - - /* - * UDT - */ - { - Foo foo; - - assert( to!(bool)(foo) == true ); - assert( to!(int)(foo) == 42 ); - assert( to!(char[])(foo) == "string foo" ); - assert( to!(wchar[])(foo) == "string foo"w ); - assert( to!(dchar[])(foo) == "string foo"d ); - assert( to!(int[])(foo) == [1,2,3] ); - assert( to!(ireal)(to!(Bar)(foo)) == 42.0i ); - assert( to!(real)(to!(Bar)(to!(Baz)(foo))) == 3.14159 ); - } - - /* - * Default values - */ - { - assert( to!(int)("123", 456) == 123, - `to!(int)("123", 456) == "` ~ to!(char[])( - to!(int)("123", 456)) ~ `"` ); - assert( to!(int)("abc", 456) == 456, - `to!(int)("abc", 456) == "` ~ to!(char[])( - to!(int)("abc", 456)) ~ `"` ); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/PathUtil.d --- a/tango/tango/util/PathUtil.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,471 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2006 Lars Ivar Igesund, Thomas Kühne, - Grzegorz Adam Hankiewicz - - license: BSD style: $(LICENSE) - - version: Dec 2006: Initial release - - author: Lars Ivar Igesund, Thomas Kühne, - Grzegorz Adam Hankiewicz - -*******************************************************************************/ - -module tango.util.PathUtil; - -private import tango.core.Exception; - -/******************************************************************************* - - Normalizes a path component as specified in section 5.2 of RFC 2396. - - ./ in path is removed - /. at the end is removed - /.. at the end is removed - /../ in path is removed - - Unless normSlash is set to false, all slashes will be converted - to the systems path separator character. - - Note that any number of ../ segments at the front is ignored, - unless it is an absolute path, in which case an exception will - be thrown. A relative path with ../ segments at the front is only - considered valid if it can be joined with a path such that it can - be fully normalized. - - Throws: Exception if the root separator is followed by .. - - Examples: - ----- - normalize("/home/foo/./bar/../../john/doe"); // => "/home/john/doe" - ----- - -*******************************************************************************/ - -char[] normalize(char[] path, bool normSlash = true) -{ - /* - Internal helper to patch slashes - */ - char[] normalizeSlashes(char[] path) - { - char to = '/', from = '\\'; - - foreach (inout c; path) - if (c is from) - c = to; - return path; - } - - /* - Internal helper that finds a slash followed by a dot - */ - int findSlashDot(char[] path, int start) { - assert(start < path.length); - foreach(i, c; path[start..$-1]) - if (c == '/') - if (path[start+i+1] == '.') - return i + start + 1; - - return -1; - } - - /* - Internal helper that finds a slash starting at the back - */ - int findSlash(char[] path, int start) { - assert(start < path.length); - - if (start < 0) - return -1; - - for (int i = start; i >= 0; i--) { - if (path[i] == '/') { - return i; - } - } - return -1; - } - - /* - Internal helper that recursively shortens all segments with dots. - */ - char[] removeDots(char[] path, int start) { - assert (start < path.length); - assert (path[start] == '.'); - if (start + 1 == path.length) { - // path ends with /., remove - return path[0..start - 1]; - } - else if (path[start+1] == '/') { - // remove all subsequent './' - do { - path = path[0..start] ~ path[start+2..$]; - } while (start + 2 < path.length && path[start..start+2] == "./"); - int idx = findSlashDot(path, start - 1); - if (idx < 0) { - // no more /., return path - return path; - } - return removeDots(path, idx); - } - else if (path[start..start+2] == "..") { - // found /.. sequence -version (Win32) { - if (start == 3 && path[1] == '/') { // absolute, X:/.. - throw new IllegalArgumentException("PathUtil :: Invalid absolute path, root can not be followed by .."); - } - -} -else { - if (start == 1) { // absolute - throw new IllegalArgumentException("PathUtil :: Invalid absolute path, root separator can not be followed by .."); - } -} - int idx = findSlash(path, start - 2); - if (start + 2 == path.length) { - // path ends with /.. - if (idx < 0) { - // no more slashes in front of /.., resolves to empty path - return ""; - } - // remove /.. and preceding segment and return - return path[0..idx]; - } - else if (path[start+2] == '/') { - // found /../ sequence - // if no slashes before /../, set path to everything after - // if /../ is ../../, keep - // otherwise, remove /../ - if (path[idx+1..start-1] == "..") { - idx = findSlashDot(path, start+4); - if (idx < 0) { - // no more /., path fully shortened - return path; - } - return removeDots(path, idx); - } - path = path[0..idx < 0 ? 0 : idx + 1] ~ path[start+3..$]; - idx = findSlashDot(path, idx < 0 ? 0 : idx); - if (idx < 0) { - // no more /., path fully shortened - return path; - } - // examine next /. - return removeDots(path, idx); - } - } - else { - if (findSlash(path, path.length - 1) < start) - // segment is filename that starts with ., and at the end - return path; - else { - // not at end - int idx = findSlashDot(path, start); - if (idx > -1) - return removeDots(path, idx); - else - return path; - } - } - assert(false, "PathUtil :: invalid code path"); - } - - char[] normpath = path.dup; - if (normSlash) { - normpath = normalizeSlashes(normpath); - } - - // if path starts with ./, remove all subsequent instances - while (normpath.length > 1 && normpath[0] == '.' && - normpath[1] == '/') { - normpath = normpath[2..$]; - } - int idx = findSlashDot(normpath, 0); - if (idx > -1) { - normpath = removeDots(normpath, idx); - } - - return normpath; -} - - -debug (UnitTest) -{ - - unittest - { - assert (normalize ("/home/../john/../.tango/.htaccess") == "/.tango/.htaccess", - normalize ("/home/../john/../.tango/.htaccess")); - assert (normalize ("/home/../john/../.tango/foo.conf") == "/.tango/foo.conf", - normalize ("/home/../john/../.tango/foo.conf")); - assert (normalize ("/home/john/.tango/foo.conf") == "/home/john/.tango/foo.conf", - normalize ("/home/john/.tango/foo.conf")); - assert (normalize ("/foo/bar/.htaccess") == "/foo/bar/.htaccess", - normalize ("/foo/bar/.htaccess")); - assert (normalize ("foo/bar/././.") == "foo/bar", - normalize ("foo/bar/././.")); - assert (normalize ("././foo/././././bar") == "foo/bar", - normalize ("././foo/././././bar")); - assert (normalize ("/foo/../john") == "/john", - normalize("/foo/../john")); - assert (normalize ("foo/../john") == "john"); - assert (normalize ("foo/bar/..") == "foo"); - assert (normalize ("foo/bar/../john") == "foo/john"); - assert (normalize ("foo/bar/doe/../../john") == "foo/john"); - assert (normalize ("foo/bar/doe/../../john/../bar") == "foo/bar"); - assert (normalize ("./foo/bar/doe") == "foo/bar/doe"); - assert (normalize ("./foo/bar/doe/../../john/../bar") == "foo/bar"); - assert (normalize ("./foo/bar/../../john/../bar") == "bar"); - assert (normalize ("foo/bar/./doe/../../john") == "foo/john"); - assert (normalize ("../../foo/bar") == "../../foo/bar"); - assert (normalize ("../../../foo/bar") == "../../../foo/bar"); - assert (normalize ("d/") == "d/"); - - assert (normalize ("\\foo\\..\\john") == "/john"); - assert (normalize ("foo\\..\\john") == "john"); - assert (normalize ("foo\\bar\\..") == "foo"); - assert (normalize ("foo\\bar\\..\\john") == "foo/john"); - assert (normalize ("foo\\bar\\doe\\..\\..\\john") == "foo/john"); - assert (normalize ("foo\\bar\\doe\\..\\..\\john\\..\\bar") == "foo/bar"); - assert (normalize (".\\foo\\bar\\doe") == "foo/bar/doe"); - assert (normalize (".\\foo\\bar\\doe\\..\\..\\john\\..\\bar") == "foo/bar"); - assert (normalize (".\\foo\\bar\\..\\..\\john\\..\\bar") == "bar"); - assert (normalize ("foo\\bar\\.\\doe\\..\\..\\john") == "foo/john"); - assert (normalize ("..\\..\\foo\\bar") == "../../foo/bar"); - assert (normalize ("..\\..\\..\\foo\\bar") == "../../../foo/bar"); - } -} - - -/****************************************************************************** - - Matches a pattern against a filename. - - Some characters of pattern have special a meaning (they are - meta-characters) and can't be escaped. These are: -

- - - - - - - - -
*Matches 0 or more instances of any character.
?Matches exactly one instances of any character.
[chars]Matches one instance of any character that appears - between the brackets.
[!chars]Matches one instance of any character that does not appear - between the brackets after the exclamation mark.

- Internally individual character comparisons are done calling - charMatch(), so its rules apply here too. Note that path - separators and dots don't stop a meta-character from matching - further portions of the filename. - - Returns: true if pattern matches filename, false otherwise. - - See_Also: charMatch(). - - Throws: Nothing. - - Examples: - ----- - version(Win32) - { - patternMatch("foo.bar", "*") // => true - patternMatch(r"foo/foo\bar", "f*b*r") // => true - patternMatch("foo.bar", "f?bar") // => false - patternMatch("Goo.bar", "[fg]???bar") // => true - patternMatch(r"d:\foo\bar", "d*foo?bar") // => true - } - version(Posix) - { - patternMatch("Go*.bar", "[fg]???bar") // => false - patternMatch("/foo*home/bar", "?foo*bar") // => true - patternMatch("foobar", "foo?bar") // => true - } - ----- - -******************************************************************************/ - -bool patternMatch(char[] filename, char[] pattern) -in -{ - // Verify that pattern[] is valid - int i; - int inbracket = false; - - for (i = 0; i < pattern.length; i++) - { - switch (pattern[i]) - { - case '[': - assert(!inbracket); - inbracket = true; - break; - - case ']': - assert(inbracket); - inbracket = false; - break; - - default: - break; - } - } -} -body -{ - int pi; - int ni; - char pc; - char nc; - int j; - int not; - int anymatch; - - ni = 0; - for (pi = 0; pi < pattern.length; pi++) - { - pc = pattern[pi]; - switch (pc) - { - case '*': - if (pi + 1 == pattern.length) - goto match; - for (j = ni; j < filename.length; j++) - { - if (patternMatch(filename[j .. filename.length], - pattern[pi + 1 .. pattern.length])) - goto match; - } - goto nomatch; - - case '?': - if (ni == filename.length) - goto nomatch; - ni++; - break; - - case '[': - if (ni == filename.length) - goto nomatch; - nc = filename[ni]; - ni++; - not = 0; - pi++; - if (pattern[pi] == '!') - { - not = 1; - pi++; - } - anymatch = 0; - while (1) - { - pc = pattern[pi]; - if (pc == ']') - break; - if (!anymatch && charMatch(nc, pc)) - anymatch = 1; - pi++; - } - if (!(anymatch ^ not)) - goto nomatch; - break; - - default: - if (ni == filename.length) - goto nomatch; - nc = filename[ni]; - if (!charMatch(pc, nc)) - goto nomatch; - ni++; - break; - } - } - if (ni < filename.length) - goto nomatch; - - match: - return true; - - nomatch: - return false; -} - - -debug (UnitTest) -{ - unittest - { - version (Win32) - assert(patternMatch("foo", "Foo")); - version (Posix) - assert(!patternMatch("foo", "Foo")); - - assert(patternMatch("foo", "*")); - assert(patternMatch("foo.bar", "*")); - assert(patternMatch("foo.bar", "*.*")); - assert(patternMatch("foo.bar", "foo*")); - assert(patternMatch("foo.bar", "f*bar")); - assert(patternMatch("foo.bar", "f*b*r")); - assert(patternMatch("foo.bar", "f???bar")); - assert(patternMatch("foo.bar", "[fg]???bar")); - assert(patternMatch("foo.bar", "[!gh]*bar")); - - assert(!patternMatch("foo", "bar")); - assert(!patternMatch("foo", "*.*")); - assert(!patternMatch("foo.bar", "f*baz")); - assert(!patternMatch("foo.bar", "f*b*x")); - assert(!patternMatch("foo.bar", "[gh]???bar")); - assert(!patternMatch("foo.bar", "[!fg]*bar")); - assert(!patternMatch("foo.bar", "[fg]???baz")); - - } -} - - -/****************************************************************************** - - Matches filename characters. - - Under Windows, the comparison is done ignoring case. Under Linux - an exact match is performed. - - Returns: true if c1 matches c2, false otherwise. - - Throws: Nothing. - - Examples: - ----- - version(Win32) - { - charMatch('a', 'b') // => false - charMatch('A', 'a') // => true - } - version(Posix) - { - charMatch('a', 'b') // => false - charMatch('A', 'a') // => false - } - ----- -******************************************************************************/ - -private bool charMatch(char c1, char c2) -{ - version (Win32) - { - - if (c1 != c2) - { - return ((c1 >= 'a' && c1 <= 'z') ? c1 - ('a' - 'A') : c1) == - ((c2 >= 'a' && c2 <= 'z') ? c2 - ('a' - 'A') : c2); - } - return true; - } - version (Posix) - { - return c1 == c2; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/ArrayBag.d --- a/tango/tango/util/collection/ArrayBag.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,617 +0,0 @@ -/* - File: ArrayBag.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from store.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.ArrayBag; - -private import tango.core.Exception; - -private import tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.CLCell, - tango.util.collection.impl.BagCollection, - tango.util.collection.impl.AbstractIterator; - - - -/** - * - * Linked Buffer implementation of Bags. The Bag consists of - * any number of buffers holding elements, arranged in a list. - * Each buffer holds an array of elements. The size of each - * buffer is the value of chunkSize that was current during the - * operation that caused the Bag to grow. The chunkSize() may - * be adjusted at any time. (It is not considered a version change.) - * - *

- * All but the final buffer is always kept full. - * When a buffer has no elements, it is released (so is - * available for garbage collection). - *

- * ArrayBags are good choices for collections in which - * you merely put a lot of things in, and then look at - * them via enumerations, but don't often look for - * particular elements. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class ArrayBag(T) : BagCollection!(T) -{ - alias CLCell!(T[]) CLCellT; - - alias BagCollection!(T).remove remove; - alias BagCollection!(T).removeAll removeAll; - - /** - * The default chunk size to use for buffers - **/ - - public static int defaultChunkSize = 32; - - // instance variables - - /** - * The last node of the circular list of chunks. Null if empty. - **/ - - package CLCellT tail; - - /** - * The number of elements of the tail node actually used. (all others - * are kept full). - **/ - protected int lastCount; - - /** - * The chunk size to use for making next buffer - **/ - - protected int chunkSize_; - - // constructors - - /** - * Make an empty buffer. - **/ - public this () - { - this (null, 0, null, 0, defaultChunkSize); - } - - /** - * Make an empty buffer, using the supplied element screener. - **/ - - public this (Predicate s) - { - this (s, 0, null, 0, defaultChunkSize); - } - - /** - * Special version of constructor needed by clone() - **/ - protected this (Predicate s, int n, CLCellT t, int lc, int cs) - { - super (s); - count = n; - tail = t; - lastCount = lc; - chunkSize_ = cs; - } - - /** - * Make an independent copy. Does not clone elements. - **/ - - public final ArrayBag duplicate () - { - if (count is 0) - return new ArrayBag (screener); - else - { - CLCellT h = tail.copyList(); - CLCellT p = h; - - do { - T[] obuff = p.element(); - T[] nbuff = new T[obuff.length]; - - for (int i = 0; i < obuff.length; ++i) - nbuff[i] = obuff[i]; - - p.element(nbuff); - p = p.next(); - } while (p !is h); - - return new ArrayBag (screener, count, h, lastCount, chunkSize_); - } - } - - - /** - * Report the chunk size used when adding new buffers to the list - **/ - - public final int chunkSize() - { - return chunkSize_; - } - - /** - * Set the chunk size to be used when adding new buffers to the - * list during future add() operations. - * Any value greater than 0 is OK. (A value of 1 makes this a - * into very slow simulation of a linked list!) - **/ - - public final void chunkSize (int newChunkSize) - { - if (newChunkSize > 0) - chunkSize_ = newChunkSize; - else - throw new IllegalArgumentException("Attempt to set negative chunk size value"); - } - - // Collection methods - - /* - This code is pretty repetitive, but I don't know a nice way to - separate traversal logic from actions - */ - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || count is 0) - return false; - - CLCellT p = tail.next(); - - for (;;) - { - T[] buff = p.element(); - bool isLast = p is tail; - - int n; - if (isLast) - n = lastCount; - else - n = buff.length; - - for (int i = 0; i < n; ++i) - { - if (buff[i] == (element)) - return true; - } - - if (isLast) - break; - else - p = p.next(); - } - return false; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || count is 0) - return 0; - - uint c = 0; - CLCellT p = tail.next(); - - for (;;) - { - T[] buff = p.element(); - bool isLast = p is tail; - - int n; - if (isLast) - n = lastCount; - else - n = buff.length; - - for (int i = 0; i < n; ++i) - { - if (buff[i] == (element)) - ++c; - } - - if (isLast) - break; - else - p = p.next(); - } - return c; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new ArrayIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new ArrayIterator!(T)(this); - return iterator.opApply (dg); - } - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - setCount(0); - tail = null; - lastCount = 0; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeAll. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeAll - **/ - public final void removeAll (T element) - { - remove_(element, true); - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove(T element) - { - remove_(element, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace(T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(1). - * Takes the least element. - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - if (count !is 0) - { - T[] buff = tail.element(); - T v = buff[lastCount -1]; - buff[lastCount -1] = T.init; - shrink_(); - return v; - } - checkIndex(0); - return T.init; // not reached - } - - - - // MutableBag methods - - /** - * Implements tango.util.collection.MutableBag.addIfAbsent. - * Time complexity: O(n). - * See_Also: tango.util.collection.MutableBag.addIfAbsent - **/ - public final void addIf(T element) - { - if (!contains(element)) - add (element); - } - - - /** - * Implements tango.util.collection.MutableBag.add. - * Time complexity: O(1). - * See_Also: tango.util.collection.MutableBag.add - **/ - public final void add (T element) - { - checkElement(element); - - incCount(); - if (tail is null) - { - tail = new CLCellT(new T[chunkSize_]); - lastCount = 0; - } - - T[] buff = tail.element(); - if (lastCount is buff.length) - { - buff = new T[chunkSize_]; - tail.addNext(buff); - tail = tail.next(); - lastCount = 0; - } - - buff[lastCount++] = element; - } - - /** - * helper for remove/exclude - **/ - - private final void remove_(T element, bool allOccurrences) - { - if (!isValidArg(element) || count is 0) - return ; - - CLCellT p = tail; - - for (;;) - { - T[] buff = p.element(); - int i = (p is tail) ? lastCount - 1 : buff.length - 1; - - while (i >= 0) - { - if (buff[i] == (element)) - { - T[] lastBuff = tail.element(); - buff[i] = lastBuff[lastCount -1]; - lastBuff[lastCount -1] = T.init; - shrink_(); - - if (!allOccurrences || count is 0) - return ; - - if (p is tail && i >= lastCount) - i = lastCount -1; - } - else - --i; - } - - if (p is tail.next()) - break; - else - p = p.prev(); - } - } - - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (!isValidArg(oldElement) || count is 0 || oldElement == (newElement)) - return ; - - CLCellT p = tail.next(); - - for (;;) - { - T[] buff = p.element(); - bool isLast = p is tail; - - int n; - if (isLast) - n = lastCount; - else - n = buff.length; - - for (int i = 0; i < n; ++i) - { - if (buff[i] == (oldElement)) - { - checkElement(newElement); - incVersion(); - buff[i] = newElement; - if (!allOccurrences) - return ; - } - } - - if (isLast) - break; - else - p = p.next(); - } - } - - private final void shrink_() - { - decCount(); - lastCount--; - if (lastCount is 0) - { - if (count is 0) - clear(); - else - { - CLCellT tmp = tail; - tail = tail.prev(); - tmp.unlink(); - T[] buff = tail.element(); - lastCount = buff.length; - } - } - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - - super.checkImplementation(); - assert(chunkSize_ >= 0); - assert(lastCount >= 0); - assert(((count is 0) is (tail is null))); - - if (tail is null) - return ; - - int c = 0; - CLCellT p = tail.next(); - - for (;;) - { - T[] buff = p.element(); - bool isLast = p is tail; - - int n; - if (isLast) - n = lastCount; - else - n = buff.length; - - c += n; - for (int i = 0; i < n; ++i) - { - auto v = buff[i]; - assert(allows(v) && contains(v)); - } - - if (isLast) - break; - else - p = p.next(); - } - - assert(c is count); - - } - - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - static class ArrayIterator(T) : AbstractIterator!(T) - { - private CLCellT cell; - private T[] buff; - private int index; - - public this (ArrayBag bag) - { - super(bag); - cell = bag.tail; - - if (cell) - buff = cell.element(); - } - - public final T get() - { - decRemaining(); - if (index >= buff.length) - { - cell = cell.next(); - buff = cell.element(); - index = 0; - } - return buff[index++]; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto bag = new ArrayBag!(char[]); - bag.add ("foo"); - bag.add ("bar"); - bag.add ("wumpus"); - - foreach (value; bag.elements) {} - - auto elements = bag.elements(); - while (elements.more) - auto v = elements.get(); - - foreach (value; bag) - Cout (value).newline; - - bag.checkImplementation(); - - Cout (bag).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/ArraySeq.d --- a/tango/tango/util/collection/ArraySeq.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,924 +0,0 @@ -/* - File: ArraySeq.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 2Oct95 dl@cs.oswego.edu refactored from DASeq.d - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.ArraySeq; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.Sortable, - tango.util.collection.model.Comparator, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.SeqCollection, - tango.util.collection.impl.AbstractIterator; - - -/** - * - * Dynamically allocated and resized Arrays. - * - * Beyond implementing its interfaces, adds methods - * to adjust capacities. The default heuristics for resizing - * usually work fine, but you can adjust them manually when - * you need to. - * - * ArraySeqs are generally like java.util.Vectors. But unlike them, - * ArraySeqs do not actually allocate arrays when they are constructed. - * Among other consequences, you can adjust the capacity `for free' - * after construction but before adding elements. You can adjust - * it at other times as well, but this may lead to more expensive - * resizing. Also, unlike Vectors, they release their internal arrays - * whenever they are empty. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public class ArraySeq(T) : SeqCollection!(T), Sortable!(T) -{ - alias SeqCollection!(T).remove remove; - alias SeqCollection!(T).removeAll removeAll; - - /** - * The minimum capacity of any non-empty buffer - **/ - - public static int minCapacity = 16; - - - // instance variables - - /** - * The elements, or null if no buffer yet allocated. - **/ - - package T array[]; - - - // constructors - - /** - * Make a new empty ArraySeq. - **/ - - public this () - { - this (null, null, 0); - } - - /** - * Make an empty ArraySeq with given element screener - **/ - - public this (Predicate screener) - { - this (screener, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - package this (Predicate s, T[] b, int c) - { - super(s); - array = b; - count = c; - } - - /** - * Make an independent copy. The elements themselves are not cloned - **/ - - public final ArraySeq duplicate() - { - int cap = count; - if (cap is 0) - return new ArraySeq (screener, null, 0); - else - { - if (cap < minCapacity) - cap = minCapacity; - - T newArray[] = new T[cap]; - //System.copy (array[0].sizeof, array, 0, newArray, 0, count); - - newArray[0..count] = array[0..count]; - return new ArraySeq!(T)(screener, newArray, count); - } - } - - // methods introduced _in ArraySeq - - /** - * return the current internal buffer capacity (zero if no buffer allocated). - * Returns: capacity (always greater than or equal to size()) - **/ - - public final int capacity() - { - return (array is null) ? 0 : array.length; - } - - /** - * Set the internal buffer capacity to max(size(), newCap). - * That is, if given an argument less than the current - * number of elements, the capacity is just set to the - * current number of elements. Thus, elements are never lost - * by setting the capacity. - * - * @param newCap the desired capacity. - * Returns: condition: - *

-         * capacity() >= size() &&
-         * version() != PREV(this).version() == (capacity() != PREV(this).capacity())
-         * 
- **/ - - public final void capacity(int newCap) - { - if (newCap < count) - newCap = count; - - if (newCap is 0) - { - clear(); - } - else - if (array is null) - { - array = new T[newCap]; - incVersion(); - } - else - if (newCap !is array.length) - { - //T newArray[] = new T[newCap]; - //newArray[0..count] = array[0..count]; - //array = newArray; - array ~= new T[newCap - array.length]; - incVersion(); - } - } - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (! isValidArg (element)) - return false; - - for (int i = 0; i < count; ++i) - if (array[i] == (element)) - return true; - return false; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (! isValidArg(element)) - return 0; - - uint c = 0; - for (uint i = 0; i < count; ++i) - if (array[i] == (element)) - ++c; - return c; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new ArrayIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new ArrayIterator!(T)(this); - return iterator.opApply (dg); - } - - - // Seq methods: - - /** - * Implements tango.util.collection.model.Seq.Seq.head. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.head - **/ - public final T head() - { - checkIndex(0); - return array[0]; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.tail. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.tail - **/ - public final T tail() - { - checkIndex(count -1); - return array[count -1]; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.get. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.get - **/ - public final T get(int index) - in { - checkIndex(index); - } - body - { - return array[index]; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.first. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.first - **/ - public final int first(T element, int startingIndex = 0) - { - if (startingIndex < 0) - startingIndex = 0; - - for (int i = startingIndex; i < count; ++i) - if (array[i] == (element)) - return i; - return -1; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.last. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.last - **/ - public final int last(T element, int startingIndex = 0) - { - if (startingIndex >= count) - startingIndex = count -1; - - for (int i = startingIndex; i >= 0; --i) - if (array[i] == (element)) - return i; - return -1; - } - - - /** - * Implements tango.util.collection.model.Seq.Seq.subseq. - * Time complexity: O(length). - * See_Also: tango.util.collection.model.Seq.Seq.subseq - **/ - public final ArraySeq subset (int from, int _length) - { - if (_length > 0) - { - checkIndex(from); - checkIndex(from + _length - 1); - - T newArray[] = new T[_length]; - //System.copy (array[0].sizeof, array, from, newArray, 0, _length); - - newArray[0.._length] = array[from..from+_length]; - return new ArraySeq!(T)(screener, newArray, _length); - } - else - return new ArraySeq!(T)(screener); - } - - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - array = null; - setCount(0); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove(T element) - { - remove_(element, false); - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace(T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n * number of replacements). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.exclude. - * Time complexity: O(n * instances(element)). - * See_Also: tango.util.collection.impl.Collection.Collection.exclude - **/ - public final void removeAll(T element) - { - remove_(element, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(1). - * Takes the rightmost element of the array. - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - T v = tail(); - removeTail(); - return v; - } - - - // SortableCollection methods: - - - /** - * Implements tango.util.collection.SortableCollection.sort. - * Time complexity: O(n log n). - * Uses a quicksort-based algorithm. - * See_Also: tango.util.collection.SortableCollection.sort - **/ - public void sort(Comparator!(T) cmp) - { - if (count > 0) - { - quickSort(array, 0, count - 1, cmp); - incVersion(); - } - } - - - // MutableSeq methods - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(n) - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(T element) - { - checkElement(element); - growBy_(1); - for (int i = count -1; i > 0; --i) - array[i] = array[i - 1]; - array[0] = element; - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead - **/ - public final void replaceHead(T element) - { - checkElement(element); - array[0] = element; - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeHead. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeHead - **/ - public final void removeHead() - { - removeAt(0); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: normally O(1), but O(n) if size() == capacity(). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(T element) - in { - checkElement (element); - } - body - { - int last = count; - growBy_(1); - array[last] = element; - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail - **/ - public final void replaceTail(T element) - { - checkElement(element); - array[count -1] = element; - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeTail. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeTail - **/ - public final void removeTail() - { - checkIndex(0); - array[count -1] = T.init; - growBy_( -1); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, T element) - { - if (index !is count) - checkIndex(index); - - checkElement(element); - growBy_(1); - for (int i = count -1; i > index; --i) - array[i] = array[i - 1]; - array[index] = element; - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.remove. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeAt - **/ - public final void removeAt(int index) - { - checkIndex(index); - for (int i = index + 1; i < count; ++i) - array[i - 1] = array[i]; - array[count -1] = T.init; - growBy_( -1); - } - - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt - **/ - public final void replaceAt(int index, T element) - { - checkIndex(index); - checkElement(element); - array[index] = element; - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(n + number of elements in e) if (e - * instanceof CollectionIterator) else O(n * number of elements in e) - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(Iterator!(T) e) - { - insert_(0, e); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: O(number of elements in e) - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(Iterator!(T) e) - { - insert_(count, e); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(n + number of elements in e) if (e - * instanceof CollectionIterator) else O(n * number of elements in e) - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, Iterator!(T) e) - { - if (index !is count) - checkIndex(index); - insert_(index, e); - } - - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo - **/ - public final void removeRange (int fromIndex, int toIndex) - { - checkIndex(fromIndex); - checkIndex(toIndex); - if (fromIndex <= toIndex) - { - int gap = toIndex - fromIndex + 1; - int j = fromIndex; - for (int i = toIndex + 1; i < count; ++i) - array[j++] = array[i]; - - for (int i = 1; i <= gap; ++i) - array[count -i] = T.init; - addToCount( -gap); - } - } - - /** - * An implementation of Quicksort using medians of 3 for partitions. - * Used internally by sort. - * It is public and static so it can be used to sort plain - * arrays as well. - * @param s, the array to sort - * @param lo, the least index to sort from - * @param hi, the greatest index - * @param cmp, the comparator to use for comparing elements - **/ - - public final static void quickSort(T s[], int lo, int hi, Comparator!(T) cmp) - { - if (lo >= hi) - return; - - /* - Use median-of-three(lo, mid, hi) to pick a partition. - Also swap them into relative order while we are at it. - */ - - int mid = (lo + hi) / 2; - - if (cmp.compare(s[lo], s[mid]) > 0) - { - T tmp = s[lo]; - s[lo] = s[mid]; - s[mid] = tmp; // swap - } - - if (cmp.compare(s[mid], s[hi]) > 0) - { - T tmp = s[mid]; - s[mid] = s[hi]; - s[hi] = tmp; // swap - - if (cmp.compare(s[lo], s[mid]) > 0) - { - T tmp2 = s[lo]; - s[lo] = s[mid]; - s[mid] = tmp2; // swap - } - } - - int left = lo + 1; // start one past lo since already handled lo - int right = hi - 1; // similarly - if (left >= right) - return; // if three or fewer we are done - - T partition = s[mid]; - - for (;;) - { - while (cmp.compare(s[right], partition) > 0) - --right; - - while (left < right && cmp.compare(s[left], partition) <= 0) - ++left; - - if (left < right) - { - T tmp = s[left]; - s[left] = s[right]; - s[right] = tmp; // swap - --right; - } - else - break; - } - - quickSort(s, lo, left, cmp); - quickSort(s, left + 1, hi, cmp); - } - - /*********************************************************************** - - expose collection content as an array - - ************************************************************************/ - - override public T[] toArray () - { - return array[0..count].dup; - } - - // helper methods - - /** - * Main method to control buffer sizing. - * The heuristic used for growth is: - *
-         * if out of space:
-         *   if need less than minCapacity, grow to minCapacity
-         *   else grow by average of requested size and minCapacity.
-         * 
- *

- * For small buffers, this causes them to be about 1/2 full. - * while for large buffers, it causes them to be about 2/3 full. - *

- * For shrinkage, the only thing we do is unlink the buffer if it is empty. - * @param inc, the amount of space to grow by. Negative values mean shrink. - * Returns: condition: adjust record of count, and if any of - * the above conditions apply, allocate and copy into a new - * buffer of the appropriate size. - **/ - - private final void growBy_(int inc) - { - int needed = count + inc; - if (inc > 0) - { - /* heuristic: */ - int current = capacity(); - if (needed > current) - { - incVersion(); - int newCap = needed + (needed + minCapacity) / 2; - - if (newCap < minCapacity) - newCap = minCapacity; - - if (array is null) - { - array = new T[newCap]; - } - else - { - //T newArray[] = new T[newCap]; - //newArray[0..count] = array[0..count]; - //array = newArray; - array ~= new T[newCap - array.length]; - } - } - } - else - if (needed is 0) - array = null; - - setCount(needed); - } - - - /** - * Utility to splice in enumerations - **/ - - private final void insert_(int index, Iterator!(T) e) - { - if (cast(GuardIterator!(T)) e) - { - // we know size! - int inc = (cast(GuardIterator!(T)) (e)).remaining(); - int oldcount = count; - int oldversion = vershion; - growBy_(inc); - - for (int i = oldcount - 1; i >= index; --i) - array[i + inc] = array[i]; - - int j = index; - while (e.more()) - { - T element = e.get(); - if (!allows (element)) - { // Ugh. Can only do full rollback - for (int i = index; i < oldcount; ++i) - array[i] = array[i + inc]; - - vershion = oldversion; - count = oldcount; - checkElement(element); // force throw - } - array[j++] = element; - } - } - else - if (index is count) - { // next best; we can append - while (e.more()) - { - T element = e.get(); - checkElement(element); - growBy_(1); - array[count -1] = element; - } - } - else - { // do it the slow way - int j = index; - while (e.more()) - { - T element = e.get(); - checkElement(element); - growBy_(1); - - for (int i = count -1; i > j; --i) - array[i] = array[i - 1]; - array[j++] = element; - } - } - } - - private final void remove_(T element, bool allOccurrences) - { - if (! isValidArg(element)) - return; - - for (int i = 0; i < count; ++i) - { - while (i < count && array[i] == (element)) - { - for (int j = i + 1; j < count; ++j) - array[j - 1] = array[j]; - - array[count -1] = T.init; - growBy_( -1); - - if (!allOccurrences || count is 0) - return ; - } - } - } - - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (isValidArg(oldElement) is false || count is 0) - return; - - for (int i = 0; i < count; ++i) - { - if (array[i] == (oldElement)) - { - checkElement(newElement); - array[i] = newElement; - incVersion(); - - if (! allOccurrences) - return; - } - } - } - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - super.checkImplementation(); - assert(!(array is null && count !is 0)); - assert((array is null || count <= array.length)); - - for (int i = 0; i < count; ++i) - { - assert(allows(array[i])); - assert(instances(array[i]) > 0); - assert(contains(array[i])); - } - } - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - static class ArrayIterator(T) : AbstractIterator!(T) - { - private int row; - private T[] array; - - public this (ArraySeq seq) - { - super (seq); - array = seq.array; - } - - public final T get() - { - decRemaining(); - return array[row++]; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto array = new ArraySeq!(char[]); - array.append ("foo"); - array.append ("bar"); - array.append ("wumpus"); - - foreach (value; array.elements) {} - - auto elements = array.elements(); - while (elements.more) - auto v = elements.get(); - - foreach (value; array) - Cout (value).newline; - - auto a = array.toArray; - foreach (value; a) - Cout (value).newline; - - array.checkImplementation(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/CircularSeq.d --- a/tango/tango/util/collection/CircularSeq.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,773 +0,0 @@ -/* - File: CircularSeq.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from store.d working file - 13Oct95 dl Changed protection statuses -*/ - -module tango.util.collection.CircularSeq; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.CLCell, - tango.util.collection.impl.SeqCollection, - tango.util.collection.impl.AbstractIterator; - - -/** - * Circular linked lists. Publically Implement only those - * methods defined in interfaces. - * author: Doug Lea -**/ -public class CircularSeq(T) : SeqCollection!(T) -{ - alias CLCell!(T) CLCellT; - - alias SeqCollection!(T).remove remove; - alias SeqCollection!(T).removeAll removeAll; - - // instance variables - - /** - * The head of the list. Null if empty - **/ - package CLCellT list; - - // constructors - - /** - * Make an empty list with no element screener - **/ - public this () - { - this(null, null, 0); - } - - /** - * Make an empty list with supplied element screener - **/ - public this (Predicate screener) - { - this(screener, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - protected this (Predicate s, CLCellT h, int c) - { - super(s); - list = h; - count = c; - } - - /** - * Make an independent copy of the list. Elements themselves are not cloned - **/ - public final CircularSeq duplicate() - { - if (list is null) - return new CircularSeq (screener, null, 0); - else - return new CircularSeq (screener, list.copyList(), count); - } - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || list is null) - return false; - return list.find(element) !is null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || list is null) - return 0; - return list.count(element); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new CellIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new CellIterator!(T)(this); - return iterator.opApply (dg); - } - - - // Seq methods - - /** - * Implements tango.util.collection.model.Seq.Seq.head. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.head - **/ - public final T head() - { - return firstCell().element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.tail. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.tail - **/ - public final T tail() - { - return lastCell().element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.get. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.get - **/ - public final T get(int index) - { - return cellAt(index).element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.first. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.first - **/ - public final int first(T element, int startingIndex = 0) - { - if (startingIndex < 0) - startingIndex = 0; - - CLCellT p = list; - if (p is null || !isValidArg(element)) - return -1; - - for (int i = 0; true; ++i) - { - if (i >= startingIndex && p.element() == (element)) - return i; - - p = p.next(); - if (p is list) - break; - } - return -1; - } - - - /** - * Implements tango.util.collection.model.Seq.Seq.last. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.last - **/ - public final int last(T element, int startingIndex = 0) - { - if (!isValidArg(element) || count is 0) - return -1; - - if (startingIndex >= size()) - startingIndex = size() - 1; - - if (startingIndex < 0) - startingIndex = 0; - - CLCellT p = cellAt(startingIndex); - int i = startingIndex; - for (;;) - { - if (p.element() == (element)) - return i; - else - if (p is list) - break; - else - { - p = p.prev(); - --i; - } - } - return -1; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.subseq. - * Time complexity: O(length). - * See_Also: tango.util.collection.model.Seq.Seq.subseq - **/ - public final CircularSeq subset (int from, int _length) - { - if (_length > 0) - { - checkIndex(from); - CLCellT p = cellAt(from); - CLCellT newlist = new CLCellT(p.element()); - CLCellT current = newlist; - - for (int i = 1; i < _length; ++i) - { - p = p.next(); - if (p is null) - checkIndex(from + i); // force exception - - current.addNext(p.element()); - current = current.next(); - } - return new CircularSeq (screener, newlist, _length); - } - else - return new CircularSeq (); - } - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - list = null; - setCount(0); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.exclude. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.exclude - **/ - public final void removeAll (T element) - { - remove_(element, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove (T element) - { - remove_(element, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace (T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll (T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(1). - * takes the last element on the list. - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - auto v = tail(); - removeTail(); - return v; - } - - - - // MutableSeq methods - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(T element) - { - checkElement(element); - if (list is null) - list = new CLCellT(element); - else - list = list.addPrev(element); - incCount(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead - **/ - public final void replaceHead(T element) - { - checkElement(element); - firstCell().element(element); - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeHead. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeHead - **/ - public final void removeHead() - { - if (firstCell().isSingleton()) - list = null; - else - { - auto n = list.next(); - list.unlink(); - list = n; - } - decCount(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(T element) - { - if (list is null) - prepend(element); - else - { - checkElement(element); - list.prev().addNext(element); - incCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail - **/ - public final void replaceTail(T element) - { - checkElement(element); - lastCell().element(element); - incVersion(); - } - - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeTail. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeTail - **/ - public final void removeTail() - { - auto l = lastCell(); - if (l is list) - list = null; - else - l.unlink(); - decCount(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, T element) - { - if (index is 0) - prepend(element); - else - { - checkElement(element); - cellAt(index - 1).addNext(element); - incCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt - **/ - public final void replaceAt(int index, T element) - { - checkElement(element); - cellAt(index).element(element); - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeAt - **/ - public final void removeAt(int index) - { - if (index is 0) - removeHead(); - else - { - cellAt(index - 1).unlinkNext(); - decCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(Iterator!(T) e) - { - CLCellT hd = null; - CLCellT current = null; - - while (e.more()) - { - auto element = e.get(); - checkElement(element); - incCount(); - - if (hd is null) - { - hd = new CLCellT(element); - current = hd; - } - else - { - current.addNext(element); - current = current.next(); - } - } - - if (list is null) - list = hd; - else - if (hd !is null) - { - auto tl = list.prev(); - current.next(list); - list.prev(current); - tl.next(hd); - hd.prev(tl); - list = hd; - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: O(number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(Iterator!(T) e) - { - if (list is null) - prepend(e); - else - { - CLCellT current = list.prev(); - while (e.more()) - { - T element = e.get(); - checkElement(element); - incCount(); - current.addNext(element); - current = current.next(); - } - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(size() + number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, Iterator!(T) e) - { - if (list is null || index is 0) - prepend(e); - else - { - CLCellT current = cellAt(index - 1); - while (e.more()) - { - T element = e.get(); - checkElement(element); - incCount(); - current.addNext(element); - current = current.next(); - } - } - } - - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo - **/ - public final void removeRange (int fromIndex, int toIndex) - { - checkIndex(toIndex); - CLCellT p = cellAt(fromIndex); - CLCellT last = list.prev(); - for (int i = fromIndex; i <= toIndex; ++i) - { - decCount(); - CLCellT n = p.next(); - p.unlink(); - if (p is list) - { - if (p is last) - { - list = null; - return ; - } - else - list = n; - } - p = n; - } - } - - - // helper methods - - /** - * return the first cell, or throw exception if empty - **/ - private final CLCellT firstCell() - { - if (list !is null) - return list; - - checkIndex(0); - return null; // not reached! - } - - /** - * return the last cell, or throw exception if empty - **/ - private final CLCellT lastCell() - { - if (list !is null) - return list.prev(); - - checkIndex(0); - return null; // not reached! - } - - /** - * return the index'th cell, or throw exception if bad index - **/ - private final CLCellT cellAt(int index) - { - checkIndex(index); - return list.nth(index); - } - - /** - * helper for remove/exclude - **/ - private final void remove_(T element, bool allOccurrences) - { - if (!isValidArg(element) || list is null) - return; - - CLCellT p = list; - for (;;) - { - CLCellT n = p.next(); - if (p.element() == (element)) - { - decCount(); - p.unlink(); - if (p is list) - { - if (p is n) - { - list = null; - break; - } - else - list = n; - } - - if (! allOccurrences) - break; - else - p = n; - } - else - if (n is list) - break; - else - p = n; - } - } - - - /** - * helper for replace * - **/ - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (!isValidArg(oldElement) || list is null) - return; - - CLCellT p = list; - do { - if (p.element() == (oldElement)) - { - checkElement(newElement); - incVersion(); - p.element(newElement); - if (! allOccurrences) - return; - } - p = p.next(); - } while (p !is list); - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - - public override void checkImplementation() - { - super.checkImplementation(); - - assert(((count is 0) is (list is null))); - assert((list is null || list._length() is count)); - - if (list is null) - return; - - int c = 0; - CLCellT p = list; - do { - assert(p.prev().next() is p); - assert(p.next().prev() is p); - assert(allows(p.element())); - assert(instances(p.element()) > 0); - assert(contains(p.element())); - p = p.next(); - ++c; - } while (p !is list); - - assert(c is count); - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - static class CellIterator(T) : AbstractIterator!(T) - { - private CLCellT cell; - - public this (CircularSeq seq) - { - super (seq); - cell = seq.list; - } - - public final T get() - { - decRemaining(); - auto v = cell.element(); - cell = cell.next(); - return v; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto array = new CircularSeq!(char[]); - array.append ("foo"); - array.append ("bar"); - array.append ("wumpus"); - - foreach (value; array.elements) {} - - auto elements = array.elements(); - while (elements.more) - auto v = elements.get(); - - foreach (value; array) - Cout (value).newline; - - array.checkImplementation(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/HashMap.d --- a/tango/tango/util/collection/HashMap.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,980 +0,0 @@ -/******************************************************************************* - - File: HashMap.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collection.d working file - 13Oct95 dl Changed protection statuses - 21Oct95 dl fixed error in removeAt - 9Apr97 dl made Serializable - 14Dec06 kb Converted, templated & reshaped for Tango - -********************************************************************************/ - -module tango.util.collection.HashMap; - -private import tango.core.Exception; - -/+ -private import tango.io.protocol.model.IReader, - tango.io.protocol.model.IWriter; -+/ -private import tango.util.collection.model.HashParams, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.LLCell, - tango.util.collection.impl.LLPair, - tango.util.collection.impl.MapCollection, - tango.util.collection.impl.AbstractIterator; - -/******************************************************************************* - - Hash table implementation of Map - - author: Doug Lea - @version 0.94 - -

For an introduction to this package see Overview . - -********************************************************************************/ - - -public class HashMap(K, V) : MapCollection!(K, V), HashParams -{ - alias LLCell!(V) LLCellT; - alias LLPair!(K, V) LLPairT; - - alias MapCollection!(K, V).remove remove; - alias MapCollection!(K, V).removeAll removeAll; - - // instance variables - - /*********************************************************************** - - The table. Each entry is a list. Null if no table allocated - - ************************************************************************/ - - private LLPairT table[]; - - /*********************************************************************** - - The threshold load factor - - ************************************************************************/ - - private float loadFactor; - - - // constructors - - /*********************************************************************** - - Make a new empty map to use given element screener. - - ************************************************************************/ - - public this (Predicate screener = null) - { - this(screener, defaultLoadFactor); - } - - /*********************************************************************** - - Special version of constructor needed by clone() - - ************************************************************************/ - - protected this (Predicate s, float f) - { - super(s); - table = null; - loadFactor = f; - } - - /*********************************************************************** - - Make an independent copy of the table. Elements themselves - are not cloned. - - ************************************************************************/ - - public final HashMap!(K, V) duplicate() - { - auto c = new HashMap (screener, loadFactor); - - if (count !is 0) - { - int cap = 2 * cast(int)((count / loadFactor)) + 1; - if (cap < defaultInitialBuckets) - cap = defaultInitialBuckets; - - c.buckets(cap); - - for (int i = 0; i < table.length; ++i) - for (LLPairT p = table[i]; p !is null; p = cast(LLPairT)(p.next())) - c.add (p.key(), p.element()); - } - return c; - } - - - // HashParams methods - - /*********************************************************************** - - Implements tango.util.collection.HashParams.buckets. - Time complexity: O(1). - - See_Also: tango.util.collection.HashParams.buckets. - - ************************************************************************/ - - public final int buckets() - { - return (table is null) ? 0 : table.length; - } - - /*********************************************************************** - - Implements tango.util.collection.HashParams.buckets. - Time complexity: O(n). - - See_Also: tango.util.collection.HashParams.buckets. - - ************************************************************************/ - - public final void buckets(int newCap) - { - if (newCap is buckets()) - return ; - else - if (newCap >= 1) - resize(newCap); - else - throw new IllegalArgumentException("Invalid Hash table size"); - } - - /*********************************************************************** - - Implements tango.util.collection.HashParams.thresholdLoadfactor - Time complexity: O(1). - - See_Also: tango.util.collection.HashParams.thresholdLoadfactor - - ************************************************************************/ - - public final float thresholdLoadFactor() - { - return loadFactor; - } - - /*********************************************************************** - - Implements tango.util.collection.HashParams.thresholdLoadfactor - Time complexity: O(n). - - See_Also: tango.util.collection.HashParams.thresholdLoadfactor - - ************************************************************************/ - - public final void thresholdLoadFactor(float desired) - { - if (desired > 0.0) - { - loadFactor = desired; - checkLoadFactor(); - } - else - throw new IllegalArgumentException("Invalid Hash table load factor"); - } - - - - // View methods - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.contains. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.model.View.View.contains - - ************************************************************************/ - - public final bool contains(V element) - { - if (!isValidArg(element) || count is 0) - return false; - - for (int i = 0; i < table.length; ++i) - { - LLPairT hd = table[i]; - if (hd !is null && hd.find(element) !is null) - return true; - } - return false; - } - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.instances. - Time complexity: O(n). - - See_Also: tango.util.collection.model.View.View.instances - - ************************************************************************/ - - public final uint instances(V element) - { - if (!isValidArg(element) || count is 0) - return 0; - - uint c = 0; - for (uint i = 0; i < table.length; ++i) - { - LLPairT hd = table[i]; - if (hd !is null) - c += hd.count(element); - } - return c; - } - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.elements. - Time complexity: O(1). - - See_Also: tango.util.collection.model.View.View.elements - - ************************************************************************/ - - public final GuardIterator!(V) elements() - { - return keys(); - } - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.model.View.View.opApply - - ************************************************************************/ - - int opApply (int delegate (inout V value) dg) - { - auto scope iterator = new MapIterator!(K, V)(this); - return iterator.opApply (dg); - } - - - /*********************************************************************** - - Implements tango.util.collection.MapView.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.MapView.opApply - - ************************************************************************/ - - int opApply (int delegate (inout K key, inout V value) dg) - { - auto scope iterator = new MapIterator!(K, V)(this); - return iterator.opApply (dg); - } - - - // Map methods - - /*********************************************************************** - - Implements tango.util.collection.Map.containsKey. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.containsKey - - ************************************************************************/ - - public final bool containsKey(K key) - { - if (!isValidKey(key) || count is 0) - return false; - - LLPairT p = table[hashOf(key)]; - if (p !is null) - return p.findKey(key) !is null; - else - return false; - } - - /*********************************************************************** - - Implements tango.util.collection.Map.containsPair - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.containsPair - - ************************************************************************/ - - public final bool containsPair(K key, V element) - { - if (!isValidKey(key) || !isValidArg(element) || count is 0) - return false; - - LLPairT p = table[hashOf(key)]; - if (p !is null) - return p.find(key, element) !is null; - else - return false; - } - - /*********************************************************************** - - Implements tango.util.collection.Map.keys. - Time complexity: O(1). - - See_Also: tango.util.collection.Map.keys - - ************************************************************************/ - - public final PairIterator!(K, V) keys() - { - return new MapIterator!(K, V)(this); - } - - /*********************************************************************** - - Implements tango.util.collection.Map.get. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.at - - ************************************************************************/ - - public final V get(K key) - { - checkKey(key); - if (count !is 0) - { - LLPairT p = table[hashOf(key)]; - if (p !is null) - { - LLPairT c = p.findKey(key); - if (c !is null) - return c.element(); - } - } - throw new NoSuchElementException("no matching key"); - } - - - /*********************************************************************** - - Return the element associated with Key key. - @param key a key - Returns: whether the key is contained or not - - ************************************************************************/ - - public bool get(K key, inout V element) - { - checkKey(key); - if (count !is 0) - { - LLPairT p = table[hashOf(key)]; - if (p !is null) - { - LLPairT c = p.findKey(key); - if (c !is null) - { - element = c.element(); - return true; - } - } - } - return false; - } - - - - /*********************************************************************** - - Implements tango.util.collection.Map.keyOf. - Time complexity: O(n). - - See_Also: tango.util.collection.Map.akyOf - - ************************************************************************/ - - public final bool keyOf(inout K key, V value) - { - if (!isValidArg(value) || count is 0) - return false; - - for (int i = 0; i < table.length; ++i) - { - LLPairT hd = table[i]; - if (hd !is null) - { - auto p = (cast(LLPairT)(hd.find(value))); - if (p !is null) - { - key = p.key(); - return true; - } - } - } - return false; - } - - - // Collection methods - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.clear. - Time complexity: O(1). - - See_Also: tango.util.collection.impl.Collection.Collection.clear - - ************************************************************************/ - - public final void clear() - { - setCount(0); - table = null; - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeAll. - Time complexity: O(n). - - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - ************************************************************************/ - - public final void removeAll (V element) - { - remove_(element, true); - } - - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - Time complexity: O(n). - - See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - - ************************************************************************/ - - public final void remove (V element) - { - remove_(element, false); - } - - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.replaceOneOf. - Time complexity: O(n). - - See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - - ************************************************************************/ - - public final void replace (V oldElement, V newElement) - { - replace_(oldElement, newElement, false); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.replaceOneOf. - Time complexity: O(n). - - See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - - ************************************************************************/ - - public final void replaceAll (V oldElement, V newElement) - { - replace_(oldElement, newElement, true); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.take. - Time complexity: O(number of buckets). - - See_Also: tango.util.collection.impl.Collection.Collection.take - - ************************************************************************/ - - public final V take() - { - if (count !is 0) - { - for (int i = 0; i < table.length; ++i) - { - if (table[i] !is null) - { - decCount(); - auto v = table[i].element(); - table[i] = cast(LLPairT)(table[i].next()); - return v; - } - } - } - checkIndex(0); - return V.init; // not reached - } - - // Map methods - - /*********************************************************************** - - Implements tango.util.collection.Map.add. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.add - - ************************************************************************/ - - public final void add (K key, V element) - { - checkKey(key); - checkElement(element); - - if (table is null) - resize (defaultInitialBuckets); - - int h = hashOf(key); - LLPairT hd = table[h]; - if (hd is null) - { - table[h] = new LLPairT(key, element, hd); - incCount(); - return; - } - else - { - LLPairT p = hd.findKey(key); - if (p !is null) - { - if (p.element() != (element)) - { - p.element(element); - incVersion(); - } - } - else - { - table[h] = new LLPairT(key, element, hd); - incCount(); - checkLoadFactor(); // we only check load factor on add to nonempty bin - } - } - } - - - /*********************************************************************** - - Implements tango.util.collection.Map.remove. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.remove - - ************************************************************************/ - - public final void removeKey (K key) - { - if (!isValidKey(key) || count is 0) - return; - - int h = hashOf(key); - LLPairT hd = table[h]; - LLPairT p = hd; - LLPairT trail = p; - - while (p !is null) - { - LLPairT n = cast(LLPairT)(p.next()); - if (p.key() == (key)) - { - decCount(); - if (p is hd) - table[h] = n; - else - trail.unlinkNext(); - return; - } - else - { - trail = p; - p = n; - } - } - } - - /*********************************************************************** - - Implements tango.util.collection.Map.replaceElement. - Time complexity: O(1) average; O(n) worst. - - See_Also: tango.util.collection.Map.replaceElement - - ************************************************************************/ - - public final void replacePair (K key, V oldElement, V newElement) - { - if (!isValidKey(key) || !isValidArg(oldElement) || count is 0) - return; - - LLPairT p = table[hashOf(key)]; - if (p !is null) - { - LLPairT c = p.find(key, oldElement); - if (c !is null) - { - checkElement(newElement); - c.element(newElement); - incVersion(); - } - } - } - - // Helper methods - - /*********************************************************************** - - Check to see if we are past load factor threshold. If so, - resize so that we are at half of the desired threshold. - Also while at it, check to see if we are empty so can just - unlink table. - - ************************************************************************/ - - protected final void checkLoadFactor() - { - if (table is null) - { - if (count !is 0) - resize(defaultInitialBuckets); - } - else - { - float fc = cast(float) (count); - float ft = table.length; - - if (fc / ft > loadFactor) - { - int newCap = 2 * cast(int)(fc / loadFactor) + 1; - resize(newCap); - } - } - } - - /*********************************************************************** - - Mask off and remainder the hashCode for element - so it can be used as table index - - ************************************************************************/ - - protected final int hashOf(K key) - { - return (typeid(K).getHash(&key) & 0x7FFFFFFF) % table.length; - } - - - /*********************************************************************** - - ************************************************************************/ - - protected final void resize(int newCap) - { - LLPairT newtab[] = new LLPairT[newCap]; - - if (table !is null) - { - for (int i = 0; i < table.length; ++i) - { - LLPairT p = table[i]; - while (p !is null) - { - LLPairT n = cast(LLPairT)(p.next()); - int h = (p.keyHash() & 0x7FFFFFFF) % newCap; - p.next(newtab[h]); - newtab[h] = p; - p = n; - } - } - } - table = newtab; - incVersion(); - } - - // helpers - - /*********************************************************************** - - ************************************************************************/ - - private final void remove_(V element, bool allOccurrences) - { - if (!isValidArg(element) || count is 0) - return; - - for (int h = 0; h < table.length; ++h) - { - LLCellT hd = table[h]; - LLCellT p = hd; - LLCellT trail = p; - while (p !is null) - { - LLPairT n = cast(LLPairT)(p.next()); - if (p.element() == (element)) - { - decCount(); - if (p is table[h]) - { - table[h] = n; - trail = n; - } - else - trail.next(n); - if (! allOccurrences) - return; - else - p = n; - } - else - { - trail = p; - p = n; - } - } - } - } - - /*********************************************************************** - - ************************************************************************/ - - private final void replace_(V oldElement, V newElement, bool allOccurrences) - { - if (count is 0 || !isValidArg(oldElement) || oldElement == (newElement)) - return; - - for (int h = 0; h < table.length; ++h) - { - LLCellT hd = table[h]; - LLCellT p = hd; - LLCellT trail = p; - while (p !is null) - { - LLPairT n = cast(LLPairT)(p.next()); - if (p.element() == (oldElement)) - { - checkElement(newElement); - incVersion(); - p.element(newElement); - if (! allOccurrences) - return ; - } - trail = p; - p = n; - } - } - } - -/+ - // IReader & IWriter methods - - /*********************************************************************** - - ************************************************************************/ - - public override void read (IReader input) - { - int len; - K key; - V element; - - input (len) (loadFactor) (count); - table = (len > 0) ? new LLPairT[len] : null; - - for (len=count; len-- > 0;) - { - input (key) (element); - - int h = hashOf (key); - table[h] = new LLPairT (key, element, table[h]); - } - } - - /*********************************************************************** - - ************************************************************************/ - - public override void write (IWriter output) - { - output (table.length) (loadFactor) (count); - - if (table.length > 0) - foreach (key, value; keys) - output (key) (value); - } - -+/ - // ImplementationCheckable methods - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.checkImplementation. - - See_Also: tango.util.collection.model.View.View.checkImplementation - - ************************************************************************/ - - public override void checkImplementation() - { - super.checkImplementation(); - - assert(!(table is null && count !is 0)); - assert((table is null || table.length > 0)); - assert(loadFactor > 0.0f); - - if (table is null) - return; - - int c = 0; - for (int i = 0; i < table.length; ++i) - { - for (LLPairT p = table[i]; p !is null; p = cast(LLPairT)(p.next())) - { - ++c; - assert(allows(p.element())); - assert(allowsKey(p.key())); - assert(containsKey(p.key())); - assert(contains(p.element())); - assert(instances(p.element()) >= 1); - assert(containsPair(p.key(), p.element())); - assert(hashOf(p.key()) is i); - } - } - assert(c is count); - - - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class MapIterator(K, V) : AbstractMapIterator!(K, V) - { - private int row; - private LLPairT pair; - private LLPairT[] table; - - public this (HashMap map) - { - super (map); - table = map.table; - } - - public final V get(inout K key) - { - auto v = get(); - key = pair.key; - return v; - } - - public final V get() - { - decRemaining(); - - if (pair) - pair = cast(LLPairT) pair.next(); - - while (pair is null) - pair = table [row++]; - - return pair.element(); - } - - int opApply (int delegate (inout V value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - - int opApply (int delegate (inout K key, inout V value) dg) - { - K key; - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(key); - if ((result = dg(key, value)) != 0) - break; - } - return result; - } - } -} - - -debug(Test) -{ - import tango.io.Console; - - void main() - { - auto map = new HashMap!(char[], double); - map.add ("foo", 3.14); - map.add ("bar", 6.28); - - foreach (key, value; map.keys) {typeof(key) x; x = key;} - - foreach (value; map.keys) {} - - foreach (value; map.elements) {} - - auto keys = map.keys(); - while (keys.more) - auto v = keys.get(); - - foreach (value; map) {} - - foreach (key, value; map) - Cout (key).newline; - - map.checkImplementation(); - - Cout (map).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/HashSet.d --- a/tango/tango/util/collection/HashSet.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,577 +0,0 @@ -/* - File: HashSet.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.HashSet; - -private import tango.core.Exception; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.HashParams, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.LLCell, - tango.util.collection.impl.SetCollection, - tango.util.collection.impl.AbstractIterator; - - -/** - * - * Hash table implementation of set - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class HashSet(T) : SetCollection!(T), HashParams -{ - private alias LLCell!(T) LLCellT; - - alias SetCollection!(T).remove remove; - alias SetCollection!(T).removeAll removeAll; - - - // instance variables - - /** - * The table. Each entry is a list. Null if no table allocated - **/ - private LLCellT table[]; - /** - * The threshold load factor - **/ - private float loadFactor; - - - // constructors - - /** - * Make an empty HashedSet. - **/ - - public this () - { - this(null, defaultLoadFactor); - } - - /** - * Make an empty HashedSet using given element screener - **/ - - public this (Predicate screener) - { - this(screener, defaultLoadFactor); - } - - /** - * Special version of constructor needed by clone() - **/ - - protected this (Predicate s, float f) - { - super(s); - table = null; - loadFactor = f; - } - - /** - * Make an independent copy of the table. Does not clone elements. - **/ - - public final HashSet duplicate() - { - auto c = new HashSet (screener, loadFactor); - - if (count !is 0) - { - int cap = 2 * cast(int)(count / loadFactor) + 1; - if (cap < defaultInitialBuckets) - cap = defaultInitialBuckets; - - c.buckets(cap); - for (int i = 0; i < table.length; ++i) - for (LLCellT p = table[i]; p !is null; p = p.next()) - c.add(p.element()); - } - return c; - } - - - // HashTableParams methods - - /** - * Implements tango.util.collection.HashTableParams.buckets. - * Time complexity: O(1). - * See_Also: tango.util.collection.HashTableParams.buckets. - **/ - - public final int buckets() - { - return (table is null) ? 0 : table.length; - } - - /** - * Implements tango.util.collection.HashTableParams.buckets. - * Time complexity: O(n). - * See_Also: tango.util.collection.HashTableParams.buckets. - **/ - - public final void buckets(int newCap) - { - if (newCap is buckets()) - return ; - else - if (newCap >= 1) - resize(newCap); - else - { - char[16] tmp; - throw new IllegalArgumentException("Impossible Hash table size:" ~ itoa(tmp, newCap)); - } - } - - /** - * Implements tango.util.collection.HashTableParams.thresholdLoadfactor - * Time complexity: O(1). - * See_Also: tango.util.collection.HashTableParams.thresholdLoadfactor - **/ - - public final float thresholdLoadFactor() - { - return loadFactor; - } - - /** - * Implements tango.util.collection.HashTableParams.thresholdLoadfactor - * Time complexity: O(n). - * See_Also: tango.util.collection.HashTableParams.thresholdLoadfactor - **/ - - public final void thresholdLoadFactor(float desired) - { - if (desired > 0.0) - { - loadFactor = desired; - checkLoadFactor(); - } - else - throw new IllegalArgumentException("Invalid Hash table load factor"); - } - - - - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(1) average; O(n) worst. - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || count is 0) - return false; - - LLCellT p = table[hashOf(element)]; - if (p !is null) - return p.find(element) !is null; - else - return false; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (contains(element)) - return 1; - else - return 0; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new CellIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new CellIterator!(T)(this); - return iterator.opApply (dg); - } - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - setCount(0); - table = null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.exclude. - * Time complexity: O(1) average; O(n) worst. - * See_Also: tango.util.collection.impl.Collection.Collection.exclude - **/ - public final void removeAll(T element) - { - remove(element); - } - - public final void remove(T element) - { - if (!isValidArg(element) || count is 0) - return ; - - int h = hashOf(element); - LLCellT hd = table[h]; - LLCellT p = hd; - LLCellT trail = p; - - while (p !is null) - { - LLCellT n = p.next(); - if (p.element() == (element)) - { - decCount(); - if (p is table[h]) - { - table[h] = n; - trail = n; - } - else - trail.next(n); - return ; - } - else - { - trail = p; - p = n; - } - } - } - - public final void replace(T oldElement, T newElement) - { - - if (count is 0 || !isValidArg(oldElement) || oldElement == (newElement)) - return ; - - if (contains(oldElement)) - { - checkElement(newElement); - remove(oldElement); - add(newElement); - } - } - - public final void replaceAll(T oldElement, T newElement) - { - replace(oldElement, newElement); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(number of buckets). - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - if (count !is 0) - { - for (int i = 0; i < table.length; ++i) - { - if (table[i] !is null) - { - decCount(); - auto v = table[i].element(); - table[i] = table[i].next(); - return v; - } - } - } - - checkIndex(0); - return T.init; // not reached - } - - - // MutableSet methods - - /** - * Implements tango.util.collection.impl.SetCollection.SetCollection.add. - * Time complexity: O(1) average; O(n) worst. - * See_Also: tango.util.collection.impl.SetCollection.SetCollection.add - **/ - public final void add(T element) - { - checkElement(element); - - if (table is null) - resize(defaultInitialBuckets); - - int h = hashOf(element); - LLCellT hd = table[h]; - if (hd !is null && hd.find(element) !is null) - return ; - - LLCellT n = new LLCellT(element, hd); - table[h] = n; - incCount(); - - if (hd !is null) - checkLoadFactor(); // only check if bin was nonempty - } - - - - // Helper methods - - /** - * Check to see if we are past load factor threshold. If so, resize - * so that we are at half of the desired threshold. - * Also while at it, check to see if we are empty so can just - * unlink table. - **/ - protected final void checkLoadFactor() - { - if (table is null) - { - if (count !is 0) - resize(defaultInitialBuckets); - } - else - { - float fc = cast(float) (count); - float ft = table.length; - if (fc / ft > loadFactor) - { - int newCap = 2 * cast(int)(fc / loadFactor) + 1; - resize(newCap); - } - } - } - - /** - * Mask off and remainder the hashCode for element - * so it can be used as table index - **/ - - protected final int hashOf(T element) - { - return (typeid(T).getHash(&element) & 0x7FFFFFFF) % table.length; - } - - - /** - * resize table to new capacity, rehashing all elements - **/ - protected final void resize(int newCap) - { - LLCellT newtab[] = new LLCellT[newCap]; - - if (table !is null) - { - for (int i = 0; i < table.length; ++i) - { - LLCellT p = table[i]; - while (p !is null) - { - LLCellT n = p.next(); - int h = (p.elementHash() & 0x7FFFFFFF) % newCap; - p.next(newtab[h]); - newtab[h] = p; - p = n; - } - } - } - - table = newtab; - incVersion(); - } - - /+ - private final void readObject(java.io.ObjectInputStream stream) - - { - int len = stream.readInt(); - - if (len > 0) - table = new LLCellT[len]; - else - table = null; - - loadFactor = stream.readFloat(); - int count = stream.readInt(); - - while (count-- > 0) - { - T element = stream.readObject(); - int h = hashOf(element); - LLCellT hd = table[h]; - LLCellT n = new LLCellT(element, hd); - table[h] = n; - } - } - - private final void writeObject(java.io.ObjectOutputStream stream) - { - int len; - - if (table !is null) - len = table.length; - else - len = 0; - - stream.writeInt(len); - stream.writeFloat(loadFactor); - stream.writeInt(count); - - if (len > 0) - { - Iterator e = elements(); - while (e.more()) - stream.writeObject(e.value()); - } - } - - +/ - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - super.checkImplementation(); - - assert(!(table is null && count !is 0)); - assert((table is null || table.length > 0)); - assert(loadFactor > 0.0f); - - if (table !is null) - { - int c = 0; - for (int i = 0; i < table.length; ++i) - { - for (LLCellT p = table[i]; p !is null; p = p.next()) - { - ++c; - assert(allows(p.element())); - assert(contains(p.element())); - assert(instances(p.element()) is 1); - assert(hashOf(p.element()) is i); - } - } - assert(c is count); - } - } - - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class CellIterator(T) : AbstractIterator!(T) - { - private int row; - private LLCellT cell; - private LLCellT[] table; - - public this (HashSet set) - { - super (set); - table = set.table; - } - - public final T get() - { - decRemaining(); - - while (cell is null) - cell = table [row++]; - - auto v = cell.element(); - cell = cell.next(); - return v; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto set = new HashSet!(char[]); - set.add ("foo"); - set.add ("bar"); - set.add ("wumpus"); - - foreach (value; set.elements) {} - - auto elements = set.elements(); - while (elements.more) - auto v = elements.get(); - - set.checkImplementation(); - - foreach (value; set) - Cout (value).newline; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/LinkMap.d --- a/tango/tango/util/collection/LinkMap.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,583 +0,0 @@ -/* - File: LinkMap.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - 21Oct95 dl Fixed error in remove - -*/ - - -module tango.util.collection.LinkMap; - -private import tango.core.Exception; - -private import tango.io.protocol.model.IReader, - tango.io.protocol.model.IWriter; - -private import tango.util.collection.model.View, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.LLCell, - tango.util.collection.impl.LLPair, - tango.util.collection.impl.MapCollection, - tango.util.collection.impl.AbstractIterator; - -/** - * Linked lists of (key, element) pairs - * author: Doug Lea -**/ -public class LinkMap(K, T) : MapCollection!(K, T) // , IReadable, IWritable -{ - alias LLCell!(T) LLCellT; - alias LLPair!(K, T) LLPairT; - - alias MapCollection!(K, T).remove remove; - alias MapCollection!(K, T) .removeAll removeAll; - - // instance variables - - /** - * The head of the list. Null if empty - **/ - - package LLPairT list; - - // constructors - - /** - * Make an empty list - **/ - - public this () - { - this(null, null, 0); - } - - /** - * Make an empty list with the supplied element screener - **/ - - public this (Predicate screener) - { - this(screener, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - protected this (Predicate s, LLPairT l, int c) - { - super(s); - list = l; - count = c; - } - - /** - * Make an independent copy of the list. Does not clone elements - **/ - - public LinkMap duplicate() - { - if (list is null) - return new LinkMap (screener, null, 0); - else - return new LinkMap (screener, cast(LLPairT)(list.copyList()), count); - } - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || list is null) - return false; - - return list.find(element) !is null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || list is null) - return 0; - - return list.count(element); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return keys(); - } - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.model.View.View.opApply - - ************************************************************************/ - - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new MapIterator!(K, T)(this); - return iterator.opApply (dg); - } - - - /*********************************************************************** - - Implements tango.util.collection.MapView.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.MapView.opApply - - ************************************************************************/ - - int opApply (int delegate (inout K key, inout T value) dg) - { - auto scope iterator = new MapIterator!(K, T)(this); - return iterator.opApply (dg); - } - - - // Map methods - - - /** - * Implements tango.util.collection.Map.containsKey. - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.containsKey - **/ - public final bool containsKey(K key) - { - if (!isValidKey(key) || list is null) - return false; - - return list.findKey(key) !is null; - } - - /** - * Implements tango.util.collection.Map.containsPair - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.containsPair - **/ - public final bool containsPair(K key, T element) - { - if (!isValidKey(key) || !isValidArg(element) || list is null) - return false; - return list.find(key, element) !is null; - } - - /** - * Implements tango.util.collection.Map.keys. - * Time complexity: O(1). - * See_Also: tango.util.collection.Map.keys - **/ - public final PairIterator!(K, T) keys() - { - return new MapIterator!(K, T)(this); - } - - /** - * Implements tango.util.collection.Map.get. - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.get - **/ - public final T get(K key) - { - checkKey(key); - if (list !is null) - { - auto p = list.findKey(key); - if (p !is null) - return p.element(); - } - throw new NoSuchElementException("no matching Key"); - } - - /** - * Return the element associated with Key key. - * Params: - * key = a key - * Returns: whether the key is contained or not - **/ - - public final bool get(K key, inout T element) - { - checkKey(key); - if (list !is null) - { - auto p = list.findKey(key); - if (p !is null) - { - element = p.element(); - return true; - } - } - return false; - } - - - - /** - * Implements tango.util.collection.Map.keyOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.keyOf - **/ - public final bool keyOf(inout K key, T value) - { - if (!isValidArg(value) || count is 0) - return false; - - auto p = (cast(LLPairT)(list.find(value))); - if (p is null) - return false; - - key = p.key(); - return true; - } - - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - list = null; - setCount(0); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace (T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeAll. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeAll - **/ - public final void removeAll(T element) - { - remove_(element, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove(T element) - { - remove_(element, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(1). - * takes the first element on the list - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - if (list !is null) - { - auto v = list.element(); - list = cast(LLPairT)(list.next()); - decCount(); - return v; - } - checkIndex(0); - return T.init; // not reached - } - - - // MutableMap methods - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.add. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.add - **/ - public final void add (K key, T element) - { - checkKey(key); - checkElement(element); - - if (list !is null) - { - auto p = list.findKey(key); - if (p !is null) - { - if (p.element() != (element)) - { - p.element(element); - incVersion(); - } - return ; - } - } - list = new LLPairT(key, element, list); - incCount(); - } - - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.remove. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.remove - **/ - public final void removeKey (K key) - { - if (!isValidKey(key) || list is null) - return ; - - auto p = list; - auto trail = p; - - while (p !is null) - { - auto n = cast(LLPairT)(p.next()); - if (p.key() == (key)) - { - decCount(); - if (p is list) - list = n; - else - trail.unlinkNext(); - return ; - } - else - { - trail = p; - p = n; - } - } - } - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.replaceElement. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.replaceElement - **/ - public final void replacePair (K key, T oldElement, T newElement) - { - if (!isValidKey(key) || !isValidArg(oldElement) || list is null) - return ; - - auto p = list.find(key, oldElement); - if (p !is null) - { - checkElement(newElement); - p.element(newElement); - incVersion(); - } - } - - private final void remove_(T element, bool allOccurrences) - { - if (!isValidArg(element) || count is 0) - return ; - - auto p = list; - auto trail = p; - - while (p !is null) - { - auto n = cast(LLPairT)(p.next()); - if (p.element() == (element)) - { - decCount(); - if (p is list) - { - list = n; - trail = n; - } - else - trail.next(n); - - if (!allOccurrences || count is 0) - return ; - else - p = n; - } - else - { - trail = p; - p = n; - } - } - } - - /** - * Helper for replace - **/ - - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (list is null || !isValidArg(oldElement) || oldElement == (newElement)) - return ; - - auto p = list.find(oldElement); - while (p !is null) - { - checkElement(newElement); - p.element(newElement); - incVersion(); - if (!allOccurrences) - return ; - p = p.find(oldElement); - } - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - super.checkImplementation(); - - assert(((count is 0) is (list is null))); - assert((list is null || list._length() is count)); - - for (auto p = list; p !is null; p = cast(LLPairT)(p.next())) - { - assert(allows(p.element())); - assert(allowsKey(p.key())); - assert(containsKey(p.key())); - assert(contains(p.element())); - assert(instances(p.element()) >= 1); - assert(containsPair(p.key(), p.element())); - } - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class MapIterator(K, V) : AbstractMapIterator!(K, V) - { - private LLPairT pair; - - public this (LinkMap map) - { - super (map); - pair = map.list; - } - - public final V get(inout K key) - { - if (pair) - key = pair.key; - return get(); - } - - public final V get() - { - decRemaining(); - auto v = pair.element(); - pair = cast(LLPairT) pair.next(); - return v; - } - - int opApply (int delegate (inout V value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - - int opApply (int delegate (inout K key, inout V value) dg) - { - K key; - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(key); - if ((result = dg(key, value)) != 0) - break; - } - return result; - } - } -} - - - -debug(Test) -{ - void main() - { - auto map = new LinkMap!(Object, double); - - foreach (key, value; map.keys) {typeof(key) x; x = key;} - - foreach (value; map.keys) {} - - foreach (value; map.elements) {} - - auto keys = map.keys(); - while (keys.more) - auto v = keys.get(); - - foreach (value; map) {} - foreach (key, value; map) {} - - map.checkImplementation(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/LinkSeq.d --- a/tango/tango/util/collection/LinkSeq.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,769 +0,0 @@ -/* - File: LinkSeq.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 2Oct95 dl@cs.oswego.edu repack from LLSeq.d - 9apr97 dl insert bounds check in first -*/ - - -module tango.util.collection.LinkSeq; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.Sortable, - tango.util.collection.model.Comparator, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.LLCell, - tango.util.collection.impl.SeqCollection, - tango.util.collection.impl.AbstractIterator; - -/** - * - * LinkedList implementation. - * Publically implements only those methods defined in its interfaces. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class LinkSeq(T) : SeqCollection!(T), Sortable!(T) -{ - alias LLCell!(T) LLCellT; - - alias SeqCollection!(T).remove remove; - alias SeqCollection!(T).removeAll removeAll; - - // instance variables - - /** - * The head of the list. Null iff count == 0 - **/ - - package LLCellT list; - - // constructors - - /** - * Create a new empty list - **/ - - public this () - { - this(null, null, 0); - } - - /** - * Create a list with a given element screener - **/ - - public this (Predicate screener) - { - this(screener, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - - protected this (Predicate s, LLCellT l, int c) - { - super(s); - list = l; - count = c; - } - - /** - * Build an independent copy of the list. - * The elements themselves are not cloned - **/ - - // protected Object clone() { - public LinkSeq duplicate() - { - if (list is null) - return new LinkSeq(screener, null, 0); - else - return new LinkSeq(screener, list.copyList(), count); - } - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || count is 0) - return false; - - return list.find(element) !is null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || count is 0) - return 0; - - return list.count(element); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new CellIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new CellIterator!(T)(this); - return iterator.opApply (dg); - } - - - // Seq Methods - - /** - * Implements tango.util.collection.model.Seq.Seq.head. - * Time complexity: O(1). - * See_Also: tango.util.collection.model.Seq.Seq.head - **/ - public final T head() - { - return firstCell().element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.tail. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.tail - **/ - public final T tail() - { - return lastCell().element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.get. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.get - **/ - public final T get(int index) - { - return cellAt(index).element(); - } - - /** - * Implements tango.util.collection.model.Seq.Seq.first. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.first - **/ - public final int first(T element, int startingIndex = 0) - { - if (!isValidArg(element) || list is null || startingIndex >= count) - return -1; - - if (startingIndex < 0) - startingIndex = 0; - - LLCellT p = list.nth(startingIndex); - if (p !is null) - { - int i = p.index(element); - if (i >= 0) - return i + startingIndex; - } - return -1; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.last. - * Time complexity: O(n). - * See_Also: tango.util.collection.model.Seq.Seq.last - **/ - public final int last(T element, int startingIndex = 0) - { - if (!isValidArg(element) || list is null) - return -1; - - int i = 0; - if (startingIndex >= size()) - startingIndex = size() - 1; - - int index = -1; - LLCellT p = list; - while (i <= startingIndex && p !is null) - { - if (p.element() == (element)) - index = i; - ++i; - p = p.next(); - } - return index; - } - - - - /** - * Implements tango.util.collection.model.Seq.Seq.subseq. - * Time complexity: O(length). - * See_Also: tango.util.collection.model.Seq.Seq.subseq - **/ - public final LinkSeq subset(int from, int _length) - { - if (_length > 0) - { - LLCellT p = cellAt(from); - LLCellT newlist = new LLCellT(p.element(), null); - LLCellT current = newlist; - - for (int i = 1; i < _length; ++i) - { - p = p.next(); - if (p is null) - checkIndex(from + i); // force exception - - current.linkNext(new LLCellT(p.element(), null)); - current = current.next(); - } - return new LinkSeq!(T)(screener, newlist, _length); - } - else - return new LinkSeq!(T)(screener, null, 0); - } - - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - if (list !is null) - { - list = null; - setCount(0); - } - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.exclude. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.exclude - **/ - public final void removeAll (T element) - { - remove_(element, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove (T element) - { - remove_(element, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace (T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(1). - * takes the first element on the list - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - T v = head(); - removeHead(); - return v; - } - - // Sortable methods - - /** - * Implements tango.util.collection.Sortable.sort. - * Time complexity: O(n log n). - * Uses a merge-sort-based algorithm. - * See_Also: tango.util.collection.SortableCollection.sort - **/ - public final void sort(Comparator!(T) cmp) - { - if (list !is null) - { - list = LLCellT.mergeSort(list, cmp); - incVersion(); - } - } - - - // MutableSeq methods - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(T element) - { - checkElement(element); - list = new LLCellT(element, list); - incCount(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceHead - **/ - public final void replaceHead(T element) - { - checkElement(element); - firstCell().element(element); - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeHead. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeHead - **/ - public final void removeHead() - { - list = firstCell().next(); - decCount(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(T element) - { - checkElement(element); - if (list is null) - prepend(element); - else - { - list.tail().next(new LLCellT(element)); - incCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceTail - **/ - public final void replaceTail(T element) - { - checkElement(element); - lastCell().element(element); - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeTail. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeTail - **/ - public final void removeTail() - { - if (firstCell().next() is null) - removeHead(); - else - { - LLCellT trail = list; - LLCellT p = trail.next(); - - while (p.next() !is null) - { - trail = p; - p = p.next(); - } - trail.next(null); - decCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, T element) - { - if (index is 0) - prepend(element); - else - { - checkElement(element); - cellAt(index - 1).linkNext(new LLCellT(element)); - incCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeAt - **/ - public final void removeAt(int index) - { - if (index is 0) - removeHead(); - else - { - cellAt(index - 1).unlinkNext(); - decCount(); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.replaceAt - **/ - public final void replaceAt(int index, T element) - { - cellAt(index).element(element); - incVersion(); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.prepend. - * Time complexity: O(number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.prepend - **/ - public final void prepend(Iterator!(T) e) - { - splice_(e, null, list); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.append. - * Time complexity: O(n + number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.append - **/ - public final void append(Iterator!(T) e) - { - if (list is null) - splice_(e, null, null); - else - splice_(e, list.tail(), null); - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.addAt. - * Time complexity: O(n + number of elements in e). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.addAt - **/ - public final void addAt(int index, Iterator!(T) e) - { - if (index is 0) - splice_(e, null, list); - else - { - LLCellT p = cellAt(index - 1); - splice_(e, p, p.next()); - } - } - - /** - * Implements tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.SeqCollection.SeqCollection.removeFromTo - **/ - public final void removeRange (int fromIndex, int toIndex) - { - checkIndex(toIndex); - - if (fromIndex <= toIndex) - { - if (fromIndex is 0) - { - LLCellT p = firstCell(); - for (int i = fromIndex; i <= toIndex; ++i) - p = p.next(); - list = p; - } - else - { - LLCellT f = cellAt(fromIndex - 1); - LLCellT p = f; - for (int i = fromIndex; i <= toIndex; ++i) - p = p.next(); - f.next(p.next()); - } - addToCount( -(toIndex - fromIndex + 1)); - } - } - - - - // helper methods - - private final LLCellT firstCell() - { - if (list !is null) - return list; - - checkIndex(0); - return null; // not reached! - } - - private final LLCellT lastCell() - { - if (list !is null) - return list.tail(); - - checkIndex(0); - return null; // not reached! - } - - private final LLCellT cellAt(int index) - { - checkIndex(index); - return list.nth(index); - } - - /** - * Helper method for removeOneOf() - **/ - - private final void remove_(T element, bool allOccurrences) - { - if (!isValidArg(element) || count is 0) - return ; - - LLCellT p = list; - LLCellT trail = p; - - while (p !is null) - { - LLCellT n = p.next(); - if (p.element() == (element)) - { - decCount(); - if (p is list) - { - list = n; - trail = n; - } - else - trail.next(n); - - if (!allOccurrences || count is 0) - return ; - else - p = n; - } - else - { - trail = p; - p = n; - } - } - } - - - /** - * Helper for replace - **/ - - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (count is 0 || !isValidArg(oldElement) || oldElement == (newElement)) - return ; - - LLCellT p = list.find(oldElement); - while (p !is null) - { - checkElement(newElement); - p.element(newElement); - incVersion(); - if (!allOccurrences) - return ; - p = p.find(oldElement); - } - } - - /** - * Splice elements of e between hd and tl. if hd is null return new hd - **/ - - private final void splice_(Iterator!(T) e, LLCellT hd, LLCellT tl) - { - if (e.more()) - { - LLCellT newlist = null; - LLCellT current = null; - - while (e.more()) - { - T v = e.get(); - checkElement(v); - incCount(); - - LLCellT p = new LLCellT(v, null); - if (newlist is null) - newlist = p; - else - current.next(p); - current = p; - } - - if (current !is null) - current.next(tl); - - if (hd is null) - list = newlist; - else - hd.next(newlist); - } - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - - super.checkImplementation(); - - assert(((count is 0) is (list is null))); - assert((list is null || list._length() is count)); - - int c = 0; - for (LLCellT p = list; p !is null; p = p.next()) - { - assert(allows(p.element())); - assert(instances(p.element()) > 0); - assert(contains(p.element())); - ++c; - } - assert(c is count); - - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class CellIterator(T) : AbstractIterator!(T) - { - private LLCellT cell; - - public this (LinkSeq seq) - { - super (seq); - cell = seq.list; - } - - public final T get() - { - decRemaining(); - auto v = cell.element(); - cell = cell.next(); - return v; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto seq = new LinkSeq!(char[]); - seq.append ("foo"); - seq.append ("wumpus"); - seq.append ("bar"); - - foreach (value; seq.elements) {} - - auto elements = seq.elements(); - while (elements.more) - auto v = elements.get(); - - foreach (value; seq) - Cout (value).newline; - - seq.checkImplementation(); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/TreeBag.d --- a/tango/tango/util/collection/TreeBag.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,493 +0,0 @@ -/* - File: TreeBag.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.TreeBag; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.Comparator, - tango.util.collection.model.SortedValues, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.RBCell, - tango.util.collection.impl.BagCollection, - tango.util.collection.impl.AbstractIterator, - tango.util.collection.impl.DefaultComparator; - -/** - * RedBlack trees. - * author: Doug Lea -**/ - -public class TreeBag(T) : BagCollection!(T), SortedValues!(T) -{ - alias RBCell!(T) RBCellT; - alias Comparator!(T) ComparatorT; - - alias BagCollection!(T).remove remove; - alias BagCollection!(T).removeAll removeAll; - - - // instance variables - - /** - * The root of the tree. Null if empty. - **/ - - package RBCellT tree; - - /** - * The comparator to use for ordering. - **/ - protected ComparatorT cmp_; - - // constructors - - /** - * Make an empty tree. - * Initialize to use DefaultComparator for ordering - **/ - public this () - { - this(null, null, null, 0); - } - - /** - * Make an empty tree, using the supplied element screener. - * Initialize to use DefaultComparator for ordering - **/ - - public this (Predicate s) - { - this(s, null, null, 0); - } - - /** - * Make an empty tree, using the supplied element comparator for ordering. - **/ - public this (ComparatorT c) - { - this(null, c, null, 0); - } - - /** - * Make an empty tree, using the supplied element screener and comparator - **/ - public this (Predicate s, ComparatorT c) - { - this(s, c, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - - protected this (Predicate s, ComparatorT cmp, RBCellT t, int n) - { - super(s); - count = n; - tree = t; - if (cmp !is null) - cmp_ = cmp; - else - cmp_ = new DefaultComparator!(T); - } - - /** - * Make an independent copy of the tree. Does not clone elements. - **/ - - public TreeBag duplicate() - { - if (count is 0) - return new TreeBag!(T)(screener, cmp_); - else - return new TreeBag!(T)(screener, cmp_, tree.copyTree(), count); - } - - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || count is 0) - return false; - - return tree.find(element, cmp_) !is null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || count is 0) - return 0; - - return tree.count(element, cmp_); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return new CellIterator!(T)(this); - } - - /** - * Implements tango.util.collection.model.View.View.opApply - * Time complexity: O(n). - * See_Also: tango.util.collection.model.View.View.opApply - **/ - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new CellIterator!(T)(this); - return iterator.opApply (dg); - } - - - // ElementSortedCollection methods - - - /** - * Implements tango.util.collection.ElementSortedCollection.comparator - * Time complexity: O(1). - * See_Also: tango.util.collection.ElementSortedCollection.comparator - **/ - public final ComparatorT comparator() - { - return cmp_; - } - - /** - * Reset the comparator. Will cause a reorganization of the tree. - * Time complexity: O(n log n). - **/ - public final void comparator(ComparatorT cmp) - { - if (cmp !is cmp_) - { - if (cmp !is null) - cmp_ = cmp; - else - cmp_ = new DefaultComparator!(T); - - if (count !is 0) - { // must rebuild tree! - incVersion(); - RBCellT t = tree.leftmost(); - tree = null; - count = 0; - while (t !is null) - { - add_(t.element(), false); - t = t.successor(); - } - } - } - } - - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - setCount(0); - tree = null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeAll. - * Time complexity: O(log n * instances(element)). - * See_Also: tango.util.collection.impl.Collection.Collection.removeAll - **/ - public final void removeAll(T element) - { - remove_(element, true); - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove(T element) - { - remove_(element, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace(T oldElement, T newElement) - { - replace_(oldElement, newElement, false); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(log n * instances(oldElement)). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - replace_(oldElement, newElement, true); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(log n). - * Takes the least element. - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - if (count !is 0) - { - RBCellT p = tree.leftmost(); - T v = p.element(); - tree = p.remove(tree); - decCount(); - return v; - } - - checkIndex(0); - return T.init; // not reached - } - - - // MutableBag methods - - /** - * Implements tango.util.collection.MutableBag.addIfAbsent - * Time complexity: O(log n). - * See_Also: tango.util.collection.MutableBag.addIfAbsent - **/ - public final void addIf (T element) - { - add_(element, true); - } - - - /** - * Implements tango.util.collection.MutableBag.add. - * Time complexity: O(log n). - * See_Also: tango.util.collection.MutableBag.add - **/ - public final void add (T element) - { - add_(element, false); - } - - - // helper methods - - private final void add_(T element, bool checkOccurrence) - { - checkElement(element); - - if (tree is null) - { - tree = new RBCellT(element); - incCount(); - } - else - { - RBCellT t = tree; - - for (;;) - { - int diff = cmp_.compare(element, t.element()); - if (diff is 0 && checkOccurrence) - return ; - else - if (diff <= 0) - { - if (t.left() !is null) - t = t.left(); - else - { - tree = t.insertLeft(new RBCellT(element), tree); - incCount(); - return ; - } - } - else - { - if (t.right() !is null) - t = t.right(); - else - { - tree = t.insertRight(new RBCellT(element), tree); - incCount(); - return ; - } - } - } - } - } - - - private final void remove_(T element, bool allOccurrences) - { - if (!isValidArg(element)) - return ; - - while (count > 0) - { - RBCellT p = tree.find(element, cmp_); - - if (p !is null) - { - tree = p.remove(tree); - decCount(); - if (!allOccurrences) - return ; - } - else - break; - } - } - - private final void replace_(T oldElement, T newElement, bool allOccurrences) - { - if (!isValidArg(oldElement) || count is 0 || oldElement == newElement) - return ; - - while (contains(oldElement)) - { - remove(oldElement); - add (newElement); - if (!allOccurrences) - return ; - } - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - - super.checkImplementation(); - assert(cmp_ !is null); - assert(((count is 0) is (tree is null))); - assert((tree is null || tree.size() is count)); - - if (tree !is null) - { - tree.checkImplementation(); - T last = T.init; - RBCellT t = tree.leftmost(); - while (t !is null) - { - T v = t.element(); - if (last !is T.init) - assert(cmp_.compare(last, v) <= 0); - last = v; - t = t.successor(); - } - } - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class CellIterator(T) : AbstractIterator!(T) - { - private RBCellT cell; - - public this (TreeBag bag) - { - super(bag); - - if (bag.tree) - cell = bag.tree.leftmost; - } - - public final T get() - { - decRemaining(); - auto v = cell.element(); - cell = cell.successor(); - return v; - } - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - } -} - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto bag = new TreeBag!(char[]); - bag.add ("bar"); - bag.add ("barrel"); - bag.add ("foo"); - - foreach (value; bag.elements) {} - - auto elements = bag.elements(); - while (elements.more) - auto v = elements.get(); - - foreach (value; bag.elements) - Cout (value).newline; - - bag.checkImplementation(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/TreeMap.d --- a/tango/tango/util/collection/TreeMap.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,672 +0,0 @@ -/* - File: TreeMap.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.TreeMap; - -private import tango.core.Exception; - -private import tango.util.collection.model.Comparator, - tango.util.collection.model.SortedKeys, - tango.util.collection.model.GuardIterator; - -private import tango.util.collection.impl.RBPair, - tango.util.collection.impl.RBCell, - tango.util.collection.impl.MapCollection, - tango.util.collection.impl.AbstractIterator, - tango.util.collection.impl.DefaultComparator; - - -/** - * - * - * RedBlack Trees of (key, element) pairs - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - - -public class TreeMap(K, T) : MapCollection!(K, T), SortedKeys!(K, T) -{ - alias RBCell!(T) RBCellT; - alias RBPair!(K, T) RBPairT; - alias Comparator!(K) ComparatorT; - alias GuardIterator!(T) GuardIteratorT; - - alias MapCollection!(K, T).remove remove; - alias MapCollection!(K, T).removeAll removeAll; - - - // instance variables - - /** - * The root of the tree. Null if empty. - **/ - - package RBPairT tree; - - /** - * The Comparator to use for ordering - **/ - - protected ComparatorT cmp; - protected Comparator!(T) cmpElem; - - /** - * Make an empty tree, using DefaultComparator for ordering - **/ - - public this () - { - this (null, null, null, 0); - } - - - /** - * Make an empty tree, using given screener for screening elements (not keys) - **/ - public this (Predicate screener) - { - this(screener, null, null, 0); - } - - /** - * Make an empty tree, using given Comparator for ordering - **/ - public this (ComparatorT c) - { - this(null, c, null, 0); - } - - /** - * Make an empty tree, using given screener and Comparator. - **/ - public this (Predicate s, ComparatorT c) - { - this(s, c, null, 0); - } - - /** - * Special version of constructor needed by clone() - **/ - - protected this (Predicate s, ComparatorT c, RBPairT t, int n) - { - super(s); - count = n; - tree = t; - cmp = (c is null) ? new DefaultComparator!(K) : c; - cmpElem = new DefaultComparator!(T); - } - - /** - * Create an independent copy. Does not clone elements. - **/ - - public TreeMap duplicate() - { - if (count is 0) - return new TreeMap!(K, T)(screener, cmp); - else - return new TreeMap!(K, T)(screener, cmp, cast(RBPairT)(tree.copyTree()), count); - } - - - // Collection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.contains - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.contains - **/ - public final bool contains(T element) - { - if (!isValidArg(element) || count is 0) - return false; - return tree.find(element, cmpElem) !is null; - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.instances - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.Collection.Collection.instances - **/ - public final uint instances(T element) - { - if (!isValidArg(element) || count is 0) - return 0; - return tree.count(element, cmpElem); - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.elements - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.elements - **/ - public final GuardIterator!(T) elements() - { - return keys(); - } - - /*********************************************************************** - - Implements tango.util.collection.model.View.View.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.model.View.View.opApply - - ************************************************************************/ - - int opApply (int delegate (inout T value) dg) - { - auto scope iterator = new MapIterator!(K, T)(this); - return iterator.opApply (dg); - } - - - /*********************************************************************** - - Implements tango.util.collection.MapView.opApply - Time complexity: O(n) - - See_Also: tango.util.collection.MapView.opApply - - ************************************************************************/ - - int opApply (int delegate (inout K key, inout T value) dg) - { - auto scope iterator = new MapIterator!(K, T)(this); - return iterator.opApply (dg); - } - - // KeySortedCollection methods - - /** - * Implements tango.util.collection.KeySortedCollection.comparator - * Time complexity: O(1). - * See_Also: tango.util.collection.KeySortedCollection.comparator - **/ - public final ComparatorT comparator() - { - return cmp; - } - - /** - * Use a new Comparator. Causes a reorganization - **/ - - public final void comparator (ComparatorT c) - { - if (cmp !is c) - { - cmp = (c is null) ? new DefaultComparator!(K) : c; - - if (count !is 0) - { - // must rebuild tree! - incVersion(); - auto t = cast(RBPairT) (tree.leftmost()); - tree = null; - count = 0; - - while (t !is null) - { - add_(t.key(), t.element(), false); - t = cast(RBPairT)(t.successor()); - } - } - } - } - - // Map methods - - /** - * Implements tango.util.collection.Map.containsKey. - * Time complexity: O(log n). - * See_Also: tango.util.collection.Map.containsKey - **/ - public final bool containsKey(K key) - { - if (!isValidKey(key) || count is 0) - return false; - return tree.findKey(key, cmp) !is null; - } - - /** - * Implements tango.util.collection.Map.containsPair. - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.containsPair - **/ - public final bool containsPair(K key, T element) - { - if (count is 0 || !isValidKey(key) || !isValidArg(element)) - return false; - return tree.find(key, element, cmp) !is null; - } - - /** - * Implements tango.util.collection.Map.keys. - * Time complexity: O(1). - * See_Also: tango.util.collection.Map.keys - **/ - public final PairIterator!(K, T) keys() - { - return new MapIterator!(K, T)(this); - } - - /** - * Implements tango.util.collection.Map.get. - * Time complexity: O(log n). - * See_Also: tango.util.collection.Map.get - **/ - public final T get(K key) - { - if (count !is 0) - { - RBPairT p = tree.findKey(key, cmp); - if (p !is null) - return p.element(); - } - throw new NoSuchElementException("no matching Key "); - } - - /** - * Return the element associated with Key key. - * @param key a key - * Returns: whether the key is contained or not - **/ - - public final bool get(K key, inout T value) - { - if (count !is 0) - { - RBPairT p = tree.findKey(key, cmp); - if (p !is null) - { - value = p.element(); - return true; - } - } - return false; - } - - - - /** - * Implements tango.util.collection.Map.keyOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.Map.keyOf - **/ - public final bool keyOf(inout K key, T value) - { - if (!isValidArg(value) || count is 0) - return false; - - auto p = (cast(RBPairT)( tree.find(value, cmpElem))); - if (p is null) - return false; - - key = p.key(); - return true; - } - - - // MutableCollection methods - - /** - * Implements tango.util.collection.impl.Collection.Collection.clear. - * Time complexity: O(1). - * See_Also: tango.util.collection.impl.Collection.Collection.clear - **/ - public final void clear() - { - setCount(0); - tree = null; - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeAll. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeAll - **/ - public final void removeAll(T element) - { - if (!isValidArg(element) || count is 0) - return ; - - RBPairT p = cast(RBPairT)(tree.find(element, cmpElem)); - while (p !is null) - { - tree = cast(RBPairT)(p.remove(tree)); - decCount(); - if (count is 0) - return ; - p = cast(RBPairT)(tree.find(element, cmpElem)); - } - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.removeOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.removeOneOf - **/ - public final void remove (T element) - { - if (!isValidArg(element) || count is 0) - return ; - - RBPairT p = cast(RBPairT)(tree.find(element, cmpElem)); - if (p !is null) - { - tree = cast(RBPairT)(p.remove(tree)); - decCount(); - } - } - - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceOneOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceOneOf - **/ - public final void replace(T oldElement, T newElement) - { - if (count is 0 || !isValidArg(oldElement) || !isValidArg(oldElement)) - return ; - - RBPairT p = cast(RBPairT)(tree.find(oldElement, cmpElem)); - if (p !is null) - { - checkElement(newElement); - incVersion(); - p.element(newElement); - } - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.replaceAllOf. - * Time complexity: O(n). - * See_Also: tango.util.collection.impl.Collection.Collection.replaceAllOf - **/ - public final void replaceAll(T oldElement, T newElement) - { - RBPairT p = cast(RBPairT)(tree.find(oldElement, cmpElem)); - while (p !is null) - { - checkElement(newElement); - incVersion(); - p.element(newElement); - p = cast(RBPairT)(tree.find(oldElement, cmpElem)); - } - } - - /** - * Implements tango.util.collection.impl.Collection.Collection.take. - * Time complexity: O(log n). - * Takes the element associated with the least key. - * See_Also: tango.util.collection.impl.Collection.Collection.take - **/ - public final T take() - { - if (count !is 0) - { - RBPairT p = cast(RBPairT)(tree.leftmost()); - T v = p.element(); - tree = cast(RBPairT)(p.remove(tree)); - decCount(); - return v; - } - - checkIndex(0); - return T.init; // not reached - } - - - // MutableMap methods - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.add. - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.add - **/ - public final void add(K key, T element) - { - add_(key, element, true); - } - - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.remove. - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.remove - **/ - public final void removeKey (K key) - { - if (!isValidKey(key) || count is 0) - return ; - - RBCellT p = tree.findKey(key, cmp); - if (p !is null) - { - tree = cast(RBPairT)(p.remove(tree)); - decCount(); - } - } - - - /** - * Implements tango.util.collection.impl.MapCollection.MapCollection.replaceElement. - * Time complexity: O(log n). - * See_Also: tango.util.collection.impl.MapCollection.MapCollection.replaceElement - **/ - public final void replacePair (K key, T oldElement, - T newElement) - { - if (!isValidKey(key) || !isValidArg(oldElement) || count is 0) - return ; - - RBPairT p = tree.find(key, oldElement, cmp); - if (p !is null) - { - checkElement(newElement); - p.element(newElement); - incVersion(); - } - } - - - // helper methods - - - private final void add_(K key, T element, bool checkOccurrence) - { - checkKey(key); - checkElement(element); - - if (tree is null) - { - tree = new RBPairT(key, element); - incCount(); - } - else - { - RBPairT t = tree; - for (;;) - { - int diff = cmp.compare(key, t.key()); - if (diff is 0 && checkOccurrence) - { - if (t.element() != element) - { - t.element(element); - incVersion(); - } - return ; - } - else - if (diff <= 0) - { - if (t.left() !is null) - t = cast(RBPairT)(t.left()); - else - { - tree = cast(RBPairT)(t.insertLeft(new RBPairT(key, element), tree)); - incCount(); - return ; - } - } - else - { - if (t.right() !is null) - t = cast(RBPairT)(t.right()); - else - { - tree = cast(RBPairT)(t.insertRight(new RBPairT(key, element), tree)); - incCount(); - return ; - } - } - } - } - } - - // ImplementationCheckable methods - - /** - * Implements tango.util.collection.model.View.View.checkImplementation. - * See_Also: tango.util.collection.model.View.View.checkImplementation - **/ - public override void checkImplementation() - { - super.checkImplementation(); - assert(cmp !is null); - assert(((count is 0) is (tree is null))); - assert((tree is null || tree.size() is count)); - - if (tree !is null) - { - tree.checkImplementation(); - K last = K.init; - RBPairT t = cast(RBPairT)(tree.leftmost()); - - while (t !is null) - { - K v = t.key(); - assert((last is K.init || cmp.compare(last, v) <= 0)); - last = v; - t = cast(RBPairT)(t.successor()); - } - } - } - - - /*********************************************************************** - - opApply() has migrated here to mitigate the virtual call - on method get() - - ************************************************************************/ - - private static class MapIterator(K, V) : AbstractMapIterator!(K, V) - { - private RBPairT pair; - - public this (TreeMap map) - { - super (map); - - if (map.tree) - pair = cast(RBPairT) map.tree.leftmost; - } - - public final V get(inout K key) - { - if (pair) - key = pair.key; - return get(); - } - - public final V get() - { - decRemaining(); - auto v = pair.element(); - pair = cast(RBPairT) pair.successor(); - return v; - } - - int opApply (int delegate (inout V value) dg) - { - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - - int opApply (int delegate (inout K key, inout V value) dg) - { - K key; - int result; - - for (auto i=remaining(); i--;) - { - auto value = get(key); - if ((result = dg(key, value)) != 0) - break; - } - return result; - } - } -} - - - -debug (Test) -{ - import tango.io.Console; - - void main() - { - auto map = new TreeMap!(char[], double); - map.add ("foo", 1); - map.add ("baz", 1); - map.add ("bar", 2); - map.add ("wumpus", 3); - - foreach (key, value; map.keys) {typeof(key) x; x = key;} - - foreach (value; map.keys) {} - - foreach (value; map.elements) {} - - auto keys = map.keys(); - while (keys.more) - auto v = keys.get(); - - foreach (value; map) {} - - foreach (key, value; map) - Cout (key).newline; - - map.checkImplementation(); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/AbstractIterator.d --- a/tango/tango/util/collection/impl/AbstractIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,121 +0,0 @@ -/* - File: AbstractIterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - 9Apr97 dl made class public -*/ - - -module tango.util.collection.impl.AbstractIterator; - -private import tango.core.Exception; - -private import tango.util.collection.model.View, - tango.util.collection.model.GuardIterator; - - - -/** - * - * A convenient base class for implementations of GuardIterator - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public abstract class AbstractIterator(T) : GuardIterator!(T) -{ - /** - * The collection being enumerated - **/ - - private View!(T) view; - - /** - * The version number of the collection we got upon construction - **/ - - private uint mutation; - - /** - * The number of elements we think we have left. - * Initialized to view.size() upon construction - **/ - - private uint togo; - - - protected this (View!(T) v) - { - view = v; - togo = v.size(); - mutation = v.mutation(); - } - - /** - * Implements tango.util.collection.impl.Collection.CollectionIterator.corrupted. - * Claim corruption if version numbers differ - * See_Also: tango.util.collection.impl.Collection.CollectionIterator.corrupted - **/ - - public final bool corrupted() - { - return mutation != view.mutation; - } - - /** - * Implements tango.util.collection.impl.Collection.CollectionIterator.numberOfRemaingingElements. - * See_Also: tango.util.collection.impl.Collection.CollectionIterator.remaining - **/ - public final uint remaining() - { - return togo; - } - - /** - * Implements tango.util.collection.model.Iterator.more. - * Return true if remaining > 0 and not corrupted - * See_Also: tango.util.collection.model.Iterator.more - **/ - public final bool more() - { - return togo > 0 && mutation is view.mutation; - } - - /** - * Subclass utility. - * Tries to decrement togo, raising exceptions - * if it is already zero or if corrupted() - * Always call as the first line of get. - **/ - protected final void decRemaining() - { - if (mutation != view.mutation) - throw new CorruptedIteratorException ("Collection modified during iteration"); - - if (togo is 0) - throw new NoSuchElementException ("exhausted enumeration"); - - --togo; - } -} - - -public abstract class AbstractMapIterator(K, V) : AbstractIterator!(V), PairIterator!(K, V) -{ - abstract V get (inout K key); - - protected this (View!(V) c) - { - super (c); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/BagCollection.d --- a/tango/tango/util/collection/impl/BagCollection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,133 +0,0 @@ -/* - File: BagCollection.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 13Oct95 dl Create - 22Oct95 dl add addElements - 28jan97 dl make class public -*/ - - -module tango.util.collection.impl.BagCollection; - -private import tango.util.collection.model.Bag, - tango.util.collection.model.Iterator; - -private import tango.util.collection.impl.Collection; - -/** - * - * MutableBagImpl extends MutableImpl to provide - * default implementations of some Bag operations. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public abstract class BagCollection(V) : Collection!(V), Bag!(V) -{ - alias Bag!(V).add add; - alias Collection!(V).remove remove; - alias Collection!(V).removeAll removeAll; - - - /** - * Initialize at version 0, an empty count, and null screener - **/ - - protected this () - { - super(); - } - - /** - * Initialize at version 0, an empty count, and supplied screener - **/ - protected this (Predicate screener) - { - super(screener); - } - - /** - * Implements tango.util.collection.MutableBag.addElements - * See_Also: tango.util.collection.MutableBag.addElements - **/ - - public final void add(Iterator!(V) e) - { - foreach (value; e) - add (value); - } - - - // Default implementations of Bag methods - -version (VERBOSE) -{ - /** - * Implements tango.util.collection.Bag.addingIfAbsent - * See_Also: tango.util.collection.Bag.addingIfAbsent - **/ - public final Bag addingIf(V element) - { - Bag c = duplicate(); - c.addIf(element); - return c; - } - - - /** - * Implements tango.util.collection.Bag.adding - * See_Also: tango.util.collection.Bag.adding - **/ - - public final Bag adding(V element) - { - Bag c = duplicate(); - c.add(element); - return c; - } -} // version - - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeAll - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void removeAll (Iterator!(V) e) - { - while (e.more) - removeAll (e.get); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeElements - See_Also: tango.util.collection.impl.Collection.Collection.removeElements - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void remove (Iterator!(V) e) - { - while (e.more) - remove (e.get); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/CLCell.d --- a/tango/tango/util/collection/impl/CLCell.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,292 +0,0 @@ -/* - File: CLCell.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.impl.CLCell; - -private import tango.util.collection.impl.Cell; - - -/** - * - * - * CLCells are cells that are always arranged in circular lists - * They are pure implementation tools - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class CLCell(T) : Cell!(T) -{ - // instance variables - - private CLCell next_; - private CLCell prev_; - - // constructors - - /** - * Make a cell with contents v, previous cell p, next cell n - **/ - - public this (T v, CLCell p, CLCell n) - { - super(v); - prev_ = p; - next_ = n; - } - - /** - * Make a singular cell - **/ - - public this (T v) - { - super(v); - prev_ = this; - next_ = this; - } - - /** - * Make a singular cell with null contents - **/ - - public this () - { - super(T.init); - prev_ = this; - next_ = this; - } - - /** - * return next cell - **/ - - public final CLCell next() - { - return next_; - } - - /** - * Set next cell. You probably don't want to call this - **/ - - public final void next(CLCell n) - { - next_ = n; - } - - - /** - * return previous cell - **/ - public final CLCell prev() - { - return prev_; - } - - /** - * Set previous cell. You probably don't want to call this - **/ - public final void prev(CLCell n) - { - prev_ = n; - } - - - /** - * Return true if current cell is the only one on the list - **/ - - public final bool isSingleton() - { - return next_ is this; - } - - public final void linkNext(CLCell p) - { - if (p !is null) - { - next_.prev_ = p; - p.next_ = next_; - p.prev_ = this; - next_ = p; - } - } - - /** - * Make a cell holding v and link it immediately after current cell - **/ - - public final void addNext(T v) - { - CLCell p = new CLCell(v, this, next_); - next_.prev_ = p; - next_ = p; - } - - /** - * make a node holding v, link it before the current cell, and return it - **/ - - public final CLCell addPrev(T v) - { - CLCell p = prev_; - CLCell c = new CLCell(v, p, this); - p.next_ = c; - prev_ = c; - return c; - } - - /** - * link p before current cell - **/ - - public final void linkPrev(CLCell p) - { - if (p !is null) - { - prev_.next_ = p; - p.prev_ = prev_; - p.next_ = this; - prev_ = p; - } - } - - /** - * return the number of cells in the list - **/ - - public final int _length() - { - int c = 0; - CLCell p = this; - do { - ++c; - p = p.next(); - } while (p !is this); - return c; - } - - /** - * return the first cell holding element found in a circular traversal starting - * at current cell, or null if no such - **/ - - public final CLCell find(T element) - { - CLCell p = this; - do { - if (p.element() == (element)) - return p; - p = p.next(); - } while (p !is this); - return null; - } - - /** - * return the number of cells holding element found in a circular - * traversal - **/ - - public final int count(T element) - { - int c = 0; - CLCell p = this; - do { - if (p.element() == (element)) - ++c; - p = p.next(); - } while (p !is this); - return c; - } - - /** - * return the nth cell traversed from here. It may wrap around. - **/ - - public final CLCell nth(int n) - { - CLCell p = this; - for (int i = 0; i < n; ++i) - p = p.next_; - return p; - } - - - /** - * Unlink the next cell. - * This has no effect on the list if isSingleton() - **/ - - public final void unlinkNext() - { - CLCell nn = next_.next_; - nn.prev_ = this; - next_ = nn; - } - - /** - * Unlink the previous cell. - * This has no effect on the list if isSingleton() - **/ - - public final void unlinkPrev() - { - CLCell pp = prev_.prev_; - pp.next_ = this; - prev_ = pp; - } - - - /** - * Unlink self from list it is in. - * Causes it to be a singleton - **/ - - public final void unlink() - { - CLCell p = prev_; - CLCell n = next_; - p.next_ = n; - n.prev_ = p; - prev_ = this; - next_ = this; - } - - /** - * Make a copy of the list and return new head. - **/ - - public final CLCell copyList() - { - CLCell hd = this; - - CLCell newlist = new CLCell(hd.element(), null, null); - CLCell current = newlist; - - for (CLCell p = next_; p !is hd; p = p.next_) - { - current.next_ = new CLCell(p.element(), current, null); - current = current.next_; - } - newlist.prev_ = current; - current.next_ = newlist; - return newlist; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/Cell.d --- a/tango/tango/util/collection/impl/Cell.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,81 +0,0 @@ -/* -File: Cell.d - -Originally written by Doug Lea and released into the public domain. -Thanks for the assistance and support of Sun Microsystems Labs, Agorics -Inc, Loral, and everyone contributing, testing, and using this code. - -History: -Date Who What -24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file -9Apr97 dl made Serializable - -*/ - - -module tango.util.collection.impl.Cell; - -/** - * - * - * Cell is the base of a bunch of implementation classes - * for lists and the like. - * The base version just holds an Object as its element value - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class Cell (T) -{ - // instance variables - private T element_; - - /** - * Make a cell with element value v - **/ - - public this (T v) - { - element_ = v; - } - - /** - * Make A cell with null element value - **/ - - public this () - { -// element_ = null; - } - - /** - * return the element value - **/ - - public final T element() - { - return element_; - } - - /** - * set the element value - **/ - - public final void element (T v) - { - element_ = v; - } - - public final int elementHash () - { - return typeid(T).getHash(&element_); - } - - protected Cell duplicate() - { - return new Cell (element_); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/Collection.d --- a/tango/tango/util/collection/impl/Collection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,631 +0,0 @@ -/******************************************************************************* - - File: Collection.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Add assert - 22Oct95 dl Add excludeElements, removeElements - 28jan97 dl make class public; isolate version changes - 14Dec06 kb Adapted for Tango usage - -********************************************************************************/ - -module tango.util.collection.impl.Collection; - -private import tango.core.Exception; - -private import tango.util.collection.model.View, - tango.util.collection.model.Iterator, - tango.util.collection.model.Dispenser; - -/******************************************************************************* - - Collection serves as a convenient base class for most implementations - of mutable containers. It maintains a version number and element count. - It also provides default implementations of many collection operations. - - Authors: Doug Lea - -********************************************************************************/ - -public abstract class Collection(T) : Dispenser!(T) -{ - alias View!(T) ViewT; - - alias bool delegate(T) Predicate; - - - // instance variables - - /*********************************************************************** - - version represents the current version number - - ************************************************************************/ - - protected uint vershion; - - /*********************************************************************** - - screener hold the supplied element screener - - ************************************************************************/ - - protected Predicate screener; - - /*********************************************************************** - - count holds the number of elements. - - ************************************************************************/ - - protected uint count; - - // constructors - - /*********************************************************************** - - Initialize at version 0, an empty count, and supplied screener - - ************************************************************************/ - - protected this (Predicate screener = null) - { - this.screener = screener; - } - - - /*********************************************************************** - - ************************************************************************/ - - protected final static bool isValidArg (T element) - { - static if (is (T : Object)) - { - if (element is null) - return false; - } - return true; - } - - // Default implementations of Collection methods - - /*********************************************************************** - - expose collection content as an array - - ************************************************************************/ - - public T[] toArray () - { - auto result = new T[this.size]; - - int i = 0; - foreach (e; this) - result[i++] = e; - - return result; - } - - /*********************************************************************** - - Time complexity: O(1). - See_Also: tango.util.collection.impl.Collection.Collection.drained - - ************************************************************************/ - - public final bool drained() - { - return count is 0; - } - - /*********************************************************************** - - Time complexity: O(1). - Returns: the count of elements currently in the collection - See_Also: tango.util.collection.impl.Collection.Collection.size - - ************************************************************************/ - - public final uint size() - { - return count; - } - - /*********************************************************************** - - Checks if element is an allowed element for this collection. - This will not throw an exception, but any other attemp to add an - invalid element will do. - - Time complexity: O(1) + time of screener, if present - - See_Also: tango.util.collection.impl.Collection.Collection.allows - - ************************************************************************/ - - public final bool allows (T element) - { - return isValidArg(element) && - (screener is null || screener(element)); - } - - - /*********************************************************************** - - Time complexity: O(n). - Default implementation. Fairly sleazy approach. - (Defensible only when you remember that it is just a default impl.) - It tries to cast to one of the known collection interface types - and then applies the corresponding comparison rules. - This suffices for all currently supported collection types, - but must be overridden if you define new Collection subinterfaces - and/or implementations. - - See_Also: tango.util.collection.impl.Collection.Collection.matches - - ************************************************************************/ - - public bool matches(ViewT other) - { -/+ - if (other is null) - return false; - else - if (other is this) - return true; - else - if (cast(SortedKeys) this) - { - if (!(cast(Map) other)) - return false; - else - return sameOrderedPairs(cast(Map)this, cast(Map)other); - } - else - if (cast(Map) this) - { - if (!(cast(Map) other)) - return false; - else - return samePairs(cast(Map)(this), cast(Map)(other)); - } - else - if ((cast(Seq) this) || (cast(SortedValues) this)) - return sameOrderedElements(this, other); - else - if (cast(Bag) this) - return sameOccurrences(this, other); - else - if (cast(Set) this) - return sameInclusions(this, cast(View)(other)); - else - return false; -+/ - return false; - } - - // Default implementations of MutableCollection methods - - /*********************************************************************** - - Time complexity: O(1). - See_Also: tango.util.collection.impl.Collection.Collection.version - - ************************************************************************/ - - public final uint mutation() - { - return vershion; - } - - // Object methods - - /*********************************************************************** - - Default implementation of toString for Collections. Not - very pretty, but parenthesizing each element means that - for most kinds of elements, it's conceivable that the - strings could be parsed and used to build other tango.util.collection. - - Not a very pretty implementation either. Casts are used - to get at elements/keys - - ************************************************************************/ - - public override char[] toString() - { - char[16] tmp; - - return "<" ~ this.classinfo.name ~ ", size:" ~ itoa(tmp, size()) ~ ">"; - } - - - /*********************************************************************** - - ************************************************************************/ - - protected final char[] itoa(char[] buf, uint i) - { - auto j = buf.length; - - do { - buf[--j] = i % 10 + '0'; - } while (i /= 10); - return buf [j..$]; - } - - // protected operations on version and count - - /*********************************************************************** - - change the version number - - ************************************************************************/ - - protected final void incVersion() - { - ++vershion; - } - - - /*********************************************************************** - - Increment the element count and update version - - ************************************************************************/ - - protected final void incCount() - { - count++; - incVersion(); - } - - /*********************************************************************** - - Decrement the element count and update version - - ************************************************************************/ - - protected final void decCount() - { - count--; - incVersion(); - } - - - /*********************************************************************** - - add to the element count and update version if changed - - ************************************************************************/ - - protected final void addToCount(uint c) - { - if (c !is 0) - { - count += c; - incVersion(); - } - } - - - /*********************************************************************** - - set the element count and update version if changed - - ************************************************************************/ - - protected final void setCount(uint c) - { - if (c !is count) - { - count = c; - incVersion(); - } - } - - - /*********************************************************************** - - Helper method left public since it might be useful - - ************************************************************************/ - - public final static bool sameInclusions(ViewT s, ViewT t) - { - if (s.size !is t.size) - return false; - - try { // set up to return false on collection exceptions - auto ts = t.elements(); - while (ts.more) - { - if (!s.contains(ts.get)) - return false; - } - return true; - } catch (NoSuchElementException ex) - { - return false; - } - } - - /*********************************************************************** - - Helper method left public since it might be useful - - ************************************************************************/ - - public final static bool sameOccurrences(ViewT s, ViewT t) - { - if (s.size !is t.size) - return false; - - auto ts = t.elements(); - T last = T.init; // minor optimization -- skip two successive if same - - try { // set up to return false on collection exceptions - while (ts.more) - { - T m = ts.get; - if (m !is last) - { - if (s.instances(m) !is t.instances(m)) - return false; - } - last = m; - } - return true; - } catch (NoSuchElementException ex) - { - return false; - } - } - - - /*********************************************************************** - - Helper method left public since it might be useful - - ************************************************************************/ - - public final static bool sameOrderedElements(ViewT s, ViewT t) - { - if (s.size !is t.size) - return false; - - auto ts = t.elements(); - auto ss = s.elements(); - - try { // set up to return false on collection exceptions - while (ts.more) - { - T m = ts.get; - T o = ss.get; - if (m != o) - return false; - } - return true; - } catch (NoSuchElementException ex) - { - return false; - } - } - - // misc common helper methods - - /*********************************************************************** - - Principal method to throw a NoSuchElementException. - Besides index checks in Seqs, you can use it to check for - operations on empty collections via checkIndex(0) - - ************************************************************************/ - - protected final void checkIndex(int index) - { - if (index < 0 || index >= count) - { - char[] msg; - - if (count is 0) - msg = "Element access on empty collection"; - else - { - char[16] idx, cnt; - msg = "Index " ~ itoa (idx, index) ~ " out of range for collection of size " ~ itoa (cnt, count); - } - throw new NoSuchElementException(msg); - } - } - - - /*********************************************************************** - - Principal method to throw a IllegalElementException - - ************************************************************************/ - - protected final void checkElement(T element) - { - if (! allows(element)) - { - throw new IllegalElementException("Attempt to include invalid element _in Collection"); - } - } - - /*********************************************************************** - - See_Also: tango.util.collection.model.View.View.checkImplementation - - ************************************************************************/ - - public void checkImplementation() - { - assert(count >= 0); - } - //public override void checkImplementation() //Doesn't compile with the override attribute - - /*********************************************************************** - - Cause the collection to become empty. - - ************************************************************************/ - - abstract void clear(); - - /*********************************************************************** - - Exclude all occurrences of the indicated element from the collection. - No effect if element not present. - Params: - element = the element to exclude. - --- - !has(element) && - size() == PREV(this).size() - PREV(this).instances(element) && - no other element changes && - Version change iff PREV(this).has(element) - --- - - ************************************************************************/ - - abstract void removeAll(T element); - - /*********************************************************************** - - Remove an instance of the indicated element from the collection. - No effect if !has(element) - Params: - element = the element to remove - --- - let occ = max(1, instances(element)) in - size() == PREV(this).size() - occ && - instances(element) == PREV(this).instances(element) - occ && - no other element changes && - version change iff occ == 1 - --- - - ************************************************************************/ - - abstract void remove (T element); - - /*********************************************************************** - - Replace an occurrence of oldElement with newElement. - No effect if does not hold oldElement or if oldElement.equals(newElement). - The operation has a consistent, but slightly special interpretation - when applied to Sets. For Sets, because elements occur at - most once, if newElement is already included, replacing oldElement with - with newElement has the same effect as just removing oldElement. - --- - let int delta = oldElement.equals(newElement)? 0 : - max(1, PREV(this).instances(oldElement) in - instances(oldElement) == PREV(this).instances(oldElement) - delta && - instances(newElement) == (this instanceof Set) ? - max(1, PREV(this).instances(oldElement) + delta): - PREV(this).instances(oldElement) + delta) && - no other element changes && - Version change iff delta != 0 - --- - Throws: IllegalElementException if has(oldElement) and !allows(newElement) - - ************************************************************************/ - - abstract void replace (T oldElement, T newElement); - - /*********************************************************************** - - Replace all occurrences of oldElement with newElement. - No effect if does not hold oldElement or if oldElement.equals(newElement). - The operation has a consistent, but slightly special interpretation - when applied to Sets. For Sets, because elements occur at - most once, if newElement is already included, replacing oldElement with - with newElement has the same effect as just removing oldElement. - --- - let int delta = oldElement.equals(newElement)? 0 : - PREV(this).instances(oldElement) in - instances(oldElement) == PREV(this).instances(oldElement) - delta && - instances(newElement) == (this instanceof Set) ? - max(1, PREV(this).instances(oldElement) + delta): - PREV(this).instances(oldElement) + delta) && - no other element changes && - Version change iff delta != 0 - --- - Throws: IllegalElementException if has(oldElement) and !allows(newElement) - - ************************************************************************/ - - abstract void replaceAll(T oldElement, T newElement); - - /*********************************************************************** - - Exclude all occurrences of each element of the Iterator. - Behaviorally equivalent to - --- - while (e.more()) - removeAll(e.get()); - --- - Param : - e = the enumeration of elements to exclude. - - Throws: CorruptedIteratorException is propagated if thrown - - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - ************************************************************************/ - - abstract void removeAll (Iterator!(T) e); - - /*********************************************************************** - - Remove an occurrence of each element of the Iterator. - Behaviorally equivalent to - - --- - while (e.more()) - remove (e.get()); - --- - - Param: - e = the enumeration of elements to remove. - - Throws: CorruptedIteratorException is propagated if thrown - - ************************************************************************/ - - abstract void remove (Iterator!(T) e); - - /*********************************************************************** - - Remove and return an element. Implementations - may strengthen the guarantee about the nature of this element. - but in general it is the most convenient or efficient element to remove. - - Examples: - One way to transfer all elements from - MutableCollection a to MutableBag b is: - --- - while (!a.empty()) - b.add(a.take()); - --- - - Returns: - an element v such that PREV(this).has(v) - and the postconditions of removeOneOf(v) hold. - - Throws: NoSuchElementException iff drained. - - ************************************************************************/ - - abstract T take(); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/DefaultComparator.d --- a/tango/tango/util/collection/impl/DefaultComparator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - File: DefaultComparator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - -*/ - - -module tango.util.collection.impl.DefaultComparator; - -private import tango.util.collection.model.Comparator; - - -/** - * - * - * DefaultComparator provides a general-purpose but slow compare - * operation. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class DefaultComparator(T) : Comparator!(T) -{ - - /** - * Try various downcasts to find a basis for - * comparing two elements. If all else fails, just compare - * hashCodes(). This can be effective when you are - * using an ordered implementation data structure like trees, - * but don't really care about ordering. - * - * @param fst first argument - * @param snd second argument - * Returns: a negative number if fst is less than snd; a - * positive number if fst is greater than snd; else 0 - **/ - - public final int compare(T fst, T snd) - { - if (fst is snd) - return 0; - - return typeid(T).compare (&fst, &snd); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/LLCell.d --- a/tango/tango/util/collection/impl/LLCell.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,330 +0,0 @@ -/* - File: LLCell.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - -*/ - - -module tango.util.collection.impl.LLCell; - -private import tango.util.collection.impl.Cell; - -private import tango.util.collection.model.Comparator; - -/** - * - * - * LLCells extend Cells with standard linkedlist next-fields, - * and provide a standard operations on them. - *

- * LLCells are pure implementation tools. They perform - * no argument checking, no result screening, and no synchronization. - * They rely on user-level classes (see for example LinkedList) to do such things. - * Still, the class is made `public' so that you can use them to - * build other kinds of collections or whatever, not just the ones - * currently supported. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class LLCell(T) : Cell!(T) -{ - alias Comparator!(T) ComparatorT; - - - protected LLCell next_; - - /** - * Return the next cell (or null if none) - **/ - - public LLCell next() - { - return next_; - } - - /** - * set to point to n as next cell - * @param n, the new next cell - **/ - - public void next(LLCell n) - { - next_ = n; - } - - public this (T v, LLCell n) - { - super(v); - next_ = n; - } - - public this (T v) - { - this(v, null); - } - - public this () - { - this(T.init, null); - } - - - /** - * Splice in p between current cell and whatever it was previously - * pointing to - * @param p, the cell to splice - **/ - - public final void linkNext(LLCell p) - { - if (p !is null) - p.next_ = next_; - next_ = p; - } - - /** - * Cause current cell to skip over the current next() one, - * effectively removing the next element from the list - **/ - - public final void unlinkNext() - { - if (next_ !is null) - next_ = next_.next_; - } - - /** - * Linear search down the list looking for element (using T.equals) - * @param element to look for - * Returns: the cell containing element, or null if no such - **/ - - public final LLCell find(T element) - { - for (LLCell p = this; p !is null; p = p.next_) - if (p.element() == element) - return p; - return null; - } - - /** - * return the number of cells traversed to find first occurrence - * of a cell with element() element, or -1 if not present - **/ - - public final int index(T element) - { - int i = 0; - for (LLCell p = this; p !is null; p = p.next_) - { - if (p.element() == element) - return i; - else - ++i; - } - return -1; - } - - /** - * Count the number of occurrences of element in list - **/ - - public final int count(T element) - { - int c = 0; - for (LLCell p = this; p !is null; p = p.next_) - if (p.element() == element) - ++c; - return c; - } - - /** - * return the number of cells in the list - **/ - - public final int _length() - { - int c = 0; - for (LLCell p = this; p !is null; p = p.next_) - ++c; - return c; - } - - /** - * return the cell representing the last element of the list - * (i.e., the one whose next() is null - **/ - - public final LLCell tail() - { - LLCell p = this; - for ( ; p.next_ !is null; p = p.next_) - {} - return p; - } - - /** - * return the nth cell of the list, or null if no such - **/ - - public final LLCell nth(int n) - { - LLCell p = this; - for (int i = 0; i < n; ++i) - p = p.next_; - return p; - } - - - /** - * make a copy of the list; i.e., a new list containing new cells - * but including the same elements in the same order - **/ - - public final LLCell copyList() - { - LLCell newlist = null; - newlist = duplicate(); - LLCell current = newlist; - - for (LLCell p = next_; p !is null; p = p.next_) - { - current.next_ = p.duplicate(); - current = current.next_; - } - current.next_ = null; - return newlist; - } - - /** - * Clone is SHALLOW; i.e., just makes a copy of the current cell - **/ - - private final LLCell duplicate() - { - return new LLCell(element(), next_); - } - - /** - * Basic linkedlist merge algorithm. - * Merges the lists head by fst and snd with respect to cmp - * @param fst head of the first list - * @param snd head of the second list - * @param cmp a Comparator used to compare elements - * Returns: the merged ordered list - **/ - - public final static LLCell merge(LLCell fst, LLCell snd, ComparatorT cmp) - { - LLCell a = fst; - LLCell b = snd; - LLCell hd = null; - LLCell current = null; - for (;;) - { - if (a is null) - { - if (hd is null) - hd = b; - else - current.next(b); - return hd; - } - else - if (b is null) - { - if (hd is null) - hd = a; - else - current.next(a); - return hd; - } - - int diff = cmp.compare(a.element(), b.element()); - if (diff <= 0) - { - if (hd is null) - hd = a; - else - current.next(a); - current = a; - a = a.next(); - } - else - { - if (hd is null) - hd = b; - else - current.next(b); - current = b; - b = b.next(); - } - } - return null; - } - - /** - * Standard list splitter, used by sort. - * Splits the list in half. Returns the head of the second half - * @param s the head of the list - * Returns: the head of the second half - **/ - - public final static LLCell split(LLCell s) - { - LLCell fast = s; - LLCell slow = s; - - if (fast is null || fast.next() is null) - return null; - - while (fast !is null) - { - fast = fast.next(); - if (fast !is null && fast.next() !is null) - { - fast = fast.next(); - slow = slow.next(); - } - } - - LLCell r = slow.next(); - slow.next(null); - return r; - - } - - /** - * Standard merge sort algorithm - * @param s the list to sort - * @param cmp, the comparator to use for ordering - * Returns: the head of the sorted list - **/ - - public final static LLCell mergeSort(LLCell s, ComparatorT cmp) - { - if (s is null || s.next() is null) - return s; - else - { - LLCell right = split(s); - LLCell left = s; - left = mergeSort(left, cmp); - right = mergeSort(right, cmp); - return merge(left, right, cmp); - } - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/LLPair.d --- a/tango/tango/util/collection/impl/LLPair.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,191 +0,0 @@ -/* - File: LLPair.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - -*/ - - -module tango.util.collection.impl.LLPair; - -private import tango.util.collection.impl.LLCell; - -private import tango.util.collection.model.Iterator; - - -/** - * - * - * LLPairs are LLCells with keys, and operations that deal with them. - * As with LLCells, the are pure implementation tools. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class LLPair(K, T) : LLCell!(T) -{ - alias LLCell!(T).find find; - alias LLCell!(T).count count; - alias LLCell!(T).element element; - - - // instance variables - - private K key_; - - /** - * Make a cell with given key, elment, and next link - **/ - - public this (K k, T v, LLPair n) - { - super(v, n); - key_ = k; - } - - /** - * Make a pair with given key and element, and null next link - **/ - - public this (K k, T v) - { - super(v, null); - key_ = k; - } - - /** - * Make a pair with null key, elment, and next link - **/ - - public this () - { - super(T.init, null); - key_ = K.init; - } - - /** - * return the key - **/ - - public final K key() - { - return key_; - } - - /** - * set the key - **/ - - public final void key(K k) - { - key_ = k; - } - - - /** - * set the key - **/ - - public final int keyHash() - { - return typeid(K).getHash(&key_); - } - - - /** - * return a cell with key() key or null if no such - **/ - - public final LLPair findKey(K key) - { - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - if (p.key() == key) - return p; - return null; - } - - /** - * return a cell holding the indicated pair or null if no such - **/ - - public final LLPair find(K key, T element) - { - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - if (p.key() == key && p.element() == element) - return p; - return null; - } - - /** - * Return the number of cells traversed to find a cell with key() key, - * or -1 if not present - **/ - - public final int indexKey(K key) - { - int i = 0; - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - { - if (p.key() == key) - return i; - else - ++i; - } - return -1; - } - - /** - * Return the number of cells traversed to find a cell with indicated pair - * or -1 if not present - **/ - public final int index(K key, T element) - { - int i = 0; - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - { - if (p.key() == key && p.element() == element) - return i; - else - ++i; - } - return -1; - } - - /** - * Return the number of cells with key() key. - **/ - public final int countKey(K key) - { - int c = 0; - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - if (p.key() == key) - ++c; - return c; - } - - /** - * Return the number of cells with indicated pair - **/ - public final int count(K key, T element) - { - int c = 0; - for (auto p=this; p; p = cast(LLPair)cast(void*) p.next_) - if (p.key() == key && p.element() == element) - ++c; - return c; - } - - protected final LLPair duplicate() - { - return new LLPair(key(), element(), cast(LLPair)cast(void*)(next())); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/MapCollection.d --- a/tango/tango/util/collection/impl/MapCollection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,232 +0,0 @@ -/******************************************************************************* - - File: MapCollection.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 13Oct95 dl Create - 28jan97 dl make class public - 14Dec06 kb adapted for Tango usage - -********************************************************************************/ - -module tango.util.collection.impl.MapCollection; - -private import tango.core.Exception; - -private import tango.util.collection.impl.Collection; - -private import tango.util.collection.model.Map, - tango.util.collection.model.View, - tango.util.collection.model.MapView, - tango.util.collection.model.Iterator, - tango.util.collection.model.SortedKeys; - - -/******************************************************************************* - - MapCollection extends Collection to provide default implementations of - some Map operations. - - author: Doug Lea - @version 0.93 - -

For an introduction to this package see Overview . - - ********************************************************************************/ - -public abstract class MapCollection(K, T) : Collection!(T), Map!(K, T) -{ - alias MapView!(K, T) MapViewT; - alias Collection!(T).remove remove; - alias Collection!(T).removeAll removeAll; - - - /*********************************************************************** - - Initialize at version 0, an empty count, and null screener - - ************************************************************************/ - - protected this () - { - super(); - } - - /*********************************************************************** - - Initialize at version 0, an empty count, and supplied screener - - ************************************************************************/ - - protected this (Predicate screener) - { - super(screener); - } - - /*********************************************************************** - - Implements tango.util.collection.Map.allowsKey. - Default key-screen. Just checks for null. - - See_Also: tango.util.collection.Map.allowsKey - - ************************************************************************/ - - public final bool allowsKey(K key) - { - return (key !is K.init); - } - - protected final bool isValidKey(K key) - { - static if (is (K : Object)) - { - if (key is null) - return false; - } - return true; - } - - /*********************************************************************** - - Principal method to throw a IllegalElementException for keys - - ************************************************************************/ - - protected final void checkKey(K key) - { - if (!isValidKey(key)) - { - throw new IllegalElementException("Attempt to include invalid key _in Collection"); - } - } - - /*********************************************************************** - - Implements tango.util.collection.impl.MapCollection.MapCollection.opIndexAssign - Just calls add(key, element). - - See_Also: tango.util.collection.impl.MapCollection.MapCollection.add - - ************************************************************************/ - - public final void opIndexAssign (T element, K key) - { - add (key, element); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.matches - Time complexity: O(n). - Default implementation. Fairly sleazy approach. - (Defensible only when you remember that it is just a default impl.) - It tries to cast to one of the known collection interface types - and then applies the corresponding comparison rules. - This suffices for all currently supported collection types, - but must be overridden if you define new Collection subinterfaces - and/or implementations. - - See_Also: tango.util.collection.impl.Collection.Collection.matches - - ************************************************************************/ - - public override bool matches(View!(T) other) - { - if (other is null) - {} - else - if (other is this) - return true; - else - { - auto tmp = cast (MapViewT) other; - if (tmp) - if (cast(SortedKeys!(K, T)) this) - return sameOrderedPairs(this, tmp); - else - return samePairs(this, tmp); - } - return false; - } - - - public final static bool samePairs(MapViewT s, MapViewT t) - { - if (s.size !is t.size) - return false; - - try { // set up to return false on collection exceptions - foreach (key, value; t.keys) - if (! s.containsPair (key, value)) - return false; - } catch (NoSuchElementException ex) - { - return false; - } - return true; - } - - public final static bool sameOrderedPairs(MapViewT s, MapViewT t) - { - if (s.size !is t.size) - return false; - - auto ss = s.keys(); - try { // set up to return false on collection exceptions - foreach (key, value; t.keys) - { - K sk; - auto sv = ss.get (sk); - if (sk != key || sv != value) - return false; - } - } catch (NoSuchElementException ex) - { - return false; - } - return true; - } - - - // Object methods - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeAll - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void removeAll (Iterator!(T) e) - { - while (e.more) - removeAll (e.get); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeElements - See_Also: tango.util.collection.impl.Collection.Collection.removeElements - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void remove (Iterator!(T) e) - { - while (e.more) - remove (e.get); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/RBCell.d --- a/tango/tango/util/collection/impl/RBCell.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,811 +0,0 @@ -/* - File: RBCell.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - -*/ - - -module tango.util.collection.impl.RBCell; - -private import tango.util.collection.impl.Cell; - -private import tango.util.collection.model.Iterator, - tango.util.collection.model.Comparator; - -/** - * RBCell implements basic capabilities of Red-Black trees, - * an efficient kind of balanced binary tree. The particular - * algorithms used are adaptations of those in Corman, - * Lieserson, and Rivest's Introduction to Algorithms. - * This class was inspired by (and code cross-checked with) a - * similar class by Chuck McManis. The implementations of - * rebalancings during insertion and deletion are - * a little trickier than those versions since they - * don't swap Cell contents or use special dummy nilnodes. - *

- * It is a pure implementation class. For harnesses, see: - * See_Also: RBTree - * Authors: Doug Lea -**/ - - - - -public class RBCell(T) : Cell!(T) -{ - static bool RED = false; - static bool BLACK = true; - - /** - * The node color (RED, BLACK) - **/ - - package bool color_; - - /** - * Pointer to left child - **/ - - package RBCell left_; - - /** - * Pointer to right child - **/ - - package RBCell right_; - - /** - * Pointer to parent (null if root) - **/ - - private RBCell parent_; - - /** - * Make a new Cell with given element, null links, and BLACK color. - * Normally only called to establish a new root. - **/ - - public this (T element) - { - super(element); - left_ = null; - right_ = null; - parent_ = null; - color_ = BLACK; - } - - /** - * Return a new RBCell with same element and color as self, - * but with null links. (Since it is never OK to have - * multiple identical links in a RB tree.) - **/ - - protected RBCell duplicate() - { - RBCell t = new RBCell(element()); - t.color_ = color_; - return t; - } - - - /** - * Return left child (or null) - **/ - - public final RBCell left() - { - return left_; - } - - /** - * Return right child (or null) - **/ - - public final RBCell right() - { - return right_; - } - - /** - * Return parent (or null) - **/ - public final RBCell parent() - { - return parent_; - } - - - /** - * See_Also: tango.util.collection.model.View.View.checkImplementation. - **/ - public void checkImplementation() - { - - // It's too hard to check the property that every simple - // path from node to leaf has same number of black nodes. - // So restrict to the following - - assert(parent_ is null || - this is parent_.left_ || - this is parent_.right_); - - assert(left_ is null || - this is left_.parent_); - - assert(right_ is null || - this is right_.parent_); - - assert(color_ is BLACK || - (colorOf(left_) is BLACK) && (colorOf(right_) is BLACK)); - - if (left_ !is null) - left_.checkImplementation(); - if (right_ !is null) - right_.checkImplementation(); - } - - /+ - public final void assert(bool pred) - { - ImplementationError.assert(this, pred); - } - +/ - - /** - * Return the minimum element of the current (sub)tree - **/ - - public final RBCell leftmost() - { - auto p = this; - for ( ; p.left_ !is null; p = p.left_) - {} - return p; - } - - /** - * Return the maximum element of the current (sub)tree - **/ - public final RBCell rightmost() - { - auto p = this; - for ( ; p.right_ !is null; p = p.right_) - {} - return p; - } - - /** - * Return the root (parentless node) of the tree - **/ - public final RBCell root() - { - auto p = this; - for ( ; p.parent_ !is null; p = p.parent_) - {} - return p; - } - - /** - * Return true if node is a root (i.e., has a null parent) - **/ - - public final bool isRoot() - { - return parent_ is null; - } - - - /** - * Return the inorder successor, or null if no such - **/ - - public final RBCell successor() - { - if (right_ !is null) - return right_.leftmost(); - else - { - auto p = parent_; - auto ch = this; - while (p !is null && ch is p.right_) - { - ch = p; - p = p.parent_; - } - return p; - } - } - - /** - * Return the inorder predecessor, or null if no such - **/ - - public final RBCell predecessor() - { - if (left_ !is null) - return left_.rightmost(); - else - { - auto p = parent_; - auto ch = this; - while (p !is null && ch is p.left_) - { - ch = p; - p = p.parent_; - } - return p; - } - } - - /** - * Return the number of nodes in the subtree - **/ - public final int size() - { - int c = 1; - if (left_ !is null) - c += left_.size(); - if (right_ !is null) - c += right_.size(); - return c; - } - - - /** - * Return node of current subtree containing element as element(), - * if it exists, else null. - * Uses Comparator cmp to find and to check equality. - **/ - - public RBCell find(T element, Comparator!(T) cmp) - { - auto t = this; - for (;;) - { - int diff = cmp.compare(element, t.element()); - if (diff is 0) - return t; - else - if (diff < 0) - t = t.left_; - else - t = t.right_; - if (t is null) - break; - } - return null; - } - - - /** - * Return number of nodes of current subtree containing element. - * Uses Comparator cmp to find and to check equality. - **/ - public int count(T element, Comparator!(T) cmp) - { - int c = 0; - auto t = this; - while (t !is null) - { - int diff = cmp.compare(element, t.element()); - if (diff is 0) - { - ++c; - if (t.left_ is null) - t = t.right_; - else - if (t.right_ is null) - t = t.left_; - else - { - c += t.right_.count(element, cmp); - t = t.left_; - } - } - else - if (diff < 0) - t = t.left_; - else - t = t.right_; - } - return c; - } - - - - - /** - * Return a new subtree containing each element of current subtree - **/ - - public final RBCell copyTree() - { - auto t = cast(RBCell)(duplicate()); - - if (left_ !is null) - { - t.left_ = left_.copyTree(); - t.left_.parent_ = t; - } - if (right_ !is null) - { - t.right_ = right_.copyTree(); - t.right_.parent_ = t; - } - return t; - } - - - /** - * There's no generic element insertion. Instead find the - * place you want to add a node and then invoke insertLeft - * or insertRight. - *

- * Insert Cell as the left child of current node, and then - * rebalance the tree it is in. - * @param Cell the Cell to add - * @param root, the root of the current tree - * Returns: the new root of the current tree. (Rebalancing - * can change the root!) - **/ - - - public final RBCell insertLeft(RBCell Cell, RBCell root) - { - left_ = Cell; - Cell.parent_ = this; - return Cell.fixAfterInsertion(root); - } - - /** - * Insert Cell as the right child of current node, and then - * rebalance the tree it is in. - * @param Cell the Cell to add - * @param root, the root of the current tree - * Returns: the new root of the current tree. (Rebalancing - * can change the root!) - **/ - - public final RBCell insertRight(RBCell Cell, RBCell root) - { - right_ = Cell; - Cell.parent_ = this; - return Cell.fixAfterInsertion(root); - } - - - /** - * Delete the current node, and then rebalance the tree it is in - * @param root the root of the current tree - * Returns: the new root of the current tree. (Rebalancing - * can change the root!) - **/ - - - public final RBCell remove (RBCell root) - { - - // handle case where we are only node - if (left_ is null && right_ is null && parent_ is null) - return null; - - // if strictly internal, swap places with a successor - if (left_ !is null && right_ !is null) - { - auto s = successor(); - // To work nicely with arbitrary subclasses of RBCell, we don't want to - // just copy successor's fields. since we don't know what - // they are. Instead we swap positions _in the tree. - root = swapPosition(this, s, root); - } - - // Start fixup at replacement node (normally a child). - // But if no children, fake it by using self - - if (left_ is null && right_ is null) - { - - if (color_ is BLACK) - root = this.fixAfterDeletion(root); - - // Unlink (Couldn't before since fixAfterDeletion needs parent ptr) - - if (parent_ !is null) - { - if (this is parent_.left_) - parent_.left_ = null; - else - if (this is parent_.right_) - parent_.right_ = null; - parent_ = null; - } - - } - else - { - auto replacement = left_; - if (replacement is null) - replacement = right_; - - // link replacement to parent - replacement.parent_ = parent_; - - if (parent_ is null) - root = replacement; - else - if (this is parent_.left_) - parent_.left_ = replacement; - else - parent_.right_ = replacement; - - left_ = null; - right_ = null; - parent_ = null; - - // fix replacement - if (color_ is BLACK) - root = replacement.fixAfterDeletion(root); - - } - - return root; - } - - /** - * Swap the linkages of two nodes in a tree. - * Return new root, in case it changed. - **/ - - static final RBCell swapPosition(RBCell x, RBCell y, RBCell root) - { - - /* Too messy. TODO: find sequence of assigments that are always OK */ - - auto px = x.parent_; - bool xpl = px !is null && x is px.left_; - auto lx = x.left_; - auto rx = x.right_; - - auto py = y.parent_; - bool ypl = py !is null && y is py.left_; - auto ly = y.left_; - auto ry = y.right_; - - if (x is py) - { - y.parent_ = px; - if (px !is null) - if (xpl) - px.left_ = y; - else - px.right_ = y; - x.parent_ = y; - if (ypl) - { - y.left_ = x; - y.right_ = rx; - if (rx !is null) - rx.parent_ = y; - } - else - { - y.right_ = x; - y.left_ = lx; - if (lx !is null) - lx.parent_ = y; - } - x.left_ = ly; - if (ly !is null) - ly.parent_ = x; - x.right_ = ry; - if (ry !is null) - ry.parent_ = x; - } - else - if (y is px) - { - x.parent_ = py; - if (py !is null) - if (ypl) - py.left_ = x; - else - py.right_ = x; - y.parent_ = x; - if (xpl) - { - x.left_ = y; - x.right_ = ry; - if (ry !is null) - ry.parent_ = x; - } - else - { - x.right_ = y; - x.left_ = ly; - if (ly !is null) - ly.parent_ = x; - } - y.left_ = lx; - if (lx !is null) - lx.parent_ = y; - y.right_ = rx; - if (rx !is null) - rx.parent_ = y; - } - else - { - x.parent_ = py; - if (py !is null) - if (ypl) - py.left_ = x; - else - py.right_ = x; - x.left_ = ly; - if (ly !is null) - ly.parent_ = x; - x.right_ = ry; - if (ry !is null) - ry.parent_ = x; - - y.parent_ = px; - if (px !is null) - if (xpl) - px.left_ = y; - else - px.right_ = y; - y.left_ = lx; - if (lx !is null) - lx.parent_ = y; - y.right_ = rx; - if (rx !is null) - rx.parent_ = y; - } - - bool c = x.color_; - x.color_ = y.color_; - y.color_ = c; - - if (root is x) - root = y; - else - if (root is y) - root = x; - return root; - } - - - - /** - * Return color of node p, or BLACK if p is null - * (In the CLR version, they use - * a special dummy `nil' node for such purposes, but that doesn't - * work well here, since it could lead to creating one such special - * node per real node.) - * - **/ - - static final bool colorOf(RBCell p) - { - return (p is null) ? BLACK : p.color_; - } - - /** - * return parent of node p, or null if p is null - **/ - static final RBCell parentOf(RBCell p) - { - return (p is null) ? null : p.parent_; - } - - /** - * Set the color of node p, or do nothing if p is null - **/ - - static final void setColor(RBCell p, bool c) - { - if (p !is null) - p.color_ = c; - } - - /** - * return left child of node p, or null if p is null - **/ - - static final RBCell leftOf(RBCell p) - { - return (p is null) ? null : p.left_; - } - - /** - * return right child of node p, or null if p is null - **/ - - static final RBCell rightOf(RBCell p) - { - return (p is null) ? null : p.right_; - } - - - /** From CLR **/ - protected final RBCell rotateLeft(RBCell root) - { - auto r = right_; - right_ = r.left_; - if (r.left_ !is null) - r.left_.parent_ = this; - r.parent_ = parent_; - if (parent_ is null) - root = r; - else - if (parent_.left_ is this) - parent_.left_ = r; - else - parent_.right_ = r; - r.left_ = this; - parent_ = r; - return root; - } - - /** From CLR **/ - protected final RBCell rotateRight(RBCell root) - { - auto l = left_; - left_ = l.right_; - if (l.right_ !is null) - l.right_.parent_ = this; - l.parent_ = parent_; - if (parent_ is null) - root = l; - else - if (parent_.right_ is this) - parent_.right_ = l; - else - parent_.left_ = l; - l.right_ = this; - parent_ = l; - return root; - } - - - /** From CLR **/ - protected final RBCell fixAfterInsertion(RBCell root) - { - color_ = RED; - auto x = this; - - while (x !is null && x !is root && x.parent_.color_ is RED) - { - if (parentOf(x) is leftOf(parentOf(parentOf(x)))) - { - auto y = rightOf(parentOf(parentOf(x))); - if (colorOf(y) is RED) - { - setColor(parentOf(x), BLACK); - setColor(y, BLACK); - setColor(parentOf(parentOf(x)), RED); - x = parentOf(parentOf(x)); - } - else - { - if (x is rightOf(parentOf(x))) - { - x = parentOf(x); - root = x.rotateLeft(root); - } - setColor(parentOf(x), BLACK); - setColor(parentOf(parentOf(x)), RED); - if (parentOf(parentOf(x)) !is null) - root = parentOf(parentOf(x)).rotateRight(root); - } - } - else - { - auto y = leftOf(parentOf(parentOf(x))); - if (colorOf(y) is RED) - { - setColor(parentOf(x), BLACK); - setColor(y, BLACK); - setColor(parentOf(parentOf(x)), RED); - x = parentOf(parentOf(x)); - } - else - { - if (x is leftOf(parentOf(x))) - { - x = parentOf(x); - root = x.rotateRight(root); - } - setColor(parentOf(x), BLACK); - setColor(parentOf(parentOf(x)), RED); - if (parentOf(parentOf(x)) !is null) - root = parentOf(parentOf(x)).rotateLeft(root); - } - } - } - root.color_ = BLACK; - return root; - } - - - - /** From CLR **/ - protected final RBCell fixAfterDeletion(RBCell root) - { - auto x = this; - while (x !is root && colorOf(x) is BLACK) - { - if (x is leftOf(parentOf(x))) - { - auto sib = rightOf(parentOf(x)); - if (colorOf(sib) is RED) - { - setColor(sib, BLACK); - setColor(parentOf(x), RED); - root = parentOf(x).rotateLeft(root); - sib = rightOf(parentOf(x)); - } - if (colorOf(leftOf(sib)) is BLACK && colorOf(rightOf(sib)) is BLACK) - { - setColor(sib, RED); - x = parentOf(x); - } - else - { - if (colorOf(rightOf(sib)) is BLACK) - { - setColor(leftOf(sib), BLACK); - setColor(sib, RED); - root = sib.rotateRight(root); - sib = rightOf(parentOf(x)); - } - setColor(sib, colorOf(parentOf(x))); - setColor(parentOf(x), BLACK); - setColor(rightOf(sib), BLACK); - root = parentOf(x).rotateLeft(root); - x = root; - } - } - else - { - auto sib = leftOf(parentOf(x)); - if (colorOf(sib) is RED) - { - setColor(sib, BLACK); - setColor(parentOf(x), RED); - root = parentOf(x).rotateRight(root); - sib = leftOf(parentOf(x)); - } - if (colorOf(rightOf(sib)) is BLACK && colorOf(leftOf(sib)) is BLACK) - { - setColor(sib, RED); - x = parentOf(x); - } - else - { - if (colorOf(leftOf(sib)) is BLACK) - { - setColor(rightOf(sib), BLACK); - setColor(sib, RED); - root = sib.rotateLeft(root); - sib = leftOf(parentOf(x)); - } - setColor(sib, colorOf(parentOf(x))); - setColor(parentOf(x), BLACK); - setColor(leftOf(sib), BLACK); - root = parentOf(x).rotateRight(root); - x = root; - } - } - } - setColor(x, BLACK); - return root; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/RBPair.d --- a/tango/tango/util/collection/impl/RBPair.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,253 +0,0 @@ -/* - File: RBPair.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.impl.RBPair; - -private import tango.util.collection.impl.RBCell; - -private import tango.util.collection.model.Comparator; - - -/** - * - * RBPairs are RBCells with keys. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class RBPair(K, T) : RBCell!(T) -{ - alias RBCell!(T).element element; - - // instance variable - - private K key_; - - /** - * Make a cell with given key and element values, and null links - **/ - - public this (K k, T v) - { - super(v); - key_ = k; - } - - /** - * Make a new node with same key and element values, but null links - **/ - - protected final RBPair duplicate() - { - auto t = new RBPair(key_, element()); - t.color_ = color_; - return t; - } - - /** - * return the key - **/ - - public final K key() - { - return key_; - } - - - /** - * set the key - **/ - - public final void key(K k) - { - key_ = k; - } - - /** - * Implements RBCell.find. - * Override RBCell version since we are ordered on keys, not elements, so - * element find has to search whole tree. - * comparator argument not actually used. - * See_Also: RBCell.find - **/ - - public final override RBCell!(T) find(T element, Comparator!(T) cmp) - { - RBCell!(T) t = this; - - while (t !is null) - { - if (t.element() == (element)) - return t; - else - if (t.right_ is null) - t = t.left_; - else - if (t.left_ is null) - t = t.right_; - else - { - auto p = t.left_.find(element, cmp); - - if (p !is null) - return p; - else - t = t.right_; - } - } - return null; // not reached - } - - /** - * Implements RBCell.count. - * See_Also: RBCell.count - **/ - public final override int count(T element, Comparator!(T) cmp) - { - int c = 0; - RBCell!(T) t = this; - - while (t !is null) - { - if (t.element() == (element)) - ++c; - - if (t.right_ is null) - t = t.left_; - else - if (t.left_ is null) - t = t.right_; - else - { - c += t.left_.count(element, cmp); - t = t.right_; - } - } - return c; - } - - /** - * find and return a cell holding key, or null if no such - **/ - - public final RBPair findKey(K key, Comparator!(K) cmp) - { - auto t = this; - - for (;;) - { - int diff = cmp.compare(key, t.key_); - if (diff is 0) - return t; - else - if (diff < 0) - t = cast(RBPair)(t.left_); - else - t = cast(RBPair)(t.right_); - - if (t is null) - break; - } - return null; - } - - /** - * find and return a cell holding (key, element), or null if no such - **/ - public final RBPair find(K key, T element, Comparator!(K) cmp) - { - auto t = this; - - for (;;) - { - int diff = cmp.compare(key, t.key_); - if (diff is 0 && t.element() == (element)) - return t; - else - if (diff <= 0) - t = cast(RBPair)(t.left_); - else - t = cast(RBPair)(t.right_); - - if (t is null) - break; - } - return null; - } - - /** - * return number of nodes of subtree holding key - **/ - public final int countKey(K key, Comparator!(K) cmp) - { - int c = 0; - auto t = this; - - while (t !is null) - { - int diff = cmp.compare(key, t.key_); - // rely on insert to always go left on <= - if (diff is 0) - ++c; - - if (diff <= 0) - t = cast(RBPair)(t.left_); - else - t = cast(RBPair)(t.right_); - } - return c; - } - - /** - * return number of nodes of subtree holding (key, element) - **/ - public final int count(K key, T element, Comparator!(K) cmp) - { - int c = 0; - auto t = this; - - while (t !is null) - { - int diff = cmp.compare(key, t.key_); - if (diff is 0) - { - if (t.element() == (element)) - ++c; - - if (t.left_ is null) - t = cast(RBPair)(t.right_); - else - if (t.right_ is null) - t = cast(RBPair)(t.left_); - else - { - c += (cast(RBPair)(t.right_)).count(key, element, cmp); - t = cast(RBPair)(t.left_); - } - } - else - if (diff < 0) - t = cast(RBPair)(t.left()); - else - t = cast(RBPair)(t.right()); - } - return c; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/SeqCollection.d --- a/tango/tango/util/collection/impl/SeqCollection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,165 +0,0 @@ -/* - File: SeqCollection.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 13Oct95 dl Create - 28jab97 dl make class public -*/ - - -module tango.util.collection.impl.SeqCollection; - -private import tango.util.collection.model.Seq, - tango.util.collection.model.Iterator; - -private import tango.util.collection.impl.Collection; - - - -/** - * - * SeqCollection extends MutableImpl to provide - * default implementations of some Seq operations. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public abstract class SeqCollection(T) : Collection!(T), Seq!(T) -{ - alias Collection!(T).remove remove; - alias Collection!(T).removeAll removeAll; - - - /** - * Initialize at version 0, an empty count, and null screener - **/ - - protected this () - { - super(); - } - - /** - * Initialize at version 0, an empty count, and supplied screener - **/ - protected this (Predicate screener) - { - super(screener); - } - - - // Default implementations of Seq methods - -version (VERBOSE) -{ - /** - * Implements tango.util.collection.model.Seq.Seq.insertingAt. - * See_Also: tango.util.collection.model.Seq.Seq.insertingAt - **/ - public final Seq insertingAt(int index, T element) - { - MutableSeq c = null; - // c = (cast(MutableSeq)clone()); - c = (cast(MutableSeq)duplicate()); - c.insert(index, element); - return c; - } - - /** - * Implements tango.util.collection.model.Seq.Seq.removingAt. - * See_Also: tango.util.collection.model.Seq.Seq.removingAt - **/ - public final Seq removingAt(int index) - { - MutableSeq c = null; - // c = (cast(MutableSeq)clone()); - c = (cast(MutableSeq)duplicate()); - c.remove(index); - return c; - } - - - /** - * Implements tango.util.collection.model.Seq.Seq.replacingAt - * See_Also: tango.util.collection.model.Seq.Seq.replacingAt - **/ - public final Seq replacingAt(int index, T element) - { - MutableSeq c = null; - // c = (cast(MutableSeq)clone()); - c = (cast(MutableSeq)duplicate()); - c.replace(index, element); - return c; - } -} // version - - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeAll - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void removeAll (Iterator!(T) e) - { - while (e.more) - removeAll (e.get); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeElements - See_Also: tango.util.collection.impl.Collection.Collection.removeElements - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void remove (Iterator!(T) e) - { - while (e.more) - remove (e.get); - } - - /*********************************************************************** - - Implements tango.util.collection.model.Seq.opIndexAssign - See_Also: tango.util.collection.model.Seq.replaceAt - - Calls replaceAt(index, element); - - ************************************************************************/ - public final void opIndexAssign (T element, int index) - { - replaceAt(index, element); - } - - /*********************************************************************** - - Implements tango.util.collection.model.SeqView.opSlice - See_Also: tango.util.collection.model.SeqView.subset - - Calls subset(begin, (end - begin)); - - ************************************************************************/ - public SeqCollection opSlice(int begin, int end) - { - return subset(begin, (end - begin)); - } - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/impl/SetCollection.d --- a/tango/tango/util/collection/impl/SetCollection.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -/* - File: SetCollection.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 13Oct95 dl Create - 22Oct95 dl add includeElements - 28jan97 dl make class public -*/ - - -module tango.util.collection.impl.SetCollection; - -private import tango.util.collection.model.Set, - tango.util.collection.model.Iterator; - -private import tango.util.collection.impl.Collection; - -/** - * - * SetCollection extends MutableImpl to provide - * default implementations of some Set operations. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public abstract class SetCollection(T) : Collection!(T), Set!(T) -{ - alias Set!(T).add add; - alias Collection!(T).remove remove; - alias Collection!(T).removeAll removeAll; - - - /** - * Initialize at version 0, an empty count, and null screener - **/ - - protected this () - { - super(); - } - - /** - * Initialize at version 0, an empty count, and supplied screener - **/ - protected this (Predicate screener) - { - super(screener); - } - - /** - * Implements tango.util.collection.impl.SetCollection.SetCollection.includeElements - * See_Also: tango.util.collection.impl.SetCollection.SetCollection.includeElements - **/ - - public void add (Iterator!(T) e) - { - foreach (value; e) - add (value); - } - - - version (VERBOSE) - { - // Default implementations of Set methods - - /** - * Implements tango.util.collection.Set.including - * See_Also: tango.util.collection.Set.including - **/ - public final Set including (T element) - { - auto c = cast(MutableSet) duplicate(); - c.include(element); - return c; - } - } // version - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeAll - See_Also: tango.util.collection.impl.Collection.Collection.removeAll - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void removeAll (Iterator!(T) e) - { - while (e.more) - removeAll (e.get); - } - - /*********************************************************************** - - Implements tango.util.collection.impl.Collection.Collection.removeElements - See_Also: tango.util.collection.impl.Collection.Collection.removeElements - - Has to be here rather than in the superclass to satisfy - D interface idioms - - ************************************************************************/ - - public void remove (Iterator!(T) e) - { - while (e.more) - remove (e.get); - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/iterator/ArrayIterator.d --- a/tango/tango/util/collection/iterator/ArrayIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,108 +0,0 @@ -/* - File: ArrayIterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from tango.util.collection.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.iterator.ArrayIterator; - -private import tango.core.Exception; - -private import tango.util.collection.model.GuardIterator; - - -/** - * - * ArrayIterator allows you to use arrays as Iterators - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public class ArrayIterator(T) : GuardIterator!(T) -{ - private T [] arr_; - private int cur_; - private int size_; - - /** - * Build an enumeration that returns successive elements of the array - **/ - public this (T arr[]) - { - // arr_ = arr; cur_ = 0; size_ = arr._length; - arr_ = arr; - cur_ = -1; - size_ = arr.length; - } - - /** - * Implements tango.util.collection.impl.Collection.CollectionIterator.remaining - * See_Also: tango.util.collection.impl.Collection.CollectionIterator.remaining - **/ - public uint remaining() - { - return size_; - } - - /** - * Implements java.util.Iterator.more. - * See_Also: java.util.Iterator.more - **/ - public bool more() - { - return size_ > 0; - } - - /** - * Implements tango.util.collection.impl.Collection.CollectionIterator.corrupted. - * Always false. Inconsistency cannot be reliably detected for arrays - * Returns: false - * See_Also: tango.util.collection.impl.Collection.CollectionIterator.corrupted - **/ - - public bool corrupted() - { - return false; - } - - /** - * Implements java.util.Iterator.get(). - * See_Also: java.util.Iterator.get() - **/ - public T get() - { - if (size_ > 0) - { - --size_; - ++cur_; - return arr_[cur_]; - } - throw new NoSuchElementException ("Exhausted Iterator"); - } - - - int opApply (int delegate (inout T value) dg) - { - int result; - - for (auto i=size_; i--;) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/iterator/FilteringIterator.d --- a/tango/tango/util/collection/iterator/FilteringIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -/* - File: FilteringIterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 22Oct95 dl@cs.oswego.edu Created. - -*/ - - -module tango.util.collection.iterator.FilteringIterator; - -private import tango.core.Exception; - -private import tango.util.collection.model.Iterator; - -/** - * - * FilteringIterators allow you to filter out elements from - * other enumerations before they are seen by their `consumers' - * (i.e., the callers of `get'). - * - * FilteringIterators work as wrappers around other Iterators. - * To build one, you need an existing Iterator (perhaps one - * from coll.elements(), for some Collection coll), and a Predicate - * object (i.e., implementing interface Predicate). - * For example, if you want to screen out everything but Panel - * objects from a collection coll that might hold things other than Panels, - * write something of the form: - * --- - * Iterator e = coll.elements(); - * Iterator panels = FilteringIterator(e, IsPanel); - * while (panels.more()) - * doSomethingWith(cast(Panel)(panels.get())); - * --- - * To use this, you will also need to write a little class of the form: - * --- - * class IsPanel : Predicate { - * bool predicate(Object v) { return ( 0 !is cast(Panel)v; } - * } - * --- - * See_Also: tango.util.collection.Predicate.predicate - * author: Doug Lea - * -**/ - -public class FilteringIterator(T) : Iterator!(T) -{ - alias bool delegate(T) Predicate; - - // instance variables - - /** - * The enumeration we are wrapping - **/ - - private Iterator!(T) src_; - - /** - * The screening predicate - **/ - - private Predicate pred_; - - /** - * The sense of the predicate. False means to invert - **/ - - private bool sign_; - - /** - * The next element to hand out - **/ - - private T get_; - - /** - * True if we have a next element - **/ - - private bool haveNext_; - - /** - * Make a Filter using src for the elements, and p as the screener, - * selecting only those elements of src for which p is true - **/ - - public this (Iterator!(T) src, Predicate p) - { - this(src, p, true); - } - - /** - * Make a Filter using src for the elements, and p as the screener, - * selecting only those elements of src for which p.predicate(v) == sense. - * A value of true for sense selects only values for which p.predicate - * is true. A value of false selects only those for which it is false. - **/ - public this (Iterator!(T) src, Predicate p, bool sense) - { - src_ = src; - pred_ = p; - sign_ = sense; - findNext(); - } - - /** - * Implements java.util.Iterator.more - **/ - - public final bool more() - { - return haveNext_; - } - - /** - * Implements java.util.Iterator.get. - **/ - public final T get() - { - if (! haveNext_) - throw new NoSuchElementException("exhausted enumeration"); - else - { - auto result = get_; - findNext(); - return result; - } - } - - - int opApply (int delegate (inout T value) dg) - { - int result; - - while (haveNext_) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - - - /** - * Traverse through src_ elements finding one passing predicate - **/ - private final void findNext() - { - haveNext_ = false; - - for (;;) - { - if (! src_.more()) - return ; - else - { - try { - auto v = src_.get(); - if (pred_(v) is sign_) - { - haveNext_ = true; - get_ = v; - return; - } - } catch (NoSuchElementException ex) - { - return; - } - } - } - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/iterator/InterleavingIterator.d --- a/tango/tango/util/collection/iterator/InterleavingIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,164 +0,0 @@ -/* - File: InterleavingIterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 22Oct95 dl@cs.oswego.edu Created. - -*/ - - -module tango.util.collection.iterator.InterleavingIterator; - -private import tango.core.Exception; - -private import tango.util.collection.model.Iterator; - -/** - * - * InterleavingIterators allow you to combine the elements - * of two different enumerations as if they were one enumeration - * before they are seen by their `consumers'. - * This sometimes allows you to avoid having to use a - * Collection object to temporarily combine two sets of Collection elements() - * that need to be collected together for common processing. - *

- * The elements are revealed (via get()) in a purely - * interleaved fashion, alternating between the first and second - * enumerations unless one of them has been exhausted, in which case - * all remaining elements of the other are revealed until it too is - * exhausted. - *

- * InterleavingIterators work as wrappers around other Iterators. - * To build one, you need two existing Iterators. - * For example, if you want to process together the elements of - * two Collections a and b, you could write something of the form: - *

- * Iterator items = InterleavingIterator(a.elements(), b.elements());
- * while (items.more()) 
- *  doSomethingWith(items.get());
- * 
- * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - - -public class InterleavingIterator(T) : Iterator!(T) -{ - - /** - * The first source; nulled out once it is exhausted - **/ - - private Iterator!(T) fst_; - - /** - * The second source; nulled out once it is exhausted - **/ - - private Iterator!(T) snd_; - - /** - * The source currently being used - **/ - - private Iterator!(T) current_; - - - - /** - * Make an enumeration interleaving elements from fst and snd - **/ - - public this (Iterator!(T) fst, Iterator!(T) snd) - { - fst_ = fst; - snd_ = snd; - current_ = snd_; // flip will reset to fst (if it can) - flip(); - } - - /** - * Implements java.util.Iterator.more - **/ - public final bool more() - { - return current_ !is null; - } - - /** - * Implements java.util.Iterator.get. - **/ - public final T get() - { - if (current_ is null) - throw new NoSuchElementException("exhausted iterator"); - else - { - // following line may also throw ex, but there's nothing - // reasonable to do except propagate - auto result = current_.get(); - flip(); - return result; - } - } - - - int opApply (int delegate (inout T value) dg) - { - int result; - - while (current_) - { - auto value = get(); - if ((result = dg(value)) != 0) - break; - } - return result; - } - - /** - * Alternate sources - **/ - - private final void flip() - { - if (current_ is fst_) - { - if (snd_ !is null && !snd_.more()) - snd_ = null; - if (snd_ !is null) - current_ = snd_; - else - { - if (fst_ !is null && !fst_.more()) - fst_ = null; - current_ = fst_; - } - } - else - { - if (fst_ !is null && !fst_.more()) - fst_ = null; - if (fst_ !is null) - current_ = fst_; - else - { - if (snd_ !is null && !snd_.more()) - snd_ = null; - current_ = snd_; - } - } - } - - -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Bag.d --- a/tango/tango/util/collection/model/Bag.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,37 +0,0 @@ -/* - File: Bag.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Bag; - -private import tango.util.collection.model.BagView, - tango.util.collection.model.Iterator, - tango.util.collection.model.Dispenser; - -/** - * Bags are collections supporting multiple occurrences of elements. - * author: Doug Lea -**/ - -public interface Bag(V) : BagView!(V), Dispenser!(V) -{ - public alias add opCatAssign; - - void add (V); - - void addIf (V); - - void add (Iterator!(V)); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/BagView.d --- a/tango/tango/util/collection/model/BagView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,66 +0,0 @@ -/* - File: BagView.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.BagView; - -private import tango.util.collection.model.View; - - -/** - * - * Bags are collections supporting multiple occurrences of elements. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public interface BagView(V) : View!(V) -{ -version (VERBOSE) -{ - public alias adding opCat; - - /** - * Construct a new Bag that is a clone of self except - * that it includes indicated element. This can be used - * to create a series of Bag, each differing from the - * other only in that they contain additional elements. - * - * @param the element to add to the new Bag - * Returns: the new Bag c, with the matches as this except that - * c.occurrencesOf(element) == occurrencesOf(element)+1 - * Throws: IllegalElementException if !canInclude(element) - **/ - - public Bag adding(V element); - - /** - * Construct a new Collection that is a clone of self except - * that it adds the indicated element if not already present. This can be used - * to create a series of collections, each differing from the - * other only in that they contain additional elements. - * - * @param element the element to include in the new collection - * Returns: a new collection c, with the matches as this, except that - * c.occurrencesOf(element) = min(1, occurrencesOfElement) - * Throws: IllegalElementException if !canInclude(element) - **/ - - public Bag addingIfAbsent(V element); -} // version - -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Comparator.d --- a/tango/tango/util/collection/model/Comparator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,40 +0,0 @@ -/* - File: Comparator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Comparator; - - -/** - * - * Comparator is an interface for any class possessing an element - * comparison method. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public interface Comparator(T) -{ - /** - * @param fst first argument - * @param snd second argument - * Returns: a negative number if fst is less than snd; a - * positive number if fst is greater than snd; else 0 - **/ - public int compare(T fst, T snd); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Dispenser.d --- a/tango/tango/util/collection/model/Dispenser.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -/* - File: Dispenser.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Dispenser; - -private import tango.util.collection.model.View, - tango.util.collection.model.Iterator; - -/** - * - * Dispenser is the root interface of all mutable collections; i.e., - * collections that may have elements dynamically added, removed, - * and/or replaced in accord with their collection semantics. - * - * author: Doug Lea - * - *

For an introduction to this package see Overview . -**/ - -public interface Dispenser(T) : View!(T) -{ - /** - * Cause the collection to become empty. - * Returns: condition: - *

-         * isEmpty() &&
-         * Version change iff !PREV(this).isEmpty();
-         * 
- **/ - - public void clear (); - - /** - * Replace an occurrence of oldElement with newElement. - * No effect if does not hold oldElement or if oldElement.equals(newElement). - * The operation has a consistent, but slightly special interpretation - * when applied to Sets. For Sets, because elements occur at - * most once, if newElement is already included, replacing oldElement with - * with newElement has the same effect as just removing oldElement. - * Returns: condition: - *
-         * let int delta = oldElement.equals(newElement)? 0 : 
-         *               max(1, PREV(this).instances(oldElement) in
-         *  instances(oldElement) == PREV(this).instances(oldElement) - delta &&
-         *  instances(newElement) ==  (this instanceof Set) ? 
-         *         max(1, PREV(this).instances(oldElement) + delta):
-         *                PREV(this).instances(oldElement) + delta) &&
-         *  no other element changes &&
-         *  Version change iff delta != 0
-         * 
- * Throws: IllegalElementException if has(oldElement) and !allows(newElement) - **/ - - public void replace (T oldElement, T newElement); - - /** - * Replace all occurrences of oldElement with newElement. - * No effect if does not hold oldElement or if oldElement.equals(newElement). - * The operation has a consistent, but slightly special interpretation - * when applied to Sets. For Sets, because elements occur at - * most once, if newElement is already included, replacing oldElement with - * with newElement has the same effect as just removing oldElement. - * Returns: condition: - *
-         * let int delta = oldElement.equals(newElement)? 0 : 
-                           PREV(this).instances(oldElement) in
-         *  instances(oldElement) == PREV(this).instances(oldElement) - delta &&
-         *  instances(newElement) ==  (this instanceof Set) ? 
-         *         max(1, PREV(this).instances(oldElement) + delta):
-         *                PREV(this).instances(oldElement) + delta) &&
-         *  no other element changes &&
-         *  Version change iff delta != 0
-         * 
- * Throws: IllegalElementException if has(oldElement) and !allows(newElement) - **/ - - public void replaceAll(T oldElement, T newElement); - - /** - * Remove and return an element. Implementations - * may strengthen the guarantee about the nature of this element. - * but in general it is the most convenient or efficient element to remove. - *

- * Example usage. One way to transfer all elements from - * Dispenser a to MutableBag b is: - *

-         * while (!a.empty()) b.add(a.take());
-         * 
- * Returns: an element v such that PREV(this).has(v) - * and the postconditions of removeOneOf(v) hold. - * Throws: NoSuchElementException iff isEmpty. - **/ - - public T take (); - - - /** - * Exclude all occurrences of each element of the Iterator. - * Behaviorally equivalent to - *
-         * while (e.more()) removeAll(e.value());
-         * @param e the enumeration of elements to exclude.
-         * Throws: CorruptedIteratorException is propagated if thrown
-        **/
-
-        public void removeAll (Iterator!(T) e);
-
-        /**
-         * Remove an occurrence of each element of the Iterator.
-         * Behaviorally equivalent to
-         * 
-         * while (e.more()) remove (e.value());
-         * @param e the enumeration of elements to remove.
-         * Throws: CorruptedIteratorException is propagated if thrown
-        **/
-
-        public void remove (Iterator!(T) e);
-
-        /**
-         * Exclude all occurrences of the indicated element from the collection. 
-         * No effect if element not present.
-         * @param element the element to exclude.
-         * Returns: condition: 
-         * 
-         * !has(element) &&
-         * size() == PREV(this).size() - PREV(this).instances(element) &&
-         * no other element changes &&
-         * Version change iff PREV(this).has(element)
-         * 
- **/ - - public void removeAll (T element); - - - /** - * Remove an instance of the indicated element from the collection. - * No effect if !has(element) - * @param element the element to remove - * Returns: condition: - *
-         * let occ = max(1, instances(element)) in
-         *  size() == PREV(this).size() - occ &&
-         *  instances(element) == PREV(this).instances(element) - occ &&
-         *  no other element changes &&
-         *  version change iff occ == 1
-         * 
- **/ - - public void remove (T element); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/GuardIterator.d --- a/tango/tango/util/collection/model/GuardIterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,78 +0,0 @@ -/* - File: GuardIterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.GuardIterator; - -private import tango.util.collection.model.Iterator; - -/** - * - * CollectionIterator extends the standard java.util.Iterator - * interface with two additional methods. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public interface GuardIterator(V) : Iterator!(V) -{ - /** - * Return true if the collection that constructed this enumeration - * has been detectably modified since construction of this enumeration. - * Ability and precision of detection of this condition can vary - * across collection class implementations. - * more() is false whenever corrupted is true. - * - * Returns: true if detectably corrupted. - **/ - - public bool corrupted(); - - /** - * Return the number of elements in the enumeration that have - * not yet been traversed. When corrupted() is true, this - * number may (or may not) be greater than zero even if more() - * is false. Exception recovery mechanics may be able to - * use this as an indication that recovery of some sort is - * warranted. However, it is not necessarily a foolproof indication. - *

- * You can also use it to pack enumerations into arrays. For example: - *

-         * Object arr[] = new Object[e.numberOfRemainingElement()]
-         * int i = 0;
-         * while (e.more()) arr[i++] = e.value();
-         * 
- *

- * For the converse case, - * See_Also: tango.util.collection.iterator.ArrayIterator.ArrayIterator - * Returns: the number of untraversed elements - **/ - - public uint remaining(); -} - - -public interface PairIterator(K, V) : GuardIterator!(V) -{ - alias GuardIterator!(V).get get; - alias GuardIterator!(V).opApply opApply; - - public V get (inout K key); - - int opApply (int delegate (inout K key, inout V value) dg); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/HashParams.d --- a/tango/tango/util/collection/model/HashParams.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,80 +0,0 @@ -/* - File: HashParams.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.HashParams; - - -/** - * - * Base interface for hash table based collections. - * Provides common ways of dealing with buckets and threshholds. - * (It would be nice to share some of the code too, but this - * would require multiple inheritance here.) - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - - -public interface HashParams -{ - - /** - * The default initial number of buckets of a non-empty HT - **/ - - public static int defaultInitialBuckets = 31; - - /** - * The default load factor for a non-empty HT. When the proportion - * of elements per buckets exceeds this, the table is resized. - **/ - - public static float defaultLoadFactor = 0.75f; - - /** - * return the current number of hash table buckets - **/ - - public int buckets(); - - /** - * Set the desired number of buckets in the hash table. - * Any value greater than or equal to one is OK. - * if different than current buckets, causes a version change - * Throws: IllegalArgumentException if newCap less than 1 - **/ - - public void buckets(int newCap); - - - /** - * Return the current load factor threshold - * The Hash table occasionally checka against the load factor - * resizes itself if it has gone past it. - **/ - - public float thresholdLoadFactor(); - - /** - * Set the current desired load factor. Any value greater than 0 is OK. - * The current load is checked against it, possibly causing resize. - * Throws: IllegalArgumentException if desired is 0 or less - **/ - - public void thresholdLoadFactor(float desired); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Iterator.d --- a/tango/tango/util/collection/model/Iterator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -/* - File: Iterator.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Iterator; - - -/** - * - **/ - -public interface Iterator(V) -{ - public bool more(); - - public V get(); - - int opApply (int delegate (inout V value) dg); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Map.d --- a/tango/tango/util/collection/model/Map.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,106 +0,0 @@ -/* - File: Map.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Map; - -private import tango.util.collection.model.MapView, - tango.util.collection.model.Dispenser; - - -/** - * - * - * MutableMap supports standard update operations on maps. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - - -public interface Map(K, T) : MapView!(K, T), Dispenser!(T) -{ - /** - * Include the indicated pair in the Map - * If a different pair - * with the same key was previously held, it is replaced by the - * new pair. - * - * @param key the key for element to include - * @param element the element to include - * Returns: condition: - *

-         * has(key, element) &&
-         * no spurious effects &&
-         * Version change iff !PREV(this).contains(key, element))
-         * 
- **/ - - public void add (K key, T element); - - /** - * Include the indicated pair in the Map - * If a different pair - * with the same key was previously held, it is replaced by the - * new pair. - * - * @param element the element to include - * @param key the key for element to include - * Returns: condition: - *
-         * has(key, element) &&
-         * no spurious effects &&
-         * Version change iff !PREV(this).contains(key, element))
-         * 
- **/ - - public void opIndexAssign (T element, K key); - - - /** - * Remove the pair with the given key - * @param key the key - * Returns: condition: - *
-         * !containsKey(key)
-         * foreach (k in keys()) at(k).equals(PREV(this).at(k)) &&
-         * foreach (k in PREV(this).keys()) (!k.equals(key)) --> at(k).equals(PREV(this).at(k)) 
-         * (version() != PREV(this).version()) == 
-         * containsKey(key) !=  PREV(this).containsKey(key))
-         * 
- **/ - - public void removeKey (K key); - - - /** - * Replace old pair with new pair with same key. - * No effect if pair not held. (This has the case of - * having no effect if the key exists but is bound to a different value.) - * @param key the key for the pair to remove - * @param oldElement the existing element - * @param newElement the value to replace it with - * Returns: condition: - *
-         * !contains(key, oldElement) || contains(key, newElement);
-         * no spurious effects &&
-         * Version change iff PREV(this).contains(key, oldElement))
-         * 
- **/ - - public void replacePair (K key, T oldElement, T newElement); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/MapView.d --- a/tango/tango/util/collection/model/MapView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,112 +0,0 @@ -/* - File: MapView.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.MapView; - -private import tango.util.collection.model.View, - tango.util.collection.model.GuardIterator; - - -/** - * - * Maps maintain keyed elements. Any kind of Object - * may serve as a key for an element. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - - -public interface MapView(K, V) : View!(V) -{ - /** - * Report whether the MapT COULD include k as a key - * Always returns false if k is null - **/ - - public bool allowsKey(K key); - - /** - * Report whether there exists any element with Key key. - * Returns: true if there is such an element - **/ - - public bool containsKey(K key); - - /** - * Report whether there exists a (key, value) pair - * Returns: true if there is such an element - **/ - - public bool containsPair(K key, V value); - - - /** - * Return an enumeration that may be used to traverse through - * the keys (not elements) of the collection. The corresponding - * elements can be looked at by using at(k) for each key k. For example: - *

-         * Iterator keys = amap.keys();
-         * while (keys.more()) {
-         *   K key = keys.get();
-         *   T value = amap.get(key)
-         * // ...
-         * }
-         * 
- * Returns: the enumeration - **/ - - public PairIterator!(K, V) keys(); - - /** - traverse the collection content. This is cheaper than using an - iterator since there is no creation cost involved. - **/ - - int opApply (int delegate (inout K key, inout V value) dg); - - /** - * Return the element associated with Key key. - * @param key a key - * Returns: element such that contains(key, element) - * Throws: NoSuchElementException if !containsKey(key) - **/ - - public V get(K key); - public alias get opIndex; - - /** - * Return the element associated with Key key. - * @param key a key - * Returns: whether the key is contained or not - **/ - - public bool get(K key, inout V element); - - - /** - * Return a key associated with element. There may be any - * number of keys associated with any element, but this returns only - * one of them (any arbitrary one), or false if no such key exists. - * @param key, a place to return a located key - * @param element, a value to try to find a key for. - * Returns: true where value is found; false otherwise - **/ - - public bool keyOf(inout K key, V value); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Seq.d --- a/tango/tango/util/collection/model/Seq.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,228 +0,0 @@ -/* - File: Seq.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Seq; - -private import tango.util.collection.model.SeqView, - tango.util.collection.model.Iterator, - tango.util.collection.model.Dispenser; - -/** - * - * Seqs are Seqs possessing standard modification methods - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - - -public interface Seq(T) : SeqView!(T), Dispenser!(T) -{ - /** - * Insert all elements of enumeration e at a given index, preserving - * their order. The index can range from - * 0..size() (i.e., one past the current last index). If the index is - * equal to size(), the elements are appended. - * - * @param index the index to start adding at - * @param e the elements to add - * Returns: condition: - *

-         * foreach (int i in 0 .. index-1) at(i).equals(PREV(this)at(i)); &&
-         * All existing elements at indices at or greater than index have their
-         *  indices incremented by the number of elements 
-         *  traversable via e.get() &&
-         * The new elements are at indices index + their order in
-         *   the enumeration's get traversal.
-         * !(e.more()) &&
-         * (version() != PREV(this).version()) == PREV(e).more() 
-         * 
- * Throws: IllegalElementException if !canInclude some element of e; - * this may or may not nullify the effect of insertions of other elements. - * Throws: NoSuchElementException if index is not in range 0..size() - * Throws: CorruptedIteratorException is propagated if raised; this - * may or may not nullify the effects of insertions of other elements. - **/ - - public void addAt (int index, Iterator!(T) e); - - - /** - * Insert element at indicated index. The index can range from - * 0..size() (i.e., one past the current last index). If the index is - * equal to size(), the element is appended as the new last element. - * @param index the index to add at - * @param element the element to add - * Returns: condition: - *
-         * size() == PREV(this).size()+1 &&
-         * at(index).equals(element) &&
-         * foreach (int i in 0 .. index-1)      get(i).equals(PREV(this).get(i))
-         * foreach (int i in index+1..size()-1) get(i).equals(PREV(this).get(i-1))
-         * Version change: always
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size() - * Throws: IllegalElementException if !canInclude(element) - **/ - - public void addAt (int index, T element); - - /** - * replace element at indicated index with new value - * @param index the index at which to replace value - * @param element the new value - * Returns: condition: - *
-         * size() == PREV(this).size() &&
-         * at(index).equals(element) &&
-         * no spurious effects
-         * Version change <-- !element.equals(PREV(this).get(index)
-         *                    (but MAY change even if equal).
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - * Throws: IllegalElementException if !canInclude(element) - **/ - - public void replaceAt (int index, T element); - - /** - * replace element at indicated index with new value - * @param element the new value - * @param index the index at which to replace value - * Returns: condition: - *
-         * size() == PREV(this).size() &&
-         * at(index).equals(element) &&
-         * no spurious effects
-         * Version change <-- !element.equals(PREV(this).get(index)
-         *                    (but MAY change even if equal).
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - * Throws: IllegalElementException if !canInclude(element) - **/ - public void opIndexAssign (T element, int index); - - - /** - * Remove element at indicated index. All elements to the right - * have their indices decremented by one. - * @param index the index of the element to remove - * Returns: condition: - *
-         * size() = PREV(this).size()-1 &&
-         * foreach (int i in 0..index-1)      get(i).equals(PREV(this).get(i)); &&
-         * foreach (int i in index..size()-1) get(i).equals(PREV(this).get(i+1));
-         * Version change: always
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - public void removeAt (int index); - - - /** - * Insert element at front of the sequence. - * Behaviorally equivalent to insert(0, element) - * @param element the element to add - * Throws: IllegalElementException if !canInclude(element) - **/ - - public void prepend(T element); - - - /** - * replace element at front of the sequence with new value. - * Behaviorally equivalent to replace(0, element); - **/ - public void replaceHead(T element); - - /** - * Remove the leftmost element. - * Behaviorally equivalent to remove(0); - **/ - - public void removeHead(); - - - /** - * insert element at end of the sequence - * Behaviorally equivalent to insert(size(), element) - * @param element the element to add - * Throws: IllegalElementException if !canInclude(element) - **/ - - public void append(T element); - public alias append opCatAssign; - - /** - * replace element at end of the sequence with new value - * Behaviorally equivalent to replace(size()-1, element); - **/ - - public void replaceTail(T element); - - - - /** - * Remove the rightmost element. - * Behaviorally equivalent to remove(size()-1); - * Throws: NoSuchElementException if isEmpty - **/ - public void removeTail(); - - - /** - * Remove the elements from fromIndex to toIndex, inclusive. - * No effect if fromIndex > toIndex. - * Behaviorally equivalent to - *
-         * for (int i = fromIndex; i <= toIndex; ++i) remove(fromIndex);
-         * 
- * @param index the index of the first element to remove - * @param index the index of the last element to remove - * Returns: condition: - *
-         * let n = max(0, toIndex - fromIndex + 1 in
-         *  size() == PREV(this).size() - 1 &&
-         *  for (int i in 0 .. fromIndex - 1)     get(i).equals(PREV(this).get(i)) && 
-         *  for (int i in fromIndex .. size()- 1) get(i).equals(PREV(this).get(i+n) 
-         *  Version change iff n > 0 
-         * 
- * Throws: NoSuchElementException if fromIndex or toIndex is not in - * range 0..size()-1 - **/ - - public void removeRange(int fromIndex, int toIndex); - - - /** - * Prepend all elements of enumeration e, preserving their order. - * Behaviorally equivalent to addElementsAt(0, e) - * @param e the elements to add - **/ - - public void prepend(Iterator!(T) e); - - - /** - * Append all elements of enumeration e, preserving their order. - * Behaviorally equivalent to addElementsAt(size(), e) - * @param e the elements to add - **/ - public void append(Iterator!(T) e); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/SeqView.d --- a/tango/tango/util/collection/model/SeqView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,194 +0,0 @@ -/* - File: SeqView.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.SeqView; - -private import tango.util.collection.model.View; - - -/** - * - * - * Seqs are indexed, sequentially ordered collections. - * Indices are always in the range 0 .. size() -1. All accesses by index - * are checked, raising exceptions if the index falls out of range. - *

- * The elements() enumeration for all seqs is guaranteed to be - * traversed (via nextElement) in sequential order. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public interface SeqView(T) : View!(T) -{ - /** - * Return the element at the indicated index - * @param index - * Returns: the element at the index - * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - - public T get(int index); - public alias get opIndex; - - - /** - * Return the first element, if it exists. - * Behaviorally equivalent to at(0) - * Throws: NoSuchElementException if isEmpty - **/ - - public T head(); - - - /** - * Return the last element, if it exists. - * Behaviorally equivalent to at(size()-1) - * Throws: NoSuchElementException if isEmpty - **/ - - public T tail(); - - - /** - * Report the index of leftmost occurrence of an element from a - * given starting point, or -1 if there is no such index. - * @param element the element to look for - * @param startingIndex the index to start looking from. The startingIndex - * need not be a valid index. If less than zero it is treated as 0. - * If greater than or equal to size(), the result will always be -1. - * Returns: index such that - *

 
-         * let int si = max(0, startingIndex) in
-         *  index == -1 &&
-         *   foreach (int i in si .. size()-1) !at(index).equals(element)
-         *  ||
-         *  at(index).equals(element) &&
-         *   foreach (int i in si .. index-1) !at(index).equals(element)
-         * 
- **/ - - public int first(T element, int startingIndex = 0); - - /** - * Report the index of righttmost occurrence of an element from a - * given starting point, or -1 if there is no such index. - * @param element the element to look for - * @param startingIndex the index to start looking from. The startingIndex - * need not be a valid index. If less than zero the result - * will always be -1. - * If greater than or equal to size(), it is treated as size()-1. - * Returns: index such that - *
 
-         * let int si = min(size()-1, startingIndex) in
-         *  index == -1 &&
-         *   foreach (int i in 0 .. si) !at(index).equals(element)
-         *  ||
-         *  at(index).equals(element) &&
-         *   foreach (int i in index+1 .. si) !at(index).equals(element)
-         * 
- * - **/ - public int last(T element, int startingIndex = 0); - - - /** - * Construct a new SeqView that is a clone of self except - * that it does not contain the elements before index or - * after index+length. If length is less than or equal to zero, - * return an empty SeqView. - * @param index of the element that will be the 0th index in new SeqView - * @param length the number of elements in the new SeqView - * Returns: new seq such that - *
-         * s.size() == max(0, length) &&
-         * foreach (int i in 0 .. s.size()-1) s.at(i).equals(at(i+index)); 
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - public SeqView subset(int index, int length); - - /** - * Construct a new SeqView that is a clone of self except - * that it does not contain the elements before begin or - * after end-1. If length is less than or equal to zero, - * return an empty SeqView. - * @param index of the element that will be the 0th index in new SeqView - * @param index of the last element in the SeqView plus 1 - * Returns: new seq such that - *
-         * s.size() == max(0, length) &&
-         * foreach (int i in 0 .. s.size()-1) s.at(i).equals(at(i+index)); 
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - public SeqView opSlice(int begin, int end); - - -version (VERBOSE) -{ - /** - * Construct a new SeqView that is a clone of self except - * that it adds (inserts) the indicated element at the - * indicated index. - * @param index the index at which the new element will be placed - * @param element The element to insert in the new collection - * Returns: new seq s, such that - *
-         *  s.at(index) == element &&
-         *  foreach (int i in 1 .. s.size()-1) s.at(i).equals(at(i-1));
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - - public SeqView insertingAt(int index, T element); - - - /** - * Construct a new SeqView that is a clone of self except - * that the indicated element is placed at the indicated index. - * @param index the index at which to replace the element - * @param element The new value of at(index) - * Returns: new seq, s, such that - *
-         *  s.at(index) == element &&
-         *  foreach (int i in 0 .. s.size()-1) 
-         *     (i != index) --> s.at(i).equals(at(i));
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - - public SeqView replacingAt(int index, T element); - - - /** - * Construct a new SeqView that is a clone of self except - * that it does not contain the element at the indeicated index; all - * elements to its right are slided left by one. - * - * @param index the index at which to remove an element - * Returns: new seq such that - *
-         *  foreach (int i in 0.. index-1) s.at(i).equals(at(i)); &&
-         *  foreach (int i in index .. s.size()-1) s.at(i).equals(at(i+1));
-         * 
- * Throws: NoSuchElementException if index is not in range 0..size()-1 - **/ - public SeqView removingAt(int index); -} // version -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Set.d --- a/tango/tango/util/collection/model/Set.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,67 +0,0 @@ -/* - File: Set.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - 22Oct95 dl add addElements - -*/ - - -module tango.util.collection.model.Set; - -private import tango.util.collection.model.SetView, - tango.util.collection.model.Iterator, - tango.util.collection.model.Dispenser; - - -/** - * - * MutableSets support an include operations to add - * an element only if it not present. - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public interface Set(T) : SetView!(T), Dispenser!(T) -{ - /** - * Include the indicated element in the collection. - * No effect if the element is already present. - * @param element the element to add - * Returns: condition: - *

-         * has(element) &&
-         * no spurious effects &&
-         * Version change iff !PREV(this).has(element)
-         * 
- * Throws: IllegalElementException if !canInclude(element) - **/ - - public void add (T element); - - - /** - * Include all elements of the enumeration in the collection. - * Behaviorally equivalent to - *
-         * while (e.more()) include(e.get());
-         * 
- * @param e the elements to include - * Throws: IllegalElementException if !canInclude(element) - * Throws: CorruptedIteratorException propagated if thrown - **/ - - public void add (Iterator!(T) e); - public alias add opCatAssign; -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/SetView.d --- a/tango/tango/util/collection/model/SetView.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,55 +0,0 @@ -/* - File: SetView.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.SetView; - -private import tango.util.collection.model.View; - -/** - * Sets provide an include operations for adding - * an element only if it is not already present. - * They also add a guarantee: - * With sets, - * you can be sure that the number of occurrences of any - * element is either zero or one. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ - -public interface SetView(T) : View!(T) -{ -version (VERBOSE) -{ - /** - * Construct a new Collection that is a clone of self except - * that it has indicated element. This can be used - * to create a series of collections, each differing from the - * other only in that they contain additional elements. - * - * @param element the element to include in the new collection - * Returns: a new collection c, with the matches as this, except that - * c.has(element) - * Throws: IllegalElementException if !canInclude(element) - **/ - - public Set including (T element); - public alias including opCat; -} // version -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/Sortable.d --- a/tango/tango/util/collection/model/Sortable.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -/* - File: Sortable.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.Sortable; - -private import tango.util.collection.model.Dispenser, - tango.util.collection.model.Comparator; - - -/** - * - * - * Sortable is a mixin interface for MutableCollections - * supporting a sort method that accepts - * a user-supplied Comparator with a compare method that - * accepts any two Objects and returns -1/0/+1 depending on whether - * the first is less than, equal to, or greater than the second. - *

- * After sorting, but in the absence of other mutative operations, - * Sortable Collections guarantee that enumerations - * appear in sorted order; that is if a and b are two elements - * obtained in succession from nextElement(), that - *

- * comparator().compare(a, b) <= 0.
- * 
- * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public interface Sortable(T) : Dispenser!(T) -{ - - /** - * Sort the current elements with respect to cmp.compare. - **/ - - public void sort(Comparator!(T) cmp); -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/SortedKeys.d --- a/tango/tango/util/collection/model/SortedKeys.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,49 +0,0 @@ -/* - File: SortedKeys.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - -*/ - - -module tango.util.collection.model.SortedKeys; - -private import tango.util.collection.model.View, - tango.util.collection.model.Comparator; - - -/** - * - * - * KeySorted is a mixin interface for Collections that - * are always in sorted order with respect to a Comparator - * held by the Collection. - *

- * KeySorted Collections guarantee that enumerations - * appear in sorted order; that is if a and b are two Keys - * obtained in succession from keys().nextElement(), that - *

- * comparator().compare(a, b) <= 0.
- * 
- * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public interface SortedKeys(K, V) : View!(V) -{ - - /** - * Report the Comparator used for ordering - **/ - - public Comparator!(K) comparator(); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/SortedValues.d --- a/tango/tango/util/collection/model/SortedValues.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,51 +0,0 @@ -/* - File: SortedValues.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - 13Oct95 dl Changed protection statuses - -*/ - - -module tango.util.collection.model.SortedValues; - -private import tango.util.collection.model.View, - tango.util.collection.model.Comparator; - - -/** - * - * - * ElementSorted is a mixin interface for Collections that - * are always in sorted order with respect to a Comparator - * held by the Collection. - *

- * ElementSorted Collections guarantee that enumerations - * appear in sorted order; that is if a and b are two Elements - * obtained in succession from elements().nextElement(), that - *

- * comparator().compare(a, b) <= 0.
- * 
- * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . -**/ - -public interface SortedValues(T) : View!(T) -{ - - /** - * Report the Comparator used for ordering - **/ - - public Comparator!(T) comparator(); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/collection/model/View.d --- a/tango/tango/util/collection/model/View.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,221 +0,0 @@ -/* - File: View.d - - Originally written by Doug Lea and released into the public domain. - Thanks for the assistance and support of Sun Microsystems Labs, Agorics - Inc, Loral, and everyone contributing, testing, and using this code. - - History: - Date Who What - 24Sep95 dl@cs.oswego.edu Create from collections.d working file - 14dec95 dl Declare as a subinterface of Cloneable - 9Apr97 dl made Serializable - -*/ - - -module tango.util.collection.model.View; - -private import tango.util.collection.model.Dispenser; -private import tango.util.collection.model.GuardIterator; - - -/** - * this is the base interface for most classes in this package. - * - * - author: Doug Lea - * @version 0.93 - * - *

For an introduction to this package see Overview . - * -**/ -public interface View(T) -{ - /** - * All Views implement duplicate - **/ - - public Dispenser!(T) duplicate (); - public alias duplicate dup; - - /** - * Report whether the View contains element. - * Behaviorally equivalent to instances(element) >= 0. - * @param element the element to look for - * Returns: true iff contains at least one member that is equal to element. - **/ - public bool contains (T element); - public alias contains opIn; - - /** - * Report the number of elements in the View. - * No other spurious effects. - * Returns: number of elements - **/ - public uint size (); - public alias size length; - - /** - * Report whether this View has no elements. - * Behaviorally equivalent to size() == 0. - * Returns: true if size() == 0 - **/ - - public bool drained (); - - - /** - * All collections maintain a `version number'. The numbering - * scheme is arbitrary, but is guaranteed to change upon every - * modification that could possibly affect an elements() enumeration traversal. - * (This is true at least within the precision of the `int' representation; - * performing more than 2^32 operations will lead to reuse of version numbers). - * Versioning - * may be conservative with respect to `replacement' operations. - * For the sake of versioning replacements may be considered as - * removals followed by additions. Thus version numbers may change - * even if the old and new elements are identical. - *

- * All element() enumerations for Mutable Collections track version - * numbers, and raise inconsistency exceptions if the enumeration is - * used (via get()) on a version other than the one generated - * by the elements() method. - *

- * You can use versions to check if update operations actually have any effect - * on observable state. - * For example, clear() will cause cause a version change only - * if the collection was previously non-empty. - * Returns: the version number - **/ - - public uint mutation (); - - /** - * Report whether the View COULD contain element, - * i.e., that it is valid with respect to the View's - * element screener if it has one. - * Always returns false if element == null. - * A constant function: if allows(v) is ever true it is always true. - * (This property is not in any way enforced however.) - * No other spurious effects. - * Returns: true if non-null and passes element screener check - **/ - public bool allows (T element); - - - /** - * Report the number of occurrences of element in View. - * Always returns 0 if element == null. - * Otherwise T.equals is used to test for equality. - * @param element the element to look for - * Returns: the number of occurrences (always nonnegative) - **/ - public uint instances (T element); - - /** - * Return an enumeration that may be used to traverse through - * the elements in the View. Standard usage, for some - * ViewT c, and some operation `use(T obj)': - *

-         * for (Iterator e = c.elements(); e.more(); )
-         *   use(e.value());
-         * 
- * (The values of get very often need to - * be coerced to types that you know they are.) - *

- * All Views return instances - * of ViewIterator, that can report the number of remaining - * elements, and also perform consistency checks so that - * for MutableViews, element enumerations may become - * invalidated if the View is modified during such a traversal - * (which could in turn cause random effects on the ViewT. - * TO prevent this, ViewIterators - * raise CorruptedIteratorException on attempts to access - * gets of altered Views.) - * Note: Since all View implementations are synchronizable, - * you may be able to guarantee that element traversals will not be - * corrupted by using the java synchronized construct - * around code blocks that do traversals. (Use with care though, - * since such constructs can cause deadlock.) - *

- * Guarantees about the nature of the elements returned by get of the - * returned Iterator may vary accross sub-interfaces. - * In all cases, the enumerations provided by elements() are guaranteed to - * step through (via get) ALL elements in the View. - * Unless guaranteed otherwise (for example in Seq), elements() enumerations - * need not have any particular get() ordering so long as they - * allow traversal of all of the elements. So, for example, two successive - * calls to element() may produce enumerations with the same - * elements but different get() orderings. - * Again, sub-interfaces may provide stronger guarantees. In - * particular, Seqs produce enumerations with gets in - * index order, ElementSortedViews enumerations are in ascending - * sorted order, and KeySortedViews are in ascending order of keys. - * Returns: an enumeration e such that - *

-         *   e.remaining() == size() &&
-         *   foreach (v in e) has(e) 
-         * 
- **/ - - public GuardIterator!(T) elements (); - - /** - traverse the collection content. This is cheaper than using an - iterator since there is no creation cost involved. - **/ - - public int opApply (int delegate (inout T value) dg); - - /** - expose collection content as an array - **/ - - public T[] toArray (); - - /** - * Report whether other has the same element structure as this. - * That is, whether other is of the same size, and has the same - * elements() properties. - * This is a useful version of equality testing. But is not named - * `equals' in part because it may not be the version you need. - *

- * The easiest way to decribe this operation is just to - * explain how it is interpreted in standard sub-interfaces: - *

    - *
  • Seq and ElementSortedView: other.elements() has the - * same order as this.elements(). - *
  • Bag: other.elements has the same instances each element as this. - *
  • Set: other.elements has all elements of this - *
  • Map: other has all (key, element) pairs of this. - *
  • KeySortedView: other has all (key, element) - * pairs as this, and with keys enumerated in the same order as - * this.keys(). - *
- * @param other, a View - * Returns: true if considered to have the same size and elements. - **/ - - public bool matches (View other); - public alias matches opEquals; - - - /** - * Check the consistency of internal state, and raise exception if - * not OK. - * These should be `best-effort' checks. You cannot always locally - * determine full consistency, but can usually approximate it, - * and validate the most important representation invariants. - * The most common kinds of checks are cache checks. For example, - * A linked list that also maintains a separate record of the - * number of items on the list should verify that the recorded - * count matches the number of elements in the list. - *

- * This method should either return normally or throw: - * Throws: ImplementationError if check fails - **/ - - public void checkImplementation(); -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Appender.d --- a/tango/tango/util/log/Appender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,159 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Appender; - -public import tango.core.Exception; - -public import tango.util.log.Event, - tango.util.log.EventLayout; - -/******************************************************************************* - - Base class for all Appenders. These objects are responsible for - emitting messages sent to a particular logger. There may be more - than one appender attached to any logger. The actual message is - constructed by another class known as an EventLayout. - -*******************************************************************************/ - -public class Appender -{ - typedef int Mask; - - private Appender next; - private EventLayout layout; - - /*********************************************************************** - - Return the mask used to identify this Appender. The mask - is used to figure out whether an appender has already been - invoked for a particular logger. - - ***********************************************************************/ - - abstract Mask getMask (); - - /*********************************************************************** - - Return the name of this Appender. - - ***********************************************************************/ - - abstract char[] getName (); - - /*********************************************************************** - - Append a message to the output. - - ***********************************************************************/ - - abstract void append (Event event); - - /*********************************************************************** - - Create an Appender and default its layout to SimpleLayout. - - ***********************************************************************/ - - this () - { - layout = new SimpleLayout; - } - - /*********************************************************************** - - Static method to return a mask for identifying the Appender. - Each Appender class should have a unique fingerprint so that - we can figure out which ones have been invoked for a given - event. A bitmask is a simple an efficient way to do that. - - ***********************************************************************/ - - protected Mask register (char[] tag) - { - static Mask mask = 1; - static Mask[char[]] registry; - - Mask* p = tag in registry; - if (p) - return *p; - else - { - auto ret = mask; - registry [tag] = mask; - - if (mask < 0) - throw new IllegalArgumentException ("too many unique registrations"); - - mask <<= 1; - return ret; - } - } - - /*********************************************************************** - - Set the current layout to be that of the argument. - - ***********************************************************************/ - - void setLayout (EventLayout layout) - { - if (layout) - this.layout = layout; - } - - /*********************************************************************** - - Return the current Layout - - ***********************************************************************/ - - EventLayout getLayout () - { - return layout; - } - - /*********************************************************************** - - Attach another appender to this one - - ***********************************************************************/ - - void setNext (Appender next) - { - this.next = next; - } - - /*********************************************************************** - - Return the next appender in the list - - ***********************************************************************/ - - Appender getNext () - { - return next; - } - - /*********************************************************************** - - Close this appender. This would be used for file, sockets, - and such like. - - ***********************************************************************/ - - void close () - { - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Configurator.d --- a/tango/tango/util/log/Configurator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,53 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Configurator; - -private import tango.util.log.Log, - tango.util.log.EventLayout, - tango.util.log.ConsoleAppender; - -/******************************************************************************* - - Basic utility for initializing the basic behaviour of the - default logging hierarchy. - - Adds a default StdioAppender, with a SimpleTimerLayout, to - the root node, and set the activity level to be everything - enabled. - -*******************************************************************************/ - -static this() -{ - Log.getRootLogger.addAppender(new ConsoleAppender(new SimpleTimerLayout)); -} - - - -/******************************************************************************* - -*******************************************************************************/ - -public class Configurator -{ - /*********************************************************************** - - No longer required. Just import this module instead - - ***********************************************************************/ - - deprecated static void opCall () - { - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/ConsoleAppender.d --- a/tango/tango/util/log/ConsoleAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.ConsoleAppender; - -private import tango.util.log.Appender; - -private import tango.io.Console; - -/******************************************************************************* - - Append to the console. This will use either streams or tango.io - depending upon configuration - -*******************************************************************************/ - -public class ConsoleAppender : Appender -{ - private Mask mask; - - /*********************************************************************** - - Create with the given Layout - - ***********************************************************************/ - - this (EventLayout layout = null) - { - // Get a unique fingerprint for this class - mask = register (getName); - - setLayout (layout); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } - - /*********************************************************************** - - Append an event to the output. - - ***********************************************************************/ - - void append (Event event) - { - synchronized (Cerr) - { - auto layout = getLayout; - Cerr (layout.header (event)); - Cerr (layout.content (event)); - Cerr (layout.footer (event)); - Cerr.newline; - } - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/DateLayout.d --- a/tango/tango/util/log/DateLayout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.DateLayout; - -private import tango.text.Util; - -private import tango.time.Clock, - tango.time.WallClock; - -private import tango.text.convert.Integer; - -private import tango.util.log.Event, - tango.util.log.EventLayout; - -/******************************************************************************* - - A layout with ISO-8601 date information prefixed to each message - -*******************************************************************************/ - -public class DateLayout : EventLayout -{ - private bool localTime; - - private static char[6] spaces = ' '; - - /*********************************************************************** - - Ctor with indicator for local vs UTC time. Default is - local time. - - ***********************************************************************/ - - this (bool localTime = true) - { - this.localTime = localTime; - } - - /*********************************************************************** - - Format message attributes into an output buffer and return - the populated portion. - - ***********************************************************************/ - - char[] header (Event event) - { - char[] level = event.getLevelName; - - // convert time to field values - auto tm = event.getTime; - auto dt = (localTime) ? WallClock.toDate(tm) : Clock.toDate(tm); - - // format date according to ISO-8601 (lightweight formatter) - char[20] tmp = void; - return layout (event.scratch.content, "%0-%1-%2 %3:%4:%5,%6 %7%8 %9 - ", - convert (tmp[0..4], dt.date.year), - convert (tmp[4..6], dt.date.month), - convert (tmp[6..8], dt.date.day), - convert (tmp[8..10], dt.time.hours), - convert (tmp[10..12], dt.time.minutes), - convert (tmp[12..14], dt.time.seconds), - convert (tmp[14..17], dt.time.millis), - spaces [0 .. $-level.length], - level, - event.getName - ); - } - - /********************************************************************** - - Convert an integer to a zero prefixed text representation - - **********************************************************************/ - - private char[] convert (char[] tmp, int i) - { - return format (tmp, cast(long) i, Style.Unsigned, Flags.Zero); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Event.d --- a/tango/tango/util/log/Event.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,336 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - Anders F Bjorklund (Darwin patches) - -*******************************************************************************/ - -module tango.util.log.Event; - -version = UseEventFreeList; - -private import tango.time.Clock; - -private import tango.sys.Common; - -private import tango.core.Exception; - -private import tango.util.log.model.ILevel, - tango.util.log.model.IHierarchy; - - -version (Win32) -{ - extern(Windows) int QueryPerformanceCounter(ulong *count); - extern(Windows) int QueryPerformanceFrequency(ulong *frequency); -} - - -/******************************************************************************* - - Contains all information about a logging event, and is passed around - between methods once it has been determined that the invoking logger - is enabled for output. - - Note that Event instances are maintained in a freelist rather than - being allocated each time, and they include a scratchpad area for - EventLayout formatters to use. - -*******************************************************************************/ - -public class Event : ILevel -{ - // primary event attributes - private char[] msg, - name; - private Time time; - private Level level; - private IHierarchy hierarchy; - - // timestamps - private static Time beginTime; - - // scratch buffer for constructing output strings - struct Scratch - { - uint length; - char[256] content; - } - package Scratch scratch; - - - // logging-level names - package static char[][] LevelNames = - [ - "Trace ", "Info ", "Warn ", "Error ", "Fatal ", "None " - ]; - - version (Win32) - { - private static double multiplier; - private static ulong timerStart; - } - - /*********************************************************************** - - Support for free-list - - ***********************************************************************/ - - version (UseEventFreeList) - { - /*************************************************************** - - Instance variables for free-list support - - ***************************************************************/ - - private Event next; - private static Event freelist; - - /*************************************************************** - - Allocate an Event from a list rather than - creating a new one - - ***************************************************************/ - - static final synchronized Event allocate () - { - Event e; - - if (freelist) - { - e = freelist; - freelist = e.next; - } - else - e = new Event (); - return e; - } - - /*************************************************************** - - Return this Event to the free-list - - ***************************************************************/ - - static final synchronized void deallocate (Event e) - { - e.next = freelist; - freelist = e; - - version (EventReset) - e.reset; - } - } - - /*********************************************************************** - - Setup timing information for later use - - ***********************************************************************/ - - package static void initialize () - { - version (Posix) - { - beginTime = Clock.now; - } - - version (Win32) - { - ulong freq; - - if (! QueryPerformanceFrequency (&freq)) - throw new PlatformException ("high-resolution timer is not available"); - - QueryPerformanceCounter (&timerStart); - multiplier = cast(double) TimeSpan.TicksPerSecond / freq; - beginTime = Clock.now; - - } - } - - /*********************************************************************** - - Return time when the executable started - - ***********************************************************************/ - - final static Time startedAt () - { - return beginTime; - } - - /*********************************************************************** - - Return the current time - - ***********************************************************************/ - - final static Time timer () - { - version (Posix) - { - return Clock.now; - } - - version (Win32) - { - ulong now; - - QueryPerformanceCounter (&now); - return beginTime + TimeSpan(cast(long)((now - timerStart) * multiplier)); - } - } - - /*********************************************************************** - - Set the various attributes of this event. - - ***********************************************************************/ - - final void set (IHierarchy hierarchy, Level level, char[] msg, char[] name) - { - this.hierarchy = hierarchy; - this.time = timer(); - this.level = level; - this.name = name; - this.msg = msg; - } - - version (EventReset) - { - /*************************************************************** - - Reset this event - - ***************************************************************/ - - final void reset () - { - time = 0; - msg = null; - name = null; - level = Level.None; - } - } - - /*********************************************************************** - - Return the message attached to this event. - - ***********************************************************************/ - - final override char[] toString () - { - return msg; - } - - /*********************************************************************** - - Return the name of the logger which produced this event - - ***********************************************************************/ - - final char[] getName () - { - return name; - } - - /*********************************************************************** - - Return the scratch buffer for formatting. This is a thread - safe place to format data within, without allocating any - memory. - - ***********************************************************************/ - - final char[] getContent () - { - return scratch.content [0..scratch.length]; - } - - /*********************************************************************** - - Return the logger level of this event. - - ***********************************************************************/ - - final Level getLevel () - { - return level; - } - - /*********************************************************************** - - Return the logger level name of this event. - - ***********************************************************************/ - - final char[] getLevelName () - { - return LevelNames[level]; - } - - /*********************************************************************** - - Return the hierarchy where the event was produced from - - ***********************************************************************/ - - final IHierarchy getHierarchy () - { - return hierarchy; - } - - /*********************************************************************** - - Return the time this event was produced, relative to the - start of this executable - - ***********************************************************************/ - - final TimeSpan getSpan () - { - return time - beginTime; - } - - /*********************************************************************** - - Return the time this event was produced relative to Epoch - - ***********************************************************************/ - - final Time getTime () - { - return time; - } - - /*********************************************************************** - - Append some content to the scratch buffer. This is limited - to the size of said buffer, and will not expand further. - - ***********************************************************************/ - - final Event append (char[] x) - { - uint addition = x.length; - uint newLength = scratch.length + x.length; - - if (newLength < scratch.content.length) - { - scratch.content [scratch.length..newLength] = x[0..addition]; - scratch.length = newLength; - } - return this; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/EventLayout.d --- a/tango/tango/util/log/EventLayout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.EventLayout; - -private import tango.time.Time; - -private import tango.util.log.Event; - -/******************************************************************************* - - Base class for all logging layout instances - -*******************************************************************************/ - -public class EventLayout -{ - /*********************************************************************** - - Subclasses should implement this method to perform the - formatting of each message header - - ***********************************************************************/ - - abstract char[] header (Event event); - - /*********************************************************************** - - Subclasses should implement this method to perform the - formatting of each message footer - - ***********************************************************************/ - - char[] footer (Event event) - { - return ""; - } - - /*********************************************************************** - - Subclasses should implement this method to perform the - formatting of the actual message content. - - ***********************************************************************/ - - char[] content (Event event) - { - return event.toString; - } - - /*********************************************************************** - - Convert a time value (in milliseconds) to ascii - - ***********************************************************************/ - - final char[] toMilli (char[] s, TimeSpan time) - { - assert (s.length > 0); - long ms = time.millis; - - int len = s.length; - do { - s[--len] = ms % 10 + '0'; - ms /= 10; - } while (ms && len); - return s[len..s.length]; - } -} - - -/******************************************************************************* - - A bare layout comprised of tag and message - -*******************************************************************************/ - -public class SpartanLayout : EventLayout -{ - /*********************************************************************** - - Format outgoing message - - ***********************************************************************/ - - char[] header (Event event) - { - event.append(event.getName).append(event.getHierarchy.context.label).append(" - "); - return event.getContent; - } -} - - -/******************************************************************************* - - A simple layout comprised only of level, name, and message - -*******************************************************************************/ - -public class SimpleLayout : EventLayout -{ - /*********************************************************************** - - Format outgoing message - - ***********************************************************************/ - - char[] header (Event event) - { - event.append (event.getLevelName) - .append (event.getName) - .append(event.getHierarchy.context.label) - .append (" - "); - return event.getContent; - } -} - - -/******************************************************************************* - - A simple layout comprised only of time(ms), level, name, and message - -*******************************************************************************/ - -public class SimpleTimerLayout : EventLayout -{ - /*********************************************************************** - - Format outgoing message - - ***********************************************************************/ - - char[] header (Event event) - { - char[20] tmp; - - event.append (toMilli (tmp, event.getSpan)) - .append (" ") - .append (event.getLevelName) - .append (event.getName) - .append(event.getHierarchy.context.label) - .append (" - "); - return event.getContent; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/FileAppender.d --- a/tango/tango/util/log/FileAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.FileAppender; - -private import tango.util.log.Appender; - -private import tango.io.Buffer, - tango.io.FileConst, - tango.io.FileConduit; - -private import tango.io.model.IConduit; - -/******************************************************************************* - - Append log messages to a file. This basic version has no rollover - support, so it just keeps on adding to the file. There's also a - RollingFileAppender that may suit your needs. - -*******************************************************************************/ - -public class FileAppender : Appender -{ - private Mask mask; - private Buffer buffer; - private IConduit conduit_; - - /*********************************************************************** - - ***********************************************************************/ - - protected this () - { - } - - /*********************************************************************** - - Create a basic FileAppender to a file with the specified - path. - - ***********************************************************************/ - - this (FilePath fp, EventLayout layout = null) - { - // Get a unique fingerprint for this instance - mask = register (fp.toString); - - // make it shareable for read - auto style = FileConduit.WriteAppending; - style.share = FileConduit.Share.Read; - setConduit (new FileConduit (fp, style)); - - setLayout (layout); - } - - /*********************************************************************** - - Create a basic FileAppender to a file with the specified - path, and with the given EventLayout - - ***********************************************************************/ - - this (char[] fp, EventLayout layout = null) - { - this (new FilePath (fp), layout); - } - - /*********************************************************************** - - Return the conduit - - ***********************************************************************/ - - IConduit conduit () - { - return conduit_; - } - - /*********************************************************************** - - Set the conduit - - ***********************************************************************/ - - protected Buffer setConduit (IConduit conduit) - { - // create a new buffer upon this conduit - conduit_ = conduit; - return (buffer = new Buffer(conduit)); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } - - /*********************************************************************** - - Append an event to the output. - - ***********************************************************************/ - - synchronized void append (Event event) - { - auto layout = getLayout; - buffer.append (layout.header (event)); - buffer.append (layout.content (event)); - buffer.append (layout.footer (event)) - .append (FileConst.NewlineString) - .flush (); - } - - /*********************************************************************** - - Close the file associated with this Appender - - ***********************************************************************/ - - synchronized void close () - { - if (conduit_) - { - conduit_.detach; - conduit_ = null; - } - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Hierarchy.d --- a/tango/tango/util/log/Hierarchy.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,721 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2004: Initial release - version: Feb 2007: Switched to lazy expr - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Hierarchy; - -private import tango.time.Clock; - -private import tango.core.Exception; - -private import tango.util.log.Logger, - tango.util.log.Appender; - -private import tango.text.convert.Layout; - -private import tango.util.log.model.IHierarchy; - -/******************************************************************************* - - Pull in additional functions from the C library - -*******************************************************************************/ - -extern (C) -{ - int memcmp (void *, void *, int); -} - -/******************************************************************************* - - Hack to sidestep linux linker errors (big thanks to Keinfarbton) - -*******************************************************************************/ - -private Layout!(char) format; - -static this() -{ - .format = new Layout!(char); -} - -/******************************************************************************* - - Loggers are named entities, sometimes shared, sometimes specific to - a particular portion of code. The names are generally hierarchical in - nature, using dot notation (with '.') to separate each named section. - For example, a typical name might be something like "mail.send.writer" - --- - import tango.util.log.Log; - - auto log = Log.getLogger ("mail.send.writer"); - - log.info ("an informational message"); - log.error ("an exception message: " ~ exception.toString); - - etc ... - --- - - It is considered good form to pass a logger instance as a function or - class-ctor argument, or to assign a new logger instance during static - class construction. For example: if it were considered appropriate to - have one logger instance per class, each might be constructed like so: - --- - private Logger log; - - static this() - { - log = Log.getLogger (nameOfThisClassOrStructOrModule); - } - --- - - Messages passed to a Logger are assumed to be pre-formatted. You - may find that the format() methos is handy for collating various - components of the message: - --- - char tmp[128] = void; - ... - log.warn (log.format (tmp, "temperature is {} degrees!", 101)); - --- - - Note that a provided workspace is used to format the message, which - should generally be located on the stack so as to support multiple - threads of execution. In the example above we indicate assignment as - "tmp = void", although this is an optional attribute (see the language - manual for more information). - - To avoid overhead when constructing formatted messages, the logging - system employs lazy expressions such that the message is not constructed - unless the logger is actually active. You can also explicitly check to - see whether a logger is active or not: - --- - if (log.isEnabled (log.Level.Warn)) - log.warn (log.format (tmp, "temperature is {} degrees!", 101)); - --- - - You might optionally configure various layout & appender implementations - to support specific rendering needs. - - tango.log closely follows both the API and the behaviour as documented - at the official Log4J site, where you'll find a good tutorial. Those - pages are hosted over - here. - -*******************************************************************************/ - -private class LoggerInstance : Logger -{ - private LoggerInstance next, - parent; - - private char[] name_; - private Level level_; - private Appender appender; - private Hierarchy hierarchy; - private bool additive, - breakpoint; - - - /*********************************************************************** - - Construct a LoggerInstance with the specified name for the - given hierarchy. By default, logger instances are additive - and are set to emit all events. - - ***********************************************************************/ - - protected this (Hierarchy hierarchy, char[] name) - { - this.hierarchy = hierarchy; - this.level_ = Level.Trace; - this.additive = true; - this.name_ = name; - } - - /*********************************************************************** - - No, you should not delete or 'scope' these entites - - ***********************************************************************/ - - private ~this() - { - } - - /*********************************************************************** - - Is this logger enabed for the specified Level? - - ***********************************************************************/ - - final bool isEnabled (Level level = Level.Fatal) - { - return hierarchy.context.isEnabled (level_, level); - } - - /*********************************************************************** - - Is this a breakpoint Logger? - - ***********************************************************************/ - - final bool isBreakpoint () - { - return breakpoint; - } - - /*********************************************************************** - - Is this logger additive? That is, should we walk ancestors - looking for more appenders? - - ***********************************************************************/ - - final bool isAdditive () - { - return additive; - } - - /*********************************************************************** - - Append a trace message - - ***********************************************************************/ - - final Logger trace (lazy char[] msg) - { - return append (Level.Trace, msg); - } - - /*********************************************************************** - - Append an info message - - ***********************************************************************/ - - final Logger info (lazy char[] msg) - { - return append (Level.Info, msg); - } - - /*********************************************************************** - - Append a warning message - - ***********************************************************************/ - - final Logger warn (lazy char[] msg) - { - return append (Level.Warn, msg); - } - - /*********************************************************************** - - Append an error message - - ***********************************************************************/ - - final Logger error (lazy char[] msg) - { - return append (Level.Error, msg); - } - - /*********************************************************************** - - Append a fatal message - - ***********************************************************************/ - - final Logger fatal (lazy char[] msg) - { - return append (Level.Fatal, msg); - } - - /*********************************************************************** - - Return the name of this Logger (sans the appended dot). - - ***********************************************************************/ - - final char[] name () - { - int i = name_.length; - if (i > 0) - --i; - return name_[0 .. i]; - } - - /*********************************************************************** - - Return the Level this logger is set to - - ***********************************************************************/ - - final Level level () - { - return level_; - } - - /*********************************************************************** - - Set the current level for this logger (and only this logger). - - ***********************************************************************/ - - final Logger setLevel (Level level = Level.Trace) - { - return setLevel (level, false); - } - - /*********************************************************************** - - Set the current level for this logger, and (optionally) all - of its descendents. - - ***********************************************************************/ - - final Logger setLevel (Level level, bool propagate) - { - this.level_ = level; - hierarchy.updateLoggers (this, propagate); - return this; - } - - /*********************************************************************** - - Set the breakpoint status of this logger. - - ***********************************************************************/ - - final Logger setBreakpoint (bool enabled) - { - breakpoint = enabled; - hierarchy.updateLoggers (this, false); - return this; - } - - /*********************************************************************** - - Set the additive status of this logger. See isAdditive(). - - ***********************************************************************/ - - final Logger setAdditive (bool enabled) - { - additive = enabled; - return this; - } - - /*********************************************************************** - - Add (another) appender to this logger. Appenders are each - invoked for log events as they are produced. At most, one - instance of each appender will be invoked. - - ***********************************************************************/ - - final Logger addAppender (Appender next) - { - if (appender) - next.setNext (appender); - appender = next; - return this; - } - - /*********************************************************************** - - Remove all appenders from this Logger - - ***********************************************************************/ - - final Logger clearAppenders () - { - appender = null; - return this; - } - - - /*********************************************************************** - - Get time since this application started - - ***********************************************************************/ - - final TimeSpan runtime () - { - return Clock.now - Event.startedAt; - } - - /*********************************************************************** - - Append a message to this logger via its appender list. - - ***********************************************************************/ - - final Logger append (Level level, lazy char[] exp) - { - if (hierarchy.context.isEnabled (level_, level)) - { - auto event = Event.allocate; - scope (exit) - Event.deallocate (event); - - // set the event attributes - event.set (hierarchy, level, exp, name.length ? name_[0..$-1] : "root"); - - // combine appenders from all ancestors - auto links = this; - Appender.Mask masks = 0; - do { - auto appender = links.appender; - - // this level have an appender? - while (appender) - { - auto mask = appender.getMask; - - // have we used this appender already? - if ((masks & mask) is 0) - { - // no - append message and update mask - event.scratch.length = 0; - appender.append (event); - masks |= mask; - } - // process all appenders for this node - appender = appender.getNext; - } - // process all ancestors - } while (links.additive && ((links = links.parent) !is null)); - } - return this; - } - - /*********************************************************************** - - Format text using the formatter configured in the associated - hierarchy (see Hierarchy.setFormat) - - ***********************************************************************/ - - final char[] format (char[] buffer, char[] formatStr, ...) - { - return .format.vprint (buffer, formatStr, _arguments, _argptr); - } - - /*********************************************************************** - - See if the provided Logger is a good match as a parent of - this one. Note that each Logger name has a '.' appended to - the end, such that name segments will not partially match. - - ***********************************************************************/ - - private final bool isCloserAncestor (LoggerInstance other) - { - auto length = other.name_.length; - - // possible parent if length is shorter - if (length < name_.length) - // does the prefix match? Note we append a "." to each - if (length is 0 || - memcmp (&other.name_[0], &name_[0], length) is 0) - // is this a better (longer) match than prior parent? - if ((parent is null) || (length >= parent.name_.length)) - return true; - return false; - } -} - - -/******************************************************************************* - - The Logger hierarchy implementation. We keep a reference to each - logger in a hash-table for convenient lookup purposes, plus keep - each logger linked to the others in an ordered chain. Ordering - places shortest names at the head and longest ones at the tail, - making the job of identifying ancestors easier in an orderly - fashion. For example, when propagating levels across descendents - it would be a mistake to propagate to a child before all of its - ancestors were taken care of. - -*******************************************************************************/ - -class Hierarchy : IHierarchy, IHierarchy.Context -{ - private char[] name, - address; - private LoggerInstance root; - private LoggerInstance[char[]] loggers; - private Context context_; - - /*********************************************************************** - - Construct a hierarchy with the given name. - - ***********************************************************************/ - - this (char[] name) - { - this.name = name; - this.address = "network"; - - // insert a root node; the root has an empty name - root = new LoggerInstance (this, ""); - context = this; - } - - /********************************************************************** - - **********************************************************************/ - - final char[] label () - { - return ""; - } - - /********************************************************************** - - - **********************************************************************/ - - final bool isEnabled (ILevel.Level level, ILevel.Level test) - { - return test >= level; - } - - /********************************************************************** - - Return the name of this Hierarchy - - **********************************************************************/ - - final char[] getName () - { - return name; - } - - /********************************************************************** - - Return the address of this Hierarchy. This is typically - attached when sending events to remote monitors. - - **********************************************************************/ - - final char[] getAddress () - { - return address; - } - - /********************************************************************** - - Set the name of this Hierarchy - - **********************************************************************/ - - final void setName (char[] name) - { - this.name = name; - } - - /********************************************************************** - - Set the address of this Hierarchy. The address is attached - used when sending events to remote monitors. - - **********************************************************************/ - - final void setAddress (char[] address) - { - this.address = address; - } - - /********************************************************************** - - Set the diagnostic context. Not usually necessary, as a - default was created. Useful when you need to provide a - different implementation, such as a ThreadLocal variant. - - **********************************************************************/ - - final void context (Context context) - { - this.context_ = context; - } - - /********************************************************************** - - Return the diagnostic context. Useful for setting an - override logging level. - - **********************************************************************/ - - final Context context () - { - return context_; - } - - /*********************************************************************** - - Return the root node. - - ***********************************************************************/ - - final LoggerInstance getRootLogger () - { - return root; - } - - /*********************************************************************** - - Return the instance of a Logger with the provided label. If - the instance does not exist, it is created at this time. - - ***********************************************************************/ - - final synchronized LoggerInstance getLogger (char[] label) - { - auto name = label ~ "."; - auto l = name in loggers; - - if (l is null) - { - // create a new logger - auto li = new LoggerInstance (this, name); - l = &li; - - // insert into linked list - insertLogger (li); - - // look for and adjust children - updateLoggers (li, true); - - // insert into map - loggers [name] = li; - } - - return *l; - } - - /********************************************************************** - - Iterate over all Loggers in list - - **********************************************************************/ - - final int opApply (int delegate(inout Logger) dg) - { - int result = 0; - LoggerInstance curr = root; - - while (curr) - { - // BUG: this uncovers a cast() issue in the 'inout' delegation - Logger logger = curr; - if ((result = dg (logger)) != 0) - break; - curr = curr.next; - } - return result; - } - - /*********************************************************************** - - Loggers are maintained in a sorted linked-list. The order - is maintained such that the shortest name is at the root, - and the longest at the tail. - - This is done so that updateLoggers() will always have a - known environment to manipulate, making it much faster. - - ***********************************************************************/ - - private void insertLogger (LoggerInstance l) - { - LoggerInstance prev, - curr = root; - - while (curr) - { - // insert here if the new name is shorter - if (l.name.length < curr.name.length) - if (prev is null) - throw new IllegalElementException ("invalid hierarchy"); - else - { - l.next = prev.next; - prev.next = l; - return; - } - else - // find best match for parent of new entry - propagate (l, curr, true); - - // remember where insertion point should be - prev = curr; - curr = curr.next; - } - - // add to tail - prev.next = l; - } - - /*********************************************************************** - - Propagate hierarchical changes across known loggers. - This includes changes in the hierarchy itself, and to - the various settings of child loggers with respect to - their parent(s). - - ***********************************************************************/ - - private void updateLoggers (LoggerInstance changed, bool force) - { - LoggerInstance logger = root; - - // scan all loggers - while (logger) - { - propagate (logger, changed, force); - - // try next entry - logger = logger.next; - } - } - - /*********************************************************************** - - Propagate changes in the hierarchy downward to child Loggers. - Note that while 'parent' and 'breakpoint' are always forced - to update, the update of 'level' is selectable. - - ***********************************************************************/ - - private void propagate (LoggerInstance logger, LoggerInstance changed, bool force) - { - // is the changed instance a better match for our parent? - if (logger.isCloserAncestor (changed)) - { - // update parent (might actually be current parent) - logger.parent = changed; - - // if we don't have an explicit level set, inherit it - if ((logger.level is Logger.Level.None) || force) - logger.setLevel (changed.level); - - // always force breakpoints to follow parent settings - logger.breakpoint = changed.breakpoint; - } - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Log.d --- a/tango/tango/util/log/Log.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - version: Hierarchy moved due to circular dependencies; Oct 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Log; - -public import tango.util.log.Logger; - -private import tango.util.log.Event, - tango.util.log.Hierarchy; - -private import tango.util.log.model.ILevel; - -/******************************************************************************* - - Manager for routing Logger calls to the default hierarchy. Note - that you may have multiple hierarchies per application, but must - access the hierarchy directly for getRootLogger() and getLogger() - methods within each additional instance. - -*******************************************************************************/ - -class Log : ILevel -{ - static private Hierarchy base; - - private static ILevel.Level[char[]] map; - - private struct Pair {char[] name; ILevel.Level value;} - - private static Pair[] Pairs = - [ - {"TRACE", ILevel.Level.Trace}, - {"Trace", ILevel.Level.Trace}, - {"trace", ILevel.Level.Trace}, - {"INFO", ILevel.Level.Info}, - {"Info", ILevel.Level.Info}, - {"info", ILevel.Level.Info}, - {"WARN", ILevel.Level.Warn}, - {"Warn", ILevel.Level.Warn}, - {"warn", ILevel.Level.Warn}, - {"ERROR", ILevel.Level.Error}, - {"Error", ILevel.Level.Error}, - {"error", ILevel.Level.Error}, - {"Fatal", ILevel.Level.Fatal}, - {"FATAL", ILevel.Level.Fatal}, - {"fatal", ILevel.Level.Fatal}, - {"NONE", ILevel.Level.None}, - {"None", ILevel.Level.None}, - {"none", ILevel.Level.None}, - ]; - - /*********************************************************************** - - This is a singleton, so hide the constructor. - - ***********************************************************************/ - - private this () - { - } - - /*********************************************************************** - - Initialize the base hierarchy. - - ***********************************************************************/ - - static this () - { - base = new Hierarchy ("tango"); - Event.initialize (); - - // populate a map of acceptable level names - foreach (p; Pairs) - map[p.name] = p.value; - } - - /*********************************************************************** - - Return the root Logger instance. This is the ancestor of - all loggers and, as such, can be used to manipulate the - entire hierarchy. For instance, setting the root 'level' - attribute will affect all other loggers in the tree. - - ***********************************************************************/ - - static Logger getRootLogger () - { - return base.getRootLogger (); - } - - /*********************************************************************** - - Return an instance of the named logger. Names should be - hierarchical in nature, using dot notation (with '.') to - separate each name section. For example, a typical name - might be something like "tango.io.Buffer". - - If the logger does not currently exist, it is created and - inserted into the hierarchy. A parent will be attached to - it, which will be either the root logger or the closest - ancestor in terms of the hierarchical name space. - - ***********************************************************************/ - - static Logger getLogger (char[] name) - { - return base.getLogger (name); - } - - /*********************************************************************** - - Return the singleton hierarchy. - - ***********************************************************************/ - - static Hierarchy getHierarchy () - { - return base; - } - - /*********************************************************************** - - Return the level of a given name - - ***********************************************************************/ - - static ILevel.Level level (char[] name, ILevel.Level def=ILevel.Level.Trace) - { - auto p = name in map; - if (p) - return *p; - return def; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Log4Layout.d --- a/tango/tango/util/log/Log4Layout.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Log4Layout; - -private import tango.core.Thread; - -private import tango.util.log.Event, - tango.util.log.EventLayout; - -/******************************************************************************* - - A layout with XML output conforming to Log4J specs. - -*******************************************************************************/ - -public class Log4Layout : EventLayout -{ - /*********************************************************************** - - Format message attributes into an output buffer and return - the populated portion. - - ***********************************************************************/ - - char[] header (Event event) - { - char[20] tmp; - char[] threadName; - - threadName = Thread.getThis.name; - if (threadName.length is 0) - threadName = "{unknown}"; - - event.append ("\r\n\r\n\r\n"); - - return event.getContent; - } -} - - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Logger.d --- a/tango/tango/util/log/Logger.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: May 2004: Initial release - version: Feb 2007: Switched to lazy expr - - author: Kris - -*******************************************************************************/ - -module tango.util.log.Logger; - -private import tango.time.Time; - -private import tango.util.log.Appender; - -private import tango.util.log.model.ILevel; - -/******************************************************************************* - - Loggers are named entities, sometimes shared, sometimes specific to - a particular portion of code. The names are generally hierarchical in - nature, using dot notation (with '.') to separate each named section. - For example, a typical name might be something like "mail.send.writer" - --- - import tango.util.log.Log; - - auto log = Log.getLogger ("mail.send.writer"); - - log.info ("an informational message"); - log.error ("an exception message: " ~ exception.toString); - - etc ... - --- - - It is considered good form to pass a logger instance as a function or - class-ctor argument, or to assign a new logger instance during static - class construction. For example: if it were considered appropriate to - have one logger instance per class, each might be constructed like so: - --- - private Logger log; - - static this() - { - log = Log.getLogger (nameOfThisClassOrStructOrModule); - } - --- - - Messages passed to a Logger are assumed to be pre-formatted. You - may find that the format() methos is handy for collating various - components of the message: - --- - char tmp[128] = void; - ... - log.warn (log.format (tmp, "temperature is {} degrees!", 101)); - --- - - Note that a provided workspace is used to format the message, which - should generally be located on the stack so as to support multiple - threads of execution. In the example above we indicate assignment as - "tmp = void", although this is an optional attribute (see the language - manual for more information). - - To avoid overhead when constructing formatted messages, the logging - system employs lazy expressions such that the message is not constructed - unless the logger is actually active. You can also explicitly check to - see whether a logger is active or not: - --- - if (log.isEnabled (log.Level.Warn)) - log.warn (log.format (tmp, "temperature is {} degrees!", 101)); - --- - - You might optionally configure various layout & appender implementations - to support specific exact rendering needs. - - tango.log closely follows both the API and the behaviour as documented - at the official Log4J site, where you'll find a good tutorial. Those - pages are hosted over - here. - -*******************************************************************************/ - -public class Logger : ILevel -{ - /*********************************************************************** - - Add a trace message. This is called 'debug' in Log4J but - that is a reserved word in the D language - - ***********************************************************************/ - - abstract Logger trace (lazy char[] exp); - - /*********************************************************************** - - Add an info message - - ***********************************************************************/ - - abstract Logger info (lazy char[] exp); - - /*********************************************************************** - - Add a warning message - - ***********************************************************************/ - - abstract Logger warn (lazy char[] exp); - - /*********************************************************************** - - Add an error message - - ***********************************************************************/ - - abstract Logger error (lazy char[] exp); - - /*********************************************************************** - - Add a fatal message - - ***********************************************************************/ - - abstract Logger fatal (lazy char[] exp); - - /*********************************************************************** - - Append a message to this logger via its appender list. - - ***********************************************************************/ - - abstract Logger append (Level level, lazy char[] exp); - - /*********************************************************************** - - Format text using the formatter configured in the associated - hierarchy (see Hierarchy.setFormat) - - ***********************************************************************/ - - abstract char[] format (char[] buffer, char[] formatStr, ...); - - /*********************************************************************** - - Return the name of this Logger - - ***********************************************************************/ - - abstract char[] name (); - - /*********************************************************************** - - Return the current level assigned to this logger - - ***********************************************************************/ - - abstract Level level (); - - /*********************************************************************** - - Set the activity level of this logger. Levels control how - much information is emitted during runtime, and relate to - each other as follows: - --- - Trace < Info < Warn < Error < Fatal < None - --- - That is, if the level is set to Error, only calls to the - error() and fatal() methods will actually produce output: - all others will be inhibited. - - Note that Log4J is a hierarchical environment, and each - logger defaults to inheriting a level from its parent. - - - ***********************************************************************/ - - abstract Logger setLevel (Level level = Level.Trace); - - /*********************************************************************** - - same as setLevel (Level), but with additional control over - whether the children are forced to accept the changed level - or not. If 'force' is false, then children adopt the parent - level only if they have their own level set to Level.None - - ***********************************************************************/ - - abstract Logger setLevel (Level level, bool force); - - /*********************************************************************** - - Is this logger enabled for the provided level? - - ***********************************************************************/ - - abstract bool isEnabled (Level level = Level.Fatal); - - /*********************************************************************** - - Return whether this logger uses additive appenders or not. - See setAdditive(). - - ***********************************************************************/ - - abstract bool isAdditive (); - - /*********************************************************************** - - Specify whether or not this logger has additive behaviour. - This is enabled by default, and causes a logger to invoke - all appenders within its ancestry (until an ancestor is - found with an additive attribute of false). - - ***********************************************************************/ - - abstract Logger setAdditive (bool enabled); - - /*********************************************************************** - - Add an appender to this logger. You may add multiple - appenders to appropriate loggers, and each of them - will be invoked for that given logger, and for each - of its child loggers (assuming isAdditive() is true - for those children). Note that multiple instances - of the same appender, regardless of where they may - reside within the tree, are not invoked at runtime. - That is, only one from a set of identical loggers - will execute. - - Use clearAppenders() to remove all from a given logger. - - ***********************************************************************/ - - abstract Logger addAppender (Appender appender); - - /*********************************************************************** - - Remove all appenders from this logger. - - ***********************************************************************/ - - abstract Logger clearAppenders (); - - /*********************************************************************** - - Get number of milliseconds since this application started - - ***********************************************************************/ - - abstract TimeSpan runtime (); -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/MailAppender.d --- a/tango/tango/util/log/MailAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,107 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.MailAppender; - -private import tango.util.log.Appender; - -private import tango.io.Buffer, - tango.net.SocketConduit, - tango.net.InternetAddress; - -/******************************************************************************* - - Appender for sending formatted output to a Mail server. Thanks - to BCS for posting how to do this. - -*******************************************************************************/ - -public class MailAppender : Appender -{ - private char[] to, - from, - subj; - private Mask mask; - private InternetAddress server; - - /*********************************************************************** - - Create with the given layout and server address - - ***********************************************************************/ - - this (InternetAddress server, char[] from, char[] to, char[] subj, EventLayout layout = null) - { - setLayout (layout); - - this.to = to; - this.from = from; - this.subj = subj; - this.server = server; - - // Get a unique fingerprint for this appender - mask = register (to ~ subj); - } - - /*********************************************************************** - - Send an event to the mail server - - ***********************************************************************/ - - synchronized void append (Event event) - { - auto conduit = new SocketConduit; - scope (exit) - conduit.close; - - conduit.connect (server); - auto emit = new Buffer (conduit); - - emit ("HELO none@anon.org\r\nMAIL FROM:<") - (from) - (">\r\nRCPT TO:<") - (to) - (">\r\nDATA\r\nSubject: ") - (subj) - ("\r\nContent-Type: text/plain; charset=us-ascii\r\n\r\n"); - - auto layout = getLayout(); - emit (layout.header (event)); - emit (layout.content (event)); - emit (layout.footer (event)); - emit ("\r\n.\r\nQUIT\r\n"); - emit (); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/NullAppender.d --- a/tango/tango/util/log/NullAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,86 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.NullAppender; - -private import tango.util.log.Appender; - -/******************************************************************************* - - An appender that does nothing. This is useful for cutting and - pasting, and for benchmarking the tango.log environment. - -*******************************************************************************/ - -public class NullAppender : Appender -{ - private Mask mask; - - /*********************************************************************** - - Construct a NullAppender - - ***********************************************************************/ - - this () - { - // Get a unique fingerprint for this class - mask = register (getName); - } - - /*********************************************************************** - - Create with the given Layout - - ***********************************************************************/ - - this (EventLayout layout) - { - setLayout (layout); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } - - /*********************************************************************** - - Append an event to the output. - - ***********************************************************************/ - - void append (Event event) - { - auto layout = getLayout; - layout.header (event); - layout.content (event); - layout.footer (event); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/PropertyConfigurator.d --- a/tango/tango/util/log/PropertyConfigurator.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Nov 2005: split from Configurator.d - verison: Feb 2007: removed default console configuration - - author: Kris - -*******************************************************************************/ - -module tango.util.log.PropertyConfigurator; - -private import tango.io.FilePath; - -private import tango.util.log.Log; - -private import tango.text.Properties; - -/******************************************************************************* - - A utility class for initializing the basic behaviour of the - default logging hierarchy. - - PropertyConfigurator parses a much simplified version of the - property file. tango.log only supports the settings of Logger - levels at this time; setup of Appenders and Layouts are currently - done "in the code" - -*******************************************************************************/ - -struct PropertyConfigurator -{ - /*********************************************************************** - - Add a default StdioAppender, with a SimpleTimerLayout, to - the root node. The activity levels of all nodes are set - via a property file with name=value pairs specified in the - following format: - - name: the actual logger name, in dot notation - format. The name "root" is reserved to - match the root logger node. - - value: one of TRACE, INFO, WARN, ERROR, FATAL - or NONE (or the lowercase equivalents). - - For example, the declaration - - --- - tango.unittest = INFO - myApp.SocketActivity = TRACE - --- - - sets the level of the loggers called tango.unittest and - myApp.SocketActivity - - ***********************************************************************/ - - static void opCall (FilePath path) - { - void loader (char[] name, char[] value) - { - auto l = (name == "root") ? Log.getRootLogger - : Log.getLogger (name); - - if (l) - l.setLevel (Log.level(value)); - } - - // read and parse properties from file - Properties!(char).load (path, &loader); - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/RollingFileAppender.d --- a/tango/tango/util/log/RollingFileAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,177 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.RollingFileAppender; - -private import tango.time.Time; - -private import tango.io.FilePath, - tango.io.FileConst, - tango.io.FileConduit; - -private import tango.io.model.IBuffer; - -private import tango.util.log.Appender, - tango.util.log.FileAppender; - -/******************************************************************************* - - Append log messages to a file set. - -*******************************************************************************/ - -public class RollingFileAppender : FileAppender -{ - private Mask mask; - private FilePath[] paths; - private int index; - private IBuffer buffer; - private ulong maxSize, - fileSize; - - /*********************************************************************** - - Create a RollingFileAppender upon a file-set with the - specified path and optional layout. - - Where a file set already exists, we resume appending to - the one with the most recent activity timestamp. - - ***********************************************************************/ - - this (char[] path, int count, ulong maxSize, EventLayout layout = null) - { - assert (path); - assert (count > 1 && count < 10); - - // Get a unique fingerprint for this instance - mask = register (path); - - char[1] x; - Time mostRecent; - - for (int i=0; i < count; ++i) - { - x[0] = '0' + i; - - auto p = new FilePath (path); - p.name = p.name ~ x; - paths ~= p; - - // use the most recent file in the set - if (p.exists) - { - auto modified = p.modified; - if (modified > mostRecent) - { - mostRecent = modified; - index = i; - } - } - } - - // remember the maximum size - this.maxSize = maxSize; - - // adjust index and open the appropriate log file - --index; - nextFile (false); - - // set provided layout (ignored when null) - setLayout (layout); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } - - /*********************************************************************** - - Append an event to the output. - - ***********************************************************************/ - - synchronized void append (Event event) - { - char[] msg; - - // file already full? - if (fileSize >= maxSize) - nextFile (true); - - // bump file size - fileSize += FileConst.NewlineString.length; - - // write log message and flush it - auto layout = getLayout (); - msg = layout.header (event); - fileSize += msg.length; - buffer.append (msg); - - msg = layout.content (event); - fileSize += msg.length; - buffer.append (msg); - - msg = layout.footer (event); - fileSize += msg.length; - buffer.append (msg); - - buffer.append(FileConst.NewlineString).flush; - } - - /*********************************************************************** - - Switch to the next file within the set - - ***********************************************************************/ - - private void nextFile (bool reset) - { - // select next file in the set - if (++index >= paths.length) - index = 0; - - // reset file size - fileSize = 0; - - // close any existing conduit - close; - - // make it shareable for read - auto style = FileConduit.WriteAppending; - style.share = FileConduit.Share.Read; - auto conduit = new FileConduit (paths[index], style); - - buffer = setConduit (conduit); - if (reset) - conduit.truncate; - } -} - diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/SocketAppender.d --- a/tango/tango/util/log/SocketAppender.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,126 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.SocketAppender; - -private import tango.util.log.Appender; - -private import tango.io.Buffer, - tango.io.Console; - -private import tango.net.SocketConduit, - tango.net.InternetAddress; - -/******************************************************************************* - - Appender for sending formatted output to a Socket. - -*******************************************************************************/ - -public class SocketAppender : Appender -{ - private Mask mask; - private IBuffer buffer; - private SocketConduit conduit; - private InternetAddress address; - private bool connected; - - /*********************************************************************** - - Create with the given Layout and address - - ***********************************************************************/ - - this (InternetAddress address, EventLayout layout = null) - { - setLayout (layout); - - this.address = address; - this.conduit = new SocketConduit; - this.buffer = new Buffer (conduit); - - // Get a unique fingerprint for this class - this.mask = register (address.toString); - } - - /*********************************************************************** - - Return the fingerprint for this class - - ***********************************************************************/ - - Mask getMask () - { - return mask; - } - - /*********************************************************************** - - Return the name of this class - - ***********************************************************************/ - - char[] getName () - { - return this.classinfo.name; - } - - /*********************************************************************** - - Append an event to the output. If the operations fails - we have to revert to an alternative logging strategy, - which will probably require a backup Appender specified - during construction. For now we simply echo to Cerr if - the socket has become unavailable. - - ***********************************************************************/ - - void append (Event event) - { - auto layout = getLayout(); - - if (buffer) - { - try { - if (! connected) - { - conduit.connect (address); - connected = true; - } - - buffer (layout.header (event)); - buffer (layout.content (event)); - buffer (layout.footer (event)) (); - return; - } catch (Exception e) - { - connected = false; - Cerr ("SocketAppender.append :: "~e.toString).newline; - } - } - - Cerr (layout.content(event)).newline; - } - - /*********************************************************************** - - Close the socket associated with this Appender - - ***********************************************************************/ - - void close () - { - if (conduit) - conduit.detach; - conduit = null; - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/Trace.d --- a/tango/tango/util/log/Trace.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,145 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2007 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Oct 2007: Initial release - - author: Kris - - Synchronized, formatted console output. This can be used in lieu - of true logging where appropriate. - - Trace exposes this style of usage: - --- - Trace.format ("abc {}", 1); => abc 1 - Trace.format ("abc {}:{}", 1, 2); => abc 1:2 - Trace.format ("abc {1}:{0}", 1, 2); => abc 2:1 - --- - - Special character sequences, such as "\n", are written directly to - the output without any translation (though an output-filter could - be inserted to perform translation as required). Platform-specific - newlines are generated instead via the formatln() method, which also - flushes the output when configured to do so: - --- - Trace.formatln ("hello {}", "world"); - --- - - Explicitly flushing the output is achieved via a flush() method - --- - Trace.format ("hello {}", "world").flush; - --- - -*******************************************************************************/ - -module tango.util.log.Trace; - -private import tango.io.Console; - -private import tango.io.model.IConduit; - -private import tango.text.convert.Layout; - -/******************************************************************************* - - Construct Trace when this module is loaded - -*******************************************************************************/ - -/// global trace instance -public static SyncPrint Trace; - -static this() -{ - Trace = new SyncPrint (Cerr.stream, Cerr, !Cerr.redirected); -} - -/******************************************************************************* - - Intended for internal use only - -*******************************************************************************/ - -private class SyncPrint -{ - private Object mutex; - private OutputStream output; - private Layout!(char) convert; - private bool flushLines; - - version (Win32) - private const char[] Eol = "\r\n"; - else - private const char[] Eol = "\n"; - - /********************************************************************** - - Construct a Print instance, tying the provided stream - to a layout formatter - - **********************************************************************/ - - this (OutputStream output, Object mutex, bool flush=false) - { - this.mutex = mutex; - this.output = output; - this.flushLines = flush; - this.convert = new Layout!(char); - } - - /********************************************************************** - - Layout using the provided formatting specification - - **********************************************************************/ - - final SyncPrint format (char[] fmt, ...) - { - synchronized (mutex) - convert (&sink, _arguments, _argptr, fmt); - return this; - } - - /********************************************************************** - - Layout using the provided formatting specification - - **********************************************************************/ - - final SyncPrint formatln (char[] fmt, ...) - { - synchronized (mutex) - { - convert (&sink, _arguments, _argptr, fmt); - output.write (Eol); - if (flushLines) - output.flush; - } - return this; - } - - /********************************************************************** - - Flush the output stream - - **********************************************************************/ - - final void flush () - { - synchronized (mutex) - output.flush; - } - - /********************************************************************** - - Sink for passing to the formatter - - **********************************************************************/ - - private final uint sink (char[] s) - { - return output.write (s); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/model/IHierarchy.d --- a/tango/tango/util/log/model/IHierarchy.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,77 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.model.IHierarchy; - -public import tango.util.log.model.ILevel; - -/******************************************************************************* - - The Logger hierarchy Interface. We use this to break the - interdependency between a couple of modules - -*******************************************************************************/ - -interface IHierarchy -{ - /********************************************************************** - - Return the name of this Hierarchy - - **********************************************************************/ - - char[] getName (); - - /********************************************************************** - - Return the address of this Hierarchy. This is typically - attached when sending events to remote monitors. - - **********************************************************************/ - - char[] getAddress (); - - /*********************************************************************** - - Configure a context - - ***********************************************************************/ - - void context (Context context); - - /*********************************************************************** - - Return the configured context - - ***********************************************************************/ - - Context context (); - - /*********************************************************************** - - Context for a hierarchy, used for customizing behaviour - of log hierarchies. You can use this to implement dynamic - log-levels, based upon filtering or some other mechanism - - ***********************************************************************/ - - interface Context - { - /// return a label for this context - char[] label (); - - /// first arg is the setting of the logger itself, and - /// the second arg is what kind of message we're being - /// asked to produce - bool isEnabled (ILevel.Level setting, ILevel.Level target); - } -} diff -r 76078c8ab5b9 -r 44f08170f4ef tango/tango/util/log/model/ILevel.d --- a/tango/tango/util/log/model/ILevel.d Thu Jul 31 19:14:49 2008 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,30 +0,0 @@ -/******************************************************************************* - - copyright: Copyright (c) 2004 Kris Bell. All rights reserved - - license: BSD style: $(LICENSE) - - version: Initial release: May 2004 - - author: Kris - -*******************************************************************************/ - -module tango.util.log.model.ILevel; - -/******************************************************************************* - -*******************************************************************************/ - -interface ILevel -{ - /*********************************************************************** - - These represent the standard LOG4J event levels. Note that - Debug is called Trace here, because debug is a reserved word - in D (this needs to be fixed!). - - ***********************************************************************/ - - enum Level {Trace=0, Info, Warn, Error, Fatal, None}; -} diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/alloca1.d --- a/tests/mini/alloca1.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/alloca1.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,7 +1,6 @@ module alloca1; -pragma(LLVM_internal, "alloca") -void* alloca(uint); +pragma(alloca) void* alloca(uint); extern(C) int printf(char*, ...); diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/arrays7.d --- a/tests/mini/arrays7.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/arrays7.d Fri Aug 01 00:32:06 2008 +0200 @@ -2,7 +2,6 @@ extern(C) int printf(char*, ...); -pragma(LLVM_internal, "notypeinfo") struct S { int i; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/bug44.d --- a/tests/mini/bug44.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/bug44.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module bug44; -pragma(LLVM_internal, "notypeinfo") struct rgb { long l; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/bug49.d --- a/tests/mini/bug49.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/bug49.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module bug49; -pragma(LLVM_internal, "notypeinfo") struct S { int i; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/bug50.d --- a/tests/mini/bug50.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/bug50.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,7 +1,6 @@ module bug50; extern(C) int printf(char*, ...); -pragma(LLVM_internal, "notypeinfo") struct S { int i; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/classes6.d --- a/tests/mini/classes6.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/classes6.d Fri Aug 01 00:32:06 2008 +0200 @@ -24,7 +24,7 @@ int rand(); } -import llvm.intrinsic; +import llvmdc.intrinsics; void main() { diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/intrinsics.d --- a/tests/mini/intrinsics.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/intrinsics.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,31 +1,36 @@ -import llvm.intrinsic; +import llvmdc.intrinsics; extern(C) int printf(char*,...); extern(C) int scanf(char*,...); void main() { - { float f; printf("Enter float: "); - scanf("%f", &f); - float sf = llvm_sqrt(f); + //scanf("%f", &f); + f = 1.22345; + float sf = llvm_sqrt_f32(f); printf("sqrt(%f) = %f\n", f, sf); - } - - { + double d; printf("Enter double: "); - scanf("%lf", &d); - double sd = llvm_sqrt(d); + //scanf("%lf", &d); + d = 2.2311167895435245; + double sd = llvm_sqrt_f64(d); printf("sqrt(%lf) = %lf\n", d, sd); - } - + + real r; + printf("Enter real: "); + //scanf("%lf", &d); + r = 3.2311167891231231234754764576; + version(LLVM_X86_FP80) { - real d; - printf("Enter real: "); - scanf("%lf", &d); - real sd = llvm_sqrt(d); - printf("sqrt(%lf) = %lf\n", d, sd); + real sr = llvm_sqrt_f80(r); + printf("sqrt(%llf) = %llf\n", r, sr); + } + else + { + real sr = llvm_sqrt_f64(r); + printf("sqrt(%lf) = %lf\n", r, sr); } } diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/structs7.d --- a/tests/mini/structs7.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/structs7.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module structs7; -pragma(LLVM_internal, "notypeinfo") struct S { int i; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union1.d --- a/tests/mini/union1.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union1.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module union1; -pragma(LLVM_internal, "notypeinfo") union U { float f; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union2.d --- a/tests/mini/union2.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union2.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module union2; -pragma(LLVM_internal, "notypeinfo") union U { float f; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union3.d --- a/tests/mini/union3.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union3.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module union3; -pragma(LLVM_internal, "notypeinfo") union vec3 { struct { float x,y,z; } diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union4.d --- a/tests/mini/union4.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union4.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module union4; -pragma(LLVM_internal, "notypeinfo") union U { struct { float x,y,z; } float[3] xyz; diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union5.d --- a/tests/mini/union5.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union5.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,26 +1,23 @@ module union5; -pragma(LLVM_internal, "notypeinfo") +union S { - union S - { - T t; - U u; - uint i; - struct { - ushort sl,sh; - } + T t; + U u; + uint i; + struct { + ushort sl,sh; } +} - struct T - { - int i; - } +struct T +{ + int i; +} - struct U - { - float f; - } +struct U +{ + float f; } void main() diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union6.d --- a/tests/mini/union6.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union6.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,17 +1,15 @@ module union6; -pragma(LLVM_internal, "notypeinfo") { - struct S - { - byte a; - byte b; - } - union U - { - byte a; - byte b; - S c; - } +struct S +{ + byte a; + byte b; +} +union U +{ + byte a; + byte b; + S c; } void main() diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/union7.d --- a/tests/mini/union7.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/union7.d Fri Aug 01 00:32:06 2008 +0200 @@ -1,6 +1,5 @@ module union7; -pragma(LLVM_internal, "notypeinfo") struct Union { union { diff -r 76078c8ab5b9 -r 44f08170f4ef tests/mini/vararg1.d --- a/tests/mini/vararg1.d Thu Jul 31 19:14:49 2008 +0200 +++ b/tests/mini/vararg1.d Fri Aug 01 00:32:06 2008 +0200 @@ -15,6 +15,6 @@ void main() { - int i = add(4,1,2,3,4); + int i = add(4, 1,2,3,4); assert(i == 10); }